diff --git a/docs/.cfignore b/docs/.cfignore new file mode 100644 index 0000000..72c7823 --- /dev/null +++ b/docs/.cfignore @@ -0,0 +1,2 @@ +.next/cache/ +node_modules/ \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 80c0435..f273b8e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,3 @@ -

AkiraDocs

@@ -36,6 +35,33 @@ AkiraDocs is a modern documentation platform that combines the power of AI with a Notion-like editing experience. Create, translate, and optimize your documentation automatically while maintaining complete control over the content. Perfect for teams who want to focus on their ideas rather than the complexities of documentation management. +## πŸ“š WebRAG Documentation Search + +AkiraDocs implements a fully client-side RAG (Retrieval Augmented Generation) system that enables unlimited AI chat interactions without any API costs or rate limits. + +### How it Works + +1. **Offline Indexing**: Documentation is processed and embedded during build time using GTE-small model +2. **Browser-Based Components**: + - SQLite database (stored in browser) for vector search + - Local embedding model for query processing + - Local LLaMA model for response generation + - All processing happens directly in the user's browser + +### Key Benefits + +- ✨ **No API Costs**: Everything runs locally in the browser +- πŸš€ **Unlimited Chats**: No rate limits or usage restrictions +- πŸ”’ **Privacy-First**: No data leaves the user's device +- ⚑ **Low Latency**: Direct local processing after initial model load + +### Technical Stack + +- Embedding: `sauravpanda/gte-small-onnx` +- LLM: `Llama-3.2-1B-Instruct` +- Storage: `sql.js-httpvfs` for SQLite in browser + + ## ⚑️ Quick Deploy Get started in seconds: diff --git a/docs/package-lock.json b/docs/package-lock.json index 29bbed4..cd20ac1 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,12 +1,12 @@ { "name": "akiradocs", - "version": "1.0.53", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "akiradocs", - "version": "1.0.53", + "version": "1.0.1", "dependencies": { "@ai-sdk/anthropic": "^1.0.1", "@dnd-kit/core": "^6.1.0", @@ -59,11 +59,9 @@ "react-error-boundary": "^4.1.2", "react-markdown": "^9.0.1", "react-syntax-highlighter": "^15.6.1", - "remark-gfm": "^4.0.0", "sharp": "^0.33.5", "sonner": "^1.7.0", "sql.js-httpvfs": "^0.8.12", - "sqlite-vss": "^0.1.2", "styled-components": "^6.1.13", "tailwind-merge": "^2.5.4", "tailwindcss-animate": "^1.0.7" @@ -1135,9 +1133,9 @@ } }, "node_modules/@huggingface/jinja": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", - "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.3.2.tgz", + "integrity": "sha512-F2FvuIc+w1blGsaqJI/OErRbWH6bVJDCBI8Rm5D86yZ2wlwrGERsfIaru7XUv9eYC3DMP3ixDRRtF0h6d8AZcQ==", "license": "MIT", "engines": { "node": ">=18" @@ -1155,87 +1153,6 @@ "sharp": "^0.33.5" } }, - "node_modules/@huggingface/transformers/node_modules/@huggingface/jinja": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.3.2.tgz", - "integrity": "sha512-F2FvuIc+w1blGsaqJI/OErRbWH6bVJDCBI8Rm5D86yZ2wlwrGERsfIaru7XUv9eYC3DMP3ixDRRtF0h6d8AZcQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@huggingface/transformers/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "license": "Apache-2.0" - }, - "node_modules/@huggingface/transformers/node_modules/onnxruntime-common": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.20.1.tgz", - "integrity": "sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==", - "license": "MIT" - }, - "node_modules/@huggingface/transformers/node_modules/onnxruntime-node": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.20.1.tgz", - "integrity": "sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==", - "hasInstallScript": true, - "license": "MIT", - "os": [ - "win32", - "darwin", - "linux" - ], - "dependencies": { - "onnxruntime-common": "1.20.1", - "tar": "^7.0.1" - } - }, - "node_modules/@huggingface/transformers/node_modules/onnxruntime-web": { - "version": "1.21.0-dev.20241205-d27fecd3d3", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20241205-d27fecd3d3.tgz", - "integrity": "sha512-neeC9mv1sFWjUFrTaDl7enufNxbtSSTwR5V2i35ga4yXWS6r1MbpUwWwD1X+VKANujbSG8M5pk/ohRAOm2QhMQ==", - "license": "MIT", - "dependencies": { - "flatbuffers": "^1.12.0", - "guid-typescript": "^1.0.9", - "long": "^5.2.3", - "onnxruntime-common": "1.21.0-dev.20241205-6ed77cc374", - "platform": "^1.3.6", - "protobufjs": "^7.2.4" - } - }, - "node_modules/@huggingface/transformers/node_modules/onnxruntime-web/node_modules/onnxruntime-common": { - "version": "1.21.0-dev.20241205-6ed77cc374", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0-dev.20241205-6ed77cc374.tgz", - "integrity": "sha512-U4DGq/dZiboIEK0Zv1KUuWJesJ/txUALpWSXwI8kqOCSxe8GrI65xfRFeMbqYFhPVGAWZPsBpT1zo1s4ksrlrg==", - "license": "MIT" - }, - "node_modules/@huggingface/transformers/node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -1844,9 +1761,9 @@ } }, "node_modules/@million/install/node_modules/nanoid": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", - "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", + "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", "funding": [ { "type": "github", @@ -1898,9 +1815,9 @@ } }, "node_modules/@million/lint/node_modules/nanoid": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", - "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", + "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", "funding": [ { "type": "github", @@ -4163,6 +4080,56 @@ "onnxruntime-node": "1.14.0" } }, + "node_modules/@xenova/transformers/node_modules/@huggingface/jinja": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", + "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@xenova/transformers/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, + "node_modules/@xenova/transformers/node_modules/onnxruntime-common": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", + "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==", + "license": "MIT" + }, + "node_modules/@xenova/transformers/node_modules/onnxruntime-node": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", + "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", + "license": "MIT", + "optional": true, + "os": [ + "win32", + "darwin", + "linux" + ], + "dependencies": { + "onnxruntime-common": "~1.14.0" + } + }, + "node_modules/@xenova/transformers/node_modules/onnxruntime-web": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", + "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", + "license": "MIT", + "dependencies": { + "flatbuffers": "^1.12.0", + "guid-typescript": "^1.0.9", + "long": "^4.0.0", + "onnx-proto": "^4.0.4", + "onnxruntime-common": "~1.14.0", + "platform": "^1.3.6" + } + }, "node_modules/@xenova/transformers/node_modules/sharp": { "version": "0.32.6", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", @@ -4186,31 +4153,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@xenova/transformers/node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/@xenova/transformers/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/@xstate/fsm": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.6.5.tgz", @@ -5095,10 +5037,13 @@ } }, "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/ci-info": { "version": "4.1.0", @@ -6678,7 +6623,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -7247,7 +7191,6 @@ "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==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -7335,7 +7278,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "license": "MIT", "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", @@ -7352,7 +7294,6 @@ "version": "2.3.10", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -7360,14 +7301,12 @@ "node_modules/hastscript/node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "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==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7377,7 +7316,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -7390,7 +7328,6 @@ "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==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7415,7 +7352,6 @@ "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -7423,8 +7359,7 @@ "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" + "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==" }, "node_modules/hono": { "version": "4.6.11", @@ -8353,9 +8288,9 @@ } }, "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "license": "Apache-2.0" }, "node_modules/longest-streak": { @@ -8382,7 +8317,6 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "license": "MIT", "dependencies": { "fault": "^1.0.0", "highlight.js": "~10.7.0" @@ -8449,44 +8383,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.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/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", @@ -8510,18 +8406,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm": { + "node_modules/mdast-util-mdx": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "dependencies": { "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" }, "funding": { @@ -8529,47 +8422,55 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-autolink-literal": { + "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.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-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "license": "MIT", + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "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", - "micromark-util-normalize-identifier": "^2.0.0" + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", + "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" }, @@ -8578,119 +8479,13 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", + "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", - "devlop": "^1.0.0", - "markdown-table": "^3.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-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", @@ -8824,127 +8619,6 @@ "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/micromark-extension-mdx-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", @@ -9673,16 +9347,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9997,41 +9670,80 @@ "protobufjs": "^6.8.8" } }, + "node_modules/onnx-proto/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, + "node_modules/onnx-proto/node_modules/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/onnxruntime-common": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", - "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.20.1.tgz", + "integrity": "sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==", "license": "MIT" }, "node_modules/onnxruntime-node": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", - "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.20.1.tgz", + "integrity": "sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==", + "hasInstallScript": true, "license": "MIT", - "optional": true, "os": [ "win32", "darwin", "linux" ], "dependencies": { - "onnxruntime-common": "~1.14.0" + "onnxruntime-common": "1.20.1", + "tar": "^7.0.1" } }, "node_modules/onnxruntime-web": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", - "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", + "version": "1.21.0-dev.20241205-d27fecd3d3", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20241205-d27fecd3d3.tgz", + "integrity": "sha512-neeC9mv1sFWjUFrTaDl7enufNxbtSSTwR5V2i35ga4yXWS6r1MbpUwWwD1X+VKANujbSG8M5pk/ohRAOm2QhMQ==", "license": "MIT", "dependencies": { "flatbuffers": "^1.12.0", "guid-typescript": "^1.0.9", - "long": "^4.0.0", - "onnx-proto": "^4.0.4", - "onnxruntime-common": "~1.14.0", - "platform": "^1.3.6" + "long": "^5.2.3", + "onnxruntime-common": "1.21.0-dev.20241205-6ed77cc374", + "platform": "^1.3.6", + "protobufjs": "^7.2.4" } }, + "node_modules/onnxruntime-web/node_modules/onnxruntime-common": { + "version": "1.21.0-dev.20241205-6ed77cc374", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0-dev.20241205-6ed77cc374.tgz", + "integrity": "sha512-U4DGq/dZiboIEK0Zv1KUuWJesJ/txUALpWSXwI8kqOCSxe8GrI65xfRFeMbqYFhPVGAWZPsBpT1zo1s4ksrlrg==", + "license": "MIT" + }, "node_modules/openai": { "version": "4.76.0", "resolved": "https://registry.npmjs.org/openai/-/openai-4.76.0.tgz", @@ -10460,6 +10172,40 @@ "node": ">=10" } }, + "node_modules/prebuild-install/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10488,7 +10234,6 @@ "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -10520,9 +10265,9 @@ "license": "ISC" }, "node_modules/protobufjs": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -10536,13 +10281,11 @@ "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", "@types/node": ">=13.7.0", - "long": "^4.0.0" + "long": "^5.0.0" }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "engines": { + "node": ">=12.0.0" } }, "node_modules/pump": { @@ -10783,7 +10526,6 @@ "version": "15.6.1", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz", "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "highlight.js": "^10.4.1", @@ -10951,7 +10693,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "license": "MIT", "dependencies": { "hastscript": "^6.0.0", "parse-entities": "^2.0.0", @@ -10966,7 +10707,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10976,7 +10716,6 @@ "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==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10986,7 +10725,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10996,7 +10734,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11006,7 +10743,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -11020,7 +10756,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11030,7 +10765,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11040,7 +10774,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -11058,7 +10791,6 @@ "version": "1.27.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "license": "MIT", "engines": { "node": ">=6" } @@ -11124,24 +10856,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-mdx": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", @@ -11186,21 +10900,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11728,53 +11427,6 @@ "comlink": "^4.3.0" } }, - "node_modules/sqlite-vss": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/sqlite-vss/-/sqlite-vss-0.1.2.tgz", - "integrity": "sha512-MgTz3GLT04ckv1kaesbrsUU6/kcVsA6vGeCS/HO5d/8zKqCuZFCD0QlJaQnS6zwaMyPG++BO/uu40MMrMa0cow==", - "license": "(MIT OR Apache-2.0)", - "optionalDependencies": { - "sqlite-vss-darwin-arm64": "0.1.2", - "sqlite-vss-darwin-x64": "0.1.2", - "sqlite-vss-linux-x64": "0.1.2" - } - }, - "node_modules/sqlite-vss-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/sqlite-vss-darwin-arm64/-/sqlite-vss-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-zyDk9eg33nBABrUC4cqQ7el8KJaRPzsqp8Y/nGZ0CAt7o1PMqLoCOgREorill5MGiZEBmLqxdAgw0O2MFwq4mw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/sqlite-vss-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/sqlite-vss-darwin-x64/-/sqlite-vss-darwin-x64-0.1.2.tgz", - "integrity": "sha512-w+ODOH2dNkyO6UaGclwC0jwNf/FBsKaE53XKJ7dFmpOvlvO0/9sA1stkWXygykRVWwa3UD8ow0qbQpRwdOFyqg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/sqlite-vss-linux-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/sqlite-vss-linux-x64/-/sqlite-vss-linux-x64-0.1.2.tgz", - "integrity": "sha512-y1qktcHAZcfN1nYMcF5os/cCRRyaisaNc2C9I3ceLKLPAqUWIocsOdD5nNK/dIeGPag/QeT2ZItJ6uYWciLiAg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -12341,40 +11993,28 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/tar/node_modules/yallist": { @@ -13327,7 +12967,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", "engines": { "node": ">=0.4" } diff --git a/docs/package.json b/docs/package.json index 6908e7e..2aef1d6 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "akiradocs", - "version": "1.0.53", + "version": "1.0.54", "private": true, "scripts": { "translate": "npm run compile && node scripts/translate.js", @@ -65,11 +65,9 @@ "react-error-boundary": "^4.1.2", "react-markdown": "^9.0.1", "react-syntax-highlighter": "^15.6.1", - "remark-gfm": "^4.0.0", "sharp": "^0.33.5", "sonner": "^1.7.0", "sql.js-httpvfs": "^0.8.12", - "sqlite-vss": "^0.1.2", "styled-components": "^6.1.13", "tailwind-merge": "^2.5.4", "tailwindcss-animate": "^1.0.7" @@ -88,4 +86,4 @@ "ts-node": "^10.9.2", "typescript": "^5.6.3" } -} +} \ No newline at end of file diff --git a/docs/public/context/docs.db b/docs/public/context/docs.db index f7c02a4..f9adc30 100644 Binary files a/docs/public/context/docs.db and b/docs/public/context/docs.db differ diff --git a/docs/public/context/en_docs.txt b/docs/public/context/en_docs.txt index 762054a..6320cf6 100644 --- a/docs/public/context/en_docs.txt +++ b/docs/public/context/en_docs.txt @@ -1,166 +1,35 @@ [Document: docs/introduction.json] -Title: Introduction to AkiraDocs -AkiraDocs is a next-generation documentation platform that combines the power of AI with an intuitive content management system. It's designed to transform your documentation workflow from days to minutes. -Why AkiraDocs? -Documentation is often a challenge for teams: -Developers want to keep using Markdown and Git -Content teams need user-friendly editors -Technical writers struggle with version management -Product managers deal with out-of-sync documentation -Enterprise leaders need better analytics -AkiraDocs solves these challenges by providing a unified platform that brings everyone's workflow together. -Core Benefits -Universal Workflow: Developers keep their Markdown/Git workflow while content teams get a block-based WYSIWYG editor -AI-Powered: Automatic content updates, translations, and optimizations -SEO-Optimized: Documentation that ranks well by default -Multi-Language Support: AI-powered translations with context awareness -Enterprise-Ready: SSO/SAML integration, audit logs, and custom deployment options -Who Is It For? -Developer Documentation -API documentation -SDK guides -Technical specifications -Implementation guides -Product Documentation -User guides -Feature documentation -Release notes -FAQs -Enterprise Documentation -Internal knowledge bases -Process documentation -Compliance documentation -Training materials +Title: Introduction +Akira Docs is a modern documentation platform that combines the power of AI with an intuitive block-based content system. This guide will help you understand the core concepts and features. +Key Features +AI-powered search +Block-based content editing +Responsive design +Customizable themes +Markdown support ------------- [Document: articles/welcome.json] -Title: Welcome to Cloud Code AI: Building the Future of AI-Powered Documentation -Join us on our journey to revolutionizing customer experience with advanced AI documentation tools. -At Cloud Code AI, our mission is to harness the power of artificial intelligence to transform the way developers and organizations operate. Our journey began with the ambitious goal of building an AI DevOps engineer, Kaizen, designed to streamline and automate complex development operations. You can explore Kaizen at [git.new/kaizen](https://git.new/cloudcodeai). -Our Evolution -While our initial focus on creating an AI-driven DevOps engineer laid a strong foundation, we recognized the immense potential in enhancing customer experience through intelligent documentation. This insight led us to pivot and develop an AI-powered documentation tool, Akiradocs. Discover Akiradocs at [git.new/akiradocs](https://git.new/akiradocs). -What We're Building -Our current project, Akiradocs, is an AI-powered documentation tool designed to simplify and enhance the creation, management, and utilization of documentation. By leveraging AI, we aim to provide: -Smart Content Generation: Automatically generate high-quality documentation based on your project details. -AI-Powered Search: Enable intuitive and intelligent search capabilities to help users find the information they need quickly. -Personalized User Experience: Tailor the documentation experience to individual user needs, making information more accessible and actionable. -Seamless Integration: Easily integrate with your existing tools and workflows to ensure a smooth and efficient documentation process. -Future Innovations -We're excited about the future of documentation, and we're working on groundbreaking features: -Automated Documentation Generation: Using advanced AI to automatically create comprehensive documentation from your codebase, ensuring your docs stay in sync with your code. -Documentation Quality Scoring: Implementing an intelligent scoring system that evaluates and helps improve documentation quality, completeness, and clarity. -LLM Knowledge Integration: Developing a revolutionary approach for Large Language Models to learn and understand software systems through documentation, making AI assistance more accurate and context-aware. -Our Vision -At Cloud Code AI, we are committed to improving customer experience by making documentation more accessible, interactive, and intelligent. Our AI-driven approach ensures that both developers and end-users can interact with documentation more efficiently, leading to better product understanding and satisfaction. -Get Started -We invite you to join us on this exciting journey. Whether you're a developer looking for smarter documentation tools or an organization aiming to enhance your customer experience, Cloud Code AI has the solutions you need. Stay tuned for updates, and feel free to reach out to our team for more information. -------------- -[Document: articles/importance_of_documentation.json] -Title: The Critical Importance of Documentation in Modern Software Development -Explore why documentation is crucial for software success, customer experience, and AI development in today's tech landscape. -Having spent years building developer tools, I've witnessed firsthand how documentation can make or break a software project. It's fascinating how often we prioritize shipping features while pushing documentation to "we'll do it later." But here's the thing - that "later" often comes at a much higher cost than we imagine. -The Real Pain of Poor Documentation -I remember joining a startup where tribal knowledge was the norm. What should have been a two-week onboarding turned into months of piecing together how things worked. This isn't just my story - I've heard similar experiences from countless developers. Here's what we're all dealing with: -The Daily Developer Struggle -We spend nearly a third of our time just trying to understand existing code -New team members feel lost and overwhelmed -That quick fix? It takes hours because nobody documented the gotchas -The Customer's Perspective -I've been on both sides of this - as a developer and as a user. When documentation is poor: -Users get frustrated and simply give up -Support teams get flooded with basic questions -Customer success becomes more about firefighting than growth -Users churn because they can't unlock your product's full potential -The Hidden Costs of Poor Documentation -Developer Time and Resources -Engineers spend up to 30% of their time searching for information or trying to understand code -Onboarding new team members takes significantly longer without proper documentation -Technical debt accumulates as tribal knowledge becomes the primary source of information -Customer Experience Impact -Users abandon products due to confusion and frustration -Support tickets increase, raising operational costs -Customer success teams struggle to provide accurate assistance -Higher churn rates due to poor user experience -AI and Machine Learning Challenges -LLMs trained on outdated or incorrect documentation spread misinformation -AI assistants struggle to provide accurate, context-aware help -The gap between code reality and documentation widens as software evolves -Documentation as a Growth Driver -Enhanced Customer Experience -Clear documentation reduces friction in user adoption -Self-service support becomes more effective -Users feel more confident and empowered -Higher customer satisfaction and retention rates -SEO and Brand Authority -Well-documented products rank better in search results -Documentation pages serve as valuable content marketing -Establishes thought leadership in the industry -Builds trust with potential customers -Open Source Success -Quality documentation attracts more contributors -Increases project adoption and community engagement -Makes your project more discoverable -Facilitates collaboration across time zones -The AI Documentation Challenge -Current Problems -AI models learning from outdated or incorrect documentation -Inability to verify the accuracy of AI-generated responses -Disconnect between documentation and actual code implementation -Difficulty in maintaining up-to-date documentation -Future Solutions -AI-powered documentation generation and validation -Real-time documentation updates based on code changes -Automated quality scoring and improvement suggestions -Enhanced search and discovery through AI understanding -Best Practices for Modern Documentation -Structure and Organization -Clear hierarchy and navigation -Consistent formatting and style -Version control and change tracking -Regular audits and updates -Content Quality -Code examples and use cases -Step-by-step tutorials -Troubleshooting guides -API reference documentation -User-Centric Approach -Different documentation levels for various user types -Interactive examples and playgrounds -Feedback mechanisms -Community contribution guidelines -The Business Case for Documentation -ROI Metrics -Reduced support costs -Faster user onboarding -Improved team productivity -Higher customer satisfaction scores -Competitive Advantage -Better market positioning -Increased user trust -Faster product adoption -Strong community engagement -Why We Built Akiradocs -After experiencing these documentation challenges repeatedly, we created Akiradocs as an alternative to existing solutions like Nextra. While Nextra provides a solid foundation for documentation sites, we wanted to go further. With Akiradocs, you get: -AI-Powered Documentation: Not just a static site generator, but an intelligent system that helps you create, maintain, and improve your docs -Real-Time Validation: Catch outdated or incorrect documentation before your users do -Smart Search and Discovery: Help users find exactly what they need, when they need it -Automated Quality Checks: Get suggestions for improving your documentation's clarity and completeness -Simple Migration: Easy transition from Nextra or other documentation platforms -The Future of Documentation -Having worked with various documentation tools and seen their limitations, I'm excited about where we're heading. Imagine documentation that: -Updates itself as your code evolves -Learns from how users interact with it -Provides different levels of detail based on user expertise -Serves as a reliable knowledge source for AI models -Conclusion -Documentation is not just a technical necessity but a strategic asset that impacts every aspect of software success. As AI continues to reshape the technology landscape, the importance of accurate, up-to-date documentation becomes even more critical. Investing in documentation today means building a stronger foundation for tomorrow's success. -Getting Started -I've been through the documentation improvement journey multiple times, and here's what I've learned works best: -1. Start with an honest audit of your current docs -2. Focus on your users' biggest pain points first -3. Build a sustainable documentation culture -4. Use tools like Akiradocs to automate and improve -5. Keep measuring and iterating -Remember, great documentation isn't about perfection - it's about continuous improvement. Start where you are, use the tools available, and keep making it better. Your future self (and your users) will thank you. +Title: Welcome to Akira Doc +Get started with Akira Docs - Next-gen documentation powered by AI +Welcome to Akira Docs, the next-generation documentation platform powered by AI. This template will help you get started with creating your own documentation. +Key Features +Easy to customize +AI-powered search +Block-based content system +Responsive design +Getting Started: Start by customizing this template to match your project's needs! +------------- +[Document: articles/template.json] +Title: Test Blog Post +A test blog post to demonstrate all block types. +Example Heading +This paragraph is part of the test blog post. It demonstrates the paragraph block. +Code example: +console.log('Testing all blocks'); +Item 1 +Item 2 +Item 3 +Important: This is an important callout message. ------------- [Document: articles/ai_integration.json] Title: AI Assistant Integration @@ -197,390 +66,6 @@ ai_assistant: Next Steps Explore our [Advanced AI Features](/advanced-ai-features) guide to learn more about specialized use cases and integration possibilities. ------------- -[Document: docs/seo-and-performance/sitemap-generation.json] -Title: Automatic Sitemap Generation -Learn how AkiraDocs automatically generates and manages your documentation sitemap. -Overview -AkiraDocs automatically generates a sitemap.xml file during the build process, ensuring search engines can efficiently crawl your documentation. -Generated Sitemap Structure -Example Output -Code example: - - - - https://yourdocs.com/ - 2024-11-26 - weekly - 1.0 - - - https://yourdocs.com/docs/getting-started - 2024-11-26 - weekly - 0.8 - - -------------- -[Document: docs/seo-and-performance/robot-txt.json] -Title: Robots.txt Configuration -The robots.txt file is automatically generated during the build process and can be found in the `public` folder of your project. -Default Configuration -Basic robots.txt -Code example: -User-agent: * -Allow: / -Sitemap: https://docs.akiradocs.com/sitemap.xml - -# Private sections -Disallow: /admin/ -Disallow: /private/ -------------- -[Document: docs/internationalization/setup.json] -Title: Setting Up Internationalization -Configure AkiraDocs for multiple languages with AI-powered translation support. -Quick Setup -Basic Configuration -Add language settings to `akiradocs.config.json`: -Code example: -{ - "localization": { - "defaultLocale": "en", - "fallbackLocale": "en", - "locales": [ - { - "code": "en", - "name": "English", - "flag": "οΏ½πŸ‡Έ" - }, - { - "code": "es", - "name": "EspaΓ±ol", - "flag": "πŸ‡ͺπŸ‡Έ" - }, - { - "code": "fr", - "name": "FranΓ§ais", - "flag": "πŸ‡«πŸ‡·" - } - ] - }, - "translation": { - "auto_translate": true, - "provider": "anthropic", - "targetLanguages": ["es", "fr", "de"], - "excludedPaths": ["_meta.json"] - } -} -Directory Structure -Code example: -docs/ -β”œβ”€β”€ _contents/ -β”‚ β”œβ”€β”€ en/ # Source language -β”‚ β”‚ └── docs/ -β”‚ β”œβ”€β”€ es/ # Spanish translation -β”‚ β”‚ └── docs/ -β”‚ └── fr/ # French translation -β”‚ └── docs/ -Configuration Options -Language Settings -`defaultLocale`: Primary content language -`fallbackLocale`: Fallback when translation missing -`locales`: Available language configurations -Translation Settings -`auto_translate`: Enable/disable automatic translation -`provider`: AI translation provider -`targetLanguages`: Languages to translate into -`excludedPaths`: Files to skip during translation -------------- -[Document: docs/internationalization/managing-translation.json] -Title: Managing Translations -Learn how to effectively manage and maintain translated content in AkiraDocs. -Translation Workflow -Automatic Translation -1. Create content in source language -2. Enable auto-translation in config -3. Build/deploy to generate translations -4. Review and refine translations -Manual Translation -1. Create language-specific directories -2. Copy source content -3. Translate manually -4. Update metadata -Content Organization -File Structure -Code example: -_contents/ -β”œβ”€β”€ en/ -β”‚ └── docs/ -β”‚ β”œβ”€β”€ intro.md -β”‚ └── guide.md -β”œβ”€β”€ es/ -β”‚ └── docs/ -β”‚ β”œβ”€β”€ intro.md -β”‚ └── guide.md -└── fr/ - └── docs/ - β”œβ”€β”€ intro.md - └── guide.md -Quality Control -Review Process -1. AI Translation -2. Human Review -3. Technical Verification -4. Publication -Version Control -Track changes across languages -Maintain synchronization -Handle updates efficiently -------------- -[Document: docs/internationalization/ai-translation.json] -Title: AI-Powered Translation -Guide to using AkiraDocs' AI translation capabilities. -Setup -Configuration -Code example: -{ - "translation": { - "auto_translate": true, - "provider": "anthropic", - "model": "claude-3-sonnet-20240229", - "targetLanguages": ["es", "fr", "de"], - "excludedPaths": ["_meta.json"] - } -} -API Setup -Code example: -ANTHROPIC_API_KEY=your_api_key -Features -Automatic Translation -Content translation during build -Context-aware translations -Technical term preservation -Format maintenance -------------- -[Document: docs/installation/troubleshooting.json] -Title: Troubleshooting Guide -Common issues and their solutions when setting up AkiraDocs. -Common Installation Issues -Node.js Version Mismatch -Problem: Error about Node.js version compatibility -Code example: -Error: The engine "node" is incompatible with this module -Solution: -1. Check your Node.js version: -Code example: -node --version -2. Install the correct version (16.x or higher) -3. Use nvm to manage Node.js versions: -Code example: -nvm install 20 -nvm use 20 -Dependencies Installation Failed -Problem: npm install fails with errors -Solution: -1. Clear npm cache: -Code example: -npm cache clean --force -2. Delete node_modules and package-lock.json: -Code example: -rm -rf node_modules package-lock.json -npm install -Build Issues -Build Fails -Problem: `npm run build` fails -Solution: -1. Check for TypeScript errors: -Code example: -npm run type-check -2. Verify environment variables are set correctly -3. Clear next.js cache: -Code example: -rm -rf .next -Static Export Issues -Problem: Static export fails with dynamic routes -Solution: -1. Configure `next.config.js`: -Code example: -module.exports = { - output: 'export', - images: { - unoptimized: true - } -} -Translation Issues -AI Translation Not Working -Problem: Automatic translation fails -Solution: -1. Verify API keys are set correctly -2. Check translation configuration: -Code example: -{ - "translation": { - "auto_translate": true, - "provider": "anthropic", - "targetLanguages": ["es", "fr", "de"] - } -} -Content Issues -Content Not Updating -Problem: Changes to content files not reflecting -Solution: -Content changes are built on build time. If you are using the local development server, you need to restart the server after making changes. -1. Clear the cache: -Code example: -npm run clean -2. Restart the development server -3. Check file permissions -Deployment Issues -Vercel Deployment Failed -Problem: Deployment to Vercel fails -Solution: -1. Check build logs -2. Verify environment variables are set in Vercel dashboard -3. Ensure all dependencies are listed in package.json -Getting Help -If you're still experiencing issues: -1. Check our [GitHub Issues](https://github.com/Cloud-Code-AI/Akiradocs/issues) -2. Join our [Discord Community](https://discord.gg/zvYZukgeH2) -3. Contact [Support](mailto:saurav.panda@akiradocs.ai) -------------- -[Document: docs/installation/setup.json] -Title: Detailed Installation Guide -Complete guide to installing AkiraDocs in different environments. -Prerequisites -Ensure your system meets the [requirements](../getting-started/requirements.md) before proceeding. -Installation Methods -1. Local Development Setup -1. Create New Project -Code example: -npx create-akiradocs@latest my-docs-site -cd my-docs-site -2. Install Dependencies -Dependencies are automatically installed during project creation. If you need to reinstall: -Code example: -npm install -3. Create Environment File -The environment file is created automatically. You can modify it at `.env.local` -4. Start Development Server -Code example: -npm run dev -5. Update AkiraDocs -To update an existing installation to the latest version: -Code example: -npx create-akiradocs@latest update -3. Cloud Platform Deployment -Vercel -1. Fork the repository -2. Connect to Vercel -3. Configure environment variables -4. Deploy -Other Platforms -AWS Amplify (Coming Soon) -Netlify (Coming Soon) -Digital Ocean (Coming Soon) -Custom server (Coming Soon) -Post-Installation Steps -1. Verify Installation -Code example: -npm run build -npm run start -2. Configure Git Integration -Code example: -git remote add origin your-repository-url -3. Setup Content Directory -Code example: -mkdir -p docs/_contents/en -Environment-Specific Configurations -Development -Code example: -NODE_ENV=development -DEBUG=true -Production -Code example: -NODE_ENV=production -DEBUG=false -Testing -Code example: -NODE_ENV=test -TEST_MODE=true -------------- -[Document: docs/installation/configuration.json] -Title: Configuration Guide -Complete guide to configuring your AkiraDocs installation. -Core Configuration -Site Configuration -Edit `akiradocs.config.json`: -Code example: -{ - "url": "https://docs.akiradocs.com", - "site": { - "title": "Your Docs", - "description": "Your documentation description" - }, - "branding": { - "logo": { - "path": "/your_logo.svg", - "width": 120, - "height": 30, - "show": true - }, - "favicon": { - "path": "/favicon.png", - "show": true - } - } -} -Navigation Setup -Code example: -{ - "navigation": { - "header": { - "items": [ - { "label": "Docs", "href": "/docs", "icon": "/docs.svg" }, - { "label": "API", "href": "/api", "icon": "/api.svg" } - ] - } - } -} -Internationalization -Language Configuration -Code example: -{ - "localization": { - "defaultLocale": "en", - "fallbackLocale": "en", - "locales": [ - { - "code": "en", - "name": "English", - "flag": "πŸ‡ΊπŸ‡Έ" - }, - { - "code": "es", - "name": "EspaΓ±ol", - "flag": "πŸ‡ͺπŸ‡Έ" - }, - { - "code": "fr", - "name": "FranΓ§ais", - "flag": "πŸ‡«πŸ‡·" - }, - { - "code": "de", - "name": "Deutsch", - "flag": "πŸ‡©πŸ‡ͺ" - } - ] - }, - "translation": { - "auto_translate": true, - "provider": "anthropic", - "model": "claude-3-sonnet-20240229", - "targetLanguages": ["es", "fr", "de"], - "excludedPaths": ["_meta.json"] - }, -} -------------- [Document: docs/guides/analytics.json] Title: Analytics Integration Learn how to add analytics tracking to your documentation @@ -630,495 +115,14 @@ Code example: } This provides a complete analytics integration that's easy for users to set up and extend as needed. ------------- -[Document: docs/getting-started/requirements.json] -Title: System Requirements -Before installing AkiraDocs, ensure your environment meets the following requirements. -Minimum Requirements -Node.js -Version: 16.x or higher -Recommended: Latest LTS version -System Memory -Minimum: 2GB RAM -Recommended: 4GB RAM or more -Storage -Recommended: 1GB free space -Software Dependencies -Required -Git (latest version recommended) -npm or yarn package manager -Modern web browser (Chrome, Firefox, Safari, Edge) -Optional -Docker (for containerized deployment) -PostgreSQL (for enterprise features) -Development Environment -Supported Operating Systems -macOS (10.15 or later) -Windows 10/11 -Linux (Ubuntu 20.04 or later recommended) -IDE/Editor Support -VS Code (coming soon) -WebStorm (coming soon) -Any text editor with Markdown support -------------- [Document: docs/getting-started/quickstart.json] Title: Quickstart Guide -Get up and running with AkiraDocs in minutes. -Quick Deploy -Option 1: Deploy with Vercel -The fastest way to get started is using Vercel: -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FCloud-Code-AI%2Fakiradocs-template) -Option 2: Using CLI -Create a new project using our CLI: -Code example: -npx create-akiradocs@latest my-docs -Basic Setup Steps -1. Clone the Repository (if not using Quick Deploy) +Follow these steps to start using Akira Docs for your documentation needs. Code example: +bash git clone https://github.com/your-org/akira-docs-template cd akira-docs-template -2. Install Dependencies -Code example: -npm install -# or -yarn install -3. Start Development Server -Code example: -npm run dev -# or -yarn dev -4. Open `http://localhost:3000` in your browser -Initial Configuration -1. Update Site Configuration -Edit `akiradocs.config.json`: -Code example: -{ - "site": { - "title": "Your Docs", - "description": "Your documentation description" - } -} -2. Configure Translation (Optional) -Code example: -{ - "translation": { - "auto_translate": true, - "provider": "anthropic", - "targetLanguages": ["es", "fr", "de"] - } -} -------------- -[Document: docs/getting-started/features.json] -Title: AkiraDocs Features -A comprehensive overview of AkiraDocs' core features and capabilities. -Content Creation & Management -Notion-like Editor: Intuitive block-based interface with real-time preview -Markdown Support: Native Markdown and MDX compatibility -Custom Components: Create and reuse your own content blocks -Internationalization & Translation -Multi-Language Support: Maintain documentation in multiple languages -AI-Powered Translation: Automated, context-aware content translation -Translation Management: Built-in tools for managing localized content -Search & Discovery -AI-Powered Search: Natural language question answering with context awareness -SEO Optimization: Automated SEO tools and optimizations -Smart Indexing: Real-time search index updates -Build & Performance -Static Generation: Optimized build process with asset optimization -Developer Experience: Fast refresh and comprehensive debugging tools -Performance Focus: Built-in best practices for speed and efficiency -Enterprise Features (Coming Soon) -Security & Compliance: SSO, RBAC, and audit logging -Analytics & Insights: Usage tracking and documentation metrics -Team Collaboration: Enterprise-grade collaboration tools -Migration Support (Coming Soon) -Code example: -# Supported platforms for easy migration -βœ“ Nextra -βœ“ GitBook -βœ“ Docusaurus -βœ“ ReadTheDocs -------------- -[Document: docs/editor/overview.json] -Title: Editor Overview -AkiraDocs features a modern, Notion-like editor that combines the simplicity of block-based editing with the power of Markdown. -Editor Interface -Main Components -Toolbar: Quick access to formatting options and block types -Content Area: Block-based editing space -Sidebar: Navigation and document structure -Command Palette: Quick commands (Ctrl/Cmd + P) -Block Structure -Each content element is a block that can be: -Dragged and dropped to reorganize -Converted between different types -Duplicated or deleted -Nested within other blocks -Getting Started -Creating Content -1. Click the '+' button or press '/' to add a new block -2. Choose block type from the popup menu -3. Start typing or add content -Basic Operations -Code example: -/ β†’ Open block menu -⌘/Ctrl + P β†’ Command palette -⌘/Ctrl + / β†’ Show keyboard shortcuts -↑↓ β†’ Navigate between blocks -Block Types -Text Blocks -Paragraphs -Headings (H1-H6) -Lists (Bulleted, Numbered) -Quotes -Callouts -Rich Media -Images -Videos -Embeds -Files -Code blocks -Special Blocks -Tables (Coming Soon) -Dividers -Custom components (Coming Soon) -------------- -[Document: docs/editor/getting-started.json] -Title: Getting Started with the Editor -Learn how to start using the AkiraDocs editor effectively -Quick Start -Getting started with the AkiraDocs editor is straightforward. This guide will walk you through the basic setup and initial usage. -Basic Operations -Click the '+' button to add a new block -Drag blocks to reorder them -Use the toolbar for text formatting -Keyboard Shortcuts -Creating Your First Document -1. Click 'New File' in the sidebar -2. Add a title and description -3. Start adding blocks using the '+' button or '/' command -4. Use drag and drop to organize your content -5. Save your work using the save button -------------- -[Document: docs/editor/features.json] -Title: Editor Features -Detailed overview of AkiraDocs editor capabilities and features. -Block System -Text Formatting -Basic Formatting -Bold, italic, underline -Strikethrough -Highlight -Code inline -Advanced Formatting -Custom colors -Multiple fonts -Text alignment -Indentation -Content Blocks -Rich Text -Code example: -# Heading 1 -## Heading 2 -> Blockquote -- Bullet list -1. Numbered list -Code Blocks -Code example: -// Syntax highlighting -console.log('Hello World'); -Media Blocks -Image upload and embedding -Video embedding -File attachments -Interactive embeds -AI Features -Content Enhancement -Grammar and style suggestions -Content optimization -SEO recommendations -Translation assistance -Smart Formatting -Auto-formatting -Smart lists -Table formatting -Code block language detection -Collaboration Features -Version Control -Git integration -Change history -Rollback capabilities -------------- -[Document: docs/editor/blocks.json] -Title: Block Types -Comprehensive guide to all available block types in the editor -Text Blocks -Paragraph: Basic text content with rich formatting -Heading: Six levels of headers (H1-H6) -List: Ordered and unordered lists -Quote: Blockquotes for citations -Code: Syntax-highlighted code blocks -Media Blocks -Image: Support for images with captions -Video: Embedded video player -Audio: Audio player with controls -File: File attachments and downloads -Interactive Blocks -Button: Clickable buttons with custom actions -Checklist: Interactive task lists -Table: Structured data presentation -------------- -[Document: docs/editor/ai-features.json] -Title: AI Features -Explore the AI-powered capabilities of the AkiraDocs editor -AI Providers -OpenAI: GPT-4 and GPT-3.5 integration -Anthropic: Claude integration -Custom Models: Support for self-hosted models -API Configuration: Flexible provider setup -Content Enhancement -Automatic grammar and style correction -Content summarization -Text expansion and elaboration -Tone adjustment and rewriting -Translation Support -Built-in AI translation capabilities support content localization across multiple languages while maintaining context and technical accuracy. -Configuration -Code example: -// AI Feature Configuration -{ - "aiProviders": { - "openai": { - "apiKey": "your-api-key", - "model": "gpt-4" - }, - "anthropic": { - "apiKey": "your-api-key", - "model": "claude-2" - } - } -} -------------- -[Document: docs/contributing/how-to-contribute.json] -Title: Contributing to AkiraDocs -Guide to contributing to the AkiraDocs open-source project. -Getting Started -Setup Development Environment -Code example: -# Clone repository -git clone https://github.com/Cloud-Code-AI/akiradocs -cd akiradocs - -# Install dependencies npm install - -# Start development server npm run dev -Contribution Guidelines -Types of Contributions -Bug fixes -Feature additions -Documentation improvements -Translation help -Issue reporting -Pull Request Process -1. Fork the repository -2. Create feature branch -3. Make changes -4. Submit pull request -Commit Messages -Code example: -# Format -type(scope): description - -# Examples -feat(editor): add new block type -fix(translation): correct language detection -docs(api): update authentication guide -Development Guidelines -Code Style -Follow existing patterns -Use TypeScript -Add comments -Write tests -Testing -Code example: -# Run tests -npm run test - -# Check types -npm run type-check - -# Lint code -npm run lint -Documentation -Update Docs -1. Edit relevant files -2. Update examples -3. Check links -4. Verify formatting -Create Examples -Clear and concise -Well-documented -Tested -Maintainable -Getting Help -Join [Discord](https://discord.gg/zvYZukgeH2) -Check [Issues](https://github.com/Cloud-Code-AI/akiradocs/issues) -Read [Documentation](https://docs.akiradocs.com) -------------- -[Document: docs/contributing/code-of-conduct.json] -Title: Code of Conduct -Our Pledge -We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. -We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. -Our Standards -Examples of behavior that contributes to a positive environment: -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes -* Focusing on what is best for the overall community -Examples of unacceptable behavior: -* The use of sexualized language or imagery, and sexual attention or advances -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting -Enforcement Responsibilities -Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. -Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement. All complaints will be reviewed and investigated promptly and fairly. -Attribution -This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. -------------- -[Document: docs/content-management/creating-pages.json] -Title: Creating and Organizing Pages -Learn how to create, structure, and organize your documentation pages in AkiraDocs. You can create markdown pages or just use the editor UI. Note in _contents folder, you will only see markdown content created by you. If you use Editor UI, the content will be saved in the compiled folder and will be automatically translated to other languages. -Page Structure -Basic Page Template -Code example: ---- -title: Your Page Title -description: Brief description of the page -author: Your Name -publishDate: 2024-11-26 -modifiedDate: 2024-11-26 -category: Category Name -keywords: - - keyword1 - - keyword2 ---- - -# Main Title - -Content starts here... -Directory Structure -Code example: -folder_name/ -β”œβ”€β”€ _contents/ -β”‚ β”œβ”€β”€ en/ -β”‚ β”‚ β”œβ”€β”€ getting-started/ -β”‚ β”‚ β”œβ”€β”€ guides/ -β”‚ β”‚ └── api/ -You can just create pages for default language (en) and AkiraDocs will automatically translate them to other languages. -Creating New Pages -Method 1: Using the UI -1. Click "New Page" in the sidebar -2. Start adding content -Method 2: Direct File Creation -1. Create a new `.md` file in the appropriate directory -2. Add required frontmatter -3. Write content using Markdown -4. Save and compile -Page Organization -Categories and Tags -Use consistent categories -Apply relevant tags -Organize by topic -Create logical hierarchies -Navigation Structure -This is automatically generated from the folder structure. You can customize it by editing the `_meta.json` file inside compiled folder. -Code example: -{ - "docs": { - "getting-started": { - "title": "Getting Started", - "items": { - "introduction": { - "title": "Introduction", - "path": "/docs/getting-started/introduction" - } - } - } - } -} -------------- -[Document: docs/api-reference/usage-guide.json] -Title: API Documentation Guide -Learn how to generate comprehensive API documentation using AkiraDocs. -Quick Start -Upload API Spec -1. Place your OpenAPI/Swagger spec in: -Code example: -_contents/{language_code}/api/apiSpec.json -2. AkiraDocs automatically generates documentation. -Example API Spec -Code example: -{ - "openapi": "3.0.0", - "info": { - "title": "Sample API", - "version": "1.0.0" - }, - "paths": { - "/users": { - "get": { - "summary": "Get users", - "responses": { - "200": { - "description": "Success" - } - } - } - } - } -} -Generated Documentation -Automatic Features -Interactive API explorer -Code samples in multiple languages -Request/response examples -Authentication documentation -Example Output -Code example: -// Example: Get Users -const response = await fetch('https://api.example.com/users', { - method: 'GET', - headers: { - 'Authorization': 'Bearer YOUR_TOKEN' - } -}); - -const users = await response.json(); -Customization -Theme Options -Code example: -{ - "api": { - "docs": { - "theme": "dark", - "syntaxHighlight": true, - "showExamples": true - } - } -} -Language Selection -Code example: -{ - "api": { - "examples": { - "languages": ["javascript", "python", "curl"] - } - } -} +Warning: Make sure you have Node.js 16 or higher installed on your system. ------------- \ No newline at end of file diff --git a/docs/public/sitemap.xml b/docs/public/sitemap.xml index 7e8d931..14340cc 100644 --- a/docs/public/sitemap.xml +++ b/docs/public/sitemap.xml @@ -1,10 +1,6 @@ - - https://docs.akiradocs.com/manifest - - https://docs.akiradocs.com/fr/docs/introduction @@ -13,92 +9,16 @@ https://docs.akiradocs.com/fr/docs/_meta - - https://docs.akiradocs.com/fr/docs/seo-and-performance/sitemap-generation - - - - https://docs.akiradocs.com/fr/docs/seo-and-performance/robot-txt - - - - https://docs.akiradocs.com/fr/docs/internationalization/setup - - - - https://docs.akiradocs.com/fr/docs/internationalization/managing-translation - - - - https://docs.akiradocs.com/fr/docs/internationalization/ai-translation - - - - https://docs.akiradocs.com/fr/docs/installation/troubleshooting - - - - https://docs.akiradocs.com/fr/docs/installation/setup - - - - https://docs.akiradocs.com/fr/docs/installation/configuration - - - - https://docs.akiradocs.com/fr/docs/guides/analytics - - - - https://docs.akiradocs.com/fr/docs/getting-started/requirements - - https://docs.akiradocs.com/fr/docs/getting-started/quickstart - https://docs.akiradocs.com/fr/docs/getting-started/features - - - - https://docs.akiradocs.com/fr/docs/editor/overview - - - - https://docs.akiradocs.com/fr/docs/editor/getting-started - - - - https://docs.akiradocs.com/fr/docs/editor/features - - - - https://docs.akiradocs.com/fr/docs/editor/blocks - - - - https://docs.akiradocs.com/fr/docs/editor/ai-features - - - - https://docs.akiradocs.com/fr/docs/contributing/how-to-contribute - - - - https://docs.akiradocs.com/fr/docs/contributing/code-of-conduct - - - - https://docs.akiradocs.com/fr/docs/content-management/creating-pages - - - - https://docs.akiradocs.com/fr/docs/api-reference/usage-guide + https://docs.akiradocs.com/fr/articles/welcome - https://docs.akiradocs.com/fr/articles/welcome + https://docs.akiradocs.com/fr/articles/template @@ -121,92 +41,16 @@ https://docs.akiradocs.com/es/docs/_meta - - https://docs.akiradocs.com/es/docs/seo-and-performance/sitemap-generation - - - - https://docs.akiradocs.com/es/docs/seo-and-performance/robot-txt - - - - https://docs.akiradocs.com/es/docs/internationalization/setup - - - - https://docs.akiradocs.com/es/docs/internationalization/managing-translation - - - - https://docs.akiradocs.com/es/docs/internationalization/ai-translation - - - - https://docs.akiradocs.com/es/docs/installation/troubleshooting - - - - https://docs.akiradocs.com/es/docs/installation/setup - - - - https://docs.akiradocs.com/es/docs/installation/configuration - - - - https://docs.akiradocs.com/es/docs/guides/analytics - - - - https://docs.akiradocs.com/es/docs/getting-started/requirements - - https://docs.akiradocs.com/es/docs/getting-started/quickstart - https://docs.akiradocs.com/es/docs/getting-started/features - - - - https://docs.akiradocs.com/es/docs/editor/overview - - - - https://docs.akiradocs.com/es/docs/editor/getting-started - - - - https://docs.akiradocs.com/es/docs/editor/features - - - - https://docs.akiradocs.com/es/docs/editor/blocks - - - - https://docs.akiradocs.com/es/docs/editor/ai-features - - - - https://docs.akiradocs.com/es/docs/contributing/how-to-contribute - - - - https://docs.akiradocs.com/es/docs/contributing/code-of-conduct - - - - https://docs.akiradocs.com/es/docs/content-management/creating-pages - - - - https://docs.akiradocs.com/es/docs/api-reference/usage-guide + https://docs.akiradocs.com/es/articles/welcome - https://docs.akiradocs.com/es/articles/welcome + https://docs.akiradocs.com/es/articles/template @@ -229,132 +73,20 @@ https://docs.akiradocs.com/en/docs/_meta - - https://docs.akiradocs.com/en/docs/seo-and-performance/sitemap-generation - - - - https://docs.akiradocs.com/en/docs/seo-and-performance/robot-txt - - - - https://docs.akiradocs.com/en/docs/seo-and-performance/_meta - - - - https://docs.akiradocs.com/en/docs/internationalization/setup - - - - https://docs.akiradocs.com/en/docs/internationalization/managing-translation - - - - https://docs.akiradocs.com/en/docs/internationalization/ai-translation - - - - https://docs.akiradocs.com/en/docs/internationalization/_meta - - - - https://docs.akiradocs.com/en/docs/installation/troubleshooting - - - - https://docs.akiradocs.com/en/docs/installation/setup - - - - https://docs.akiradocs.com/en/docs/installation/configuration - - - - https://docs.akiradocs.com/en/docs/installation/_meta - - https://docs.akiradocs.com/en/docs/guides/analytics - - https://docs.akiradocs.com/en/docs/guides/_meta - - - - https://docs.akiradocs.com/en/docs/getting-started/requirements - - https://docs.akiradocs.com/en/docs/getting-started/quickstart - - https://docs.akiradocs.com/en/docs/getting-started/features - - - - https://docs.akiradocs.com/en/docs/getting-started/_meta - - - - https://docs.akiradocs.com/en/docs/editor/overview - - - - https://docs.akiradocs.com/en/docs/editor/getting-started - - - - https://docs.akiradocs.com/en/docs/editor/features - - - - https://docs.akiradocs.com/en/docs/editor/blocks - - - - https://docs.akiradocs.com/en/docs/editor/ai-features - - - - https://docs.akiradocs.com/en/docs/editor/_meta - - - - https://docs.akiradocs.com/en/docs/contributing/how-to-contribute - - - - https://docs.akiradocs.com/en/docs/contributing/code-of-conduct - - - - https://docs.akiradocs.com/en/docs/contributing/_meta - - - - https://docs.akiradocs.com/en/docs/content-management/creating-pages - - - - https://docs.akiradocs.com/en/docs/content-management/_meta - - - - https://docs.akiradocs.com/en/docs/api-reference/usage-guide - - - - https://docs.akiradocs.com/en/docs/api-reference/_meta - - https://docs.akiradocs.com/en/articles/welcome - https://docs.akiradocs.com/en/articles/importance_of_documentation + https://docs.akiradocs.com/en/articles/template @@ -377,92 +109,16 @@ https://docs.akiradocs.com/de/docs/_meta - - https://docs.akiradocs.com/de/docs/seo-and-performance/sitemap-generation - - - - https://docs.akiradocs.com/de/docs/seo-and-performance/robot-txt - - - - https://docs.akiradocs.com/de/docs/internationalization/setup - - - - https://docs.akiradocs.com/de/docs/internationalization/managing-translation - - - - https://docs.akiradocs.com/de/docs/internationalization/ai-translation - - - - https://docs.akiradocs.com/de/docs/installation/troubleshooting - - - - https://docs.akiradocs.com/de/docs/installation/setup - - - - https://docs.akiradocs.com/de/docs/installation/configuration - - - - https://docs.akiradocs.com/de/docs/guides/analytics - - - - https://docs.akiradocs.com/de/docs/getting-started/requirements - - https://docs.akiradocs.com/de/docs/getting-started/quickstart - https://docs.akiradocs.com/de/docs/getting-started/features - - - - https://docs.akiradocs.com/de/docs/editor/overview - - - - https://docs.akiradocs.com/de/docs/editor/getting-started - - - - https://docs.akiradocs.com/de/docs/editor/features - - - - https://docs.akiradocs.com/de/docs/editor/blocks - - - - https://docs.akiradocs.com/de/docs/editor/ai-features - - - - https://docs.akiradocs.com/de/docs/contributing/how-to-contribute - - - - https://docs.akiradocs.com/de/docs/contributing/code-of-conduct - - - - https://docs.akiradocs.com/de/docs/content-management/creating-pages - - - - https://docs.akiradocs.com/de/docs/api-reference/usage-guide + https://docs.akiradocs.com/de/articles/welcome - https://docs.akiradocs.com/de/articles/welcome + https://docs.akiradocs.com/de/articles/template diff --git a/docs/src/app/aiSearch/page.tsx b/docs/src/app/aiSearch/page.tsx index a010981..4261df2 100644 --- a/docs/src/app/aiSearch/page.tsx +++ b/docs/src/app/aiSearch/page.tsx @@ -19,7 +19,6 @@ import { getHeaderConfig } from '@/lib/headerConfig' import { Header } from '@/components/layout/Header' import { generateEmbedding } from '@/lib/aisearch/embeddings' import { getDbWorker } from '@/lib/aisearch/dbWorker' -import { ExternalLink } from 'lucide-react' function cosineSimilarity(a: number[], b: number[]): number { if (a.some(isNaN) || b.some(isNaN)) { @@ -36,16 +35,16 @@ function cosineSimilarity(a: number[], b: number[]): number { } export default function Home() { - const [query, setQuery] = useState('') - const [aiResponse, setAiResponse] = useState('') + const [query, setQuery] = useState('') + const [aiResponse, setAiResponse] = useState('') const [loaderText, setLoaderText] = useState('Loading database ...') - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState(null) - const recommendedArticles = getRecommendedArticles() - const searchConfig = getSearchConfig() - const headerConfig = getHeaderConfig() - const config = getAkiradocsConfig() - const [sources, setSources] = useState([]) + const [isLoading, setIsLoading] = useState(false) + const [error, setError] = useState(null) + const recommendedArticles = getRecommendedArticles() + const searchConfig = getSearchConfig() + const headerConfig = getHeaderConfig() + const config = getAkiradocsConfig() + const [sources, setSources] = useState([]) const handleGenerateEmbedding = useCallback(async (text: string) => { try { setIsLoading(true); @@ -61,51 +60,51 @@ export default function Home() { } }, []); - // If AI Search is disabled, show the disabled message - if (!config.navigation.header.items.find((item: any) => item.href === '/aiSearch')?.show) { - return ( -
-
-

AI Search is Disabled

-

- AI Search is currently disabled. To enable this feature, set "aiSearch": true in your configuration file. -

- -
-
- ) - } + // If AI Search is disabled, show the disabled message + if (!config.navigation.header.items.find((item: any) => item.href === '/aiSearch')?.show) { + return ( +
+
+

AI Search is Disabled

+

+ AI Search is currently disabled. To enable this feature, set "aiSearch": true in your configuration file. +

+ +
+
+ ) + } - const extractSources = (response: string): { cleanResponse: string, sources: Source[] } => { - // Split the response into parts - const parts = response.split('Sources:'); - if (parts.length < 2) { - return { cleanResponse: response, sources: [] }; - } + const extractSources = (response: string): { cleanResponse: string, sources: Source[] } => { + // Split the response into parts + const parts = response.split('Sources:'); + if (parts.length < 2) { + return { cleanResponse: response, sources: [] }; + } - const cleanResponse = parts[0].trim(); - const sourcesText = parts[1].trim(); - - // Extract sources from the text - const sources: Source[] = sourcesText - .split('\n') - .filter(line => line.trim().length > 0 && line.includes('.json')) // Only process non-empty lines containing .json - .map(line => ({ - title: line.trim().split('/').pop()?.replace('.json', '') || '', // Get the filename without extension - url: line.trim() - })); - - return { cleanResponse, sources }; - }; - - const handleSearch = async (e: React.FormEvent) => { - e.preventDefault() - setIsLoading(true) - setError(null) - setSources([]) - + const cleanResponse = parts[0].trim(); + const sourcesText = parts[1].trim(); + + // Extract sources from the text + const sources: Source[] = sourcesText + .split('\n') + .filter(line => line.trim().length > 0 && line.includes('.json')) // Only process non-empty lines containing .json + .map(line => ({ + title: line.trim().split('/').pop()?.replace('.json', '') || '', // Get the filename without extension + url: line.trim() + })); + + return { cleanResponse, sources }; + }; + + const handleSearch = async (e: React.FormEvent) => { + e.preventDefault() + setIsLoading(true) + setError(null) + setSources([]) + const startTime = performance.now() try { @@ -168,36 +167,37 @@ export default function Home() { `) .join('\n'); - const engine = await CreateMLCEngine( - "Llama-3.2-1B-Instruct-q4f16_1-MLC", + const engine = await CreateMLCEngine( + "Llama-3.2-1B-Instruct-q4f16_1-MLC", { initProgressCallback: (progress: any) => { console.log(progress) setLoaderText(`Loading the AI model ${Math.round(progress.progress * 100)}% ...`) } }, - { + { context_window_size: 20000, - } - ); + } + ); const engineLoadTime = performance.now() // Track engine load time console.log(`Time taken for engine initialization: ${(engineLoadTime - startTime) / 1000}s`) setLoaderText('Processing information and generating AI response ...') - const messages = [ - { - role: "system", + const messages = [ + { + role: "system", content: `You are a technical documentation assistant for AkiraDocs. Your purpose is to: 1. Provide accurate, helpful answers using ONLY the provided documentation -2. Stay positive and factual based on the documentation provided.` - }, - { - role: "user", +2. Stay positive and factual based on the documentation provided. +3. Make sure the markdown answer is pretty, clean and easy to read.` + }, + { + role: "user", content: ` Please provide a helpful answer which is short and concise to the following question using only the provided documentation. Question: ${query} - + Answer the question using only the provided documentation. Do not make assumptions or add information not in the documentation. @@ -210,119 +210,104 @@ export default function Home() { Ensure the final output is in markdown format. Make sure it pretty and clean. - Sources (if used): + End of the answer, if you used any sources from the documentation, list them in this format: + ------------- + Sources: - (<path>) Here is the documentation, only answer based on this information: ${docsContext} ` - } - ]; + } + ]; // console.log("Messages:", messages) - const chunks = await engine.chat.completions.create({ - messages: messages as ChatCompletionMessageParam[], - stream: true, + const chunks = await engine.chat.completions.create({ + messages: messages as ChatCompletionMessageParam[], + stream: true, stream_options: { include_usage: true }, - max_tokens: 300, - temperature: 0.3, + max_tokens: 500, + temperature: 0.7, top_p: 0.95, frequency_penalty: 0.5, presence_penalty: 0.5, - }); + }); - let aiContent = ""; - for await (const chunk of chunks) { - const newContent = chunk.choices[0]?.delta.content || ""; - aiContent += newContent; + let aiContent = ""; + for await (const chunk of chunks) { + const newContent = chunk.choices[0]?.delta.content || ""; + aiContent += newContent; // Process partial content for streaming const { cleanResponse } = extractSources(aiContent); - setAiResponse(cleanResponse); + setAiResponse(cleanResponse); } // Only extract and set sources after streaming is complete const { sources } = extractSources(aiContent); - setSources(sources); - + setSources(sources); + const endTime = performance.now() // Track total time console.log(`Total time taken for AI search: ${(endTime - startTime) / 1000}s`) } catch (error) { console.error('Search error:', error); setError(error instanceof Error ? error.message : 'An error occurred'); - } finally { + } finally { setIsLoading(false); - } - } - - const handleBack = () => { - setAiResponse('') } + } + + const handleBack = () => { + setAiResponse('') + } + + return ( + <div className="flex flex-col min-h-screen"> + <Header {...headerConfig} currentLocale={`en`} currentType={`aiSearch`}/> + <div className="min-h-screen py-12 px-4 sm:px-6 lg:px-8"> + + <div className="max-w-4xl mx-auto"> + <SearchHeader + logo={searchConfig.logo} + title={searchConfig.title} + description={searchConfig.description} + /> + <div className="flex flex-col sm:flex-row space-y-4 sm:space-y-0 sm:space-x-4 justify-center items-center mb-12"> + <SearchBar + query={query} + onQueryChange={setQuery} + onSubmit={handleSearch} + /> + <LegacyDocsToggle/> + </div> - return ( - <div className="flex flex-col min-h-screen"> - <Header {...headerConfig} currentLocale={`en`} currentType={`aiSearch`}/> - <div className="bg-gradient-to-r from-blue-100 to-purple-100 dark:from-blue-950 dark:to-purple-950 text-gray-800 dark:text-gray-200 py-3 transition-all duration-300 ease-in-out"> - <div className="mx-auto flex items-center justify-center"> - <div className="flex items-center space-x-3"> - <span className="text-sm" aria-hidden="true">⭐</span> - <p className="text-md font-medium"> - Enjoying our AI-powered documentation platform? Support us with a star on{' '} - <Link - href="https://github.com/Cloud-Code-AI/AkiraDocs" - target="_blank" - rel="noopener noreferrer" - className="underline underline-offset-2 hover:text-blue-600 dark:hover:text-blue-400 inline-flex items-center transition-colors duration-200" - > - GitHub <ExternalLink className="h-3 w-3 ml-1" /> - </Link> - </p> - </div> - </div> - </div> - <div className="min-h-screen py-12 px-4 sm:px-6 lg:px-8"> - <div className="max-w-4xl mx-auto"> - <SearchHeader - logo={searchConfig.logo} - title={searchConfig.title} - description={searchConfig.description} - /> - <div className="flex flex-col sm:flex-row space-y-4 sm:space-y-0 sm:space-x-4 justify-center items-center mb-12"> - <SearchBar - query={query} - onQueryChange={setQuery} - onSubmit={handleSearch} - /> - <LegacyDocsToggle/> - </div> - - <AnimatePresence> - {isLoading ? ( - <div className="flex flex-col justify-center items-center space-y-4 py-12"> - <AILoader /> - <p className="text-muted-foreground text-sm animate-pulse"> + <AnimatePresence> + {isLoading ? ( + <div className="flex flex-col justify-center items-center space-y-4 py-12"> + <AILoader /> + <p className="text-muted-foreground text-sm animate-pulse"> {loaderText} - </p> - </div> - ) : error ? ( - <div className="text-center p-4 rounded-lg bg-red-50 text-red-800"> - <p className="text-lg font-medium mb-2">Error</p> - <p>{error}</p> - </div> - ) : aiResponse ? ( - <AIResponse - response={aiResponse} - sources={sources} - onBack={handleBack} - /> - ) : recommendedArticles && ( - <RecommendedArticles articles={recommendedArticles} /> - )} - </AnimatePresence> - </div> + </p> </div> - </div> - ) + ) : error ? ( + <div className="text-center p-4 rounded-lg bg-red-50 text-red-800"> + <p className="text-lg font-medium mb-2">Error</p> + <p>{error}</p> + </div> + ) : aiResponse ? ( + <AIResponse + response={aiResponse} + sources={sources} + onBack={handleBack} + /> + ) : recommendedArticles && ( + <RecommendedArticles articles={recommendedArticles} /> + )} + </AnimatePresence> + </div> + </div> + </div> + ) } diff --git a/docs/src/components/layout/Navigation.tsx b/docs/src/components/layout/Navigation.tsx index 4e9a500..51df40c 100644 --- a/docs/src/components/layout/Navigation.tsx +++ b/docs/src/components/layout/Navigation.tsx @@ -13,9 +13,9 @@ import { ErrorBoundary } from 'react-error-boundary' import { getApiNavigation } from '@/lib/content'; import { useAnalytics } from '@/hooks/useAnalytics'; const buttonStyles = { - base: "w-full justify-start text-left font-normal rounded-lg transition-all px-3 py-2 whitespace-normal", + base: "w-full justify-start text-left font-normal rounded-lg transition-all px-1.5 py-1 whitespace-normal break-words", hover: "hover:bg-accent/40 hover:text-accent-foreground", - active: "bg-gradient-to-r from-accent to-accent/80 text-accent-foreground font-medium shadow-md translate-x-1", + active: "w-full bg-gradient-to-r from-accent to-accent/80 text-accent-foreground font-medium shadow-md translate-x-1 px-1.5 py-1 break-words", state: "data-[state=open]:bg-accent/30", } @@ -33,7 +33,7 @@ export function Navigation({ locale, items }: NavigationProps) { return ( <ErrorBoundary FallbackComponent={ErrorFallback}> - <aside className="w-64 bg-sidebar-background/50 text-sidebar-foreground border-r border-border/40 h-[calc(100vh-4rem)] sticky top-16 backdrop-blur-sm overflow-hidden"> + <aside className="w-[20%] bg-sidebar-background/50 text-sidebar-foreground border-r border-border/40 h-[calc(100vh-4rem)] sticky top-16 backdrop-blur-sm overflow-hidden"> <ScrollArea className="h-full py-6 px-4"> <nav className="space-y-2"> {Object.entries(items) @@ -88,7 +88,7 @@ const NavItem = React.memo(({ locale, item, pathname, depth = 0 }: NavItemProps) <motion.div ref={itemRef} className={cn( - "relative", + "relative mb-1", depth > 0 && "ml-3 border-l border-border/50 pl-3 before:absolute before:left-0 before:top-0 before:bottom-0 before:w-px before:bg-gradient-to-b before:from-border/0 before:via-border/50 before:to-border/0" )} initial={{ opacity: 0, x: -20 }} @@ -103,29 +103,34 @@ const NavItem = React.memo(({ locale, item, pathname, depth = 0 }: NavItemProps) buttonStyles.state, isActive && buttonStyles.active, depth > 0 && "text-sm text-muted-foreground", - "group" + "group flex items-start gap-2", + "min-h-[2.5rem] h-auto" )} onClick={handleClick} > - {hasChildren ? ( + {hasChildren && ( <motion.div - className="text-muted-foreground/70 group-hover:text-muted-foreground" + className="text-muted-foreground/70 group-hover:text-muted-foreground shrink-0 mt-1" initial={false} animate={{ rotate: isOpen ? 90 : 0 }} transition={{ duration: 0.2 }} > - <ChevronRight className="mr-2 h-3.5 w-3.5" /> + <ChevronRight className="h-3.5 w-3.5" /> </motion.div> - ) : ""} + )} {item.path ? ( - <Link href={absolutePath} className="flex-1 break-words" onClick={handleClick}> - {item.title} + <Link + href={absolutePath} + className="flex-1 leading-tight py-0.5" + onClick={handleClick} + > + <span className="inline-block">{item.title}</span> </Link> ) : ( - <span className="flex-1 break-words">{item.title}</span> + <span className="flex-1 leading-tight py-0.5 inline-block">{item.title}</span> )} {item.badge && ( - <span className="ml-2 px-2 py-0.5 text-xs rounded-full bg-accent text-accent-foreground shrink-0"> + <span className="px-2 py-0.5 text-xs rounded-full bg-accent text-accent-foreground shrink-0 self-start mt-1"> {item.badge} </span> )} @@ -137,6 +142,7 @@ const NavItem = React.memo(({ locale, item, pathname, depth = 0 }: NavItemProps) animate={{ opacity: 1, height: "auto" }} exit={{ opacity: 0, height: 0 }} transition={{ duration: 0.3, ease: "easeInOut" }} + className="mt-1" > {Object.entries(item.items!).map(([key, child]) => ( <NavItem locale={locale} key={key} item={child} pathname={pathname} depth={depth + 1} /> @@ -155,7 +161,7 @@ export async function ApiSidebar() { return ( <ErrorBoundary FallbackComponent={ErrorFallback}> - <aside className="w-64 bg-sidebar-background text-sidebar-foreground border-r h-[calc(100vh-4rem)] sticky top-16 shadow-sm"> + <aside className="w-[20%] bg-sidebar-background text-sidebar-foreground border-r h-[calc(100vh-4rem)] sticky top-16 shadow-sm"> <ScrollArea className="h-full py-6 px-4"> <nav className="space-y-2"> {navigation.map((item, index) => (