commit 7a99b69887ec361331663d7548aabc8293538cc1 Author: abearxiong Date: Tue Jan 20 22:54:40 2026 +0800 feat: initialize pnpm workspace and add app structure - Created pnpm workspace configuration in `pnpm-workspace.yaml`. - Implemented basic app setup in `src/app.ts` using `@kevisual/router`. - Generated documentation files in `src/generated/docs.ts` for showcase CMS templates. - Added inline script to read and compile markdown files into TypeScript constants in `src/inline.ts`. - Set up main application entry point in `src/main.ts` to integrate routing and plugins. - Established routing structure in `src/routes/index.ts` and `src/routes/md.ts` for handling markdown-related tasks. - Implemented a route for initializing web todo tasks with dynamic content generation based on selected template type. diff --git a/.cnb.yml b/.cnb.yml new file mode 100644 index 0000000..4d1d4f2 --- /dev/null +++ b/.cnb.yml @@ -0,0 +1,44 @@ +# .cnb.yml +include: + - https://cnb.cool/kevisual/cnb/-/blob/main/.cnb/template.yml + +.common_env: &common_env + env: + TO_REPO: kevisual/template-docs + TO_URL: git.xiongxiao.me + imports: + - https://cnb.cool/kevisual/env/-/blob/main/.env.development + +$: + vscode: + - docker: + image: docker.cnb.cool/kevisual/dev-env:latest + services: + - vscode + - docker + imports: !reference [.common_env, imports] + # 开发环境启动后会执行的任务 + # stages: + # - name: pnpm install + # script: pnpm install + stages: !reference [.dev_tempalte, stages] + +.common_sync_to_gitea: &common_sync_to_gitea + - <<: *common_env + services: !reference [.common_sync_to_gitea_template, services] + stages: !reference [.common_sync_to_gitea_template, stages] + +.common_sync_from_gitea: &common_sync_from_gitea + - <<: *common_env + services: !reference [.common_sync_from_gitea_template, services] + stages: !reference [.common_sync_from_gitea_template, stages] + +main: + web_trigger_sync_to_gitea: + - <<: *common_sync_to_gitea + web_trigger_sync_from_gitea: + - <<: *common_sync_from_gitea + api_trigger_sync_to_gitea: + - <<: *common_sync_to_gitea + api_trigger_sync_from_gitea: + - <<: *common_sync_from_gitea \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94b98d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules + +.pnpm-store + +cache-file + +dist \ No newline at end of file diff --git a/.opencode/plugin/agent.ts b/.opencode/plugin/agent.ts new file mode 100644 index 0000000..df5f4e6 --- /dev/null +++ b/.opencode/plugin/agent.ts @@ -0,0 +1,6 @@ +import { AgentPlugin } from '@kevisual/cli'; +import { docsAgentPlugin } from '../../src/main.ts' +export { + AgentPlugin, + docsAgentPlugin +} \ No newline at end of file diff --git a/.opencode/pnpm-lock.yaml b/.opencode/pnpm-lock.yaml new file mode 100644 index 0000000..cf4c7e6 --- /dev/null +++ b/.opencode/pnpm-lock.yaml @@ -0,0 +1,1133 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@kevisual/cli': + specifier: ^0.0.89 + version: 0.0.89(@types/node@25.0.9)(dotenv@17.2.3) + +packages: + + '@inquirer/ansi@2.0.3': + resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/checkbox@5.0.4': + resolution: {integrity: sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.0.4': + resolution: {integrity: sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@11.1.1': + resolution: {integrity: sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.0.4': + resolution: {integrity: sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.0.4': + resolution: {integrity: sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@2.0.3': + resolution: {integrity: sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.3': + resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/input@5.0.4': + resolution: {integrity: sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.0.4': + resolution: {integrity: sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.0.4': + resolution: {integrity: sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.2.0': + resolution: {integrity: sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.2.0': + resolution: {integrity: sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.1.0': + resolution: {integrity: sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.0.4': + resolution: {integrity: sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.0.3': + resolution: {integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@kevisual/ai@0.0.19': + resolution: {integrity: sha512-AFc8m6OcHZNxCb88bvzhvwWTZ4EVYyPupBzPUsLKLpdNBvsqm9TRboKCM2brJj2cqHnm+H+RbAk9AcGJkYhRCA==} + + '@kevisual/app@0.0.2': + resolution: {integrity: sha512-DdUkrsLxHO31y5nYl1qAoBPbvTrunztN3z84ow73Of3kZADJRKmjZtrSOMX53vGVgg74AoLOxbYggoWvil9Ifg==} + + '@kevisual/cli@0.0.89': + resolution: {integrity: sha512-kQvOnt9PdaRfIJj64xBOEvAogiJFDFgIkh/ZxBLfT1mZUBWgqtPzDAZAwuFKGCfkFWDJcbKIHjJGXnwP2LP/gg==} + engines: {node: '>=22.0.0'} + hasBin: true + + '@kevisual/context@0.0.4': + resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==} + + '@kevisual/load@0.0.6': + resolution: {integrity: sha512-+3YTFehRcZ1haGel5DKYMUwmi5i6f2psyaPZlfkKU/cOXgkpwoG9/BEqPCnPjicKqqnksEpixVRkyHJ+5bjLVA==} + + '@kevisual/logger@0.0.4': + resolution: {integrity: sha512-+fpr92eokSxoGOW1SIRl/27lPuO+zyY+feR5o2Q4YCNlAdt2x64NwC/w8r/3NEC5QenLgd4K0azyKTI2mHbARw==} + + '@kevisual/permission@0.0.3': + resolution: {integrity: sha512-8JsA/5O5Ax/z+M+MYpFYdlioHE6jNmWMuFSokBWYs9CCAHNiSKMR01YLkoVDoPvncfH/Y8F5K/IEXRCbptuMNA==} + + '@kevisual/query@0.0.31': + resolution: {integrity: sha512-bBdepjmMICLpcj/a9fnn82/0CGGYUZiCV+usWsJZKAwVlZcnj+WtKmbgKT09KpP6g3jjYzYOaXHiNFB8N0bQAQ==} + + '@kevisual/query@0.0.32': + resolution: {integrity: sha512-9WN9cjmwSW8I5A0SqITdts9oxlLBGdPP7kJ8vwrxkaQteHS9FzxKuMBJxZzGKZdyte/zJDvdrE+lMf254BGbbg==} + + '@kevisual/router@0.0.39': + resolution: {integrity: sha512-jE7/csRkMUuuSWl5RZHbOY44xL/2RI/vAJzCsqt150taW5CAri3efdaQJOQlzghlOqqA+1ZyGajxUAYv/HaQxA==} + + '@kevisual/use-config@1.0.28': + resolution: {integrity: sha512-ngF+LDbjxpXWrZNmnShIKF/jPpAa+ezV+DcgoZIIzHlRnIjE+rr9sLkN/B7WJbiH9C/j1tQXOILY8ujBqILrow==} + peerDependencies: + dotenv: ^17 + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@opencode-ai/sdk@1.1.26': + resolution: {integrity: sha512-5s+yxNJy7DpWwDq0L//F2sqKERz4640DmDLyrRlFXmckx5prnzFl3liEOOTySOL2WaxgVwjYw8OBiT15v2mAgA==} + + '@peculiar/asn1-cms@2.6.0': + resolution: {integrity: sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==} + + '@peculiar/asn1-csr@2.6.0': + resolution: {integrity: sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==} + + '@peculiar/asn1-ecc@2.6.0': + resolution: {integrity: sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==} + + '@peculiar/asn1-pfx@2.6.0': + resolution: {integrity: sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==} + + '@peculiar/asn1-pkcs8@2.6.0': + resolution: {integrity: sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==} + + '@peculiar/asn1-pkcs9@2.6.0': + resolution: {integrity: sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==} + + '@peculiar/asn1-rsa@2.6.0': + resolution: {integrity: sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==} + + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + + '@peculiar/asn1-x509-attr@2.6.0': + resolution: {integrity: sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==} + + '@peculiar/asn1-x509@2.6.0': + resolution: {integrity: sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + + '@types/busboy@1.5.4': + resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} + + '@types/node@25.0.9': + resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + engines: {node: '>=12.0.0'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + lowdb@7.0.1: + resolution: {integrity: sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==} + engines: {node: '>=18'} + + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkijs@3.3.3: + resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} + engines: {node: '>=16.0.0'} + + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + steno@4.0.2: + resolution: {integrity: sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==} + engines: {node: '>=18'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unstorage@1.17.4: + resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + +snapshots: + + '@inquirer/ansi@2.0.3': {} + + '@inquirer/checkbox@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/confirm@6.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/core@11.1.1(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + cli-width: 4.1.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + wrap-ansi: 9.0.2 + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/editor@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/external-editor': 2.0.3(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/expand@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/external-editor@2.0.3(@types/node@25.0.9)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/figures@2.0.3': {} + + '@inquirer/input@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/number@4.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/password@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/prompts@8.2.0(@types/node@25.0.9)': + dependencies: + '@inquirer/checkbox': 5.0.4(@types/node@25.0.9) + '@inquirer/confirm': 6.0.4(@types/node@25.0.9) + '@inquirer/editor': 5.0.4(@types/node@25.0.9) + '@inquirer/expand': 5.0.4(@types/node@25.0.9) + '@inquirer/input': 5.0.4(@types/node@25.0.9) + '@inquirer/number': 4.0.4(@types/node@25.0.9) + '@inquirer/password': 5.0.4(@types/node@25.0.9) + '@inquirer/rawlist': 5.2.0(@types/node@25.0.9) + '@inquirer/search': 4.1.0(@types/node@25.0.9) + '@inquirer/select': 5.0.4(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/rawlist@5.2.0(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/search@4.1.0(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/select@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/type@4.0.3(@types/node@25.0.9)': + optionalDependencies: + '@types/node': 25.0.9 + + '@kevisual/ai@0.0.19': + dependencies: + '@kevisual/logger': 0.0.4 + '@kevisual/permission': 0.0.3 + '@kevisual/query': 0.0.31 + + '@kevisual/app@0.0.2(dotenv@17.2.3)': + dependencies: + '@kevisual/ai': 0.0.19 + '@kevisual/context': 0.0.4 + '@kevisual/query': 0.0.32 + '@kevisual/router': 0.0.39 + '@kevisual/use-config': 1.0.28(dotenv@17.2.3) + mitt: 3.0.1 + nanoid: 5.1.6 + transitivePeerDependencies: + - dotenv + - supports-color + + '@kevisual/cli@0.0.89(@types/node@25.0.9)(dotenv@17.2.3)': + dependencies: + '@inquirer/prompts': 8.2.0(@types/node@25.0.9) + '@kevisual/app': 0.0.2(dotenv@17.2.3) + '@kevisual/context': 0.0.4 + '@kevisual/use-config': 1.0.28(dotenv@17.2.3) + '@opencode-ai/sdk': 1.1.26 + '@types/busboy': 1.5.4 + busboy: 1.6.0 + eventemitter3: 5.0.4 + lowdb: 7.0.1 + lru-cache: 11.2.4 + micromatch: 4.0.8 + semver: 7.7.3 + unstorage: 1.17.4 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - dotenv + - idb-keyval + - ioredis + - supports-color + - uploadthing + + '@kevisual/context@0.0.4': {} + + '@kevisual/load@0.0.6': + dependencies: + eventemitter3: 5.0.4 + + '@kevisual/logger@0.0.4': {} + + '@kevisual/permission@0.0.3': {} + + '@kevisual/query@0.0.31': {} + + '@kevisual/query@0.0.32': {} + + '@kevisual/router@0.0.39': + dependencies: + path-to-regexp: 8.3.0 + selfsigned: 5.5.0 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@kevisual/use-config@1.0.28(dotenv@17.2.3)': + dependencies: + '@kevisual/load': 0.0.6 + dotenv: 17.2.3 + + '@noble/hashes@1.4.0': {} + + '@opencode-ai/sdk@1.1.26': {} + + '@peculiar/asn1-cms@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-x509-attr': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.6.0': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-pkcs8': 2.6.0 + '@peculiar/asn1-rsa': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.6.0': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-pfx': 2.6.0 + '@peculiar/asn1-pkcs8': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-x509-attr': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.6.0': + dependencies: + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-csr': 2.6.0 + '@peculiar/asn1-ecc': 2.6.0 + '@peculiar/asn1-pkcs9': 2.6.0 + '@peculiar/asn1-rsa': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + + '@types/busboy@1.5.4': + dependencies: + '@types/node': 25.0.9 + + '@types/node@25.0.9': + dependencies: + undici-types: 7.16.0 + + ansi-regex@6.2.2: {} + + ansi-styles@6.2.3: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + asn1js@3.0.7: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytestreamjs@2.0.1: {} + + chardet@2.1.1: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + cli-width@4.1.0: {} + + cookie-es@1.2.2: {} + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + defu@6.1.4: {} + + depd@2.0.0: {} + + destr@2.0.5: {} + + dotenv@17.2.3: {} + + ee-first@1.1.1: {} + + emoji-regex@10.6.0: {} + + encodeurl@2.0.0: {} + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + eventemitter3@5.0.4: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + fresh@2.0.0: {} + + get-east-asian-width@1.4.0: {} + + h3@1.15.5: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.3 + uncrypto: 0.1.3 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.4: {} + + iron-webcrypto@1.2.1: {} + + is-number@7.0.0: {} + + lowdb@7.0.1: + dependencies: + steno: 4.0.2 + + lru-cache@11.2.4: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.54.0: {} + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mitt@3.0.1: {} + + ms@2.1.3: {} + + mute-stream@3.0.0: {} + + nanoid@5.1.6: {} + + node-fetch-native@1.6.7: {} + + node-mock-http@1.0.4: {} + + normalize-path@3.0.0: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.3 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + path-to-regexp@8.3.0: {} + + picomatch@2.3.1: {} + + pkijs@3.3.3: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.7 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + + radix3@1.1.2: {} + + range-parser@1.2.1: {} + + readdirp@5.0.0: {} + + reflect-metadata@0.2.2: {} + + safer-buffer@2.1.2: {} + + selfsigned@5.5.0: + dependencies: + '@peculiar/x509': 1.14.3 + pkijs: 3.3.3 + + semver@7.7.3: {} + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + signal-exit@4.1.0: {} + + statuses@2.0.2: {} + + steno@4.0.2: {} + + streamsearch@1.1.0: {} + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + + ufo@1.6.3: {} + + uncrypto@0.1.3: {} + + undici-types@7.16.0: {} + + unstorage@1.17.4: + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.5 + lru-cache: 11.2.4 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.3 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fac33b0 --- /dev/null +++ b/README.md @@ -0,0 +1,280 @@ +# Showcase CMS + +展示网站模板集合 - 快速构建专业的静态展示网站或高交互动态网站。 + +--- + +## 模板类型对比 + +| 特性 | 展示型模板(astro) | 互动型模板(next.js) | +|------|-----------|-----------| +| **核心定位** | 信息展示为主 | 用户交互为主 | +| **渲染模式** | 静态生成 (SSG) | 混合渲染 (SSR/SSG/ISR) | +| **内容管理** | Markdown/MDX 文件 | Headless CMS + API | +| **用户系统** | 无 | 多用户 + 权限管理 | +| **交互程度** | 低(浏览为主) | 高(登录、评论、购买) | +| **性能表现** | 极致轻量、快速加载 | 高并发、动态内容 | +| **适用场景** | 企业官网、作品集、博客、文档 | 电商、门户、社区、后台系统 | +| **学习曲线** | 简单 | 中等 | +| **部署难度** | 简单 | 中等 | +| **SEO** | 优秀 | 优秀 | + +--- + +## 展示型模板 (Astro) + +适用于:以信息展示为主的网站,强调性能、SEO和内容管理便捷性。 + +### 适用场景 + +- 企业官网(纯信息展示) +- 个人作品集、摄影集、设计展示 +- 技术博客、文档站点、知识库 +- 活动页面、 Landing Page +- 新闻资讯、媒体发布 + +### 核心特点 + +1. **极简架构** + - 纯静态生成,零运行时依赖 + - 支持 Markdown/MDX 内容创作 + - 文件即路由,目录结构清晰 + +2. **高性能** + - 首屏加载 < 100ms + - 自动图片优化 + - 按需加载 JavaScript + - 支持边缘部署 (Vercel Edge, Cloudflare Pages) + +3. **开箱即用** + - 内置语法高亮 + - 主题切换 (亮色/暗色) + - 响应式图片 + - SEO 元标签自动生成 + +### 功能模块 + +| 模块 | 功能点 | +|------|--------| +| 首页 | Hero区域、核心数据、客户Logo、订阅 | +| 关于我们 | 公司简介、发展历程、团队介绍、资质认证 | +| 产品/服务 | 产品分类、详情介绍、规格参数 | +| 成功案例 | 案例展示、客户评价、Logo墙 | +| 新闻动态 | 新闻列表、分类、RSS订阅 | +| 人才招聘 | 职位列表、福利介绍、简历投递 | +| 联系我们 | 联系信息、表单、地图 | +| 博客/文章 | 文章列表、标签分类、阅读时间 | +| 双语支持 | i18n路由、翻译文件管理 | + +### 技术栈 + +```yaml +框架: Astro 4.x +UI 库: 原生 CSS / TailwindCSS (可选) +内容: Markdown / MDX +搜索: Pagefind (本地搜索) +部署: Vercel / Netlify / Cloudflare Pages +``` + +### 目录结构 + +``` +astro-website/ +├── src/ +│ ├── components/ # 可复用组件 +│ ├── layouts/ # 页面布局 +│ ├── pages/ # 页面路由 +│ ├── content/ # Markdown/MDX 内容 +│ ├── styles/ # 全局样式 +│ └── utils/ # 工具函数 +├── public/ # 静态资源 +├── astro.config.mjs # 配置文件 +└── package.json +``` + +--- + +## 互动型模板 (Next.js) + +适用于:以用户交互为主的网站,需要登录、动态内容、在线交易等功能。 + +### 适用场景 + +- 电商平台、B2B商城 +- 门户网站、内容社区 +- 会员制网站、SaaS产品 +- 在线教育、培训平台 +- 需要后台管理的各类网站 + +### 核心特点 + +1. **企业级架构** + - App Router 路由系统 + - Server Components + - 完整的后台管理系统集成 + - 多语言 i18n 支持 + +2. **完整业务支持** + - 用户注册/登录 + - 产品目录管理 + - 新闻发布系统 + - 在线询盘/表单 + - 会员中心 + +3. **灵活扩展** + - 支持多种 CMS (Strapi, Contentful, Sanity) + - API 路由自动生成 + - 组件库按需引入 + - 微前端集成能力 + +### 功能模块 + +| 模块 | 功能点 | +|------|--------| +| 首页 | Hero、核心数据、客户Logo、订阅 | +| 关于我们 | 公司历程、团队介绍、资质认证、办公环境 | +| 产品中心 | 产品分类、详情、对比、规格参数、购物车 | +| 解决方案 | 行业方案、定制服务、成功案例 | +| 新闻动态 | 新闻列表、分类、RSS订阅、媒体资源 | +| 成功案例 | 案例详情、客户评价、Logo墙 | +| 服务支持 | 知识库、FAQ、下载中心、在线客服 | +| 人才招聘 | 职位列表、简历投递、校园招聘 | +| 联系我们 | 表单、地图、客服系统、多分支机构 | +| 合作伙伴 | 合作伙伴门户、渠道政策、专属登录 | +| 会员中心 | 账户管理、订单历史、收藏、消息通知 | +| 在线商城 | 商品管理、支付集成、物流查询、退换货 | +| 投资者关系 | 公告、财报、治理结构(上市公司) | +| 用户系统 | 注册登录、权限管理、OAuth认证 | +| CMS后台 | 内容管理、产品管理、媒体管理、统计分析 | +| 双语支持 | 语言切换、翻译管理、SEO本地化 | + +### 技术栈 + +```yaml +框架: Next.js 14+ (App Router) +UI 库: React / TailwindCSS / Shadcn UI +状态管理: Zustand / React Query +表单: React Hook Form + Zod +认证: NextAuth.js / Clerk +CMS: Strapi / Contentful / Sanity (可选) +数据库: PostgreSQL / MySQL (可选) +部署: Vercel / AWS / Docker +``` + +### 目录结构 + +``` +nextjs-website/ +├── src/ +│ ├── app/ # App Router 页面 +│ ├── components/ # 可复用组件 +│ ├── lib/ # 工具函数和配置 +│ ├── hooks/ # 自定义 Hooks +│ ├── types/ # TypeScript 类型 +│ ├── services/ # API 服务层 +│ └── store/ # 状态管理 +├── public/ # 静态资源 +├── next.config.js # 配置文件 +└── package.json +``` + +--- + +## 共享组件库 (待开发) + +两个模板共享同一套组件库,保证视觉一致性: + +``` +packages/ui/ +├── Button/ # 按钮组件 +├── Card/ # 卡片组件 +├── Modal/ # 弹窗组件 +├── Form/ # 表单组件 +├── Navigation/ # 导航组件 +├── Footer/ # 页脚组件 +├── Input/ # 输入框组件 +├── Select/ # 选择器组件 +├── Table/ # 表格组件 +├── Pagination/ # 分页组件 +├── Carousel/ # 轮播组件 +├── Dropdown/ # 下拉菜单 +├── Toast/ # 提示组件 +└── Skeleton/ # 骨架屏组件 +``` + +--- + +## 如何选择 + +``` +需要选择展示型还是互动型? +├── 内容是否主要是静态信息展示? +│ ├── 是 → 选择 Astro 展示型模板 +│ └── 否 → 继续 +├── 是否需要用户登录注册? +│ ├── 是 → 选择 Next.js 互动型模板 +│ └── 否 → 继续 +├── 是否需要在线交易/支付? +│ ├── 是 → 选择 Next.js 互动型模板 +│ └── 否 → 可能只需要展示型 +└── 是否需要复杂的动态交互功能? + ├── 是 → 选择 Next.js 互动型模板 + └── 否 → 选择 Astro 展示型模板 +``` + +--- + +## 快速开始 + +### 展示型模板 (Astro) + +```bash +# 克隆模板 +git clone https://github.com/your-org/showcase-cms +cd showcase-cms/templates/astro-website + +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 构建生产版本 +npm run build +``` + +### 互动型模板 (Next.js) + +```bash +# 克隆模板 +git clone https://github.com/your-org/showcase-cms +cd showcase-cms/templates/nextjs-website + +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 构建生产版本 +npm run build +``` + +--- + +## 文档链接 + +- [展示型模板功能拆分](docs/website-features-breakdown.md) +- [互动型模板功能拆分](docs/enterprise-website-features.md) + +--- + +## 贡献指南 + +欢迎贡献代码或提出建议。请先阅读贡献指南。 + +--- + +## 许可证 + +MIT License diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..dbcdad2 --- /dev/null +++ b/TODO.md @@ -0,0 +1,175 @@ +# 个人展示网站开发任务清单 (Astro) + +## 技术栈 +- **框架**: Astro +- **样式**: Tailwind CSS +- **语言**: TypeScript + +--- + +## 第一章:首页 (Home) + +- [ ] 1.1 创建 Hero 区域组件 + - [ ] 大标题(姓名/品牌) + - [ ] 副标题(职业定位) + - [ ] 简介文字 + - [ ] CTA 按钮(查看作品、联系我) + - [ ] 背景视觉元素 +- [ ] 1.2 创建快速概览区域 + - [ ] 个人头像组件 + - [ ] 核心技能标签 + - [ ] 社交媒体链接 + +--- + +## 第二章:关于我 (About Me) + +- [ ] 2.1 创建个人介绍页面 + - [ ] 详细个人简介 + - [ ] 教育背景 + - [ ] 工作经历 + - [ ] 个人故事/理念 +- [ ] 2.2 技能展示组件 + - [ ] 技术栈列表 + - [ ] 熟练程度可视化 + - [ ] 工具使用展示 +- [ ] 2.3 兴趣爱好区域 + - [ ] 个人爱好展示 + - [ ] 其他技能 + +--- + +## 第三章:项目展示 (Portfolio/Projects) + +- [ ] 3.1 项目列表页面 + - [ ] 项目卡片组件(缩略图、标题、描述) + - [ ] 技术栈标签 + - [ ] 链接按钮(详情、演示、源码) +- [ ] 3.2 项目分类功能 + - [ ] 按类型分类 + - [ ] 按技术栈筛选 + - [ ] 按时间排序 +- [ ] 3.3 项目详情页 + - [ ] 项目背景 + - [ ] 功能特性 + - [ ] 技术实现 + - [ ] 截图/视频展示 + - [ ] 挑战与解决方案 + - [ ] 项目链接 + +--- + +## 第四章:博客/文章 (Blog) + +- [ ] 4.1 文章列表页面 + - [ ] 文章卡片组件 + - [ ] 发表日期、阅读时间 + - [ ] 摘要、分类标签 +- [ ] 4.2 文章详情页 + - [ ] Markdown 渲染 + - [ ] 目录导航 + - [ ] 代码高亮 + - [ ] 相关文章推荐 +- [ ] 4.3 分类系统 + - [ ] 按主题分类 + - [ ] 按技术分类 + +--- + +## 第五章:联系信息 (Contact) + +- [ ] 5.1 联系表单组件 + - [ ] 姓名、邮箱输入 + - [ ] 主题选择 + - [ ] 消息内容 + - [ ] 提交按钮 +- [ ] 5.2 联系信息展示 + - [ ] 邮箱地址 + - [ ] 社交媒体链接 + - [ ] 地理位置 + - [ ] 可用时间 + +--- + +## 第六章:导航系统 + +- [ ] 6.1 主导航组件 + - [ ] 导航栏(首页、关于我、项目、博客、联系) + - [ ] 移动端汉堡菜单 +- [ ] 6.2 辅助导航 + - [ ] 返回顶部按钮 + - [ ] 面包屑导航 + - [ ] 页脚导航 + +--- + +## 第七章:页脚 (Footer) + +- [ ] 7.1 版权信息 +- [ ] 7.2 社交链接(GitHub、LinkedIn、Twitter) +- [ ] 7.3 快速链接(隐私政策、网站地图) + +--- + +## 第八章:通用组件 + +- [ ] 8.1 按钮组件(主要、次要、图标) +- [ ] 8.2 卡片组件(项目、技能、文章) +- [ ] 8.3 模态框组件(图片预览、视频播放) + +--- + +## 第九章:响应式设计 + +- [ ] 9.1 桌面端适配(1280px+) +- [ ] 9.2 平板端适配(768px - 1024px) +- [ ] 9.3 移动端适配(375px - 480px) + +--- + +## 第十章:交互效果 + +- [ ] 10.1 页面过渡动画 +- [ ] 10.2 悬停效果(按钮、卡片、图片) +- [ ] 10.3 滚动效果(触发动画、视差、固定导航) + +--- + +## 第十一章:SEO与性能 + +- [ ] 11.1 SEO 优化 + - [ ] Meta 标签 + - [ ] Open Graph + - [ ] Sitemap + - [ ] Robots.txt +- [ ] 11.2 性能优化 + - [ ] 图片懒加载 + - [ ] 代码分割 + - [ ] 缓存策略 + +--- + +## 第十二章:无障碍访问 + +- [ ] 12.1 键盘导航支持 +- [ ] 12.2 屏幕阅读器支持(ARIA 标签、替代文本) + +--- + +## 第十三章:主题与定制 + +- [ ] 13.1 亮色主题配置 +- [ ] 13.2 暗色主题配置 +- [ ] 13.3 主题切换功能 + +--- + +## 第十四章:双语支持 + +- [ ] 14.1 语言切换组件 +- [ ] 14.2 国际化架构(i18n 配置) +- [ ] 14.3 翻译内容管理 +- [ ] 14.4 路由配置(/en/, /zh/) +- [ ] 14.5 浏览器语言检测 +- [ ] 14.6 内容管理双语支持 +- [ ] 14.7 中英文字体配置 diff --git a/bun.config.ts b/bun.config.ts new file mode 100644 index 0000000..efd3a8e --- /dev/null +++ b/bun.config.ts @@ -0,0 +1,24 @@ +import path from 'node:path'; +import pkg from './package.json'; +import fs from 'node:fs'; +import { execSync } from 'node:child_process'; +const w = (p: string) => path.resolve(import.meta.dir, p); + +const external: string[] = ["bun"]; +await Bun.build({ + target: 'node', + format: 'esm', + entrypoints: [w('./src/main.ts')], + outdir: w('./dist'), + naming: { + entry: 'app.js', + }, + define: {}, + external +}); + +const cmd = 'dts -i ./src/main.ts -o /app.d.ts'; + +execSync(cmd, { stdio: 'inherit' }); + +// Copy package.json to dist \ No newline at end of file diff --git a/docs/enterprise-website-features.md b/docs/enterprise-website-features.md new file mode 100644 index 0000000..f0143f7 --- /dev/null +++ b/docs/enterprise-website-features.md @@ -0,0 +1,743 @@ +# 企业展示网站功能拆分文档 + +## 概述 +本文档梳理建立企业展示网站的具体功能需求,按章节进行拆分和记录。 + +--- + +## 第一章:首页 (Home) + +### 1.1 头部区域 +- 企业Logo +- 主导航菜单 +- 搜索功能 +- 语言切换 +- 登录/注册入口 + +### 1.2 Hero 区域 +- 核心价值主张 (Value Proposition) +- 企业标语 (Tagline) +- 主要行动按钮 (CTA) +- 背景视频/轮播图 +- 客户信任标识(Logo展示) + +### 1.3 核心数据展示 +- 公司成立年份 +- 服务客户数量 +- 成功案例数 +- 团队规模 + +### 1.4 服务概览 +- 核心业务展示 +- 服务特点 +- 快速链接卡片 + +### 1.5 客户评价 +- 客户Logo +- 简短评价 +- 客户姓名/职位 + +### 1.6 最新动态 +- 最新新闻 +- 公司动态 +- 行业资讯 + +### 1.7 订阅区域 +- 邮件订阅表单 +- 社交媒体链接 + +--- + +## 第二章:关于我们 (About Us) + +### 2.1 公司简介 +- 公司发展历程 +- 使命与愿景 +- 核心价值观 +- 发展里程碑 + +### 2.2 企业文化 +- 企业精神 +- 工作氛围 +- 团队活动展示 + +### 2.3 发展历程 +- 时间线展示 +- 重大事件 +- 成长数据 + +### 2.4 团队介绍 +- 管理团队 +- 核心成员 +- 团队照片墙 +- 招聘入口 + +### 2.5 资质认证 +- 营业执照 +- 行业资质 +- 荣誉证书 +- 专利技术 + +### 2.6 办公环境 +- 办公环境照片 +- 视频展示 +- 360度全景 + +--- + +## 第三章:产品与解决方案 (Products & Solutions) + +### 3.1 产品分类 +- 产品类别导航 +- 产品列表 +- 产品对比功能 + +### 3.2 产品详情页 +- 产品介绍 +- 功能特性 +- 规格参数 +- 价格信息 +- 购买/咨询按钮 + +### 3.3 解决方案 +- 行业解决方案 +- 定制化方案 +- 成功案例展示 +- 方案优势 + +### 3.4 产品演示 +- 视频演示 +- 在线试用 +- 下载中心(手册、白皮书) + +### 3.5 定价方案 +- 套餐对比 +- 价格表 +- FAQ +- 咨询销售 + +--- + +## 第四章:成功案例 (Case Studies) + +### 4.1 案例列表 +- 案例分类筛选 +- 案例卡片展示 +- 搜索功能 + +### 4.2 案例详情 +- 客户背景 +- 面临挑战 +- 解决方案 +- 实施过程 +- 项目成果 +- 客户评价 +- 相关截图/视频 + +### 4.3 客户Logo墙 +- 行业分类 +- Logo展示 +- 客户评价引用 + +### 4.4 客户评价 +- 视频评价 +- 文字评价 +- 评价管理后台 + +--- + +## 第五章:服务支持 (Service & Support) + +### 5.1 服务类型 +- 咨询服务 +- 实施服务 +- 培训服务 +- 运维服务 +- 定制开发 + +### 5.2 售后服务 +- 保修政策 +- 退换货政策 +- 维修服务 +- 技术支持 + +### 5.3 知识库 +- 使用手册 +- 常见问题 (FAQ) +- 操作视频 +- 技术文档 + +### 5.4 下载中心 +- 产品手册 +- 软件更新 +- 驱动程序 +- 技术白皮书 + +--- + +## 第六章:新闻与动态 (News & Press) + +### 6.1 新闻列表 +- 新闻分类(公司动态、行业新闻、产品更新) +- 时间线展示 +- 搜索功能 + +### 6.2 新闻详情 +- 正文内容 +- 配图/视频 +- 分享功能 +- 相关文章推荐 + +### 6.3 新闻订阅 +- RSS订阅 +- 邮件订阅 +- 通知设置 + +### 6.4 媒体资源 +- 新闻稿下载 +- 媒体联系 +- Logo/素材下载 + +--- + +## 第七章:人才招聘 (Careers) + +### 7.1 招聘职位 +- 职位列表 +- 部门分类 +- 地点筛选 +- 搜索功能 + +### 7.2 职位详情 +- 职位描述 +- 任职要求 +- 薪资范围 +- 工作地点 +- 申请按钮 + +### 7.3 福利待遇 +- 薪酬体系 +- 员工福利 +- 培训发展 +- 团建活动 + +### 7.4 申请流程 +- 在线投递 +- 简历上传 +- 状态追踪 + +### 7.5 校园招聘 +- 招聘行程 +- 宣讲会信息 +- 实习生项目 + +--- + +## 第八章:联系我们 (Contact Us) + +### 8.1 联系信息 +- 公司地址 +- 联系电话 +- 客服热线 +- 邮箱地址 +- 传真号码 + +### 8.2 在线表单 +- 咨询类型选择 +- 姓名/公司 +- 邮箱/电话 +- 消息内容 +- 文件上传 +- 验证码 + +### 8.3 地图集成 +- 公司位置地图 +- 分支机构地图 +- 路线规划 + +### 8.4 分支机构 +- 各地办公室列表 +- 联系方式 +- 地图展示 + +### 8.5 客服系统 +- 在线客服聊天 +- 智能客服机器人 +- 服务时间显示 + +### 8.6 社交媒体 +- 微信公众号 +- 微博 +- 抖音 +- LinkedIn + +--- + +## 第九章:合作伙伴 (Partners) + +### 9.1 合作伙伴类型 +- 技术合作伙伴 +- 渠道合作伙伴 +- 战略合作伙伴 +- 供应商 + +### 9.2 合作计划 +- 合作伙伴等级 +- 权益说明 +- 申请流程 + +### 9.3 合作伙伴登录 +- 专属门户 +- 资源下载 +- 培训资料 +- 业绩查询 + +### 9.4 渠道政策 +- 代理政策 +- 分成比例 +- 激励计划 + +--- + +## 第十章:投资者关系 (Investor Relations) + +### 10.1 公司公告 +- 重大事项 +- 公告发布 +- 归档查询 + +### 10.2 财务信息 +- 季度财报 +- 年度报告 +- 财务数据 + +### 10.3 投资者服务 +- 股票信息 +- 投资者日历 +- 股东大会 + +### 10.4 公司治理 +- 董事会 +- 管理团队 +- 规章制度 + +--- + +## 第十一章:在线商城/电子商务 (E-commerce) + +### 11.1 产品展示 +- 商品分类 +- 商品列表 +- 商品详情 +- 库存状态 + +### 11.2 购物功能 +- 购物车 +- 订单管理 +- 支付集成 +- 物流查询 + +### 11.3 会员系统 +- 用户注册/登录 +- 会员等级 +- 积分系统 +- 优惠券 + +### 11.4 订单管理 +- 订单历史 +- 订单跟踪 +- 退换货 + +--- + +## 第十二章:会员中心 (User Center) + +### 12.1 账户管理 +- 个人资料 +- 密码修改 +- 账号绑定 + +### 12.2 消息中心 +- 系统通知 +- 订单通知 +- 消息设置 + +### 12.3 收藏管理 +- 收藏商品 +- 收藏文章 + +### 12.4 订单历史 +- 全部订单 +- 订单状态 +- 订单详情 + +### 12.5 发票管理 +- 发票申请 +- 发票历史 + +--- + +## 第十三章:导航系统 + +### 13.1 主导航 +- 一级菜单 +- 二级下拉菜单 +- Mega Menu(大导航菜单) + +### 13.2 面包屑导航 +- 层级显示 +- 返回功能 + +### 13.3 页内导航 +- 锚点导航 +- 目录跳转 + +### 13.4 搜索功能 +- 全站搜索 +- 智能提示 +- 搜索结果页 + +### 13.5 快捷入口 +- 收藏夹 +- 历史记录 +- 快速链接 + +--- + +## 第十四章:页脚 (Footer) + +### 14.1 链接区域 +- 产品服务 +- 解决方案 +- 关于我们 +- 支持中心 + +### 14.2 联系信息 +- 地址电话 +- 服务时间 +- 在线客服入口 + +### 14.3 社交媒体 +- 图标链接 +- 二维码展示 +- 公众号 + +### 14.4 订阅区域 +- 邮件订阅 +- 隐私政策 +- 使用条款 + +### 14.5 版权信息 +- 版权声明 +- ICP备案 +- 公安备案 + +--- + +## 第十五章:通用组件 + +### 15.1 按钮 +- 主要按钮 +- 次要按钮 +- 危险按钮 +- 禁用状态 +- 加载状态 + +### 15.2 卡片 +- 信息卡片 +- 产品卡片 +- 新闻卡片 +- 团队卡片 + +### 15.3 表单 +- 输入框 +- 下拉选择 +- 复选框 +- 文件上传 +- 表单验证 + +### 15.4 弹窗 +- 提示弹窗 +- 确认弹窗 +- 模态框 +- 侧边栏 + +### 15.5 分页 +- 页码导航 +- 加载更多 +- 无限滚动 + +### 15.6 轮播 +- 图片轮播 +- 文字轮播 +- 卡片轮播 + +--- + +## 第十六章:内容管理系统 (CMS) + +### 16.1 文章管理 +- 新增/编辑/删除 +- 分类管理 +- 标签管理 +- 草稿/发布 +- 定时发布 + +### 16.2 产品管理 +- 产品CRUD +- 分类管理 +- 属性管理 +- 库存管理 +- SKU管理 + +### 16.3 页面管理 +- 首页管理 +- 自定义页面 +- 模板管理 + +### 16.4 媒体管理 +- 图片上传 +- 视频管理 +- 文件管理 +- 图库 + +### 16.5 用户管理 +- 用户列表 +- 角色管理 +- 权限管理 +- 操作日志 + +### 16.6 数据统计 +- 访问统计 +- 用户统计 +- 内容统计 +- 报表导出 + +--- + +## 第十七章:响应式设计 + +### 17.1 断点定义 +- 超大屏 (≥1920px) +- 大屏 (≥1440px) +- 中屏 (≥1024px) +- 小屏 (≥768px) +- 超小屏 (<768px) + +### 17.2 布局适配 +- 栅格系统 +- Flex布局 +- 百分比布局 + +### 17.3 组件适配 +- 导航菜单(汉堡菜单) +- 表格(横向滚动/折叠) +- 图片(响应式图片) +- 视频(自适应) + +--- + +## 第十八章:交互效果 + +### 18.1 页面过渡 +- 加载动画 +- 页面切换 +- 骨架屏 + +### 18.2 悬停效果 +- 按钮状态 +- 卡片浮起 +- 图片缩放 +- 颜色变化 + +### 18.3 滚动效果 +- 视差滚动 +- 滚动动画 +- 导航栏固定 +- 返回顶部 + +### 18.4 交互动效 +- 弹跳效果 +- 渐变效果 +- 旋转效果 +- 过渡动画 + +--- + +## 第十九章:SEO与性能 + +### 19.1 SEO优化 +- Meta标签 +- Open Graph +- JSON-LD结构化数据 +- Sitemap +- Robots.txt +- Canonical标签 + +### 19.2 性能优化 +- 图片压缩 +- 懒加载 +- 代码分割 +- Tree Shaking +- Gzip/Brotli压缩 +- CDN加速 + +### 19.3 缓存策略 +- 浏览器缓存 +- Service Worker +- 缓存策略配置 + +--- + +## 第二十章:双语支持 (Bilingual Support) + +### 20.1 语言切换 +- 语言切换器 +- 状态持久化 +- 当前语言指示 + +### 20.2 国际化架构 +- 翻译文件管理 +- 日期/时间格式化 +- 数字/货币格式化 + +### 20.3 路由配置 +- 语言前缀URL +- 默认语言设置 +- 域名绑定(可选) + +### 20.4 内容管理 +- CMS多语言 +- 翻译工作流 +- 翻译审核 + +### 20.5 SEO本地化 +- 多语言meta +- hreflang标签 +- 站点地图多语言 + +--- + +## 第二十一章:无障碍访问 + +### 21.1 键盘导航 +- Tab顺序 +- 快捷键 +- 焦点指示 + +### 21.2 屏幕阅读器 +- ARIA标签 +- 替代文本 +- 语义化HTML + +### 21.3 视觉无障碍 +- 颜色对比度 +- 可调节字体 +- 不依赖颜色传递信息 + +### 21.4 认知无障碍 +- 清晰导航 +- 简单语言 +- 错误提示 + +--- + +## 第二十二章:安全特性 + +### 22.1 身份认证 +- 登录/注册 +- 忘记密码 +- 双重验证 +- OAuth登录 + +### 22.2 数据安全 +- HTTPS +- 数据加密 +- CSRF防护 +- XSS防护 +- SQL注入防护 + +### 22.3 访问控制 +- 角色权限 +- 访问日志 +- IP限制 + +### 22.4 业务安全 +- 验证码 +- 频率限制 +- 敏感操作确认 + +--- + +## 第二十三章:第三方集成 + +### 23.1 分析统计 +- Google Analytics +- 百度统计 +- 其他分析工具 + +### 23.2 客服系统 +- 智齿客服 +- Udesk + +### 23.3 社交分享 +- 分享组件 +- 登录组件 +- 点赞组件 + +### 23.4 支付集成 +- 支付宝 +- 微信支付 +- 银联支付 +- PayPal +- Stripe + +### 23.5 地图服务 +- 高德地图 +- 百度地图 +- Google Maps + +### 23.6 邮件服务 +- SendCloud +- 阿里云邮件 +- 邮件模板 + +--- + +## 第二十四章:监控与运维 + +### 24.1 监控告警 +- 服务器监控 +- 应用监控 +- 日志收集 +- 告警通知 + +### 24.2 日志管理 +- 访问日志 +- 错误日志 +- 操作日志 + +### 24.3 备份恢复 +- 数据库备份 +- 文件备份 +- 灾难恢复 + +### 24.4 部署发布 +- CI/CD流程 +- 版本管理 +- 回滚机制 + +--- + +## 总结 + +本文档涵盖了建立企业展示网站的所有核心功能模块。企业网站相比个人网站,更强调: +- 品牌专业性展示 +- 多层级产品/服务展示 +- 客户信任背书 +- 商业转化(询盘、订单) +- 多用户系统 +- 内容管理便捷性 +- SEO与营销支持 + +后续可根据具体行业和企业规模进行调整和扩展。 diff --git a/docs/website-features-breakdown.md b/docs/website-features-breakdown.md new file mode 100644 index 0000000..15add28 --- /dev/null +++ b/docs/website-features-breakdown.md @@ -0,0 +1,280 @@ +# 个人展示网站功能拆分文档 + +## 概述 +本文档梳理建立个人展示网站或者作品集的具体功能需求,按章节进行拆分和记录。 + +--- + +## 第一章:首页 (Home) + +### 1.1 Hero 区域 +- 大标题(个人姓名/品牌标识) +- 副标题(职业/角色定位) +- 简介文字(一句话概括) +- CTA按钮(查看作品、联系我) +- 背景视觉元素(图片/渐变/动画) + +### 1.2 快速概览 +- 个人照片/头像 +- 核心技能标签 +- 社交媒体链接 + +--- + +## 第二章:关于我 (About Me) + +### 2.1 个人介绍 +- 详细个人简介 +- 教育背景 +- 工作经历 +- 个人故事/理念 + +### 2.2 技能展示 +- 技术栈列表 +- 熟练程度可视化 +- 工具使用 + +### 2.3 兴趣爱好 +- 个人爱好展示 +- 其他技能 + +--- + +## 第三章:项目展示 (Portfolio/Projects) + +### 3.1 项目列表 +- 项目缩略图 +- 项目标题 +- 项目描述 +- 技术栈标签 +- 链接按钮(查看详情、演示、源码) + +### 3.2 项目分类 +- 按类型分类 +- 按技术栈筛选 +- 按时间排序 + +### 3.3 项目详情页 +- 项目背景 +- 功能特性 +- 技术实现 +- 截图/视频 +- 面临的挑战与解决方案 +- 项目链接 + +--- + +## 第四章:博客/文章 (Blog) + +### 4.1 文章列表 +- 文章标题 +- 发表日期 +- 阅读时间 +- 摘要 +- 分类标签 + +### 4.2 文章详情 +- 文章正文 +- 目录导航 +- 代码高亮 +- 相关文章推荐 + +### 4.3 分类系统 +- 按主题分类 +- 按技术分类 + +--- + +## 第五章:联系信息 (Contact) + +### 5.1 联系表单 +- 姓名输入 +- 邮箱输入 +- 主题选择 +- 消息内容 +- 提交按钮 + +### 5.2 联系信息 +- 邮箱地址 +- 社交媒体链接 +- 地理位置 +- 可用时间 + +--- + +## 第六章:导航系统 + +### 6.1 主导航 +- 首页 +- 关于我 +- 项目展示 +- 博客 +- 联系 + +### 6.2 辅助导航 +- 返回顶部按钮 +- 面包屑导航 +- 页脚导航 + +--- + +## 第七章:页脚 (Footer) + +### 7.1 版权信息 +- 年份 +- 姓名/品牌 + +### 7.2 社交链接 +- GitHub +- LinkedIn +- Twitter +- 其他平台 + +### 7.3 快速链接 +- 隐私政策 +- 网站地图 + +--- + +## 第八章:通用组件 + +### 8.1 按钮 +- 主要按钮 +- 次要按钮 +- 图标按钮 + +### 8.2 卡片 +- 项目卡片 +- 技能卡片 +- 文章卡片 + +### 8.3 模态框 +- 图片预览 +- 视频播放 +- 联系表单 + +--- + +## 第九章:响应式设计 + +### 9.1 桌面端 (Desktop) +- 1920px+ +- 1440px +- 1280px + +### 9.2 平板端 (Tablet) +- 1024px +- 768px + +### 9.3 移动端 (Mobile) +- 480px +- 375px + +--- + +## 第十章:交互效果 + +### 10.1 页面过渡 +- 加载动画 +- 页面切换效果 + +### 10.2 悬停效果 +- 按钮悬停 +- 卡片悬停 +- 图片缩放 + +### 10.3 滚动效果 +- 滚动触发动画 +- 视差效果 +- 固定导航 + +--- + +## 第十一章:SEO与性能 + +### 11.1 SEO优化 +- Meta标签 +- Open Graph +- Sitemap +- Robots.txt + +### 11.2 性能优化 +- 图片懒加载 +- 代码分割 +- 缓存策略 + +--- + +## 第十二章:无障碍访问 + +### 12.1 键盘导航 +- Tab键导航 +- 快捷键支持 + +### 12.2 屏幕阅读器 +- ARIA标签 +- 替代文本 + +--- + +## 第十三章:主题与定制 + +### 13.1 亮色主题 +- 配色方案 +- 字体选择 + +### 13.2 暗色主题 +- 配色方案 +- 字体选择 + +### 13.3 主题切换 +- 自动切换 +- 手动切换 + +--- + +## 第十四章:双语支持 (Bilingual Support) + +### 14.1 语言切换 +- 语言切换按钮/开关 +- 语言状态持久化(保存用户选择) +- 当前语言指示器 + +### 14.2 国际化架构 +- 国际化配置文件(JSON/YAML) +- 文本内容管理 +- 日期/时间格式化 +- 数字格式化 +- 复数形式处理 + +### 14.3 翻译内容 +- 静态文本翻译 +- 动态内容翻译 +- SEO翻译(meta、og:title、og:description) +- 图片ALT文本翻译 + +### 14.4 路由配置 +- 语言前缀URL(如 /en/, /zh/) +- 默认语言设置 +- 语言切换时URL更新 + +### 14.5 语言检测 +- 浏览器语言偏好检测 +- 首次访问自动跳转 +- 手动覆盖选项 + +### 14.6 内容管理 +- CMS多语言支持 +- 文章/博客双语版本管理 +- 项目描述双语支持 + +### 14.7 字体与排版 +- 中文字体配置 +- 英文字体配置 +- 多语言混排优化 + +--- + +## 总结 + +本文档涵盖了建立个人展示网站的所有核心功能模块。后续可根据实际需求进行调整和扩展。 diff --git a/opencode.json b/opencode.json new file mode 100644 index 0000000..55560e3 --- /dev/null +++ b/opencode.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://opencode.ai/config.json", + "plugin": [ + ] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..9dfbd6d --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "@kevisual/frontend-starter-skill", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "abearxiong (https://www.xiongxiao.me)", + "license": "MIT", + "packageManager": "pnpm@10.28.1", + "type": "module", + "devDependencies": { + "@kevisual/context": "^0.0.4", + "@kevisual/js-filter": "^0.0.5", + "@kevisual/router": "^0.0.58", + "@kevisual/types": "^0.0.11", + "@opencode-ai/plugin": "1.1.26", + "@types/bun": "^1.3.6", + "@types/node": "^25.0.9" + }, + "publishConfig": { + "access": "public" + }, + "exports": { + ".": "./dist/app.js" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..e1039fc --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2171 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@kevisual/context': + specifier: ^0.0.4 + version: 0.0.4 + '@kevisual/js-filter': + specifier: ^0.0.5 + version: 0.0.5 + '@kevisual/router': + specifier: ^0.0.58 + version: 0.0.58 + '@kevisual/types': + specifier: ^0.0.11 + version: 0.0.11 + '@opencode-ai/plugin': + specifier: 1.1.26 + version: 1.1.26 + '@types/bun': + specifier: ^1.3.6 + version: 1.3.6 + '@types/node': + specifier: ^25.0.9 + version: 25.0.9 + + .opencode: + dependencies: + '@opencode-ai/plugin': + specifier: 1.1.26 + version: 1.1.26 + devDependencies: + '@kevisual/cli': + specifier: ^0.0.90 + version: 0.0.90(@types/node@25.0.9)(dotenv@17.2.3) + +packages: + + '@inquirer/ansi@2.0.3': + resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/checkbox@5.0.4': + resolution: {integrity: sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.0.4': + resolution: {integrity: sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@11.1.1': + resolution: {integrity: sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.0.4': + resolution: {integrity: sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.0.4': + resolution: {integrity: sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@2.0.3': + resolution: {integrity: sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.3': + resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/input@5.0.4': + resolution: {integrity: sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.0.4': + resolution: {integrity: sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.0.4': + resolution: {integrity: sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.2.0': + resolution: {integrity: sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.2.0': + resolution: {integrity: sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.1.0': + resolution: {integrity: sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.0.4': + resolution: {integrity: sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.0.3': + resolution: {integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@kevisual/ai@0.0.19': + resolution: {integrity: sha512-AFc8m6OcHZNxCb88bvzhvwWTZ4EVYyPupBzPUsLKLpdNBvsqm9TRboKCM2brJj2cqHnm+H+RbAk9AcGJkYhRCA==} + + '@kevisual/app@0.0.2': + resolution: {integrity: sha512-DdUkrsLxHO31y5nYl1qAoBPbvTrunztN3z84ow73Of3kZADJRKmjZtrSOMX53vGVgg74AoLOxbYggoWvil9Ifg==} + + '@kevisual/cli@0.0.90': + resolution: {integrity: sha512-BV9nK7lPQgQgw2HCKBKXjPtbea9xnyIYAdPSlhm4E6ohGkYAGTgs39vxrC/QMg5K0PAwFzOqdXsTmAa/5psIjA==} + engines: {node: '>=22.0.0'} + hasBin: true + + '@kevisual/context@0.0.4': + resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==} + + '@kevisual/js-filter@0.0.5': + resolution: {integrity: sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw==} + + '@kevisual/load@0.0.6': + resolution: {integrity: sha512-+3YTFehRcZ1haGel5DKYMUwmi5i6f2psyaPZlfkKU/cOXgkpwoG9/BEqPCnPjicKqqnksEpixVRkyHJ+5bjLVA==} + + '@kevisual/logger@0.0.4': + resolution: {integrity: sha512-+fpr92eokSxoGOW1SIRl/27lPuO+zyY+feR5o2Q4YCNlAdt2x64NwC/w8r/3NEC5QenLgd4K0azyKTI2mHbARw==} + + '@kevisual/permission@0.0.3': + resolution: {integrity: sha512-8JsA/5O5Ax/z+M+MYpFYdlioHE6jNmWMuFSokBWYs9CCAHNiSKMR01YLkoVDoPvncfH/Y8F5K/IEXRCbptuMNA==} + + '@kevisual/query@0.0.31': + resolution: {integrity: sha512-bBdepjmMICLpcj/a9fnn82/0CGGYUZiCV+usWsJZKAwVlZcnj+WtKmbgKT09KpP6g3jjYzYOaXHiNFB8N0bQAQ==} + + '@kevisual/query@0.0.32': + resolution: {integrity: sha512-9WN9cjmwSW8I5A0SqITdts9oxlLBGdPP7kJ8vwrxkaQteHS9FzxKuMBJxZzGKZdyte/zJDvdrE+lMf254BGbbg==} + + '@kevisual/router@0.0.39': + resolution: {integrity: sha512-jE7/csRkMUuuSWl5RZHbOY44xL/2RI/vAJzCsqt150taW5CAri3efdaQJOQlzghlOqqA+1ZyGajxUAYv/HaQxA==} + + '@kevisual/router@0.0.58': + resolution: {integrity: sha512-nz/Ym5TjbNI2J7MDZqzj0otzVXS1rjcIIqblU/0RVNm6j+p3yyVlu5ja1qhY9Oc0hOdCdw2d1dpUB+4Is35JlA==} + + '@kevisual/types@0.0.11': + resolution: {integrity: sha512-idNLDTEKVdNXZHFQq8PTN62nflh94kvGtx+v8YDcMxt0Zo+HWVZTFElm+dMQxAs/vn4wo8F2r3VwzWNX/vcqwQ==} + + '@kevisual/use-config@1.0.28': + resolution: {integrity: sha512-ngF+LDbjxpXWrZNmnShIKF/jPpAa+ezV+DcgoZIIzHlRnIjE+rr9sLkN/B7WJbiH9C/j1tQXOILY8ujBqILrow==} + peerDependencies: + dotenv: ^17 + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@opencode-ai/plugin@1.1.26': + resolution: {integrity: sha512-GnhLZuw9NHDJwY5msUZnFIWiLc0SnoBXWZNfnWF5+hu0fcVLgul8gqB2VK4kUv+KOQlzCVMILYikSSQkMYp7RQ==} + + '@opencode-ai/sdk@1.1.26': + resolution: {integrity: sha512-5s+yxNJy7DpWwDq0L//F2sqKERz4640DmDLyrRlFXmckx5prnzFl3liEOOTySOL2WaxgVwjYw8OBiT15v2mAgA==} + + '@peculiar/asn1-cms@2.6.0': + resolution: {integrity: sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==} + + '@peculiar/asn1-csr@2.6.0': + resolution: {integrity: sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==} + + '@peculiar/asn1-ecc@2.6.0': + resolution: {integrity: sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==} + + '@peculiar/asn1-pfx@2.6.0': + resolution: {integrity: sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==} + + '@peculiar/asn1-pkcs8@2.6.0': + resolution: {integrity: sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==} + + '@peculiar/asn1-pkcs9@2.6.0': + resolution: {integrity: sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==} + + '@peculiar/asn1-rsa@2.6.0': + resolution: {integrity: sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==} + + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + + '@peculiar/asn1-x509-attr@2.6.0': + resolution: {integrity: sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==} + + '@peculiar/asn1-x509@2.6.0': + resolution: {integrity: sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + + '@pm2/agent@2.1.1': + resolution: {integrity: sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==} + + '@pm2/blessed@0.1.81': + resolution: {integrity: sha512-ZcNHqQjMuNRcQ7Z1zJbFIQZO/BDKV3KbiTckWdfbUaYhj7uNmUwb+FbdDWSCkvxNr9dBJQwvV17o6QBkAvgO0g==} + engines: {node: '>= 0.8.0'} + hasBin: true + + '@pm2/io@6.1.0': + resolution: {integrity: sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==} + engines: {node: '>=6.0'} + + '@pm2/js-api@0.8.0': + resolution: {integrity: sha512-nmWzrA/BQZik3VBz+npRcNIu01kdBhWL0mxKmP1ciF/gTcujPTQqt027N9fc1pK9ERM8RipFhymw7RcmCyOEYA==} + engines: {node: '>=4.0'} + + '@pm2/pm2-version-check@1.0.4': + resolution: {integrity: sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@types/bun@1.3.6': + resolution: {integrity: sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA==} + + '@types/busboy@1.5.4': + resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} + + '@types/node@25.0.9': + resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + amp-message@0.1.2: + resolution: {integrity: sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==} + + amp@0.3.1: + resolution: {integrity: sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + ansis@4.0.0-node10: + resolution: {integrity: sha512-BRrU0Bo1X9dFGw6KgGz6hWrqQuOlVEDOzkb0QSLZY9sXHqA7pNj7yHPVJRz7y/rj4EOJ3d/D5uxH+ee9leYgsg==} + engines: {node: '>=10'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + engines: {node: '>=12.0.0'} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + basic-ftp@5.1.0: + resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} + engines: {node: '>=10.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bodec@0.1.0: + resolution: {integrity: sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bun-types@1.3.6: + resolution: {integrity: sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + + charm@0.1.2: + resolution: {integrity: sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + cli-tableau@2.0.1: + resolution: {integrity: sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==} + engines: {node: '>=8.10.0'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@2.15.1: + resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + croner@4.1.97: + resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + culvert@0.1.2: + resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + dayjs@1.11.15: + resolution: {integrity: sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==} + + dayjs@1.8.36: + resolution: {integrity: sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter2@5.0.1: + resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==} + + eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + extrareqp2@1.0.0: + resolution: {integrity: sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==} + + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + + fclone@1.0.11: + resolution: {integrity: sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + + git-node-fs@1.0.0: + resolution: {integrity: sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==} + peerDependencies: + js-git: ^0.7.8 + peerDependenciesMeta: + js-git: + optional: true + + git-sha1@0.1.2: + resolution: {integrity: sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hono@4.11.4: + resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} + engines: {node: '>=16.9.0'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + js-git@0.7.8: + resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lowdb@7.0.1: + resolution: {integrity: sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==} + engines: {node: '>=18'} + + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + + needle@2.4.0: + resolution: {integrity: sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==} + engines: {node: '>= 4.4.x'} + hasBin: true + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidusage@2.0.21: + resolution: {integrity: sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==} + engines: {node: '>=8'} + + pidusage@3.0.2: + resolution: {integrity: sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==} + engines: {node: '>=10'} + + pkijs@3.3.3: + resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} + engines: {node: '>=16.0.0'} + + pm2-axon-rpc@0.7.1: + resolution: {integrity: sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==} + engines: {node: '>=5'} + + pm2-axon@4.0.1: + resolution: {integrity: sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==} + engines: {node: '>=5'} + + pm2-deploy@1.0.2: + resolution: {integrity: sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==} + engines: {node: '>=4.0.0'} + + pm2-multimeter@0.1.2: + resolution: {integrity: sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==} + + pm2-sysmonit@1.2.8: + resolution: {integrity: sha512-ACOhlONEXdCTVwKieBIQLSi2tQZ8eKinhcr9JpZSUAL8Qy0ajIgRtsLxG/lwPOW3JEKqPyw/UaHmTWhUzpP4kA==} + + pm2@6.0.14: + resolution: {integrity: sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==} + engines: {node: '>=16.0.0'} + hasBin: true + + promptly@2.2.0: + resolution: {integrity: sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + read@1.0.7: + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + require-in-the-middle@5.2.0: + resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} + engines: {node: '>=6'} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + run-series@1.1.9: + resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} + + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.1.2: + resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + steno@4.0.2: + resolution: {integrity: sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==} + engines: {node: '>=18'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + systeminformation@5.30.5: + resolution: {integrity: sha512-DpWmpCckhwR3hG+6udb6/aQB7PpiqVnvSljrjbKxNSvTRsGsg7NVE3/vouoYf96xgwMxXFKcS4Ux+cnkFwYM7A==} + engines: {node: '>=8.0.0'} + os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] + hasBin: true + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@1.9.3: + resolution: {integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + + tv4@1.3.0: + resolution: {integrity: sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==} + engines: {node: '>= 0.8.0'} + + tx2@1.0.5: + resolution: {integrity: sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==} + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unstorage@1.17.4: + resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + vizion@2.2.1: + resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} + engines: {node: '>=4.0'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + zod@4.1.8: + resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} + +snapshots: + + '@inquirer/ansi@2.0.3': {} + + '@inquirer/checkbox@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/confirm@6.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/core@11.1.1(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + cli-width: 4.1.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + wrap-ansi: 9.0.2 + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/editor@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/external-editor': 2.0.3(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/expand@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/external-editor@2.0.3(@types/node@25.0.9)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/figures@2.0.3': {} + + '@inquirer/input@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/number@4.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/password@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/prompts@8.2.0(@types/node@25.0.9)': + dependencies: + '@inquirer/checkbox': 5.0.4(@types/node@25.0.9) + '@inquirer/confirm': 6.0.4(@types/node@25.0.9) + '@inquirer/editor': 5.0.4(@types/node@25.0.9) + '@inquirer/expand': 5.0.4(@types/node@25.0.9) + '@inquirer/input': 5.0.4(@types/node@25.0.9) + '@inquirer/number': 4.0.4(@types/node@25.0.9) + '@inquirer/password': 5.0.4(@types/node@25.0.9) + '@inquirer/rawlist': 5.2.0(@types/node@25.0.9) + '@inquirer/search': 4.1.0(@types/node@25.0.9) + '@inquirer/select': 5.0.4(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/rawlist@5.2.0(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/search@4.1.0(@types/node@25.0.9)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/select@5.0.4(@types/node@25.0.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.9) + optionalDependencies: + '@types/node': 25.0.9 + + '@inquirer/type@4.0.3(@types/node@25.0.9)': + optionalDependencies: + '@types/node': 25.0.9 + + '@kevisual/ai@0.0.19': + dependencies: + '@kevisual/logger': 0.0.4 + '@kevisual/permission': 0.0.3 + '@kevisual/query': 0.0.31 + + '@kevisual/app@0.0.2(dotenv@17.2.3)': + dependencies: + '@kevisual/ai': 0.0.19 + '@kevisual/context': 0.0.4 + '@kevisual/query': 0.0.32 + '@kevisual/router': 0.0.39 + '@kevisual/use-config': 1.0.28(dotenv@17.2.3) + mitt: 3.0.1 + nanoid: 5.1.6 + transitivePeerDependencies: + - dotenv + - supports-color + + '@kevisual/cli@0.0.90(@types/node@25.0.9)(dotenv@17.2.3)': + dependencies: + '@inquirer/prompts': 8.2.0(@types/node@25.0.9) + '@kevisual/app': 0.0.2(dotenv@17.2.3) + '@kevisual/context': 0.0.4 + '@kevisual/use-config': 1.0.28(dotenv@17.2.3) + '@opencode-ai/sdk': 1.1.26 + '@types/busboy': 1.5.4 + busboy: 1.6.0 + eventemitter3: 5.0.4 + lowdb: 7.0.1 + lru-cache: 11.2.4 + micromatch: 4.0.8 + pm2: 6.0.14 + semver: 7.7.3 + unstorage: 1.17.4 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - dotenv + - idb-keyval + - ioredis + - supports-color + - uploadthing + - utf-8-validate + + '@kevisual/context@0.0.4': {} + + '@kevisual/js-filter@0.0.5': {} + + '@kevisual/load@0.0.6': + dependencies: + eventemitter3: 5.0.4 + + '@kevisual/logger@0.0.4': {} + + '@kevisual/permission@0.0.3': {} + + '@kevisual/query@0.0.31': {} + + '@kevisual/query@0.0.32': {} + + '@kevisual/router@0.0.39': + dependencies: + path-to-regexp: 8.3.0 + selfsigned: 5.5.0 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@kevisual/router@0.0.58': + dependencies: + hono: 4.11.4 + + '@kevisual/types@0.0.11': {} + + '@kevisual/use-config@1.0.28(dotenv@17.2.3)': + dependencies: + '@kevisual/load': 0.0.6 + dotenv: 17.2.3 + + '@noble/hashes@1.4.0': {} + + '@opencode-ai/plugin@1.1.26': + dependencies: + '@opencode-ai/sdk': 1.1.26 + zod: 4.1.8 + + '@opencode-ai/sdk@1.1.26': {} + + '@peculiar/asn1-cms@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-x509-attr': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.6.0': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-pkcs8': 2.6.0 + '@peculiar/asn1-rsa': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.6.0': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-pfx': 2.6.0 + '@peculiar/asn1-pkcs8': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-x509-attr': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.6.0': + dependencies: + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.6.0': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.6.0 + '@peculiar/asn1-csr': 2.6.0 + '@peculiar/asn1-ecc': 2.6.0 + '@peculiar/asn1-pkcs9': 2.6.0 + '@peculiar/asn1-rsa': 2.6.0 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.0 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + + '@pm2/agent@2.1.1': + dependencies: + async: 3.2.6 + chalk: 3.0.0 + dayjs: 1.8.36 + debug: 4.3.7 + eventemitter2: 5.0.1 + fast-json-patch: 3.1.1 + fclone: 1.0.11 + pm2-axon: 4.0.1 + pm2-axon-rpc: 0.7.1 + proxy-agent: 6.4.0 + semver: 7.5.4 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@pm2/blessed@0.1.81': {} + + '@pm2/io@6.1.0': + dependencies: + async: 2.6.4 + debug: 4.3.7 + eventemitter2: 6.4.9 + require-in-the-middle: 5.2.0 + semver: 7.5.4 + shimmer: 1.2.1 + signal-exit: 3.0.7 + tslib: 1.9.3 + transitivePeerDependencies: + - supports-color + + '@pm2/js-api@0.8.0': + dependencies: + async: 2.6.4 + debug: 4.3.7 + eventemitter2: 6.4.9 + extrareqp2: 1.0.0(debug@4.3.7) + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@pm2/pm2-version-check@1.0.4': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@types/bun@1.3.6': + dependencies: + bun-types: 1.3.6 + + '@types/busboy@1.5.4': + dependencies: + '@types/node': 25.0.9 + + '@types/node@25.0.9': + dependencies: + undici-types: 7.16.0 + + agent-base@7.1.4: {} + + amp-message@0.1.2: + dependencies: + amp: 0.3.1 + + amp@0.3.1: {} + + ansi-colors@4.1.3: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + ansis@4.0.0-node10: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + asn1js@3.0.7: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async@2.6.4: + dependencies: + lodash: 4.17.21 + + async@3.2.6: {} + + basic-ftp@5.1.0: {} + + binary-extensions@2.3.0: {} + + bodec@0.1.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-from@1.1.2: {} + + bun-types@1.3.6: + dependencies: + '@types/node': 25.0.9 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytestreamjs@2.0.1: {} + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chardet@2.1.1: {} + + charm@0.1.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + cli-tableau@2.0.1: + dependencies: + chalk: 3.0.0 + + cli-width@4.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@2.15.1: {} + + cookie-es@1.2.2: {} + + croner@4.1.97: {} + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + culvert@0.1.2: {} + + data-uri-to-buffer@6.0.2: {} + + dayjs@1.11.15: {} + + dayjs@1.8.36: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + defu@6.1.4: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + depd@2.0.0: {} + + destr@2.0.5: {} + + dotenv@17.2.3: {} + + ee-first@1.1.1: {} + + emoji-regex@10.6.0: {} + + encodeurl@2.0.0: {} + + enquirer@2.3.6: + dependencies: + ansi-colors: 4.1.3 + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventemitter2@5.0.1: {} + + eventemitter2@6.4.9: {} + + eventemitter3@5.0.4: {} + + extrareqp2@1.0.0(debug@4.3.7): + dependencies: + follow-redirects: 1.15.11(debug@4.3.7) + transitivePeerDependencies: + - debug + + fast-json-patch@3.1.1: {} + + fclone@1.0.11: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + follow-redirects@1.15.11(debug@4.3.7): + optionalDependencies: + debug: 4.3.7 + + fresh@2.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-east-asian-width@1.4.0: {} + + get-uri@6.0.5: + dependencies: + basic-ftp: 5.1.0 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + git-node-fs@1.0.0(js-git@0.7.8): + optionalDependencies: + js-git: 0.7.8 + + git-sha1@0.1.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + h3@1.15.5: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.3 + uncrypto: 0.1.3 + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hono@4.11.4: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ip-address@10.1.0: {} + + iron-webcrypto@1.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + js-git@0.7.8: + dependencies: + bodec: 0.1.0 + culvert: 0.1.2 + git-sha1: 0.1.2 + pako: 0.2.9 + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: + optional: true + + lodash@4.17.21: {} + + lowdb@7.0.1: + dependencies: + steno: 4.0.2 + + lru-cache@11.2.4: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.54.0: {} + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mitt@3.0.1: {} + + mkdirp@1.0.4: {} + + module-details-from-path@1.0.4: {} + + ms@2.1.3: {} + + mute-stream@0.0.8: {} + + mute-stream@3.0.0: {} + + nanoid@5.1.6: {} + + needle@2.4.0: + dependencies: + debug: 3.2.7 + iconv-lite: 0.4.24 + sax: 1.4.4 + transitivePeerDependencies: + - supports-color + + netmask@2.0.2: {} + + node-fetch-native@1.6.7: {} + + node-mock-http@1.0.4: {} + + normalize-path@3.0.0: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.3 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + pako@0.2.9: {} + + path-parse@1.0.7: {} + + path-to-regexp@8.3.0: {} + + picomatch@2.3.1: {} + + pidusage@2.0.21: + dependencies: + safe-buffer: 5.2.1 + optional: true + + pidusage@3.0.2: + dependencies: + safe-buffer: 5.2.1 + + pkijs@3.3.3: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.7 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + pm2-axon-rpc@0.7.1: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + pm2-axon@4.0.1: + dependencies: + amp: 0.3.1 + amp-message: 0.1.2 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + transitivePeerDependencies: + - supports-color + + pm2-deploy@1.0.2: + dependencies: + run-series: 1.1.9 + tv4: 1.3.0 + + pm2-multimeter@0.1.2: + dependencies: + charm: 0.1.2 + + pm2-sysmonit@1.2.8: + dependencies: + async: 3.2.6 + debug: 4.4.3 + pidusage: 2.0.21 + systeminformation: 5.30.5 + tx2: 1.0.5 + transitivePeerDependencies: + - supports-color + optional: true + + pm2@6.0.14: + dependencies: + '@pm2/agent': 2.1.1 + '@pm2/blessed': 0.1.81 + '@pm2/io': 6.1.0 + '@pm2/js-api': 0.8.0 + '@pm2/pm2-version-check': 1.0.4 + ansis: 4.0.0-node10 + async: 3.2.6 + chokidar: 3.6.0 + cli-tableau: 2.0.1 + commander: 2.15.1 + croner: 4.1.97 + dayjs: 1.11.15 + debug: 4.4.3 + enquirer: 2.3.6 + eventemitter2: 5.0.1 + fclone: 1.0.11 + js-yaml: 4.1.1 + mkdirp: 1.0.4 + needle: 2.4.0 + pidusage: 3.0.2 + pm2-axon: 4.0.1 + pm2-axon-rpc: 0.7.1 + pm2-deploy: 1.0.2 + pm2-multimeter: 0.1.2 + promptly: 2.2.0 + semver: 7.7.2 + source-map-support: 0.5.21 + sprintf-js: 1.1.2 + vizion: 2.2.1 + optionalDependencies: + pm2-sysmonit: 1.2.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + promptly@2.2.0: + dependencies: + read: 1.0.7 + + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + + radix3@1.1.2: {} + + range-parser@1.2.1: {} + + read@1.0.7: + dependencies: + mute-stream: 0.0.8 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@5.0.0: {} + + reflect-metadata@0.2.2: {} + + require-in-the-middle@5.2.0: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + run-series@1.1.9: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sax@1.4.4: {} + + selfsigned@5.5.0: + dependencies: + '@peculiar/x509': 1.14.3 + pkijs: 3.3.3 + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + semver@7.7.3: {} + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + shimmer@1.2.1: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.1.0 + smart-buffer: 4.2.0 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.1.2: {} + + statuses@2.0.2: {} + + steno@4.0.2: {} + + streamsearch@1.1.0: {} + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + systeminformation@5.30.5: + optional: true + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tslib@1.14.1: {} + + tslib@1.9.3: {} + + tslib@2.8.1: {} + + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + + tv4@1.3.0: {} + + tx2@1.0.5: + dependencies: + json-stringify-safe: 5.0.1 + optional: true + + ufo@1.6.3: {} + + uncrypto@0.1.3: {} + + undici-types@7.16.0: {} + + unstorage@1.17.4: + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.5 + lru-cache: 11.2.4 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.3 + + vizion@2.2.1: + dependencies: + async: 2.6.4 + git-node-fs: 1.0.0(js-git@0.7.8) + ini: 1.3.8 + js-git: 0.7.8 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + ws@7.5.10: {} + + yallist@4.0.0: {} + + zod@4.1.8: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..6955fb8 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - '.opencode' \ No newline at end of file diff --git a/src/app.ts b/src/app.ts new file mode 100644 index 0000000..f4badcb --- /dev/null +++ b/src/app.ts @@ -0,0 +1,3 @@ +import { App } from '@kevisual/router' +import { useContextKey } from '@kevisual/context' +export const app = useContextKey('app', () => new App()); \ No newline at end of file diff --git a/src/generated/docs.ts b/src/generated/docs.ts new file mode 100644 index 0000000..1924cdc --- /dev/null +++ b/src/generated/docs.ts @@ -0,0 +1,1307 @@ +// Generated by build script +export const readme = `# Showcase CMS + +展示网站模板集合 - 快速构建专业的静态展示网站或高交互动态网站。 + +--- + +## 模板类型对比 + +| 特性 | 展示型模板(astro) | 互动型模板(next.js) | +|------|-----------|-----------| +| **核心定位** | 信息展示为主 | 用户交互为主 | +| **渲染模式** | 静态生成 (SSG) | 混合渲染 (SSR/SSG/ISR) | +| **内容管理** | Markdown/MDX 文件 | Headless CMS + API | +| **用户系统** | 无 | 多用户 + 权限管理 | +| **交互程度** | 低(浏览为主) | 高(登录、评论、购买) | +| **性能表现** | 极致轻量、快速加载 | 高并发、动态内容 | +| **适用场景** | 企业官网、作品集、博客、文档 | 电商、门户、社区、后台系统 | +| **学习曲线** | 简单 | 中等 | +| **部署难度** | 简单 | 中等 | +| **SEO** | 优秀 | 优秀 | + +--- + +## 展示型模板 (Astro) + +适用于:以信息展示为主的网站,强调性能、SEO和内容管理便捷性。 + +### 适用场景 + +- 企业官网(纯信息展示) +- 个人作品集、摄影集、设计展示 +- 技术博客、文档站点、知识库 +- 活动页面、 Landing Page +- 新闻资讯、媒体发布 + +### 核心特点 + +1. **极简架构** + - 纯静态生成,零运行时依赖 + - 支持 Markdown/MDX 内容创作 + - 文件即路由,目录结构清晰 + +2. **高性能** + - 首屏加载 < 100ms + - 自动图片优化 + - 按需加载 JavaScript + - 支持边缘部署 (Vercel Edge, Cloudflare Pages) + +3. **开箱即用** + - 内置语法高亮 + - 主题切换 (亮色/暗色) + - 响应式图片 + - SEO 元标签自动生成 + +### 功能模块 + +| 模块 | 功能点 | +|------|--------| +| 首页 | Hero区域、核心数据、客户Logo、订阅 | +| 关于我们 | 公司简介、发展历程、团队介绍、资质认证 | +| 产品/服务 | 产品分类、详情介绍、规格参数 | +| 成功案例 | 案例展示、客户评价、Logo墙 | +| 新闻动态 | 新闻列表、分类、RSS订阅 | +| 人才招聘 | 职位列表、福利介绍、简历投递 | +| 联系我们 | 联系信息、表单、地图 | +| 博客/文章 | 文章列表、标签分类、阅读时间 | +| 双语支持 | i18n路由、翻译文件管理 | + +### 技术栈 + +\`\`\`yaml +框架: Astro 4.x +UI 库: 原生 CSS / TailwindCSS (可选) +内容: Markdown / MDX +搜索: Pagefind (本地搜索) +部署: Vercel / Netlify / Cloudflare Pages +\`\`\` + +### 目录结构 + +\`\`\` +astro-website/ +├── src/ +│ ├── components/ # 可复用组件 +│ ├── layouts/ # 页面布局 +│ ├── pages/ # 页面路由 +│ ├── content/ # Markdown/MDX 内容 +│ ├── styles/ # 全局样式 +│ └── utils/ # 工具函数 +├── public/ # 静态资源 +├── astro.config.mjs # 配置文件 +└── package.json +\`\`\` + +--- + +## 互动型模板 (Next.js) + +适用于:以用户交互为主的网站,需要登录、动态内容、在线交易等功能。 + +### 适用场景 + +- 电商平台、B2B商城 +- 门户网站、内容社区 +- 会员制网站、SaaS产品 +- 在线教育、培训平台 +- 需要后台管理的各类网站 + +### 核心特点 + +1. **企业级架构** + - App Router 路由系统 + - Server Components + - 完整的后台管理系统集成 + - 多语言 i18n 支持 + +2. **完整业务支持** + - 用户注册/登录 + - 产品目录管理 + - 新闻发布系统 + - 在线询盘/表单 + - 会员中心 + +3. **灵活扩展** + - 支持多种 CMS (Strapi, Contentful, Sanity) + - API 路由自动生成 + - 组件库按需引入 + - 微前端集成能力 + +### 功能模块 + +| 模块 | 功能点 | +|------|--------| +| 首页 | Hero、核心数据、客户Logo、订阅 | +| 关于我们 | 公司历程、团队介绍、资质认证、办公环境 | +| 产品中心 | 产品分类、详情、对比、规格参数、购物车 | +| 解决方案 | 行业方案、定制服务、成功案例 | +| 新闻动态 | 新闻列表、分类、RSS订阅、媒体资源 | +| 成功案例 | 案例详情、客户评价、Logo墙 | +| 服务支持 | 知识库、FAQ、下载中心、在线客服 | +| 人才招聘 | 职位列表、简历投递、校园招聘 | +| 联系我们 | 表单、地图、客服系统、多分支机构 | +| 合作伙伴 | 合作伙伴门户、渠道政策、专属登录 | +| 会员中心 | 账户管理、订单历史、收藏、消息通知 | +| 在线商城 | 商品管理、支付集成、物流查询、退换货 | +| 投资者关系 | 公告、财报、治理结构(上市公司) | +| 用户系统 | 注册登录、权限管理、OAuth认证 | +| CMS后台 | 内容管理、产品管理、媒体管理、统计分析 | +| 双语支持 | 语言切换、翻译管理、SEO本地化 | + +### 技术栈 + +\`\`\`yaml +框架: Next.js 14+ (App Router) +UI 库: React / TailwindCSS / Shadcn UI +状态管理: Zustand / React Query +表单: React Hook Form + Zod +认证: NextAuth.js / Clerk +CMS: Strapi / Contentful / Sanity (可选) +数据库: PostgreSQL / MySQL (可选) +部署: Vercel / AWS / Docker +\`\`\` + +### 目录结构 + +\`\`\` +nextjs-website/ +├── src/ +│ ├── app/ # App Router 页面 +│ ├── components/ # 可复用组件 +│ ├── lib/ # 工具函数和配置 +│ ├── hooks/ # 自定义 Hooks +│ ├── types/ # TypeScript 类型 +│ ├── services/ # API 服务层 +│ └── store/ # 状态管理 +├── public/ # 静态资源 +├── next.config.js # 配置文件 +└── package.json +\`\`\` + +--- + +## 共享组件库 (待开发) + +两个模板共享同一套组件库,保证视觉一致性: + +\`\`\` +packages/ui/ +├── Button/ # 按钮组件 +├── Card/ # 卡片组件 +├── Modal/ # 弹窗组件 +├── Form/ # 表单组件 +├── Navigation/ # 导航组件 +├── Footer/ # 页脚组件 +├── Input/ # 输入框组件 +├── Select/ # 选择器组件 +├── Table/ # 表格组件 +├── Pagination/ # 分页组件 +├── Carousel/ # 轮播组件 +├── Dropdown/ # 下拉菜单 +├── Toast/ # 提示组件 +└── Skeleton/ # 骨架屏组件 +\`\`\` + +--- + +## 如何选择 + +\`\`\` +需要选择展示型还是互动型? +├── 内容是否主要是静态信息展示? +│ ├── 是 → 选择 Astro 展示型模板 +│ └── 否 → 继续 +├── 是否需要用户登录注册? +│ ├── 是 → 选择 Next.js 互动型模板 +│ └── 否 → 继续 +├── 是否需要在线交易/支付? +│ ├── 是 → 选择 Next.js 互动型模板 +│ └── 否 → 可能只需要展示型 +└── 是否需要复杂的动态交互功能? + ├── 是 → 选择 Next.js 互动型模板 + └── 否 → 选择 Astro 展示型模板 +\`\`\` + +--- + +## 快速开始 + +### 展示型模板 (Astro) + +\`\`\`bash +# 克隆模板 +git clone https://github.com/your-org/showcase-cms +cd showcase-cms/templates/astro-website + +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 构建生产版本 +npm run build +\`\`\` + +### 互动型模板 (Next.js) + +\`\`\`bash +# 克隆模板 +git clone https://github.com/your-org/showcase-cms +cd showcase-cms/templates/nextjs-website + +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 构建生产版本 +npm run build +\`\`\` + +--- + +## 文档链接 + +- [展示型模板功能拆分](docs/website-features-breakdown.md) +- [互动型模板功能拆分](docs/enterprise-website-features.md) + +--- + +## 贡献指南 + +欢迎贡献代码或提出建议。请先阅读贡献指南。 + +--- + +## 许可证 + +MIT License +`; +export const website_features_breakdown = `# 个人展示网站功能拆分文档 + +## 概述 +本文档梳理建立个人展示网站或者作品集的具体功能需求,按章节进行拆分和记录。 + +--- + +## 第一章:首页 (Home) + +### 1.1 Hero 区域 +- 大标题(个人姓名/品牌标识) +- 副标题(职业/角色定位) +- 简介文字(一句话概括) +- CTA按钮(查看作品、联系我) +- 背景视觉元素(图片/渐变/动画) + +### 1.2 快速概览 +- 个人照片/头像 +- 核心技能标签 +- 社交媒体链接 + +--- + +## 第二章:关于我 (About Me) + +### 2.1 个人介绍 +- 详细个人简介 +- 教育背景 +- 工作经历 +- 个人故事/理念 + +### 2.2 技能展示 +- 技术栈列表 +- 熟练程度可视化 +- 工具使用 + +### 2.3 兴趣爱好 +- 个人爱好展示 +- 其他技能 + +--- + +## 第三章:项目展示 (Portfolio/Projects) + +### 3.1 项目列表 +- 项目缩略图 +- 项目标题 +- 项目描述 +- 技术栈标签 +- 链接按钮(查看详情、演示、源码) + +### 3.2 项目分类 +- 按类型分类 +- 按技术栈筛选 +- 按时间排序 + +### 3.3 项目详情页 +- 项目背景 +- 功能特性 +- 技术实现 +- 截图/视频 +- 面临的挑战与解决方案 +- 项目链接 + +--- + +## 第四章:博客/文章 (Blog) + +### 4.1 文章列表 +- 文章标题 +- 发表日期 +- 阅读时间 +- 摘要 +- 分类标签 + +### 4.2 文章详情 +- 文章正文 +- 目录导航 +- 代码高亮 +- 相关文章推荐 + +### 4.3 分类系统 +- 按主题分类 +- 按技术分类 + +--- + +## 第五章:联系信息 (Contact) + +### 5.1 联系表单 +- 姓名输入 +- 邮箱输入 +- 主题选择 +- 消息内容 +- 提交按钮 + +### 5.2 联系信息 +- 邮箱地址 +- 社交媒体链接 +- 地理位置 +- 可用时间 + +--- + +## 第六章:导航系统 + +### 6.1 主导航 +- 首页 +- 关于我 +- 项目展示 +- 博客 +- 联系 + +### 6.2 辅助导航 +- 返回顶部按钮 +- 面包屑导航 +- 页脚导航 + +--- + +## 第七章:页脚 (Footer) + +### 7.1 版权信息 +- 年份 +- 姓名/品牌 + +### 7.2 社交链接 +- GitHub +- LinkedIn +- Twitter +- 其他平台 + +### 7.3 快速链接 +- 隐私政策 +- 网站地图 + +--- + +## 第八章:通用组件 + +### 8.1 按钮 +- 主要按钮 +- 次要按钮 +- 图标按钮 + +### 8.2 卡片 +- 项目卡片 +- 技能卡片 +- 文章卡片 + +### 8.3 模态框 +- 图片预览 +- 视频播放 +- 联系表单 + +--- + +## 第九章:响应式设计 + +### 9.1 桌面端 (Desktop) +- 1920px+ +- 1440px +- 1280px + +### 9.2 平板端 (Tablet) +- 1024px +- 768px + +### 9.3 移动端 (Mobile) +- 480px +- 375px + +--- + +## 第十章:交互效果 + +### 10.1 页面过渡 +- 加载动画 +- 页面切换效果 + +### 10.2 悬停效果 +- 按钮悬停 +- 卡片悬停 +- 图片缩放 + +### 10.3 滚动效果 +- 滚动触发动画 +- 视差效果 +- 固定导航 + +--- + +## 第十一章:SEO与性能 + +### 11.1 SEO优化 +- Meta标签 +- Open Graph +- Sitemap +- Robots.txt + +### 11.2 性能优化 +- 图片懒加载 +- 代码分割 +- 缓存策略 + +--- + +## 第十二章:无障碍访问 + +### 12.1 键盘导航 +- Tab键导航 +- 快捷键支持 + +### 12.2 屏幕阅读器 +- ARIA标签 +- 替代文本 + +--- + +## 第十三章:主题与定制 + +### 13.1 亮色主题 +- 配色方案 +- 字体选择 + +### 13.2 暗色主题 +- 配色方案 +- 字体选择 + +### 13.3 主题切换 +- 自动切换 +- 手动切换 + +--- + +## 第十四章:双语支持 (Bilingual Support) + +### 14.1 语言切换 +- 语言切换按钮/开关 +- 语言状态持久化(保存用户选择) +- 当前语言指示器 + +### 14.2 国际化架构 +- 国际化配置文件(JSON/YAML) +- 文本内容管理 +- 日期/时间格式化 +- 数字格式化 +- 复数形式处理 + +### 14.3 翻译内容 +- 静态文本翻译 +- 动态内容翻译 +- SEO翻译(meta、og:title、og:description) +- 图片ALT文本翻译 + +### 14.4 路由配置 +- 语言前缀URL(如 /en/, /zh/) +- 默认语言设置 +- 语言切换时URL更新 + +### 14.5 语言检测 +- 浏览器语言偏好检测 +- 首次访问自动跳转 +- 手动覆盖选项 + +### 14.6 内容管理 +- CMS多语言支持 +- 文章/博客双语版本管理 +- 项目描述双语支持 + +### 14.7 字体与排版 +- 中文字体配置 +- 英文字体配置 +- 多语言混排优化 + +--- + +## 总结 + +本文档涵盖了建立个人展示网站的所有核心功能模块。后续可根据实际需求进行调整和扩展。 +`; +export const enterprise_website_features = `# 企业展示网站功能拆分文档 + +## 概述 +本文档梳理建立企业展示网站的具体功能需求,按章节进行拆分和记录。 + +--- + +## 第一章:首页 (Home) + +### 1.1 头部区域 +- 企业Logo +- 主导航菜单 +- 搜索功能 +- 语言切换 +- 登录/注册入口 + +### 1.2 Hero 区域 +- 核心价值主张 (Value Proposition) +- 企业标语 (Tagline) +- 主要行动按钮 (CTA) +- 背景视频/轮播图 +- 客户信任标识(Logo展示) + +### 1.3 核心数据展示 +- 公司成立年份 +- 服务客户数量 +- 成功案例数 +- 团队规模 + +### 1.4 服务概览 +- 核心业务展示 +- 服务特点 +- 快速链接卡片 + +### 1.5 客户评价 +- 客户Logo +- 简短评价 +- 客户姓名/职位 + +### 1.6 最新动态 +- 最新新闻 +- 公司动态 +- 行业资讯 + +### 1.7 订阅区域 +- 邮件订阅表单 +- 社交媒体链接 + +--- + +## 第二章:关于我们 (About Us) + +### 2.1 公司简介 +- 公司发展历程 +- 使命与愿景 +- 核心价值观 +- 发展里程碑 + +### 2.2 企业文化 +- 企业精神 +- 工作氛围 +- 团队活动展示 + +### 2.3 发展历程 +- 时间线展示 +- 重大事件 +- 成长数据 + +### 2.4 团队介绍 +- 管理团队 +- 核心成员 +- 团队照片墙 +- 招聘入口 + +### 2.5 资质认证 +- 营业执照 +- 行业资质 +- 荣誉证书 +- 专利技术 + +### 2.6 办公环境 +- 办公环境照片 +- 视频展示 +- 360度全景 + +--- + +## 第三章:产品与解决方案 (Products & Solutions) + +### 3.1 产品分类 +- 产品类别导航 +- 产品列表 +- 产品对比功能 + +### 3.2 产品详情页 +- 产品介绍 +- 功能特性 +- 规格参数 +- 价格信息 +- 购买/咨询按钮 + +### 3.3 解决方案 +- 行业解决方案 +- 定制化方案 +- 成功案例展示 +- 方案优势 + +### 3.4 产品演示 +- 视频演示 +- 在线试用 +- 下载中心(手册、白皮书) + +### 3.5 定价方案 +- 套餐对比 +- 价格表 +- FAQ +- 咨询销售 + +--- + +## 第四章:成功案例 (Case Studies) + +### 4.1 案例列表 +- 案例分类筛选 +- 案例卡片展示 +- 搜索功能 + +### 4.2 案例详情 +- 客户背景 +- 面临挑战 +- 解决方案 +- 实施过程 +- 项目成果 +- 客户评价 +- 相关截图/视频 + +### 4.3 客户Logo墙 +- 行业分类 +- Logo展示 +- 客户评价引用 + +### 4.4 客户评价 +- 视频评价 +- 文字评价 +- 评价管理后台 + +--- + +## 第五章:服务支持 (Service & Support) + +### 5.1 服务类型 +- 咨询服务 +- 实施服务 +- 培训服务 +- 运维服务 +- 定制开发 + +### 5.2 售后服务 +- 保修政策 +- 退换货政策 +- 维修服务 +- 技术支持 + +### 5.3 知识库 +- 使用手册 +- 常见问题 (FAQ) +- 操作视频 +- 技术文档 + +### 5.4 下载中心 +- 产品手册 +- 软件更新 +- 驱动程序 +- 技术白皮书 + +--- + +## 第六章:新闻与动态 (News & Press) + +### 6.1 新闻列表 +- 新闻分类(公司动态、行业新闻、产品更新) +- 时间线展示 +- 搜索功能 + +### 6.2 新闻详情 +- 正文内容 +- 配图/视频 +- 分享功能 +- 相关文章推荐 + +### 6.3 新闻订阅 +- RSS订阅 +- 邮件订阅 +- 通知设置 + +### 6.4 媒体资源 +- 新闻稿下载 +- 媒体联系 +- Logo/素材下载 + +--- + +## 第七章:人才招聘 (Careers) + +### 7.1 招聘职位 +- 职位列表 +- 部门分类 +- 地点筛选 +- 搜索功能 + +### 7.2 职位详情 +- 职位描述 +- 任职要求 +- 薪资范围 +- 工作地点 +- 申请按钮 + +### 7.3 福利待遇 +- 薪酬体系 +- 员工福利 +- 培训发展 +- 团建活动 + +### 7.4 申请流程 +- 在线投递 +- 简历上传 +- 状态追踪 + +### 7.5 校园招聘 +- 招聘行程 +- 宣讲会信息 +- 实习生项目 + +--- + +## 第八章:联系我们 (Contact Us) + +### 8.1 联系信息 +- 公司地址 +- 联系电话 +- 客服热线 +- 邮箱地址 +- 传真号码 + +### 8.2 在线表单 +- 咨询类型选择 +- 姓名/公司 +- 邮箱/电话 +- 消息内容 +- 文件上传 +- 验证码 + +### 8.3 地图集成 +- 公司位置地图 +- 分支机构地图 +- 路线规划 + +### 8.4 分支机构 +- 各地办公室列表 +- 联系方式 +- 地图展示 + +### 8.5 客服系统 +- 在线客服聊天 +- 智能客服机器人 +- 服务时间显示 + +### 8.6 社交媒体 +- 微信公众号 +- 微博 +- 抖音 +- LinkedIn + +--- + +## 第九章:合作伙伴 (Partners) + +### 9.1 合作伙伴类型 +- 技术合作伙伴 +- 渠道合作伙伴 +- 战略合作伙伴 +- 供应商 + +### 9.2 合作计划 +- 合作伙伴等级 +- 权益说明 +- 申请流程 + +### 9.3 合作伙伴登录 +- 专属门户 +- 资源下载 +- 培训资料 +- 业绩查询 + +### 9.4 渠道政策 +- 代理政策 +- 分成比例 +- 激励计划 + +--- + +## 第十章:投资者关系 (Investor Relations) + +### 10.1 公司公告 +- 重大事项 +- 公告发布 +- 归档查询 + +### 10.2 财务信息 +- 季度财报 +- 年度报告 +- 财务数据 + +### 10.3 投资者服务 +- 股票信息 +- 投资者日历 +- 股东大会 + +### 10.4 公司治理 +- 董事会 +- 管理团队 +- 规章制度 + +--- + +## 第十一章:在线商城/电子商务 (E-commerce) + +### 11.1 产品展示 +- 商品分类 +- 商品列表 +- 商品详情 +- 库存状态 + +### 11.2 购物功能 +- 购物车 +- 订单管理 +- 支付集成 +- 物流查询 + +### 11.3 会员系统 +- 用户注册/登录 +- 会员等级 +- 积分系统 +- 优惠券 + +### 11.4 订单管理 +- 订单历史 +- 订单跟踪 +- 退换货 + +--- + +## 第十二章:会员中心 (User Center) + +### 12.1 账户管理 +- 个人资料 +- 密码修改 +- 账号绑定 + +### 12.2 消息中心 +- 系统通知 +- 订单通知 +- 消息设置 + +### 12.3 收藏管理 +- 收藏商品 +- 收藏文章 + +### 12.4 订单历史 +- 全部订单 +- 订单状态 +- 订单详情 + +### 12.5 发票管理 +- 发票申请 +- 发票历史 + +--- + +## 第十三章:导航系统 + +### 13.1 主导航 +- 一级菜单 +- 二级下拉菜单 +- Mega Menu(大导航菜单) + +### 13.2 面包屑导航 +- 层级显示 +- 返回功能 + +### 13.3 页内导航 +- 锚点导航 +- 目录跳转 + +### 13.4 搜索功能 +- 全站搜索 +- 智能提示 +- 搜索结果页 + +### 13.5 快捷入口 +- 收藏夹 +- 历史记录 +- 快速链接 + +--- + +## 第十四章:页脚 (Footer) + +### 14.1 链接区域 +- 产品服务 +- 解决方案 +- 关于我们 +- 支持中心 + +### 14.2 联系信息 +- 地址电话 +- 服务时间 +- 在线客服入口 + +### 14.3 社交媒体 +- 图标链接 +- 二维码展示 +- 公众号 + +### 14.4 订阅区域 +- 邮件订阅 +- 隐私政策 +- 使用条款 + +### 14.5 版权信息 +- 版权声明 +- ICP备案 +- 公安备案 + +--- + +## 第十五章:通用组件 + +### 15.1 按钮 +- 主要按钮 +- 次要按钮 +- 危险按钮 +- 禁用状态 +- 加载状态 + +### 15.2 卡片 +- 信息卡片 +- 产品卡片 +- 新闻卡片 +- 团队卡片 + +### 15.3 表单 +- 输入框 +- 下拉选择 +- 复选框 +- 文件上传 +- 表单验证 + +### 15.4 弹窗 +- 提示弹窗 +- 确认弹窗 +- 模态框 +- 侧边栏 + +### 15.5 分页 +- 页码导航 +- 加载更多 +- 无限滚动 + +### 15.6 轮播 +- 图片轮播 +- 文字轮播 +- 卡片轮播 + +--- + +## 第十六章:内容管理系统 (CMS) + +### 16.1 文章管理 +- 新增/编辑/删除 +- 分类管理 +- 标签管理 +- 草稿/发布 +- 定时发布 + +### 16.2 产品管理 +- 产品CRUD +- 分类管理 +- 属性管理 +- 库存管理 +- SKU管理 + +### 16.3 页面管理 +- 首页管理 +- 自定义页面 +- 模板管理 + +### 16.4 媒体管理 +- 图片上传 +- 视频管理 +- 文件管理 +- 图库 + +### 16.5 用户管理 +- 用户列表 +- 角色管理 +- 权限管理 +- 操作日志 + +### 16.6 数据统计 +- 访问统计 +- 用户统计 +- 内容统计 +- 报表导出 + +--- + +## 第十七章:响应式设计 + +### 17.1 断点定义 +- 超大屏 (≥1920px) +- 大屏 (≥1440px) +- 中屏 (≥1024px) +- 小屏 (≥768px) +- 超小屏 (<768px) + +### 17.2 布局适配 +- 栅格系统 +- Flex布局 +- 百分比布局 + +### 17.3 组件适配 +- 导航菜单(汉堡菜单) +- 表格(横向滚动/折叠) +- 图片(响应式图片) +- 视频(自适应) + +--- + +## 第十八章:交互效果 + +### 18.1 页面过渡 +- 加载动画 +- 页面切换 +- 骨架屏 + +### 18.2 悬停效果 +- 按钮状态 +- 卡片浮起 +- 图片缩放 +- 颜色变化 + +### 18.3 滚动效果 +- 视差滚动 +- 滚动动画 +- 导航栏固定 +- 返回顶部 + +### 18.4 交互动效 +- 弹跳效果 +- 渐变效果 +- 旋转效果 +- 过渡动画 + +--- + +## 第十九章:SEO与性能 + +### 19.1 SEO优化 +- Meta标签 +- Open Graph +- JSON-LD结构化数据 +- Sitemap +- Robots.txt +- Canonical标签 + +### 19.2 性能优化 +- 图片压缩 +- 懒加载 +- 代码分割 +- Tree Shaking +- Gzip/Brotli压缩 +- CDN加速 + +### 19.3 缓存策略 +- 浏览器缓存 +- Service Worker +- 缓存策略配置 + +--- + +## 第二十章:双语支持 (Bilingual Support) + +### 20.1 语言切换 +- 语言切换器 +- 状态持久化 +- 当前语言指示 + +### 20.2 国际化架构 +- 翻译文件管理 +- 日期/时间格式化 +- 数字/货币格式化 + +### 20.3 路由配置 +- 语言前缀URL +- 默认语言设置 +- 域名绑定(可选) + +### 20.4 内容管理 +- CMS多语言 +- 翻译工作流 +- 翻译审核 + +### 20.5 SEO本地化 +- 多语言meta +- hreflang标签 +- 站点地图多语言 + +--- + +## 第二十一章:无障碍访问 + +### 21.1 键盘导航 +- Tab顺序 +- 快捷键 +- 焦点指示 + +### 21.2 屏幕阅读器 +- ARIA标签 +- 替代文本 +- 语义化HTML + +### 21.3 视觉无障碍 +- 颜色对比度 +- 可调节字体 +- 不依赖颜色传递信息 + +### 21.4 认知无障碍 +- 清晰导航 +- 简单语言 +- 错误提示 + +--- + +## 第二十二章:安全特性 + +### 22.1 身份认证 +- 登录/注册 +- 忘记密码 +- 双重验证 +- OAuth登录 + +### 22.2 数据安全 +- HTTPS +- 数据加密 +- CSRF防护 +- XSS防护 +- SQL注入防护 + +### 22.3 访问控制 +- 角色权限 +- 访问日志 +- IP限制 + +### 22.4 业务安全 +- 验证码 +- 频率限制 +- 敏感操作确认 + +--- + +## 第二十三章:第三方集成 + +### 23.1 分析统计 +- Google Analytics +- 百度统计 +- 其他分析工具 + +### 23.2 客服系统 +- 智齿客服 +- Udesk + +### 23.3 社交分享 +- 分享组件 +- 登录组件 +- 点赞组件 + +### 23.4 支付集成 +- 支付宝 +- 微信支付 +- 银联支付 +- PayPal +- Stripe + +### 23.5 地图服务 +- 高德地图 +- 百度地图 +- Google Maps + +### 23.6 邮件服务 +- SendCloud +- 阿里云邮件 +- 邮件模板 + +--- + +## 第二十四章:监控与运维 + +### 24.1 监控告警 +- 服务器监控 +- 应用监控 +- 日志收集 +- 告警通知 + +### 24.2 日志管理 +- 访问日志 +- 错误日志 +- 操作日志 + +### 24.3 备份恢复 +- 数据库备份 +- 文件备份 +- 灾难恢复 + +### 24.4 部署发布 +- CI/CD流程 +- 版本管理 +- 回滚机制 + +--- + +## 总结 + +本文档涵盖了建立企业展示网站的所有核心功能模块。企业网站相比个人网站,更强调: +- 品牌专业性展示 +- 多层级产品/服务展示 +- 客户信任背书 +- 商业转化(询盘、订单) +- 多用户系统 +- 内容管理便捷性 +- SEO与营销支持 + +后续可根据具体行业和企业规模进行调整和扩展。 +`; diff --git a/src/inline.ts b/src/inline.ts new file mode 100644 index 0000000..7338ac6 --- /dev/null +++ b/src/inline.ts @@ -0,0 +1,46 @@ +import { BunFile } from 'bun'; +import path from 'path'; +import fs from 'fs'; + +async function inlineMarkdownFiles() { + // 读取所有 MD 文件 + const files = [ + // { path: '../README.md', name: 'readme' }, + // { path: '../docs/api.md', name: 'apiDoc' }, + ]; + const readme = path.join(import.meta.dir, '..', 'README.md'); + files.push({ path: readme, name: 'readme' }); + // list docs files dynamically if needed + const rootDir = path.join(import.meta.dir, '..', 'docs'); + const dirEntries = fs.readdirSync(rootDir, { withFileTypes: true }); + for (const entry of dirEntries) { + const filename = 'name' in entry ? entry.name : entry; + if (filename.endsWith('.md')) { + const name = path.basename(filename, '.md').replace(/[^a-zA-Z0-9_]/g, '_'); + files.push({ path: path.join(rootDir, filename), name }); + } + } + + let generatedCode = '// Generated by build script\n'; + + for (const file of files) { + try { + const content = await Bun.file(file.path).text(); + // 转义模板字符串中的特殊字符 + const escapedContent = content + .replace(/\\/g, '\\\\') + .replace(/`/g, '\\`') + .replace(/\${/g, '\\${'); + + generatedCode += `export const ${file.name} = \`${escapedContent}\`;\n`; + } catch (error) { + console.warn(`Failed to read ${file.path}:`, error); + generatedCode += `export const ${file.name} = '';\n`; + } + } + + // 写入生成的文件 + await Bun.write('./src/generated/docs.ts', generatedCode); +} + +await inlineMarkdownFiles(); \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..1376e81 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,9 @@ +import { app } from './app.ts'; +import { createRouterAgentPluginFn } from '@kevisual/router/src/opencode.ts' +import { Plugin } from '@opencode-ai/plugin' +import './routes/index.ts'; + +export const docsAgentPlugin: Plugin = createRouterAgentPluginFn({ + // @ts-ignore + router: app.router, +}); \ No newline at end of file diff --git a/src/routes/index.ts b/src/routes/index.ts new file mode 100644 index 0000000..506e3e9 --- /dev/null +++ b/src/routes/index.ts @@ -0,0 +1 @@ +import './md.ts'; \ No newline at end of file diff --git a/src/routes/md.ts b/src/routes/md.ts new file mode 100644 index 0000000..30a0d34 --- /dev/null +++ b/src/routes/md.ts @@ -0,0 +1,41 @@ +import * as docs from '../generated/docs.ts'; + +import { app } from '../app.ts' +import path from 'path'; +import fs from 'fs'; +import { createSkill, tool } from '@kevisual/router'; + +// 初始化init-web-todo 任务, 使用astro +app.route({ + path: 'web-todo', + key: 'init', + description: '初始化需要做的任务', + metadata: { + tags: ['opencode'], + ...createSkill({ + skill: 'init-web-todo', + title: '初始化 Web Todo 项目', + summary: '初始化需要做的任务', + args: { + type: tool.schema.string().describe('初始化类型, astro 或者 nextjs'), + force: tool.schema.boolean().optional().describe('是否强制覆盖已存在的 TODO.md 文件'), + } + }) + } +}).define(async (ctx) => { + const type = ctx.query?.type || 'astro'; + const force = ctx.query?.force ?? false; + const todo = path.join(process.cwd(), 'TODO.md'); + if (fs.existsSync(todo)) { + if (!force) { + ctx.body = { + content: 'TODO.md 文件已经存在。如需覆盖,请使用 --force 参数。', + } + return; + } + } + const template = type === 'nextjs' ? docs.enterprise_website_features : docs.website_features_breakdown; + ctx.body = { + content: `根据下面的文档,生成一个任务清单,写入到TODO.md 文件中, 使用技术:${type}:\n\n${template}`, + } +}).addTo(app); \ No newline at end of file