This commit is contained in:
2025-12-09 13:40:41 +08:00
parent 9127df2600
commit 5b83f7a6d1
9 changed files with 442 additions and 113 deletions

View File

@@ -10,7 +10,7 @@
], ],
"author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)", "author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)",
"license": "MIT", "license": "MIT",
"packageManager": "pnpm@10.24.0", "packageManager": "pnpm@10.25.0",
"type": "module", "type": "module",
"files": [ "files": [
"dist", "dist",
@@ -41,18 +41,18 @@
} }
}, },
"devDependencies": { "devDependencies": {
"@kevisual/ai": "^0.0.16", "@kevisual/ai": "^0.0.19",
"@kevisual/load": "^0.0.6", "@kevisual/load": "^0.0.6",
"@kevisual/local-app-manager": "^0.1.32", "@kevisual/local-app-manager": "^0.1.32",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/query": "0.0.31", "@kevisual/query": "0.0.31",
"@kevisual/query-login": "0.0.7", "@kevisual/query-login": "0.0.7",
"@kevisual/router": "^0.0.33", "@kevisual/router": "^0.0.36",
"@kevisual/types": "^0.0.10", "@kevisual/types": "^0.0.10",
"@kevisual/use-config": "^1.0.21", "@kevisual/use-config": "^1.0.21",
"@types/bun": "^1.3.3", "@types/bun": "^1.3.4",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^24.10.1", "@types/node": "^24.10.2",
"@types/send": "^1.2.1", "@types/send": "^1.2.1",
"@types/ws": "^8.18.1", "@types/ws": "^8.18.1",
"chalk": "^5.6.2", "chalk": "^5.6.2",

View File

@@ -41,6 +41,7 @@
], ],
"author": "abearxiong", "author": "abearxiong",
"dependencies": { "dependencies": {
"@kevisual/app": "^0.0.1",
"@kevisual/context": "^0.0.4", "@kevisual/context": "^0.0.4",
"@kevisual/hot-api": "^0.0.3", "@kevisual/hot-api": "^0.0.3",
"@nut-tree-fork/nut-js": "^4.2.6", "@nut-tree-fork/nut-js": "^4.2.6",
@@ -58,11 +59,11 @@
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/query": "0.0.31", "@kevisual/query": "0.0.31",
"@kevisual/query-login": "0.0.7", "@kevisual/query-login": "0.0.7",
"@types/bun": "^1.3.3", "@types/bun": "^1.3.4",
"@types/crypto-js": "^4.2.2", "@types/crypto-js": "^4.2.2",
"@types/jsonwebtoken": "^9.0.10", "@types/jsonwebtoken": "^9.0.10",
"@types/micromatch": "^4.0.10", "@types/micromatch": "^4.0.10",
"@types/node": "^24.10.1", "@types/node": "^24.10.2",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.1",
"chalk": "^5.6.2", "chalk": "^5.6.2",
"commander": "^14.0.2", "commander": "^14.0.2",

423
pnpm-lock.yaml generated
View File

@@ -8,6 +8,9 @@ importers:
.: .:
dependencies: dependencies:
'@kevisual/app':
specifier: ^0.0.1
version: 0.0.1(dotenv@17.2.3)
'@kevisual/context': '@kevisual/context':
specifier: ^0.0.4 specifier: ^0.0.4
version: 0.0.4 version: 0.0.4
@@ -55,8 +58,8 @@ importers:
specifier: 0.0.7 specifier: 0.0.7
version: 0.0.7(@kevisual/query@0.0.31) version: 0.0.7(@kevisual/query@0.0.31)
'@types/bun': '@types/bun':
specifier: ^1.3.3 specifier: ^1.3.4
version: 1.3.3 version: 1.3.4
'@types/crypto-js': '@types/crypto-js':
specifier: ^4.2.2 specifier: ^4.2.2
version: 4.2.2 version: 4.2.2
@@ -67,8 +70,8 @@ importers:
specifier: ^4.0.10 specifier: ^4.0.10
version: 4.0.10 version: 4.0.10
'@types/node': '@types/node':
specifier: ^24.10.1 specifier: ^24.10.2
version: 24.10.1 version: 24.10.2
'@types/semver': '@types/semver':
specifier: ^7.7.1 specifier: ^7.7.1
version: 7.7.1 version: 7.7.1
@@ -95,7 +98,7 @@ importers:
version: 7.0.5 version: 7.0.5
inquirer: inquirer:
specifier: ^13.0.2 specifier: ^13.0.2
version: 13.0.2(@types/node@24.10.1) version: 13.0.2(@types/node@24.10.2)
jsonwebtoken: jsonwebtoken:
specifier: ^9.0.3 specifier: ^9.0.3
version: 9.0.3 version: 9.0.3
@@ -131,8 +134,8 @@ importers:
version: 1.17.3(idb-keyval@6.2.1) version: 1.17.3(idb-keyval@6.2.1)
devDependencies: devDependencies:
'@kevisual/ai': '@kevisual/ai':
specifier: ^0.0.16 specifier: ^0.0.19
version: 0.0.16 version: 0.0.19
'@kevisual/load': '@kevisual/load':
specifier: ^0.0.6 specifier: ^0.0.6
version: 0.0.6 version: 0.0.6
@@ -149,8 +152,8 @@ importers:
specifier: 0.0.7 specifier: 0.0.7
version: 0.0.7(@kevisual/query@0.0.31) version: 0.0.7(@kevisual/query@0.0.31)
'@kevisual/router': '@kevisual/router':
specifier: ^0.0.33 specifier: ^0.0.36
version: 0.0.33(supports-color@10.2.2) version: 0.0.36(supports-color@10.2.2)
'@kevisual/types': '@kevisual/types':
specifier: ^0.0.10 specifier: ^0.0.10
version: 0.0.10 version: 0.0.10
@@ -158,14 +161,14 @@ importers:
specifier: ^1.0.21 specifier: ^1.0.21
version: 1.0.21(dotenv@17.2.3) version: 1.0.21(dotenv@17.2.3)
'@types/bun': '@types/bun':
specifier: ^1.3.3 specifier: ^1.3.4
version: 1.3.3 version: 1.3.4
'@types/lodash-es': '@types/lodash-es':
specifier: ^4.17.12 specifier: ^4.17.12
version: 4.17.12 version: 4.17.12
'@types/node': '@types/node':
specifier: ^24.10.1 specifier: ^24.10.2
version: 24.10.1 version: 24.10.2
'@types/send': '@types/send':
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1 version: 1.2.1
@@ -192,7 +195,7 @@ importers:
version: 7.1.0 version: 7.1.0
inquirer: inquirer:
specifier: ^13.0.2 specifier: ^13.0.2
version: 13.0.2(@types/node@24.10.1) version: 13.0.2(@types/node@24.10.2)
lodash-es: lodash-es:
specifier: ^4.17.21 specifier: ^4.17.21
version: 4.17.21 version: 4.17.21
@@ -535,6 +538,12 @@ packages:
'@kevisual/ai@0.0.16': '@kevisual/ai@0.0.16':
resolution: {integrity: sha512-K5KYm+dwHCnB61BhVFh9UcWiOS/FeS29ijvgwE/cQR8RonfPtX/oI7WhAu0jCGGSxTI6cel2LjrpU4JoVzWgnA==} resolution: {integrity: sha512-K5KYm+dwHCnB61BhVFh9UcWiOS/FeS29ijvgwE/cQR8RonfPtX/oI7WhAu0jCGGSxTI6cel2LjrpU4JoVzWgnA==}
'@kevisual/ai@0.0.19':
resolution: {integrity: sha512-AFc8m6OcHZNxCb88bvzhvwWTZ4EVYyPupBzPUsLKLpdNBvsqm9TRboKCM2brJj2cqHnm+H+RbAk9AcGJkYhRCA==}
'@kevisual/app@0.0.1':
resolution: {integrity: sha512-PEx8P3l0iNSqrz9Ib9kVCYfqNMX6/LfNu+cEafmY6ECP1cV5Vmv+TH2fuasMosKjtbH2fAdDi97sbd29tdEK+g==}
'@kevisual/cache@0.0.3': '@kevisual/cache@0.0.3':
resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==} resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==}
@@ -574,6 +583,9 @@ packages:
'@kevisual/router@0.0.33': '@kevisual/router@0.0.33':
resolution: {integrity: sha512-9z7TkSzCIGbXn9SuHPBdZpGwHlAuwA8iN5jNAZBUvbEvBRkBxlrbdCSe9fBYiAHueLm2AceFNrW74uulOiAkqA==} resolution: {integrity: sha512-9z7TkSzCIGbXn9SuHPBdZpGwHlAuwA8iN5jNAZBUvbEvBRkBxlrbdCSe9fBYiAHueLm2AceFNrW74uulOiAkqA==}
'@kevisual/router@0.0.36':
resolution: {integrity: sha512-o7GAb5T0WwRuHnWe3KB0/SPVaNHrnsFSNAQ9XuWokobfDP1ACFvOR9/rjbC0fbGFaeTeRKAprixxKkY1sfunBw==}
'@kevisual/types@0.0.10': '@kevisual/types@0.0.10':
resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==} resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==}
@@ -586,6 +598,10 @@ packages:
resolution: {integrity: sha512-jlFxSlXUEz93cFW+UYT5BXv/rFVgiMQnIfqRYZ0gj1hSP8PMGRqMqUoHSLfKvfRRS4jseLSvTTeEKSQpZJtURg==} resolution: {integrity: sha512-jlFxSlXUEz93cFW+UYT5BXv/rFVgiMQnIfqRYZ0gj1hSP8PMGRqMqUoHSLfKvfRRS4jseLSvTTeEKSQpZJtURg==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
'@noble/hashes@1.4.0':
resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
engines: {node: '>= 16'}
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
@@ -639,6 +655,40 @@ packages:
'@nut-tree-fork/shared@4.2.6': '@nut-tree-fork/shared@4.2.6':
resolution: {integrity: sha512-xZaa0YtJt/DDDq/i1vZkabjq8HOWzfhXieMai61cMbYD11J6VhAfhV23ZtQEM02WG7nc2LKjl4UwRnQCteikwA==} resolution: {integrity: sha512-xZaa0YtJt/DDDq/i1vZkabjq8HOWzfhXieMai61cMbYD11J6VhAfhV23ZtQEM02WG7nc2LKjl4UwRnQCteikwA==}
'@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.2':
resolution: {integrity: sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==}
engines: {node: '>=22.0.0'}
'@pkgjs/parseargs@0.11.0': '@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'} engines: {node: '>=14'}
@@ -811,8 +861,8 @@ packages:
'@types/braces@3.0.5': '@types/braces@3.0.5':
resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==}
'@types/bun@1.3.3': '@types/bun@1.3.4':
resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} resolution: {integrity: sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA==}
'@types/crypto-js@4.2.2': '@types/crypto-js@4.2.2':
resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
@@ -838,8 +888,8 @@ packages:
'@types/node@16.9.1': '@types/node@16.9.1':
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
'@types/node@24.10.1': '@types/node@24.10.2':
resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==}
'@types/react@19.1.9': '@types/react@19.1.9':
resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==}
@@ -915,6 +965,10 @@ packages:
argparse@2.0.1: argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
asn1js@3.0.6:
resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==}
engines: {node: '>=12.0.0'}
ast-types@0.13.4: ast-types@0.13.4:
resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
engines: {node: '>=4'} engines: {node: '>=4'}
@@ -994,8 +1048,12 @@ packages:
buffer@6.0.3: buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
bun-types@1.3.3: bun-types@1.3.4:
resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} resolution: {integrity: sha512-5ua817+BZPZOlNaRgGBpZJOSAQ9RQ17pkwPD0yR7CfJg+r8DgIILByFifDTa+IPDDxzf5VNhtNlcKqFzDgJvlQ==}
bytestreamjs@2.0.1:
resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==}
engines: {node: '>=6.0.0'}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@@ -1701,6 +1759,9 @@ packages:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'} engines: {node: '>= 18'}
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
mkdirp@1.0.4: mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -1865,6 +1926,10 @@ packages:
resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==}
hasBin: true hasBin: true
pkijs@3.3.3:
resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==}
engines: {node: '>=16.0.0'}
pm2-axon-rpc@0.7.1: pm2-axon-rpc@0.7.1:
resolution: {integrity: sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==} resolution: {integrity: sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==}
engines: {node: '>=5'} engines: {node: '>=5'}
@@ -1916,6 +1981,13 @@ packages:
pump@3.0.3: pump@3.0.3:
resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
pvutils@1.1.5:
resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
engines: {node: '>=16.0.0'}
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -1952,6 +2024,9 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'} engines: {node: '>= 14.18.0'}
reflect-metadata@0.2.2:
resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
regenerator-runtime@0.13.11: regenerator-runtime@0.13.11:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
@@ -2008,6 +2083,10 @@ packages:
resolution: {integrity: sha512-eP/1BEUCziBF/7p96ergE2JlGOMsGj9kIe77pD99G3ValgxDFwHA2oNCYW4rjlmYp8LXc684ypH0836GjSKw0A==} resolution: {integrity: sha512-eP/1BEUCziBF/7p96ergE2JlGOMsGj9kIe77pD99G3ValgxDFwHA2oNCYW4rjlmYp8LXc684ypH0836GjSKw0A==}
engines: {node: '>=10'} engines: {node: '>=10'}
selfsigned@5.2.0:
resolution: {integrity: sha512-QKF6fsJgdKn5Cy1SekTuwUQ6LOLUdnO4gVne1+TGSAyL/CD1aznNCmBna+bQB9xyon7DiYbDtTR1cLaxDXuaVA==}
engines: {node: '>=15.6.0'}
semver@5.7.2: semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true hasBin: true
@@ -2185,6 +2264,10 @@ packages:
tslib@2.8.1: tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 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: tv4@1.3.0:
resolution: {integrity: sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==} resolution: {integrity: sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
@@ -2386,122 +2469,122 @@ snapshots:
'@inquirer/ansi@2.0.2': {} '@inquirer/ansi@2.0.2': {}
'@inquirer/checkbox@5.0.2(@types/node@24.10.1)': '@inquirer/checkbox@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/ansi': 2.0.2 '@inquirer/ansi': 2.0.2
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/figures': 2.0.2 '@inquirer/figures': 2.0.2
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/confirm@6.0.2(@types/node@24.10.1)': '@inquirer/confirm@6.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/core@11.0.2(@types/node@24.10.1)': '@inquirer/core@11.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/ansi': 2.0.2 '@inquirer/ansi': 2.0.2
'@inquirer/figures': 2.0.2 '@inquirer/figures': 2.0.2
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
cli-width: 4.1.0 cli-width: 4.1.0
mute-stream: 3.0.0 mute-stream: 3.0.0
signal-exit: 4.1.0 signal-exit: 4.1.0
wrap-ansi: 9.0.2 wrap-ansi: 9.0.2
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/editor@5.0.2(@types/node@24.10.1)': '@inquirer/editor@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/external-editor': 2.0.2(@types/node@24.10.1) '@inquirer/external-editor': 2.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/expand@5.0.2(@types/node@24.10.1)': '@inquirer/expand@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/external-editor@2.0.2(@types/node@24.10.1)': '@inquirer/external-editor@2.0.2(@types/node@24.10.2)':
dependencies: dependencies:
chardet: 2.1.1 chardet: 2.1.1
iconv-lite: 0.7.0 iconv-lite: 0.7.0
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/figures@2.0.2': {} '@inquirer/figures@2.0.2': {}
'@inquirer/input@5.0.2(@types/node@24.10.1)': '@inquirer/input@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/number@4.0.2(@types/node@24.10.1)': '@inquirer/number@4.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/password@5.0.2(@types/node@24.10.1)': '@inquirer/password@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/ansi': 2.0.2 '@inquirer/ansi': 2.0.2
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/prompts@8.0.2(@types/node@24.10.1)': '@inquirer/prompts@8.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/checkbox': 5.0.2(@types/node@24.10.1) '@inquirer/checkbox': 5.0.2(@types/node@24.10.2)
'@inquirer/confirm': 6.0.2(@types/node@24.10.1) '@inquirer/confirm': 6.0.2(@types/node@24.10.2)
'@inquirer/editor': 5.0.2(@types/node@24.10.1) '@inquirer/editor': 5.0.2(@types/node@24.10.2)
'@inquirer/expand': 5.0.2(@types/node@24.10.1) '@inquirer/expand': 5.0.2(@types/node@24.10.2)
'@inquirer/input': 5.0.2(@types/node@24.10.1) '@inquirer/input': 5.0.2(@types/node@24.10.2)
'@inquirer/number': 4.0.2(@types/node@24.10.1) '@inquirer/number': 4.0.2(@types/node@24.10.2)
'@inquirer/password': 5.0.2(@types/node@24.10.1) '@inquirer/password': 5.0.2(@types/node@24.10.2)
'@inquirer/rawlist': 5.0.2(@types/node@24.10.1) '@inquirer/rawlist': 5.0.2(@types/node@24.10.2)
'@inquirer/search': 4.0.2(@types/node@24.10.1) '@inquirer/search': 4.0.2(@types/node@24.10.2)
'@inquirer/select': 5.0.2(@types/node@24.10.1) '@inquirer/select': 5.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/rawlist@5.0.2(@types/node@24.10.1)': '@inquirer/rawlist@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/search@4.0.2(@types/node@24.10.1)': '@inquirer/search@4.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/figures': 2.0.2 '@inquirer/figures': 2.0.2
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/select@5.0.2(@types/node@24.10.1)': '@inquirer/select@5.0.2(@types/node@24.10.2)':
dependencies: dependencies:
'@inquirer/ansi': 2.0.2 '@inquirer/ansi': 2.0.2
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/figures': 2.0.2 '@inquirer/figures': 2.0.2
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@inquirer/type@4.0.2(@types/node@24.10.1)': '@inquirer/type@4.0.2(@types/node@24.10.2)':
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@isaacs/cliui@8.0.2': '@isaacs/cliui@8.0.2':
dependencies: dependencies:
@@ -2740,6 +2823,24 @@ snapshots:
'@kevisual/permission': 0.0.3 '@kevisual/permission': 0.0.3
'@kevisual/query': 0.0.30 '@kevisual/query': 0.0.30
'@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.1(dotenv@17.2.3)':
dependencies:
'@kevisual/ai': 0.0.19
'@kevisual/context': 0.0.4
'@kevisual/query': 0.0.31
'@kevisual/router': 0.0.36(supports-color@10.2.2)
'@kevisual/use-config': 1.0.21(dotenv@17.2.3)
mitt: 3.0.1
transitivePeerDependencies:
- dotenv
- supports-color
'@kevisual/cache@0.0.3': '@kevisual/cache@0.0.3':
dependencies: dependencies:
idb-keyval: 6.2.1 idb-keyval: 6.2.1
@@ -2810,6 +2911,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@kevisual/router@0.0.36(supports-color@10.2.2)':
dependencies:
path-to-regexp: 8.3.0
selfsigned: 5.2.0
send: 1.2.0(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
'@kevisual/types@0.0.10': {} '@kevisual/types@0.0.10': {}
'@kevisual/use-config@1.0.21(dotenv@17.2.3)': '@kevisual/use-config@1.0.21(dotenv@17.2.3)':
@@ -2819,6 +2928,8 @@ snapshots:
'@kevisual/ws@8.0.0': {} '@kevisual/ws@8.0.0': {}
'@noble/hashes@1.4.0': {}
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
dependencies: dependencies:
'@nodelib/fs.stat': 2.0.5 '@nodelib/fs.stat': 2.0.5
@@ -2892,6 +3003,96 @@ snapshots:
- debug - debug
- encoding - encoding
'@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.6
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.6
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.6
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.6
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.6
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.6
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.6
tslib: 2.8.1
'@peculiar/asn1-schema@2.6.0':
dependencies:
asn1js: 3.0.6
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.6
tslib: 2.8.1
'@peculiar/asn1-x509@2.6.0':
dependencies:
'@peculiar/asn1-schema': 2.6.0
asn1js: 3.0.6
pvtsutils: 1.3.6
tslib: 2.8.1
'@peculiar/x509@1.14.2':
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
'@pkgjs/parseargs@0.11.0': '@pkgjs/parseargs@0.11.0':
optional: true optional: true
@@ -3064,9 +3265,9 @@ snapshots:
'@types/braces@3.0.5': {} '@types/braces@3.0.5': {}
'@types/bun@1.3.3': '@types/bun@1.3.4':
dependencies: dependencies:
bun-types: 1.3.3 bun-types: 1.3.4
'@types/crypto-js@4.2.2': {} '@types/crypto-js@4.2.2': {}
@@ -3075,7 +3276,7 @@ snapshots:
'@types/jsonwebtoken@9.0.10': '@types/jsonwebtoken@9.0.10':
dependencies: dependencies:
'@types/ms': 0.7.34 '@types/ms': 0.7.34
'@types/node': 24.10.1 '@types/node': 24.10.2
'@types/lodash-es@4.17.12': '@types/lodash-es@4.17.12':
dependencies: dependencies:
@@ -3091,7 +3292,7 @@ snapshots:
'@types/node@16.9.1': {} '@types/node@16.9.1': {}
'@types/node@24.10.1': '@types/node@24.10.2':
dependencies: dependencies:
undici-types: 7.16.0 undici-types: 7.16.0
@@ -3106,11 +3307,11 @@ snapshots:
'@types/send@1.2.1': '@types/send@1.2.1':
dependencies: dependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
'@types/ws@8.18.1': '@types/ws@8.18.1':
dependencies: dependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
abort-controller@3.0.0: abort-controller@3.0.0:
dependencies: dependencies:
@@ -3172,6 +3373,12 @@ snapshots:
argparse@2.0.1: {} argparse@2.0.1: {}
asn1js@3.0.6:
dependencies:
pvtsutils: 1.3.6
pvutils: 1.1.5
tslib: 2.8.1
ast-types@0.13.4: ast-types@0.13.4:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
@@ -3230,9 +3437,11 @@ snapshots:
base64-js: 1.5.1 base64-js: 1.5.1
ieee754: 1.2.1 ieee754: 1.2.1
bun-types@1.3.3: bun-types@1.3.4:
dependencies: dependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
bytestreamjs@2.0.1: {}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
dependencies: dependencies:
@@ -3713,17 +3922,17 @@ snapshots:
ini@1.3.8: {} ini@1.3.8: {}
inquirer@13.0.2(@types/node@24.10.1): inquirer@13.0.2(@types/node@24.10.2):
dependencies: dependencies:
'@inquirer/ansi': 2.0.2 '@inquirer/ansi': 2.0.2
'@inquirer/core': 11.0.2(@types/node@24.10.1) '@inquirer/core': 11.0.2(@types/node@24.10.2)
'@inquirer/prompts': 8.0.2(@types/node@24.10.1) '@inquirer/prompts': 8.0.2(@types/node@24.10.2)
'@inquirer/type': 4.0.2(@types/node@24.10.1) '@inquirer/type': 4.0.2(@types/node@24.10.2)
mute-stream: 3.0.0 mute-stream: 3.0.0
run-async: 4.0.6 run-async: 4.0.6
rxjs: 7.8.2 rxjs: 7.8.2
optionalDependencies: optionalDependencies:
'@types/node': 24.10.1 '@types/node': 24.10.2
ip-address@9.0.5: ip-address@9.0.5:
dependencies: dependencies:
@@ -3934,6 +4143,8 @@ snapshots:
dependencies: dependencies:
minipass: 7.1.2 minipass: 7.1.2
mitt@3.0.1: {}
mkdirp@1.0.4: {} mkdirp@1.0.4: {}
module-details-from-path@1.0.3: {} module-details-from-path@1.0.3: {}
@@ -4073,6 +4284,15 @@ snapshots:
dependencies: dependencies:
pngjs: 3.4.0 pngjs: 3.4.0
pkijs@3.3.3:
dependencies:
'@noble/hashes': 1.4.0
asn1js: 3.0.6
bytestreamjs: 2.0.1
pvtsutils: 1.3.6
pvutils: 1.1.5
tslib: 2.8.1
pm2-axon-rpc@0.7.1(supports-color@10.2.2): pm2-axon-rpc@0.7.1(supports-color@10.2.2):
dependencies: dependencies:
debug: 4.4.0(supports-color@10.2.2) debug: 4.4.0(supports-color@10.2.2)
@@ -4216,6 +4436,12 @@ snapshots:
end-of-stream: 1.4.5 end-of-stream: 1.4.5
once: 1.4.0 once: 1.4.0
pvtsutils@1.3.6:
dependencies:
tslib: 2.8.1
pvutils@1.1.5: {}
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
radix3@1.1.2: {} radix3@1.1.2: {}
@@ -4258,6 +4484,8 @@ snapshots:
readdirp@4.1.2: {} readdirp@4.1.2: {}
reflect-metadata@0.2.2: {}
regenerator-runtime@0.13.11: {} regenerator-runtime@0.13.11: {}
require-in-the-middle@5.2.0(supports-color@10.2.2): require-in-the-middle@5.2.0(supports-color@10.2.2):
@@ -4334,6 +4562,11 @@ snapshots:
dependencies: dependencies:
node-forge: 1.3.1 node-forge: 1.3.1
selfsigned@5.2.0:
dependencies:
'@peculiar/x509': 1.14.2
pkijs: 3.3.3
semver@5.7.2: {} semver@5.7.2: {}
semver@7.5.4: semver@7.5.4:
@@ -4515,6 +4748,10 @@ snapshots:
tslib@2.8.1: {} tslib@2.8.1: {}
tsyringe@4.10.0:
dependencies:
tslib: 1.9.3
tv4@1.3.0: {} tv4@1.3.0: {}
tx2@1.0.5: tx2@1.0.5:

4
src/ai/ai.ts Normal file
View File

@@ -0,0 +1,4 @@
import { App } from '@kevisual/app/src/app.ts';
import { storage } from '../module/query.ts';
export const app = new App({ token: storage.getItem('token') || '' });

6
src/ai/index.ts Normal file
View File

@@ -0,0 +1,6 @@
import { app } from './ai.ts'
import './routes/cmd-run.ts'
export {
app
}

54
src/ai/routes/cmd-run.ts Normal file
View File

@@ -0,0 +1,54 @@
import { app } from '../ai.ts';
import { execSync } from 'node:child_process'
const promptTemplate = `# CMD 结果判断器
分析上一条 CMD 命令的执行结果,判断是否需要执行下一条命令。
- 若结果中隐含或明确指示需继续执行 → 返回:\`{"cmd": "推断出的下一条命令", "type": "cmd"}\`
- 若无后续操作 → 返回:\`{"type": "none"}\`
1. 仅输出合法 JSON无任何额外文本。
2. \`cmd\` 必须从执行结果中合理推断得出,非预设或猜测。
3. 禁止解释、注释、换行或格式错误。`
app.router.route({
path: 'cmd-run',
description: '执行 CMD 命令并判断下一步操作, 参数是 cmd 字符串',
}).define(async (ctx) => {
const cmd = ctx.query.cmd || '';
if (!cmd) {
ctx.throw(400, 'cmd is required');
}
let result = '';
ctx.state.steps = ctx.state?.steps || [];
try {
result = execSync(cmd, { encoding: 'utf-8' });
ctx.state.steps.push({ cmd, result });
} catch (error: any) {
result = error.message || '';
ctx.state.steps.push({ cmd, result, error: true });
ctx.body = {
steps: ctx.state.steps,
}
return;
}
const prompt = `${promptTemplate}\n上一条命令:\n${cmd}\n执行结果:\n${result}\n`;
const response = await app.ai.question(prompt);
const msg = app.ai.utils.extractJsonFromMarkdown(app.ai.responseText);
try {
const { cmd, type } = msg;
if (type === 'cmd' && cmd) {
await app.router.call({ path: 'cmd-run', payload: { cmd } }, { state: ctx.state });
} else {
ctx.state.steps.push({ type: 'none' });
}
} catch (error) {
result = '执行错误,无法解析返回结果为合法 JSON' + app.ai.responseText
ctx.state.steps.push({ cmd, result, parseError: true });
}
ctx.body = {
steps: ctx.state.steps,
}
}).addTo(app.router);

30
src/command/ai.ts Normal file
View File

@@ -0,0 +1,30 @@
import { App } from '@kevisual/app/src/app.ts';
import { storage } from '../module/query.ts';
export const runAIApp = async () => {
const token = storage.getItem('token') || '';
if (!token) {
console.log('Please login first.');
return;
}
const aiApp = new App({ token })
await aiApp.loadAI();
const router= aiApp.router;
router.route({
description: '今天的天气怎么样?',
}).define(async (ctx) => {
ctx.body = '今天的天气晴朗,适合外出活动!';
}).addTo(router)
router.route({
description: '当前时间是几点?',
}).define(async (ctx) => {
ctx.body = `当前时间是:${new Date().toLocaleTimeString()}`;
}).addTo(router)
const chat = await aiApp.chat('今天的天气怎么样?');
console.log('AI Response:', aiApp.ai.responseText);
console.log('chat', chat);
}
runAIApp();

View File

@@ -59,7 +59,7 @@ const command = new Command('deploy')
if (!key && pkgInfo?.appKey) { if (!key && pkgInfo?.appKey) {
key = pkgInfo?.appKey || ''; key = pkgInfo?.appKey || '';
} }
console.log('start deploy'); logger.debug('start deploy');
if (!version || !key) { if (!version || !key) {
const answers = await inquirer.prompt([ const answers = await inquirer.prompt([
{ {
@@ -124,7 +124,6 @@ const command = new Command('deploy')
const uploadDirectory = isDirectory ? directory : path.dirname(directory); const uploadDirectory = isDirectory ? directory : path.dirname(directory);
const res = await uploadFiles(_relativeFiles, uploadDirectory, { key, version, username: org, noCheckAppFiles: !noCheck, directory: options.directory }); const res = await uploadFiles(_relativeFiles, uploadDirectory, { key, version, username: org, noCheckAppFiles: !noCheck, directory: options.directory });
if (res?.code === 200) { if (res?.code === 200) {
console.log('File uploaded successfully!');
res.data?.upload?.map?.((d) => { res.data?.upload?.map?.((d) => {
console.log(chalk.green('uploaded file', d?.name, d?.path)); console.log(chalk.green('uploaded file', d?.name, d?.path));
}); });
@@ -139,7 +138,6 @@ const command = new Command('deploy')
// const { id, data, ...rest } = res.data?.app || {}; // const { id, data, ...rest } = res.data?.app || {};
const { id, data, ...rest } = res2.data || {}; const { id, data, ...rest } = res2.data || {};
if (id && !update) { if (id && !update) {
console.log(chalk.green('id: '), id);
if (!org) { if (!org) {
console.log(chalk.green(`更新为最新版本: envision deploy-load ${id}`)); console.log(chalk.green(`更新为最新版本: envision deploy-load ${id}`));
} else { } else {
@@ -153,7 +151,7 @@ const command = new Command('deploy')
logger.debug('deploy success', res2.data); logger.debug('deploy success', res2.data);
if (id && showBackend) { if (id && showBackend) {
console.log('\n'); console.log('\n');
console.log(chalk.blue('服务端应用部署: '), 'envision pack-deploy', id); console.log(chalk.blue('服务端应用部署:\n'), 'envision pack-deploy', id);
console.log('\n'); console.log('\n');
} }
} else { } else {
@@ -180,8 +178,8 @@ const uploadFiles = async (files: string[], directory: string, opts: UploadFileO
const filePath = path.join(directory, file); const filePath = path.join(directory, file);
const hash = getHash(filePath); const hash = getHash(filePath);
if (!hash) { if (!hash) {
console.error('文件', filePath, '不存在'); logger.error('文件', filePath, '不存在');
console.error('请检查文件是否存在'); logger.error('请检查文件是否存在');
} }
data.files.push({ path: file, hash: hash }); data.files.push({ path: file, hash: hash });
} }
@@ -220,11 +218,11 @@ const uploadFiles = async (files: string[], directory: string, opts: UploadFileO
const filePath = path.join(directory, file); const filePath = path.join(directory, file);
const check = checkData.find((d) => d.path === file); const check = checkData.find((d) => d.path === file);
if (check?.isUpload) { if (check?.isUpload) {
console.log('文件已经上传过了', file); logger.debug('文件已经上传过了', file);
continue; continue;
} }
const filename = path.basename(filePath); const filename = path.basename(filePath);
console.log('upload file', file, filename); logger.debug('upload file', file, filename);
form.append('file', fs.createReadStream(filePath), { form.append('file', fs.createReadStream(filePath), {
filename: filename, filename: filename,
filepath: file, filepath: file,
@@ -232,7 +230,7 @@ const uploadFiles = async (files: string[], directory: string, opts: UploadFileO
needUpload = true; needUpload = true;
} }
if (!needUpload) { if (!needUpload) {
console.log('所有文件都上传过了,不需要上传文件'); logger.debug('所有文件都上传过了,不需要上传文件');
return { return {
code: 200, code: 200,
}; };
@@ -260,16 +258,16 @@ const deployLoadFn = async (id: string, org?: string) => {
}, },
}); });
if (res.code === 200) { if (res.code === 200) {
console.log(chalk.green('deploy-load success. current version:', res.data?.version)); logger.info(chalk.green('deploy-load success. current version:', res.data?.version));
// /:username/:appName // /:username/:appName
try { try {
const { user, key } = res.data; const { user, key } = res.data;
const baseURL = getBaseURL(); const baseURL = getBaseURL();
const deployURL = new URL(`/${user}/${key}/`, baseURL); const deployURL = new URL(`/${user}/${key}/`, baseURL);
console.log(chalk.blue('deployURL', deployURL.href)); logger.info(chalk.blue('deployURL', deployURL.href));
} catch (error) { } } catch (error) { }
} else { } else {
console.error('deploy-load failed', res.message); logger.error('deploy-load failed', res.message);
} }
}; };

View File

@@ -1,5 +1,4 @@
import { Logger } from '@kevisual/logger/node'; import { Logger } from '@kevisual/logger/node';
const level = process.env.LOG_LEVEL || 'info'; const level = process.env.LOG_LEVEL || 'info';
export const logger = new Logger({ export const logger = new Logger({
level: level as any, level: level as any,