diff --git a/jest.config.js b/jest.config.js index 4dcc8f2c..14e71630 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,7 +6,6 @@ module.exports = { "^.+\\.(js|jsx|ts|tsx)$": "ts-jest", }, moduleNameMapper: { - "\\.(css|less|scss|sass)$": "identity-obj-proxy", "^@/(.*)$": "/src/$1", "^obsidian$": "/__mocks__/obsidian.js", // The yaml package's "exports" field defaults to a browser ESM entry under diff --git a/knip.json b/knip.json new file mode 100644 index 00000000..a28f070a --- /dev/null +++ b/knip.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "entry": ["src/main.ts", "scripts/printPromptDebug.js", "scripts/printPromptDebugEntry.ts"], + "project": ["src/**/*.{ts,tsx,js,jsx}", "scripts/**/*.{ts,js,mjs}"], + "ignore": ["src/styles/tailwind.css", "src/integration_tests/**"], + "ignoreDependencies": ["buffer"] +} diff --git a/package-lock.json b/package-lock.json index 9294c1fd..4ee1947e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,9 @@ "version": "3.3.1", "license": "AGPL-3.0", "dependencies": { - "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.36.4", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@google/generative-ai": "^0.24.0", - "@huggingface/inference": "^4.11.3", - "@koa/cors": "^5.0.0", "@langchain/anthropic": "^1.0.0", "@langchain/classic": "^1.0.9", "@langchain/community": "^1.0.0", @@ -27,10 +22,7 @@ "@langchain/openai": "^1.0.0", "@langchain/textsplitters": "^1.0.0", "@langchain/xai": "^1.0.0", - "@lexical/plain-text": "^0.34.0", "@lexical/react": "^0.34.0", - "@lexical/selection": "^0.34.0", - "@lexical/utils": "^0.34.0", "@orama/orama": "^3.0.0-rc-2", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.2", @@ -44,73 +36,53 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.5", "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.2.8", - "@tabler/icons-react": "^2.14.0", "async-mutex": "^0.5.0", "buffer": "^6.0.3", "chrono-node": "^2.7.7", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "codemirror-companion-extension": "^0.0.11", "diff": "^7.0.0", - "esbuild-plugin-svg": "^0.1.0", - "eventsource-parser": "^1.0.0", "fuzzysort": "^3.1.0", "jotai": "^2.10.3", - "koa": "^2.14.2", - "koa-proxies": "^0.12.3", - "langchain": "^1.2.28", "lexical": "^0.34.0", "lucide-react": "^0.462.0", "luxon": "^3.5.0", "minisearch": "^7.2.0", - "next-i18next": "^13.2.2", "openai": "^4.95.1", - "p-queue": "^8.1.0", - "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-dropzone": "^14.3.5", - "react-markdown": "^9.0.1", "react-resizable-panels": "^3.0.2", - "react-syntax-highlighter": "^15.5.0", - "sse": "github:mpetazzoni/sse.js", "tailwind-merge": "^2.5.5", - "tailwindcss-animate": "^1.0.7", - "trie-search": "^2.2.0", "turndown": "^7.2.2", "uuid": "^11.1.0", "zod": "^3.25.76" }, "devDependencies": { + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.36.4", "@eslint-react/eslint-plugin": "^1.38.4", + "@google/generative-ai": "^0.24.0", "@jest/globals": "^29.7.0", "@langchain/ollama": "^1.2.2", "@tailwindcss/container-queries": "^0.1.1", - "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@types/diff": "^7.0.1", - "@types/events": "^3.0.0", "@types/jest": "^29.5.11", - "@types/koa": "^2.13.7", - "@types/koa__cors": "^4.0.0", "@types/luxon": "^3.4.2", "@types/node": "^16.11.6", "@types/react": "^18.0.33", "@types/react-dom": "^18.0.11", - "@types/react-syntax-highlighter": "^15.5.6", "@types/turndown": "^5.0.6", "@types/uuid": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "@typescript-eslint/parser": "^8.19.1", "electron": "^27.3.2", "esbuild": "^0.25.0", + "esbuild-plugin-svg": "^0.1.0", "eslint": "^9.18.0", "eslint-plugin-obsidianmd": "^0.3.0", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-tailwindcss": "^3.18.0", + "globals": "^15.14.0", "husky": "^9.1.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.5.0", @@ -119,6 +91,7 @@ "obsidian": "^1.2.5", "prettier": "^3.3.3", "tailwindcss": "^3.4.15", + "tailwindcss-animate": "^1.0.7", "ts-jest": "^29.1.0", "tslib": "2.4.0", "typescript": "^5.7.2", @@ -126,16 +99,11 @@ "yaml": "^2.6.1" } }, - "node_modules/@adobe/css-tools": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", - "dev": true - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, "engines": { "node": ">=10" }, @@ -744,70 +712,11 @@ "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.0.3.tgz", "integrity": "sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==" }, - "node_modules/@codemirror/autocomplete": { - "version": "6.18.6", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", - "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@codemirror/commands": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.0.tgz", - "integrity": "sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.4.0", - "@codemirror/view": "^6.27.0", - "@lezer/common": "^1.1.0" - } - }, - "node_modules/@codemirror/language": { - "version": "6.10.8", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.8.tgz", - "integrity": "sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/lint": { - "version": "6.8.4", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.4.tgz", - "integrity": "sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.35.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/search": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.10.tgz", - "integrity": "sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, "node_modules/@codemirror/state": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "dev": true, "license": "MIT", "dependencies": { "@marijn/find-cluster-break": "^1.0.0" @@ -817,6 +726,7 @@ "version": "6.38.6", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", + "dev": true, "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -1629,6 +1539,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "9.39.4", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", @@ -1739,34 +1662,6 @@ "node": ">=18.0.0" } }, - "node_modules/@huggingface/inference": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-4.11.3.tgz", - "integrity": "sha512-Fqpj89DuB6i9j+cos9i0bfUKlpx5NFFsmvED0OAdE1gUSTHR86GpUZ0xkKy58IYXV1yFyHLFxQaOn0XDmD2m7Q==", - "license": "MIT", - "dependencies": { - "@huggingface/jinja": "^0.5.1", - "@huggingface/tasks": "^0.19.52" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@huggingface/jinja": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.5.1.tgz", - "integrity": "sha512-yUZLld4lrM9iFxHCwFQ7D1HW2MWMwSbeB7WzWqFYDWK+rEb+WldkLdAJxUPOmgICMHZLzZGVcVjFh3w/YGubng==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@huggingface/tasks": { - "version": "0.19.56", - "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.19.56.tgz", - "integrity": "sha512-sULqkRk5V6f39+N6MfpxjJklr9KrnIsJx5RyxkhNdTKQfn6ZRDBLoWBVJx4e4F67yelh7zzyBOfCS5MI14jRgA==", - "license": "MIT" - }, "node_modules/@humanfs/core": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", @@ -1865,17 +1760,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", @@ -1984,23 +1868,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@img/sharp-libvips-linux-s390x": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", @@ -2109,29 +1976,6 @@ "@img/sharp-libvips-linux-arm64": "1.0.4" } }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" - } - }, "node_modules/@img/sharp-linux-s390x": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", @@ -2239,26 +2083,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@img/sharp-win32-ia32": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", @@ -2301,6 +2125,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2317,6 +2142,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { "node": ">=12" }, @@ -2328,6 +2154,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -2338,12 +2165,14 @@ "node_modules/@isaacs/cliui/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==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/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, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2360,6 +2189,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2374,6 +2204,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2905,6 +2736,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2918,6 +2750,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2926,6 +2759,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2933,12 +2767,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -2947,18 +2783,8 @@ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@koa/cors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", - "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", - "dependencies": { - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 14.0.0" - } + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@langchain/anthropic": { "version": "1.0.0", @@ -3667,147 +3493,6 @@ "@langchain/core": "^1.0.0" } }, - "node_modules/@langchain/langgraph": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-1.2.0.tgz", - "integrity": "sha512-wyqKIzXTAfXX3L1d8R7icM+HmRQBTbuNLWtUlpRJ/JP/ux1ei/sOSt6p8f90ARoOP2iJVlM70wOBYWaGErdBlA==", - "license": "MIT", - "dependencies": { - "@langchain/langgraph-checkpoint": "^1.0.0", - "@langchain/langgraph-sdk": "~1.6.5", - "@standard-schema/spec": "1.1.0", - "uuid": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": "^1.1.16", - "zod": "^3.25.32 || ^4.2.0", - "zod-to-json-schema": "^3.x" - }, - "peerDependenciesMeta": { - "zod-to-json-schema": { - "optional": true - } - } - }, - "node_modules/@langchain/langgraph-checkpoint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.0.0.tgz", - "integrity": "sha512-xrclBGvNCXDmi0Nz28t3vjpxSH6UYx6w5XAXSiiB1WEdc2xD2iY/a913I3x3a31XpInUW/GGfXXfePfaghV54A==", - "license": "MIT", - "dependencies": { - "uuid": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": "^1.0.1" - } - }, - "node_modules/@langchain/langgraph-checkpoint/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@langchain/langgraph-sdk": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-1.6.5.tgz", - "integrity": "sha512-JjprmbhgCnoNJ9DUKcvrEU+C9FfKsNGyT3ooqWxAY5Cx2qofhXmDJOpTCqqbxfDHPKG0RjTs5HgVK3WW5M6Big==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.15", - "p-queue": "^9.0.1", - "p-retry": "^7.1.1", - "uuid": "^13.0.0" - }, - "peerDependencies": { - "@langchain/core": "^1.1.16", - "react": "^18 || ^19", - "react-dom": "^18 || ^19" - }, - "peerDependenciesMeta": { - "@langchain/core": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@langchain/langgraph-sdk/node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "license": "MIT" - }, - "node_modules/@langchain/langgraph-sdk/node_modules/p-queue": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", - "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^7.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@langchain/langgraph-sdk/node_modules/p-timeout": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@langchain/langgraph-sdk/node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, - "node_modules/@langchain/langgraph/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@langchain/ollama": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-1.2.2.tgz", @@ -4141,34 +3826,11 @@ "yjs": ">=13.5.22" } }, - "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", - "license": "MIT" - }, - "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, "node_modules/@marijn/find-cluster-break": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "dev": true, "license": "MIT" }, "node_modules/@mixmark-io/domino": { @@ -4177,153 +3839,11 @@ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", "license": "BSD-2-Clause" }, - "node_modules/@next/env": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.1.tgz", - "integrity": "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==", - "license": "MIT", - "peer": true - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.1.tgz", - "integrity": "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.1.tgz", - "integrity": "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.1.tgz", - "integrity": "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.1.tgz", - "integrity": "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.1.tgz", - "integrity": "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.1.tgz", - "integrity": "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.1.tgz", - "integrity": "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.1.tgz", - "integrity": "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4336,6 +3856,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -4344,6 +3865,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4364,6 +3886,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -4404,11 +3927,6 @@ "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", "license": "MIT" }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" - }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -4875,20 +4393,6 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-context": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", @@ -5092,20 +4596,6 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-dismissable-layer": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", @@ -6254,46 +5744,6 @@ } } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-progress": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", @@ -7277,184 +6727,6 @@ } } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", - "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz", - "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-roving-focus": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", - "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-collection": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", - "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", - "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", - "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz", - "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-tooltip": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", @@ -7753,21 +7025,6 @@ } } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", - "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-rect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", @@ -7786,23 +7043,6 @@ } } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-visually-hidden": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", @@ -7931,27 +7171,6 @@ "@sinonjs/commons": "^2.0.0" } }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "peer": true, - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true - }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -7964,31 +7183,6 @@ "node": ">=10" } }, - "node_modules/@tabler/icons": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-2.16.0.tgz", - "integrity": "sha512-1kaPH5APIWGtXe0W0eQ9g4MdfaQJ2gh95TAa94lNAqRR0JeC3fkD0yXGCcUiNK4GnGDv3UtPSCd3dbdKTe1b2A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/codecalm" - } - }, - "node_modules/@tabler/icons-react": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-2.16.0.tgz", - "integrity": "sha512-WwVjPzwvChmaQfhOjaVPyUjHeUosP2G1kqG6RfSkOWWiGx46nfZG7ekuBDidXuvMdTP1o2iC9JJIGm6mz3k5Uw==", - "dependencies": { - "@tabler/icons": "2.16.0", - "prop-types": "^15.7.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/codecalm" - }, - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@tailwindcss/container-queries": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@tailwindcss/container-queries/-/container-queries-0.1.1.tgz", @@ -8034,28 +7228,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, "node_modules/@testing-library/react": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", @@ -8093,19 +7265,11 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, "engines": { "node": ">=10.13.0" } }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/aria-query": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", @@ -8153,16 +7317,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -8184,37 +7338,11 @@ "@types/tern": "*" } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/content-disposition": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz", - "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==", - "dev": true - }, - "node_modules/@types/cookies": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "peer": true, "dependencies": { "@types/ms": "*" } @@ -8241,46 +7369,9 @@ "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" }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -8290,41 +7381,12 @@ "@types/node": "*" } }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/http-assert": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", - "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", - "dev": true - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -8406,6 +7468,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json5": { @@ -8415,12 +7478,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -8430,64 +7487,17 @@ "@types/node": "*" } }, - "node_modules/@types/koa": { - "version": "2.13.7", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.7.tgz", - "integrity": "sha512-Xd9xiGmTDv57y86kQYnBZZcE9H8cJhv+aL0YH+hZIa3rbUDNdk+EY6wcJC3xCyfrVIC+vjhtNENFwisF+E8Zhg==", - "dev": true, - "dependencies": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "node_modules/@types/koa__cors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-4.0.0.tgz", - "integrity": "sha512-qpwswNgQ2GxiDGNnKbDSBY5XmQTVJ6fspNvInLsAJ+jSwINxihvVzblj5anujNBg2BtL0xpUrcIt3UYwGzu05A==", - "dev": true, - "dependencies": { - "@types/koa": "*" - } - }, - "node_modules/@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dev": true, - "dependencies": { - "@types/koa": "*" - } - }, "node_modules/@types/luxon": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", "dev": true }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "peer": true }, "node_modules/@types/node": { "version": "16.18.24", @@ -8507,24 +7517,14 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "devOptional": true }, "node_modules/@types/react": { "version": "18.0.37", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz", "integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==", + "devOptional": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -8540,15 +7540,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-syntax-highlighter": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.6.tgz", - "integrity": "sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/responselike": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", @@ -8561,28 +7552,8 @@ "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "devOptional": true }, "node_modules/@types/stack-utils": { "version": "2.0.1", @@ -8599,15 +7570,6 @@ "@types/estree": "*" } }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dev": true, - "dependencies": { - "@types/jest": "*" - } - }, "node_modules/@types/tough-cookie": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", @@ -8620,11 +7582,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" - }, "node_modules/@types/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", @@ -9038,11 +7995,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -9060,18 +8012,6 @@ "node": ">=6.5" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -9184,6 +8124,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -9205,12 +8146,14 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -9222,7 +8165,8 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", @@ -9423,15 +8367,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/attr-accept": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", - "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -9566,19 +8501,11 @@ "@babel/core": "^7.0.0" } }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -9599,16 +8526,6 @@ } ] }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -9627,7 +8544,8 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/boolean": { "version": "3.2.0", @@ -9651,6 +8569,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -9753,18 +8672,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -9878,6 +8785,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, "engines": { "node": ">= 6" } @@ -9886,6 +8794,7 @@ "version": "1.0.30001643", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -9901,28 +8810,6 @@ } ] }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -9932,55 +8819,11 @@ "node": ">=10" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10004,6 +8847,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -10054,12 +8898,6 @@ "url": "https://polar.sh/cva" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "peer": true - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -10098,39 +8936,12 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, - "node_modules/codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } - }, - "node_modules/codemirror-companion-extension": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/codemirror-companion-extension/-/codemirror-companion-extension-0.0.11.tgz", - "integrity": "sha512-m9/aSi0DYCwO//0IhUmdeH/ncJ7LWWYXhepZRT3GAXdsopxI9CYxnB8kbrrRmOaYVfefirzdfTcBF5CegpO9lg==", - "license": "MIT", - "dependencies": { - "codemirror": "^6.0.1" - }, - "peerDependencies": { - "@codemirror/state": "^6.2.0", - "@codemirror/view": "^6.7.2" - } - }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -10187,19 +8998,11 @@ "node": ">= 0.8" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, "engines": { "node": ">= 10" } @@ -10226,54 +9029,12 @@ "simple-wcswidth": "^1.1.2" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "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", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -10315,12 +9076,14 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "dev": true, "license": "MIT" }, "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, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10330,19 +9093,11 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -10358,6 +9113,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -10370,6 +9126,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, "engines": { "node": ">= 6" }, @@ -10377,16 +9134,11 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -10398,6 +9150,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, "dependencies": { "css-tree": "^1.1.2" }, @@ -10432,7 +9185,8 @@ "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "devOptional": true }, "node_modules/data-urls": { "version": "3.0.2", @@ -10537,27 +9291,6 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "devOptional": true }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-named-character-reference/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -10692,37 +9425,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "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/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -10754,22 +9456,11 @@ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "node_modules/diff": { "version": "7.0.0", @@ -10792,7 +9483,8 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "node_modules/dom-accessibility-api": { "version": "0.5.16", @@ -10804,6 +9496,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -10817,6 +9510,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -10825,6 +9519,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, "funding": [ { "type": "github", @@ -10848,6 +9543,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, "dependencies": { "domelementtype": "^2.2.0" }, @@ -10862,6 +9558,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -10900,7 +9597,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -10912,11 +9610,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, "node_modules/electron": { "version": "27.3.11", "resolved": "https://registry.npmjs.org/electron/-/electron-27.3.11.tgz", @@ -10966,7 +9659,8 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/empathic": { "version": "2.0.1", @@ -10978,14 +9672,6 @@ "node": ">=14" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -11282,6 +9968,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/esbuild-plugin-svg/-/esbuild-plugin-svg-0.1.0.tgz", "integrity": "sha512-/9ZhvIpl+Ovl6glVK3BedvIwrOwSQnECw4Fy6ZwysWib3Ns7UkX6WNGjMOWtvQ1Cnm0uc7sptiKGm0BthKCAJA==", + "dev": true, "dependencies": { "svgo": "^2.2.2" } @@ -11295,11 +9982,6 @@ "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==" - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -11751,19 +10433,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-plugin-n/node_modules/minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", @@ -11890,6 +10559,19 @@ "eslint": "^9 || ^10" } }, + "node_modules/eslint-plugin-obsidianmd/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-obsidianmd/node_modules/obsidian": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.12.3.tgz", @@ -12417,15 +11099,6 @@ "node": ">=4.0" } }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -12448,14 +11121,6 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "node_modules/eventsource-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.0.0.tgz", - "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==", - "engines": { - "node": ">=14.18" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -12507,7 +11172,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true }, "node_modules/extract-zip": { "version": "2.0.1", @@ -12554,6 +11220,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -12569,6 +11236,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -12609,22 +11277,11 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -12656,24 +11313,6 @@ "node": ">=16.0.0" } }, - "node_modules/file-selector": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", - "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", - "license": "MIT", - "dependencies": { - "tslib": "^2.7.0" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/file-selector/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/file-type": { "version": "16.5.4", "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", @@ -12695,6 +11334,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -12757,6 +11397,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "peer": true, "engines": { "node": ">=4.0" }, @@ -12786,6 +11427,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -12801,6 +11443,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -12829,14 +11472,6 @@ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/formdata-node": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", @@ -12857,14 +11492,6 @@ "node": ">= 14" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -12898,6 +11525,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -13089,6 +11717,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -13115,9 +11744,9 @@ } }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -13302,15 +11931,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasharray": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hasharray/-/hasharray-1.1.2.tgz", - "integrity": "sha512-7w3idwaVXX9gL9LiTCBSNKRGTBcp2WI/kf13UYeZ9+trOGBHVYHei6qtMY6DVnwGOouVUSRg0+L2xf4Q2/CmzA==", - "license": "MIT", - "dependencies": { - "jclass": "^1.0.1" - } - }, "node_modules/hasown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", @@ -13323,137 +11943,6 @@ "node": ">= 0.4" } }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hastscript/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hastscript/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/highlightjs-vue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz", - "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", - "license": "CC0-1.0" - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -13472,83 +11961,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "peer": true, - "dependencies": { - "void-elements": "3.1.0" - } - }, - "node_modules/html-url-attributes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz", - "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-assert/node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" - }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -13621,34 +12039,6 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/i18next": { - "version": "22.4.15", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz", - "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.6" - } - }, - "node_modules/i18next-fs-backend": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.1.tgz", - "integrity": "sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA==" - }, "node_modules/ibm-cloud-sdk-core": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/ibm-cloud-sdk-core/-/ibm-cloud-sdk-core-5.4.2.tgz", @@ -13784,15 +12174,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -13808,11 +12189,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -13828,28 +12204,6 @@ "node": ">= 0.4" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -13929,6 +12283,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -13953,12 +12308,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -13975,6 +12324,7 @@ "version": "2.16.2", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.3" @@ -14021,19 +12371,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14058,6 +12400,7 @@ "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, "engines": { "node": ">=8" } @@ -14075,6 +12418,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -14089,6 +12433,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -14096,15 +12441,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-immutable-type": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/is-immutable-type/-/is-immutable-type-5.0.1.tgz", @@ -14146,22 +12482,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-network-error": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", - "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -14183,17 +12508,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -14363,7 +12677,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isomorphic.js": { "version": "0.2.5", @@ -14478,6 +12793,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -14488,15 +12804,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jclass": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jclass/-/jclass-1.2.1.tgz", - "integrity": "sha512-mRx8uv1qJLOtxbRf3IWOQIH2ro7VIPn6ZkhbTcUJvJEslLzYA7BSATXDi/GR1yKYV9DASsjTZL+0YJPdqSMznw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -15595,6 +13902,7 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -15889,18 +14197,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "license": "MIT", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -15919,97 +14215,6 @@ "node": ">=6" } }, - "node_modules/koa": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.3.tgz", - "integrity": "sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g==", - "license": "MIT", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/koa-proxies": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/koa-proxies/-/koa-proxies-0.12.3.tgz", - "integrity": "sha512-griAAVJbuzaGCt9H8RtLIsqcQhb5Q8uDPopQ6aK5DtRMvv6xb5SP/LEQ7Z8/bI1gAqd8n9WjMeT0c04I09ZAUg==", - "dependencies": { - "http-proxy": "^1.18.1", - "path-match": "^1.2.4", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "koa": ">=2" - } - }, - "node_modules/koa-proxies/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/langchain": { - "version": "1.2.28", - "resolved": "https://registry.npmjs.org/langchain/-/langchain-1.2.28.tgz", - "integrity": "sha512-MDJO14BMXtWYchBEmMaYU2CNe1b82L+6Oba4QyIr5Z1S4oCseMtqguZiKCIkv/K99ZGoe1iVtxPtN1Ja3mHvDQ==", - "license": "MIT", - "dependencies": { - "@langchain/langgraph": "^1.1.2", - "@langchain/langgraph-checkpoint": "^1.0.0", - "langsmith": ">=0.5.0 <1.0.0", - "uuid": "^11.1.0", - "zod": "^3.25.76 || ^4" - }, - "engines": { - "node": ">=20" - }, - "peerDependencies": { - "@langchain/core": "^1.1.29" - } - }, "node_modules/langsmith": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.5.4.tgz", @@ -16153,6 +14358,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, "engines": { "node": ">=14" }, @@ -16163,7 +14369,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/locate-path": { "version": "6.0.0", @@ -16180,12 +14387,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "devOptional": true - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -16240,15 +14441,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "peer": true }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -16269,19 +14461,6 @@ "node": ">=8" } }, - "node_modules/lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "dependencies": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16374,298 +14553,11 @@ "node": ">= 0.4" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true }, "node_modules/memorystream": { "version": "0.3.1", @@ -16686,435 +14578,16 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -17160,15 +14633,6 @@ "node": ">=4" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -17195,6 +14659,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -17238,6 +14703,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -17264,6 +14730,7 @@ "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, "funding": [ { "type": "github", @@ -17283,533 +14750,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, - "node_modules/next": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/next/-/next-16.1.1.tgz", - "integrity": "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@next/env": "16.1.1", - "@swc/helpers": "0.5.15", - "baseline-browser-mapping": "^2.8.3", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=20.9.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "16.1.1", - "@next/swc-darwin-x64": "16.1.1", - "@next/swc-linux-arm64-gnu": "16.1.1", - "@next/swc-linux-arm64-musl": "16.1.1", - "@next/swc-linux-x64-gnu": "16.1.1", - "@next/swc-linux-x64-musl": "16.1.1", - "@next/swc-win32-arm64-msvc": "16.1.1", - "@next/swc-win32-x64-msvc": "16.1.1", - "sharp": "^0.34.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-i18next": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-13.2.2.tgz", - "integrity": "sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - }, - { - "type": "individual", - "url": "https://locize.com" - } - ], - "dependencies": { - "@babel/runtime": "^7.20.13", - "@types/hoist-non-react-statics": "^3.3.1", - "core-js": "^3", - "hoist-non-react-statics": "^3.3.2", - "i18next-fs-backend": "^2.1.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "i18next": "^22.0.6", - "next": ">= 12.0.0", - "react": ">= 17.0.2", - "react-i18next": "^12.2.0" - } - }, - "node_modules/next/node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" - } - }, - "node_modules/next/node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/next/node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" - } - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -17912,6 +14858,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18046,6 +14993,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, "dependencies": { "boolbase": "^1.0.0" }, @@ -18063,6 +15011,7 @@ "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, "engines": { "node": ">=0.10.0" } @@ -18071,6 +15020,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -18227,17 +15177,6 @@ "whatwg-fetch": "^3.6.20" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "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", @@ -18262,11 +15201,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" - }, "node_modules/openai": { "version": "4.95.1", "resolved": "https://registry.npmjs.org/openai/-/openai-4.95.1.tgz", @@ -18393,55 +15327,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", - "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/p-retry": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", - "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", - "license": "MIT", - "dependencies": { - "is-network-error": "^1.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -18454,7 +15339,8 @@ "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==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -18469,23 +15355,6 @@ "node": ">=6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -18516,14 +15385,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "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", @@ -18546,45 +15407,22 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/path-match": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/path-match/-/path-match-1.2.4.tgz", - "integrity": "sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==", - "dependencies": { - "http-errors": "~1.4.0", - "path-to-regexp": "^1.0.0" - } - }, - "node_modules/path-match/node_modules/http-errors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz", - "integrity": "sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==", - "dependencies": { - "inherits": "2.0.1", - "statuses": ">= 1.2.1 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/path-match/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "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, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -18599,20 +15437,8 @@ "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==" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/peek-readable": { "version": "4.1.0", @@ -18636,12 +15462,14 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -18665,6 +15493,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18673,6 +15502,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, "engines": { "node": ">= 6" } @@ -18800,6 +15630,7 @@ "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -18827,6 +15658,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -18843,6 +15675,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -18861,6 +15694,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -18895,6 +15729,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -18919,6 +15754,7 @@ "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==", + "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -18930,7 +15766,8 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -19023,21 +15860,13 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -19092,6 +15921,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -19142,23 +15972,6 @@ "react": "^18.2.0" } }, - "node_modules/react-dropzone": { - "version": "14.3.5", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.5.tgz", - "integrity": "sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ==", - "license": "MIT", - "dependencies": { - "attr-accept": "^2.2.4", - "file-selector": "^2.1.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "react": ">= 16.8 || 18.0.0" - } - }, "node_modules/react-error-boundary": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", @@ -19174,65 +15987,11 @@ "react": ">=16.13.1" } }, - "node_modules/react-i18next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.2.0.tgz", - "integrity": "sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.6", - "html-parse-stringify": "^3.0.1" - }, - "peerDependencies": { - "i18next": ">= 19.0.0", - "react": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-markdown": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", - "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "html-url-attributes": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=18", - "react": ">=18" - } - }, - "node_modules/react-markdown/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/react-remove-scroll": { "version": "2.7.1", @@ -19313,27 +16072,11 @@ } } }, - "node_modules/react-syntax-highlighter": { - "version": "15.6.6", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz", - "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.4.1", - "highlightjs-vue": "^1.0.0", - "lowlight": "^1.17.0", - "prismjs": "^1.30.0", - "refractor": "^3.6.0" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -19396,6 +16139,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -19403,19 +16147,6 @@ "node": ">=8.10.0" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -19439,28 +16170,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/refractor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "dependencies": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.27.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "engines": { - "node": ">=6" - } - }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -19497,45 +16206,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -19564,6 +16234,7 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -19670,6 +16341,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -19704,6 +16376,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -19927,11 +16600,6 @@ "node": ">= 0.4" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/sharp": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", @@ -19975,6 +16643,7 @@ "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, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -19986,6 +16655,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -20132,6 +16802,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -20146,32 +16817,18 @@ "source-map": "^0.6.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sse": { - "name": "sse.js", - "version": "0.6.1", - "resolved": "git+ssh://git@github.com/mpetazzoni/sse.js.git#cfe70a36d49009e403e1cd2419b097497ab693da", - "license": "Apache-2.0" - }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true }, "node_modules/stack-utils": { "version": "2.0.6", @@ -20194,14 +16851,6 @@ "node": ">=8" } }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -20249,6 +16898,7 @@ "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, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -20263,6 +16913,7 @@ "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, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -20369,32 +17020,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "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, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -20407,6 +17037,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -20432,18 +17063,6 @@ "node": ">=6" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "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", @@ -20477,43 +17096,14 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "dev": true, "license": "MIT" }, - "node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "peer": true, - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -20535,6 +17125,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -20544,6 +17135,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, "engines": { "node": ">= 6" } @@ -20552,6 +17144,7 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -20572,6 +17165,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -20609,6 +17203,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -20620,6 +17215,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -20684,6 +17280,7 @@ "version": "3.4.15", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -20720,6 +17317,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } @@ -20728,6 +17326,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, "engines": { "node": ">=10" } @@ -20736,6 +17335,7 @@ "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -20791,6 +17391,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -20799,6 +17400,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -20864,6 +17466,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -20871,14 +17474,6 @@ "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==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/token-types": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", @@ -20938,34 +17533,6 @@ "node": ">=12" } }, - "node_modules/trie-search": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trie-search/-/trie-search-2.2.0.tgz", - "integrity": "sha512-kvksu0z8rBRBr+7hvnyl2tvcpiqak80ozA+qYK+guuY1KtV85/s85ubLEjDU2TFflsNBGaYe8PLvvrdg6+sgCQ==", - "license": "MIT", - "dependencies": { - "hasharray": "^1.1.1", - "md5": "^2.3.0" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/ts-algebra": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", @@ -21024,7 +17591,8 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true }, "node_modules/ts-jest": { "version": "29.1.1", @@ -21117,15 +17685,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "license": "MIT", - "engines": { - "node": ">=0.6.x" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -21169,18 +17728,6 @@ "node": ">=4" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -21333,100 +17880,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -21558,54 +18011,11 @@ "node": ">=10.12.0" } }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz", - "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/w3c-keyname": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" + "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "dev": true }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", @@ -21691,6 +18101,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -21826,6 +18237,7 @@ "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, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -21892,14 +18304,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "devOptional": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -22001,14 +18405,6 @@ "url": "https://github.com/sponsors/dmonad" } }, - "node_modules/ylru": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", - "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -22038,15 +18434,6 @@ "peerDependencies": { "zod": "^3.24.1" } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index 64bd0cf8..9a8f5862 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "build:tailwind": "npx tailwindcss -i src/styles/tailwind.css -o styles.css --minify", "build:esbuild": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "lint": "eslint .", + "lint:dead": "npx --yes knip@5", "lint:fix": "eslint . --fix", "format": "prettier --write 'src/**/*.{js,ts,tsx,md}'", "format:check": "prettier --check 'src/**/*.{js,ts,tsx,md}'", @@ -32,32 +33,30 @@ }, "license": "AGPL-3.0", "devDependencies": { + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.36.4", "@eslint-react/eslint-plugin": "^1.38.4", + "@google/generative-ai": "^0.24.0", "@jest/globals": "^29.7.0", "@langchain/ollama": "^1.2.2", "@tailwindcss/container-queries": "^0.1.1", - "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@types/diff": "^7.0.1", - "@types/events": "^3.0.0", "@types/jest": "^29.5.11", - "@types/koa": "^2.13.7", - "@types/koa__cors": "^4.0.0", "@types/luxon": "^3.4.2", "@types/node": "^16.11.6", "@types/react": "^18.0.33", "@types/react-dom": "^18.0.11", - "@types/react-syntax-highlighter": "^15.5.6", "@types/turndown": "^5.0.6", "@types/uuid": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "@typescript-eslint/parser": "^8.19.1", "electron": "^27.3.2", "esbuild": "^0.25.0", + "esbuild-plugin-svg": "^0.1.0", "eslint": "^9.18.0", "eslint-plugin-obsidianmd": "^0.3.0", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-tailwindcss": "^3.18.0", + "globals": "^15.14.0", "husky": "^9.1.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.5.0", @@ -66,6 +65,7 @@ "obsidian": "^1.2.5", "prettier": "^3.3.3", "tailwindcss": "^3.4.15", + "tailwindcss-animate": "^1.0.7", "ts-jest": "^29.1.0", "tslib": "2.4.0", "typescript": "^5.7.2", @@ -73,14 +73,9 @@ "yaml": "^2.6.1" }, "dependencies": { - "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.36.4", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@google/generative-ai": "^0.24.0", - "@huggingface/inference": "^4.11.3", - "@koa/cors": "^5.0.0", "@langchain/anthropic": "^1.0.0", "@langchain/classic": "^1.0.9", "@langchain/community": "^1.0.0", @@ -91,10 +86,7 @@ "@langchain/openai": "^1.0.0", "@langchain/textsplitters": "^1.0.0", "@langchain/xai": "^1.0.0", - "@lexical/plain-text": "^0.34.0", "@lexical/react": "^0.34.0", - "@lexical/selection": "^0.34.0", - "@lexical/utils": "^0.34.0", "@orama/orama": "^3.0.0-rc-2", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.2", @@ -108,42 +100,24 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.5", "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.2.8", - "@tabler/icons-react": "^2.14.0", "async-mutex": "^0.5.0", "buffer": "^6.0.3", "chrono-node": "^2.7.7", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "codemirror-companion-extension": "^0.0.11", "diff": "^7.0.0", - "esbuild-plugin-svg": "^0.1.0", - "eventsource-parser": "^1.0.0", "fuzzysort": "^3.1.0", "jotai": "^2.10.3", - "koa": "^2.14.2", - "koa-proxies": "^0.12.3", - "langchain": "^1.2.28", "lexical": "^0.34.0", "lucide-react": "^0.462.0", "luxon": "^3.5.0", "minisearch": "^7.2.0", - "next-i18next": "^13.2.2", "openai": "^4.95.1", - "p-queue": "^8.1.0", - "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-dropzone": "^14.3.5", - "react-markdown": "^9.0.1", "react-resizable-panels": "^3.0.2", - "react-syntax-highlighter": "^15.5.0", - "sse": "github:mpetazzoni/sse.js", "tailwind-merge": "^2.5.5", - "tailwindcss-animate": "^1.0.7", - "trie-search": "^2.2.0", "turndown": "^7.2.2", "uuid": "^11.1.0", "zod": "^3.25.76" diff --git a/src/LLMProviders/chainRunner/index.ts b/src/LLMProviders/chainRunner/index.ts index da3874bb..7ad9e3b7 100644 --- a/src/LLMProviders/chainRunner/index.ts +++ b/src/LLMProviders/chainRunner/index.ts @@ -1,26 +1,7 @@ // Main exports for chain runners export type { ChainRunner } from "./BaseChainRunner"; -export { BaseChainRunner } from "./BaseChainRunner"; export { LLMChainRunner } from "./LLMChainRunner"; export { VaultQAChainRunner } from "./VaultQAChainRunner"; export { CopilotPlusChainRunner } from "./CopilotPlusChainRunner"; export { ProjectChainRunner } from "./ProjectChainRunner"; export { AutonomousAgentChainRunner } from "./AutonomousAgentChainRunner"; - -// Utility exports (for internal use or testing) -export { ThinkBlockStreamer } from "./utils/ThinkBlockStreamer"; -export { - executeSequentialToolCall, - getToolDisplayName, - getToolEmoji, - logToolCall, - logToolResult, - deduplicateSources, -} from "./utils/toolExecution"; -export type { ToolExecutionResult } from "./utils/toolExecution"; -export { - createToolResultMessage, - generateToolCallId, - extractNativeToolCalls, -} from "./utils/nativeToolCalling"; -export type { NativeToolCall } from "./utils/nativeToolCalling"; diff --git a/src/LLMProviders/chainRunner/utils/citationUtils.ts b/src/LLMProviders/chainRunner/utils/citationUtils.ts index 55fdadff..8bc03f36 100644 --- a/src/LLMProviders/chainRunner/utils/citationUtils.ts +++ b/src/LLMProviders/chainRunner/utils/citationUtils.ts @@ -5,7 +5,7 @@ // ===== CITATION RULES ===== -export const CITATION_RULES = `CITATION RULES: +const CITATION_RULES = `CITATION RULES: 1. START with [^1] and increment sequentially ([^1], [^2], [^3], etc.) with NO gaps 2. BE SELECTIVE: ONLY cite when introducing NEW factual claims, specific data, or direct quotes from sources 3. IMPORTANT: Do NOT cite every sentence or bullet point. This creates clutter and poor readability. @@ -21,7 +21,7 @@ export const CITATION_RULES = `CITATION RULES: 9. If multiple source chunks come from the same document, cite each relevant chunk separately (e.g., [^1] and [^2] can both be from the same document title) 10. End with '#### Sources' section containing: [^n]: [[Title]] (one per line, matching citation order)`; -export const WEB_CITATION_RULES = `WEB CITATION RULES: +const WEB_CITATION_RULES = `WEB CITATION RULES: 1. START with [^1] and increment sequentially ([^1], [^2], [^3], etc.) with NO gaps 2. Cite ONLY when introducing new factual claims, statistics, or direct quotes from the search results 3. After every cited claim, place the corresponding footnote immediately after the sentence ("The study found X [^1]") @@ -193,7 +193,7 @@ export function getWebSearchCitationInstructions(enableInlineCitations: boolean // ===== CITATION PROCESSING UTILITIES ===== -export interface SourcesSection { +interface SourcesSection { mainContent: string; sourcesBlock: string; } @@ -254,7 +254,7 @@ export function extractSourcesSection(content: string): SourcesSection | null { /** * Normalizes sources block by adding line breaks if everything is on one line. */ -export function normalizeSourcesBlock(sourcesBlock: string): string { +function normalizeSourcesBlock(sourcesBlock: string): string { if (!sourcesBlock.includes("\n")) { // Ensure a break before every [n] sourcesBlock = sourcesBlock.replace(/\s*\[(\d+)\]\s*/g, "\n[$1] "); @@ -268,7 +268,7 @@ export function normalizeSourcesBlock(sourcesBlock: string): string { /** * Parses footnote definitions from sources block. */ -export function parseFootnoteDefinitions(sourcesBlock: string): string[] { +function parseFootnoteDefinitions(sourcesBlock: string): string[] { return sourcesBlock .split("\n") .map((l) => l.trim()) @@ -278,10 +278,7 @@ export function parseFootnoteDefinitions(sourcesBlock: string): string[] { /** * Builds a citation renumbering map based on first-mention order in content. */ -export function buildCitationMap( - mainContent: string, - footnoteLines: string[] -): Map { +function buildCitationMap(mainContent: string, footnoteLines: string[]): Map { const map = new Map(); const seen = new Set(); const firstMention: number[] = []; @@ -368,10 +365,7 @@ export function normalizeCitations(content: string, map: Map): s /** * Converts footnote definitions to simple display items. */ -export function convertFootnoteDefinitions( - sourcesBlock: string, - map: Map -): string[] { +function convertFootnoteDefinitions(sourcesBlock: string, map: Map): string[] { const items: string[] = []; sourcesBlock.split("\n").forEach((line) => { const m = line.match(/^\[\^(\d+)\]:\s*(.*)$/); @@ -409,7 +403,7 @@ export function convertFootnoteDefinitions( /** * Consolidates duplicate sources and returns mapping for citation updates. */ -export function consolidateDuplicateSources(items: string[]): { +function consolidateDuplicateSources(items: string[]): { uniqueItems: string[]; consolidationMap: Map; } { @@ -591,7 +585,7 @@ function buildSourcesDetails(mainContent: string, items: SourcesDisplayItem[]): * These spans provide visual feedback during streaming (styled as pending links) * and are replaced by linkInlineCitations with actual clickable anchors after streaming. */ -export function wrapCitationPlaceholders(content: string): string { +function wrapCitationPlaceholders(content: string): string { return content.replace( /\[(\d+(?:\s*,\s*\d+)*)\](?!\()/g, '[$1]' diff --git a/src/LLMProviders/chainRunner/utils/nativeToolCalling.ts b/src/LLMProviders/chainRunner/utils/nativeToolCalling.ts index f439aa9f..5a83b1b9 100644 --- a/src/LLMProviders/chainRunner/utils/nativeToolCalling.ts +++ b/src/LLMProviders/chainRunner/utils/nativeToolCalling.ts @@ -6,7 +6,6 @@ */ import { AIMessage, ToolMessage } from "@langchain/core/messages"; -import { ToolCall as LangChainToolCall } from "@langchain/core/messages/tool"; import { logError } from "@/logger"; /** @@ -27,37 +26,6 @@ export interface ToolCallChunk { args: string; // JSON string accumulated from chunks } -/** - * Extract native tool calls from an AIMessage. - * Returns empty array if no tool calls present. - * - * @param message - AIMessage from LLM response - * @returns Array of standardized tool calls - */ -export function extractNativeToolCalls(message: AIMessage): NativeToolCall[] { - const toolCalls = message.tool_calls; - - if (!toolCalls || toolCalls.length === 0) { - return []; - } - - return toolCalls.map((tc: LangChainToolCall) => ({ - id: tc.id || generateToolCallId(), - name: tc.name, - args: (tc.args as Record) || {}, - })); -} - -/** - * Check if an AIMessage contains tool calls - * - * @param message - AIMessage to check - * @returns true if message has tool calls - */ -export function hasToolCalls(message: AIMessage): boolean { - return (message.tool_calls?.length ?? 0) > 0; -} - /** * Create a ToolMessage for returning tool execution results to the LLM. * diff --git a/src/LLMProviders/chainRunner/utils/searchResultUtils.ts b/src/LLMProviders/chainRunner/utils/searchResultUtils.ts index bf1d55c8..13414ee7 100644 --- a/src/LLMProviders/chainRunner/utils/searchResultUtils.ts +++ b/src/LLMProviders/chainRunner/utils/searchResultUtils.ts @@ -26,7 +26,7 @@ export interface SearchDoc { * Quality summary for search results. * Helps the LLM evaluate whether results are adequate or if re-search is needed. */ -export interface QualitySummary { +interface QualitySummary { high: number; // Count of results with score >= 0.7 medium: number; // Count of results with score >= 0.3 and < 0.7 low: number; // Count of results with score < 0.3 @@ -212,7 +212,7 @@ function toIsoString(ts: unknown): string { * Create a concise, single-line summary of an explanation object. * Includes lexical matches, semantic score, folder/graph boosts, and score adjustments. */ -export function summarizeExplanation(explanation: unknown): string { +function summarizeExplanation(explanation: unknown): string { if (!explanation) return ""; const parts: string[] = []; diff --git a/src/LLMProviders/chainRunner/utils/toolCallParser.ts b/src/LLMProviders/chainRunner/utils/toolCallParser.ts index 76bab79e..2b5b20aa 100644 --- a/src/LLMProviders/chainRunner/utils/toolCallParser.ts +++ b/src/LLMProviders/chainRunner/utils/toolCallParser.ts @@ -17,7 +17,7 @@ export interface ErrorMarker { endIndex: number; } -export interface ParsedMessage { +interface ParsedMessage { segments: Array<{ type: "text" | "toolCall" | "error"; content: string; @@ -45,7 +45,7 @@ function encodeResultForMarker(result: string): string { /** * Decode tool result previously encoded for marker embedding */ -export function decodeResultFromMarker(result: string | undefined): string | undefined { +function decodeResultFromMarker(result: string | undefined): string | undefined { if (typeof result !== "string") return result; if (!result.startsWith("ENC:")) return result; try { @@ -65,38 +65,6 @@ function buildOmittedResultMessage(toolName: string): string { return `Tool '${toolName}' ${TOOL_RESULT_OMITTED_THRESHOLD_MESSAGE}`; } -/** - * For logging only: decode any encoded tool results embedded in markers - */ -export function decodeToolCallMarkerResults(message: string): string { - if (!message || typeof message !== "string") return message; - return message.replace( - //g, - (_match, id: string, encoded: string) => { - const decoded = decodeResultFromMarker(encoded) || encoded; - return ``; - } - ); -} - -/** - * Ensure any TOOL_CALL_END results are encoded. Useful for sanitizing messages - * that might contain unencoded results due to legacy or partial updates. - */ -export function ensureEncodedToolCallMarkerResults(message: string): string { - if (!message || typeof message !== "string") return message; - return message.replace( - //g, - (_match, id: string, content: string) => { - if (content.startsWith("ENC:")) { - return _match; - } - const safe = encodeResultForMarker(content); - return ``; - } - ); -} - /** * Parse error chunks from a text segment * Format: error content diff --git a/src/LLMProviders/chainRunner/utils/toolExecution.ts b/src/LLMProviders/chainRunner/utils/toolExecution.ts index 917c1ef5..2a60b79d 100644 --- a/src/LLMProviders/chainRunner/utils/toolExecution.ts +++ b/src/LLMProviders/chainRunner/utils/toolExecution.ts @@ -15,7 +15,7 @@ export interface ToolCall { args: Record; } -export interface ToolExecutionResult { +interface ToolExecutionResult { toolName: string; result: string; success: boolean; @@ -146,7 +146,7 @@ export async function executeSequentialToolCall( /** * Get display name for tool (user-friendly version) */ -export function getToolDisplayName(toolName: string): string { +function getToolDisplayName(toolName: string): string { // Special handling for localSearch to show the actual search type being used if (toolName === "localSearch") { const settings = getSettings(); @@ -184,7 +184,7 @@ export function getToolDisplayName(toolName: string): string { /** * Get emoji for tool display */ -export function getToolEmoji(toolName: string): string { +function getToolEmoji(toolName: string): string { const emojiMap: Record = { localSearch: "🔍", webSearch: "🌐", @@ -211,32 +211,6 @@ export function getToolEmoji(toolName: string): string { return emojiMap[toolName] || "🔧"; } -/** - * Get user confirmation message for tool call - */ -export function getToolConfirmtionMessage( - toolName: string, - toolArgs?: Record -): string | null { - if (toolName == "writeFile" || toolName == "editFile") { - return "Accept / reject in the Preview"; - } - - // Display salient terms for lexical search - if (toolName === "localSearch" && toolArgs?.salientTerms) { - const settings = getSettings(); - // Only show salient terms for lexical search (index-free) - if (!settings.enableSemanticSearchV3) { - const terms = Array.isArray(toolArgs.salientTerms) ? toolArgs.salientTerms : []; - if (terms.length > 0) { - return `Terms: ${terms.slice(0, 3).join(", ")}${terms.length > 3 ? "..." : ""}`; - } - } - } - - return null; -} - /** * Log tool call details for debugging */ diff --git a/src/LLMProviders/chainRunner/utils/toolPromptDebugger.ts b/src/LLMProviders/chainRunner/utils/toolPromptDebugger.ts index 5edc1719..d01cd65b 100644 --- a/src/LLMProviders/chainRunner/utils/toolPromptDebugger.ts +++ b/src/LLMProviders/chainRunner/utils/toolPromptDebugger.ts @@ -4,7 +4,7 @@ import { processRawChatHistory, processedMessagesToTextOnly } from "./chatHistor /** * Options for building prompt debug sections with annotated provenance. */ -export interface BuildPromptDebugSectionsOptions { +interface BuildPromptDebugSectionsOptions { systemSections: PromptSection[]; rawHistory?: unknown[]; adapterName: string; @@ -27,9 +27,7 @@ export interface PromptDebugReport { * @param options - Data required to assemble annotated prompt sections. * @returns Prompt sections with provenance metadata. */ -export function buildPromptDebugSections( - options: BuildPromptDebugSectionsOptions -): PromptSection[] { +function buildPromptDebugSections(options: BuildPromptDebugSectionsOptions): PromptSection[] { const { systemSections, rawHistory, adapterName, originalUserMessage, enhancedUserMessage } = options; const sections: PromptSection[] = [...systemSections]; @@ -76,7 +74,7 @@ export function buildPromptDebugSections( * @param sections - Prompt sections with provenance metadata. * @returns Multiline string with section headers that identify code sources. */ -export function formatPromptSectionsWithAnnotations(sections: PromptSection[]): string { +function formatPromptSectionsWithAnnotations(sections: PromptSection[]): string { return sections .map((section) => { const header = `[Section: ${section.label} | Source: ${section.source}]`; diff --git a/src/LLMProviders/chatModelManager.ts b/src/LLMProviders/chatModelManager.ts index 48c2b5c3..e5ab05dd 100644 --- a/src/LLMProviders/chatModelManager.ts +++ b/src/LLMProviders/chatModelManager.ts @@ -25,7 +25,6 @@ import { safeFetchNoThrow, shouldUseGitHubCopilotResponsesApi, } from "@/utils"; -import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai"; import { ChatAnthropic } from "@langchain/anthropic"; import { BaseChatModel } from "@langchain/core/language_models/chat_models"; import { BaseLanguageModel } from "@langchain/core/language_models/base"; @@ -42,6 +41,14 @@ import { ChatLMStudio } from "./ChatLMStudio"; import { BedrockChatModel, type BedrockChatModelFields } from "./BedrockChatModel"; import { GitHubCopilotChatModel } from "@/LLMProviders/githubCopilot/GitHubCopilotChatModel"; import { GitHubCopilotResponsesModel } from "@/LLMProviders/githubCopilot/GitHubCopilotResponsesModel"; +import type { SafetySetting } from "@google/generative-ai"; + +const GOOGLE_SAFETY_SETTINGS_BLOCK_NONE: SafetySetting[] = [ + { category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", threshold: "BLOCK_NONE" } as SafetySetting, + { category: "HARM_CATEGORY_HATE_SPEECH", threshold: "BLOCK_NONE" } as SafetySetting, + { category: "HARM_CATEGORY_DANGEROUS_CONTENT", threshold: "BLOCK_NONE" } as SafetySetting, + { category: "HARM_CATEGORY_HARASSMENT", threshold: "BLOCK_NONE" } as SafetySetting, +]; // Patch BaseLanguageModel.prototype.getNumTokens once at module load to prevent // tiktoken CDN fetches. LangChain's default getNumTokens() downloads a ~3MB BPE @@ -290,24 +297,7 @@ export default class ChatModelManager { [ChatModelProviders.GOOGLE]: { apiKey: await getDecryptedKey(customModel.apiKey || settings.googleApiKey), model: modelName, - safetySettings: [ - { - category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, - threshold: HarmBlockThreshold.BLOCK_NONE, - }, - { - category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, - threshold: HarmBlockThreshold.BLOCK_NONE, - }, - { - category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, - threshold: HarmBlockThreshold.BLOCK_NONE, - }, - { - category: HarmCategory.HARM_CATEGORY_HARASSMENT, - threshold: HarmBlockThreshold.BLOCK_NONE, - }, - ], + safetySettings: GOOGLE_SAFETY_SETTINGS_BLOCK_NONE, baseUrl: customModel.baseUrl, }, [ChatModelProviders.XAI]: { diff --git a/src/aiParams.ts b/src/aiParams.ts index 46910b4e..80c5afc5 100644 --- a/src/aiParams.ts +++ b/src/aiParams.ts @@ -60,7 +60,7 @@ export const projectContextLoadAtom = atom({ total: [], }); -export interface IndexingProgressState { +interface IndexingProgressState { isActive: boolean; isPaused: boolean; isCancelled: boolean; @@ -70,7 +70,7 @@ export interface IndexingProgressState { completionStatus: "none" | "success" | "cancelled" | "error"; } -export const indexingProgressAtom = atom({ +const indexingProgressAtom = atom({ isActive: false, isPaused: false, isCancelled: false, @@ -237,26 +237,10 @@ export function subscribeToProjectChange( }); } -export function useCurrentProject() { - return useAtom(currentProjectAtom, { - store: settingsStore, - }); -} - export function setProjectLoading(loading: boolean) { settingsStore.set(projectLoadingAtom, loading); } -export function isProjectLoading(): boolean { - return settingsStore.get(projectLoadingAtom); -} - -export function subscribeToProjectLoadingChange(callback: (loading: boolean) => void): () => void { - return settingsStore.sub(projectLoadingAtom, () => { - callback(settingsStore.get(projectLoadingAtom)); - }); -} - export function useProjectLoading() { return useAtom(projectLoadingAtom, { store: settingsStore, @@ -275,11 +259,6 @@ export function getSelectedTextContexts(): SelectedTextContext[] { return settingsStore.get(selectedTextContextsAtom); } -export function addSelectedTextContext(context: SelectedTextContext) { - const current = getSelectedTextContexts(); - setSelectedTextContexts([...current, context]); -} - export function removeSelectedTextContext(id: string) { const current = getSelectedTextContexts(); setSelectedTextContexts(current.filter((context) => context.id !== id)); @@ -295,13 +274,6 @@ export function useSelectedTextContexts() { }); } -/** - * Gets the project context load state from the atom. - */ -export function getProjectContextLoadState(): Readonly { - return settingsStore.get(projectContextLoadAtom); -} - /** * Sets the project context load state in the atom. */ @@ -322,17 +294,6 @@ export function updateProjectContextLoadState void -): () => void { - return settingsStore.sub(projectContextLoadAtom, () => { - callback(settingsStore.get(projectContextLoadAtom)); - }); -} - /** * Hook to get the project context load state from the atom. */ diff --git a/src/commands/constants.ts b/src/commands/constants.ts index d3a823bb..b5c3d72e 100644 --- a/src/commands/constants.ts +++ b/src/commands/constants.ts @@ -1,8 +1,6 @@ import { CustomCommand } from "@/commands/type"; export const LEGACY_SELECTED_TEXT_PLACEHOLDER = "{copilot-selection}"; -export const COMMAND_NAME_MAX_LENGTH = 50; -export const QUICK_COMMAND_CODE_BLOCK = "copilotquickcommand"; export const EMPTY_COMMAND: CustomCommand = { title: "", content: "", diff --git a/src/commands/customCommandUtils.ts b/src/commands/customCommandUtils.ts index d6dcaa33..2519601f 100644 --- a/src/commands/customCommandUtils.ts +++ b/src/commands/customCommandUtils.ts @@ -6,11 +6,10 @@ import { COPILOT_COMMAND_SLASH_ENABLED, EMPTY_COMMAND, LEGACY_SELECTED_TEXT_PLACEHOLDER, - QUICK_COMMAND_CODE_BLOCK, } from "@/commands/constants"; import { CustomCommand } from "@/commands/type"; import { logWarn } from "@/logger"; -import { normalizePath, Notice, TAbstractFile, TFile, Vault, Editor } from "obsidian"; +import { normalizePath, Notice, TAbstractFile, TFile, Vault } from "obsidian"; import { getSettings } from "@/settings/model"; import { updateCachedCommands, @@ -146,7 +145,7 @@ export function sortCommandsByOrder(commands: CustomCommand[]): CustomCommand[] }); } -export function sortCommandsByRecency(commands: CustomCommand[]): CustomCommand[] { +function sortCommandsByRecency(commands: CustomCommand[]): CustomCommand[] { return sortByStrategy(commands, "recent", { getName: (command) => command.title, getCreatedAtMs: () => 0, @@ -154,7 +153,7 @@ export function sortCommandsByRecency(commands: CustomCommand[]): CustomCommand[ }); } -export function sortCommandsByAlphabetical(commands: CustomCommand[]): CustomCommand[] { +function sortCommandsByAlphabetical(commands: CustomCommand[]): CustomCommand[] { return sortByStrategy(commands, "name", { getName: (command) => command.title, getCreatedAtMs: () => 0, @@ -514,68 +513,3 @@ export async function ensureCommandFrontmatter(file: TFile, command: CustomComma removePendingFileWrite(file.path); } } - -/** - * Removes all quick command code blocks from the editor while preserving cursor position and selection - * @param editor - The Obsidian editor instance - * @returns true if any blocks were removed, false otherwise - */ -export function removeQuickCommandBlocks(editor: Editor): boolean { - // Store original selection positions - const originalFrom = editor.getCursor("from"); - const originalTo = editor.getCursor("to"); - - const content = editor.getValue(); - const lines = content.split("\n"); - let hasExisting = false; - const newLines = []; - let removedLinesBeforeFrom = 0; - let removedLinesBeforeTo = 0; - let i = 0; - - while (i < lines.length) { - if (lines[i].trim() === `\`\`\`${QUICK_COMMAND_CODE_BLOCK}`) { - hasExisting = true; - const blockStartLine = i; - - // Skip the opening line - i++; - // Skip until we find the closing ``` - while (i < lines.length && lines[i].trim() !== "```") { - i++; - } - // Skip the closing line - i++; - - const removedLineCount = i - blockStartLine; - - // Calculate how many lines were removed before the selection positions - if (blockStartLine <= originalFrom.line) { - removedLinesBeforeFrom += removedLineCount; - } - if (blockStartLine <= originalTo.line) { - removedLinesBeforeTo += removedLineCount; - } - } else { - newLines.push(lines[i]); - i++; - } - } - - // Update editor content and restore selection if we removed existing blocks - if (hasExisting) { - editor.setValue(newLines.join("\n")); - - // Calculate new selection positions accounting for removed lines - const newFromLine = Math.max(0, originalFrom.line - removedLinesBeforeFrom); - const newToLine = Math.max(0, originalTo.line - removedLinesBeforeTo); - - // Restore the selection - editor.setSelection( - { line: newFromLine, ch: originalFrom.ch }, - { line: newToLine, ch: originalTo.ch } - ); - } - - return hasExisting; -} diff --git a/src/commands/index.ts b/src/commands/index.ts index ea8b0f6e..9166dcd9 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -36,11 +36,7 @@ import { setSelectedTextContexts } from "@/aiParams"; /** * Add a command to the plugin. Supports async callbacks; errors are logged. */ -export function addCommand( - plugin: CopilotPlugin, - id: CommandId, - callback: () => void | Promise -) { +function addCommand(plugin: CopilotPlugin, id: CommandId, callback: () => void | Promise) { plugin.addCommand({ id, name: COMMAND_NAMES[id], @@ -78,7 +74,7 @@ function addEditorCommand( /** * Add a check command to the plugin. */ -export function addCheckCommand( +function addCheckCommand( plugin: CopilotPlugin, id: CommandId, callback: (checking: boolean) => boolean | void diff --git a/src/commands/state.ts b/src/commands/state.ts index f6d611d3..8a5d3269 100644 --- a/src/commands/state.ts +++ b/src/commands/state.ts @@ -18,16 +18,6 @@ export function isFileWritePending(filePath: string) { return pendingFileWritesAtom.has(filePath); } -export function createCachedCommand(command: CustomCommand): CustomCommand { - const commands = customCommandsStore.get(customCommandsAtom); - const existingCommand = commands.find((c) => c.title === command.title); - if (existingCommand) { - return existingCommand; - } - customCommandsStore.set(customCommandsAtom, [...commands, command]); - return command; -} - export function deleteCachedCommand(title: string) { const commands = customCommandsStore.get(customCommandsAtom); customCommandsStore.set( diff --git a/src/components/TruncatedText.tsx b/src/components/TruncatedText.tsx index 2d9c4011..72d07cfe 100644 --- a/src/components/TruncatedText.tsx +++ b/src/components/TruncatedText.tsx @@ -7,7 +7,7 @@ import { type PropsWithChildren, useRef, useState } from "react"; const TOLERANCE = 2; // detects text-overflow ellipses being used // ref: https://stackoverflow.com/questions/7738117/html-text-overflow-ellipsis-detection -export function isEllipsesActive( +function isEllipsesActive( textRef: React.MutableRefObject, lineClamp?: number ): boolean { diff --git a/src/components/chat-components/AgentReasoningBlock.tsx b/src/components/chat-components/AgentReasoningBlock.tsx index 00351cc9..5a1db3ec 100644 --- a/src/components/chat-components/AgentReasoningBlock.tsx +++ b/src/components/chat-components/AgentReasoningBlock.tsx @@ -176,5 +176,3 @@ export const AgentReasoningBlock: React.FC = ({ ); }; - -export default AgentReasoningBlock; diff --git a/src/components/chat-components/ChatControls.tsx b/src/components/chat-components/ChatControls.tsx index c01ae8e0..cc47751e 100644 --- a/src/components/chat-components/ChatControls.tsx +++ b/src/components/chat-components/ChatControls.tsx @@ -52,7 +52,7 @@ interface ObsidianAppWithPlugins { }; } -export async function refreshVaultIndex() { +async function refreshVaultIndex() { try { const { getSettings } = await import("@/settings/model"); const settings = getSettings(); @@ -78,7 +78,7 @@ export async function refreshVaultIndex() { } } -export async function forceReindexVault() { +async function forceReindexVault() { try { const { getSettings } = await import("@/settings/model"); const settings = getSettings(); @@ -146,7 +146,7 @@ export async function reloadCurrentProject(app: App) { } } -export async function forceRebuildCurrentProjectContext(app: App) { +async function forceRebuildCurrentProjectContext(app: App) { const currentProject = getCurrentProject(); if (!currentProject) { new Notice("No project is currently selected to rebuild."); diff --git a/src/components/chat-components/ChatSingleMessage.tsx b/src/components/chat-components/ChatSingleMessage.tsx index 53845906..9b636344 100644 --- a/src/components/chat-components/ChatSingleMessage.tsx +++ b/src/components/chat-components/ChatSingleMessage.tsx @@ -91,7 +91,7 @@ const INLINE_CITATION_RE = /\[(\d+(?:\s*,\s*\d+)*)\]/g; * to the corresponding source note. Reads the source mapping from the * rendered .copilot-sources section in the same message. */ -export const linkInlineCitations = (root: HTMLElement): void => { +const linkInlineCitations = (root: HTMLElement): void => { // Build citation number -> source anchor mapping from the rendered sources section. // We store the anchor element (not just the href) so we can copy Obsidian-specific // attributes like data-href and class="internal-link" onto the inline citation link. diff --git a/src/components/chat-components/collapsibleStateUtils.ts b/src/components/chat-components/collapsibleStateUtils.ts index 0a6b1675..7ca93708 100644 --- a/src/components/chat-components/collapsibleStateUtils.ts +++ b/src/components/chat-components/collapsibleStateUtils.ts @@ -1,4 +1,4 @@ -export const COPILOT_COLLAPSIBLE_DOM_ID_PREFIX = "copilot-collapsible"; +const COPILOT_COLLAPSIBLE_DOM_ID_PREFIX = "copilot-collapsible"; declare global { interface Window { diff --git a/src/components/chat-components/hooks/useAtMentionCategories.tsx b/src/components/chat-components/hooks/useAtMentionCategories.tsx index f3007104..830119bf 100644 --- a/src/components/chat-components/hooks/useAtMentionCategories.tsx +++ b/src/components/chat-components/hooks/useAtMentionCategories.tsx @@ -22,7 +22,7 @@ export interface CategoryOption extends TypeaheadOption { icon: React.ReactNode; } -export const CATEGORY_OPTIONS: CategoryOption[] = [ +const CATEGORY_OPTIONS: CategoryOption[] = [ { key: "notes", title: "Notes", diff --git a/src/components/chat-components/pills/ActiveWebTabPillNode.tsx b/src/components/chat-components/pills/ActiveWebTabPillNode.tsx index 802019d2..8a3c3e16 100644 --- a/src/components/chat-components/pills/ActiveWebTabPillNode.tsx +++ b/src/components/chat-components/pills/ActiveWebTabPillNode.tsx @@ -173,34 +173,6 @@ export function $isActiveWebTabPillNode( return node instanceof ActiveWebTabPillNode; } -/** - * Check whether the editor currently contains an active web tab pill. - * Used to determine if Active Web Tab should be included at send time, - * avoiding async pill-sync race conditions. - * @returns True if at least one ActiveWebTabPillNode exists in the editor - */ -export function $hasActiveWebTabPill(): boolean { - const root = $getRoot(); - - function traverse(node: LexicalNode): boolean { - if ($isActiveWebTabPillNode(node)) { - return true; - } - - if ("getChildren" in node && typeof node.getChildren === "function") { - const children = (node as { getChildren: () => LexicalNode[] }).getChildren(); - for (const child of children) { - if (traverse(child)) { - return true; - } - } - } - return false; - } - - return traverse(root); -} - /** * Removes all active web tab pills from the editor. * @returns The number of pills removed diff --git a/src/components/chat-components/pills/FolderPillNode.tsx b/src/components/chat-components/pills/FolderPillNode.tsx index 384e8768..191d2329 100644 --- a/src/components/chat-components/pills/FolderPillNode.tsx +++ b/src/components/chat-components/pills/FolderPillNode.tsx @@ -125,7 +125,7 @@ export function $isFolderPillNode(node: LexicalNode): node is FolderPillNode { return node instanceof FolderPillNode; } -export function $findFolderPills(): FolderPillNode[] { +function $findFolderPills(): FolderPillNode[] { const root = $getRoot(); const pills: FolderPillNode[] = []; diff --git a/src/components/chat-components/pills/NotePillNode.tsx b/src/components/chat-components/pills/NotePillNode.tsx index c6d63dfd..eb609e8d 100644 --- a/src/components/chat-components/pills/NotePillNode.tsx +++ b/src/components/chat-components/pills/NotePillNode.tsx @@ -165,27 +165,6 @@ export function $isNotePillNode(node: LexicalNode | null | undefined): node is N return node instanceof NotePillNode; } -export function $findNotePills(): NotePillNode[] { - const root = $getRoot(); - const pills: NotePillNode[] = []; - - function traverse(node: LexicalNode) { - if (node instanceof NotePillNode) { - pills.push(node); - } - - if ("getChildren" in node && typeof node.getChildren === "function") { - const children = node.getChildren() as LexicalNode[]; - for (const child of children) { - traverse(child); - } - } - } - - traverse(root); - return pills; -} - export function $removePillsByPath(notePath: string): number { const root = $getRoot(); let removedCount = 0; diff --git a/src/components/chat-components/pills/ToolPillNode.tsx b/src/components/chat-components/pills/ToolPillNode.tsx index 281da74e..15bb8213 100644 --- a/src/components/chat-components/pills/ToolPillNode.tsx +++ b/src/components/chat-components/pills/ToolPillNode.tsx @@ -79,7 +79,7 @@ export function $isToolPillNode(node: LexicalNode): node is ToolPillNode { return node instanceof ToolPillNode; } -export function $findToolPills(): ToolPillNode[] { +function $findToolPills(): ToolPillNode[] { const root = $getRoot(); const pills: ToolPillNode[] = []; diff --git a/src/components/chat-components/pills/URLPillNode.tsx b/src/components/chat-components/pills/URLPillNode.tsx index 87e3756f..0b647cf6 100644 --- a/src/components/chat-components/pills/URLPillNode.tsx +++ b/src/components/chat-components/pills/URLPillNode.tsx @@ -157,7 +157,7 @@ export function $createURLPillNode(url: string, title?: string, isActive = false return new URLPillNode(url, title, isActive); } -export function $findURLPills(): URLPillNode[] { +function $findURLPills(): URLPillNode[] { const root = $getRoot(); const pills: URLPillNode[] = []; diff --git a/src/components/chat-components/pills/WebTabPillNode.tsx b/src/components/chat-components/pills/WebTabPillNode.tsx index 9a9f2ff2..d5d4ad6c 100644 --- a/src/components/chat-components/pills/WebTabPillNode.tsx +++ b/src/components/chat-components/pills/WebTabPillNode.tsx @@ -208,32 +208,6 @@ export function $findWebTabPills(): WebTabPillNode[] { return pills; } -/** - * Check if a WebTabPillNode with the given URL exists in the editor. - * Must be called within a Lexical read/update context. - * Uses early-exit traversal for better performance. - */ -export function $hasWebTabPillWithUrl(url: string): boolean { - const root = $getRoot(); - - function traverse(node: LexicalNode): boolean { - if (node instanceof WebTabPillNode && node.getURL() === url) { - return true; // Early exit on match - } - if ("getChildren" in node && typeof node.getChildren === "function") { - const children = (node as { getChildren: () => LexicalNode[] }).getChildren(); - for (const child of children) { - if (traverse(child)) { - return true; // Propagate early exit - } - } - } - return false; - } - - return traverse(root); -} - /** Remove WebTabPillNodes by URL. */ export function $removeWebTabPillsByUrl(url: string): void { const pills = $findWebTabPills(); diff --git a/src/components/chat-components/utils/lexicalTextUtils.ts b/src/components/chat-components/utils/lexicalTextUtils.ts index 5386b002..57fd2154 100644 --- a/src/components/chat-components/utils/lexicalTextUtils.ts +++ b/src/components/chat-components/utils/lexicalTextUtils.ts @@ -49,7 +49,7 @@ export interface PillData { /** * Generic function to create pill nodes based on type and data */ -export function $createPillNode(pillData: PillData) { +function $createPillNode(pillData: PillData) { const { type, title, data } = pillData; switch (type) { diff --git a/src/components/chat-components/utils/notePreviewUtils.ts b/src/components/chat-components/utils/notePreviewUtils.ts index cca86a28..79b1389b 100644 --- a/src/components/chat-components/utils/notePreviewUtils.ts +++ b/src/components/chat-components/utils/notePreviewUtils.ts @@ -11,10 +11,7 @@ declare const app: App; * @param maxLength - Maximum length for truncated content (default: 500) * @returns Promise resolving to processed content string */ -export async function loadNoteContentForPreview( - file: TFile, - maxLength: number = 500 -): Promise { +async function loadNoteContentForPreview(file: TFile, maxLength: number = 500): Promise { try { // Handle PDF and canvas files - treat as empty content (no preview) if (file.extension === "pdf" || file.extension === "canvas") { diff --git a/src/components/command-ui/chat-message.tsx b/src/components/command-ui/chat-message.tsx deleted file mode 100644 index 7e69d8c1..00000000 --- a/src/components/command-ui/chat-message.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import * as React from "react"; -import { cn } from "@/lib/utils"; -import { Copy, ClipboardCopy } from "lucide-react"; -import { Button } from "@/components/ui/button"; - -interface Message { - id: string; - role: "user" | "assistant"; - content: string; -} - -interface ChatMessageProps { - message: Message; - isStreaming?: boolean; - onCopy?: (message: Message) => void; - onInsert?: (message: Message) => void; -} - -/** - * Individual chat message bubble for Quick Ask modal. - * User messages align right, assistant messages align left with action buttons. - */ -export function ChatMessage({ message, isStreaming, onCopy, onInsert }: ChatMessageProps) { - const isUser = message.role === "user"; - - return ( -
- {/* Message bubble */} -
- {message.content} - {/* Streaming cursor for assistant messages */} - {!isUser && isStreaming && ( - - )} -
- - {/* Action buttons for assistant messages */} - {!isUser && !isStreaming && ( -
- - -
- )} -
- ); -} - -export type { Message }; diff --git a/src/components/command-ui/index.ts b/src/components/command-ui/index.ts index 0ef51e62..8d0ba978 100644 --- a/src/components/command-ui/index.ts +++ b/src/components/command-ui/index.ts @@ -1,11 +1,2 @@ -export { DragHandle } from "./drag-handle"; -export { CloseButton } from "./close-button"; -export { CommandLabel } from "./command-label"; -export { ContentArea, type ContentState } from "./content-area"; -export { FollowUpInput } from "./follow-up-input"; -export { ActionButtons } from "./action-buttons"; -export { DraggableModal } from "./draggable-modal"; -export { ChatMessage, type Message } from "./chat-message"; - -// Composed modals +export { type ContentState } from "./content-area"; export { MenuCommandModal } from "./menu-command-modal"; diff --git a/src/components/modals/ListPromptModal.tsx b/src/components/modals/ListPromptModal.tsx deleted file mode 100644 index 08045e6d..00000000 --- a/src/components/modals/ListPromptModal.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { App, FuzzySuggestModal } from "obsidian"; - -export class ListPromptModal extends FuzzySuggestModal { - private onChoosePromptTitle: (promptTitle: string) => void; - private promptTitles: string[]; - private descriptions: string[]; - - constructor( - app: App, - promptTitles: string[], - onChoosePromptTitle: (promptTitle: string) => void, - descriptions: string[] = [] - ) { - super(app); - this.promptTitles = promptTitles; - this.onChoosePromptTitle = onChoosePromptTitle; - this.descriptions = descriptions; - } - - getItems(): string[] { - return this.promptTitles; - } - - getItemText(promptTitle: string): string { - const index = this.promptTitles.indexOf(promptTitle); - const description = this.descriptions[index]; - return description ? `${promptTitle} (${description})` : promptTitle; - } - - onChooseItem(promptTitle: string, evt: MouseEvent | KeyboardEvent) { - // Find the original title by matching against the promptTitles array - const index = this.promptTitles.findIndex( - (title) => promptTitle.startsWith(title + " (") || promptTitle === title - ); - const actualTitle = index >= 0 ? this.promptTitles[index] : promptTitle; - this.onChoosePromptTitle(actualTitle); - } -} diff --git a/src/components/modals/NewChatConfirmModal.tsx b/src/components/modals/NewChatConfirmModal.tsx deleted file mode 100644 index 5bc688fa..00000000 --- a/src/components/modals/NewChatConfirmModal.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { App } from "obsidian"; -import { ConfirmModal } from "./ConfirmModal"; - -export class NewChatConfirmModal extends ConfirmModal { - constructor(app: App, onConfirm: () => void) { - super( - app, - onConfirm, - "Starting a new chat will clear the current chat history. Any unsaved messages will be lost. Are you sure you want to continue?", - "Start New Chat" - ); - } -} diff --git a/src/components/modals/PatternMatchingModal.tsx b/src/components/modals/PatternMatchingModal.tsx deleted file mode 100644 index 19d472d4..00000000 --- a/src/components/modals/PatternMatchingModal.tsx +++ /dev/null @@ -1,298 +0,0 @@ -import { App, Modal } from "obsidian"; -import { Button } from "@/components/ui/button"; -import { AppContext, useApp } from "@/context"; -import React, { useState } from "react"; -import { createRoot, Root } from "react-dom/client"; -import { - categorizePatterns, - createPatternSettingsValue, - getDecodedPatterns, - getExtensionPattern, - getFilePattern, - getTagPattern, -} from "@/search/searchUtils"; -import { File, FileText, Folder, Tag, Wrench, X } from "lucide-react"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; -import { TagSearchModal } from "@/components/modals/TagSearchModal"; -import { AddContextNoteModal } from "@/components/modals/AddContextNoteModal"; -import { FolderSearchModal } from "@/components/modals/FolderSearchModal"; -import { ExtensionInputModal } from "@/components/modals/ExtensionInputModal"; -import { CustomPatternInputModal } from "@/components/modals/CustomPatternInputModal"; -import { TruncatedText } from "@/components/TruncatedText"; - -function PatternListGroup({ - title, - patterns, - onRemove, -}: { - title: string; - patterns: string[]; - onRemove: (pattern: string) => void; -}) { - return ( -
-
{title}
-
    - {patterns.map((pattern) => ( -
  • - {pattern} - -
  • - ))} -
-
- ); -} - -function PatternMatchingModalContent({ - value: initialValue, - onUpdate, - container, -}: { - value: string; - onUpdate: (value: string) => void; - container: HTMLElement; -}) { - const app = useApp(); - const [value, setValue] = useState(initialValue); - const patterns = getDecodedPatterns(value); - const { tagPatterns, extensionPatterns, folderPatterns, notePatterns } = - categorizePatterns(patterns); - - const updateCategories = (newCategories: { - tagPatterns?: string[]; - extensionPatterns?: string[]; - folderPatterns?: string[]; - notePatterns?: string[]; - }) => { - const newValue = createPatternSettingsValue({ - tagPatterns: newCategories.tagPatterns ?? tagPatterns, - extensionPatterns: newCategories.extensionPatterns ?? extensionPatterns, - folderPatterns: newCategories.folderPatterns ?? folderPatterns, - notePatterns: newCategories.notePatterns ?? notePatterns, - }); - setValue(newValue); - onUpdate(newValue); - }; - - const hasValue = - tagPatterns.length > 0 || - extensionPatterns.length > 0 || - folderPatterns.length > 0 || - notePatterns.length > 0; - - return ( -
-
- {!hasValue &&
No patterns specified
} - {tagPatterns.length > 0 && ( - { - const newPatterns = tagPatterns.filter((p) => p !== pattern); - updateCategories({ - tagPatterns: newPatterns, - }); - }} - /> - )} - {extensionPatterns.length > 0 && ( - { - const newPatterns = extensionPatterns.filter((p) => p !== pattern); - updateCategories({ - extensionPatterns: newPatterns, - }); - }} - /> - )} - {folderPatterns.length > 0 && ( - { - const newPatterns = folderPatterns.filter((p) => p !== pattern); - updateCategories({ - folderPatterns: newPatterns, - }); - }} - /> - )} - {notePatterns.length > 0 && ( - { - const newPatterns = notePatterns.filter((p) => p !== pattern); - updateCategories({ - notePatterns: newPatterns, - }); - }} - /> - )} -
-
- - - - - - { - new TagSearchModal(app, (tag) => { - const tagPattern = getTagPattern(tag); - if (tagPatterns.includes(tagPattern)) { - return; - } - updateCategories({ - tagPatterns: [...tagPatterns, tagPattern], - }); - }).open(); - }} - > -
- - Tag -
-
- { - new FolderSearchModal(app, (folder) => { - if (folderPatterns.includes(folder)) { - return; - } - updateCategories({ - folderPatterns: [...folderPatterns, folder], - }); - }).open(); - }} - > -
- - Folder -
-
- { - new AddContextNoteModal({ - app, - onNoteSelect: (note) => { - const notePattern = getFilePattern(note); - if (notePatterns.includes(notePattern)) { - return; - } - updateCategories({ - notePatterns: [...notePatterns, notePattern], - }); - }, - excludeNotePaths: [], - titleOnly: true, - }).open(); - }} - > -
- - Note -
-
- { - new ExtensionInputModal(app, (extension) => { - const extensionPattern = getExtensionPattern(extension); - if (extensionPatterns.includes(extensionPattern)) { - return; - } - updateCategories({ - extensionPatterns: [...extensionPatterns, extensionPattern], - }); - }).open(); - }} - > -
- - Extension -
-
- { - new CustomPatternInputModal(app, (value) => { - const patterns = getDecodedPatterns(value); - const { - tagPatterns: newTagPatterns, - extensionPatterns: newExtensionPatterns, - folderPatterns: newFolderPatterns, - notePatterns: newNotePatterns, - } = categorizePatterns(patterns); - updateCategories({ - tagPatterns: [...tagPatterns, ...newTagPatterns], - extensionPatterns: [...extensionPatterns, ...newExtensionPatterns], - folderPatterns: [...folderPatterns, ...newFolderPatterns], - notePatterns: [...notePatterns, ...newNotePatterns], - }); - }).open(); - }} - > -
- - Custom -
-
-
-
-
-
- ); -} - -export class PatternMatchingModal extends Modal { - private root: Root; - - constructor( - app: App, - private onUpdate: (value: string) => void, - /** The raw pattern matching value, separated by commas */ - private value: string, - title: string - ) { - super(app); - // https://docs.obsidian.md/Reference/TypeScript+API/Modal/setTitle - // @ts-ignore - this.setTitle(title); - } - - onOpen() { - const { contentEl } = this; - this.root = createRoot(contentEl); - - const handleUpdate = (value: string) => { - this.onUpdate(value); - }; - - this.root.render( - - - - ); - } - - onClose() { - this.root.unmount(); - } -} diff --git a/src/components/modals/ProjectPatternMatchingModal.tsx b/src/components/modals/ProjectPatternMatchingModal.tsx deleted file mode 100644 index 4473a538..00000000 --- a/src/components/modals/ProjectPatternMatchingModal.tsx +++ /dev/null @@ -1,297 +0,0 @@ -import { TruncatedText } from "@/components/TruncatedText"; -import { Button } from "@/components/ui/button"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; -import { - categorizePatterns, - createPatternSettingsValue, - getDecodedPatterns, - getExtensionPattern, - getFilePattern, - getTagPattern, -} from "@/search/searchUtils"; -import { File, FileText, Folder, Tag, Wrench, X } from "lucide-react"; -import { App, Modal, TFile } from "obsidian"; -import React, { useState } from "react"; -import { createRoot, Root } from "react-dom/client"; -import { AppContext, useApp } from "@/context"; -import { CustomPatternInputModal } from "./CustomPatternInputModal"; -import { ExtensionInputModal } from "./ExtensionInputModal"; -import { FolderSearchModal } from "./FolderSearchModal"; -import { ProjectFileSelectModal } from "./ProjectFileSelectModal"; -import { TagSearchModal } from "./TagSearchModal"; - -function PatternListGroup({ - title, - patterns, - onRemove, -}: { - title: string; - patterns: string[]; - onRemove: (pattern: string) => void; -}) { - return ( -
-
{title}
-
    - {patterns.map((pattern) => ( -
  • - {pattern} - -
  • - ))} -
-
- ); -} - -function ProjectPatternMatchingModalContent({ - value: initialValue, - onUpdate, - container, -}: { - value: string; - onUpdate: (value: string) => void; - container: HTMLElement; -}) { - const app = useApp(); - const [value, setValue] = useState(initialValue); - const patterns = getDecodedPatterns(value); - const { tagPatterns, extensionPatterns, folderPatterns, notePatterns } = - categorizePatterns(patterns); - - const updateCategories = (newCategories: { - tagPatterns?: string[]; - extensionPatterns?: string[]; - folderPatterns?: string[]; - notePatterns?: string[]; - }) => { - const newValue = createPatternSettingsValue({ - tagPatterns: newCategories.tagPatterns ?? tagPatterns, - extensionPatterns: newCategories.extensionPatterns ?? extensionPatterns, - folderPatterns: newCategories.folderPatterns ?? folderPatterns, - notePatterns: newCategories.notePatterns ?? notePatterns, - }); - setValue(newValue); - onUpdate(newValue); - }; - - const hasValue = - tagPatterns.length > 0 || - extensionPatterns.length > 0 || - folderPatterns.length > 0 || - notePatterns.length > 0; - - return ( -
-
- {!hasValue &&
No patterns specified
} - {tagPatterns.length > 0 && ( - { - const newPatterns = tagPatterns.filter((p) => p !== pattern); - updateCategories({ - tagPatterns: newPatterns, - }); - }} - /> - )} - {extensionPatterns.length > 0 && ( - { - const newPatterns = extensionPatterns.filter((p) => p !== pattern); - updateCategories({ - extensionPatterns: newPatterns, - }); - }} - /> - )} - {folderPatterns.length > 0 && ( - { - const newPatterns = folderPatterns.filter((p) => p !== pattern); - updateCategories({ - folderPatterns: newPatterns, - }); - }} - /> - )} - {notePatterns.length > 0 && ( - { - const newPatterns = notePatterns.filter((p) => p !== pattern); - updateCategories({ - notePatterns: newPatterns, - }); - }} - /> - )} -
-
- - - - - - { - new TagSearchModal(app, (tag) => { - const tagPattern = getTagPattern(tag); - if (tagPatterns.includes(tagPattern)) { - return; - } - updateCategories({ - tagPatterns: [...tagPatterns, tagPattern], - }); - }).open(); - }} - > -
- - Tag -
-
- { - new FolderSearchModal(app, (folder) => { - if (folderPatterns.includes(folder)) { - return; - } - updateCategories({ - folderPatterns: [...folderPatterns, folder], - }); - }).open(); - }} - > -
- - Folder -
-
- { - new ProjectFileSelectModal({ - app, - onFileSelect: (file: TFile) => { - const filePattern = getFilePattern(file); - if (notePatterns.includes(filePattern)) { - return; - } - updateCategories({ - notePatterns: [...notePatterns, filePattern], - }); - }, - excludeFilePaths: [], - titleOnly: true, - }).open(); - }} - > -
- - Files -
-
- { - new ExtensionInputModal(app, (extension) => { - const extensionPattern = getExtensionPattern(extension); - if (extensionPatterns.includes(extensionPattern)) { - return; - } - updateCategories({ - extensionPatterns: [...extensionPatterns, extensionPattern], - }); - }).open(); - }} - > -
- - Extension -
-
- { - new CustomPatternInputModal(app, (value) => { - const patterns = getDecodedPatterns(value); - const { - tagPatterns: newTagPatterns, - extensionPatterns: newExtensionPatterns, - folderPatterns: newFolderPatterns, - notePatterns: newNotePatterns, - } = categorizePatterns(patterns); - updateCategories({ - tagPatterns: [...tagPatterns, ...newTagPatterns], - extensionPatterns: [...extensionPatterns, ...newExtensionPatterns], - folderPatterns: [...folderPatterns, ...newFolderPatterns], - notePatterns: [...notePatterns, ...newNotePatterns], - }); - }).open(); - }} - > -
- - Custom -
-
-
-
-
-
- ); -} - -export class ProjectPatternMatchingModal extends Modal { - private root: Root; - - constructor( - app: App, - private onUpdate: (value: string) => void, - /** The raw pattern matching value, separated by commas */ - private value: string, - title: string - ) { - super(app); - // @ts-ignore - this.setTitle(title); - } - - onOpen() { - const { contentEl } = this; - this.root = createRoot(contentEl); - - const handleUpdate = (value: string) => { - this.onUpdate(value); - }; - - this.root.render( - - - - ); - } - - onClose() { - this.root.unmount(); - } -} diff --git a/src/components/quick-ask/ModeSelector.tsx b/src/components/quick-ask/ModeSelector.tsx deleted file mode 100644 index 371d3847..00000000 --- a/src/components/quick-ask/ModeSelector.tsx +++ /dev/null @@ -1,73 +0,0 @@ -/** - * ModeSelector - Dropdown for selecting Quick Ask mode. - * Uses DropdownMenu for consistent styling with ModelSelector. - */ - -import React from "react"; -import { MessageCircle, Pencil, Zap, ChevronDown } from "lucide-react"; -import { Button } from "@/components/ui/button"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; -import type { QuickAskMode, QuickAskModeConfig } from "./types"; - -interface ModeSelectorProps { - modes: QuickAskModeConfig[]; - value: QuickAskMode; - onChange: (mode: QuickAskMode) => void; - disabled?: boolean; -} - -const iconMap: Record> = { - "message-circle": MessageCircle, - pencil: Pencil, - zap: Zap, -}; - -/** - * ModeSelector component for Quick Ask panel. - */ -export function ModeSelector({ modes, value, onChange, disabled }: ModeSelectorProps) { - const currentMode = modes.find((m) => m.id === value); - const IconComponent = iconMap[currentMode?.icon ?? ""] ?? MessageCircle; - - return ( - - - - - - - {modes.map((mode) => { - const ModeIcon = iconMap[mode.icon] ?? MessageCircle; - return ( - onChange(mode.id)} - disabled={!mode.implemented} - className="tw-gap-2" - > - -
- {mode.label} - {!mode.implemented && Coming soon} -
-
- ); - })} -
-
- ); -} diff --git a/src/components/quick-ask/QuickAskPanel.tsx b/src/components/quick-ask/QuickAskPanel.tsx index 598885c6..630e2a6c 100644 --- a/src/components/quick-ask/QuickAskPanel.tsx +++ b/src/components/quick-ask/QuickAskPanel.tsx @@ -20,9 +20,6 @@ import { HelpTooltip } from "@/components/ui/help-tooltip"; import { useQuickAskSession } from "./useQuickAskSession"; import { QuickAskMessageComponent } from "./QuickAskMessage"; import { QuickAskInput } from "./QuickAskInput"; -// TODO: Uncomment when Edit/Edit-Direct modes are implemented -// import { ModeSelector } from "./ModeSelector"; -// import { modeRegistry } from "./modeRegistry"; import type { QuickAskPanelProps } from "./types"; import type { ReplaceInvalidReason } from "@/editor/replaceGuard"; import { Button } from "@/components/ui/button"; @@ -43,8 +40,6 @@ export function QuickAskPanel({ }: QuickAskPanelProps) { // UI state const [inputText, setInputText] = useState(""); - // TODO: Uncomment when Edit/Edit-Direct modes are implemented - // const [mode, setMode] = useState("ask"); const chatAreaRef = useRef(null); const containerRef = useRef(null); const isChatPinnedToBottomRef = useRef(true); @@ -80,17 +75,6 @@ export function QuickAskPanel({ // Previously used selectionFrom/selectionTo props that were stale and never updated. const selectionRange = replaceGuard.getRange(); const hasSelection = !!selectionRange && selectionRange.from !== selectionRange.to; - // TODO: Uncomment when Edit/Edit-Direct modes are implemented - // const availableModes = modeRegistry.getAvailable(hasSelection); - - // Keep mode valid when selection state changes - // TODO: Uncomment when Edit/Edit-Direct modes are implemented - // useEffect(() => { - // const modes = modeRegistry.getAvailable(hasSelection); - // if (!modes.some((m) => m.id === mode)) { - // setMode(modes[0]?.id ?? "ask"); - // } - // }, [hasSelection, mode]); const lastMessageId = messages[messages.length - 1]?.id; const lastAssistantIdx = useMemo(() => { @@ -350,15 +334,6 @@ export function QuickAskPanel({ {/* Toolbar - always at bottom */}
- {/* TODO: Uncomment when Edit/Edit-Direct modes are implemented - - */} - (); - - constructor() { - // Register built-in modes - this.register(askModeConfig); - this.register(editModeConfig); - this.register(editDirectModeConfig); - } - - /** - * Registers a mode configuration. - */ - register(config: QuickAskModeConfig): void { - this.modes.set(config.id, config); - } - - /** - * Gets a mode configuration by ID. - */ - get(id: QuickAskMode): QuickAskModeConfig | undefined { - return this.modes.get(id); - } - - /** - * Gets all registered modes. - */ - getAll(): QuickAskModeConfig[] { - return Array.from(this.modes.values()); - } - - /** - * Gets modes available based on selection state. - */ - getAvailable(hasSelection: boolean): QuickAskModeConfig[] { - return this.getAll().filter((mode) => !mode.requiresSelection || hasSelection); - } - - /** - * Gets the system prompt for a mode. - */ - getSystemPrompt(id: QuickAskMode): string { - const mode = this.get(id); - return mode?.systemPrompt ?? QUICK_COMMAND_SYSTEM_PROMPT; - } -} - -// Create singleton instance -export const modeRegistry = new QuickAskModeRegistry(); diff --git a/src/components/quick-ask/modes/askMode.ts b/src/components/quick-ask/modes/askMode.ts deleted file mode 100644 index 7971c6f3..00000000 --- a/src/components/quick-ask/modes/askMode.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Ask mode configuration for Quick Ask. - * Multi-turn conversation mode - the default and primary mode. - */ - -import type { QuickAskModeConfig } from "../types"; - -export const askModeConfig: QuickAskModeConfig = { - id: "ask", - label: "Ask", - icon: "message-circle", - description: "Multi-turn conversation", - requiresSelection: false, - // systemPrompt is undefined - modeRegistry.getSystemPrompt() will use default - implemented: true, -}; diff --git a/src/components/quick-ask/modes/editDirectMode.ts b/src/components/quick-ask/modes/editDirectMode.ts deleted file mode 100644 index 1b196bf4..00000000 --- a/src/components/quick-ask/modes/editDirectMode.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Edit-Direct mode configuration for Quick Ask. - * Direct apply edits without preview - Future implementation. - */ - -import type { QuickAskModeConfig } from "../types"; - -export const editDirectModeConfig: QuickAskModeConfig = { - id: "edit-direct", - label: "Edit Direct", - icon: "zap", - description: "Apply edits directly", - requiresSelection: true, - implemented: false, -}; diff --git a/src/components/quick-ask/modes/editMode.ts b/src/components/quick-ask/modes/editMode.ts deleted file mode 100644 index 84790f15..00000000 --- a/src/components/quick-ask/modes/editMode.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Edit mode configuration for Quick Ask. - * Generate edits with preview - Future implementation. - */ - -import type { QuickAskModeConfig } from "../types"; - -export const editModeConfig: QuickAskModeConfig = { - id: "edit", - label: "Edit", - icon: "pencil", - description: "Generate edits with preview", - requiresSelection: true, - implemented: false, -}; diff --git a/src/components/quick-ask/modes/index.ts b/src/components/quick-ask/modes/index.ts deleted file mode 100644 index b0a52dfe..00000000 --- a/src/components/quick-ask/modes/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Mode configurations exports. - */ - -export { askModeConfig } from "./askMode"; -export { editModeConfig } from "./editMode"; -export { editDirectModeConfig } from "./editDirectMode"; diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx deleted file mode 100644 index 1c012ce6..00000000 --- a/src/components/ui/tabs.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import * as React from "react"; -import * as TabsPrimitive from "@radix-ui/react-tabs"; - -import { cn } from "@/lib/utils"; - -const Tabs = TabsPrimitive.Root; - -const TabsList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -TabsList.displayName = TabsPrimitive.List.displayName; - -const TabsTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; - -const TabsContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -TabsContent.displayName = TabsPrimitive.Content.displayName; - -export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/src/composerUtils.ts b/src/composerUtils.ts index a3bee91e..86ad1559 100644 --- a/src/composerUtils.ts +++ b/src/composerUtils.ts @@ -1,36 +1,5 @@ import { Change } from "diff"; -function strikeThrough(content: string): string { - const lines = content.trim().split("\n"); - return lines.map((line) => "- " + line).join("\n"); -} - -// Get relevant changes only and combine them into a single markdown block -export function getRelevantChangesMarkdown(blocks: Change[][]): string { - const renderedChanges = blocks - .map((block) => { - const hasAddedChanges = block.some((change) => change.added); - const hasRemovedChanges = block.some((change) => change.removed); - let blockChange = ""; - if (hasAddedChanges) { - blockChange = block.map((change) => (change.added ? change.value : "")).join("\n"); - } else if (hasRemovedChanges) { - blockChange = block - .map((change) => (change.removed ? strikeThrough(change.value) : "")) - .join("\n"); - } else { - const content = block.map((change) => change.value).join("\n"); - // Skip blocks with only whitespace. - if (content.trim().length > 0) { - blockChange = "..."; - } - } - return blockChange; - }) - .join("\n"); - return renderedChanges; -} - // Group changes into blocks for better UI presentation export function getChangeBlocks(changes: Change[]): Change[][] { const blocks: Change[][] = []; diff --git a/src/constants.ts b/src/constants.ts index d9a37c00..806235e8 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -12,12 +12,12 @@ export const AI_SENDER = "ai"; // Default folder names export const COPILOT_FOLDER_ROOT = "copilot"; -export const DEFAULT_CHAT_HISTORY_FOLDER = `${COPILOT_FOLDER_ROOT}/copilot-conversations`; -export const DEFAULT_CUSTOM_PROMPTS_FOLDER = `${COPILOT_FOLDER_ROOT}/copilot-custom-prompts`; -export const DEFAULT_MEMORY_FOLDER = `${COPILOT_FOLDER_ROOT}/memory`; -export const DEFAULT_SYSTEM_PROMPTS_FOLDER = `${COPILOT_FOLDER_ROOT}/system-prompts`; -export const DEFAULT_PROJECTS_FOLDER = `${COPILOT_FOLDER_ROOT}/projects`; -export const DEFAULT_CONVERTED_DOC_OUTPUT_FOLDER = ""; +const DEFAULT_CHAT_HISTORY_FOLDER = `${COPILOT_FOLDER_ROOT}/copilot-conversations`; +const DEFAULT_CUSTOM_PROMPTS_FOLDER = `${COPILOT_FOLDER_ROOT}/copilot-custom-prompts`; +const DEFAULT_MEMORY_FOLDER = `${COPILOT_FOLDER_ROOT}/memory`; +const DEFAULT_SYSTEM_PROMPTS_FOLDER = `${COPILOT_FOLDER_ROOT}/system-prompts`; +const DEFAULT_PROJECTS_FOLDER = `${COPILOT_FOLDER_ROOT}/projects`; +const DEFAULT_CONVERTED_DOC_OUTPUT_FOLDER = ""; export const DEFAULT_QA_EXCLUSIONS_SETTING = COPILOT_FOLDER_ROOT; export const DEFAULT_SYSTEM_PROMPT = `You are Obsidian Copilot, a helpful assistant that integrates AI to Obsidian note-taking. 1. Never mention that you do not have access to something. Always rely on the user provided context. @@ -110,20 +110,17 @@ export const VARIABLE_NOTE_TAG = "variable_note"; export const EMBEDDED_PDF_TAG = "embedded_pdf"; export const EMBEDDED_NOTE_TAG = "embedded_note"; export const DATAVIEW_BLOCK_TAG = "dataview_block"; -export const VAULT_NOTE_TAG = "vault_note"; export const RETRIEVED_DOCUMENT_TAG = "retrieved_document"; export const WEB_TAB_CONTEXT_TAG = "web_tab_context"; export const ACTIVE_WEB_TAB_CONTEXT_TAG = "active_web_tab"; export const YOUTUBE_VIDEO_CONTEXT_TAG = "youtube_video_context"; /** Marker text used as placeholder for active web tab in serialized content */ export const ACTIVE_WEB_TAB_MARKER = "{activeWebTab}"; -export const EMPTY_INDEX_ERROR_MESSAGE = - "Copilot index does not exist. Please index your vault first!\n\n1. Set a working embedding model in QA settings. If it's not a local model, don't forget to set the API key. \n\n2. Click 'Refresh Index for Vault' and wait for indexing to complete. If you encounter the rate limiting error, please turn your request per second down in QA setting."; export const CHUNK_SIZE = 6000; export const TEXT_WEIGHT = 0.4; export const MAX_CHARS_FOR_LOCAL_SEARCH_CONTEXT = 448000; export const LLM_TIMEOUT_MS = 30000; // 30 seconds timeout for LLM operations -export const DEFAULT_MAX_SOURCE_CHUNKS = 30; // Default max chunks for search results (with diverse top-K) +const DEFAULT_MAX_SOURCE_CHUNKS = 30; // Default max chunks for search results (with diverse top-K) export const AGENT_LOOP_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes timeout for agent loop export const AGENT_MAX_ITERATIONS_LIMIT = 16; // Maximum allowed value for agent iterations setting export const LOADING_MESSAGES = { @@ -176,11 +173,8 @@ export enum ChatModels { COPILOT_PLUS_FLASH = "copilot-plus-flash", GPT_5_5 = "gpt-5.5", GPT_5_4_mini = "gpt-5.4-mini", - GPT_5_4_nano = "gpt-5.4-nano", GPT_41 = "gpt-4.1", GPT_41_mini = "gpt-4.1-mini", - GPT_41_nano = "gpt-4.1-nano", - O4_mini = "o4-mini", GEMINI_3_PRO_PREVIEW = "gemini-3.1-pro-preview", GEMINI_3_FLASH_PREVIEW = "gemini-3-flash-preview", GEMINI_3_FLASH_LITE = "gemini-3.1-flash-lite", @@ -458,7 +452,6 @@ export enum EmbeddingModelProviders { } export enum EmbeddingModels { - OPENAI_EMBEDDING_ADA_V2 = "text-embedding-ada-002", OPENAI_EMBEDDING_SMALL = "text-embedding-3-small", OPENAI_EMBEDDING_LARGE = "text-embedding-3-large", AZURE_OPENAI = "azure-openai", diff --git a/src/context/L2ContextCompactor.ts b/src/context/L2ContextCompactor.ts index 40f08f44..78028bfa 100644 --- a/src/context/L2ContextCompactor.ts +++ b/src/context/L2ContextCompactor.ts @@ -34,7 +34,7 @@ export { compactBySection, truncateWithEllipsis } from "./compactionUtils"; export { getSourceType as detectSourceType } from "./contextBlockRegistry"; // Re-export chat history compaction for backwards compatibility -export { compactAssistantOutput, compactChatHistoryContent } from "./ChatHistoryCompactor"; +export { compactChatHistoryContent } from "./ChatHistoryCompactor"; /** * Extract the source identifier from an XML block. diff --git a/src/editor/index.ts b/src/editor/index.ts index 5d0051ad..e47f0d1d 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -2,31 +2,11 @@ * Editor utilities - CM6 extensions and helpers. */ -// Persistent highlight factory -export { createPersistentHighlight } from "./persistentHighlight"; -export type { PersistentHighlightRange, PersistentHighlightInstance } from "./persistentHighlight"; +export { SelectionHighlight } from "./selectionHighlight"; -// Selection highlight (QuickAsk / CustomCommandModal) -export { - SelectionHighlight, - showSelectionHighlight, - updateSelectionHighlight, - hideSelectionHighlight, - selectionHighlightExtension, -} from "./selectionHighlight"; -export type { SelectionHighlightRange } from "./selectionHighlight"; - -// Quick Ask export { QuickAskController } from "./quickAskController"; -export { - quickAskWidgetEffect, - quickAskOverlayPlugin, - createQuickAskExtension, -} from "./quickAskExtension"; -// Chat selection highlight export { ChatSelectionHighlightController, hideChatSelectionHighlight, } from "./chatSelectionHighlightController"; -export type { ChatSelectionHighlightControllerOptions } from "./chatSelectionHighlightController"; diff --git a/src/editor/quickAskExtension.ts b/src/editor/quickAskExtension.ts index 6e4d36ac..bf233706 100644 --- a/src/editor/quickAskExtension.ts +++ b/src/editor/quickAskExtension.ts @@ -103,10 +103,3 @@ export const quickAskOverlayPlugin = ViewPlugin.fromClass( } } ); - -/** - * Creates the Quick Ask CM6 extension array. - */ -export function createQuickAskExtension() { - return [quickAskOverlayPlugin]; -} diff --git a/src/editor/selectionHighlight.ts b/src/editor/selectionHighlight.ts index 28bddc20..64a27a85 100644 --- a/src/editor/selectionHighlight.ts +++ b/src/editor/selectionHighlight.ts @@ -8,7 +8,7 @@ * factory, preserving the original public API for backwards compatibility. */ -import { StateEffect, type Extension } from "@codemirror/state"; +import { StateEffect } from "@codemirror/state"; import { EditorView } from "@codemirror/view"; import { logError } from "@/logger"; import { @@ -22,24 +22,7 @@ import { const selectionHighlight = createPersistentHighlight("copilot-selection-highlight"); -// ============================================================================ -// Public Types -// ============================================================================ - -/** - * A persistent highlight range in CM6 document offsets. - * Re-exported for backwards compatibility. - */ -export type SelectionHighlightRange = PersistentHighlightRange; - -// ============================================================================ -// Public API (backwards-compatible) -// ============================================================================ - -/** - * Extension that enables persistent selection highlight support. - */ -export const selectionHighlightExtension: Extension = selectionHighlight.extension; +type SelectionHighlightRange = PersistentHighlightRange; /** * Dispatch helper with error isolation (e.g. view destroyed). @@ -52,55 +35,32 @@ function safeDispatch(view: EditorView, spec: Parameters } } -/** - * Build effects for showing/hiding selection highlight without dispatching. - * Use this when you need to combine highlight effects with other effects in a single dispatch. - * @param view - The EditorView - * @param range - The range to highlight, or null to hide - * @returns Array of StateEffects to include in a dispatch call - */ -export function buildSelectionHighlightEffects( +function buildSelectionHighlightEffects( view: EditorView, range: { from: number; to: number } | null ): StateEffect[] { return selectionHighlight.buildEffects(view, range); } -/** - * Show a persistent highlight in `view` for [from, to]. - * Automatically installs the extension in this view if missing. - */ -export function showSelectionHighlight(view: EditorView, from: number, to: number): void { +function showSelectionHighlight(view: EditorView, from: number, to: number): void { const effects = selectionHighlight.buildEffects(view, { from, to }); if (effects.length > 0) { safeDispatch(view, { effects }); } } -/** - * Update the persistent highlight in `view` to [from, to]. - * Alias of `showSelectionHighlight` (semantic clarity). - */ -export function updateSelectionHighlight(view: EditorView, from: number, to: number): void { +function updateSelectionHighlight(view: EditorView, from: number, to: number): void { showSelectionHighlight(view, from, to); } -/** - * Hide (clear) the persistent highlight in `view`. - * Does NOT install the extension if missing. - */ -export function hideSelectionHighlight(view: EditorView): void { +function hideSelectionHighlight(view: EditorView): void { const effects = selectionHighlight.buildEffects(view, null); if (effects.length > 0) { safeDispatch(view, { effects }); } } -/** - * Get the current persistent highlight range in `view` after mapping through document changes. - * Returns null when the extension isn't installed or the highlight is hidden. - */ -export function getSelectionHighlightRange(view: EditorView): SelectionHighlightRange | null { +function getSelectionHighlightRange(view: EditorView): SelectionHighlightRange | null { return selectionHighlight.getRange(view); } diff --git a/src/encryptionService.ts b/src/encryptionService.ts index f056b7bb..bf10ba7a 100644 --- a/src/encryptionService.ts +++ b/src/encryptionService.ts @@ -54,12 +54,6 @@ const WEBCRYPTO_PREFIX = "enc_web_"; const ENCRYPTION_PREFIX = "enc_"; const DECRYPTION_PREFIX = "dec_"; -/** - * @deprecated getDecryptedKey() now returns "" on failure instead of this sentinel. - * Kept only for backward compatibility with code that may still reference it. - */ -export const DECRYPTION_FAILURE_MESSAGE = "Copilot failed to decrypt API keys!"; - /** * Check whether a value looks like a well-formed encrypted Copilot secret * (recognized prefix + plausible base64 payload). @@ -294,19 +288,6 @@ export async function getDecryptedKey(apiKey: string): Promise { } } -/** - * Decrypt an API key and throw when decryption fails. - * Use in workflows that must not proceed with undecryptable values - * (e.g., configuration export). - */ -export async function getDecryptedKeyOrThrow(apiKey: string): Promise { - const decrypted = await getDecryptedKey(apiKey); - if (!decrypted) { - throw new Error("Failed to decrypt API key."); - } - return decrypted; -} - // --------------------------------------------------------------------------- // Internal helpers // --------------------------------------------------------------------------- diff --git a/src/error.ts b/src/error.ts index ebec6fbc..598a6918 100644 --- a/src/error.ts +++ b/src/error.ts @@ -49,15 +49,3 @@ export class MissingModelKeyError extends Error { Object.setPrototypeOf(this, MissingModelKeyError.prototype); } } - -/** - * Thrown when a user explicitly cancels a modal dialog. - * Callers can catch this to distinguish cancellation from actual errors. - */ -export class UserCancelledError extends Error { - constructor() { - super("User cancelled"); - this.name = "UserCancelledError"; - Object.setPrototypeOf(this, UserCancelledError.prototype); - } -} diff --git a/src/plusUtils.ts b/src/plusUtils.ts index a2f64ba6..7a8728b2 100644 --- a/src/plusUtils.ts +++ b/src/plusUtils.ts @@ -4,7 +4,6 @@ import { CopilotPlusExpiredModal } from "@/components/modals/CopilotPlusExpiredM import { ChatModelProviders, ChatModels, - DEFAULT_SETTINGS, EmbeddingModelProviders, EmbeddingModels, PlusUtmMedium, @@ -16,16 +15,12 @@ import { Notice } from "obsidian"; import React from "react"; export const DEFAULT_COPILOT_PLUS_CHAT_MODEL = ChatModels.COPILOT_PLUS_FLASH; -export const DEFAULT_COPILOT_PLUS_CHAT_MODEL_KEY = +const DEFAULT_COPILOT_PLUS_CHAT_MODEL_KEY = DEFAULT_COPILOT_PLUS_CHAT_MODEL + "|" + ChatModelProviders.COPILOT_PLUS; export const DEFAULT_COPILOT_PLUS_EMBEDDING_MODEL = EmbeddingModels.COPILOT_PLUS_SMALL; export const DEFAULT_COPILOT_PLUS_EMBEDDING_MODEL_KEY = DEFAULT_COPILOT_PLUS_EMBEDDING_MODEL + "|" + EmbeddingModelProviders.COPILOT_PLUS; -// Default models for free users (imported from DEFAULT_SETTINGS) -export const DEFAULT_FREE_CHAT_MODEL_KEY = DEFAULT_SETTINGS.defaultModelKey; -export const DEFAULT_FREE_EMBEDDING_MODEL_KEY = DEFAULT_SETTINGS.embeddingModelKey; - // ============================================================================ // SELF-HOST MODE VALIDATION // ============================================================================ @@ -152,7 +147,7 @@ export async function checkIsPlusUser( } /** Check if the user is on a plan that qualifies for self-host mode. */ -export async function isSelfHostEligiblePlan(): Promise { +async function isSelfHostEligiblePlan(): Promise { if (!getSettings().plusLicenseKey) { return false; } diff --git a/src/projects/index.ts b/src/projects/index.ts deleted file mode 100644 index a632446a..00000000 --- a/src/projects/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from "./type"; -export * from "./constants"; -export * from "./projectUtils"; -export * from "./state"; -export { ProjectFileManager } from "./ProjectFileManager"; -export { ProjectRegister } from "./projectRegister"; -export { - ensureProjectsMigratedIfNeeded, - migrateProjectsFromSettingsToVault, -} from "./projectMigration"; diff --git a/src/projects/projectPaths.ts b/src/projects/projectPaths.ts index 97e6a3c2..a9786e0d 100644 --- a/src/projects/projectPaths.ts +++ b/src/projects/projectPaths.ts @@ -180,52 +180,3 @@ export async function readFrontmatterFieldFromFile( return ""; } } - -/** - * Read a YAML list field from frontmatter directly from file content. - * Used as fallback when metadataCache is not yet populated. - * Handles the `key:\n- item1\n- item2` YAML list format. - * - * @param vault - Vault instance - * @param file - Target file - * @param key - Frontmatter key to extract - * @returns Array of string values - */ -export async function readFrontmatterListFromFile( - vault: Vault, - file: TFile, - key: string -): Promise { - try { - const raw = await vault.cachedRead(file); - const fmMatch = raw.replace(/^\uFEFF/, "").match(/^---\r?\n([\s\S]*?)\r?\n---/); - if (!fmMatch) return []; - - const lines = fmMatch[1].split(/\r?\n/); - const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - const keyRegex = new RegExp(`^${escaped}:\\s*$`); - - let collecting = false; - const items: string[] = []; - - for (const line of lines) { - if (keyRegex.test(line)) { - collecting = true; - continue; - } - if (collecting) { - // Reason: YAML list items start with "- ", stop collecting on any non-list line - const listMatch = line.match(/^\s*-\s+(.+)$/); - if (listMatch) { - const val = listMatch[1].trim(); - if (val) items.push(val); - } else { - break; - } - } - } - return items; - } catch { - return []; - } -} diff --git a/src/projects/projectUtils.ts b/src/projects/projectUtils.ts index de520b9c..c779c88d 100644 --- a/src/projects/projectUtils.ts +++ b/src/projects/projectUtils.ts @@ -39,11 +39,9 @@ export { getProjectFolderPath, getProjectConfigFilePath, isProjectConfigFile, - getProjectFolderNameFromConfigPath, sanitizeVaultPathSegment, splitUrlsStringToArray, readFrontmatterFieldFromFile, - readFrontmatterListFromFile, } from "@/projects/projectPaths"; /** diff --git a/src/projects/state.ts b/src/projects/state.ts index 9928eb1d..5f1cbd1f 100644 --- a/src/projects/state.ts +++ b/src/projects/state.ts @@ -15,15 +15,6 @@ const projectConfigsAtom = atom((get) => get(projectRecordsAtom).map((r) => r.project) ); -/** - * React hook: get all project file records. - * This is the single entry point for UI components to read projects. - * @returns Array of ProjectFileRecord - */ -export function useProjectRecords(): ProjectFileRecord[] { - return useAtomValue(projectRecordsAtom, { store: projectsStore }); -} - /** * React hook: get all ProjectConfig objects (convenience wrapper). * Uses a derived atom so the array reference is stable across re-renders. diff --git a/src/search/searchUtils.ts b/src/search/searchUtils.ts index a9f30e5f..34913e91 100644 --- a/src/search/searchUtils.ts +++ b/src/search/searchUtils.ts @@ -386,7 +386,7 @@ export function getExtensionPattern(extension: string): string { * Get a list of internal Copilot file paths that must be excluded from searches. * Includes the rolling log file path (e.g., "copilot/copilot-log.md"). */ -export function getInternalExcludePaths(): string[] { +function getInternalExcludePaths(): string[] { return [logFileManager.getLogPath()]; } @@ -394,7 +394,7 @@ export function getInternalExcludePaths(): string[] { * Get a list of internal Copilot folder prefixes that must be excluded from searches. * Any file whose path starts with one of these prefixes is considered internal. */ -export function getInternalExcludeFolderPrefixes(): string[] { +function getInternalExcludeFolderPrefixes(): string[] { const settings = getSettings(); const projectsFolder = (settings.projectsFolder || "").trim(); if (projectsFolder) { @@ -412,7 +412,7 @@ export function getInternalExcludeFolderPrefixes(): string[] { * Checks both exact path matches (log file) and folder prefix matches (projects folder). * @param filePath - Full path to the file in the vault */ -export function isInternalExcludedPath(filePath: string): boolean { +function isInternalExcludedPath(filePath: string): boolean { const excludes = new Set(getInternalExcludePaths()); if (excludes.has(filePath)) return true; diff --git a/src/search/v3/chunks.ts b/src/search/v3/chunks.ts index 7748b3fa..f5799589 100644 --- a/src/search/v3/chunks.ts +++ b/src/search/v3/chunks.ts @@ -30,7 +30,7 @@ export interface ChunkOptions { /** * Default chunking options using CHUNK_SIZE constant */ -export const DEFAULT_CHUNK_OPTIONS: ChunkOptions = { +const DEFAULT_CHUNK_OPTIONS: ChunkOptions = { maxChars: CHUNK_SIZE, overlap: 0, maxBytesTotal: 10 * 1024 * 1024, // 10MB default @@ -643,13 +643,3 @@ export function getSharedChunkManager(app: App): ChunkManager { } return sharedInstance; } - -/** - * Reset the shared instance (for testing or plugin reload) - */ -export function resetSharedChunkManager(): void { - if (sharedInstance) { - sharedInstance.clearCache(); - } - sharedInstance = null; -} diff --git a/src/search/v3/scoring/AdaptiveCutoff.ts b/src/search/v3/scoring/AdaptiveCutoff.ts index 189be52f..9ebd7f1c 100644 --- a/src/search/v3/scoring/AdaptiveCutoff.ts +++ b/src/search/v3/scoring/AdaptiveCutoff.ts @@ -21,7 +21,7 @@ export interface AdaptiveCutoffConfig { /** * Default configuration */ -export const DEFAULT_ADAPTIVE_CUTOFF_CONFIG: AdaptiveCutoffConfig = { +const DEFAULT_ADAPTIVE_CUTOFF_CONFIG: AdaptiveCutoffConfig = { floor: 3, ceiling: 30, relativeThreshold: 0.3, diff --git a/src/search/v3/scoring/FolderBoostCalculator.ts b/src/search/v3/scoring/FolderBoostCalculator.ts index bdec30ec..ebd66dcf 100644 --- a/src/search/v3/scoring/FolderBoostCalculator.ts +++ b/src/search/v3/scoring/FolderBoostCalculator.ts @@ -16,7 +16,7 @@ export interface FolderBoostConfig { /** * Default configuration for folder boost */ -export const DEFAULT_FOLDER_BOOST_CONFIG: FolderBoostConfig = { +const DEFAULT_FOLDER_BOOST_CONFIG: FolderBoostConfig = { enabled: true, minDocsForBoost: 2, maxBoostFactor: 1.15, // Max 15% boost, aligned with graph boost diff --git a/src/search/v3/scoring/GraphBoostCalculator.ts b/src/search/v3/scoring/GraphBoostCalculator.ts index 8fe7614a..a5182dfb 100644 --- a/src/search/v3/scoring/GraphBoostCalculator.ts +++ b/src/search/v3/scoring/GraphBoostCalculator.ts @@ -30,7 +30,7 @@ export interface GraphBoostConfig { /** * Default configuration */ -export const DEFAULT_CONFIG: GraphBoostConfig = { +const DEFAULT_CONFIG: GraphBoostConfig = { enabled: true, maxCandidates: 10, backlinkWeight: 1.0, diff --git a/src/services/obsidianCli/ObsidianCliClient.ts b/src/services/obsidianCli/ObsidianCliClient.ts index ff464668..63bf206d 100644 --- a/src/services/obsidianCli/ObsidianCliClient.ts +++ b/src/services/obsidianCli/ObsidianCliClient.ts @@ -3,7 +3,7 @@ import { Platform } from "obsidian"; /** * Default CLI executable name registered by Obsidian. */ -export const DEFAULT_OBSIDIAN_CLI_BINARY = "obsidian"; +const DEFAULT_OBSIDIAN_CLI_BINARY = "obsidian"; /** * Known desktop fallback paths for Obsidian CLI on macOS installs. @@ -16,12 +16,12 @@ const OBSIDIAN_CLI_MACOS_FALLBACK_BINARIES = [ /** * Default timeout for CLI command execution. */ -export const DEFAULT_OBSIDIAN_CLI_TIMEOUT_MS = 15_000; +const DEFAULT_OBSIDIAN_CLI_TIMEOUT_MS = 15_000; /** * Default maximum process output buffer (1 MB). */ -export const DEFAULT_OBSIDIAN_CLI_MAX_BUFFER_BYTES = 1_048_576; +const DEFAULT_OBSIDIAN_CLI_MAX_BUFFER_BYTES = 1_048_576; /** * Supported primitive parameter value types for CLI serialization. diff --git a/src/settings/SettingsPage.tsx b/src/settings/SettingsPage.tsx index a5173515..813b4675 100644 --- a/src/settings/SettingsPage.tsx +++ b/src/settings/SettingsPage.tsx @@ -7,7 +7,6 @@ import { App, Notice, PluginSettingTab } from "obsidian"; import React from "react"; import { createRoot } from "react-dom/client"; import SettingsMainV2 from "@/settings/v2/SettingsMainV2"; -import { ContainerContext } from "@/settings/v2/components/ContainerContext"; import { AppContext } from "@/context"; export class CopilotSettingTab extends PluginSettingTab { @@ -71,9 +70,7 @@ export class CopilotSettingTab extends PluginSettingTab { sections.render( - - - + ); } diff --git a/src/settings/providerModels.ts b/src/settings/providerModels.ts index cbe5a516..d9ba9a92 100644 --- a/src/settings/providerModels.ts +++ b/src/settings/providerModels.ts @@ -427,7 +427,7 @@ export type ProviderModelAdapters = { * Provider model adapters - converts different provider model data to standard format * These adapters extract model information from API responses and return in a unified format */ -export const providerAdapters: ProviderModelAdapters = { +const providerAdapters: ProviderModelAdapters = { [ChatModelProviders.OPENAI]: (data): StandardModel[] => data.data?.map((model) => ({ id: model.id, @@ -523,7 +523,7 @@ const toStr = (val: unknown, fallback: string): string => ? String(val) : fallback; -export const getDefaultModelAdapter = (provider: SettingKeyProviders) => { +const getDefaultModelAdapter = (provider: SettingKeyProviders) => { return (data: Record): StandardModel[] => { // Try to detect common data structure patterns if (data.data && Array.isArray(data.data)) { @@ -565,7 +565,7 @@ export const getDefaultModelAdapter = (provider: SettingKeyProviders) => { * Get adapter function * Uses provider-specific adapter if available, otherwise falls back to default adapter */ -export const getModelAdapter = (provider: SettingKeyProviders) => { +const getModelAdapter = (provider: SettingKeyProviders) => { return providerAdapters[provider] || getDefaultModelAdapter(provider); }; diff --git a/src/settings/v2/components/ContainerContext.tsx b/src/settings/v2/components/ContainerContext.tsx deleted file mode 100644 index 3f06081e..00000000 --- a/src/settings/v2/components/ContainerContext.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { createContext, useContext } from "react"; - -export const ContainerContext = createContext(null); - -export const useContainerContext = () => { - return useContext(ContainerContext); -}; diff --git a/src/settings/v2/components/ModelEditDialog.tsx b/src/settings/v2/components/ModelEditDialog.tsx index e9eb9693..db6c9ef4 100644 --- a/src/settings/v2/components/ModelEditDialog.tsx +++ b/src/settings/v2/components/ModelEditDialog.tsx @@ -34,7 +34,7 @@ interface ModelEditModalContentProps { onCancel: () => void; } -export const ModelEditModalContent: React.FC = ({ +const ModelEditModalContent: React.FC = ({ model, onUpdate, isEmbeddingModel, diff --git a/src/state/vaultDataAtoms.ts b/src/state/vaultDataAtoms.ts index 499728ce..893c1418 100644 --- a/src/state/vaultDataAtoms.ts +++ b/src/state/vaultDataAtoms.ts @@ -310,67 +310,3 @@ export class VaultDataManager { this.cleanup(); } } - -/** - * Gets the current notes from the atom (non-reactive) - */ -export function getNotes(): TFile[] { - return settingsStore.get(notesAtom); -} - -/** - * Gets the current folders from the atom (non-reactive) - */ -export function getFolders(): TFolder[] { - return settingsStore.get(foldersAtom); -} - -/** - * Gets the current frontmatter tags from the atom (non-reactive) - */ -export function getTagsFrontmatter(): string[] { - return settingsStore.get(tagsFrontmatterAtom); -} - -/** - * Gets all current tags from the atom (non-reactive) - */ -export function getTagsAll(): string[] { - return settingsStore.get(tagsAllAtom); -} - -/** - * Subscribes to notes changes - */ -export function subscribeToNotesChange(callback: (notes: TFile[]) => void): () => void { - return settingsStore.sub(notesAtom, () => { - callback(settingsStore.get(notesAtom)); - }); -} - -/** - * Subscribes to folders changes - */ -export function subscribeToFoldersChange(callback: (folders: TFolder[]) => void): () => void { - return settingsStore.sub(foldersAtom, () => { - callback(settingsStore.get(foldersAtom)); - }); -} - -/** - * Subscribes to frontmatter tags changes - */ -export function subscribeToTagsFrontmatterChange(callback: (tags: string[]) => void): () => void { - return settingsStore.sub(tagsFrontmatterAtom, () => { - callback(settingsStore.get(tagsFrontmatterAtom)); - }); -} - -/** - * Subscribes to all tags changes - */ -export function subscribeToTagsAllChange(callback: (tags: string[]) => void): () => void { - return settingsStore.sub(tagsAllAtom, () => { - callback(settingsStore.get(tagsAllAtom)); - }); -} diff --git a/src/system-prompts/state.ts b/src/system-prompts/state.ts index d9c70ffa..2a44354b 100644 --- a/src/system-prompts/state.ts +++ b/src/system-prompts/state.ts @@ -1,5 +1,5 @@ import { atom, createStore, useAtom } from "jotai"; -import { useAtomValue, useSetAtom } from "jotai"; +import { useAtomValue } from "jotai"; import { UserSystemPrompt } from "@/system-prompts/type"; import { getSettings, updateSetting } from "@/settings/model"; @@ -19,22 +19,6 @@ export function useSystemPrompts(): UserSystemPrompt[] { return useAtomValue(systemPromptsAtom, { store: systemPromptsStore }); } -/** - * React hook to get the selected prompt title - * @returns Currently selected prompt title - */ -export function useSelectedPromptTitle(): string { - return useAtomValue(selectedPromptTitleAtom, { store: systemPromptsStore }); -} - -/** - * React hook to set the selected prompt title - * @returns Setter function for selected prompt title - */ -export function useSetSelectedPromptTitle() { - return useSetAtom(selectedPromptTitleAtom, { store: systemPromptsStore }); -} - /** * React hook to get and set the selected prompt title (useState-like) * Use this when you need both read and write in the same component @@ -121,14 +105,6 @@ export function getDisableBuiltinSystemPrompt(): boolean { return systemPromptsStore.get(disableBuiltinSystemPromptAtom); } -/** - * React hook to use disable builtin system prompt state - * @returns Tuple of [disabled, setDisabled] - */ -export function useDisableBuiltinSystemPrompt() { - return useAtom(disableBuiltinSystemPromptAtom, { store: systemPromptsStore }); -} - /** * Pending file writes to prevent infinite loops when modifying files */ diff --git a/src/system-prompts/systemPromptUtils.ts b/src/system-prompts/systemPromptUtils.ts index 3386c621..08c8e6e0 100644 --- a/src/system-prompts/systemPromptUtils.ts +++ b/src/system-prompts/systemPromptUtils.ts @@ -71,7 +71,7 @@ export function getPromptFilePath(title: string): string { * @param title - The title of the prompt * @param folder - Optional folder path (defaults to current settings folder) */ -export function getPromptFilePathInFolder(title: string, folder?: string): string { +function getPromptFilePathInFolder(title: string, folder?: string): string { const folderPath = folder ? normalizePath(folder) : getSystemPromptsFolder(); return normalizePath(`${folderPath}/${title}.md`); } @@ -203,31 +203,6 @@ export async function ensurePromptFrontmatter(file: TFile, prompt: UserSystemPro } } -/** - * Update the last used timestamp for a system prompt - */ -export async function updatePromptLastUsed(title: string): Promise { - const filePath = getPromptFilePath(title); - const file = app.vault.getAbstractFileByPath(filePath); - if (!(file instanceof TFile)) return; - - // Check if already pending to avoid nested add/remove issues - const alreadyPending = isPendingFileWrite(file.path); - - try { - if (!alreadyPending) { - addPendingFileWrite(file.path); - } - await app.fileManager.processFrontMatter(file, (frontmatter) => { - frontmatter[COPILOT_SYSTEM_PROMPT_LAST_USED] = Date.now(); - }); - } finally { - if (!alreadyPending) { - removePendingFileWrite(file.path); - } - } -} - /** * Generates a unique name for a copied prompt by adding "(copy)" or "(copy N)" suffix */ diff --git a/src/tools/FileParserManager.ts b/src/tools/FileParserManager.ts index 4a5865a7..326faaa1 100644 --- a/src/tools/FileParserManager.ts +++ b/src/tools/FileParserManager.ts @@ -76,7 +76,7 @@ class SelfHostPdfParser { } } -export class MarkdownParser implements FileParser { +class MarkdownParser implements FileParser { supportedExtensions = ["md", "base"]; async parseFile(file: TFile, vault: Vault): Promise { @@ -84,7 +84,7 @@ export class MarkdownParser implements FileParser { } } -export class PDFParser implements FileParser { +class PDFParser implements FileParser { supportedExtensions = ["pdf"]; private brevilabsClient: BrevilabsClient; private pdfCache: PDFCache; @@ -147,7 +147,7 @@ export class PDFParser implements FileParser { } } -export class CanvasParser implements FileParser { +class CanvasParser implements FileParser { supportedExtensions = ["canvas"]; async parseFile(file: TFile, vault: Vault): Promise { @@ -173,7 +173,7 @@ export class CanvasParser implements FileParser { * Reason: The static method needs these extensions at UI layer (before any real API client exists), * so we can't safely construct Docs4LLMParser just to read a property. */ -export const DOCS4LLM_SUPPORTED_EXTENSIONS: readonly string[] = [ +const DOCS4LLM_SUPPORTED_EXTENSIONS: readonly string[] = [ // Base types "pdf", diff --git a/src/tools/NoteTools.ts b/src/tools/NoteTools.ts index 29891653..f2d0bcef 100644 --- a/src/tools/NoteTools.ts +++ b/src/tools/NoteTools.ts @@ -467,4 +467,4 @@ const readNoteTool = createLangChainTool({ }, }); -export { readNoteSchema, readNoteTool }; +export { readNoteTool }; diff --git a/src/tools/TagTools.ts b/src/tools/TagTools.ts index ae01147c..79deaf9a 100644 --- a/src/tools/TagTools.ts +++ b/src/tools/TagTools.ts @@ -11,7 +11,7 @@ type MetadataCacheWithTags = MetadataCache & { getFrontmatterTags?: () => Record | null; }; -export const TagListToolSchema = z +const TagListToolSchema = z .object({ includeInline: z .boolean() @@ -265,4 +265,4 @@ export const createGetTagListTool = () => }, }); -export { collectTagEntries, enforceSizeLimit }; +export { enforceSizeLimit }; diff --git a/src/tools/createLangChainTool.ts b/src/tools/createLangChainTool.ts index d861e356..e4eb6658 100644 --- a/src/tools/createLangChainTool.ts +++ b/src/tools/createLangChainTool.ts @@ -9,7 +9,7 @@ import { z } from "zod"; /** * Options for creating a LangChain tool */ -export interface CreateToolOptions { +interface CreateToolOptions { name: string; description: string; schema: TSchema; @@ -51,58 +51,3 @@ export function createLangChainTool( } ); } - -/** - * Common schema types for reuse across tools - */ -export const CommonSchemas = { - emptyParams: z.object({}), - stringParam: (description: string) => z.string().describe(description), - numberParam: (description: string) => z.number().describe(description), - booleanParam: (description: string) => z.boolean().describe(description), - optionalString: (description: string) => z.string().optional().describe(description), - nonEmptyString: (description: string) => z.string().min(1).describe(description), - url: (description: string) => z.string().url().describe(description), - email: (description: string) => z.string().email().describe(description), -} as const; - -/** - * Extract description from a Zod schema field, handling wrapped types. - */ -function getZodDescription(schema: z.ZodType): string { - // Handle optional/nullable/default wrappers - if ( - schema instanceof z.ZodOptional || - schema instanceof z.ZodNullable || - schema instanceof z.ZodDefault - ) { - return getZodDescription(schema._def.innerType as z.ZodType); - } - - // @ts-ignore - accessing private _def property - return schema._def.description || ""; -} - -/** - * Extract parameter descriptions from Zod schema for tool description generation. - * Used by chain runners to generate XML tool format prompts. - */ -export function extractParametersFromZod(schema: z.ZodType): Record { - const descriptions: Record = {}; - - if (schema instanceof z.ZodObject) { - const shape = schema.shape as Record; - for (const [key, value] of Object.entries(shape)) { - const zodField = value; - descriptions[key] = getZodDescription(zodField) || "No description"; - } - } else if (schema instanceof z.ZodVoid) { - // No parameters for void schema - return {}; - } else if (schema instanceof z.ZodUnion || schema instanceof z.ZodDiscriminatedUnion) { - // For unions, we could extract common fields or return a special description - descriptions._union = "Multiple parameter formats supported"; - } - - return descriptions; -} diff --git a/src/types/message.ts b/src/types/message.ts index 6a447399..1d694c93 100644 --- a/src/types/message.ts +++ b/src/types/message.ts @@ -44,15 +44,6 @@ export interface WebSelectedTextContext extends BaseSelectedTextContext { */ export type SelectedTextContext = NoteSelectedTextContext | WebSelectedTextContext; -/** - * Type guard for note selected text context - */ -export function isNoteSelectedTextContext( - ctx: SelectedTextContext -): ctx is NoteSelectedTextContext { - return ctx.sourceType === "note"; -} - /** * Type guard for web selected text context */ diff --git a/src/utils.ts b/src/utils.ts index 407a1bdb..aae93269 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -15,11 +15,9 @@ import { ProviderMetadata, SettingKeyProviders, TEXT_READABLE_EXTENSIONS, - USER_SENDER, } from "@/constants"; import { logInfo, logWarn } from "@/logger"; import { CopilotSettings } from "@/settings/model"; -import { ChatMessage } from "@/types/message"; import { BaseChatModel } from "@langchain/core/language_models/chat_models"; import { MemoryVariables } from "@langchain/core/memory"; import { RunnableSequence } from "@langchain/core/runnables"; @@ -57,7 +55,7 @@ interface APIError extends Error { } // Error message constants -export const ERROR_MESSAGES = { +const ERROR_MESSAGES = { INVALID_LICENSE_KEY_USER: "Invalid Copilot Plus license key. Please check your license key in settings.", UNKNOWN_ERROR: "An unknown error occurred", @@ -65,13 +63,13 @@ export const ERROR_MESSAGES = { } as const; // Error handling utilities -export interface ErrorDetail { +interface ErrorDetail { status?: number; message?: string; reason?: string; } -export function extractErrorDetail(error: unknown): ErrorDetail { +function extractErrorDetail(error: unknown): ErrorDetail { const err = error as Record | null | undefined; const errorDetail: ErrorDetail = (err?.detail as ErrorDetail) || {}; return { @@ -81,7 +79,7 @@ export function extractErrorDetail(error: unknown): ErrorDetail { }; } -export function isLicenseKeyError(error: unknown): boolean { +function isLicenseKeyError(error: unknown): boolean { const errorDetail = extractErrorDetail(error); const err = error as Record | null | undefined; const message = err?.message as string | undefined; @@ -104,10 +102,6 @@ export function getApiErrorMessage(error: unknown): string { ); } -export const getModelNameFromKey = (modelKey: string): string => { - return modelKey.split("|")[0]; -}; - export const isFolderMatch = (fileFullpath: string, inputPath: string): boolean => { const fileSegments = fileFullpath.split("/").map((segment) => segment.toLowerCase()); return fileSegments.includes(inputPath.toLowerCase()); @@ -160,7 +154,7 @@ export function stripHash(tag: string): string { /** * Options for {@link stripFrontmatter}. */ -export interface StripFrontmatterOptions { +interface StripFrontmatterOptions { /** * When true (default), trims leading whitespace after the frontmatter block. * When false, preserves leading whitespace from the body, but still removes @@ -260,30 +254,15 @@ export function getNotesFromTags(vault: Vault, tags: string[], noteFiles?: TFile return filesWithTag; } -// TODO: Chain type conversion still needed for chain runner selection -// This function is still used but the underlying chain infrastructure is deprecated -export const stringToChainType = (chain: string): ChainType => { - switch (chain) { - case "llm_chain": - return ChainType.LLM_CHAIN; - case "vault_qa": - return ChainType.VAULT_QA_CHAIN; - case "copilot_plus": - return ChainType.COPILOT_PLUS_CHAIN; - default: - throw new Error(`Unknown chain type: ${chain}`); - } -}; - // TODO: These chain validation functions are deprecated // Remove after confirming chainManager no longer uses them -export const isLLMChain = (chain: RunnableSequence): chain is RunnableSequence => { +const isLLMChain = (chain: RunnableSequence): chain is RunnableSequence => { const c = chain as unknown as Record; const last = c.last as Record | undefined; return Boolean(last?.modelName || last?.model); }; -export const isRetrievalQAChain = (chain: BaseChain): chain is RetrievalQAChain => { +const isRetrievalQAChain = (chain: BaseChain): chain is RetrievalQAChain => { const c = chain as unknown as Record; const last = c.last as Record | undefined; return last?.retriever !== undefined; @@ -293,26 +272,6 @@ export const isSupportedChain = (chain: RunnableSequence): chain is RunnableSequ return isLLMChain(chain) || isRetrievalQAChain(chain); }; -// Returns the last N messages from the chat history, -// last one being the newest ai message -export const getChatContext = (chatHistory: ChatMessage[], contextSize: number) => { - if (chatHistory.length === 0) { - return []; - } - const lastAiMessageIndex = chatHistory - .slice() - .reverse() - .findIndex((msg) => msg.sender !== USER_SENDER); - if (lastAiMessageIndex === -1) { - // No ai messages found, return an empty array - return []; - } - - const lastIndex = chatHistory.length - 1 - lastAiMessageIndex; - const startIndex = Math.max(0, lastIndex - contextSize + 1); - return chatHistory.slice(startIndex, lastIndex + 1); -}; - export interface FormattedDateTime { fileName: string; display: string; @@ -379,9 +338,6 @@ export function stringToFormattedDateTime(timestamp: string): FormattedDateTime }; } -// Re-export for backward compatibility (constants now live in @/constants) -export { ALLOWED_NOTE_CONTEXT_EXTENSIONS, TEXT_READABLE_EXTENSIONS }; - /** * Check if a file has a text-readable extension (md, canvas, base). */ @@ -439,23 +395,6 @@ export function isAllowedFileForChainContext(file: TFile | null, chainType: Chai return isPlusChain(chainType); } -export async function getAllNotesContent(vault: Vault): Promise { - const vaultNotes: string[] = []; - - const markdownFiles = vault.getMarkdownFiles(); - - for (const file of markdownFiles) { - const fileContent = await vault.cachedRead(file); - // Import is not available at the top level due to circular dependency - const { VAULT_NOTE_TAG } = await import("@/constants"); - vaultNotes.push( - `<${VAULT_NOTE_TAG}>\n${file.path}\n\n${fileContent}\n\n` - ); - } - - return vaultNotes.join("\n\n"); -} - export function areEmbeddingModelsSame( model1: string | undefined, model2: string | undefined @@ -474,54 +413,6 @@ export function areEmbeddingModelsSame( return model1 === model2; } -// Basic prompts -export function sendNotesContentPrompt(notes: { name: string; content: string }[]): string { - const formattedNotes = notes.map((note) => `## ${note.name}\n\n${note.content}`).join("\n\n"); - - return ( - `Please read the notes below and be ready to answer questions about them. ` + - `If there's no information about a certain topic, just say the note ` + - `does not mention it. ` + - `The content of the notes is between "/***/":\n\n/***/\n\n${formattedNotes}\n\n/***/\n\n` + - `Please reply with the following word for word:` + - `"OK I've read these notes. ` + - `Feel free to ask related questions, such as 'give me a summary of these notes in bullet points', 'what key questions do these notes answer', etc. "\n` - ); -} - -function getNoteTitleAndTags(noteWithTag: { - name: string; - content: string; - tags?: string[]; -}): string { - return ( - `[[${noteWithTag.name}]]` + - (noteWithTag.tags && noteWithTag.tags.length > 0 ? `\ntags: ${noteWithTag.tags.join(",")}` : "") - ); -} - -function getChatContextStr(chatNoteContextPath: string, chatNoteContextTags: string[]): string { - const pathStr = chatNoteContextPath ? `\nChat context by path: ${chatNoteContextPath}` : ""; - const tagsStr = - chatNoteContextTags?.length > 0 - ? `\nChat context by tags: ${chatNoteContextTags.join(",")}` - : ""; - return pathStr + tagsStr; -} - -export function getSendChatContextNotesPrompt( - notes: { name: string; content: string }[], - chatNoteContextPath: string, - chatNoteContextTags: string[] -): string { - const noteTitles = notes.map((note) => getNoteTitleAndTags(note)).join("\n\n"); - return ( - `Please read the notes below and be ready to answer questions about them. ` + - getChatContextStr(chatNoteContextPath, chatNoteContextTags) + - `\n\n${noteTitles}` - ); -} - export interface ChatHistoryEntry { role: "user" | "assistant"; content: string; @@ -642,16 +533,11 @@ export function extractTemplateNoteFiles(query: string, vault: Vault): TFile[] { } // Helper function to check if a note title is unique in the vault -export function isNoteTitleUnique(title: string, vault: Vault): boolean { +function isNoteTitleUnique(title: string, vault: Vault): boolean { const files = vault.getMarkdownFiles(); return files.filter((f) => f.basename === title).length === 1; } -// Helper function to determine if we should show the full path for a file -export function shouldShowPath(file: TFile): boolean { - return (file as unknown as Record).needsPathDisplay === true; -} - /** * Process the variable name to generate a note path if it's enclosed in double brackets, * otherwise return the variable name as is. @@ -681,12 +567,6 @@ export function extractUniqueTitlesFromDocs(docs: Document[]): string[] { return Array.from(titlesSet); } -export function extractJsonFromCodeBlock(content: string): unknown { - const codeBlockMatch = content.match(/```(?:json)?\s*([\s\S]*?)\s*```/); - const jsonContent = codeBlockMatch ? codeBlockMatch[1].trim() : content.trim(); - return JSON.parse(jsonContent); -} - const YOUTUBE_URL_REGEX = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:watch\?v=|shorts\/)|youtu\.be\/)([^\s&]+)/; @@ -778,14 +658,6 @@ export function isTwitterUrl(url: string): boolean { } } -/** - * Extract first YouTube URL from text (legacy function for backward compatibility) - */ -export function extractYoutubeUrl(text: string): string | null { - const match = text.match(YOUTUBE_URL_REGEX); - return match ? match[0] : null; -} - /** * Extract all YouTube URLs from text (legacy function for backward compatibility) */ @@ -975,14 +847,6 @@ export function getProviderLabel(provider: string, model?: CustomModel): string return baseLabel + (model?.believerExclusive && baseLabel === "Copilot Plus" ? "(Believer)" : ""); } -export function getProviderHost(provider: string): string { - return ProviderInfo[provider as Provider]?.host || ""; -} - -export function getProviderKeyManagementURL(provider: string): string { - return ProviderInfo[provider as Provider]?.keyManagementURL || ""; -} - /** * Cleans a message by removing Think blocks, Action blocks (writeFile), tool call markers, * and agent reasoning blocks for copying to clipboard or inserting at cursor. @@ -1167,7 +1031,7 @@ export function isOSeriesModel(model: BaseChatModel | string): boolean { return modelName.startsWith("o1") || modelName.startsWith("o3") || modelName.startsWith("o4"); } -export function isGPT5Model(model: BaseChatModel | string): boolean { +function isGPT5Model(model: BaseChatModel | string): boolean { if (typeof model === "string") { return model.startsWith("gpt-5"); } @@ -1184,7 +1048,7 @@ export function isGPT5Model(model: BaseChatModel | string): boolean { * @param model - Model instance or model name string. * @returns True when the model name indicates a Codex model. */ -export function isCodexModel(model: BaseChatModel | string): boolean { +function isCodexModel(model: BaseChatModel | string): boolean { const m = model as unknown as Record; const modelName: string = typeof model === "string" ? model : (m.modelName as string) || (m.model as string) || ""; diff --git a/src/utils/chatHistoryUtils.ts b/src/utils/chatHistoryUtils.ts index bb282543..b817b49d 100644 --- a/src/utils/chatHistoryUtils.ts +++ b/src/utils/chatHistoryUtils.ts @@ -12,7 +12,7 @@ import { App, TFile } from "obsidian"; * @param basename - File basename to check * @returns true if the basename starts with a known project prefix */ -export function hasKnownProjectPrefix(basename: string): boolean { +function hasKnownProjectPrefix(basename: string): boolean { const records = getCachedProjectRecords(); // Reason: check precise prefix matching against known cached project IDs first. @@ -39,7 +39,7 @@ function coerceProjectId(projectId: unknown): string | undefined { * Read the projectId from a chat file's frontmatter. * Tries metadataCache first, falls back to adapter read for hidden-directory files. */ -export async function readChatFileProjectId(app: App, file: TFile): Promise { +async function readChatFileProjectId(app: App, file: TFile): Promise { const fm = app.metadataCache.getFileCache(file)?.frontmatter; let projectId: unknown = fm?.projectId; @@ -209,15 +209,6 @@ export function extractChatLastAccessedAtMs(file: TFile): number | null { return null; } -/** - * Extract chat last accessed date from a file. - * Uses extractChatLastAccessedAtMs and returns a Date when available, null otherwise. - */ -export function extractChatLastAccessedAt(file: TFile): Date | null { - const lastAccessedAtMs = extractChatLastAccessedAtMs(file); - return lastAccessedAtMs ? new Date(lastAccessedAtMs) : null; -} - /** * Get formatted display text for a chat file (title + formatted date). * Used in chat history modals and similar UI components. diff --git a/src/utils/markdownPreprocess.ts b/src/utils/markdownPreprocess.ts index 25477d53..78d4f381 100644 --- a/src/utils/markdownPreprocess.ts +++ b/src/utils/markdownPreprocess.ts @@ -11,7 +11,7 @@ * Reason: LLMs typically output LaTeX using `\[` / `\(` delimiters, * but Obsidian's MarkdownRenderer only recognizes `$` / `$$` delimiters. */ -export function normalizeLatexDelimiters(content: string): string { +function normalizeLatexDelimiters(content: string): string { // Reason: Split on fenced code blocks and inline code so we never // rewrite LaTeX-like delimiters inside code spans/blocks. const parts = content.split(/(```[\s\S]*?```|`[^`]*`)/g); @@ -35,7 +35,7 @@ export function normalizeLatexDelimiters(content: string): string { * Converts ```dataview to ```text and ```dataviewjs to ```javascript * so they display as static code examples instead of executing queries. */ -export function escapeDataviewCodeBlocks(text: string): string { +function escapeDataviewCodeBlocks(text: string): string { text = text.replace(/```dataview(\s*(?:\n|$))/g, "```text$1"); text = text.replace(/```dataviewjs(\s*(?:\n|$))/g, "```javascript$1"); return text; @@ -46,7 +46,7 @@ export function escapeDataviewCodeBlocks(text: string): string { * Converts ```tasks to ```text so they display as static code examples * instead of executing task queries. */ -export function escapeTasksCodeBlocks(text: string): string { +function escapeTasksCodeBlocks(text: string): string { return text.replace(/```tasks(\s*(?:\n|$))/g, "```text$1"); } diff --git a/src/utils/modelUtils.ts b/src/utils/modelUtils.ts index cdb60a26..17f1c57e 100644 --- a/src/utils/modelUtils.ts +++ b/src/utils/modelUtils.ts @@ -7,24 +7,6 @@ import { import { getSettings } from "@/settings/model"; import { CustomModel } from "@/aiParams"; -/** - * Check if a provider requires an API key. - * Local providers (OLLAMA, LM_STUDIO, OPENAI_FORMAT) don't require API keys. - * - * @param provider - The provider to check - * @returns true if the provider requires an API key, false for local providers - * - * @example - * if (providerRequiresApiKey(model.provider)) { - * // This is a cloud provider, check for API key - * } else { - * // This is a local provider, no API key needed - * } - */ -export function providerRequiresApiKey(provider: string): provider is SettingKeyProviders { - return provider in ProviderSettingsKeyMap; -} - /** * Get API key for a provider, with model-specific key taking precedence over global settings. * diff --git a/src/utils/recentUsageManager.ts b/src/utils/recentUsageManager.ts index 477c83eb..d8e73d1b 100644 --- a/src/utils/recentUsageManager.ts +++ b/src/utils/recentUsageManager.ts @@ -73,7 +73,7 @@ function normalizeTimestampMs(value: unknown): number | null { * - `name`: ascending by `name` (using default locale comparison via Intl.Collator) * - `manual`: ascending by `manualOrder` (falls back to `name` when unavailable) */ -export function createSortComparator( +function createSortComparator( strategy: SortStrategy, getters: RecentUsageSortGetters ): (a: T, b: T) => number { diff --git a/src/utils/toolResultUtils.ts b/src/utils/toolResultUtils.ts index 03655030..4bb2d139 100644 --- a/src/utils/toolResultUtils.ts +++ b/src/utils/toolResultUtils.ts @@ -2,7 +2,7 @@ * Utility functions for handling tool results */ -export const DEFAULT_TOOL_RESULT_MAX_LENGTH = 10000; // Default max length for tool results in chat memory +const DEFAULT_TOOL_RESULT_MAX_LENGTH = 10000; // Default max length for tool results in chat memory /** * Get the configured max length for tool results @@ -73,7 +73,7 @@ export function processToolResults( * @param errorMessage - The error message to wrap * @returns Formatted error string with errorChunk tags */ -export function wrapErrorChunk(errorMessage: string): string { +function wrapErrorChunk(errorMessage: string): string { return `${errorMessage}`; }