From f23037a0ae834049b872857e13b5e5dc80194b1c Mon Sep 17 00:00:00 2001
From: Nicholas Colb
Date: Tue, 18 Aug 2026 16:10:34 -0400
Subject: [PATCH 1/8] Bump routine dependency versions
vite (direct) 7.3.1 -> 7.3.6, plus everything npm audit fix resolved
within existing major versions: rollup, minimatch, flatted, picomatch,
brace-expansion, @babel/core, esbuild, js-yaml, nanoid, and others.
No major-version crossings (eslint stays at 9.39.3, vitest at 3.2.7).
npm audit: multiple vulnerabilities -> 0.
---
package-lock.json | 913 ++++++++++++++++++++++++----------------------
package.json | 2 +-
2 files changed, 484 insertions(+), 431 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 426a7c7..99f088b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "fedspeak",
- "version": "0.1.0",
+ "version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "fedspeak",
- "version": "0.1.0",
+ "version": "1.0.0",
"license": "MIT",
"dependencies": {
"lucide-react": "^0.344.0",
@@ -33,7 +33,7 @@
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
"typescript-eslint": "^8.46.0",
- "vite": "^7.3.1",
+ "vite": "^7.3.2",
"vitest": "^3.2.4"
}
},
@@ -65,13 +65,13 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
- "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/helper-validator-identifier": "^7.29.7",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -80,9 +80,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
- "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -90,22 +90,21 @@
}
},
"node_modules/@babel/core": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
- "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-compilation-targets": "^7.28.6",
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helpers": "^7.28.6",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
"@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -122,14 +121,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.29.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
- "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -139,14 +138,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
- "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.28.6",
- "@babel/helper-validator-option": "^7.27.1",
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -156,9 +155,9 @@
}
},
"node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -166,29 +165,29 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
- "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
- "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.28.6",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.6"
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -208,9 +207,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -218,9 +217,9 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -228,9 +227,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -238,27 +237,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.29.0"
+ "@babel/types": "^7.29.8"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -300,33 +299,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
- "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/parser": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
- "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.29.0",
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.8",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.8",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8",
"debug": "^4.3.1"
},
"engines": {
@@ -334,14 +333,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -358,9 +357,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
- "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
"cpu": [
"ppc64"
],
@@ -375,9 +374,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
- "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
"cpu": [
"arm"
],
@@ -392,9 +391,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
- "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
"cpu": [
"arm64"
],
@@ -409,9 +408,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
- "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
"cpu": [
"x64"
],
@@ -426,9 +425,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
- "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
"cpu": [
"arm64"
],
@@ -443,9 +442,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
- "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
"cpu": [
"x64"
],
@@ -460,9 +459,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
- "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
"cpu": [
"arm64"
],
@@ -477,9 +476,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
- "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
"cpu": [
"x64"
],
@@ -494,9 +493,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
- "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
"cpu": [
"arm"
],
@@ -511,9 +510,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
- "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
"cpu": [
"arm64"
],
@@ -528,9 +527,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
- "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
"cpu": [
"ia32"
],
@@ -545,9 +544,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
- "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
"cpu": [
"loong64"
],
@@ -562,9 +561,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
- "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
"cpu": [
"mips64el"
],
@@ -579,9 +578,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
- "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
"cpu": [
"ppc64"
],
@@ -596,9 +595,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
- "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
"cpu": [
"riscv64"
],
@@ -613,9 +612,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
- "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
"cpu": [
"s390x"
],
@@ -630,9 +629,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
- "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
"cpu": [
"x64"
],
@@ -647,9 +646,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
"cpu": [
"arm64"
],
@@ -664,9 +663,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
- "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
"cpu": [
"x64"
],
@@ -681,9 +680,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
"cpu": [
"arm64"
],
@@ -698,9 +697,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
- "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
"cpu": [
"x64"
],
@@ -715,9 +714,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
- "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
"cpu": [
"arm64"
],
@@ -732,9 +731,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
- "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
"cpu": [
"x64"
],
@@ -749,9 +748,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
- "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
"cpu": [
"arm64"
],
@@ -766,9 +765,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
- "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
"cpu": [
"ia32"
],
@@ -783,9 +782,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
- "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
"cpu": [
"x64"
],
@@ -1086,6 +1085,26 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@napi-rs/lzma-linux-x64-gnu": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
+ "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^22.20 || ^24.12 || >=25"
+ }
+ },
"node_modules/@netlify/functions": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.2.tgz",
@@ -1187,9 +1206,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.58.0.tgz",
- "integrity": "sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz",
+ "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==",
"cpu": [
"arm"
],
@@ -1201,9 +1220,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.58.0.tgz",
- "integrity": "sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz",
+ "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==",
"cpu": [
"arm64"
],
@@ -1215,9 +1234,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.58.0.tgz",
- "integrity": "sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz",
+ "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==",
"cpu": [
"arm64"
],
@@ -1229,9 +1248,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.58.0.tgz",
- "integrity": "sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz",
+ "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==",
"cpu": [
"x64"
],
@@ -1243,9 +1262,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.58.0.tgz",
- "integrity": "sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz",
+ "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==",
"cpu": [
"arm64"
],
@@ -1257,9 +1276,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.58.0.tgz",
- "integrity": "sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz",
+ "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==",
"cpu": [
"x64"
],
@@ -1271,13 +1290,16 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.58.0.tgz",
- "integrity": "sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz",
+ "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==",
"cpu": [
"arm"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1285,13 +1307,16 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.58.0.tgz",
- "integrity": "sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz",
+ "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==",
"cpu": [
"arm"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1299,13 +1324,16 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.58.0.tgz",
- "integrity": "sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz",
+ "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1313,13 +1341,16 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.58.0.tgz",
- "integrity": "sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz",
+ "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==",
"cpu": [
"arm64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1327,13 +1358,16 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.58.0.tgz",
- "integrity": "sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz",
+ "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==",
"cpu": [
"loong64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1341,13 +1375,16 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.58.0.tgz",
- "integrity": "sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz",
+ "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==",
"cpu": [
"loong64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1355,13 +1392,16 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.58.0.tgz",
- "integrity": "sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz",
+ "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==",
"cpu": [
"ppc64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1369,13 +1409,16 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.58.0.tgz",
- "integrity": "sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz",
+ "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==",
"cpu": [
"ppc64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1383,13 +1426,16 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.58.0.tgz",
- "integrity": "sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz",
+ "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==",
"cpu": [
"riscv64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1397,13 +1443,16 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.58.0.tgz",
- "integrity": "sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz",
+ "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==",
"cpu": [
"riscv64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1411,13 +1460,16 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.58.0.tgz",
- "integrity": "sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz",
+ "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==",
"cpu": [
"s390x"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1425,13 +1477,16 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.58.0.tgz",
- "integrity": "sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz",
+ "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==",
"cpu": [
"x64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1439,13 +1494,16 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.58.0.tgz",
- "integrity": "sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz",
+ "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==",
"cpu": [
"x64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -1453,9 +1511,9 @@
]
},
"node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.58.0.tgz",
- "integrity": "sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz",
+ "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==",
"cpu": [
"x64"
],
@@ -1467,9 +1525,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.58.0.tgz",
- "integrity": "sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz",
+ "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==",
"cpu": [
"arm64"
],
@@ -1481,9 +1539,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.58.0.tgz",
- "integrity": "sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz",
+ "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==",
"cpu": [
"arm64"
],
@@ -1495,9 +1553,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.58.0.tgz",
- "integrity": "sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz",
+ "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==",
"cpu": [
"ia32"
],
@@ -1509,9 +1567,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.58.0.tgz",
- "integrity": "sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz",
+ "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==",
"cpu": [
"x64"
],
@@ -1523,9 +1581,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.58.0.tgz",
- "integrity": "sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz",
+ "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==",
"cpu": [
"x64"
],
@@ -1600,9 +1658,9 @@
"license": "MIT"
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"dev": true,
"license": "MIT"
},
@@ -1619,7 +1677,6 @@
"integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -1637,7 +1694,6 @@
"integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.2.2"
@@ -1698,7 +1754,6 @@
"integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.56.0",
"@typescript-eslint/types": "8.56.0",
@@ -1843,9 +1898,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+ "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1853,13 +1908,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -1958,9 +2013,9 @@
}
},
"node_modules/@vitest/coverage-v8": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz",
- "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.7.tgz",
+ "integrity": "sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1982,8 +2037,8 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "3.2.4",
- "vitest": "3.2.4"
+ "@vitest/browser": "3.2.7",
+ "vitest": "3.2.7"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -1992,15 +2047,15 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
- "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz",
+ "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -2009,13 +2064,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
- "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz",
+ "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.4",
+ "@vitest/spy": "3.2.7",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -2036,9 +2091,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
- "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz",
+ "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2049,13 +2104,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
- "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz",
+ "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.4",
+ "@vitest/utils": "3.2.7",
"pathe": "^2.0.3",
"strip-literal": "^3.0.0"
},
@@ -2064,13 +2119,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
- "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz",
+ "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.4",
+ "@vitest/pretty-format": "3.2.7",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -2079,9 +2134,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
- "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz",
+ "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2092,14 +2147,13 @@
}
},
"node_modules/@vitest/ui": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.4.tgz",
- "integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.7.tgz",
+ "integrity": "sha512-eVtcpJXGhS0GjMuHROfbXLhlxooyUcuip8GNzzjDD5jzafZqzanJH4W3VGmUxHNx4fv6qQGUGJHRpGUdj+9D6Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@vitest/utils": "3.2.4",
+ "@vitest/utils": "3.2.7",
"fflate": "^0.8.2",
"flatted": "^3.3.3",
"pathe": "^2.0.3",
@@ -2111,17 +2165,17 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "vitest": "3.2.4"
+ "vitest": "3.2.7"
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
- "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz",
+ "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.4",
+ "@vitest/pretty-format": "3.2.7",
"loupe": "^3.1.4",
"tinyrainbow": "^2.0.0"
},
@@ -2135,7 +2189,6 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2334,9 +2387,9 @@
}
},
"node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
+ "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2377,7 +2430,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -2695,9 +2747,9 @@
"license": "MIT"
},
"node_modules/esbuild": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
- "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2708,32 +2760,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.27.3",
- "@esbuild/android-arm": "0.27.3",
- "@esbuild/android-arm64": "0.27.3",
- "@esbuild/android-x64": "0.27.3",
- "@esbuild/darwin-arm64": "0.27.3",
- "@esbuild/darwin-x64": "0.27.3",
- "@esbuild/freebsd-arm64": "0.27.3",
- "@esbuild/freebsd-x64": "0.27.3",
- "@esbuild/linux-arm": "0.27.3",
- "@esbuild/linux-arm64": "0.27.3",
- "@esbuild/linux-ia32": "0.27.3",
- "@esbuild/linux-loong64": "0.27.3",
- "@esbuild/linux-mips64el": "0.27.3",
- "@esbuild/linux-ppc64": "0.27.3",
- "@esbuild/linux-riscv64": "0.27.3",
- "@esbuild/linux-s390x": "0.27.3",
- "@esbuild/linux-x64": "0.27.3",
- "@esbuild/netbsd-arm64": "0.27.3",
- "@esbuild/netbsd-x64": "0.27.3",
- "@esbuild/openbsd-arm64": "0.27.3",
- "@esbuild/openbsd-x64": "0.27.3",
- "@esbuild/openharmony-arm64": "0.27.3",
- "@esbuild/sunos-x64": "0.27.3",
- "@esbuild/win32-arm64": "0.27.3",
- "@esbuild/win32-ia32": "0.27.3",
- "@esbuild/win32-x64": "0.27.3"
+ "@esbuild/aix-ppc64": "0.28.2",
+ "@esbuild/android-arm": "0.28.2",
+ "@esbuild/android-arm64": "0.28.2",
+ "@esbuild/android-x64": "0.28.2",
+ "@esbuild/darwin-arm64": "0.28.2",
+ "@esbuild/darwin-x64": "0.28.2",
+ "@esbuild/freebsd-arm64": "0.28.2",
+ "@esbuild/freebsd-x64": "0.28.2",
+ "@esbuild/linux-arm": "0.28.2",
+ "@esbuild/linux-arm64": "0.28.2",
+ "@esbuild/linux-ia32": "0.28.2",
+ "@esbuild/linux-loong64": "0.28.2",
+ "@esbuild/linux-mips64el": "0.28.2",
+ "@esbuild/linux-ppc64": "0.28.2",
+ "@esbuild/linux-riscv64": "0.28.2",
+ "@esbuild/linux-s390x": "0.28.2",
+ "@esbuild/linux-x64": "0.28.2",
+ "@esbuild/netbsd-arm64": "0.28.2",
+ "@esbuild/netbsd-x64": "0.28.2",
+ "@esbuild/openbsd-arm64": "0.28.2",
+ "@esbuild/openbsd-x64": "0.28.2",
+ "@esbuild/openharmony-arm64": "0.28.2",
+ "@esbuild/sunos-x64": "0.28.2",
+ "@esbuild/win32-arm64": "0.28.2",
+ "@esbuild/win32-ia32": "0.28.2",
+ "@esbuild/win32-x64": "0.28.2"
}
},
"node_modules/escalade": {
@@ -2765,7 +2817,6 @@
"integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -3083,9 +3134,9 @@
}
},
"node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
"dev": true,
"license": "ISC"
},
@@ -3191,9 +3242,9 @@
}
},
"node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+ "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3201,13 +3252,13 @@
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -3451,7 +3502,6 @@
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -3463,10 +3513,20 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -3703,9 +3763,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3755,9 +3815,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"dev": true,
"funding": [
{
@@ -3963,9 +4023,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3996,9 +4056,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
"dev": true,
"funding": [
{
@@ -4015,9 +4075,8 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.17",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -4205,7 +4264,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -4218,7 +4276,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -4238,9 +4295,9 @@
}
},
"node_modules/react-router": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz",
- "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==",
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.2.tgz",
+ "integrity": "sha512-aUVMjFm3GAPTTZL7oYr5E7ETiqfQCHRLH+B+5afnICvf0r7kkK4eR6SMuwbSTJw/7t+12khT/Kahij49fqOCIg==",
"license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
@@ -4260,12 +4317,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz",
- "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==",
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.2.tgz",
+ "integrity": "sha512-AIKJ/jgGlFb3EbfCXk5Gzshiwt+l3mqbCrNjmEWMMjqQxNJ3svBa6bgzFyCC2Sw3RA0VWF1kg3uQf2OFhxb8hw==",
"license": "MIT",
"dependencies": {
- "react-router": "7.13.0"
+ "react-router": "7.18.2"
},
"engines": {
"node": ">=20.0.0"
@@ -4341,13 +4398,13 @@
}
},
"node_modules/rollup": {
- "version": "4.58.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.58.0.tgz",
- "integrity": "sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==",
+ "version": "4.62.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz",
+ "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
+ "@types/estree": "1.0.9"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -4357,31 +4414,32 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.58.0",
- "@rollup/rollup-android-arm64": "4.58.0",
- "@rollup/rollup-darwin-arm64": "4.58.0",
- "@rollup/rollup-darwin-x64": "4.58.0",
- "@rollup/rollup-freebsd-arm64": "4.58.0",
- "@rollup/rollup-freebsd-x64": "4.58.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.58.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.58.0",
- "@rollup/rollup-linux-arm64-gnu": "4.58.0",
- "@rollup/rollup-linux-arm64-musl": "4.58.0",
- "@rollup/rollup-linux-loong64-gnu": "4.58.0",
- "@rollup/rollup-linux-loong64-musl": "4.58.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.58.0",
- "@rollup/rollup-linux-ppc64-musl": "4.58.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.58.0",
- "@rollup/rollup-linux-riscv64-musl": "4.58.0",
- "@rollup/rollup-linux-s390x-gnu": "4.58.0",
- "@rollup/rollup-linux-x64-gnu": "4.58.0",
- "@rollup/rollup-linux-x64-musl": "4.58.0",
- "@rollup/rollup-openbsd-x64": "4.58.0",
- "@rollup/rollup-openharmony-arm64": "4.58.0",
- "@rollup/rollup-win32-arm64-msvc": "4.58.0",
- "@rollup/rollup-win32-ia32-msvc": "4.58.0",
- "@rollup/rollup-win32-x64-gnu": "4.58.0",
- "@rollup/rollup-win32-x64-msvc": "4.58.0",
+ "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
+ "@rollup/rollup-android-arm-eabi": "4.62.4",
+ "@rollup/rollup-android-arm64": "4.62.4",
+ "@rollup/rollup-darwin-arm64": "4.62.4",
+ "@rollup/rollup-darwin-x64": "4.62.4",
+ "@rollup/rollup-freebsd-arm64": "4.62.4",
+ "@rollup/rollup-freebsd-x64": "4.62.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.62.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.62.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.62.4",
+ "@rollup/rollup-linux-arm64-musl": "4.62.4",
+ "@rollup/rollup-linux-loong64-gnu": "4.62.4",
+ "@rollup/rollup-linux-loong64-musl": "4.62.4",
+ "@rollup/rollup-linux-ppc64-gnu": "4.62.4",
+ "@rollup/rollup-linux-ppc64-musl": "4.62.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.62.4",
+ "@rollup/rollup-linux-riscv64-musl": "4.62.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.62.4",
+ "@rollup/rollup-linux-x64-gnu": "4.62.4",
+ "@rollup/rollup-linux-x64-musl": "4.62.4",
+ "@rollup/rollup-openbsd-x64": "4.62.4",
+ "@rollup/rollup-openharmony-arm64": "4.62.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.62.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.62.4",
+ "@rollup/rollup-win32-x64-gnu": "4.62.4",
+ "@rollup/rollup-win32-x64-msvc": "4.62.4",
"fsevents": "~2.3.2"
}
},
@@ -4756,9 +4814,9 @@
}
},
"node_modules/test-exclude/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+ "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4766,13 +4824,13 @@
}
},
"node_modules/test-exclude/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -4854,12 +4912,11 @@
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -4959,7 +5016,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -5055,14 +5111,13 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
- "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "version": "7.3.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
+ "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "esbuild": "^0.27.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
"fdir": "^6.5.0",
"picomatch": "^4.0.3",
"postcss": "^8.5.6",
@@ -5172,12 +5227,11 @@
}
},
"node_modules/vite/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -5186,21 +5240,20 @@
}
},
"node_modules/vitest": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
- "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz",
+ "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.4",
- "@vitest/mocker": "3.2.4",
- "@vitest/pretty-format": "^3.2.4",
- "@vitest/runner": "3.2.4",
- "@vitest/snapshot": "3.2.4",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
+ "@vitest/expect": "3.2.7",
+ "@vitest/mocker": "3.2.7",
+ "@vitest/pretty-format": "^3.2.7",
+ "@vitest/runner": "3.2.7",
+ "@vitest/snapshot": "3.2.7",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
"chai": "^5.2.0",
"debug": "^4.4.1",
"expect-type": "^1.2.1",
@@ -5230,8 +5283,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.4",
- "@vitest/ui": "3.2.4",
+ "@vitest/browser": "3.2.7",
+ "@vitest/ui": "3.2.7",
"happy-dom": "*",
"jsdom": "*"
},
@@ -5260,9 +5313,9 @@
}
},
"node_modules/vitest/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/package.json b/package.json
index 60a3eb7..dbb771d 100644
--- a/package.json
+++ b/package.json
@@ -59,7 +59,7 @@
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
"typescript-eslint": "^8.46.0",
- "vite": "^7.3.1",
+ "vite": "^7.3.2",
"vitest": "^3.2.4"
}
}
From b5b422c34a4961fcde325bb473d8c91a77013d1c Mon Sep 17 00:00:00 2001
From: Dylan Nguyen
Date: Tue, 1 Sep 2026 13:45:57 -0400
Subject: [PATCH 2/8] docs: add ChallengeAI federal delivery layer
---
.challengeai/challenge-ac.md | 85 +++++++++++++++++
.challengeai/challenge-api.md | 104 ++++++++++++++++++++
.challengeai/challenge-ato.md | 90 ++++++++++++++++++
.challengeai/challenge-cd.md | 108 +++++++++++++++++++++
.challengeai/challenge-ci.md | 96 +++++++++++++++++++
.challengeai/challenge-cli.md | 60 ++++++++++++
.challengeai/challenge-ea.md | 105 ++++++++++++++++++++
.challengeai/challenge-iac.md | 95 ++++++++++++++++++
.challengeai/challenge-melt.md | 94 ++++++++++++++++++
.challengeai/challenge-sql.md | 96 +++++++++++++++++++
.challengeai/challenge-tdd.md | 87 +++++++++++++++++
.challengeai/challenge-ui.md | 113 ++++++++++++++++++++++
.challengeai/federal-context.md | 164 ++++++++++++++++++++++++++++++++
.challengeai/profile.yml | 94 ++++++++++++++++++
CHALLENGEAI.md | 58 +++++++++++
CLAUDE.md | 3 +
16 files changed, 1452 insertions(+)
create mode 100644 .challengeai/challenge-ac.md
create mode 100644 .challengeai/challenge-api.md
create mode 100644 .challengeai/challenge-ato.md
create mode 100644 .challengeai/challenge-cd.md
create mode 100644 .challengeai/challenge-ci.md
create mode 100644 .challengeai/challenge-cli.md
create mode 100644 .challengeai/challenge-ea.md
create mode 100644 .challengeai/challenge-iac.md
create mode 100644 .challengeai/challenge-melt.md
create mode 100644 .challengeai/challenge-sql.md
create mode 100644 .challengeai/challenge-tdd.md
create mode 100644 .challengeai/challenge-ui.md
create mode 100644 .challengeai/federal-context.md
create mode 100644 .challengeai/profile.yml
create mode 100644 CHALLENGEAI.md
diff --git a/.challengeai/challenge-ac.md b/.challengeai/challenge-ac.md
new file mode 100644
index 0000000..0632760
--- /dev/null
+++ b/.challengeai/challenge-ac.md
@@ -0,0 +1,85 @@
+# ChallengeAC
+
+Agile artifacts: whether what was asked for can be traced to what was built.
+
+## Covers
+
+Acceptance criteria, requirement traceability, ambiguity in what was requested,
+and audit readiness of the delivery record.
+
+## The requirement
+
+SP 800-53 Rev. 5 System and Services Acquisition (SA-3, system development life
+cycle) and Configuration Management (CM-3, change control). An assessor asks how
+the team knows it built what was asked for, and how a change was decided.
+
+## Traceability without ceremony
+
+The requirement is that a capability can be traced to its implementation and its
+test. It is not that a particular artifact exists before work starts.
+
+A traceability record written as the work lands describes the system, so it
+survives an assessment as written. A backlog written ahead of the work describes
+intent, which drifts from what shipped and has to be reconciled against reality
+before an assessor can use it. Either can satisfy the requirement; only one is
+accurate by construction.
+
+Where the record claims a capability is complete, that claim is checkable. A
+partial state written honestly, with a sentence on the shortfall, reads better in
+assessment than a completion that an assessor disproves.
+
+## Change control
+
+An assessor asking how a change was controlled is asking for a durable record
+that shows what changed, who approved it, and how it was verified. A pull
+request carrying one concern, with review and conversation resolution required,
+answers that. A pull request carrying several makes the record of why any one of
+them landed ambiguous.
+
+## In this repository
+
+FedSpeak has no formal traceability record — no requirements table, no linked
+issue tracker mapping capability to implementation to test. What it has
+instead is lightweight but real: `.github/ISSUE_TEMPLATE/add_acronym.md`
+structures every acronym-addition request into a fixed shape (acronym, full
+name, description, agency, category, source), and `.github/pull_request_template.md`
+requires the PR itself to check off `lint`, `typecheck`, `test:run`, and
+`build` before merge — that's the closest thing to a change-verification
+record this repo has, and it's checked by the contributor, not enforced by
+CI status alone (CI does run these same four independently, so a checked box
+that doesn't match the CI result is visible). There's no traceability record
+mapping any of the three named test files (`decoder.test.ts`,
+`encoder.test.ts`, `truncate.test.ts`) to a specific capability beyond the
+tests' own names and structure.
+
+Whether one PR carries one concern, review approval is required, or
+conversation resolution is enforced before merge to `main` is not verified —
+see `profile.yml`'s `gates` section for what's actually confirmed versus what
+`CONTRIBUTING.md`/`CLAUDE.md` describe as the intended workflow.
+
+## Evidence
+
+- A traceability record mapping each capability to its implementation and test,
+ with honest states rather than aspirational ones.
+- Change history, one concern per change, with the verification recorded.
+- Review approval and conversation resolution enforced rather than optional.
+
+FedSpeak's evidence here is thin by the standard above: the PR template's
+checklist and the issue template's fixed schema are the whole of it. Test
+files exist and are real, but nothing maps a specific test to a specific
+capability by name.
+
+## Review checklist
+
+- Does the capability that just landed appear in the traceability record,
+ naming its implementation and its test?
+- Does the record claim completion for something only partly built?
+- Does the change record say how it was verified?
+- Is more than one concern bundled here, making the record of why it landed
+ ambiguous?
+- Was something ambiguous resolved by asking, or by guessing and documenting the
+ guess?
+- **FedSpeak-specific:** does a new acronym entry follow
+ `add_acronym.md`'s fixed schema, and is its source cited in the issue or PR
+ description? An entry added without a source is unverifiable content in a
+ reference tool whose entire value is accuracy.
diff --git a/.challengeai/challenge-api.md b/.challengeai/challenge-api.md
new file mode 100644
index 0000000..e172fe5
--- /dev/null
+++ b/.challengeai/challenge-api.md
@@ -0,0 +1,104 @@
+# ChallengeAPI
+
+The API: its contract, what it accepts, and what it discloses.
+
+## Covers
+
+API contracts, input validation, interoperability, versioning, rate limiting,
+and federal API governance.
+
+## The requirement
+
+- **SP 800-53 Rev. 5** System and Communications Protection (SC) and System and
+ Information Integrity (SI-10, input validation).
+- **The Federal Source Code Policy and API guidance** expect government APIs to
+ be documented, versioned, and stable for the people who build against them.
+- **OMB guidance on open data** expects machine-readable access where the data
+ is public.
+
+## The contract
+
+An API is a promise to people who cannot be consulted before it changes.
+
+- **Versioned in the path**, moving independently of the product release, so
+ adding a version does not by itself require a major release of the system.
+- **Published as a machine-readable document**, so a client can generate against
+ it rather than read prose.
+- **Validated at the edge of the process.** Every parameter is parsed and
+ bounded before it reaches a query. Unbounded pagination and unbounded result
+ sizes are both denial-of-service vectors and cost vectors.
+- **Health reported against dependencies**, not just process liveness. A process
+ that is up and cannot reach its data is not healthy.
+- **Rate limited at the edge**, so a burst is refused rather than queued.
+
+## Errors
+
+An error names what was wrong with the request without describing the internals
+of the system. A stack trace, a driver message, or a query fragment in a
+response body is an information disclosure finding.
+
+## In this repository
+
+FedSpeak's is a genuinely public API — two routes, `POST/GET /api/decode` and
+`POST/GET /api/encode` (`netlify/functions/decode.ts`, `encode.ts`, redirected
+from `/api/*` to `/.netlify/functions/*` in `netlify.toml`), each accepting a
+single lookup (`acronym`/`name`) or a text-scan request (`text`), backed by
+the same static `src/shared/data/acronyms.json` the website and npm package
+read directly.
+
+- **Versioning:** none in the path — `/api/decode` and `/api/encode` carry no
+ version segment. `public/openapi.json`'s own `info.version` field says
+ `"0.1.0"`, while `package.json` and `cli-package/package.json` both say
+ `"1.0.0"` — a real drift between the published contract document's stated
+ version and the actual product version, confirmed by reading both files
+ directly.
+- **Published as a machine-readable document:** yes, genuinely —
+ `public/openapi.json` is a real OpenAPI 3.1 spec with both routes, request
+ schemas, and examples, served as a static file. It just isn't kept in sync
+ on the version number above.
+- **Validated at the edge:** partially. Both handlers correctly reject a
+ missing `acronym`/`name`/`text` with a 400 and a usage example. Neither
+ bounds the *length* of an incoming `text` parameter before it reaches
+ `scanText`/`scanTextForNames` (`src/shared/decoder.ts`,
+ `src/shared/encoder.ts`) — `scanTextForNames` in particular sorts and
+ substring-searches the full acronym set (1,119 entries) against the
+ supplied text on every call. An arbitrarily large `text` body is accepted
+ and processed with no length cap found in either function or either
+ handler — an unbounded-input-size gap in the sense this tool's "requirement"
+ section describes, even though the low-value target likely makes it low
+ severity in practice.
+- **Health:** no health endpoint of any kind was found — no `/api/health`,
+ no dependency check. There's also no external dependency to check against;
+ the data is a file bundled into the function's own deployment, not a
+ network call, so "health" here would only ever be process liveness, which
+ Netlify's own platform already reports.
+- **Rate limiting:** none found — no rate-limit logic in either handler, no
+ Netlify-level configuration in `netlify.toml`. `SECURITY.md` names "no
+ authentication" as a deliberate design choice but doesn't address rate
+ limiting or abuse at all.
+
+## Evidence
+
+- The published contract document.
+- Route tests exercising the documented behaviour, including failure cases.
+
+`public/openapi.json` is real, versioned-if-stale evidence of the contract.
+Route-level test coverage is indirect: `tests/decoder.test.ts` and
+`tests/encoder.test.ts` exercise the shared `decode`/`encode`/`scanText`
+functions the handlers call, including edge cases, but nothing in `tests/`
+invokes `netlify/functions/decode.ts`/`encode.ts` directly — the handler's
+own request-parsing, CORS headers, and error-status logic (405, 400, 500)
+aren't covered by anything in the test suite as of this writing.
+
+## Review checklist
+
+- Is every new parameter validated and bounded?
+- Does a new route appear in the contract document in the same pull request?
+- Does an error response leak an internal detail?
+- Does a change alter the shape of an existing response? That is a breaking
+ change to a published contract, and it belongs behind a new version.
+- Is anything personal placed in a URL, where it reaches logs and history?
+- **FedSpeak-specific:** does `public/openapi.json`'s `info.version` get
+ bumped in the same PR as a `package.json` version bump? Nothing currently
+ enforces that the two stay in sync, and they're already out of sync as of
+ this writing.
diff --git a/.challengeai/challenge-ato.md b/.challengeai/challenge-ato.md
new file mode 100644
index 0000000..364e5f5
--- /dev/null
+++ b/.challengeai/challenge-ato.md
@@ -0,0 +1,90 @@
+# ChallengeATO
+
+Authorization readiness: whether this system could be assessed today and whether
+the evidence would hold.
+
+## Covers
+
+Control traceability, evidence sufficiency, the security package, the privacy
+assessment, and bounded penetration testing against a running instance.
+
+## The requirement
+
+- **FISMA** requires federal systems to implement an information security
+ program and to be authorized before operating.
+- **NIST SP 800-37 Rev. 2** defines the Risk Management Framework.
+- **FIPS 199** categorizes the system as low, moderate, or high impact. The
+ categorization drives everything downstream, and it is recorded in
+ `profile.yml`.
+- **NIST SP 800-53 Rev. 5** provides the control baseline the categorization
+ selects.
+- **NIST SP 800-53A Rev. 5** provides the procedures an assessor uses.
+- **The E-Government Act** requires a Privacy Impact Assessment where a
+ system handles information **in identifiable form** — not merely
+ information "about" individuals in aggregate — or initiates a qualifying
+ electronic collection from ten or more non-federal persons.
+
+## The package
+
+A security package is a set, numbered so it can be handed over as one. The
+System Security Plan describes the system, its boundary, and how each control is
+met. Around it sit the assessment plan and report, the plan of action and
+milestones, the risk assessment, the contingency and incident response plans,
+configuration management, access control policy, continuous monitoring, and the
+privacy impact assessment.
+
+The boundary described in the SSP is the boundary the system actually
+provisions. Anything outside it is inherited from the provider's own
+authorization and is named as inherited rather than claimed.
+
+## In this repository
+
+FedSpeak has none of this, deliberately rather than by oversight — no
+`docs/security/`, no SSP, no FIPS-199 categorization, no POA&M. It is not a
+federal information system: no agency operates it, it carries no data on an
+agency's behalf, and MetaPhase has not pursued an ATO for it. `profile.yml`
+records `control_baseline: null` and `impact_level: null` to say exactly
+that — "not pursued," not "unassessed and pending."
+
+What FedSpeak has instead is `SECURITY.md`, a standard open-source
+vulnerability-disclosure policy (report via a GitHub Issue tagged `security`,
+or GitHub's private vulnerability reporting; 48-hour acknowledgment target).
+`SECURITY.md`'s own "Scope" section is an honest, narrow self-assessment —
+"public, read-only reference tool... no authentication... no user accounts...
+no database" — and it holds up against the actual code: no auth anywhere in
+`netlify/functions/`, no persistence beyond the committed
+`src/shared/data/acronyms.json`, no environment variables or secrets required
+to run it (confirmed: no `.env` file, no secret references in the Netlify
+functions or `netlify.toml`).
+
+## Evidence
+
+- Pipeline output produced on every run: scan results, test reports, and a
+ component inventory.
+- A traceability record mapping each capability to its implementation and test.
+- A reviewable record of the deployed configuration, so the boundary can be
+ checked rather than taken on description.
+
+FedSpeak's CI (`ci.yml`) produces none of the first category — no security
+scan runs on a pull request or push at all; `dependency-hygiene.yml`'s
+weekly `npm audit` is the only scan of any kind, and it's advisory
+(`continue-on-error: true`) and never runs against a PR. Test output exists
+(`npm run test:run` in CI) but isn't retained as an artifact. The "reviewable
+record of deployed configuration" is effectively `netlify.toml` plus
+Netlify's own dashboard — there's no infrastructure-as-code to inspect (see
+ChallengeIaC).
+
+## Review checklist
+
+- Does the SSP describe the system as it is now, or as it was at the last
+ release?
+- Is every control claim backed by something a reader can open?
+- Does the boundary in the SSP match what is actually provisioned?
+- Has the data model started handling personal information the PIA does not
+ mention?
+- **A weakness, POA&M item, or vulnerability goes into a security document only
+ with explicit approval.** Cataloguing theoretical gaps manufactures a record
+ of insecurity. State what is implemented; independent assessment produces the
+ authoritative findings. FedSpeak has no security document to add one to —
+ a real vulnerability report belongs in `SECURITY.md`'s own disclosure
+ process (a GitHub Security Advisory), not fabricated here.
diff --git a/.challengeai/challenge-cd.md b/.challengeai/challenge-cd.md
new file mode 100644
index 0000000..f31413b
--- /dev/null
+++ b/.challengeai/challenge-cd.md
@@ -0,0 +1,108 @@
+# ChallengeCD
+
+Deployment: whether a release can be made safely and undone quickly.
+
+## Covers
+
+Rollout safety, rollback readiness, secrets handling, and the operational
+controls around putting a change in front of users.
+
+## The requirement
+
+SP 800-53 Rev. 5 Configuration Management (CM-3 change control, CM-5 access
+restrictions for change) and Contingency Planning (CP-10 system recovery). An
+authorized system must be able to show that changes are controlled and that a
+bad change can be reversed.
+
+## Know where the risk is actually taken
+
+Every deployment model takes the risk somewhere. What matters is that everyone
+knows where, because a branch treated as a safety gate that does not gate
+anything is worse than no gate: it produces confidence without protection.
+
+Where a promotion redeploys code that is already live, the promotion names a
+version rather than de-risking anything, and the risk was taken earlier.
+
+## Rollout and rollback
+
+- **Health-gated rollout**, so a release that never passes its health check
+ reverses itself rather than waiting to be noticed.
+- **Rollback documented and rehearsed.** A procedure that has never been run is
+ a hypothesis.
+- **Credentials from short-lived federated identity**, so no long-lived key
+ exists to leak or rotate.
+
+A change that cannot be rolled back without also reversing a data migration is
+a different class of change, and saying so at review time is the point.
+
+## In this repository
+
+FedSpeak has two genuinely separate deployment paths that don't share the
+same rigor, and this section names both honestly.
+
+**The website + API** deploy via Netlify's own GitHub App integration — a
+push to `main` (production) or `dev` (per `CLAUDE.md`'s branching section,
+though `netlify.toml` doesn't distinguish branch contexts) triggers a
+Netlify build and deploy directly, entirely outside GitHub Actions. There is
+no health-gated rollout: Netlify's default deploy model replaces the live
+site once the build succeeds, with no automated check of the *deployed*
+result before it goes live to all traffic. Rollback is whatever Netlify's
+own dashboard provides (redeploying a previous deploy from its deploy
+history) — a real capability, but not documented anywhere in this
+repository as a runbook, and not something this repository's CI performs or
+verifies.
+
+**The npm packages** (`fedspeak` and `@metaphase-tech/fedspeak`, both
+confirmed live on the registry at `1.0.0`) are not published by CI at all —
+no workflow in `.github/workflows/` runs `npm publish` or references an npm
+token. Publishing is a manual, undocumented-in-repo process:
+`scripts/sync-cli-package.sh` copies `src/shared/*` into `cli-package/`, and
+someone presumably runs `npm publish` from there by hand afterward — this
+step, and who's authorized to run it, isn't written down anywhere in
+`CONTRIBUTING.md` or `CLAUDE.md`.
+
+## Secrets
+
+Secrets reach the running system at start from a secret store, never from the
+repository and never from a build artifact. The repository is scanned on every
+push and on a schedule, and a verified finding fails the build.
+
+A value inlined at build time is baked into whatever ships and is readable by
+anyone holding the artifact. That can be an acceptable trade, but it is a
+decision to make deliberately rather than discover.
+
+FedSpeak needs none of this machinery because it holds no secrets at all —
+confirmed directly: no `.env` file or `.env.example`, no environment
+variable referenced in `netlify/functions/`, `src/`, or `netlify.toml`, and
+`CLAUDE.md`/`SECURITY.md` both state this explicitly ("No secrets or env
+vars needed"). The npm publish step above would need an npm auth token
+somewhere on whoever's machine runs it, but that credential lives outside
+this repository entirely — not in CI, not in a GitHub secret.
+
+## Evidence
+
+- Deploy runs recorded per change and retained.
+- A release runbook carrying the verification commands and the rollback
+ procedure.
+- Whatever the platform keeps as the previous good revision is the rollback
+ record.
+
+Netlify retains its own deploy history (visible in Netlify's dashboard, not
+in this repository), which functions as the rollback record by platform
+default. There is no release runbook in this repository for either the
+website/API path or the npm-publish path.
+
+## Review checklist
+
+- Does the deploy watch its own run with a failure exit status? A watch that
+ returns success whichever way the run ended will let a failed deploy be tagged
+ as a release.
+- Is the run identified by commit rather than by branch? A branch filter asked
+ seconds after a merge returns the previous run, which is already green.
+- Can this change be rolled back without a data migration being reversed? If
+ not, say so in the pull request.
+- Does anything new read a secret at build time rather than at run time?
+- **FedSpeak-specific:** if a PR changes `src/shared/`, does the same PR (or
+ a documented follow-up) run `scripts/sync-cli-package.sh` before the next
+ npm publish? A merged fix that never gets synced into `cli-package/` ships
+ to the website and API but not to either published npm package.
diff --git a/.challengeai/challenge-ci.md b/.challengeai/challenge-ci.md
new file mode 100644
index 0000000..1ba1d70
--- /dev/null
+++ b/.challengeai/challenge-ci.md
@@ -0,0 +1,96 @@
+# ChallengeCI
+
+The pipeline: what it proves, and whether it can be bypassed.
+
+## Covers
+
+Workflow hardening, evidence gates, security scanning, and the release controls
+that make a merge into a protected branch mean something.
+
+## The requirement
+
+SP 800-53 Rev. 5 control families, principally Configuration Management (CM),
+System and Information Integrity (SI), and Risk Assessment (RA). An assessor
+asks how change is controlled and how flaws are found; a pipeline that gates on
+both answers the question with artifacts instead of assertions.
+
+## Gates and reports
+
+A gate blocks a merge. A report informs one. Both are useful and they are not
+interchangeable, so which is which is a decision rather than an accident of
+configuration.
+
+The gates worth having cover: that the code compiles, conforms and behaves; that
+the artifact can actually be produced; that the system works end to end; that
+every rendered route passes accessibility; that no dependency carries a high or
+critical advisory; and that no verified secret reached the history.
+
+Which of those block, and which report, is declared in `profile.yml` so the
+answer is written down rather than inferred from workflow files.
+
+## Hardening
+
+- Workflow permissions are least privilege, declared per workflow rather than
+ inherited.
+- Actions are pinned, and raised on a schedule.
+- Deploy credentials come from short-lived federated identity rather than a
+ long-lived key held in the repository or in secrets.
+- The pipeline runs on pull requests from forks without secrets in scope.
+
+## In this repository
+
+FedSpeak has exactly two workflows: `ci.yml` (lint, typecheck, test, build —
+on push to `main`/`dev` and PR to `main`) and `dependency-hygiene.yml`
+(`npm audit` + `npm outdated`, weekly cron + manual dispatch only). That's
+the entire gate list — see `profile.yml`'s `gates` section for the checks/
+advisory split. Against this tool's list of "gates worth having": compile/
+conform/behave is covered (lint, typecheck, test), the artifact-can-be-built
+check is covered (`npm run build`), but **there is no end-to-end test, no
+accessibility check, and no dependency/security scan on any pull request or
+push** — the only scan that exists (`npm audit`) runs on a weekly schedule
+with `continue-on-error: true`, never against a PR, so a vulnerable
+dependency introduced in a PR would merge without CI ever flagging it there.
+No secret-scanning of any kind (verified push-protection, gitleaks,
+trufflehog, or similar) was found in either workflow or in repo settings
+reachable from here.
+
+- **Workflow permissions:** neither workflow declares a `permissions:` block
+ — both run under whatever default `GITHUB_TOKEN` permissions the
+ organization has set, not a least-privilege grant declared explicitly in
+ the workflow file itself.
+- **Action pinning:** `actions/checkout@v4` and `actions/setup-node@v4` are
+ pinned to major-version tags, not to a commit SHA — a floating reference
+ that moves as GitHub publishes new `v4` releases, not an immutable pin.
+ Nothing in this repository raises action versions on a schedule (no
+ Dependabot config for GitHub Actions was found; `.github/` has no
+ `dependabot.yml` at all).
+- **Deploy credentials:** CI itself never deploys — no deploy step, no
+ secrets referenced in either workflow. Deployment is Netlify's own
+ GitHub-App-based auto-deploy (triggered by the push itself, outside GitHub
+ Actions entirely), so there's no CI-held credential to secure or rotate in
+ the first place — see ChallengeCD.
+- **Fork PRs:** since neither workflow uses any secret, running on a PR from
+ a fork carries no secret-exposure risk regardless of trigger configuration.
+
+## Evidence
+
+Each run uploads its reports, and they are retained long enough to be asked for.
+Coverage is surfaced on the change itself rather than only in a log.
+
+FedSpeak's CI uploads no artifacts at all — no coverage report, no build
+output, no scan report. Everything that ran is visible only in the raw
+Actions log for as long as GitHub retains it.
+
+## Review checklist
+
+- Does a new job have wider permissions than it needs?
+- Is a new action pinned?
+- Did a required check get renamed? The name is what branch protection matches,
+ so renaming one silently stops it gating.
+- Does a job that cannot fail still report, so a required check is satisfied
+ rather than left pending forever?
+- Does the gate list in `profile.yml` still match what the pipeline runs?
+- **FedSpeak-specific:** does a new PR introduce a dependency with a known
+ high/critical advisory? Nothing in the PR pipeline itself would catch
+ this — only the weekly, non-blocking `dependency-hygiene.yml` run would,
+ potentially days later.
diff --git a/.challengeai/challenge-cli.md b/.challengeai/challenge-cli.md
new file mode 100644
index 0000000..697e56b
--- /dev/null
+++ b/.challengeai/challenge-cli.md
@@ -0,0 +1,60 @@
+# ChallengeCLI
+
+The accelerator itself: the layer that carries the standards in this folder into
+Claude and Codex so the work arrives shaped by them.
+
+## Covers
+
+Cross-runtime operation. The same guidance drives both runtimes, which is why
+the federal layer lives in `.challengeai/` and the agent files point at it
+rather than restating it.
+
+## The requirement
+
+None directly. ChallengeCLI is delivery tooling, and no federal authority
+mandates it. It exists so the requirements the other eleven tools cover are
+applied while code is written rather than discovered during assessment.
+
+MetaPhase governs the suite under ISO/IEC 42001, the management-system standard
+for artificial intelligence, which is what makes its use in federal delivery
+defensible.
+
+## One source, two runtimes
+
+Guidance duplicated per runtime drifts, and drift is worse than absence: two
+agents then follow two different rule sets while both appear governed. The
+federal layer therefore has one home, and each runtime's entry file references
+it instead of copying it.
+
+Where a repository maintains parallel agent files, they are kept in agreement
+and that agreement is worth enforcing mechanically rather than by habit.
+
+## In this repository
+
+FedSpeak has two agent entry points, not fully parallel: `CLAUDE.md` at the
+repo root (Claude Code) and `.claude/agents.md` (also Claude-specific, despite
+the generic name — it's a second, narrower file scoped to the acronym-adding
+workflow specifically, not a Codex entry point). There is no `AGENTS.md`, so
+Codex has no dedicated entry file in this repository as of this writing.
+`CLAUDE.md` and `.claude/agents.md` are not kept byte-identical below a shared
+heading the way some MetaPhase repos keep `AGENTS.md`/`CLAUDE.md` in sync —
+they cover different scopes (`CLAUDE.md` is the general repo guide;
+`.claude/agents.md` is acronym-schema-specific instructions) and nothing
+mechanically enforces agreement between them, since there's no true overlap to
+drift out of sync. `CLAUDE.md` is the one that references `.challengeai/`.
+
+## Evidence
+
+The folder is the evidence. Someone reading `.challengeai/` can see what the
+team was held to without interviewing anyone.
+
+## Review checklist
+
+- Do the parallel agent files still agree with each other?
+- Is anything here duplicated into a runtime-specific location, where the two
+ copies will drift?
+- Has a repository-specific detail leaked into a tool file? It belongs in
+ `profile.yml`, this file's `In this repository` section, or the repository's
+ own documentation.
+- Does user-facing copy describe ChallengeAI as a feature of the product? It is
+ how the product was built, and saying otherwise is wrong.
diff --git a/.challengeai/challenge-ea.md b/.challengeai/challenge-ea.md
new file mode 100644
index 0000000..a5ec4a1
--- /dev/null
+++ b/.challengeai/challenge-ea.md
@@ -0,0 +1,105 @@
+# ChallengeEA
+
+Enterprise architecture: whether the system fits the environment it has to live
+in.
+
+## Covers
+
+Federal architecture alignment, governance rigor, interoperability with agency
+systems, and the traceability between a mission need and a technical choice.
+
+## The requirement
+
+- **The Clinger-Cohen Act** requires agencies to manage IT as a capital
+ investment, with architecture as part of that discipline.
+- **OMB Circular A-130** sets expectations for managing federal information
+ resources.
+- **The Federal Enterprise Architecture Framework** provides the reference
+ models an agency maps its systems against.
+- **The Federal Source Code Policy** governs custom-developed code, including
+ reuse and, where applicable, release.
+
+## Reasoning travels with the component
+
+An architecture record that captures only the decision leaves the next team to
+rediscover the constraint that produced it, and rediscovery usually happens by
+reversing the decision and hitting the constraint again.
+
+So each significant choice carries the alternatives that were considered and why
+they were not taken, kept next to the description of the component rather than
+in a separate decision archive, where somebody changing it will actually
+encounter it.
+
+## In this repository
+
+FedSpeak has no formal architecture documentation and no `docs/architecture/`
+— the closest thing is the "Project Structure" section in `README.md` and
+`CLAUDE.md`, which both describe the same real shape: `src/shared/` (decoder,
+encoder, truncation, types, and the acronym data itself) is the single source
+of logic reused by three separate consumers — the Netlify Functions API
+(`netlify/functions/decode.ts`, `encode.ts`), the React website
+(`src/pages/`, `src/components/`), and the published npm package
+(`cli-package/`, kept in sync via `scripts/sync-cli-package.sh`, which copies
+`src/shared/*` into `cli-package/src/shared/` for a separate build/publish
+step). That "one source, three consumers" shape is the entire architecture,
+and it isn't written down anywhere as a deliberate decision with alternatives
+considered — it's inferable from the file layout, not recorded as reasoning.
+
+There is no agency mission need this traces to; FedSpeak is a MetaPhase-
+initiated reference tool, not a system built against an agency requirement.
+This tool's "reasoning travels with the component" principle and the
+"Interoperability" section below are largely inapplicable as a result — noted
+here rather than filled in with invented content.
+
+FedSpeak is not deployed as federal infrastructure and has no authorization
+boundary of its own to describe (see ChallengeATO, ChallengeIaC).
+
+## Boundaries the architecture has to respect
+
+- **The authorization boundary** is what the system provisions and controls. A
+ component added outside it changes the security posture and the
+ documentation that describes it.
+- **Data stays inside the provider boundary** unless a deliberate decision says
+ otherwise, and that decision is recorded with its reasoning.
+- **Services are chosen from what is authorized** at the required impact level,
+ checked before adoption.
+
+Not applicable to FedSpeak in the ATO sense — it has no authorization boundary
+and no federal data. See ChallengeIaC for what it actually provisions
+(essentially nothing beyond Netlify's own managed platform).
+
+## Interoperability
+
+Where the system exchanges data with an agency system, the interface is
+documented as a contract with a version, and the failure behaviour is
+specified. An integration whose failure mode is unspecified becomes an
+incident rather than a degraded state.
+
+FedSpeak has no live integration with any agency system. It publishes its own
+contract (see ChallengeAPI) for third parties to consume, but consumes
+nothing from an agency system itself.
+
+## Evidence
+
+- Architecture documentation carrying the design and its reasoning.
+- A reviewable record of what is actually provisioned.
+- The published interface contract.
+
+FedSpeak's only real evidence here is the published OpenAPI contract (see
+ChallengeAPI) and the file layout itself; there's no design-reasoning
+document to point to.
+
+## Review checklist
+
+- Does this choice have its reasoning recorded next to it?
+- Were alternatives considered, and is the reason for not taking them written
+ down?
+- Does a new component sit inside the authorization boundary?
+- Does data leave the provider boundary, and was that decided or assumed?
+- Does a new integration specify what happens when the other side is down?
+- **FedSpeak-specific:** does a change to `src/shared/` get synced into
+ `cli-package/` via `scripts/sync-cli-package.sh` before the npm package is
+ published, or does the published package silently drift from what the API
+ and website actually run? The sync step is a manual script, not a CI gate
+ — nothing currently verifies the two copies stay identical (see
+ ChallengeCI, ChallengeCD).
diff --git a/.challengeai/challenge-iac.md b/.challengeai/challenge-iac.md
new file mode 100644
index 0000000..8a20452
--- /dev/null
+++ b/.challengeai/challenge-iac.md
@@ -0,0 +1,95 @@
+# ChallengeIaC
+
+Infrastructure: what is provisioned, what it costs, and where the authorization
+boundary falls.
+
+## Covers
+
+Infrastructure as code, FedRAMP service selection, the authorization boundary,
+and the cost consequences of a topology.
+
+## The requirement
+
+- **FedRAMP** authorizes cloud service offerings. Using an authorized service at
+ the required impact level lets the system inherit the controls that service
+ already satisfies.
+- **SP 800-53 Rev. 5** Configuration Management, applied to infrastructure: the
+ deployed configuration has to be reviewable and controlled.
+
+Inheritance is only valid for services inside the authorized boundary at the
+authorized level. Checking that before adopting a service is a design step, not
+an assessment finding.
+
+## In this repository
+
+FedSpeak isn't a federal system and doesn't need FedRAMP-authorized
+infrastructure — this section is included for completeness, not because the
+constraint binds here (see federal-context.md).
+
+There is no infrastructure-as-code tool in use — no Terraform, no
+CloudFormation, no Pulumi, no OpenTofu. The entire "infrastructure" this
+repository controls is `netlify.toml` (build command, publish directory,
+functions directory, and two redirect rules) plus whatever's configured
+directly in Netlify's own dashboard (the site's Netlify project, its custom
+domain, and its GitHub-App connection) and Cloudflare's dashboard (DNS
+records pointing `fedspeak.dev` at `fedspeak.netlify.app`, per `CLAUDE.md`).
+None of that dashboard-level configuration is declared as code anywhere in
+this repository — it's clicked, not committed, and there's no record here of
+what's actually configured beyond what `netlify.toml` covers.
+
+The topology is about as simple as this suite encounters: a static site plus
+two serverless functions, both served from Netlify's own managed platform,
+with Cloudflare fronting DNS only (not proxying — not confirmed either way
+from this repository, since that's a Cloudflare dashboard setting, not a
+committed file). There's no compute to size, no database to provision, no
+network boundary this repository defines.
+
+## Boundary
+
+What the system provisions is the boundary. Everything else is inherited from
+the provider and is named as inherited rather than claimed as implemented.
+
+FedSpeak provisions essentially nothing itself — Netlify's build system and
+function runtime, and Cloudflare's DNS, are both entirely the providers' own
+managed infrastructure. There's no boundary to draw beyond "this repository's
+code, as built and deployed by Netlify."
+
+## Cost
+
+Cost-relevant settings are variables, each carrying its reasoning. A default was
+usually chosen against a measurement, and keeping the reasoning next to it means
+the next person changes it knowingly.
+
+Topology drives cost more than instance sizing does, and the expensive parts are
+usually the ones added without being noticed: an always-on gateway, a
+cross-region transfer, a log stream with no retention.
+
+Nothing here is a cost-relevant variable in the usual sense — no instance
+sizing, no always-on compute (Netlify Functions are invoked per-request), no
+configured log retention to leave at a costly default because none is set up
+at all (see ChallengeMELT). The two npm packages and the GitHub repository
+itself carry no infrastructure cost.
+
+## Evidence
+
+- The infrastructure declaration is the record of what is provisioned.
+- Validation results from the pipeline.
+- Variables and their reasoning.
+
+`netlify.toml` is the entire infrastructure declaration this repository
+carries, and nothing in CI validates it (no `netlify build` dry-run, no
+schema check) beyond Netlify's own build step succeeding or failing at
+deploy time.
+
+## Review checklist
+
+- Is this service authorized at the required impact level?
+- Does this change move anything across the authorization boundary?
+- Is a cost-relevant setting hardcoded rather than declared as a variable with
+ its reasoning?
+- Does the running configuration still match what is declared?
+- Is a new resource missing a retention or lifecycle setting, leaving it at the
+ provider default?
+- **FedSpeak-specific:** does a change to `netlify.toml`'s redirects or
+ functions directory get verified against an actual Netlify preview deploy
+ before merging, given nothing in CI validates it directly?
diff --git a/.challengeai/challenge-melt.md b/.challengeai/challenge-melt.md
new file mode 100644
index 0000000..ae0a234
--- /dev/null
+++ b/.challengeai/challenge-melt.md
@@ -0,0 +1,94 @@
+# ChallengeMELT
+
+Metrics, events, logs, and traces: whether an operator can tell what happened.
+
+## Covers
+
+Observability coverage, alerting, audit logging, retention, and runbooks.
+
+## The requirement
+
+- **SP 800-53 Rev. 5** Audit and Accountability (AU) is the core family: what is
+ recorded, protected, retained, and reviewed.
+- **The Federal Records Act** governs retention and disposition. Records are kept
+ on a schedule rather than until storage becomes inconvenient.
+- **Incident Response (IR)** depends on this: an incident that cannot be
+ reconstructed cannot be reported accurately.
+
+## What gets recorded
+
+- **Audit records are tamper evident and retained on a schedule**, not rotated
+ by size. They exist to be read later by somebody investigating something.
+- **Application logs carry no personal information and no secrets.** A log line
+ is a permanent record in an environment where records are discoverable.
+- **Absence is monitored as well as failure.** A scheduled job that stops
+ running produces no errors at all, so the alarm is on the job not having run
+ rather than on it having failed.
+
+## Alerting
+
+An alarm fires on a condition an operator can act on. An alarm nobody acts on
+trains people to ignore alarms, which leaves the system worse off than having no
+alarm at all.
+
+Every alarm therefore has an action attached, and that action lives in a runbook
+carrying the actual commands rather than describing them.
+
+## In this repository
+
+FedSpeak keeps no application-level logs, metrics, or traces of its own at
+all. Neither `netlify/functions/decode.ts` nor `encode.ts` writes a log line
+anywhere beyond an unhandled exception falling through to Netlify's own
+platform-level function logs (caught broadly by a `try`/`catch` that returns
+a generic 500 with no detail — see ChallengeAPI's "Errors" note on not
+leaking internals, which this incidentally satisfies). There's no request
+logging, no structured event stream, and nothing this repository configures
+to capture one.
+
+That absence is arguably appropriate given what the system is: no accounts,
+no user-specific behavior, no data that changes, nothing an "audit record" in
+the SP 800-53 AU sense would actually need to reconstruct. What it does mean
+is there's no way, from this repository or its CI, to answer "was the API
+actually being hit, by whom, how often" — that visibility, if it exists at
+all, lives entirely in Netlify's own platform dashboard (function invocation
+counts, bandwidth), which this repository doesn't configure, export, or
+retain independently.
+
+There is no alerting of any kind — no alarm defined anywhere, as code or
+otherwise, and nothing here to fire on a scheduled job's absence, because
+there's also no scheduled job in this repository besides
+`dependency-hygiene.yml`'s own weekly cron, which GitHub Actions itself
+would silently stop notifying about if it were ever disabled (no external
+monitor watches for that).
+
+## Retention
+
+Retention is a decision with a records-schedule basis, recorded where the log
+is configured. Changing it is a compliance change, not a cost optimization.
+
+No retention period is declared anywhere in this repository, because there
+is no log stream this repository configures to have one. Whatever Netlify
+retains at the platform level by default is Netlify's own retention policy,
+not a decision made or recorded here.
+
+## Evidence
+
+- Alarm definitions declared as code, so they are reviewable.
+- Runbooks versioned with the system.
+- Retention declared rather than left at a provider default.
+
+FedSpeak has none of these three. This is the honest state of the repository,
+not a placeholder for evidence that exists elsewhere and simply isn't linked.
+
+## Review checklist
+
+- Does a new log line carry anything personal, or any secret?
+- Does a new scheduled task have an alarm on it not running?
+- Does a new alarm have an action, or does it only notify?
+- Is retention on a new log stream declared?
+- Would this incident be reconstructable from what is recorded today?
+- **FedSpeak-specific:** if request logging or any usage analytics is ever
+ added, does it collect an IP address or other data that would flip
+ `profile.yml`'s `privacy_assessment_required` from `false` to `true`? That
+ field's honesty depends on this staying true going forward, not just at
+ the time this file was written.
diff --git a/.challengeai/challenge-sql.md b/.challengeai/challenge-sql.md
new file mode 100644
index 0000000..39f875b
--- /dev/null
+++ b/.challengeai/challenge-sql.md
@@ -0,0 +1,96 @@
+# ChallengeSQL
+
+The data layer: correctness, performance, and who can reach what.
+
+## Covers
+
+Schema design, query correctness and performance, migrations, and database-level
+access control.
+
+## The requirement
+
+SP 800-53 Rev. 5 Access Control (AC), Audit and Accountability (AU), and System
+and Communications Protection (SC-28, protection at rest). Where the data
+concerns individuals, the Privacy Act and the PIA govern what may be stored and
+for how long.
+
+## Access
+
+- **Reached through a server-side layer.** The browser holds no database
+ credential and issues no query.
+- **Least privilege by role.** The application connects as a role holding narrow
+ per-table grants rather than as the owner, and something asserts those grants
+ so a migration that widens access fails rather than passing silently.
+
+ Build this early. A role added after the schema has grown means auditing every
+ table to work out what the application actually needs.
+- **Row-level security enabled and forced** on tables that carry it, so the
+ owner cannot bypass the policy by accident.
+
+## Migrations
+
+Migrations are checksummed, and the runner records a hash of each file.
+
+**An applied migration is never edited, comments included.** Changing one makes
+the runner report a mismatch on every subsequent run, and the fix for a bad
+migration is another migration.
+
+## Performance
+
+Queries that touch a growing table are checked against a plan rather than
+against intuition. An index helps only when the planner chooses it, and a join,
+a function on a column, or a mismatched type will each quietly defeat one.
+
+## In this repository
+
+FedSpeak has no database at all — `CLAUDE.md` states this directly ("Data:
+Static JSON (no database)") and it's confirmed by the actual code: the entire
+data layer is `src/shared/data/acronyms.json`, a single committed file (1,119
+entries), read into an in-memory `Map` at module load in both
+`src/shared/decoder.ts` and `src/shared/encoder.ts`. There is no schema
+migration system, no database role or grants to audit, and no row-level
+security, because there are no rows in the database sense — every "record"
+is a JSON object edited directly in a pull request.
+
+Most of this tool's requirements — access control roles, RLS, migration
+checksums — don't apply to a static, read-only, committed dataset with no
+runtime write path. What does carry over is data *correctness*: entries are
+added by hand (per `CONTRIBUTING.md`'s and `.claude/agents.md`'s documented
+schema), kept in alphabetical order by convention rather than enforced
+ordering, and there's no automated check that a new entry conforms to the
+schema (required fields present, `category` one of the nine allowed values,
+no duplicate key) before it merges. `AcronymCategory` in `src/shared/types.ts` *is* a strict nine-value
+union, but `decoder.ts`/`encoder.ts` import the JSON and cast it directly
+(`acronymsData as AcronymData`) rather than letting TypeScript infer and
+check the JSON module's literal types — an explicit `as` cast suppresses
+that check, so an entry with an unrecognized `category` string, or a missing
+required field, would not be caught by `npm run typecheck` in CI. It would
+only surface at runtime, and only if something actually reads that field in
+a way that breaks (the app mostly just echoes `category` back verbatim, so
+even that's not guaranteed).
+
+## Evidence
+
+- The migration history is the schema history.
+- The grants held by the application role, and whatever asserts them, are the
+ access-control evidence.
+- Database tests run against a real migrated database rather than a mock.
+
+None of this applies in the usual sense. The closest equivalent evidence is
+`tests/decoder.test.ts` and `tests/encoder.test.ts`, which exercise lookups
+against the real `acronyms.json` file (not a mock or fixture), so a broken or
+malformed entry that changes lookup behavior would surface there if a test
+happens to cover it — not a systematic guarantee, since the tests weren't
+written to validate every entry's shape.
+
+## Review checklist
+
+- Does this migration edit one that has already been applied?
+- Does a new table need row-level security, and is it forced as well as enabled?
+- Does the application role get the narrowest grant that works?
+- Does a new query have a plan that uses the index it was written for?
+- Does a new column hold personal information the PIA does not mention?
+- **FedSpeak-specific:** does a new or edited entry in `acronyms.json` match
+ the documented schema exactly — required fields present, `category` one of
+ the nine documented values, key placed in alphabetical order? Nothing in
+ CI currently checks this beyond TypeScript's structural typing.
diff --git a/.challengeai/challenge-tdd.md b/.challengeai/challenge-tdd.md
new file mode 100644
index 0000000..1903a95
--- /dev/null
+++ b/.challengeai/challenge-tdd.md
@@ -0,0 +1,87 @@
+# ChallengeTDD
+
+The tests: what they prove, and what a green run actually means.
+
+## Covers
+
+Test traceability to capabilities, coverage of the paths that matter, and
+release readiness.
+
+## The requirement
+
+SP 800-53 Rev. 5 System and Services Acquisition (SA-11, developer testing) and
+System and Information Integrity (SI-2, flaw remediation). An assessor asks how
+the team knows the system works, and expects an answer with artifacts.
+
+## Breadth, then depth
+
+Breadth across every kind of test comes first, so no category is missing: logic
+in isolation, rendered behaviour, accessibility per route, real queries against
+a real migrated database, route behaviour including failure cases, and the whole
+system end to end at more than one viewport.
+
+Depth follows risk. The paths where a defect changes what a user is shown, or
+lets someone reach data they should not, earn the most.
+
+## What a test should assert
+
+A test that passes against a deliberately broken implementation is worse than no
+test, because it reports confidence it has not earned. When adding a regression
+test, break the fix on purpose and confirm the test fails.
+
+A test asserting an implementation detail rather than a behaviour will break on
+a harmless refactor and be deleted by whoever it inconveniences, which costs the
+coverage it was written for.
+
+## Traceability
+
+A capability with no test named against it is either untested or untraceable,
+and both are findings. The traceability record maps each capability to its
+implementation and its test, which is what an assessor asks for.
+
+## In this repository
+
+FedSpeak's test coverage is narrow but real: three Vitest suites in `tests/`
+— `decoder.test.ts` (19 cases), `encoder.test.ts` (13 cases), and
+`truncate.test.ts` (4 cases), 36 individual assertions total — cover
+`lookupAcronym`, `scanText`, `lookupName`, `scanTextForNames`, and the
+progressive truncation logic in `src/shared/truncate.ts`, all run against the
+real `acronyms.json` data rather than a mock, and all three run in CI on
+every push to `main`/`dev` and every PR to `main` (`ci.yml`'s `test:run`
+step). That's the full extent of what's tested, though — there is no
+category of test beyond this one: no rendered-component tests (no
+`@testing-library/react` in `package.json`'s devDependencies, and no `.tsx`
+test files exist), no accessibility assertions (see ChallengeUI), no test
+that invokes the actual Netlify function handlers
+(`netlify/functions/decode.ts`/`encode.ts`) rather than the shared logic
+they call (see ChallengeAPI), and no end-to-end test of the website at all.
+
+Coverage is *measured* — `vitest.config.ts` configures the v8 provider with
+text/json/html reporters, and `npm run test:coverage` exists as a script —
+but not *enforced*: there's no `thresholds` block in the config, and `ci.yml`
+runs `npm run test:run`, not `npm run test:coverage`, so a coverage report
+isn't even generated in CI, let alone gated on. There is no traceability
+record mapping any of these 36 test cases to a named capability beyond the
+test file's own `describe`/`it` structure.
+
+## Evidence
+
+- Coverage reported on every change.
+- End-to-end and accessibility reports retained as artifacts.
+- The traceability record.
+
+FedSpeak produces none of these three as CI artifacts today. `npm run
+test:coverage` works locally and would produce an HTML report, but nothing
+runs or retains it in the pipeline.
+
+## Review checklist
+
+- Does the new capability appear in the traceability record, naming its test?
+- Would this test fail if the behaviour regressed? Confirm, do not assume.
+- Does a database test run against a real schema rather than a mock?
+- Is a test asserting an implementation detail that will break on a harmless
+ refactor?
+- **FedSpeak-specific:** does a new acronym entry that introduces a new
+ alias, multi-word key, or category value get a corresponding case in
+ `decoder.test.ts`/`encoder.test.ts`, or does it only get exercised
+ incidentally by the existing generic assertions?
diff --git a/.challengeai/challenge-ui.md b/.challengeai/challenge-ui.md
new file mode 100644
index 0000000..7929151
--- /dev/null
+++ b/.challengeai/challenge-ui.md
@@ -0,0 +1,113 @@
+# ChallengeUI
+
+The interface: whether everyone can use it, and whether it reads as what it
+actually is.
+
+## Covers
+
+Section 508 conformance, WCAG 2.0/2.1 Level AA, USWDS conventions, and the line
+between following federal design conventions and implying government authorship.
+
+## The requirement
+
+- **Section 508 of the Rehabilitation Act** requires federal electronic and
+ information technology to be accessible to people with disabilities.
+- **WCAG 2.0 Level AA** is the technical standard the Revised Section 508
+ Standards actually incorporate by reference — not 2.1. A project may adopt
+ WCAG 2.1 AA (a superset, adding criteria like reflow and orientation) as
+ its own stricter target, which is a project choice beyond the legal
+ minimum, not what the statute itself requires — worth keeping distinct in
+ anything that becomes ATO evidence. `profile.yml`'s `accessibility` field
+ records which one a given project actually targets.
+- **The U.S. Web Design System** is the shared design system for federal
+ websites. It is a convention rather than a statute, and following it makes a
+ federal site behave the way its users already expect.
+
+Accessibility here is a legal obligation. A failure is a compliance matter, not
+a defect to prioritize against other work.
+
+## What automated checks reach
+
+An automated rule engine catches a meaningful share of WCAG failures and is
+worth running on every route, at more than one viewport, as a gate. It does not
+reach reading order, focus order that is technically valid but incoherent, alt
+text that is present but wrong, or whether an error message actually tells
+someone what to do.
+
+Reflow at a 320 CSS-pixel viewport — WCAG 1.4.10, which corresponds to 400%
+zoom on a common 1280px desktop width, not 200% — is checkable and often
+missed. It's a distinct requirement from WCAG 1.4.4's 200% text-resize check;
+testing only to 200% zoom can miss horizontal-scrolling failures that only
+appear at the 400%/320px reflow condition. Both remain largely manual passes.
+
+Contrast is measured rather than judged by eye, and the measured ratio is
+recorded next to the color pair it describes, so a later change to a token is a
+visible change to a number.
+
+## In this repository
+
+FedSpeak is legally exempt from Section 508 — it isn't a federal system —
+but a real share of its audience is federal employees and contractors who
+look up acronyms while doing federal work, some using assistive technology.
+That's the practical reason this tool applies here even without a legal
+mandate.
+
+Against that, there is **no accessibility target declared anywhere** in this
+repository — not in `README.md`, not in `CLAUDE.md`, not in
+`.claude/agents.md` — and **no automated accessibility check runs at any
+point**: `ci.yml` runs lint, typecheck, test, and build only; no axe-core,
+no Lighthouse, no `@axe-core/playwright` or equivalent appears in
+`package.json`'s devDependencies or in any workflow file. `profile.yml`
+records `accessibility: null` and `accessibility_authority: null` rather
+than inventing a target this repository doesn't actually hold itself to.
+
+What exists is unverified and inconsistent: a grep across `src/components/`
+and `src/pages/` finds `aria-*`/`alt`/`role` attributes in only 3 of the ~13
+files (`Header.tsx`, `SearchPage.tsx`, `PackagePage.tsx`) — some baseline
+accessibility awareness in a handful of components, with no scan or test to
+confirm it's correct, complete, or consistently applied elsewhere. No
+measured contrast ratios are recorded anywhere, and no 320px reflow check
+(automated or manual) was found.
+
+## Who operates the service
+
+A system that returns government data, or follows federal design conventions,
+still says who operates it. Attribution is reachable from every route, and the
+operator is named where a reader goes looking.
+
+Federal seals, agency logos and wordmarks, and wording claiming agency
+authorship stay out. USWDS conventions are deliberate and permitted by this
+rule, which governs attribution rather than appearance.
+
+`src/components/Footer.tsx` renders "Built by MetaPhase" (linked to
+`metaphase.tech`) on every page via the shared `Footer` component, which is
+real, correct, and confirmed against the actual component — this is the one
+part of ChallengeUI's requirements this repository meets cleanly. No federal
+seal, agency logo, or official wordmark appears anywhere in `src/` or
+`public/` as of this writing.
+
+## Evidence
+
+- A per-route accessibility assertion in the test suite, failing the build.
+- A scan of every rendered route at more than one viewport, with its report
+ retained.
+- Contrast ratios recorded alongside the tokens they describe.
+
+FedSpeak produces none of this evidence today — no accessibility assertions
+in `tests/`, no scan of any kind, no recorded contrast ratios. This is the
+single largest gap this tool file identifies in this repository.
+
+## Review checklist
+
+- Does every interactive element reach keyboard focus, in a visible way?
+- Does every image carry alt text, and every form control a label?
+- Is anything conveyed by color alone?
+- Does the page survive 200 percent text resize (WCAG 1.4.4)?
+- Does the page reflow without horizontal scrolling at a 320px viewport
+ (WCAG 1.4.10, i.e. 400% zoom) — checked separately from the 200% case above?
+- Does any new copy imply this is an official government system?
+- Is a heading level skipped, and is there exactly one `h1`?
+- **FedSpeak-specific:** does the "Built by MetaPhase" attribution in
+ `Footer.tsx` still render on any new page or route added to
+ `src/pages/`? A page that bypasses the shared layout could lose it
+ silently.
diff --git a/.challengeai/federal-context.md b/.challengeai/federal-context.md
new file mode 100644
index 0000000..c7fefdf
--- /dev/null
+++ b/.challengeai/federal-context.md
@@ -0,0 +1,164 @@
+# What is different about building for the federal government
+
+Commercial software ships when the team decides it is ready. A federal system
+ships when someone with authority accepts the risk of operating it, in writing,
+on the strength of evidence the team produced while building. That single
+difference drives most of what follows.
+
+FedSpeak itself has no ATO in flight and pursues none — see ChallengeATO for
+why — but it is a reference tool built for people who work inside that world,
+and its accuracy and presentation carry real consequences for them. The
+sections below apply to that extent even without an authorization boundary of
+FedSpeak's own.
+
+## Authorization to Operate
+
+A federal information system needs an ATO before it carries real data or real
+users. An authorizing official signs it, and signs a specific system with a
+specific boundary at a specific point in time.
+
+The process is the NIST Risk Management Framework, SP 800-37 Rev. 2:
+
+1. **Prepare** establish context, roles, and risk tolerance
+2. **Categorize** the system against FIPS 199, as low, moderate, or high impact
+3. **Select** the SP 800-53 Rev. 5 control baseline the categorization implies
+4. **Implement** the controls
+5. **Assess** whether they work, using SP 800-53A Rev. 5 procedures
+6. **Authorize** the system, accepting residual risk
+7. **Monitor** continuously, because an ATO describes a system that keeps changing
+
+A system's categorization is recorded in `profile.yml`. FedSpeak's is `null`
+— it is not a federal information system, does not carry federal data on
+behalf of an agency, and no categorization has been performed (see
+ChallengeATO).
+
+**The consequence for development.** Evidence is a build output, not a document
+written at the end. A control that was implemented but never evidenced is
+indistinguishable, to an assessor, from one that was not implemented.
+
+## Authorization is a claim, and claims are checkable
+
+"Authorized", "compliant", and "accredited" describe a decision an authorizing
+official made about a specific system at a specific time. Use them where that
+decision exists, and describe the standards a system is built against where it
+does not. Both are accurate statements; only one of them is checkable against a
+signature.
+
+The same care applies to language that implies federal endorsement without
+asserting it, which an outside reader has no way to distinguish from the real
+thing. FedSpeak decodes federal acronyms; nothing about the site, the API
+responses, or the npm package should read as though a federal agency operates
+or endorses it.
+
+## Accessibility is law
+
+Section 508 of the Rehabilitation Act requires federal electronic and
+information technology to be accessible to people with disabilities. The
+Revised Section 508 Standards incorporate **WCAG 2.0 Level AA** by reference
+as the technical standard; WCAG 2.1 AA is a valid but stricter voluntary
+target a project may adopt on top of it — a project choice distinct from what
+the statute itself requires, worth keeping distinct wherever this feeds ATO
+evidence (see ChallengeUI for what a given project targets specifically).
+FedSpeak isn't a federal system and Section 508 doesn't apply to it as a legal
+matter, but a meaningful share of its actual audience are federal employees
+and contractors, some of whom use assistive technology — see ChallengeUI for
+why that's treated as a real gap rather than a legal non-issue.
+
+Accessibility is a legal obligation with a compliance consequence: a complaint
+is a legal matter. The intended posture is to gate on it rather than merely
+report it, and a claim of conformance is made on the strength of a scan
+someone can open — but whether a given repository's CI actually enforces
+that gate today, versus still reporting advisory, is a fact recorded in
+`profile.yml`'s `gates` section, not assumed from this general principle.
+
+## Cloud services carry their own authorization
+
+FedRAMP authorizes cloud service offerings so that agencies do not each assess
+the same provider. Building on an authorized service means inheriting the
+controls that service already satisfies, and inheriting them is only valid for
+services actually in the authorized boundary at the authorized impact level.
+
+Choosing a service that is not authorized at the required level means either
+authorizing it independently or not using it. This is a design constraint at the
+moment of choosing a service, not a discovery to make during assessment.
+
+FedSpeak doesn't handle federal data or operate on an agency's behalf, so this
+constraint doesn't bind its choice of Netlify as a host — see ChallengeIaC.
+
+## Privacy has its own gate
+
+If a system collects, maintains, or disseminates information about individuals,
+the E-Government Act requires a Privacy Impact Assessment. A system of records
+retrieved by personal identifier additionally requires a System of Records
+Notice published in the Federal Register.
+
+The PIA is written from what the system actually does with personal
+information, so a data model that quietly starts storing an identifier changes
+the privacy posture whether or not anyone updates the document. FedSpeak
+collects no personal information at all — no accounts, no stored user input,
+no analytics — so `profile.yml` records `privacy_assessment_required: false`.
+That's a statement about what exists today; it changes the moment the system
+starts persisting anything about a person.
+
+## Retention and disposition
+
+The Federal Records Act governs what a federal system keeps and for how long.
+Retention and disposition follow a records schedule. Audit records in particular
+exist to be read later by somebody investigating something, which is why they
+are written to be tamper evident and are kept for their scheduled term rather
+than rotated once they grow large.
+
+FedSpeak keeps no audit records of its own — see ChallengeMELT — so this
+doesn't bind it directly today, but it's the rule that would apply the moment
+any request or usage data started being persisted.
+
+## The public reads everything
+
+Federal systems operate in public. Repository contents, pull requests, and
+issues can become public records. Plain language is required of public-facing
+government communication by the Plain Writing Act. FedSpeak's repository is
+already fully public (MIT licensed, open source), so this isn't a hypothetical
+here — everything in it is already readable by anyone.
+
+Two practical rules follow. Nothing permanent carries sensitive account or
+resource identifiers, or vulnerability detail — an identifier recorded
+deliberately so a reader can verify a deployment target (an AWS account
+number in a runbook, say) is a legitimate exception to this rule, not a
+violation of it. Dollar figures are a narrower exception still: they stay out
+of permanent records where they're incidental, but where cost is the point of
+the record — a POA&M's required "Resources required" field, for instance —
+stripping the estimate makes the record worse, not more secure. And
+documentation states what the system does rather than cataloguing what it does
+not, because a system described mostly by its gaps reads as less trustworthy
+than one described by its implementation.
+
+## Government data is not government endorsement
+
+FedSpeak decodes and expands U.S. government acronyms, some entries link to
+official `.gov` sites, and the whole product is built around federal
+terminology — close enough to the subject matter that a reader could
+plausibly mistake it for an official government resource without a clear
+signal otherwise. It isn't one: MetaPhase compiles, curates, and writes every
+entry's description independently, and no agency has reviewed, endorsed, or
+sponsored the database's content.
+
+`src/components/Footer.tsx` names MetaPhase as the operator on every page
+("Built by MetaPhase," linked to `metaphase.tech`), and neither the site nor
+the API responses use any federal seal, agency logo, or wordmark. That
+attribution is the whole of what keeps this distinction visible — see
+ChallengeUI.
+
+## What this means day to day
+
+- Build the evidence while building the feature, in the same pull request.
+- Treat accessibility as a build break, not a warning — that's the general
+ target; FedSpeak's CI doesn't currently run any accessibility check at all
+ (see ChallengeUI), so today it isn't gated on anything.
+- Check a service's authorization before adopting it, not after — not a live
+ constraint for FedSpeak specifically (see above), but the discipline to
+ keep if that ever changes.
+- Say what is implemented. Findings come from independent assessment, and a
+ weakness, POA&M item, or vulnerability goes into a security document only
+ with explicit approval. Cataloguing theoretical gaps manufactures a record
+ of insecurity. FedSpeak has no security document of this kind at all today
+ (no `docs/security/`, no POA&M) — see ChallengeATO.
diff --git a/.challengeai/profile.yml b/.challengeai/profile.yml
new file mode 100644
index 0000000..5209b5b
--- /dev/null
+++ b/.challengeai/profile.yml
@@ -0,0 +1,94 @@
+# Machine-readable declaration of what this system is held to.
+#
+# This is the one file in .challengeai/ that describes THIS system. The tool
+# files beside it are technology and repository agnostic on purpose; anything
+# specific belongs here, in a tool file's "In this repository" section, or in
+# the repository's own documentation.
+#
+# Read by tooling and by agents that need to branch on the profile rather than
+# parse prose.
+
+challengeai:
+ suite_version: "1.0"
+ built_with: true
+
+project:
+ name: "FedSpeak"
+ slug: "fedspeak"
+ tagline: "Federal Acronym Decoder — REST API, website, and npm package expanding 1,119 U.S. government acronyms"
+
+ # FedSpeak is a public reference tool MetaPhase builds and operates. It is
+ # not a federal information system and no agency has accepted operational
+ # risk for it. See federal-context.md, "Government data is not government
+ # endorsement."
+ operator: "MetaPhase"
+ # FedSpeak's acronym database is original compilation and curation, not a
+ # republished government dataset — no single source agency to name here.
+
+stack:
+ id: netlify-serverless-static-json
+ frontend: react-vite
+ api: netlify-functions-v2
+ database: none
+ # src/shared/data/acronyms.json, committed to the repo, no database.
+ data: static-json
+ hosting: netlify
+ # fedspeak.dev (Cloudflare DNS) -> fedspeak.netlify.app (CLAUDE.md).
+ dns: cloudflare
+ # Both live on the npm registry as of this writing: `fedspeak` and
+ # `@metaphase-tech/fedspeak`, both at 1.0.0 — confirmed against the
+ # registry directly, not just README's claim.
+ npm_packages:
+ - fedspeak
+ - "@metaphase-tech/fedspeak"
+
+standards:
+ # FedSpeak is not a federal information system — no agency operates it, no
+ # federal data is carried on an agency's behalf, and no categorization has
+ # been performed. `null` records "not pursued," not "unknown."
+ control_baseline: null
+ impact_level: null
+ # No accessibility target is declared anywhere in this repository — no CI
+ # scan, no stated WCAG level, nothing in CLAUDE.md or .claude/agents.md.
+ # `null` records that absence honestly rather than inventing a target this
+ # repo doesn't actually hold itself to. See ChallengeUI.
+ accessibility: null
+ accessibility_authority: null
+ # No accounts, no stored user input, no analytics, no cookies — confirmed
+ # via SECURITY.md, CLAUDE.md, and a direct search of the source for any
+ # tracking/analytics integration (found none, index.html included).
+ privacy_assessment_required: false
+
+gates:
+ # .github/workflows/ci.yml, on push to main/dev and PR to main. No
+ # continue-on-error on any step, so every step here blocks a red run —
+ # but note this is the only gate: no accessibility check, no SAST/dependency
+ # scan, no E2E, and no branch-protection setting was found confirming any
+ # of this actually blocks a merge (see enforced_by_branch_protection below).
+ checks:
+ - Lint
+ - Type check
+ - Test
+ - Build
+
+ # .github/workflows/dependency-hygiene.yml, weekly cron (Mondays 9am UTC) +
+ # manual dispatch only — never runs on a pull request. `npm audit` carries
+ # `continue-on-error: true`; `npm outdated` is piped through `|| true`. Pure
+ # report, not a gate, and not even a per-PR one.
+ advisory:
+ - Dependency Hygiene (weekly npm audit + npm outdated)
+
+ # A GET request to the GitHub branch-protection API for both `main` and
+ # `dev` returned 404 (not-protected or insufficient token scope — not
+ # distinguishable from the outside) as of this writing. Nothing here is
+ # confirmed; it's what CONTRIBUTING.md and CLAUDE.md describe as the
+ # intended workflow (PR review before merge to main), not a verified
+ # GitHub setting.
+ documented_but_unverified_branch_protection:
+ - PR review before merge to main (per CONTRIBUTING.md/CLAUDE.md, not
+ confirmed as an enforced GitHub branch-protection rule)
+
+branches:
+ default: dev
+ release: main
+ protected_unverified: [dev, main]
diff --git a/CHALLENGEAI.md b/CHALLENGEAI.md
new file mode 100644
index 0000000..347479f
--- /dev/null
+++ b/CHALLENGEAI.md
@@ -0,0 +1,58 @@
+# ChallengeAI
+
+ChallengeAI is MetaPhase's accelerator suite for federal software delivery. It
+wraps Claude and Codex with the standards a federal system is held to, so the
+work arrives already shaped by them rather than corrected into them afterwards.
+
+This repository was built with ChallengeAI, and the standards behind it live in
+[`.challengeai/`](.challengeai/). That folder is self-contained: everything an
+agent or an engineer needs is written there, and nothing has to be installed
+for it to be read.
+
+FedSpeak is not itself a federal information system — it's a public reference
+tool MetaPhase builds and operates, with no ATO in flight and none pursued
+(see [`challenge-ato.md`](.challengeai/challenge-ato.md)). Several tool files
+below say so directly rather than inventing federal posture this repository
+doesn't actually hold.
+
+## The suite
+
+Twelve tools, each covering one part of delivery.
+
+| Tool | Covers | File |
+|---|---|---|
+| ChallengeCLI | The accelerator itself, across Claude and Codex | [`challenge-cli.md`](.challengeai/challenge-cli.md) |
+| ChallengeAC | Agile artifacts, acceptance criteria, traceability | [`challenge-ac.md`](.challengeai/challenge-ac.md) |
+| ChallengeEA | Enterprise architecture and governance | [`challenge-ea.md`](.challengeai/challenge-ea.md) |
+| ChallengeATO | RMF, NIST SP 800-53, the security package | [`challenge-ato.md`](.challengeai/challenge-ato.md) |
+| ChallengeUI | Section 508, WCAG 2.0/2.1 AA, USWDS | [`challenge-ui.md`](.challengeai/challenge-ui.md) |
+| ChallengeAPI | API contracts, validation, interoperability | [`challenge-api.md`](.challengeai/challenge-api.md) |
+| ChallengeSQL | Schema and query correctness, performance, security | [`challenge-sql.md`](.challengeai/challenge-sql.md) |
+| ChallengeTDD | Test traceability, coverage, release readiness | [`challenge-tdd.md`](.challengeai/challenge-tdd.md) |
+| ChallengeCI | Pipeline hardening, evidence gates, scanning | [`challenge-ci.md`](.challengeai/challenge-ci.md) |
+| ChallengeCD | Rollout safety, rollback, secrets handling | [`challenge-cd.md`](.challengeai/challenge-cd.md) |
+| ChallengeIaC | Infrastructure, service selection, boundary | [`challenge-iac.md`](.challengeai/challenge-iac.md) |
+| ChallengeMELT | Metrics, events, logs, traces, alerting | [`challenge-melt.md`](.challengeai/challenge-melt.md) |
+
+## Reading order
+
+Start with [`federal-context.md`](.challengeai/federal-context.md), which covers
+what applies to every federal system regardless of stack (and where FedSpeak
+specifically opts out, as a non-federal system). Then read the tool files for
+the area being worked on.
+
+The tool files are deliberately technology-agnostic where they describe a
+requirement, so the same reasoning applies whatever the stack. Each also carries
+an **In this repository** section that names how this specific system meets it,
+which is the part that changes per project.
+
+[`profile.yml`](.challengeai/profile.yml) is the one place that declares
+specifics: this system's stack, impact level, control baseline, and gates, in a
+form a script can read.
+
+## How to describe it
+
+ChallengeAI is how this system was built, and user-facing copy describes it that
+way. The repository saying it was built with ChallengeAI is correct; a page
+saying a product feature is powered by ChallengeAI is wrong, because that names
+the accelerator as a capability it never was.
diff --git a/CLAUDE.md b/CLAUDE.md
index c43300d..06eab82 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,6 +4,8 @@
**FedSpeak** is a Federal Acronym Decoder API and website built by MetaPhase. It decodes (and encodes) U.S. government acronyms from text or single lookups.
+Built with **ChallengeAI**, MetaPhase's accelerator suite for federal software delivery. The federal layer lives in [`.challengeai/`](.challengeai/); [`CHALLENGEAI.md`](CHALLENGEAI.md) is the index. FedSpeak is not itself a federal information system — `.challengeai/profile.yml` and `challenge-ato.md` say so directly, rather than restating federal-delivery standards this repo doesn't actually pursue.
+
## Project Structure
```
@@ -111,3 +113,4 @@ Responses are progressively truncated to stay under 2000 chars.
- CORS headers set in Netlify functions
- No secrets or env vars needed
- Static JSON data, no database, no user input stored
+- Deeper posture (input validation, rate limiting, accessibility, ATO status) lives in `.challengeai/` — see `challenge-api.md`, `challenge-ui.md`, and `challenge-ato.md` rather than restating it here.
From 008ca9ebfaba41fc7a1bebe3146e5d8e3fe18041 Mon Sep 17 00:00:00 2001
From: Dylan Nguyen
Date: Tue, 1 Sep 2026 13:54:56 -0400
Subject: [PATCH 3/8] docs(challengeai): name the missing AGENTS.md gap
honestly, decouple API contract versioning from package versioning, mark
workflow checks as unverified merge gates
---
.challengeai/challenge-api.md | 29 ++++++++++++++++++-----------
.challengeai/challenge-cli.md | 10 ++++++++--
.challengeai/profile.yml | 13 ++++++++-----
3 files changed, 34 insertions(+), 18 deletions(-)
diff --git a/.challengeai/challenge-api.md b/.challengeai/challenge-api.md
index e172fe5..faadb0f 100644
--- a/.challengeai/challenge-api.md
+++ b/.challengeai/challenge-api.md
@@ -47,15 +47,20 @@ the same static `src/shared/data/acronyms.json` the website and npm package
read directly.
- **Versioning:** none in the path — `/api/decode` and `/api/encode` carry no
- version segment. `public/openapi.json`'s own `info.version` field says
- `"0.1.0"`, while `package.json` and `cli-package/package.json` both say
- `"1.0.0"` — a real drift between the published contract document's stated
- version and the actual product version, confirmed by reading both files
- directly.
+ version segment. The API contract's own version (`public/openapi.json`'s
+ `info.version`) and the product's npm version (`package.json`,
+ `cli-package/package.json`) are two independent numbers by design — a
+ package release doesn't have to imply a contract change, and vice versa —
+ so the two currently reading differently (`"0.1.0"` vs `"1.0.0"`) isn't
+ itself a defect. What's real is that `info.version` has never moved since
+ it was introduced: `git log -p -- public/openapi.json` shows only two
+ commits touching this file, one adding the spec at `0.1.0` and a later one
+ bumping the *product* to `v1.0.0` without touching the spec at all — so the
+ contract version isn't being tracked against contract changes either, which
+ is the actual gap.
- **Published as a machine-readable document:** yes, genuinely —
`public/openapi.json` is a real OpenAPI 3.1 spec with both routes, request
- schemas, and examples, served as a static file. It just isn't kept in sync
- on the version number above.
+ schemas, and examples, served as a static file.
- **Validated at the edge:** partially. Both handlers correctly reject a
missing `acronym`/`name`/`text` with a 400 and a usage example. Neither
bounds the *length* of an incoming `text` parameter before it reaches
@@ -98,7 +103,9 @@ aren't covered by anything in the test suite as of this writing.
- Does a change alter the shape of an existing response? That is a breaking
change to a published contract, and it belongs behind a new version.
- Is anything personal placed in a URL, where it reaches logs and history?
-- **FedSpeak-specific:** does `public/openapi.json`'s `info.version` get
- bumped in the same PR as a `package.json` version bump? Nothing currently
- enforces that the two stay in sync, and they're already out of sync as of
- this writing.
+- **FedSpeak-specific:** does a PR that changes the actual API contract — a
+ route added, a parameter added or removed, a response shape changed —
+ bump `public/openapi.json`'s `info.version`? That's the trigger that
+ should move it, independent of any `package.json` version bump; as of
+ this writing nothing enforces it, and the spec's version has never moved
+ since it was introduced.
diff --git a/.challengeai/challenge-cli.md b/.challengeai/challenge-cli.md
index 697e56b..b34c419 100644
--- a/.challengeai/challenge-cli.md
+++ b/.challengeai/challenge-cli.md
@@ -34,8 +34,14 @@ and that agreement is worth enforcing mechanically rather than by habit.
FedSpeak has two agent entry points, not fully parallel: `CLAUDE.md` at the
repo root (Claude Code) and `.claude/agents.md` (also Claude-specific, despite
the generic name — it's a second, narrower file scoped to the acronym-adding
-workflow specifically, not a Codex entry point). There is no `AGENTS.md`, so
-Codex has no dedicated entry file in this repository as of this writing.
+workflow specifically, not a Codex entry point). **There is no `AGENTS.md`,
+so Codex has no dedicated entry file in this repository as of this
+writing** — a real gap against this tool's own "One source, two runtimes"
+principle: Codex started directly in this repo today would discover neither
+`CLAUDE.md` nor anything under `.challengeai/` on its own, since it reads
+`AGENTS.md` specifically. Closing it means adding a root `AGENTS.md`; that's
+a deliberate decision for a maintainer to make, not something this pass
+made unasked.
`CLAUDE.md` and `.claude/agents.md` are not kept byte-identical below a shared
heading the way some MetaPhase repos keep `AGENTS.md`/`CLAUDE.md` in sync —
they cover different scopes (`CLAUDE.md` is the general repo guide;
diff --git a/.challengeai/profile.yml b/.challengeai/profile.yml
index 5209b5b..f84b5db 100644
--- a/.challengeai/profile.yml
+++ b/.challengeai/profile.yml
@@ -61,11 +61,14 @@ standards:
gates:
# .github/workflows/ci.yml, on push to main/dev and PR to main. No
- # continue-on-error on any step, so every step here blocks a red run —
- # but note this is the only gate: no accessibility check, no SAST/dependency
- # scan, no E2E, and no branch-protection setting was found confirming any
- # of this actually blocks a merge (see enforced_by_branch_protection below).
- checks:
+ # continue-on-error on any step, so every step here fails its own workflow
+ # run on a red result — but "fails the run" and "blocks a merge" are
+ # different facts. No branch-protection setting was found confirming any
+ # of these are actually required to merge (see
+ # documented_but_unverified_branch_protection below), so this key records
+ # what the pipeline enforces on itself, not a confirmed merge gate. Don't
+ # read this list as "required checks" until that's verified.
+ workflow_checks_enforcement_unverified:
- Lint
- Type check
- Test
From c9d6a3170c453aa77bd0aaf084fa086cd807d506 Mon Sep 17 00:00:00 2001
From: Brian Funk
Date: Fri, 2 Oct 2026 00:51:09 -0400
Subject: [PATCH 4/8] v1.1.0: security deps, 2025-26 data refresh, MCP server,
llms.txt, AGENTS.md (#25)
* chore(deps): clear all security alerts, add dependabot config
Bump react-router to 7.18.4 (2 high), vitest to 4.1.11 (mocker path
traversal; 5.x needs Node 22), and refresh the lockfile for js-yaml,
browserslist, baseline-browser-mapping, @humanfs/node, and
postcss-selector-parser. npm audit now reports 0 vulnerabilities.
Add .github/dependabot.yml with weekly grouped minor/patch updates
targeting dev; majors for the framework stack are ignored. Ignore the
stray deno.lock.
* feat(data): add 37 acronyms for 2025-26 federal digital/.gov landscape, refresh stale entries
Add America.gov, National Design Studio (NDS), USAi, USA.gov, TTS,
USWDS, DAP, Cloud.gov, Search.gov, Data.gov, Code.gov, Regulations.gov,
Grants.gov, Pay.gov, Vote.gov, Challenge.gov, Performance.gov,
Digital.gov, ID.me, PRAC, OFCIO, ONCD, OSC, PMF, USAJOBS, ICR, FRN,
NSPM, NEA, NEH, IMLS, CPB, AmeriCorps, Schedule F, Schedule
Policy/Career, MAHA, Genesis Mission.
Append dated status sentences to USAID, CFPB, ED, USDS, DOGE, 18F,
DEIA, DEIA-EO, AA, USAGM, USIP. Add DEI alias to DEIA and DOGE Service
aliases to USDS. Set agency to DOW on the 130 entries still tagged DOD
to match the September 2025 rename. Total 1,119 -> 1,156.
Add scanText tests for dotted .gov keys and new aliases; sync
cli-package; update counts in README and index.html.
* feat: add MCP server (stdio + remote), llms.txt, robots.txt, sitemap
Expose the acronym database over the Model Context Protocol:
- src/shared/mcp-server.ts: createFedSpeakServer() with tools
decode_acronym, scan_text, encode_name, list_acronyms and resources
fedspeak://agencies and fedspeak://categories
- netlify/functions/mcp.ts: stateless Streamable HTTP endpoint at /mcp
with CORS, routed in netlify.toml ahead of the SPA catch-all
- cli-package: fedspeak-mcp stdio binary, createFedSpeakServer export,
@modelcontextprotocol/sdk + zod dependencies, build scripts
Fix npm package ESM output: relative imports now carry .js extensions
and JSON imports use import attributes, and the package compiles with
module NodeNext. Previously dist/index.js could not be loaded by Node
directly (ERR_MODULE_NOT_FOUND on extensionless specifiers).
Add public/llms.txt, llms-full.txt, robots.txt, sitemap.xml; annotate
openapi.json with externalDocs and x-mcp; document the MCP server on
the Docs and Package pages. Add tests/mcp.test.ts (in-memory client
and Netlify handler).
* ci: run checks on pull requests targeting dev
* ci: allow manual dispatch of CI workflow
* release: v1.1.0
Bump package, cli-package, and OpenAPI versions to 1.1.0 and add
CHANGELOG.md covering the dependency batch, data refresh, MCP server,
discovery files, and the npm ESM packaging fix.
* docs: document MCP server in README and CLAUDE.md; add acronyms.json invariant tests
Remove redundant aliases COOP (CONOPS2) and USSS (SS) that collided with
existing keys. tests/data.test.ts now enforces sorted keys, valid
categories, resolvable agency codes, https URLs, concise descriptions,
and no alias/key collisions.
* chore: remove CLAUDE.md and .claude/agents.md, point ChallengeAI docs at README/CONTRIBUTING
* docs: add AGENTS.md
---
.challengeai/challenge-ac.md | 2 +-
.challengeai/challenge-cd.md | 6 +-
.challengeai/challenge-cli.md | 16 +-
.challengeai/challenge-ea.md | 2 +-
.challengeai/challenge-iac.md | 2 +-
.challengeai/challenge-sql.md | 4 +-
.challengeai/challenge-ui.md | 4 +-
.challengeai/profile.yml | 10 +-
.claude/agents.md | 59 -
.github/dependabot.yml | 53 +
.github/workflows/ci.yml | 3 +-
.gitignore | 5 +-
AGENTS.md | 108 +
CHANGELOG.md | 26 +
CLAUDE.md | 116 -
README.md | 35 +-
cli-package/README.md | 35 +-
cli-package/package.json | 27 +-
cli-package/src/index.ts | 9 +-
cli-package/src/mcp.ts | 11 +
cli-package/src/shared/data/acronyms.json | 566 +++--
cli-package/src/shared/decoder.ts | 4 +-
cli-package/src/shared/encoder.ts | 4 +-
cli-package/src/shared/mcp-server.ts | 108 +
cli-package/src/shared/truncate.ts | 2 +-
cli-package/tsconfig.json | 17 +-
index.html | 8 +-
netlify.toml | 5 +
netlify/functions/mcp.ts | 42 +
package-lock.json | 2379 +++++++++++++--------
package.json | 30 +-
public/llms-full.txt | 124 ++
public/llms.txt | 32 +
public/openapi.json | 11 +-
public/robots.txt | 4 +
public/sitemap.xml | 11 +
scripts/sync-cli-package.sh | 1 +
src/pages/Docs.tsx | 24 +-
src/pages/PackagePage.tsx | 19 +
src/shared/data/acronyms.json | 566 +++--
src/shared/decoder.ts | 4 +-
src/shared/encoder.ts | 4 +-
src/shared/mcp-server.ts | 108 +
src/shared/truncate.ts | 2 +-
tests/data.test.ts | 55 +
tests/decoder.test.ts | 15 +
tests/mcp.test.ts | 99 +
47 files changed, 3298 insertions(+), 1479 deletions(-)
delete mode 100644 .claude/agents.md
create mode 100644 .github/dependabot.yml
create mode 100644 AGENTS.md
create mode 100644 CHANGELOG.md
delete mode 100644 CLAUDE.md
create mode 100644 cli-package/src/mcp.ts
create mode 100644 cli-package/src/shared/mcp-server.ts
create mode 100644 netlify/functions/mcp.ts
create mode 100644 public/llms-full.txt
create mode 100644 public/llms.txt
create mode 100644 public/robots.txt
create mode 100644 public/sitemap.xml
create mode 100644 src/shared/mcp-server.ts
create mode 100644 tests/data.test.ts
create mode 100644 tests/mcp.test.ts
diff --git a/.challengeai/challenge-ac.md b/.challengeai/challenge-ac.md
index 0632760..1ae8b6f 100644
--- a/.challengeai/challenge-ac.md
+++ b/.challengeai/challenge-ac.md
@@ -55,7 +55,7 @@ tests' own names and structure.
Whether one PR carries one concern, review approval is required, or
conversation resolution is enforced before merge to `main` is not verified —
see `profile.yml`'s `gates` section for what's actually confirmed versus what
-`CONTRIBUTING.md`/`CLAUDE.md` describe as the intended workflow.
+`CONTRIBUTING.md` describe as the intended workflow.
## Evidence
diff --git a/.challengeai/challenge-cd.md b/.challengeai/challenge-cd.md
index f31413b..985cba4 100644
--- a/.challengeai/challenge-cd.md
+++ b/.challengeai/challenge-cd.md
@@ -41,7 +41,7 @@ FedSpeak has two genuinely separate deployment paths that don't share the
same rigor, and this section names both honestly.
**The website + API** deploy via Netlify's own GitHub App integration — a
-push to `main` (production) or `dev` (per `CLAUDE.md`'s branching section,
+push to `main` (production) or `dev` (per `README.md`'s branching section,
though `netlify.toml` doesn't distinguish branch contexts) triggers a
Netlify build and deploy directly, entirely outside GitHub Actions. There is
no health-gated rollout: Netlify's default deploy model replaces the live
@@ -59,7 +59,7 @@ token. Publishing is a manual, undocumented-in-repo process:
`scripts/sync-cli-package.sh` copies `src/shared/*` into `cli-package/`, and
someone presumably runs `npm publish` from there by hand afterward — this
step, and who's authorized to run it, isn't written down anywhere in
-`CONTRIBUTING.md` or `CLAUDE.md`.
+`CONTRIBUTING.md` or `README.md`.
## Secrets
@@ -74,7 +74,7 @@ decision to make deliberately rather than discover.
FedSpeak needs none of this machinery because it holds no secrets at all —
confirmed directly: no `.env` file or `.env.example`, no environment
variable referenced in `netlify/functions/`, `src/`, or `netlify.toml`, and
-`CLAUDE.md`/`SECURITY.md` both state this explicitly ("No secrets or env
+`README.md`/`SECURITY.md` both state this explicitly ("No secrets or env
vars needed"). The npm publish step above would need an npm auth token
somewhere on whoever's machine runs it, but that credential lives outside
this repository entirely — not in CI, not in a GitHub secret.
diff --git a/.challengeai/challenge-cli.md b/.challengeai/challenge-cli.md
index b34c419..95f05d4 100644
--- a/.challengeai/challenge-cli.md
+++ b/.challengeai/challenge-cli.md
@@ -31,23 +31,23 @@ and that agreement is worth enforcing mechanically rather than by habit.
## In this repository
-FedSpeak has two agent entry points, not fully parallel: `CLAUDE.md` at the
-repo root (Claude Code) and `.claude/agents.md` (also Claude-specific, despite
+FedSpeak has two agent entry points, not fully parallel: `README.md` at the
+repo root (Claude Code) and `CONTRIBUTING.md` (also Claude-specific, despite
the generic name — it's a second, narrower file scoped to the acronym-adding
workflow specifically, not a Codex entry point). **There is no `AGENTS.md`,
so Codex has no dedicated entry file in this repository as of this
writing** — a real gap against this tool's own "One source, two runtimes"
principle: Codex started directly in this repo today would discover neither
-`CLAUDE.md` nor anything under `.challengeai/` on its own, since it reads
+`README.md` nor anything under `.challengeai/` on its own, since it reads
`AGENTS.md` specifically. Closing it means adding a root `AGENTS.md`; that's
a deliberate decision for a maintainer to make, not something this pass
made unasked.
-`CLAUDE.md` and `.claude/agents.md` are not kept byte-identical below a shared
-heading the way some MetaPhase repos keep `AGENTS.md`/`CLAUDE.md` in sync —
-they cover different scopes (`CLAUDE.md` is the general repo guide;
-`.claude/agents.md` is acronym-schema-specific instructions) and nothing
+`README.md` and `CONTRIBUTING.md` are not kept byte-identical below a shared
+heading the way some MetaPhase repos keep `AGENTS.md`/`README.md` in sync —
+they cover different scopes (`README.md` is the general repo guide;
+`CONTRIBUTING.md` is acronym-schema-specific instructions) and nothing
mechanically enforces agreement between them, since there's no true overlap to
-drift out of sync. `CLAUDE.md` is the one that references `.challengeai/`.
+drift out of sync. `README.md` is the one that references `.challengeai/`.
## Evidence
diff --git a/.challengeai/challenge-ea.md b/.challengeai/challenge-ea.md
index a5ec4a1..b108cdb 100644
--- a/.challengeai/challenge-ea.md
+++ b/.challengeai/challenge-ea.md
@@ -34,7 +34,7 @@ encounter it.
FedSpeak has no formal architecture documentation and no `docs/architecture/`
— the closest thing is the "Project Structure" section in `README.md` and
-`CLAUDE.md`, which both describe the same real shape: `src/shared/` (decoder,
+`README.md`, which both describe the same real shape: `src/shared/` (decoder,
encoder, truncation, types, and the acronym data itself) is the single source
of logic reused by three separate consumers — the Netlify Functions API
(`netlify/functions/decode.ts`, `encode.ts`), the React website
diff --git a/.challengeai/challenge-iac.md b/.challengeai/challenge-iac.md
index 8a20452..c701e52 100644
--- a/.challengeai/challenge-iac.md
+++ b/.challengeai/challenge-iac.md
@@ -32,7 +32,7 @@ repository controls is `netlify.toml` (build command, publish directory,
functions directory, and two redirect rules) plus whatever's configured
directly in Netlify's own dashboard (the site's Netlify project, its custom
domain, and its GitHub-App connection) and Cloudflare's dashboard (DNS
-records pointing `fedspeak.dev` at `fedspeak.netlify.app`, per `CLAUDE.md`).
+records pointing `fedspeak.dev` at `fedspeak.netlify.app`, per `README.md`).
None of that dashboard-level configuration is declared as code anywhere in
this repository — it's clicked, not committed, and there's no record here of
what's actually configured beyond what `netlify.toml` covers.
diff --git a/.challengeai/challenge-sql.md b/.challengeai/challenge-sql.md
index 39f875b..aaf500a 100644
--- a/.challengeai/challenge-sql.md
+++ b/.challengeai/challenge-sql.md
@@ -43,7 +43,7 @@ a function on a column, or a mismatched type will each quietly defeat one.
## In this repository
-FedSpeak has no database at all — `CLAUDE.md` states this directly ("Data:
+FedSpeak has no database at all — `README.md` states this directly ("Data:
Static JSON (no database)") and it's confirmed by the actual code: the entire
data layer is `src/shared/data/acronyms.json`, a single committed file (1,119
entries), read into an in-memory `Map` at module load in both
@@ -55,7 +55,7 @@ is a JSON object edited directly in a pull request.
Most of this tool's requirements — access control roles, RLS, migration
checksums — don't apply to a static, read-only, committed dataset with no
runtime write path. What does carry over is data *correctness*: entries are
-added by hand (per `CONTRIBUTING.md`'s and `.claude/agents.md`'s documented
+added by hand (per `CONTRIBUTING.md`'s documented
schema), kept in alphabetical order by convention rather than enforced
ordering, and there's no automated check that a new entry conforms to the
schema (required fields present, `category` one of the nine allowed values,
diff --git a/.challengeai/challenge-ui.md b/.challengeai/challenge-ui.md
index 7929151..cf22a40 100644
--- a/.challengeai/challenge-ui.md
+++ b/.challengeai/challenge-ui.md
@@ -53,8 +53,8 @@ That's the practical reason this tool applies here even without a legal
mandate.
Against that, there is **no accessibility target declared anywhere** in this
-repository — not in `README.md`, not in `CLAUDE.md`, not in
-`.claude/agents.md` — and **no automated accessibility check runs at any
+repository — not in `README.md`, not in `README.md`, not in
+`CONTRIBUTING.md` — and **no automated accessibility check runs at any
point**: `ci.yml` runs lint, typecheck, test, and build only; no axe-core,
no Lighthouse, no `@axe-core/playwright` or equivalent appears in
`package.json`'s devDependencies or in any workflow file. `profile.yml`
diff --git a/.challengeai/profile.yml b/.challengeai/profile.yml
index f84b5db..206e15d 100644
--- a/.challengeai/profile.yml
+++ b/.challengeai/profile.yml
@@ -33,7 +33,7 @@ stack:
# src/shared/data/acronyms.json, committed to the repo, no database.
data: static-json
hosting: netlify
- # fedspeak.dev (Cloudflare DNS) -> fedspeak.netlify.app (CLAUDE.md).
+ # fedspeak.dev (Cloudflare DNS) -> fedspeak.netlify.app (README.md).
dns: cloudflare
# Both live on the npm registry as of this writing: `fedspeak` and
# `@metaphase-tech/fedspeak`, both at 1.0.0 — confirmed against the
@@ -49,13 +49,13 @@ standards:
control_baseline: null
impact_level: null
# No accessibility target is declared anywhere in this repository — no CI
- # scan, no stated WCAG level, nothing in CLAUDE.md or .claude/agents.md.
+ # scan, no stated WCAG level, nothing in README.md or CONTRIBUTING.md.
# `null` records that absence honestly rather than inventing a target this
# repo doesn't actually hold itself to. See ChallengeUI.
accessibility: null
accessibility_authority: null
# No accounts, no stored user input, no analytics, no cookies — confirmed
- # via SECURITY.md, CLAUDE.md, and a direct search of the source for any
+ # via SECURITY.md, README.md, and a direct search of the source for any
# tracking/analytics integration (found none, index.html included).
privacy_assessment_required: false
@@ -84,11 +84,11 @@ gates:
# A GET request to the GitHub branch-protection API for both `main` and
# `dev` returned 404 (not-protected or insufficient token scope — not
# distinguishable from the outside) as of this writing. Nothing here is
- # confirmed; it's what CONTRIBUTING.md and CLAUDE.md describe as the
+ # confirmed; it's what CONTRIBUTING.md and README.md describe as the
# intended workflow (PR review before merge to main), not a verified
# GitHub setting.
documented_but_unverified_branch_protection:
- - PR review before merge to main (per CONTRIBUTING.md/CLAUDE.md, not
+ - PR review before merge to main (per CONTRIBUTING.md/README.md, not
confirmed as an enforced GitHub branch-protection rule)
branches:
diff --git a/.claude/agents.md b/.claude/agents.md
deleted file mode 100644
index 0ee508f..0000000
--- a/.claude/agents.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Agent Instructions — FedSpeak
-
-## Context
-
-FedSpeak is a Federal Acronym Decoder maintained by MetaPhase. The core data lives in `src/shared/data/acronyms.json`. The API runs as Netlify Functions, the website is Vite + React.
-
-## When Adding Acronyms
-
-1. **Read the existing file first** — `src/shared/data/acronyms.json` has 600+ entries. Do not create duplicates.
-2. **Follow the exact schema:**
- ```json
- "ACRONYM": {
- "full": "Full Name",
- "description": "Brief 1-2 sentence description.",
- "agency": "Parent agency acronym or 'General'",
- "category": "department|agency|office|bureau|program|process|regulation|system|general"
- }
- ```
-3. **Optional fields:** `url` (official website), `aliases` (alternate spellings/abbreviations)
-4. **Keep keys sorted alphabetically** in the JSON file.
-5. **Descriptions should be concise** — what the thing IS or DOES, not its full history.
-6. **Agency field** — use the parent department acronym (e.g., `"DOD"` for DISA, `"DHS"` for TSA, `"General"` for cross-cutting terms).
-7. **Category choices:**
- - `department` — Cabinet-level departments (DOD, HHS, etc.)
- - `agency` — Independent agencies or major sub-agencies
- - `office` — Named offices within agencies
- - `bureau` — Named bureaus within departments
- - `program` — Government programs (SNAP, TRICARE, etc.)
- - `process` — Acquisition processes, reviews, milestones
- - `regulation` — Laws, acts, regulations, standards
- - `system` — IT systems, databases, platforms
- - `general` — Everything else (titles, terms, concepts)
-
-## When Modifying Code
-
-- Run `npm run lint && npm run typecheck && npm run test:run` before committing.
-- The shared logic in `src/shared/` is used by the API functions, the website, and the npm package.
-- Changes to `types.ts` affect all three consumers.
-- The `truncate.ts` module has function overloads for both DecodeResponse and EncodeResponse.
-
-## When Working on the API
-
-- Functions are in `netlify/functions/` using Netlify Functions v2 format.
-- Both decode and encode support GET (query params) and POST (JSON body).
-- Always include CORS headers in responses.
-- Responses are progressively truncated to stay under 2000 chars (handled by truncate).
-
-## When Working on the Website
-
-- React 18 + React Router 7 + Tailwind 3.4
-- Components in `src/components/`, pages in `src/pages/`
-- The TryItDemo component uses the decoder directly (client-side), not the API.
-- Swagger UI is loaded from CDN in ApiReference.tsx.
-
-## Git Workflow
-
-- Work in `dev` branch (default).
-- PR to `main` for production deploys to Netlify.
-- Commit messages: imperative mood with prefix (`feat:`, `fix:`, `docs:`, `chore:`).
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..673aebd
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,53 @@
+version: 2
+updates:
+ - package-ecosystem: npm
+ directory: /
+ schedule:
+ interval: weekly
+ day: monday
+ open-pull-requests-limit: 5
+ target-branch: dev
+ commit-message:
+ prefix: "chore(deps)"
+ groups:
+ prod-deps:
+ dependency-type: production
+ update-types: [minor, patch]
+ dev-deps:
+ dependency-type: development
+ update-types: [minor, patch]
+ ignore:
+ # Majors handled deliberately, not by bot
+ - dependency-name: react
+ update-types: [version-update:semver-major]
+ - dependency-name: react-dom
+ update-types: [version-update:semver-major]
+ - dependency-name: vite
+ update-types: [version-update:semver-major]
+ - dependency-name: vitest
+ update-types: [version-update:semver-major]
+ - dependency-name: "@vitest/*"
+ update-types: [version-update:semver-major]
+ - dependency-name: tailwindcss
+ update-types: [version-update:semver-major]
+ - dependency-name: eslint
+ update-types: [version-update:semver-major]
+ - dependency-name: typescript
+ update-types: [version-update:semver-major]
+
+ - package-ecosystem: npm
+ directory: /cli-package
+ schedule:
+ interval: weekly
+ day: monday
+ target-branch: dev
+ commit-message:
+ prefix: "chore(deps)"
+
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: monthly
+ target-branch: dev
+ commit-message:
+ prefix: "chore(ci)"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9343194..fc50242 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,7 +4,8 @@ on:
push:
branches: [main, dev]
pull_request:
- branches: [main]
+ branches: [main, dev]
+ workflow_dispatch:
jobs:
build:
diff --git a/.gitignore b/.gitignore
index ef19735..bbe7092 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,7 @@ dist-ssr
coverage/
# Claude (keep agents.md tracked, ignore local settings)
-.claude/settings.local.json
+.claude/
+
+# Deno
+deno.lock
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..36e23e6
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,108 @@
+# FedSpeak Agent Guidelines
+
+Persistent repo-level guidance for AI coding agents working in FedSpeak.
+Read this before starting work; update it whenever the user gives new standing guidance.
+
+## Project
+
+- Repo: FedSpeak — Federal Acronym Decoder (https://github.com/MetaPhase-Consulting/fedspeak)
+- Hosting: Netlify (SPA + Functions v2). Production domain `fedspeak.dev` (Cloudflare DNS → `fedspeak.netlify.app`).
+- Surfaces: website, REST API (`/api/decode`, `/api/encode`), MCP server (`/mcp` remote, `fedspeak-mcp` stdio), npm package (`fedspeak` and `@metaphase-tech/fedspeak`), CLI.
+- Data: one static JSON file, `src/shared/data/acronyms.json`. No database, no auth, no secrets, no env vars, no user data stored.
+- Default branch: `dev`. Production branch: `main`.
+- Built with **ChallengeAI**, MetaPhase's accelerator suite for federal software delivery. The federal layer lives in [`.challengeai/`](.challengeai/); [`CHALLENGEAI.md`](CHALLENGEAI.md) is the index. FedSpeak is not itself a federal information system; `.challengeai/profile.yml` says so directly.
+
+## Reading Order
+
+1. `README.md` — overview, quick start, API and package reference, project structure.
+2. This file.
+3. `CONTRIBUTING.md` — how to add acronyms, commit style, git workflow.
+4. `CHANGELOG.md` — what shipped in each version.
+5. `public/llms.txt` — the agent-facing description of the service (keep it accurate when endpoints or counts change).
+
+## Standing Preferences
+
+- **No AI attribution anywhere.** No `Co-Authored-By` trailers naming a model or vendor, no "Generated with" lines, no model names in commit messages, PR titles, PR bodies, branch names, or code comments. Commits and PRs are authored by humans only. If a tool injects such a trailer, strip it before pushing.
+- **No agent-specific instruction files other than this one.** Do not add `CLAUDE.md`, `.claude/`, `.cursor/`, or similar. Conventions belong in `README.md`, `CONTRIBUTING.md`, or here.
+- Branch names: short, descriptive, professional (`feat/data-2026-refresh`, `chore/security-deps-batch`).
+- Commit messages: imperative mood, prefixed (`feat:`, `fix:`, `docs:`, `chore:`, `ci:`, `release:`).
+- Refer to the company as **"MetaPhase"** in user-facing copy. Full legal name only in `LICENSE`.
+- Never remove entries from `.gitignore` without explicit permission.
+- Prefer one PR per unit of work. When asked, collapse stacked PRs into a single PR to `dev` rather than leaving several open.
+
+## Data Rules (acronyms.json)
+
+- **Add missing terms, update stale ones, delete nothing.** Old names stay decodable (see `DOD` → `DOW`).
+- **No editorial commentary.** Descriptions state facts. For 2025–26 reorganizations, keep the original sentence and append a dated, neutral status sentence, e.g. "Revoked by Executive Order 14151 on January 20, 2025." Verify with a current source before writing.
+- Schema per entry: `full`, `description` (1–2 sentences, ≤400 chars), `agency` (a key in the file or `General`), `category` (one of `department|agency|office|bureau|program|process|regulation|system|general`), optional `url` (https) and `aliases`.
+- Keys sorted alphabetically. Aliases must not collide with any key or other alias (case-insensitive). `tests/data.test.ts` enforces all of this.
+- `agency` for Department of War components is `DOW`, not `DOD`.
+- Hardcoded counts live in `README.md`, `cli-package/README.md`, `index.html`, and `public/llms.txt`. Update them when the total changes.
+- After any change under `src/shared/` or to the data, run `scripts/sync-cli-package.sh` and commit the synced copies in `cli-package/`.
+- Known open question: `SSA` is Source Selection Authority; Social Security Administration has no entry. Do not resolve this without the user.
+
+## Repository Map
+
+- `netlify/functions/` — `decode.ts`, `encode.ts` (REST), `mcp.ts` (MCP Streamable HTTP, stateless, CORS). Routed in `netlify.toml`; the `/mcp` redirect must stay ahead of the SPA catch-all.
+- `src/shared/` — core logic shared by API, website, and npm package: `types.ts`, `decoder.ts`, `encoder.ts`, `truncate.ts` (2000-char progressive truncation), `mcp-server.ts` (`createFedSpeakServer()`), `data/acronyms.json`.
+- `src/components/`, `src/pages/` — React UI. Routes: `/`, `/search`, `/scan`, `/docs`, `/api`, `/package`, `/cli`.
+- `cli-package/` — published npm package. `src/shared/` here is a synced copy, never edited directly. `src/mcp.ts` is the `fedspeak-mcp` stdio binary.
+- `public/` — `openapi.json`, `llms.txt`, `llms-full.txt`, `robots.txt`, `sitemap.xml`, manifest, favicon.
+- `tests/` — Vitest: `decoder`, `encoder`, `truncate`, `mcp`, `data`.
+- `scripts/sync-cli-package.sh` — copies shared sources, data, README, LICENSE into `cli-package/`.
+- `.github/workflows/ci.yml` — lint → typecheck → test → build on Node 20. `dependabot.yml` — weekly grouped minor/patch bumps to `dev`; majors for the framework stack are ignored on purpose.
+
+## Module Format
+
+Files under `src/shared/` use `.js` extensions on relative imports and `with { type: 'json' }` on JSON imports so the npm package compiles to Node-loadable ESM (`cli-package/tsconfig.json` uses `module: NodeNext`). Vite, Vitest, ESLint, and Netlify's esbuild all accept this. Do not strip the extensions or attributes.
+
+## MCP Server
+
+- Tools: `decode_acronym`, `scan_text`, `encode_name`, `list_acronyms`. Resources: `fedspeak://agencies`, `fedspeak://categories`.
+- All tools are read-only and idempotent; keep the annotations that say so. No LLM calls, no network calls, data only.
+- The remote endpoint is stateless (`sessionIdGenerator: undefined`, JSON responses). Do not add session state; Netlify functions do not share memory.
+- `MCP_SERVER_INFO.version` in `src/shared/mcp-server.ts` should match the package version.
+
+## Tech Stack
+
+- Node 20 in CI (`.github/workflows/ci.yml`); `cli-package` declares `engines.node >= 20`. Check `engines` of any new dependency against Node 20 before installing.
+- TypeScript 5.9 strict, no `any`. 2-space indent, single quotes, trailing commas.
+- Vite 7 + React 18 + Tailwind 3.4 + React Router 7. Vitest 4. ESLint 9 flat config. lucide-react icons.
+- `@modelcontextprotocol/sdk` + `zod` 3 for MCP.
+- `package-lock.json` is the single lockfile.
+
+## Branching and Releases
+
+- Feature branches off `dev`; PRs target `dev` (`gh pr create --base dev`). `dev → main` PRs deploy production.
+- Release checklist: bump `version` in `package.json`, `cli-package/package.json`, and `public/openapi.json`; update `MCP_SERVER_INFO.version`; add a `CHANGELOG.md` entry; sync `cli-package`; merge to `main`; tag `vX.Y.Z`; the user publishes `cli-package` under both npm names (agents cannot publish from this machine).
+- CI note: in this repo GitHub Actions has not been firing on `push`/`pull_request`. Until an org admin fixes it, trigger a run with `gh workflow run ci.yml --ref ` and wait for it before calling a PR ready.
+
+## PR Review Workflow
+
+1. Fetch comments: `gh api repos/MetaPhase-Consulting/fedspeak/pulls/{N}/comments` and `.../issues/{N}/comments`.
+2. Triage and fix every actionable item.
+3. Reply inline with `-F in_reply_to={comment_id}`. Never leave review comments unanswered on a PR marked ready.
+4. Push, re-run CI, confirm green.
+
+## Release Gates
+
+Every PR must pass locally and in CI:
+
+- `npm run lint`
+- `npm run typecheck`
+- `npm run test:run`
+- `npm run build`
+- `npm audit` → 0 vulnerabilities (dev dependencies included)
+- For anything touching `src/shared/` or the data: `scripts/sync-cli-package.sh`, then `cd cli-package && npm run build`.
+- For anything touching `netlify/`: `netlify dev --offline` smoke of `/api/decode` and `/mcp`.
+
+## Never Do Autonomously
+
+- Merge PRs, deploy to `main`, tag releases, or publish to npm.
+- Delete acronym entries or rewrite descriptions in a way that adds opinion.
+- Close Dependabot PRs before the superseding change has merged.
+- Add authentication, telemetry, or any form of user data collection.
+
+## Maintenance Rule
+
+When the user gives process feedback, record it here so every future session picks it up. Keep this file the single source of agent guidance for the repo.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..6ae745b
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,26 @@
+# Changelog
+
+All notable changes to FedSpeak are documented here. Versions follow [Semantic Versioning](https://semver.org/).
+
+## [1.1.0] - 2026-10-02
+
+### Added
+- **MCP server.** FedSpeak is now a Model Context Protocol server. Remote Streamable HTTP endpoint at `https://fedspeak.dev/mcp` (stateless, no auth) and a `fedspeak-mcp` stdio binary in the npm package. Tools: `decode_acronym`, `scan_text`, `encode_name`, `list_acronyms`. Resources: `fedspeak://agencies`, `fedspeak://categories`. `createFedSpeakServer()` is exported for embedding.
+- **Agent discovery files.** `/llms.txt`, `/llms-full.txt`, `/robots.txt`, `/sitemap.xml`; `openapi.json` gains `externalDocs` and `x-mcp`.
+- **37 acronyms** (1,119 → 1,156), covering the 2025–26 federal digital landscape: America.gov, National Design Studio (NDS), USAi, USA.gov, TTS, USWDS, DAP, Cloud.gov, Search.gov, Data.gov, Code.gov, Regulations.gov, Grants.gov, Pay.gov, Vote.gov, Challenge.gov, Performance.gov, Digital.gov, ID.me, PRAC, OFCIO, ONCD, OSC, PMF, USAJOBS, ICR, FRN, NSPM, NEA, NEH, IMLS, CPB, AmeriCorps, Schedule F, Schedule Policy/Career, MAHA, Genesis Mission.
+- Aliases: `DEI` → DEIA, `U.S. DOGE Service` → USDS, `Schedule P/C`, `MAHA Commission`, `National Design Studio`.
+- ChallengeAI federal delivery layer under `.challengeai/` (docs only).
+- `.github/dependabot.yml` with weekly grouped minor/patch updates; CI now runs on pull requests to `dev` and supports manual dispatch.
+
+### Changed
+- Dated status sentences appended to USAID, CFPB, ED, USDS, DOGE, 18F, DEIA, DEIA-EO, AA, USAGM, USIP. Original text retained; nothing removed.
+- `agency` set to `DOW` on the 130 entries still tagged `DOD`, matching the September 2025 rename.
+- Dependencies: react-router 7.18, vitest 4.1, vite 7.3.6, eslint 9.39.5, and friends. `npm audit` reports 0 vulnerabilities.
+
+### Fixed
+- Redundant aliases `COOP` (on CONOPS2) and `USSS` (on SS) removed; both shadowed entries that exist as their own keys. New `tests/data.test.ts` guards sorted keys, valid categories, resolvable agency codes, https URLs, and alias/key collisions.
+- **npm package could not be loaded by Node directly.** Compiled ESM used extensionless relative imports and a bare JSON import. Shared sources now use `.js` specifiers and `with { type: 'json' }`; the package compiles with `module: NodeNext`.
+
+## [1.0.0] - 2026-02-21
+
+Initial public release: decode/encode REST API, website with search and text scan, npm package and CLI, 1,119 acronyms.
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 06eab82..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,116 +0,0 @@
-# CLAUDE.md — FedSpeak
-
-## About This Repo
-
-**FedSpeak** is a Federal Acronym Decoder API and website built by MetaPhase. It decodes (and encodes) U.S. government acronyms from text or single lookups.
-
-Built with **ChallengeAI**, MetaPhase's accelerator suite for federal software delivery. The federal layer lives in [`.challengeai/`](.challengeai/); [`CHALLENGEAI.md`](CHALLENGEAI.md) is the index. FedSpeak is not itself a federal information system — `.challengeai/profile.yml` and `challenge-ato.md` say so directly, rather than restating federal-delivery standards this repo doesn't actually pursue.
-
-## Project Structure
-
-```
-fedspeak/
-├── netlify/functions/ — Serverless API endpoints (Netlify Functions v2)
-│ ├── decode.ts — POST /api/decode (acronym → full name)
-│ └── encode.ts — POST /api/encode (full name → acronym)
-├── src/
-│ ├── shared/ — Core logic shared by API, website, and npm package
-│ │ ├── types.ts — TypeScript interfaces
-│ │ ├── decoder.ts — lookupAcronym(), scanText(), decode()
-│ │ ├── encoder.ts — lookupName(), scanTextForNames(), encode()
-│ │ ├── truncate.ts — Response truncation (2000-char limit)
-│ │ └── data/
-│ │ └── acronyms.json — Acronym database (sorted alphabetically)
-│ ├── components/ — React UI components
-│ ├── pages/ — React Router pages
-│ └── cli/ — CLI scaffold (deferred)
-├── cli-package/ — npm package scaffold for publishing
-├── tests/ — Vitest test suites
-├── public/openapi.json — OpenAPI 3.1 specification
-└── .github/workflows/ — CI/CD (lint → typecheck → test → build)
-```
-
-## Build, Test, and Development Commands
-
-- `npm run dev` — Start Vite dev server + Netlify functions (localhost:8888)
-- `npm run build` — Production build
-- `npm run lint` — ESLint (v9 flat config)
-- `npm run typecheck` — TypeScript strict check
-- `npm run test` — Vitest in watch mode
-- `npm run test:run` — Vitest single run (CI)
-- `npm run test:coverage` — Vitest with v8 coverage
-- `netlify dev` — Full local dev with functions at localhost:8888
-
-## Tech Stack
-
-- **Runtime:** Node.js 20, TypeScript 5.5
-- **API:** Netlify Functions v2 (serverless)
-- **Data:** Static JSON (no database)
-- **Website:** Vite 7.x + React 18 + Tailwind 3.4 + React Router 7
-- **Testing:** Vitest + @vitest/coverage-v8
-- **Linting:** ESLint v9 flat config
-- **Icons:** lucide-react
-- **CI/CD:** GitHub Actions → Netlify
-
-## Coding Style & Conventions
-
-- TypeScript strict mode, no `any` (eslint-disable only for external lib types)
-- 2-space indent, single quotes, trailing commas
-- ESLint v9 flat config matching MetaPhase org patterns (geoforge, dutystation)
-- Prettier for formatting
-- Filenames: kebab-case for components/pages, camelCase for shared logic
-- React: functional components only, hooks
-
-## Acronym Data Format
-
-Every entry in `acronyms.json` follows this schema:
-
-```json
-"ACRONYM": {
- "full": "Full Name",
- "description": "Brief description of what it is/does.",
- "agency": "Parent agency acronym (or 'General')",
- "category": "department|agency|office|bureau|program|process|regulation|system|general",
- "url": "https://optional-official-website.gov",
- "aliases": ["optional", "alternate", "spellings"]
-}
-```
-
-Keys are sorted alphabetically. Keep descriptions concise (1-2 sentences).
-
-## API Design
-
-Both endpoints support GET (query params) and POST (JSON body):
-
-- **Decode:** `POST /api/decode` — `{ "acronym": "GSA" }` or `{ "text": "The GSA and OMB..." }`
-- **Encode:** `POST /api/encode` — `{ "name": "General Services Administration" }` or `{ "text": "..." }`
-
-Responses are progressively truncated to stay under 2000 chars.
-
-## Branching & Deployment
-
-- **`dev`** — Default working branch. All development happens here.
-- **`main`** — Production branch. Merges from `dev` via PR trigger Netlify deploy.
-- **Domain:** fedspeak.dev (Cloudflare DNS) → fedspeak.netlify.app (Netlify)
-
-## Commit & PR Guidelines
-
-- Commits: imperative mood, prefixed (`feat:`, `fix:`, `docs:`, `chore:`)
-- PRs: dev → main for production deploys
-- CI must pass (lint, typecheck, test, build) before merge
-
-## Testing
-
-- Tests in `tests/` directory
-- `decoder.test.ts` — lookup, scan, alias, edge cases
-- `encoder.test.ts` — reverse lookup, name scan
-- `truncate.test.ts` — progressive truncation logic
-- All tests must pass before committing
-
-## Security
-
-- No authentication on API (public, read-only data)
-- CORS headers set in Netlify functions
-- No secrets or env vars needed
-- Static JSON data, no database, no user input stored
-- Deeper posture (input validation, rate limiting, accessibility, ATO status) lives in `.challengeai/` — see `challenge-api.md`, `challenge-ui.md`, and `challenge-ato.md` rather than restating it here.
diff --git a/README.md b/README.md
index d6e97db..828ab8f 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@
[](https://github.com/MetaPhase-Consulting/fedspeak/actions/workflows/ci.yml)
[](LICENSE)
[](https://metaphase.tech)
-[](https://www.typescriptlang.org/)
+[](https://www.typescriptlang.org/)
**Federal Acronym Decoder** — Decode and encode U.S. government acronyms from text or single lookups.
-FedSpeak is a REST API, interactive website, and npm package that expands **1,119 federal government acronyms** with full names, descriptions, agency context, and category classifications.
+FedSpeak is a REST API, interactive website, and npm package that expands **1,156 federal government acronyms** with full names, descriptions, agency context, and category classifications.
**Website:** [fedspeak.dev](https://fedspeak.dev)
@@ -18,9 +18,10 @@ FedSpeak is a REST API, interactive website, and npm package that expands **1,11
- **Decode** — Send any acronym, get the full expansion with description, agency, and category
- **Encode** — Send a full name, get the acronym back
- **Text Scanning** — Paste a block of text, FedSpeak finds and decodes every recognized acronym
-- **1,119 Acronyms** — Departments, agencies, cybersecurity, NIST, CMMC, procurement, contract vehicles, legislation, and more
+- **1,156 Acronyms** — Departments, agencies, cybersecurity, NIST, CMMC, procurement, contract vehicles, legislation, and more
- **REST API** — GET and POST support, JSON responses, CORS enabled
- **npm Package** — Use the decoder directly in your Node.js projects
+- **MCP Server** — Remote endpoint at `fedspeak.dev/mcp` plus a `fedspeak-mcp` stdio binary, so Claude, ChatGPT, Cursor, and other agents can call it
- **Interactive Demo** — Try it live at [fedspeak.dev](https://fedspeak.dev)
## Quick Start
@@ -72,9 +73,27 @@ const encoded = encode({ name: 'General Services Administration' });
console.log(encoded.results[0].acronym); // "GSA"
// Total count
-console.log(getAcronymCount()); // 1069
+console.log(getAcronymCount()); // 1156
```
+### MCP Server (AI agents)
+
+FedSpeak is a [Model Context Protocol](https://modelcontextprotocol.io) server. Tools: `decode_acronym`, `scan_text`, `encode_name`, `list_acronyms`. Resources: `fedspeak://agencies`, `fedspeak://categories`.
+
+```bash
+# Remote (Streamable HTTP, stateless, no auth)
+claude mcp add --transport http fedspeak https://fedspeak.dev/mcp
+
+# Local over stdio
+npx -y -p @metaphase-tech/fedspeak fedspeak-mcp
+```
+
+```json
+{ "mcpServers": { "fedspeak": { "url": "https://fedspeak.dev/mcp" } } }
+```
+
+Agent-oriented overview at [fedspeak.dev/llms.txt](https://fedspeak.dev/llms.txt).
+
## API Reference
### Decode
@@ -171,7 +190,7 @@ import type {
## Acronym Coverage
-1,119 entries across these categories:
+1,156 entries across these categories:
| Category | Examples |
|----------|----------|
@@ -220,11 +239,13 @@ npm install
fedspeak/
├── netlify/functions/ Serverless API endpoints
│ ├── decode.ts POST /api/decode
-│ └── encode.ts POST /api/encode
+│ ├── encode.ts POST /api/encode
+│ └── mcp.ts POST /mcp (MCP Streamable HTTP)
├── src/
│ ├── shared/ Core logic (shared by API, website, npm package)
│ │ ├── decoder.ts lookupAcronym(), scanText(), decode()
│ │ ├── encoder.ts lookupName(), scanTextForNames(), encode()
+│ │ ├── mcp-server.ts createFedSpeakServer() — MCP tools and resources
│ │ ├── truncate.ts Response truncation
│ │ ├── types.ts TypeScript interfaces
│ │ └── data/
@@ -233,7 +254,7 @@ fedspeak/
│ └── pages/ React Router pages
├── cli-package/ npm package for publishing
├── tests/ Vitest test suites
-├── public/openapi.json OpenAPI 3.1 specification
+├── public/ openapi.json, llms.txt, robots.txt, sitemap.xml
└── .github/workflows/ CI/CD pipelines
```
diff --git a/cli-package/README.md b/cli-package/README.md
index d6e97db..828ab8f 100644
--- a/cli-package/README.md
+++ b/cli-package/README.md
@@ -5,11 +5,11 @@
[](https://github.com/MetaPhase-Consulting/fedspeak/actions/workflows/ci.yml)
[](LICENSE)
[](https://metaphase.tech)
-[](https://www.typescriptlang.org/)
+[](https://www.typescriptlang.org/)
**Federal Acronym Decoder** — Decode and encode U.S. government acronyms from text or single lookups.
-FedSpeak is a REST API, interactive website, and npm package that expands **1,119 federal government acronyms** with full names, descriptions, agency context, and category classifications.
+FedSpeak is a REST API, interactive website, and npm package that expands **1,156 federal government acronyms** with full names, descriptions, agency context, and category classifications.
**Website:** [fedspeak.dev](https://fedspeak.dev)
@@ -18,9 +18,10 @@ FedSpeak is a REST API, interactive website, and npm package that expands **1,11
- **Decode** — Send any acronym, get the full expansion with description, agency, and category
- **Encode** — Send a full name, get the acronym back
- **Text Scanning** — Paste a block of text, FedSpeak finds and decodes every recognized acronym
-- **1,119 Acronyms** — Departments, agencies, cybersecurity, NIST, CMMC, procurement, contract vehicles, legislation, and more
+- **1,156 Acronyms** — Departments, agencies, cybersecurity, NIST, CMMC, procurement, contract vehicles, legislation, and more
- **REST API** — GET and POST support, JSON responses, CORS enabled
- **npm Package** — Use the decoder directly in your Node.js projects
+- **MCP Server** — Remote endpoint at `fedspeak.dev/mcp` plus a `fedspeak-mcp` stdio binary, so Claude, ChatGPT, Cursor, and other agents can call it
- **Interactive Demo** — Try it live at [fedspeak.dev](https://fedspeak.dev)
## Quick Start
@@ -72,9 +73,27 @@ const encoded = encode({ name: 'General Services Administration' });
console.log(encoded.results[0].acronym); // "GSA"
// Total count
-console.log(getAcronymCount()); // 1069
+console.log(getAcronymCount()); // 1156
```
+### MCP Server (AI agents)
+
+FedSpeak is a [Model Context Protocol](https://modelcontextprotocol.io) server. Tools: `decode_acronym`, `scan_text`, `encode_name`, `list_acronyms`. Resources: `fedspeak://agencies`, `fedspeak://categories`.
+
+```bash
+# Remote (Streamable HTTP, stateless, no auth)
+claude mcp add --transport http fedspeak https://fedspeak.dev/mcp
+
+# Local over stdio
+npx -y -p @metaphase-tech/fedspeak fedspeak-mcp
+```
+
+```json
+{ "mcpServers": { "fedspeak": { "url": "https://fedspeak.dev/mcp" } } }
+```
+
+Agent-oriented overview at [fedspeak.dev/llms.txt](https://fedspeak.dev/llms.txt).
+
## API Reference
### Decode
@@ -171,7 +190,7 @@ import type {
## Acronym Coverage
-1,119 entries across these categories:
+1,156 entries across these categories:
| Category | Examples |
|----------|----------|
@@ -220,11 +239,13 @@ npm install
fedspeak/
├── netlify/functions/ Serverless API endpoints
│ ├── decode.ts POST /api/decode
-│ └── encode.ts POST /api/encode
+│ ├── encode.ts POST /api/encode
+│ └── mcp.ts POST /mcp (MCP Streamable HTTP)
├── src/
│ ├── shared/ Core logic (shared by API, website, npm package)
│ │ ├── decoder.ts lookupAcronym(), scanText(), decode()
│ │ ├── encoder.ts lookupName(), scanTextForNames(), encode()
+│ │ ├── mcp-server.ts createFedSpeakServer() — MCP tools and resources
│ │ ├── truncate.ts Response truncation
│ │ ├── types.ts TypeScript interfaces
│ │ └── data/
@@ -233,7 +254,7 @@ fedspeak/
│ └── pages/ React Router pages
├── cli-package/ npm package for publishing
├── tests/ Vitest test suites
-├── public/openapi.json OpenAPI 3.1 specification
+├── public/ openapi.json, llms.txt, robots.txt, sitemap.xml
└── .github/workflows/ CI/CD pipelines
```
diff --git a/cli-package/package.json b/cli-package/package.json
index 7ee92f7..ba442c2 100644
--- a/cli-package/package.json
+++ b/cli-package/package.json
@@ -1,13 +1,16 @@
{
"name": "@metaphase-tech/fedspeak",
- "version": "1.0.0",
+ "version": "1.1.0",
"description": "Federal Acronym Decoder — decode U.S. government acronyms from text or single lookups",
"keywords": [
"federal",
"government",
"acronyms",
"decoder",
- "api"
+ "api",
+ "mcp",
+ "model-context-protocol",
+ "ai"
],
"author": "MetaPhase",
"license": "MIT",
@@ -26,11 +29,29 @@
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts"
+ },
+ "./mcp": {
+ "import": "./dist/shared/mcp-server.js",
+ "types": "./dist/shared/mcp-server.d.ts"
}
},
"files": [
"dist",
"README.md",
"LICENSE"
- ]
+ ],
+ "bin": {
+ "fedspeak-mcp": "dist/mcp.js"
+ },
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.31.0",
+ "zod": "^3.25.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "scripts": {
+ "build": "tsc",
+ "prepublishOnly": "npm run build"
+ }
}
diff --git a/cli-package/src/index.ts b/cli-package/src/index.ts
index a541888..180f068 100644
--- a/cli-package/src/index.ts
+++ b/cli-package/src/index.ts
@@ -1,9 +1,9 @@
// FedSpeak npm package entry point
// Re-exports from shared core (files synced via scripts/sync-cli-package.sh)
-export { lookupAcronym, scanText, decode, getAllAcronyms, getAcronymCount } from './shared/decoder';
-export { lookupName, scanTextForNames, encode } from './shared/encoder';
-export { truncateResponse } from './shared/truncate';
+export { lookupAcronym, scanText, decode, getAllAcronyms, getAcronymCount } from './shared/decoder.js';
+export { lookupName, scanTextForNames, encode } from './shared/encoder.js';
+export { truncateResponse } from './shared/truncate.js';
export type {
AcronymCategory,
AcronymEntry,
@@ -14,4 +14,5 @@ export type {
EncodedResult,
EncodeResponse,
EncodeRequest,
-} from './shared/types';
+} from './shared/types.js';
+export { createFedSpeakServer, MCP_SERVER_INFO } from './shared/mcp-server.js';
diff --git a/cli-package/src/mcp.ts b/cli-package/src/mcp.ts
new file mode 100644
index 0000000..1ed8527
--- /dev/null
+++ b/cli-package/src/mcp.ts
@@ -0,0 +1,11 @@
+#!/usr/bin/env node
+// FedSpeak MCP server over stdio. Usage: npx -p @metaphase-tech/fedspeak fedspeak-mcp
+import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
+import { createFedSpeakServer } from './shared/mcp-server.js';
+
+const server = createFedSpeakServer();
+const transport = new StdioServerTransport();
+server.connect(transport).catch((err: unknown) => {
+ console.error('fedspeak-mcp failed to start:', err);
+ process.exit(1);
+});
diff --git a/cli-package/src/shared/data/acronyms.json b/cli-package/src/shared/data/acronyms.json
index 6e8cb55..bd1655a 100644
--- a/cli-package/src/shared/data/acronyms.json
+++ b/cli-package/src/shared/data/acronyms.json
@@ -1,10 +1,9 @@
{
"18F": {
"full": "18F",
- "description": "GSA digital services consultancy helping agencies build user-centered technology.",
+ "description": "GSA digital services consultancy that helped agencies build user-centered technology. Disbanded by GSA in March 2025.",
"agency": "GSA",
- "category": "office",
- "url": "https://18f.gsa.gov"
+ "category": "office"
},
"2FA": {
"full": "Two-Factor Authentication",
@@ -38,7 +37,7 @@
},
"AA": {
"full": "Affirmative Action",
- "description": "Policies and practices designed to increase representation of underrepresented groups in areas such as federal employment and contracting.",
+ "description": "Policies and practices designed to increase representation of underrepresented groups in areas such as federal employment and contracting. Executive Order 14173 (January 2025) revoked Executive Order 11246, ending affirmative action requirements for federal contractors.",
"agency": "General",
"category": "general"
},
@@ -75,7 +74,7 @@
"ACAT": {
"full": "Acquisition Category",
"description": "DOD classification of acquisition programs based on cost and oversight requirements.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"ACC": {
@@ -87,7 +86,7 @@
"ACC-RI": {
"full": "Army Contracting Command - Rock Island",
"description": "Army contracting center at Rock Island Arsenal managing major IT contract vehicles including ITES-3S.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "office"
},
"ACE-acq": {
@@ -143,7 +142,7 @@
"ADVANA": {
"full": "Advancing Analytics",
"description": "DOD enterprise data and analytics platform providing a common data environment and business intelligence tools across the department.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"AES": {
@@ -161,25 +160,25 @@
"AFARS": {
"full": "Army Federal Acquisition Regulation Supplement",
"description": "Army supplement to DFARS containing additional procurement policies and procedures specific to Army acquisitions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"AFFARS": {
"full": "Air Force Federal Acquisition Regulation Supplement",
"description": "Air Force supplement to DFARS containing additional procurement rules specific to Air Force acquisitions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"AFLCMC": {
"full": "Air Force Life Cycle Management Center",
"description": "Air Force center responsible for total lifecycle management of weapon systems including development, production, and sustainment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"AFMC": {
"full": "Air Force Materiel Command",
"description": "Air Force command responsible for research, development, testing, acquisition, and sustainment of weapon systems.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"AFOSI": {
@@ -191,7 +190,7 @@
"AFRICOM": {
"full": "United States Africa Command",
"description": "DOD unified combatant command responsible for military operations in Africa.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"AFRL": {
@@ -203,14 +202,14 @@
"AFSOC": {
"full": "Air Force Special Operations Command",
"description": "Air Force component command providing special operations forces for global missions including unconventional warfare, direct action, and personnel recovery.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.afsoc.af.mil"
},
"AFWERX": {
"full": "Air Force Warfighting Integration Capability",
"description": "Air Force innovation program connecting startups and small businesses with Air Force problems using SBIR, challenges, and other transactions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"AHRQ": {
@@ -253,7 +252,7 @@
"AMC-army": {
"full": "Army Materiel Command",
"description": "Army command responsible for materiel development, acquisition, and sustainment of weapons and equipment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"AMS": {
@@ -358,7 +357,7 @@
"ASSIST": {
"full": "Acquisition Streamlining and Standardization Information System",
"description": "DOD online repository for military and federal specifications, standards, and related standardization documents.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"ATDA": {
@@ -405,6 +404,20 @@
"category": "program",
"url": "https://www.abilityone.gov"
},
+ "AmeriCorps": {
+ "full": "AmeriCorps",
+ "description": "Federal agency for national service and volunteerism, operating AmeriCorps State and National, VISTA, NCCC, and Seniors programs. Operating name of the Corporation for National and Community Service since 2020.",
+ "agency": "CNCS",
+ "category": "agency",
+ "url": "https://americorps.gov"
+ },
+ "America.gov": {
+ "full": "America.gov",
+ "description": "GSA-operated, AI-powered portal established by executive order on September 29, 2026 as the unified digital front door to federal information and services. Run with the National Design Studio and OMB, with Login.gov as its authentication service.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://america.gov"
+ },
"Amtrak": {
"full": "National Railroad Passenger Corporation",
"description": "Government-supported corporation providing intercity passenger rail service.",
@@ -616,7 +629,7 @@
"C3PAO": {
"full": "CMMC Third-Party Assessor Organization",
"description": "Accredited organization authorized to conduct CMMC assessments of defense contractors seeking certification.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"C4ISR": {
@@ -640,13 +653,13 @@
"CAC": {
"full": "Common Access Card",
"description": "Standard identification and smart card for DOD personnel and contractors.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"CAGE": {
"full": "Commercial and Government Entity Code",
"description": "Five-character identifier for entities doing business with the federal government.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"CAO": {
@@ -726,7 +739,7 @@
"CC SRG": {
"full": "Cloud Computing Security Requirements Guide",
"description": "DISA document defining security requirements for cloud service providers hosting DOD workloads at various impact levels.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"CCE": {
@@ -781,7 +794,7 @@
"CDRL": {
"full": "Contract Data Requirements List",
"description": "List specifying data deliverables required under a DOD contract.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"CE": {
@@ -799,7 +812,7 @@
"CECOM": {
"full": "Communications-Electronics Command",
"description": "Army command providing lifecycle management for C4ISR systems, networks, and communications equipment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"CEF": {
@@ -811,7 +824,7 @@
"CENTCOM": {
"full": "United States Central Command",
"description": "DOD unified combatant command responsible for the Middle East and Central/South Asia.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"CEQ": {
@@ -865,7 +878,7 @@
},
"CFPB": {
"full": "Consumer Financial Protection Bureau",
- "description": "Agency protecting consumers from unfair financial practices.",
+ "description": "Agency protecting consumers from unfair financial practices. Since 2025 the bureau has operated under a workforce reduction plan and a reduced statutory funding cap, with ongoing litigation over its restructuring.",
"agency": "CFPB",
"category": "agency",
"url": "https://www.consumerfinance.gov"
@@ -893,7 +906,7 @@
"CHESS": {
"full": "Computer Hardware, Enterprise Software and Solutions",
"description": "Army mandatory source for commercial IT hardware, software, and services, managing ITES and other enterprise IT contracts.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"CHIP": {
@@ -1010,7 +1023,7 @@
"CMMC": {
"full": "Cybersecurity Maturity Model Certification",
"description": "DOD framework for assessing and certifying cybersecurity practices of defense contractors.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"CMMI": {
@@ -1101,7 +1114,7 @@
"COCOM": {
"full": "Combatant Command",
"description": "Unified or specified military command with broad continuing missions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"COFC": {
@@ -1132,15 +1145,12 @@
"full": "Continuity of Operations",
"description": "Planning to ensure essential functions continue during and after a disruption.",
"agency": "General",
- "category": "process",
- "aliases": [
- "COOP"
- ]
+ "category": "process"
},
"CONUS": {
"full": "Continental United States",
"description": "Geographic designation for the 48 contiguous U.S. states and the District of Columbia.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"COOP": {
@@ -1194,6 +1204,13 @@
"agency": "General",
"category": "system"
},
+ "CPB": {
+ "full": "Corporation for Public Broadcasting",
+ "description": "Private nonprofit corporation created by Congress in 1967 to fund public broadcasting. Its federal funding was rescinded in July 2025, and the corporation announced it would wind down operations.",
+ "agency": "General",
+ "category": "agency",
+ "url": "https://www.cpb.org"
+ },
"CPD": {
"full": "Capability Production Document",
"description": "Document refining requirements for production of a proposed system.",
@@ -1349,7 +1366,7 @@
"CYBERCOM": {
"full": "United States Cyber Command",
"description": "DOD unified combatant command directing cyberspace operations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"Category Mgmt": {
@@ -1358,12 +1375,32 @@
"agency": "EOP",
"category": "program"
},
+ "Challenge.gov": {
+ "full": "Challenge.gov",
+ "description": "GSA-operated platform listing federal prize competitions and challenges authorized under the America COMPETES Act.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://www.challenge.gov"
+ },
"Clinger-Cohen": {
"full": "Clinger-Cohen Act",
"description": "Federal law (P.L. 104-106, Division E) reforming IT management in the federal government, establishing CIO positions and capital planning requirements. Also known as the Information Technology Management Reform Act.",
"agency": "General",
"category": "regulation"
},
+ "Cloud.gov": {
+ "full": "Cloud.gov",
+ "description": "GSA/TTS FedRAMP-authorized platform as a service for hosting federal web applications.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://cloud.gov"
+ },
+ "Code.gov": {
+ "full": "Code.gov",
+ "description": "Federal open source code catalog created under the Federal Source Code Policy (OMB M-16-21) in 2016. The standalone site was retired in 2024, with its guidance moved to Digital.gov.",
+ "agency": "GSA",
+ "category": "system"
+ },
"D&F": {
"full": "Determination and Findings",
"description": "Written approval by an authorized official required as a prerequisite to certain contract actions, containing findings of fact supporting a determination.",
@@ -1379,15 +1416,22 @@
"DACM": {
"full": "Director of Acquisition Career Management",
"description": "Official responsible for managing the acquisition workforce development and certification programs within a DOD component.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"DAI": {
"full": "Defense Agencies Initiative",
"description": "DOD financial management system providing standardized accounting and business processes for defense agencies.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
+ "DAP": {
+ "full": "Digital Analytics Program",
+ "description": "GSA/TTS program providing shared web analytics across federal websites, with public dashboards at analytics.usa.gov.",
+ "agency": "GSA",
+ "category": "program",
+ "url": "https://digital.gov/guides/dap"
+ },
"DAR": {
"full": "Data at Rest",
"description": "Data stored on a device or medium not actively being transmitted, requiring encryption under federal security policies.",
@@ -1397,14 +1441,14 @@
"DARPA": {
"full": "Defense Advanced Research Projects Agency",
"description": "DOD agency responsible for development of emerging technologies for military use.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.darpa.mil"
},
"DARS": {
"full": "Defense Acquisition Regulation System",
"description": "DOD system maintaining and issuing DFARS and related procurement regulations and guidance.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"DAST": {
@@ -1453,20 +1497,20 @@
"DCAA": {
"full": "Defense Contract Audit Agency",
"description": "DOD agency providing audit and financial advisory services for defense contracts.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dcaa.mil"
},
"DCAM": {
"full": "Defense Contract Audit Manual",
"description": "DCAA manual providing comprehensive audit guidance for examining contractor costs, systems, and financial practices.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"DCAS": {
"full": "Defense Contract Administration Services",
"description": "DOD function providing contract administration services for defense procurements.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"DCIS": {
@@ -1478,14 +1522,14 @@
"DCMA": {
"full": "Defense Contract Management Agency",
"description": "DOD agency providing contract administration services for defense acquisitions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dcma.mil"
},
"DCMC": {
"full": "Defense Contract Management Command",
"description": "Former DOD organization providing contract management services, now DCMA.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"DCOI": {
@@ -1497,14 +1541,14 @@
"DCSA": {
"full": "Defense Counterintelligence and Security Agency",
"description": "DOD agency responsible for security clearance investigations and industrial security.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dcsa.mil"
},
"DD": {
"full": "Department of Defense Form",
"description": "Official forms used within the Department of Defense.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"DDoS": {
@@ -1523,7 +1567,7 @@
"DEAMS": {
"full": "Defense Enterprise Accounting and Management System",
"description": "Air Force enterprise resource planning system for financial management and accounting, built on Oracle software.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DEAR": {
@@ -1540,20 +1584,23 @@
},
"DEIA": {
"full": "Diversity, Equity, Inclusion, and Accessibility",
- "description": "Federal workforce initiative promoting diverse and inclusive workplaces.",
+ "description": "Federal workforce initiative promoting diverse and inclusive workplaces. Executive Order 14035 establishing the government-wide DEIA initiative was revoked by Executive Order 14151 in January 2025, which directed agencies to end DEIA offices and programs.",
"agency": "General",
- "category": "general"
+ "category": "general",
+ "aliases": [
+ "DEI"
+ ]
},
"DEIA-EO": {
"full": "Diversity, Equity, Inclusion, and Accessibility Executive Order",
- "description": "Executive Order 14035 advancing DEIA across the federal workforce through recruitment, hiring, retention, and workplace culture initiatives.",
+ "description": "Executive Order 14035 advancing DEIA across the federal workforce through recruitment, hiring, retention, and workplace culture initiatives. Revoked by Executive Order 14151 on January 20, 2025.",
"agency": "EOP",
"category": "regulation"
},
"DEOS": {
"full": "Defense Enterprise Office Solutions",
"description": "DOD enterprise collaboration contract providing Microsoft 365 cloud-based productivity services across the department, managed by DISA.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"DEVGRU": {
@@ -1565,13 +1612,13 @@
"DFAR": {
"full": "Defense Federal Acquisition Regulation",
"description": "Alternative abbreviation for DFARS, the DOD supplement to the Federal Acquisition Regulation containing defense-specific procurement policies.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"DFARS": {
"full": "Defense Federal Acquisition Regulation Supplement",
"description": "DOD supplement to the FAR with additional defense-specific procurement rules.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"DFAS": {
@@ -1617,7 +1664,7 @@
"DIA": {
"full": "Defense Intelligence Agency",
"description": "DOD agency providing military intelligence to warfighters and policymakers.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dia.mil"
},
@@ -1636,19 +1683,19 @@
"DIBBS": {
"full": "DLA Internet Bid Board System",
"description": "DLA online platform for posting solicitations and receiving bids for defense logistics and supply chain requirements.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DID": {
"full": "Data Item Description",
"description": "Document defining the format, content, and preparation instructions for a data deliverable.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"DISA": {
"full": "Defense Information Systems Agency",
"description": "DOD agency providing IT and communications support to the military.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.disa.mil"
},
@@ -1661,13 +1708,13 @@
"DITCO": {
"full": "Defense Information Technology Contracting Organization",
"description": "DISA's contracting arm managing over $32 billion in contracts, the premier DOD cyber procurement workforce.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "office"
},
"DIU": {
"full": "Defense Innovation Unit",
"description": "DOD organization accelerating adoption of commercial technology through prototype projects using other transaction authority.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"DKIM": {
@@ -1679,7 +1726,7 @@
"DLA": {
"full": "Defense Logistics Agency",
"description": "DOD agency providing supply chain and logistics support to the military.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dla.mil"
},
@@ -1761,7 +1808,7 @@
},
"DOGE": {
"full": "Department of Government Efficiency",
- "description": "Government body focused on identifying and implementing efficiency improvements across federal agencies.",
+ "description": "Temporary EOP organization established by executive order in January 2025 to modernize federal technology and reduce federal spending, with a scheduled termination date of July 4, 2026. OPM stated in November 2025 that it no longer existed as a centralized entity.",
"agency": "EOP",
"category": "office"
},
@@ -1831,19 +1878,19 @@
"DPAP": {
"full": "Defense Procurement and Acquisition Policy",
"description": "DOD office responsible for procurement and acquisition policy and oversight.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "office"
},
"DPAS": {
"full": "Defense Priorities and Allocations System",
"description": "System ensuring timely availability of industrial resources for national defense.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DPAS-rating": {
"full": "Defense Priorities and Allocations System Rating",
"description": "Priority rating assigned to defense contracts to ensure timely delivery of materials.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DPC": {
@@ -1886,7 +1933,7 @@
"DTRA": {
"full": "Defense Threat Reduction Agency",
"description": "DOD agency providing capabilities to reduce, eliminate, and counter threats from weapons of mass destruction.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.dtra.mil"
},
@@ -1896,12 +1943,26 @@
"agency": "General",
"category": "system"
},
+ "Data.gov": {
+ "full": "Data.gov",
+ "description": "GSA-managed catalog of federal open datasets established under the Open Government Directive and the OPEN Government Data Act.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://data.gov"
+ },
"DevSecOps": {
"full": "Development, Security, and Operations",
"description": "Approach integrating security practices into the DevOps software development lifecycle.",
"agency": "General",
"category": "general"
},
+ "Digital.gov": {
+ "full": "Digital.gov",
+ "description": "GSA/TTS resource hub with guidance, standards, and communities of practice for federal digital services.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://digital.gov"
+ },
"DoDD": {
"full": "Department of Defense Directive",
"description": "DOD issuance establishing policy and assigning responsibilities.",
@@ -1917,13 +1978,13 @@
"DoDIIS": {
"full": "Department of Defense Intelligence Information System",
"description": "DOD enterprise system supporting intelligence processing, exploitation, and dissemination across defense intelligence organizations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DoDIN": {
"full": "Department of Defense Information Network",
"description": "DOD globally interconnected information capability for collecting, processing, storing, and disseminating information to warfighters and decision makers.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"DoDM": {
@@ -1990,7 +2051,7 @@
"ECP": {
"full": "Engineering Change Proposal",
"description": "Formal proposal to modify a system design, configuration, or documentation. Used in defense acquisition to manage changes to approved baselines.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"ECPA": {
@@ -2007,7 +2068,7 @@
},
"ED": {
"full": "Department of Education",
- "description": "Federal department responsible for education policy and federal financial aid.",
+ "description": "Federal department responsible for education policy and federal financial aid. Executive Order 14242 (March 2025) directed steps to close the department; since then it has transferred administration of many programs to other agencies through interagency agreements while retaining statutory responsibility.",
"agency": "ED",
"category": "department",
"url": "https://www.ed.gov"
@@ -2015,7 +2076,7 @@
"EDA": {
"full": "Electronic Document Access",
"description": "DOD web-based system providing secure online access to contract documents, modifications, and related procurement data.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"EDR": {
@@ -2095,7 +2156,7 @@
"ENCORE III": {
"full": "Enterprise Network Contracting Operations for Responsive Engineering III",
"description": "DISA flagship $17.5 billion IDIQ contract vehicle providing full-range IT services and solutions to DOD, federal agencies, and the intelligence community.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"EO": {
@@ -2200,7 +2261,7 @@
"ESI": {
"full": "Enterprise Software Initiative",
"description": "DOD program for enterprise-wide software license agreements to reduce IT costs.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"ESPC": {
@@ -2218,7 +2279,7 @@
"EUCOM": {
"full": "United States European Command",
"description": "DOD unified combatant command responsible for Europe and parts of Asia and Africa.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"EVM": {
@@ -2690,7 +2751,7 @@
"FOC": {
"full": "Full Operational Capability",
"description": "Achievement of complete operational deployment of a system with all planned capabilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"FOIA": {
@@ -2804,6 +2865,12 @@
"agency": "DOJ",
"category": "regulation"
},
+ "FRN": {
+ "full": "Federal Register Notice",
+ "description": "Official notice published in the Federal Register announcing rules, proposed rules, meetings, and information collections.",
+ "agency": "General",
+ "category": "process"
+ },
"FRP": {
"full": "Full Rate Production",
"description": "Production phase following successful testing and Milestone C approval.",
@@ -2865,7 +2932,7 @@
"FYDP": {
"full": "Future Years Defense Program",
"description": "DOD document projecting forces, resources, and programs over a five-year period.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"FedBid": {
@@ -2957,7 +3024,7 @@
"GFEBS": {
"full": "General Fund Enterprise Business System",
"description": "Army enterprise resource planning system for financial management, accounting, and asset management using SAP software.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"GFI": {
@@ -3101,6 +3168,12 @@
"agency": "General",
"category": "process"
},
+ "Genesis Mission": {
+ "full": "Genesis Mission",
+ "description": "DOE-led national initiative established by executive order in November 2025 to apply AI and federal scientific datasets to accelerate scientific discovery through the American Science and Security Platform.",
+ "agency": "DOE",
+ "category": "program"
+ },
"Goldwater-Nichols": {
"full": "Goldwater-Nichols Department of Defense Reorganization Act",
"description": "Federal law (P.L. 99-433) restructuring DOD, strengthening the Chairman of the Joint Chiefs of Staff, establishing joint combatant commands, and streamlining the military chain of command.",
@@ -3113,6 +3186,13 @@
"agency": "General",
"category": "general"
},
+ "Grants.gov": {
+ "full": "Grants.gov",
+ "description": "HHS-managed central portal for finding and applying for federal discretionary grants.",
+ "agency": "HHS",
+ "category": "system",
+ "url": "https://www.grants.gov"
+ },
"HASC": {
"full": "House Armed Services Committee",
"description": "Standing committee of the U.S. House of Representatives with jurisdiction over defense policy, military operations, and the annual National Defense Authorization Act.",
@@ -3135,7 +3215,7 @@
"HBSS": {
"full": "Host Based Security System",
"description": "DOD endpoint security suite providing intrusion prevention, firewall, and application control capabilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"HCA": {
@@ -3323,12 +3403,25 @@
"agency": "ODNI",
"category": "program"
},
+ "ICR": {
+ "full": "Information Collection Request",
+ "description": "Agency submission to OMB/OIRA seeking approval under the Paperwork Reduction Act before collecting information from the public.",
+ "agency": "EOP",
+ "category": "process"
+ },
"ICS": {
"full": "Industrial Control System",
"description": "Computer systems managing industrial processes and critical infrastructure such as power grids and water treatment.",
"agency": "General",
"category": "general"
},
+ "ID.me": {
+ "full": "ID.me",
+ "description": "Private identity verification provider used by several federal agencies, including the IRS, VA, and Social Security Administration, as a login and identity-proofing option.",
+ "agency": "General",
+ "category": "system",
+ "url": "https://www.id.me"
+ },
"IDA": {
"full": "Institute for Defense Analyses",
"description": "FFRDC providing analyses of national security issues for the DOD.",
@@ -3435,25 +3528,25 @@
"IL2": {
"full": "Impact Level 2",
"description": "DOD cloud security classification for non-controlled unclassified information publicly releasable.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"IL4": {
"full": "Impact Level 4",
"description": "DOD cloud security classification for Controlled Unclassified Information requiring protection under NIST 800-171.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"IL5": {
"full": "Impact Level 5",
"description": "DOD cloud security classification for higher-sensitivity CUI and National Security Systems requiring dedicated infrastructure.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"IL6": {
"full": "Impact Level 6",
"description": "DOD cloud security classification for classified information up to Secret, requiring government-owned and operated infrastructure.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"IMINT": {
@@ -3462,10 +3555,17 @@
"agency": "DOW",
"category": "general"
},
+ "IMLS": {
+ "full": "Institute of Museum and Library Services",
+ "description": "Independent agency providing federal support to libraries and museums. Directed to reduce to its statutory minimum by Executive Order 14238 in March 2025; subject of ongoing litigation.",
+ "agency": "IMLS",
+ "category": "agency",
+ "url": "https://www.imls.gov"
+ },
"IMP": {
"full": "Integrated Master Plan",
"description": "Event-driven plan documenting program accomplishments and criteria for success.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"IMS": {
@@ -3477,7 +3577,7 @@
"INDOPACOM": {
"full": "United States Indo-Pacific Command",
"description": "DOD unified combatant command responsible for the Indo-Pacific region.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"INL": {
@@ -3501,7 +3601,7 @@
"IOC": {
"full": "Initial Operational Capability",
"description": "First achievement of the ability to employ a system in its intended operational environment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"IPERA": {
@@ -3549,7 +3649,7 @@
"IRAP": {
"full": "Invoice, Receipt, Acceptance and Property Transfer",
"description": "DOD module within PIEE for processing invoices, receipts, and government property transfers on contracts.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"IRS": {
@@ -3629,7 +3729,7 @@
"ITES-3S": {
"full": "Information Technology Enterprise Solutions - 3 Services",
"description": "Army $12.1 billion multiple-award IDIQ for enterprise IT services available to all federal agencies, managed by CHESS at ACC-Rock Island.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"ITIL": {
@@ -3702,7 +3802,7 @@
"JIAG": {
"full": "Judge Advocate General",
"description": "Senior legal officer in a military branch responsible for military justice.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general",
"aliases": [
"JAG"
@@ -3711,7 +3811,7 @@
"JIE": {
"full": "Joint Information Environment",
"description": "DOD initiative to consolidate IT infrastructure, networks, and systems into a single shared computing environment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"JPL": {
@@ -3741,7 +3841,7 @@
"JWICS": {
"full": "Joint Worldwide Intelligence Communications System",
"description": "DOD's Top Secret/SCI network for intelligence community communications.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"JWOD": {
@@ -3871,6 +3971,15 @@
"agency": "General",
"category": "process"
},
+ "MAHA": {
+ "full": "Make America Healthy Again",
+ "description": "Presidential commission established by Executive Order 14212 in February 2025 and chaired by the HHS Secretary to address chronic disease, with an initial focus on childhood health.",
+ "agency": "HHS",
+ "category": "program",
+ "aliases": [
+ "MAHA Commission"
+ ]
+ },
"MAIS": {
"full": "Major Automated Information System",
"description": "DOD information system with development costs exceeding specified thresholds.",
@@ -3893,7 +4002,7 @@
"MARSOC": {
"full": "Marine Forces Special Operations Command",
"description": "Marine Corps component of U.S. Special Operations Command providing special operations forces capable of direct action, special reconnaissance, and foreign internal defense.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.marsoc.marines.mil"
},
@@ -3931,7 +4040,7 @@
"MDA": {
"full": "Milestone Decision Authority",
"description": "Official responsible for approving a DOD acquisition program at key decision points.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"MDAP": {
@@ -3943,7 +4052,7 @@
"MDD": {
"full": "Materiel Development Decision",
"description": "DOD decision point validating the need for a materiel solution and authorizing entry into the acquisition process, typically preceding Milestone A.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"MDM": {
@@ -3961,7 +4070,7 @@
"MEDCOM": {
"full": "Army Medical Command",
"description": "Army command responsible for medical research, training, and health care delivery for soldiers, retirees, and their families across military treatment facilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"MFA": {
@@ -3979,7 +4088,7 @@
"MHS GENESIS": {
"full": "Military Health System GENESIS",
"description": "DOD enterprise electronic health record system based on Oracle Cerner, replacing legacy systems across military treatment facilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"MIA": {
@@ -4127,7 +4236,7 @@
"NAVAIR": {
"full": "Naval Air Systems Command",
"description": "Navy command providing acquisition, logistics, and sustainment support for naval aviation platforms and weapons systems.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"NAVFAC": {
@@ -4139,13 +4248,13 @@
"NAVSEA": {
"full": "Naval Sea Systems Command",
"description": "Navy command responsible for engineering, building, buying, and maintaining ships, submarines, and combat systems.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"NAVSUP": {
"full": "Naval Supply Systems Command",
"description": "Navy command providing logistics, business, and support services including contracting for the Navy and Marine Corps.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"NCCIC": {
@@ -4207,7 +4316,7 @@
"NDAA": {
"full": "National Defense Authorization Act",
"description": "Annual legislation authorizing defense spending and setting military policy.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"NDAA-annual": {
@@ -4219,15 +4328,38 @@
"NDIS": {
"full": "National Defense Industrial Strategy",
"description": "DOD strategy to modernize and strengthen the defense industrial base through workforce development, supply chain resilience, and acquisition reform.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
+ "NDS": {
+ "full": "National Design Studio",
+ "description": "White House office established by executive order in August 2025 and led by the Chief Design Officer of the United States to redesign federal websites and digital services.",
+ "agency": "EOP",
+ "category": "office",
+ "aliases": [
+ "National Design Studio"
+ ]
+ },
+ "NEA": {
+ "full": "National Endowment for the Arts",
+ "description": "Independent agency providing federal grants for the arts and arts education.",
+ "agency": "NEA",
+ "category": "agency",
+ "url": "https://www.arts.gov"
+ },
"NEC": {
"full": "National Economic Council",
"description": "EOP body coordinating domestic and international economic policy.",
"agency": "EOP",
"category": "office"
},
+ "NEH": {
+ "full": "National Endowment for the Humanities",
+ "description": "Independent agency providing federal grants for humanities research, education, and preservation.",
+ "agency": "NEH",
+ "category": "agency",
+ "url": "https://www.neh.gov"
+ },
"NEPA": {
"full": "National Environmental Policy Act",
"description": "Federal law requiring environmental impact assessments for major federal actions.",
@@ -4249,7 +4381,7 @@
"NGA": {
"full": "National Geospatial-Intelligence Agency",
"description": "DOD agency providing geospatial intelligence and mapping support.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.nga.mil"
},
@@ -4281,7 +4413,7 @@
"NIAP": {
"full": "National Information Assurance Partnership",
"description": "NSA/NIST collaboration evaluating IT products for national security systems under Common Criteria.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"NICE": {
@@ -4319,7 +4451,7 @@
"NIPRNet": {
"full": "Non-classified Internet Protocol Router Network",
"description": "DOD network for transmitting unclassified but sensitive information.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"NIST": {
@@ -4362,7 +4494,7 @@
"NIWC": {
"full": "Naval Information Warfare Center",
"description": "Navy systems center performing research, development, and engineering for information warfare and C4ISR capabilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"NLRB": {
@@ -4375,7 +4507,7 @@
"NMCARS": {
"full": "Navy Marine Corps Acquisition Regulation Supplement",
"description": "Navy and Marine Corps supplement to DFARS with service-specific acquisition policies and procedures.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"NMFS": {
@@ -4400,7 +4532,7 @@
"NORTHCOM": {
"full": "United States Northern Command",
"description": "DOD unified combatant command responsible for homeland defense of North America.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"NPDES": {
@@ -4464,14 +4596,14 @@
"NRO": {
"full": "National Reconnaissance Office",
"description": "DOD agency designing, building, and operating reconnaissance satellites.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.nro.gov"
},
"NSA": {
"full": "National Security Agency",
"description": "DOD agency responsible for signals intelligence and information assurance.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.nsa.gov"
},
@@ -4498,7 +4630,7 @@
"NSIN": {
"full": "National Security Innovation Network",
"description": "DOD program office connecting innovators from universities, startups, and communities with national security challenges.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"NSM": {
@@ -4513,6 +4645,12 @@
"agency": "EOP",
"category": "general"
},
+ "NSPM": {
+ "full": "National Security Presidential Memorandum",
+ "description": "Presidential directive on national security policy, used in the first Trump administration (2017-2021) and again from 2025.",
+ "agency": "EOP",
+ "category": "general"
+ },
"NSWC": {
"full": "Naval Surface Warfare Center",
"description": "Navy organization providing research, development, and testing for surface warfare.",
@@ -4597,7 +4735,7 @@
"OCO": {
"full": "Overseas Contingency Operations",
"description": "Budget category for war-related military funding that was exempt from Budget Control Act spending caps.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"OCO-ordering": {
@@ -4609,7 +4747,7 @@
"OCONUS": {
"full": "Outside the Continental United States",
"description": "Geographic designation for locations outside the 48 contiguous U.S. states.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"OCSP": {
@@ -4650,6 +4788,12 @@
"agency": "DOL",
"category": "office"
},
+ "OFCIO": {
+ "full": "Office of the Federal Chief Information Officer",
+ "description": "OMB office leading government-wide IT policy, including FISMA, FITARA, and federal cybersecurity oversight.",
+ "agency": "EOP",
+ "category": "office"
+ },
"OFPP": {
"full": "Office of Federal Procurement Policy",
"description": "OMB office responsible for government-wide procurement policy guidance.",
@@ -4766,6 +4910,13 @@
"agency": "EOP",
"category": "regulation"
},
+ "ONCD": {
+ "full": "Office of the National Cyber Director",
+ "description": "EOP office established by the FY2021 NDAA to advise the President on cybersecurity policy and coordinate national cyber strategy.",
+ "agency": "EOP",
+ "category": "office",
+ "url": "https://www.whitehouse.gov/oncd"
+ },
"ONDCP": {
"full": "Office of National Drug Control Policy",
"description": "EOP office coordinating national drug control policy.",
@@ -4826,7 +4977,7 @@
"OPORD": {
"full": "Operations Order",
"description": "Directive issued by a military commander detailing a planned operation.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"OPR": {
@@ -4847,6 +4998,13 @@
"agency": "DOE",
"category": "agency"
},
+ "OSC": {
+ "full": "Office of Special Counsel",
+ "description": "Independent agency investigating prohibited personnel practices, Hatch Act violations, and whistleblower disclosures by federal employees.",
+ "agency": "OSC",
+ "category": "agency",
+ "url": "https://osc.gov"
+ },
"OSCAL": {
"full": "Open Security Controls Assessment Language",
"description": "NIST framework for standardizing security assessment documentation in machine-readable formats.",
@@ -5023,13 +5181,13 @@
"PCS": {
"full": "Permanent Change of Station",
"description": "Official relocation of a military member or federal employee to a new duty station.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"PD2": {
"full": "Procurement Desktop Defense",
"description": "DOD standard contract writing system used to create, manage, and track procurement actions and contract documents.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"PDD": {
@@ -5059,7 +5217,7 @@
"PEO-EIS": {
"full": "Program Executive Office Enterprise Information Systems",
"description": "Army PEO managing enterprise IT systems and services including Army network modernization and ITES contracts.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "office"
},
"PEO-STRI": {
@@ -5101,7 +5259,7 @@
"PIEE": {
"full": "Procurement Integrated Enterprise Environment",
"description": "DOD web-based system integrating procurement, contract administration, payment, and receipt functions including WAWF and IRAP.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"PII": {
@@ -5152,6 +5310,12 @@
"agency": "General",
"category": "general"
},
+ "PMF": {
+ "full": "Presidential Management Fellows",
+ "description": "OPM-run leadership development program for advanced-degree graduates entering federal service. Terminated by Executive Order 14217 in February 2025.",
+ "agency": "OPM",
+ "category": "program"
+ },
"PMO": {
"full": "Program Management Office",
"description": "Organizational unit overseeing the management of specific programs or projects.",
@@ -5200,7 +5364,7 @@
"POM": {
"full": "Program Objective Memorandum",
"description": "DOD document proposing total program resource requirements for the Future Years Defense Program.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"POTUS": {
@@ -5224,7 +5388,7 @@
"PPBE": {
"full": "Planning, Programming, Budgeting, and Execution",
"description": "DOD resource allocation process for aligning budgets with strategic priorities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"PPD": {
@@ -5242,7 +5406,7 @@
"PPSM": {
"full": "Ports, Protocols, and Services Management",
"description": "DOD program managing network ports, protocols, and services to reduce the attack surface.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"PRA": {
@@ -5251,6 +5415,13 @@
"agency": "General",
"category": "regulation"
},
+ "PRAC": {
+ "full": "Pandemic Response Accountability Committee",
+ "description": "Committee of inspectors general within CIGIE created by the CARES Act in 2020 to oversee pandemic relief spending. Its statutory authorization was scheduled to expire September 30, 2025.",
+ "agency": "General",
+ "category": "office",
+ "url": "https://www.pandemicoversight.gov"
+ },
"PRISM": {
"full": "Procurement Information System for Management",
"description": "Civilian agency contract writing and management system used by multiple federal agencies for procurement actions.",
@@ -5287,6 +5458,20 @@
"agency": "General",
"category": "general"
},
+ "Pay.gov": {
+ "full": "Pay.gov",
+ "description": "Treasury Bureau of the Fiscal Service platform for making payments to federal agencies online.",
+ "agency": "TREAS",
+ "category": "system",
+ "url": "https://www.pay.gov"
+ },
+ "Performance.gov": {
+ "full": "Performance.gov",
+ "description": "OMB site, operated with GSA, publishing agency strategic goals and performance results required by the GPRA Modernization Act.",
+ "agency": "EOP",
+ "category": "system",
+ "url": "https://www.performance.gov"
+ },
"Privacy Act": {
"full": "Privacy Act of 1974",
"description": "Federal law (5 U.S.C. 552a) establishing a code of fair information practices governing federal agency collection, maintenance, use, and dissemination of personal information.",
@@ -5461,6 +5646,13 @@
"agency": "General",
"category": "general"
},
+ "Regulations.gov": {
+ "full": "Regulations.gov",
+ "description": "eRulemaking Program portal, managed by GSA, for finding and commenting on federal proposed rules, notices, and supporting documents.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://www.regulations.gov"
+ },
"Rehab Act": {
"full": "Rehabilitation Act of 1973",
"description": "Federal law (29 U.S.C. 701 et seq.) prohibiting disability discrimination in federal programs, including Section 503 (contractors), Section 504 (federal assistance), and Section 508 (IT accessibility).",
@@ -5637,19 +5829,19 @@
"SCI": {
"full": "Sensitive Compartmented Information",
"description": "Classified information concerning intelligence sources, methods, and analytical processes.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"SCIF": {
"full": "Sensitive Compartmented Information Facility",
"description": "Accredited room or building for processing classified intelligence information.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"SCO": {
"full": "Strategic Capabilities Office",
"description": "DOD office repurposing existing military systems and commercial technology to create new asymmetric capabilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "office"
},
"SCOTUS": {
@@ -5758,13 +5950,13 @@
"SETA": {
"full": "Systems Engineering and Technical Assistance",
"description": "Contract support providing engineering, technical, and analytical services to government program offices managing acquisition programs.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"SETI": {
"full": "Systems Engineering, Technology, and Innovation",
"description": "DISA contract vehicle providing systems engineering, technical support, and innovation services for defense IT programs.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"SEWP": {
@@ -5851,7 +6043,7 @@
"SIPRNet": {
"full": "Secret Internet Protocol Router Network",
"description": "DOD network for transmitting classified information up to the Secret level.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"SITL": {
@@ -5863,7 +6055,7 @@
"SITREP": {
"full": "Situation Report",
"description": "Periodic report providing a summary of the current situation in a specific area.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"SJ": {
@@ -5917,7 +6109,7 @@
"SOCOM": {
"full": "Special Operations Command",
"description": "DOD unified combatant command overseeing special operations forces.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"SOFA": {
@@ -5929,7 +6121,7 @@
"SOFWERX": {
"full": "Special Operations Forces Warfighting Enabler via Rapid eXperimentation",
"description": "SOCOM innovation organization connecting special operations requirements with commercial and non-traditional defense solutions.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"SOO": {
@@ -5947,7 +6139,7 @@
"SOUTHCOM": {
"full": "United States Southern Command",
"description": "DOD unified combatant command responsible for Central and South America and the Caribbean.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"SOW": {
@@ -6001,13 +6193,13 @@
"SPACECOM": {
"full": "United States Space Command",
"description": "DOD unified combatant command responsible for space operations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"SPARC": {
"full": "Systems, Prototyping, Agile and Research for Commercial",
"description": "USSF acquisition vehicle for rapid prototyping and agile development of space-related IT and mission systems.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "program"
},
"SPAWAR": {
@@ -6048,10 +6240,7 @@
"description": "DHS agency protecting national leaders and investigating financial crimes.",
"agency": "DHS",
"category": "agency",
- "url": "https://www.secretservice.gov",
- "aliases": [
- "USSS"
- ]
+ "url": "https://www.secretservice.gov"
},
"SSA": {
"full": "Source Selection Authority",
@@ -6127,7 +6316,7 @@
"STIG": {
"full": "Security Technical Implementation Guide",
"description": "DOD configuration standard for securing information systems and software.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"STIX": {
@@ -6145,7 +6334,7 @@
"STRATCOM": {
"full": "United States Strategic Command",
"description": "DOD unified combatant command responsible for strategic deterrence and nuclear operations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"STTR": {
@@ -6166,6 +6355,28 @@
"agency": "General",
"category": "general"
},
+ "Schedule F": {
+ "full": "Schedule F",
+ "description": "Excepted service schedule created by Executive Order 13957 in October 2020 for career positions of a confidential, policy-determining, policy-making, or policy-advocating character. Rescinded in January 2021 and reinstated as Schedule Policy/Career by Executive Order 14171 in January 2025.",
+ "agency": "OPM",
+ "category": "system"
+ },
+ "Schedule Policy/Career": {
+ "full": "Schedule Policy/Career",
+ "description": "Excepted service schedule for policy-influencing positions established by Executive Order 14171 in January 2025 as the successor to Schedule F. OPM’s final rule took effect in March 2026; covered positions are excluded from statutory adverse-action and performance-removal appeal protections.",
+ "agency": "OPM",
+ "category": "system",
+ "aliases": [
+ "Schedule P/C"
+ ]
+ },
+ "Search.gov": {
+ "full": "Search.gov",
+ "description": "GSA/TTS shared site-search service used by federal websites.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://search.gov"
+ },
"Section 508": {
"full": "Section 508 of the Rehabilitation Act",
"description": "Federal law (29 U.S.C. 794d) requiring federal agencies to make electronic and information technology accessible to people with disabilities.",
@@ -6257,7 +6468,7 @@
"TDY": {
"full": "Temporary Duty",
"description": "Travel assignment at a location other than the employee's permanent duty station.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "process"
},
"TIC": {
@@ -6330,7 +6541,7 @@
"TRANSCOM": {
"full": "United States Transportation Command",
"description": "DOD unified combatant command providing global deployment and distribution.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"TREAS": {
@@ -6360,7 +6571,7 @@
"TRL": {
"full": "Technology Readiness Level",
"description": "Scale from 1 to 9 used in defense and federal acquisition to assess the maturity of a technology from basic research through operational deployment.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "general"
},
"TS": {
@@ -6402,6 +6613,13 @@
"agency": "General",
"category": "general"
},
+ "TTS": {
+ "full": "Technology Transformation Services",
+ "description": "GSA organization operating government-wide digital shared services including Login.gov, Cloud.gov, Search.gov, the U.S. Web Design System, and the Digital Analytics Program.",
+ "agency": "GSA",
+ "category": "office",
+ "url": "https://tts.gsa.gov"
+ },
"TVA": {
"full": "Tennessee Valley Authority",
"description": "Government-owned corporation providing electricity generation and economic development.",
@@ -6440,7 +6658,7 @@
"UC APL": {
"full": "Unified Capabilities Approved Products List",
"description": "DISA list of IT and telecommunications products certified for interoperability and security on DOD unified communications networks.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"UCC": {
@@ -6452,7 +6670,7 @@
"UCMJ": {
"full": "Uniform Code of Military Justice",
"description": "Federal law establishing the military justice system for the armed forces.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "regulation"
},
"UEBA": {
@@ -6494,7 +6712,7 @@
"USA": {
"full": "United States Army",
"description": "Military service branch responsible for land-based military operations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"USA FREEDOM Act": {
@@ -6509,6 +6727,16 @@
"agency": "DOJ",
"category": "regulation"
},
+ "USA.gov": {
+ "full": "USA.gov",
+ "description": "GSA-operated official web portal of the federal government providing information and links to government services in English and Spanish.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://www.usa.gov",
+ "aliases": [
+ "USAGov"
+ ]
+ },
"USACE": {
"full": "United States Army Corps of Engineers",
"description": "Army command providing engineering services for public and military construction.",
@@ -6519,23 +6747,30 @@
"USAF": {
"full": "United States Air Force",
"description": "Military service branch responsible for air and space operations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"USAGM": {
"full": "U.S. Agency for Global Media",
- "description": "Independent agency overseeing U.S. international media outlets including Voice of America, Radio Free Europe/Radio Liberty, and the Office of Cuba Broadcasting.",
+ "description": "Independent agency overseeing U.S. international media outlets including Voice of America, Radio Free Europe/Radio Liberty, and the Office of Cuba Broadcasting. Directed to reduce to its statutory minimum by Executive Order 14238 in March 2025; subject of ongoing litigation.",
"agency": "USAGM",
"category": "agency",
"url": "https://www.usagm.gov"
},
"USAID": {
"full": "United States Agency for International Development",
- "description": "Independent agency administering civilian foreign aid and development assistance.",
+ "description": "Independent agency administering civilian foreign aid and development assistance. Most programs were terminated or transferred to the Department of State in 2025, and remaining operations merged into State on July 1, 2025.",
"agency": "USAID",
"category": "agency",
"url": "https://www.usaid.gov"
},
+ "USAJOBS": {
+ "full": "USAJOBS",
+ "description": "OPM-operated official federal job listing and application site.",
+ "agency": "OPM",
+ "category": "system",
+ "url": "https://www.usajobs.gov"
+ },
"USASpending": {
"full": "USASpending.gov",
"description": "Official source for federal spending data, tracking awards and agency budgets.",
@@ -6543,6 +6778,13 @@
"category": "system",
"url": "https://www.usaspending.gov"
},
+ "USAi": {
+ "full": "USAi",
+ "description": "GSA-operated secure generative AI evaluation platform launched in August 2025 that gives federal agencies access to commercial AI models and tools.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://usai.gov"
+ },
"USC": {
"full": "United States Code",
"description": "Codification of federal statutory law organized by subject matter.",
@@ -6589,10 +6831,14 @@
},
"USDS": {
"full": "United States Digital Service",
- "description": "EOP team using technology and design to improve government services.",
+ "description": "EOP team using technology and design to improve government services. Renamed the United States DOGE Service by executive order in January 2025.",
"agency": "EOP",
"category": "office",
- "url": "https://usds.gov"
+ "url": "https://usds.gov",
+ "aliases": [
+ "U.S. DOGE Service",
+ "United States DOGE Service"
+ ]
},
"USERRA": {
"full": "Uniformed Services Employment and Reemployment Rights Act",
@@ -6615,7 +6861,7 @@
},
"USIP": {
"full": "United States Institute of Peace",
- "description": "Independent federal institution providing conflict analysis, training, and tools to prevent and resolve violent conflicts around the world.",
+ "description": "Independent federal institution providing conflict analysis, training, and tools to prevent and resolve violent conflicts around the world. Executive Order 14217 (February 2025) directed its reduction to the minimum required by law; subject of ongoing litigation.",
"agency": "USIP",
"category": "agency",
"url": "https://www.usip.org"
@@ -6630,7 +6876,7 @@
"USMC": {
"full": "United States Marine Corps",
"description": "Military service branch providing expeditionary and amphibious capabilities.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"USMLE": {
@@ -6649,7 +6895,7 @@
"USN": {
"full": "United States Navy",
"description": "Military service branch responsible for naval operations and maritime defense.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"USPS": {
@@ -6662,7 +6908,7 @@
"USSF": {
"full": "United States Space Force",
"description": "Military service branch responsible for space operations, under the Department of the Air Force.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency"
},
"USSS": {
@@ -6686,6 +6932,13 @@
"category": "office",
"url": "https://ustr.gov"
},
+ "USWDS": {
+ "full": "U.S. Web Design System",
+ "description": "GSA/TTS design system of accessible, reusable components and guidance for federal websites, required for agency sites under the 21st Century IDEA.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://designsystem.digital.gov"
+ },
"Uniform Guidance": {
"full": "Uniform Administrative Requirements, Cost Principles, and Audit Requirements for Federal Awards",
"description": "Consolidated guidance (2 CFR Part 200) establishing government-wide requirements for federal grants and cooperative agreements, replacing OMB Circulars A-87, A-110, A-122, and A-133.",
@@ -6789,6 +7042,13 @@
"agency": "VA",
"category": "system"
},
+ "Vote.gov": {
+ "full": "Vote.gov",
+ "description": "GSA-operated official site with voter registration information and links to state election offices.",
+ "agency": "GSA",
+ "category": "system",
+ "url": "https://vote.gov"
+ },
"WAF": {
"full": "Web Application Firewall",
"description": "Security system filtering HTTP traffic to protect against SQL injection, XSS, and other attacks.",
@@ -6804,7 +7064,7 @@
"WAWF": {
"full": "Wide Area Workflow",
"description": "DOD electronic invoicing and receipt system enabling contractors to submit invoices and government personnel to process payments.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"WBS": {
@@ -6830,7 +7090,7 @@
"WHS": {
"full": "Washington Headquarters Services",
"description": "DOD agency providing essential administrative and operational support services to the Office of the Secretary of Defense, Joint Staff, and other Pentagon-based organizations.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "agency",
"url": "https://www.whs.mil"
},
@@ -6921,7 +7181,7 @@
"eMASS": {
"full": "Enterprise Mission Assurance Support Service",
"description": "DOD web application automating the Risk Management Framework process for system authorization.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
},
"eSRS": {
@@ -6939,7 +7199,7 @@
"milCloud": {
"full": "milCloud",
"description": "DISA cloud computing service providing DOD-approved commercial cloud infrastructure at various impact levels for defense workloads.",
- "agency": "DOD",
+ "agency": "DOW",
"category": "system"
}
}
diff --git a/cli-package/src/shared/decoder.ts b/cli-package/src/shared/decoder.ts
index 7a4dc93..190cfef 100644
--- a/cli-package/src/shared/decoder.ts
+++ b/cli-package/src/shared/decoder.ts
@@ -1,5 +1,5 @@
-import acronymsData from './data/acronyms.json';
-import type { AcronymData, DecodedResult, DecodeResponse } from './types';
+import acronymsData from './data/acronyms.json' with { type: 'json' };
+import type { AcronymData, DecodedResult, DecodeResponse } from './types.js';
const acronyms: AcronymData = acronymsData as AcronymData;
diff --git a/cli-package/src/shared/encoder.ts b/cli-package/src/shared/encoder.ts
index 9a64e42..a9db5ce 100644
--- a/cli-package/src/shared/encoder.ts
+++ b/cli-package/src/shared/encoder.ts
@@ -1,5 +1,5 @@
-import acronymsData from './data/acronyms.json';
-import type { AcronymData, EncodedResult, EncodeResponse } from './types';
+import acronymsData from './data/acronyms.json' with { type: 'json' };
+import type { AcronymData, EncodedResult, EncodeResponse } from './types.js';
const acronyms: AcronymData = acronymsData as AcronymData;
diff --git a/cli-package/src/shared/mcp-server.ts b/cli-package/src/shared/mcp-server.ts
new file mode 100644
index 0000000..9bced69
--- /dev/null
+++ b/cli-package/src/shared/mcp-server.ts
@@ -0,0 +1,108 @@
+// FedSpeak MCP server — exposes decode/encode as Model Context Protocol tools.
+// Shared by the npm package (stdio) and the Netlify function (Streamable HTTP).
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { decode, getAllEntries, getAgencies, getCategories, getAcronymCount } from './decoder.js';
+import { encode } from './encoder.js';
+
+export const MCP_SERVER_INFO = {
+ name: 'fedspeak',
+ version: '1.1.0',
+} as const;
+
+function text(payload: unknown) {
+ return { content: [{ type: 'text' as const, text: JSON.stringify(payload, null, 2) }] };
+}
+
+export function createFedSpeakServer(): McpServer {
+ const server = new McpServer(MCP_SERVER_INFO, {
+ instructions:
+ 'FedSpeak decodes U.S. federal government acronyms (e.g. GSA, OMB, DOW, FedRAMP) into full names with ' +
+ 'descriptions, parent agency, and category, and encodes full names back to acronyms. Data is a curated ' +
+ `static dataset of ${getAcronymCount()} entries maintained by MetaPhase. Use decode_acronym for one term, ` +
+ 'scan_text to find every acronym in a passage, encode_name for reverse lookup, and list_acronyms to browse.',
+ });
+
+ server.registerTool(
+ 'decode_acronym',
+ {
+ title: 'Decode a federal acronym',
+ description: 'Look up a single U.S. federal government acronym (case-insensitive, aliases supported) and return its full name, description, agency, category, and URL.',
+ inputSchema: { acronym: z.string().min(1).describe('The acronym to decode, e.g. "GSA" or "FedRAMP"') },
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
+ },
+ async ({ acronym }) => text(decode({ acronym })),
+ );
+
+ server.registerTool(
+ 'scan_text',
+ {
+ title: 'Find acronyms in text',
+ description: 'Scan a passage of text and return every known federal acronym found in it, with full definitions.',
+ inputSchema: { text: z.string().min(1).describe('Free text to scan for federal acronyms') },
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
+ },
+ async ({ text: input }) => text(decode({ text: input })),
+ );
+
+ server.registerTool(
+ 'encode_name',
+ {
+ title: 'Encode a full name to its acronym',
+ description: 'Reverse lookup: given a full or partial agency/program name (e.g. "General Services Administration"), return the matching acronym(s). Pass "text" instead to find all known names in a passage.',
+ inputSchema: {
+ name: z.string().optional().describe('Full or partial name to convert to an acronym'),
+ text: z.string().optional().describe('Free text to scan for full names'),
+ },
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
+ },
+ async ({ name, text: input }) => {
+ if (!name && !input) {
+ return { ...text({ success: false, error: 'Provide "name" or "text".' }), isError: true };
+ }
+ return text(encode({ ...(name && { name }), ...(input && { text: input }) }));
+ },
+ );
+
+ server.registerTool(
+ 'list_acronyms',
+ {
+ title: 'List acronyms',
+ description: 'Browse the acronym database. Filter by parent agency (e.g. "GSA", "DOW", "EOP") and/or category (department, agency, office, bureau, program, process, regulation, system, general). Results are paginated.',
+ inputSchema: {
+ agency: z.string().optional().describe('Parent agency acronym to filter by'),
+ category: z.string().optional().describe('Category to filter by'),
+ query: z.string().optional().describe('Substring to match against acronym or full name'),
+ limit: z.number().int().min(1).max(200).optional().describe('Max results (default 50)'),
+ offset: z.number().int().min(0).optional().describe('Results to skip (default 0)'),
+ },
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
+ },
+ async ({ agency, category, query, limit = 50, offset = 0 }) => {
+ const q = query?.toLowerCase();
+ const all = getAllEntries().filter(e =>
+ (!agency || e.agency.toLowerCase() === agency.toLowerCase()) &&
+ (!category || e.category === category) &&
+ (!q || e.acronym.toLowerCase().includes(q) || e.full.toLowerCase().includes(q)),
+ );
+ const page = all.slice(offset, offset + limit).map(e => ({ acronym: e.acronym, full: e.full, agency: e.agency, category: e.category }));
+ return text({ total: all.length, offset, limit, results: page });
+ },
+ );
+
+ server.registerResource(
+ 'agencies',
+ 'fedspeak://agencies',
+ { title: 'Agencies', description: 'All parent agency codes used in the dataset', mimeType: 'application/json' },
+ async uri => ({ contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(getAgencies()) }] }),
+ );
+
+ server.registerResource(
+ 'categories',
+ 'fedspeak://categories',
+ { title: 'Categories', description: 'All entry categories used in the dataset', mimeType: 'application/json' },
+ async uri => ({ contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(getCategories()) }] }),
+ );
+
+ return server;
+}
diff --git a/cli-package/src/shared/truncate.ts b/cli-package/src/shared/truncate.ts
index 151ddf6..e10aedb 100644
--- a/cli-package/src/shared/truncate.ts
+++ b/cli-package/src/shared/truncate.ts
@@ -1,4 +1,4 @@
-import type { DecodeResponse, EncodeResponse } from './types';
+import type { DecodeResponse, EncodeResponse } from './types.js';
const RESPONSE_CHAR_LIMIT = 2000;
diff --git a/cli-package/tsconfig.json b/cli-package/tsconfig.json
index 4f00110..ab0ba1b 100644
--- a/cli-package/tsconfig.json
+++ b/cli-package/tsconfig.json
@@ -1,9 +1,11 @@
{
"compilerOptions": {
"target": "ES2022",
- "lib": ["ES2023"],
- "module": "ESNext",
- "moduleResolution": "bundler",
+ "lib": [
+ "ES2023"
+ ],
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": false,
@@ -19,6 +21,11 @@
"declarationMap": true,
"sourceMap": true
},
- "include": ["src"],
- "exclude": ["node_modules", "dist"]
+ "include": [
+ "src"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
}
diff --git a/index.html b/index.html
index 5c859b5..95a0497 100644
--- a/index.html
+++ b/index.html
@@ -6,7 +6,7 @@
FedSpeak — Federal Acronym Decoder
-
+
@@ -15,7 +15,7 @@
-
+
@@ -24,7 +24,7 @@
-
+
@@ -46,7 +46,7 @@
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "FedSpeak",
- "description": "Federal Acronym Decoder — decode U.S. government acronyms from text or single lookups. 1,119+ acronyms covering federal agencies, cybersecurity, procurement, legislation, and more.",
+ "description": "Federal Acronym Decoder — decode U.S. government acronyms from text or single lookups. 1,156+ acronyms covering federal agencies, cybersecurity, procurement, legislation, and more.",
"url": "https://fedspeak.dev",
"applicationCategory": "ReferenceApplication",
"operatingSystem": "Any",
diff --git a/netlify.toml b/netlify.toml
index 54adb33..aabb6ca 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -11,6 +11,11 @@
to = "/.netlify/functions/:splat"
status = 200
+[[redirects]]
+ from = "/mcp"
+ to = "/.netlify/functions/mcp"
+ status = 200
+
[[redirects]]
from = "/*"
to = "/index.html"
diff --git a/netlify/functions/mcp.ts b/netlify/functions/mcp.ts
new file mode 100644
index 0000000..3eb2f5e
--- /dev/null
+++ b/netlify/functions/mcp.ts
@@ -0,0 +1,42 @@
+// Remote MCP endpoint — Streamable HTTP, stateless. Route: /mcp
+import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
+import { createFedSpeakServer } from '../../src/shared/mcp-server';
+
+const CORS_HEADERS: Record = {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type, Accept, Mcp-Session-Id, Mcp-Protocol-Version, Last-Event-ID',
+ 'Access-Control-Expose-Headers': 'Mcp-Session-Id, Mcp-Protocol-Version',
+};
+
+function withCors(response: Response): Response {
+ const headers = new Headers(response.headers);
+ for (const [k, v] of Object.entries(CORS_HEADERS)) headers.set(k, v);
+ return new Response(response.body, { status: response.status, statusText: response.statusText, headers });
+}
+
+export default async function handler(request: Request): Promise {
+ if (request.method === 'OPTIONS') {
+ return new Response(null, { status: 204, headers: CORS_HEADERS });
+ }
+
+ // Stateless: a fresh server + transport per request, no session ids.
+ const server = createFedSpeakServer();
+ const transport = new WebStandardStreamableHTTPServerTransport({
+ sessionIdGenerator: undefined,
+ enableJsonResponse: true,
+ });
+
+ try {
+ await server.connect(transport);
+ const response = await transport.handleRequest(request);
+ return withCors(response);
+ } catch {
+ return new Response(
+ JSON.stringify({ jsonrpc: '2.0', error: { code: -32603, message: 'Internal server error' }, id: null }),
+ { status: 500, headers: { ...CORS_HEADERS, 'Content-Type': 'application/json' } },
+ );
+ } finally {
+ void server.close();
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 99f088b..d607f86 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,32 +9,34 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
+ "@modelcontextprotocol/sdk": "^1.31.0",
"lucide-react": "^0.344.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "react-router": "^7.13.0",
- "react-router-dom": "^7.13.0"
+ "react-router": "^7.18.4",
+ "react-router-dom": "^7.18.4",
+ "zod": "^3.25.0"
},
"devDependencies": {
- "@eslint/js": "^9.9.1",
+ "@eslint/js": "^9.39.5",
"@netlify/functions": "^2.8.2",
- "@types/node": "^24.1.0",
- "@types/react": "^18.3.5",
+ "@types/node": "^24.19.1",
+ "@types/react": "^18.3.31",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.1",
- "@vitest/coverage-v8": "^3.2.4",
- "@vitest/ui": "^3.2.4",
- "autoprefixer": "^10.4.18",
- "eslint": "^9.9.1",
+ "@vitest/coverage-v8": "^4.1.11",
+ "@vitest/ui": "^4.1.11",
+ "autoprefixer": "^10.6.1",
+ "eslint": "^9.39.5",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.11",
"globals": "^15.9.0",
- "postcss": "^8.4.35",
+ "postcss": "^8.5.28",
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
- "typescript-eslint": "^8.46.0",
- "vite": "^7.3.2",
- "vitest": "^3.2.4"
+ "typescript-eslint": "^8.71.0",
+ "vite": "^7.3.6",
+ "vitest": "^4.1.11"
}
},
"node_modules/@alloc/quick-lru": {
@@ -50,20 +52,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@babel/code-frame": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
@@ -841,15 +829,15 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.7",
"debug": "^4.3.1",
- "minimatch": "^3.1.2"
+ "minimatch": "^3.1.5"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -882,20 +870,20 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
- "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz",
+ "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"debug": "^4.3.2",
"espree": "^10.0.1",
"globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^4.1.1",
- "minimatch": "^3.1.2",
+ "js-yaml": "^4.3.2",
+ "minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1"
},
"engines": {
@@ -919,9 +907,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.39.3",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz",
- "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -955,30 +943,56 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@hono/node-server": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.3.tgz",
+ "integrity": "sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "hono": "^4"
+ }
+ },
"node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
"dev": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/types": "^0.15.0"
+ },
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/@humanfs/node": {
- "version": "0.16.7",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
- "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@humanfs/core": "^0.19.1",
+ "@humanfs/core": "^0.19.2",
+ "@humanfs/types": "^0.15.0",
"@humanwhocodes/retry": "^0.4.0"
},
"engines": {
"node": ">=18.18.0"
}
},
+ "node_modules/@humanfs/types": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -1007,34 +1021,6 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -1085,6 +1071,68 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@modelcontextprotocol/sdk": {
+ "version": "1.31.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.31.0.tgz",
+ "integrity": "sha512-UvTMgnNlnIBO/22ob2RcVGDlcvOslQs8T59+FTGdA0L27a39fdGF/EDETNtDVK4DZGpwomlsYpRdA8UXcVL/pw==",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.19.9 || ^2.0.5",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "content-type": "^1.0.5",
+ "cors": "^2.8.5",
+ "cross-spawn": "^7.0.5",
+ "eventsource": "^3.0.2",
+ "eventsource-parser": "^3.0.0",
+ "express": "^5.2.1",
+ "express-rate-limit": "^8.2.1",
+ "hono": "^4.11.4",
+ "jose": "^6.1.3",
+ "json-schema-typed": "^8.0.2",
+ "pkce-challenge": "^5.0.0",
+ "raw-body": "^3.0.0",
+ "zod": "^3.25 || ^4.0",
+ "zod-to-json-schema": "^3.25.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@cfworker/json-schema": "^4.1.1",
+ "zod": "^3.25 || ^4.0"
+ },
+ "peerDependenciesMeta": {
+ "@cfworker/json-schema": {
+ "optional": true
+ },
+ "zod": {
+ "optional": false
+ }
+ }
+ },
+ "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
"node_modules/@napi-rs/lzma-linux-x64-gnu": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
@@ -1180,17 +1228,6 @@
"node": ">= 8"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
@@ -1594,6 +1631,13 @@
"win32"
]
},
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1672,13 +1716,13 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "24.10.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.13.tgz",
- "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==",
+ "version": "24.19.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.1.tgz",
+ "integrity": "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~7.16.0"
+ "undici-types": ">=7.24.0 <7.24.7"
}
},
"node_modules/@types/prop-types": {
@@ -1689,9 +1733,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "18.3.28",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
- "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
+ "version": "18.3.31",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz",
+ "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1710,20 +1754,20 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz",
- "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.0.tgz",
+ "integrity": "sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.56.0",
- "@typescript-eslint/type-utils": "8.56.0",
- "@typescript-eslint/utils": "8.56.0",
- "@typescript-eslint/visitor-keys": "8.56.0",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/type-utils": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1733,15 +1777,15 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.56.0",
+ "@typescript-eslint/parser": "^8.71.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.11.tgz",
+ "integrity": "sha512-YChdK5txDjwGUvgR7oCJcLGkwi3LDh8Zx8tS7ndYciLEg/oOCL26VUBSUEtgS7EjiybcBqFxh5j0rAdDX7/bbg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1749,16 +1793,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz",
- "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.0.tgz",
+ "integrity": "sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.56.0",
- "@typescript-eslint/types": "8.56.0",
- "@typescript-eslint/typescript-estree": "8.56.0",
- "@typescript-eslint/visitor-keys": "8.56.0",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1770,18 +1814,18 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz",
- "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.0.tgz",
+ "integrity": "sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.56.0",
- "@typescript-eslint/types": "^8.56.0",
+ "@typescript-eslint/tsconfig-utils": "^8.71.0",
+ "@typescript-eslint/types": "^8.71.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1792,18 +1836,18 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz",
- "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.0.tgz",
+ "integrity": "sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.0",
- "@typescript-eslint/visitor-keys": "8.56.0"
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1814,9 +1858,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz",
- "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.0.tgz",
+ "integrity": "sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1827,21 +1871,21 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz",
- "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.0.tgz",
+ "integrity": "sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.0",
- "@typescript-eslint/typescript-estree": "8.56.0",
- "@typescript-eslint/utils": "8.56.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
"debug": "^4.4.3",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1852,13 +1896,13 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz",
- "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.0.tgz",
+ "integrity": "sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1870,21 +1914,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz",
- "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.0.tgz",
+ "integrity": "sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.56.0",
- "@typescript-eslint/tsconfig-utils": "8.56.0",
- "@typescript-eslint/types": "8.56.0",
- "@typescript-eslint/visitor-keys": "8.56.0",
+ "@typescript-eslint/project-service": "8.71.0",
+ "@typescript-eslint/tsconfig-utils": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"debug": "^4.4.3",
- "minimatch": "^9.0.5",
+ "minimatch": "^10.2.2",
"semver": "^7.7.3",
"tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1894,39 +1938,52 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
- "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^2.0.2"
+ "brace-expansion": "^5.0.8"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -1937,16 +1994,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz",
- "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.0.tgz",
+ "integrity": "sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.56.0",
- "@typescript-eslint/types": "8.56.0",
- "@typescript-eslint/typescript-estree": "8.56.0"
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1957,17 +2014,17 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz",
- "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.0.tgz",
+ "integrity": "sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/types": "8.71.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -2013,32 +2070,29 @@
}
},
"node_modules/@vitest/coverage-v8": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.7.tgz",
- "integrity": "sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.11.tgz",
+ "integrity": "sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ampproject/remapping": "^2.3.0",
"@bcoe/v8-coverage": "^1.0.2",
- "ast-v8-to-istanbul": "^0.3.3",
- "debug": "^4.4.1",
+ "@vitest/utils": "4.1.11",
+ "ast-v8-to-istanbul": "^1.0.0",
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-report": "^3.0.1",
- "istanbul-lib-source-maps": "^5.0.6",
- "istanbul-reports": "^3.1.7",
- "magic-string": "^0.30.17",
- "magicast": "^0.3.5",
- "std-env": "^3.9.0",
- "test-exclude": "^7.0.1",
- "tinyrainbow": "^2.0.0"
+ "istanbul-reports": "^3.2.0",
+ "magicast": "^0.5.2",
+ "obug": "^2.1.1",
+ "std-env": "^4.0.0-rc.1",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "3.2.7",
- "vitest": "3.2.7"
+ "@vitest/browser": "4.1.11",
+ "vitest": "4.1.11"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -2047,39 +2101,40 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz",
- "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz",
+ "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@standard-schema/spec": "^1.1.0",
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.7",
- "@vitest/utils": "3.2.7",
- "chai": "^5.2.0",
- "tinyrainbow": "^2.0.0"
+ "@vitest/spy": "4.1.11",
+ "@vitest/utils": "4.1.11",
+ "chai": "^6.2.2",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz",
- "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz",
+ "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.7",
+ "@vitest/spy": "4.1.11",
"estree-walker": "^3.0.3",
- "magic-string": "^0.30.17"
+ "magic-string": "^0.30.21"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"msw": "^2.4.9",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"msw": {
@@ -2091,42 +2146,42 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz",
- "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz",
+ "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tinyrainbow": "^2.0.0"
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz",
- "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz",
+ "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.7",
- "pathe": "^2.0.3",
- "strip-literal": "^3.0.0"
+ "@vitest/utils": "4.1.11",
+ "pathe": "^2.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz",
- "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz",
+ "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.7",
- "magic-string": "^0.30.17",
+ "@vitest/pretty-format": "4.1.11",
+ "@vitest/utils": "4.1.11",
+ "magic-string": "^0.30.21",
"pathe": "^2.0.3"
},
"funding": {
@@ -2134,59 +2189,69 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz",
- "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz",
+ "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "tinyspy": "^4.0.3"
- },
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/ui": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.7.tgz",
- "integrity": "sha512-eVtcpJXGhS0GjMuHROfbXLhlxooyUcuip8GNzzjDD5jzafZqzanJH4W3VGmUxHNx4fv6qQGUGJHRpGUdj+9D6Q==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.11.tgz",
+ "integrity": "sha512-r/rwyKoev21mWdRGSEkZOqkQ2BYy68mwjihg9M90nNRbf4NGrgzZ4cj6JNCEwlOGJkbKeMgsjlykvwKUbRr7gw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.7",
+ "@vitest/utils": "4.1.11",
"fflate": "^0.8.2",
- "flatted": "^3.3.3",
+ "flatted": "^3.4.2",
"pathe": "^2.0.3",
- "sirv": "^3.0.1",
- "tinyglobby": "^0.2.14",
- "tinyrainbow": "^2.0.0"
+ "sirv": "^3.0.2",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "vitest": "3.2.7"
+ "vitest": "4.1.11"
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz",
- "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz",
+ "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.7",
- "loupe": "^3.1.4",
- "tinyrainbow": "^2.0.0"
+ "@vitest/pretty-format": "4.1.11",
+ "convert-source-map": "^2.0.0",
+ "tinyrainbow": "^3.1.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/acorn": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
- "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2207,9 +2272,9 @@
}
},
"node_modules/ajv": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
- "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2223,19 +2288,45 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "dev": true,
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
"license": "MIT",
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
},
"funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -2298,9 +2389,9 @@
}
},
"node_modules/ast-v8-to-istanbul": {
- "version": "0.3.11",
- "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.11.tgz",
- "integrity": "sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.7.tgz",
+ "integrity": "sha512-kFL68AG6ajd8fg248zwM9GQrUWEp79gsmjum34OEXjs4yHuUMZfYKwOLW9GMmB4oNvVrj+EAGxsP7ye2UR9UlA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2317,9 +2408,9 @@
"license": "MIT"
},
"node_modules/autoprefixer": {
- "version": "10.4.24",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz",
- "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==",
+ "version": "10.6.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.1.tgz",
+ "integrity": "sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==",
"dev": true,
"funding": [
{
@@ -2337,8 +2428,8 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
- "caniuse-lite": "^1.0.30001766",
+ "browserslist": "^4.28.9",
+ "caniuse-lite": "^1.0.30001810",
"fraction.js": "^5.3.4",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
@@ -2361,9 +2452,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
- "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "version": "2.11.27",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz",
+ "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -2386,10 +2477,47 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/body-parser": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",
+ "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "^3.1.2",
+ "content-type": "^2.0.0",
+ "debug": "^4.4.3",
+ "http-errors": "^2.0.1",
+ "iconv-lite": "^0.7.2",
+ "on-finished": "^2.4.1",
+ "qs": "^6.15.2",
+ "raw-body": "^3.0.2",
+ "type-is": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/body-parser/node_modules/content-type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",
+ "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/brace-expansion": {
- "version": "1.1.18",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
- "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2411,9 +2539,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "version": "4.29.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz",
+ "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==",
"dev": true,
"funding": [
{
@@ -2431,11 +2559,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
+ "baseline-browser-mapping": "^2.11.26",
+ "caniuse-lite": "^1.0.30001813",
+ "electron-to-chromium": "^1.5.439",
+ "node-releases": "^2.0.57",
+ "update-browserslist-db": "^1.3.3"
},
"bin": {
"browserslist": "cli.js"
@@ -2444,14 +2572,42 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/cac": {
- "version": "6.7.14",
- "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
- "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
- "dev": true,
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/callsites": {
@@ -2475,9 +2631,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001770",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz",
- "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==",
+ "version": "1.0.30001814",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz",
+ "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==",
"dev": true,
"funding": [
{
@@ -2496,18 +2652,11 @@
"license": "CC-BY-4.0"
},
"node_modules/chai": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
- "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz",
+ "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "assertion-error": "^2.0.1",
- "check-error": "^2.1.1",
- "deep-eql": "^5.0.1",
- "loupe": "^3.1.0",
- "pathval": "^2.0.0"
- },
"engines": {
"node": ">=18"
}
@@ -2529,16 +2678,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/check-error": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
- "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- }
- },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -2614,6 +2753,28 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/content-disposition": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
+ "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@@ -2634,11 +2795,36 @@
"url": "https://opencollective.com/express"
}
},
+ "node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -2673,7 +2859,6 @@
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -2687,16 +2872,6 @@
}
}
},
- "node_modules/deep-eql": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
- "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -2704,6 +2879,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -2718,34 +2902,79 @@
"dev": true,
"license": "MIT"
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.302",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
- "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
+ "version": "1.5.444",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.444.tgz",
+ "integrity": "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==",
"dev": true,
"license": "ISC"
},
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
},
"node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz",
+ "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
"dev": true,
"license": "MIT"
},
+ "node_modules/es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/esbuild": {
"version": "0.28.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
@@ -2798,6 +3027,12 @@
"node": ">=6"
}
},
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -2812,25 +3047,26 @@
}
},
"node_modules/eslint": {
- "version": "9.39.3",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz",
- "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
+ "@eslint/config-array": "^0.21.2",
"@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.3",
+ "@eslint/eslintrc": "^3.3.6",
+ "@eslint/js": "9.39.5",
"@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
@@ -2849,7 +3085,7 @@
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
+ "minimatch": "^3.1.5",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -2998,21 +3234,121 @@
"node": ">=0.10.0"
}
},
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventsource": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
+ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
+ "license": "MIT",
+ "dependencies": {
+ "eventsource-parser": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/eventsource-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz",
+ "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/expect-type": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
- "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
+ "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12.0.0"
}
},
+ "node_modules/express": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.1",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express-rate-limit": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz",
+ "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.3",
+ "ip-address": "^10.2.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/express-rate-limit"
+ },
+ "peerDependencies": {
+ "express": ">= 4.11"
+ }
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-glob": {
@@ -3059,6 +3395,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-uri": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
+ "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/fastq": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
@@ -3070,9 +3422,9 @@
}
},
"node_modules/fflate": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
- "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
"dev": true,
"license": "MIT"
},
@@ -3102,6 +3454,27 @@
"node": ">=8"
}
},
+ "node_modules/finalhandler": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -3140,21 +3513,13 @@
"dev": true,
"license": "ISC"
},
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
"engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">= 0.6"
}
},
"node_modules/fraction.js": {
@@ -3171,6 +3536,15 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -3190,7 +3564,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3206,26 +3579,41 @@
"node": ">=6.9.0"
}
},
- "node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
"dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
- "bin": {
- "glob": "dist/esm/bin.mjs"
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/glob-parent": {
@@ -3241,32 +3629,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
- "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/globals": {
"version": "15.15.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
@@ -3280,6 +3642,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3290,11 +3664,22 @@
"node": ">=8"
}
},
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -3303,6 +3688,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/hono": {
+ "version": "4.13.12",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.12.tgz",
+ "integrity": "sha512-6E2QDAc9Ick9Sq77ZrGS/dk2WUYni91aufTw6LJKpV7w8kW5/GxVUc650FOADOmlwg3K+f7Pun6XlV+pYmW6gw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -3310,6 +3704,42 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
+ "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -3347,6 +3777,30 @@
"node": ">=0.8.19"
}
},
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ip-address": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz",
+ "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -3386,16 +3840,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -3419,11 +3863,16 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "license": "MIT"
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
"license": "ISC"
},
"node_modules/istanbul-lib-coverage": {
@@ -3451,21 +3900,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
- "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.23",
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/istanbul-reports": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
@@ -3480,22 +3914,6 @@
"node": ">=8"
}
},
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/jiti": {
"version": "1.21.7",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
@@ -3506,6 +3924,15 @@
"jiti": "bin/jiti.js"
}
},
+ "node_modules/jose": {
+ "version": "6.2.12",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz",
+ "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3513,9 +3940,9 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
- "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
"dev": true,
"funding": [
{
@@ -3562,6 +3989,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/json-schema-typed": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
+ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
+ "license": "BSD-2-Clause"
+ },
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
@@ -3661,13 +4094,6 @@
"loose-envify": "cli.js"
}
},
- "node_modules/loupe": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
- "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -3698,15 +4124,15 @@
}
},
"node_modules/magicast": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
- "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz",
+ "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.4",
- "@babel/types": "^7.25.4",
- "source-map-js": "^1.2.0"
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "source-map-js": "^1.2.1"
}
},
"node_modules/make-dir": {
@@ -3738,6 +4164,40 @@
"node": ">=10"
}
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz",
+ "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3762,27 +4222,42 @@
"node": ">=8.6"
}
},
- "node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
"engines": {
- "node": "*"
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/minipass": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
- "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
- "license": "BlueOak-1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "*"
}
},
"node_modules/mrmime": {
@@ -3799,7 +4274,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/mz": {
@@ -3840,12 +4314,44 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/negotiator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz",
+ "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/negotiator/node_modules/content-type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",
+ "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "version": "2.0.57",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz",
+ "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -3861,7 +4367,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -3877,6 +4382,53 @@
"node": ">= 6"
}
},
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/obug": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz",
+ "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -3927,13 +4479,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true,
- "license": "BlueOak-1.0.0"
- },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -3947,6 +4492,15 @@
"node": ">=6"
}
},
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -3961,7 +4515,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3974,30 +4527,16 @@
"dev": true,
"license": "MIT"
},
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
+ "node_modules/path-to-regexp": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
+ "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
+ "license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/pathe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -4005,16 +4544,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/pathval": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
- "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.16"
- }
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4055,10 +4584,19 @@
"node": ">= 6"
}
},
+ "node_modules/pkce-challenge": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
+ "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
"node_modules/postcss": {
- "version": "8.5.26",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
- "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
+ "version": "8.5.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
+ "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
"dev": true,
"funding": [
{
@@ -4076,7 +4614,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.17",
+ "nanoid": "^3.3.18",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -4198,9 +4736,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+ "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4228,6 +4766,23 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/proxy-addr": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
+ "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -4238,6 +4793,22 @@
"node": ">=6"
}
},
+ "node_modules/qs": {
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz",
+ "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "es-define-property": "^1.0.1",
+ "side-channel": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4259,6 +4830,34 @@
],
"license": "MIT"
},
+ "node_modules/range-parser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz",
+ "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.7.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -4295,9 +4894,9 @@
}
},
"node_modules/react-router": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.2.tgz",
- "integrity": "sha512-aUVMjFm3GAPTTZL7oYr5E7ETiqfQCHRLH+B+5afnICvf0r7kkK4eR6SMuwbSTJw/7t+12khT/Kahij49fqOCIg==",
+ "version": "7.18.4",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.4.tgz",
+ "integrity": "sha512-PUPQcMhMGRAslLcvtlPz/kmzBEWPhLdgLFrL7pLNepBL6dX0lWj4WD2cUYVgYCuT3jxvghYFg81cDTj44DhetQ==",
"license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
@@ -4317,12 +4916,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.2.tgz",
- "integrity": "sha512-AIKJ/jgGlFb3EbfCXk5Gzshiwt+l3mqbCrNjmEWMMjqQxNJ3svBa6bgzFyCC2Sw3RA0VWF1kg3uQf2OFhxb8hw==",
+ "version": "7.18.4",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.4.tgz",
+ "integrity": "sha512-yrfmJHIpDG7taCpqKjT1G5B6q3O2K+RN8/fgNf0lTjCwiPbQ0ei6vXX9ZjQR+7ld8Tr7Z5xmyMnZ8YJrphWQUw==",
"license": "MIT",
"dependencies": {
- "react-router": "7.18.2"
+ "react-router": "7.18.4"
},
"engines": {
"node": ">=20.0.0"
@@ -4355,6 +4954,15 @@
"node": ">=8.10.0"
}
},
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/resolve": {
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
@@ -4443,6 +5051,22 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -4467,6 +5091,12 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
@@ -4486,17 +5116,67 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/send": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
+ "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.3",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.1",
+ "mime-types": "^3.0.2",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
+ "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/set-cookie-parser": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
"integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
"license": "MIT"
},
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -4509,12 +5189,83 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/side-channel": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/siginfo": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
@@ -4522,19 +5273,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/sirv": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
@@ -4567,117 +5305,22 @@
"dev": true,
"license": "MIT"
},
- "node_modules/std-env": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
- "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 0.8"
}
},
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "node_modules/std-env": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz",
+ "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==",
"dev": true,
"license": "MIT"
},
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
- "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -4691,26 +5334,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strip-literal": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
- "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^9.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/strip-literal/node_modules/js-tokens": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
- "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/sucrase": {
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
@@ -4798,47 +5421,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/test-exclude": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
- "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^10.4.1",
- "minimatch": "^9.0.4"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/test-exclude/node_modules/brace-expansion": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
- "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/test-exclude/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -4870,11 +5452,14 @@
"license": "MIT"
},
"node_modules/tinyexec": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
- "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz",
+ "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/tinyglobby": {
"version": "0.2.15",
@@ -4924,30 +5509,10 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/tinypool": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
- "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- }
- },
"node_modules/tinyrainbow": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
- "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tinyspy": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
- "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz",
+ "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4967,6 +5532,15 @@
"node": ">=8.0"
}
},
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
@@ -4978,9 +5552,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
- "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5010,6 +5584,37 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-is": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
+ "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^2.0.0",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/type-is/node_modules/content-type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",
+ "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
@@ -5025,16 +5630,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz",
- "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.0.tgz",
+ "integrity": "sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.56.0",
- "@typescript-eslint/parser": "8.56.0",
- "@typescript-eslint/typescript-estree": "8.56.0",
- "@typescript-eslint/utils": "8.56.0"
+ "@typescript-eslint/eslint-plugin": "8.71.0",
+ "@typescript-eslint/parser": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5045,20 +5650,29 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
+ "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
"dev": true,
"license": "MIT"
},
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/update-browserslist-db": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
- "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
+ "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
"dev": true,
"funding": [
{
@@ -5110,6 +5724,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/vite": {
"version": "7.3.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
@@ -5185,29 +5808,6 @@
}
}
},
- "node_modules/vite-node": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
- "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cac": "^6.7.14",
- "debug": "^4.4.1",
- "es-module-lexer": "^1.7.0",
- "pathe": "^2.0.3",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
- },
- "bin": {
- "vite-node": "vite-node.mjs"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
"node_modules/vite/node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -5240,65 +5840,79 @@
}
},
"node_modules/vitest": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz",
- "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.7",
- "@vitest/mocker": "3.2.7",
- "@vitest/pretty-format": "^3.2.7",
- "@vitest/runner": "3.2.7",
- "@vitest/snapshot": "3.2.7",
- "@vitest/spy": "3.2.7",
- "@vitest/utils": "3.2.7",
- "chai": "^5.2.0",
- "debug": "^4.4.1",
- "expect-type": "^1.2.1",
- "magic-string": "^0.30.17",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz",
+ "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/expect": "4.1.11",
+ "@vitest/mocker": "4.1.11",
+ "@vitest/pretty-format": "4.1.11",
+ "@vitest/runner": "4.1.11",
+ "@vitest/snapshot": "4.1.11",
+ "@vitest/spy": "4.1.11",
+ "@vitest/utils": "4.1.11",
+ "es-module-lexer": "^2.0.0",
+ "expect-type": "^1.3.0",
+ "magic-string": "^0.30.21",
+ "obug": "^2.1.1",
"pathe": "^2.0.3",
- "picomatch": "^4.0.2",
- "std-env": "^3.9.0",
+ "picomatch": "^4.0.3",
+ "std-env": "^4.0.0-rc.1",
"tinybench": "^2.9.0",
- "tinyexec": "^0.3.2",
- "tinyglobby": "^0.2.14",
- "tinypool": "^1.1.1",
- "tinyrainbow": "^2.0.0",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
- "vite-node": "3.2.4",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.1.0",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
"why-is-node-running": "^2.3.0"
},
"bin": {
"vitest": "vitest.mjs"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"@edge-runtime/vm": "*",
- "@types/debug": "^4.1.12",
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.7",
- "@vitest/ui": "3.2.7",
+ "@opentelemetry/api": "^1.9.0",
+ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
+ "@vitest/browser-playwright": "4.1.11",
+ "@vitest/browser-preview": "4.1.11",
+ "@vitest/browser-webdriverio": "4.1.11",
+ "@vitest/coverage-istanbul": "4.1.11",
+ "@vitest/coverage-v8": "4.1.11",
+ "@vitest/ui": "4.1.11",
"happy-dom": "*",
- "jsdom": "*"
+ "jsdom": "*",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@edge-runtime/vm": {
"optional": true
},
- "@types/debug": {
+ "@opentelemetry/api": {
"optional": true
},
"@types/node": {
"optional": true
},
- "@vitest/browser": {
+ "@vitest/browser-playwright": {
+ "optional": true
+ },
+ "@vitest/browser-preview": {
+ "optional": true
+ },
+ "@vitest/browser-webdriverio": {
+ "optional": true
+ },
+ "@vitest/coverage-istanbul": {
+ "optional": true
+ },
+ "@vitest/coverage-v8": {
"optional": true
},
"@vitest/ui": {
@@ -5309,13 +5923,16 @@
},
"jsdom": {
"optional": true
+ },
+ "vite": {
+ "optional": false
}
}
},
"node_modules/vitest/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5329,7 +5946,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -5368,100 +5984,11 @@
"node": ">=0.10.0"
}
},
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
},
"node_modules/yallist": {
"version": "3.1.1",
@@ -5482,6 +6009,24 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.25.2",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
+ "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.25.28 || ^4"
+ }
}
}
}
diff --git a/package.json b/package.json
index dbb771d..11e027a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "fedspeak",
"private": true,
- "version": "1.0.0",
+ "version": "1.1.0",
"description": "Federal Acronym Decoder — decode U.S. government acronyms from text or single lookups",
"keywords": [
"federal",
@@ -35,31 +35,33 @@
"test:coverage": "vitest run --coverage"
},
"dependencies": {
+ "@modelcontextprotocol/sdk": "^1.31.0",
"lucide-react": "^0.344.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "react-router": "^7.13.0",
- "react-router-dom": "^7.13.0"
+ "react-router": "^7.18.4",
+ "react-router-dom": "^7.18.4",
+ "zod": "^3.25.0"
},
"devDependencies": {
- "@eslint/js": "^9.9.1",
+ "@eslint/js": "^9.39.5",
"@netlify/functions": "^2.8.2",
- "@types/node": "^24.1.0",
- "@types/react": "^18.3.5",
+ "@types/node": "^24.19.1",
+ "@types/react": "^18.3.31",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.1",
- "@vitest/coverage-v8": "^3.2.4",
- "@vitest/ui": "^3.2.4",
- "autoprefixer": "^10.4.18",
- "eslint": "^9.9.1",
+ "@vitest/coverage-v8": "^4.1.11",
+ "@vitest/ui": "^4.1.11",
+ "autoprefixer": "^10.6.1",
+ "eslint": "^9.39.5",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.11",
"globals": "^15.9.0",
- "postcss": "^8.4.35",
+ "postcss": "^8.5.28",
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
- "typescript-eslint": "^8.46.0",
- "vite": "^7.3.2",
- "vitest": "^3.2.4"
+ "typescript-eslint": "^8.71.0",
+ "vite": "^7.3.6",
+ "vitest": "^4.1.11"
}
}
diff --git a/public/llms-full.txt b/public/llms-full.txt
new file mode 100644
index 0000000..304fce3
--- /dev/null
+++ b/public/llms-full.txt
@@ -0,0 +1,124 @@
+# FedSpeak
+
+> Federal Acronym Decoder. FedSpeak decodes U.S. federal government acronyms (GSA, OMB, DOW, FedRAMP, CMMC, ...) into full names with descriptions, parent agency, and category, and encodes full names back to acronyms. Curated static dataset of 1,156 entries maintained by MetaPhase. Public, read-only, no authentication, no user data stored. MIT licensed.
+
+Use FedSpeak when a document, question, or form mentions a U.S. federal acronym or program name and you need an authoritative expansion. The dataset covers departments, agencies, offices, bureaus, programs, processes, regulations, and systems, including 2025–26 changes (Department of War rename, America.gov, Schedule Policy/Career, DOGE, National Design Studio).
+
+## MCP server (preferred for AI agents)
+
+- Remote (Streamable HTTP, stateless): https://fedspeak.dev/mcp
+- Local (stdio): `npx -y -p @metaphase-tech/fedspeak fedspeak-mcp`
+- Tools: `decode_acronym {acronym}`, `scan_text {text}`, `encode_name {name | text}`, `list_acronyms {agency?, category?, query?, limit?, offset?}`
+- Resources: `fedspeak://agencies`, `fedspeak://categories`
+
+Claude Code: `claude mcp add --transport http fedspeak https://fedspeak.dev/mcp`
+
+## REST API
+
+- [OpenAPI 3.1 spec](https://fedspeak.dev/openapi.json): machine-readable contract for both endpoints
+- `GET|POST https://fedspeak.dev/api/decode` — `?acronym=GSA` or `{"acronym":"GSA"}`; `?text=...` or `{"text":"..."}` to scan
+- `GET|POST https://fedspeak.dev/api/encode` — `?name=General Services Administration` or `{"name":"..."}`; `{"text":"..."}` to scan
+- Responses are JSON and progressively truncated to stay under 2000 characters.
+
+## Docs
+
+- [Developer docs](https://fedspeak.dev/docs): overview, getting started, data format
+- [API reference](https://fedspeak.dev/api): interactive Swagger UI
+- [npm package](https://www.npmjs.com/package/@metaphase-tech/fedspeak): `lookupAcronym`, `scanText`, `decode`, `encode`, `createFedSpeakServer`
+- [Source](https://github.com/MetaPhase-Consulting/fedspeak): data lives in `src/shared/data/acronyms.json`; PRs welcome
+
+## Categories (9)
+
+- general: 261
+- regulation: 231
+- agency: 187
+- process: 166
+- program: 104
+- system: 83
+- office: 52
+- bureau: 19
+- department: 16
+
+## Parent agency codes (65)
+
+Each code is itself decodable with decode_acronym.
+
+- General: 417
+- DOD: 130
+- DOW: 98
+- GSA: 49
+- EOP: 46
+- DOC: 41
+- DHS: 39
+- DOJ: 27
+- HHS: 27
+- DOL: 23
+- DOE: 20
+- OPM: 20
+- DOI: 19
+- TREAS: 18
+- SBA: 17
+- EPA: 15
+- VA: 12
+- USDA: 10
+- DOT: 8
+- ED: 7
+- ODNI: 7
+- NASA: 6
+- CIA: 4
+- DOS: 4
+- EEOC: 4
+- FTC: 3
+- HUD: 3
+- NARA: 3
+- CFPB: 2
+- GAO: 2
+- MSPB: 2
+- OGE: 2
+- SEC: 2
+- CBO: 1
+- CFTC: 1
+- CNCS: 1
+- CPSC: 1
+- CRS: 1
+- DFC: 1
+- EXIM: 1
+- FCC: 1
+- FDIC: 1
+- FEC: 1
+- FERC: 1
+- FLRA: 1
+- FMC: 1
+- FRB: 1
+- GPO: 1
+- MCC: 1
+- NCUA: 1
+- NLRB: 1
+- NRC: 1
+- NSF: 1
+- NTSB: 1
+- OMB: 1
+- PBGC: 1
+- PC: 1
+- STB: 1
+- TVA: 1
+- USAGM: 1
+- USAID: 1
+- USIP: 1
+- USITC: 1
+- USPS: 1
+- USTDA: 1
+
+## Entry schema
+
+```json
+{
+ "GSA": {
+ "full": "General Services Administration",
+ "description": "Federal agency managing government buildings, procurement, and technology solutions.",
+ "agency": "GSA",
+ "category": "agency",
+ "url": "https://www.gsa.gov"
+ }
+}
+```
diff --git a/public/llms.txt b/public/llms.txt
new file mode 100644
index 0000000..57fa6fe
--- /dev/null
+++ b/public/llms.txt
@@ -0,0 +1,32 @@
+# FedSpeak
+
+> Federal Acronym Decoder. FedSpeak decodes U.S. federal government acronyms (GSA, OMB, DOW, FedRAMP, CMMC, ...) into full names with descriptions, parent agency, and category, and encodes full names back to acronyms. Curated static dataset of 1,156 entries maintained by MetaPhase. Public, read-only, no authentication, no user data stored. MIT licensed.
+
+Use FedSpeak when a document, question, or form mentions a U.S. federal acronym or program name and you need an authoritative expansion. The dataset covers departments, agencies, offices, bureaus, programs, processes, regulations, and systems, including 2025–26 changes (Department of War rename, America.gov, Schedule Policy/Career, DOGE, National Design Studio).
+
+## MCP server (preferred for AI agents)
+
+- Remote (Streamable HTTP, stateless): https://fedspeak.dev/mcp
+- Local (stdio): `npx -y -p @metaphase-tech/fedspeak fedspeak-mcp`
+- Tools: `decode_acronym {acronym}`, `scan_text {text}`, `encode_name {name | text}`, `list_acronyms {agency?, category?, query?, limit?, offset?}`
+- Resources: `fedspeak://agencies`, `fedspeak://categories`
+
+Claude Code: `claude mcp add --transport http fedspeak https://fedspeak.dev/mcp`
+
+## REST API
+
+- [OpenAPI 3.1 spec](https://fedspeak.dev/openapi.json): machine-readable contract for both endpoints
+- `GET|POST https://fedspeak.dev/api/decode` — `?acronym=GSA` or `{"acronym":"GSA"}`; `?text=...` or `{"text":"..."}` to scan
+- `GET|POST https://fedspeak.dev/api/encode` — `?name=General Services Administration` or `{"name":"..."}`; `{"text":"..."}` to scan
+- Responses are JSON and progressively truncated to stay under 2000 characters.
+
+## Docs
+
+- [Developer docs](https://fedspeak.dev/docs): overview, getting started, data format
+- [API reference](https://fedspeak.dev/api): interactive Swagger UI
+- [npm package](https://www.npmjs.com/package/@metaphase-tech/fedspeak): `lookupAcronym`, `scanText`, `decode`, `encode`, `createFedSpeakServer`
+- [Source](https://github.com/MetaPhase-Consulting/fedspeak): data lives in `src/shared/data/acronyms.json`; PRs welcome
+
+## Optional
+
+- [Full dataset summary](https://fedspeak.dev/llms-full.txt): every agency code and category with counts
diff --git a/public/openapi.json b/public/openapi.json
index 6d3f4a8..1bedeb3 100644
--- a/public/openapi.json
+++ b/public/openapi.json
@@ -3,7 +3,7 @@
"info": {
"title": "FedSpeak API",
"description": "Federal Acronym Decoder — Decode and encode U.S. government acronyms from text or single lookups.",
- "version": "0.1.0",
+ "version": "1.1.0",
"contact": {
"name": "MetaPhase",
"url": "https://metaphase.tech"
@@ -13,6 +13,15 @@
"url": "https://opensource.org/licenses/MIT"
}
},
+ "externalDocs": {
+ "description": "llms.txt — agent-oriented overview including the MCP server at /mcp",
+ "url": "https://fedspeak.dev/llms.txt"
+ },
+ "x-mcp": {
+ "transport": "streamable-http",
+ "url": "https://fedspeak.dev/mcp",
+ "stdio": "npx -y -p @metaphase-tech/fedspeak fedspeak-mcp"
+ },
"servers": [
{
"url": "https://fedspeak.dev",
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..a233b07
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://fedspeak.dev/sitemap.xml
diff --git a/public/sitemap.xml b/public/sitemap.xml
new file mode 100644
index 0000000..c3a6e55
--- /dev/null
+++ b/public/sitemap.xml
@@ -0,0 +1,11 @@
+
+
+ https://fedspeak.dev/weekly1.0
+ https://fedspeak.dev/searchweekly0.9
+ https://fedspeak.dev/scanmonthly0.8
+ https://fedspeak.dev/docsmonthly0.8
+ https://fedspeak.dev/apimonthly0.7
+ https://fedspeak.dev/packagemonthly0.6
+ https://fedspeak.dev/climonthly0.6
+ https://fedspeak.dev/llms.txtmonthly0.5
+
diff --git a/scripts/sync-cli-package.sh b/scripts/sync-cli-package.sh
index e60aa90..c46044c 100755
--- a/scripts/sync-cli-package.sh
+++ b/scripts/sync-cli-package.sh
@@ -13,6 +13,7 @@ cp "$ROOT_DIR/src/shared/types.ts" "$ROOT_DIR/cli-package/src/shared/"
cp "$ROOT_DIR/src/shared/decoder.ts" "$ROOT_DIR/cli-package/src/shared/"
cp "$ROOT_DIR/src/shared/encoder.ts" "$ROOT_DIR/cli-package/src/shared/"
cp "$ROOT_DIR/src/shared/truncate.ts" "$ROOT_DIR/cli-package/src/shared/"
+cp "$ROOT_DIR/src/shared/mcp-server.ts" "$ROOT_DIR/cli-package/src/shared/"
cp "$ROOT_DIR/src/shared/data/acronyms.json" "$ROOT_DIR/cli-package/src/shared/data/"
# Copy license and README
diff --git a/src/pages/Docs.tsx b/src/pages/Docs.tsx
index 0a840c8..8035c7a 100644
--- a/src/pages/Docs.tsx
+++ b/src/pages/Docs.tsx
@@ -1,4 +1,4 @@
-import { BookOpen, Code, Terminal, Package, Search, FileText, Globe, FolderGit2, ExternalLink } from 'lucide-react';
+import { BookOpen, Code, Terminal, Package, Search, FileText, Globe, FolderGit2, ExternalLink, Bot } from 'lucide-react';
import { Link } from 'react-router-dom';
function CodeBlock({ children }: { children: string }) {
@@ -71,6 +71,7 @@ export default function Docs() {
+
@@ -156,6 +157,27 @@ npx fedspeak DOD OMB CISA`}
See the CLI page for more examples.
+
+
+
MCP Server (AI agents)
+
+ FedSpeak is a Model Context Protocol server. Point Claude, ChatGPT, Cursor, or any MCP client at the remote
+ endpoint, or run it locally over stdio. Tools: decode_acronym, scan_text,{' '}
+ encode_name, list_acronyms.
+
+ The package ships a fedspeak-mcp binary that serves the acronym database over the Model
+ Context Protocol (stdio), and exports createFedSpeakServer() so you can mount the same tools
+ in your own MCP host. A hosted Streamable HTTP endpoint is available at{' '}
+ https://fedspeak.dev/mcp.
+
+ {`# Run the stdio server
+npx -y -p @metaphase-tech/fedspeak fedspeak-mcp
+
+# Or embed it
+import { createFedSpeakServer } from '@metaphase-tech/fedspeak';
+import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
+
+await createFedSpeakServer().connect(new StdioServerTransport());`}
+