diff --git a/assistant/package.json b/assistant/package.json index 0ba2005..0f31478 100644 --- a/assistant/package.json +++ b/assistant/package.json @@ -10,7 +10,7 @@ ], "author": "abearxiong (https://www.xiongxiao.me)", "license": "MIT", - "packageManager": "pnpm@10.24.0", + "packageManager": "pnpm@10.25.0", "type": "module", "files": [ "dist", @@ -41,18 +41,18 @@ } }, "devDependencies": { - "@kevisual/ai": "^0.0.16", + "@kevisual/ai": "^0.0.19", "@kevisual/load": "^0.0.6", "@kevisual/local-app-manager": "^0.1.32", "@kevisual/logger": "^0.0.4", "@kevisual/query": "0.0.31", "@kevisual/query-login": "0.0.7", - "@kevisual/router": "^0.0.33", + "@kevisual/router": "^0.0.36", "@kevisual/types": "^0.0.10", "@kevisual/use-config": "^1.0.21", - "@types/bun": "^1.3.3", + "@types/bun": "^1.3.4", "@types/lodash-es": "^4.17.12", - "@types/node": "^24.10.1", + "@types/node": "^24.10.2", "@types/send": "^1.2.1", "@types/ws": "^8.18.1", "chalk": "^5.6.2", diff --git a/package.json b/package.json index 03e2176..772032c 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ ], "author": "abearxiong", "dependencies": { + "@kevisual/app": "^0.0.1", "@kevisual/context": "^0.0.4", "@kevisual/hot-api": "^0.0.3", "@nut-tree-fork/nut-js": "^4.2.6", @@ -58,11 +59,11 @@ "@kevisual/logger": "^0.0.4", "@kevisual/query": "0.0.31", "@kevisual/query-login": "0.0.7", - "@types/bun": "^1.3.3", + "@types/bun": "^1.3.4", "@types/crypto-js": "^4.2.2", "@types/jsonwebtoken": "^9.0.10", "@types/micromatch": "^4.0.10", - "@types/node": "^24.10.1", + "@types/node": "^24.10.2", "@types/semver": "^7.7.1", "chalk": "^5.6.2", "commander": "^14.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d027a3..aeae750 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@kevisual/app': + specifier: ^0.0.1 + version: 0.0.1(dotenv@17.2.3) '@kevisual/context': specifier: ^0.0.4 version: 0.0.4 @@ -55,8 +58,8 @@ importers: specifier: 0.0.7 version: 0.0.7(@kevisual/query@0.0.31) '@types/bun': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.4 + version: 1.3.4 '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 @@ -67,8 +70,8 @@ importers: specifier: ^4.0.10 version: 4.0.10 '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^24.10.2 + version: 24.10.2 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -95,7 +98,7 @@ importers: version: 7.0.5 inquirer: specifier: ^13.0.2 - version: 13.0.2(@types/node@24.10.1) + version: 13.0.2(@types/node@24.10.2) jsonwebtoken: specifier: ^9.0.3 version: 9.0.3 @@ -131,8 +134,8 @@ importers: version: 1.17.3(idb-keyval@6.2.1) devDependencies: '@kevisual/ai': - specifier: ^0.0.16 - version: 0.0.16 + specifier: ^0.0.19 + version: 0.0.19 '@kevisual/load': specifier: ^0.0.6 version: 0.0.6 @@ -149,8 +152,8 @@ importers: specifier: 0.0.7 version: 0.0.7(@kevisual/query@0.0.31) '@kevisual/router': - specifier: ^0.0.33 - version: 0.0.33(supports-color@10.2.2) + specifier: ^0.0.36 + version: 0.0.36(supports-color@10.2.2) '@kevisual/types': specifier: ^0.0.10 version: 0.0.10 @@ -158,14 +161,14 @@ importers: specifier: ^1.0.21 version: 1.0.21(dotenv@17.2.3) '@types/bun': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.4 + version: 1.3.4 '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^24.10.2 + version: 24.10.2 '@types/send': specifier: ^1.2.1 version: 1.2.1 @@ -192,7 +195,7 @@ importers: version: 7.1.0 inquirer: specifier: ^13.0.2 - version: 13.0.2(@types/node@24.10.1) + version: 13.0.2(@types/node@24.10.2) lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -535,6 +538,12 @@ packages: '@kevisual/ai@0.0.16': 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': resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==} @@ -574,6 +583,9 @@ packages: '@kevisual/router@0.0.33': resolution: {integrity: sha512-9z7TkSzCIGbXn9SuHPBdZpGwHlAuwA8iN5jNAZBUvbEvBRkBxlrbdCSe9fBYiAHueLm2AceFNrW74uulOiAkqA==} + '@kevisual/router@0.0.36': + resolution: {integrity: sha512-o7GAb5T0WwRuHnWe3KB0/SPVaNHrnsFSNAQ9XuWokobfDP1ACFvOR9/rjbC0fbGFaeTeRKAprixxKkY1sfunBw==} + '@kevisual/types@0.0.10': resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==} @@ -586,6 +598,10 @@ packages: resolution: {integrity: sha512-jlFxSlXUEz93cFW+UYT5BXv/rFVgiMQnIfqRYZ0gj1hSP8PMGRqMqUoHSLfKvfRRS4jseLSvTTeEKSQpZJtURg==} 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': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -639,6 +655,40 @@ packages: '@nut-tree-fork/shared@4.2.6': 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': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -811,8 +861,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.3': - resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} + '@types/bun@1.3.4': + resolution: {integrity: sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA==} '@types/crypto-js@4.2.2': resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} @@ -838,8 +888,8 @@ packages: '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@24.10.2': + resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==} '@types/react@19.1.9': resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} @@ -915,6 +965,10 @@ packages: argparse@2.0.1: 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: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -994,8 +1048,12 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bun-types@1.3.3: - resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} + bun-types@1.3.4: + 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: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -1701,6 +1759,9 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} 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'} @@ -1865,6 +1926,10 @@ packages: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} hasBin: true + 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'} @@ -1916,6 +1981,13 @@ packages: pump@3.0.3: 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: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1952,6 +2024,9 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} @@ -2008,6 +2083,10 @@ packages: resolution: {integrity: sha512-eP/1BEUCziBF/7p96ergE2JlGOMsGj9kIe77pD99G3ValgxDFwHA2oNCYW4rjlmYp8LXc684ypH0836GjSKw0A==} engines: {node: '>=10'} + selfsigned@5.2.0: + resolution: {integrity: sha512-QKF6fsJgdKn5Cy1SekTuwUQ6LOLUdnO4gVne1+TGSAyL/CD1aznNCmBna+bQB9xyon7DiYbDtTR1cLaxDXuaVA==} + engines: {node: '>=15.6.0'} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -2185,6 +2264,10 @@ packages: 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'} @@ -2386,122 +2469,122 @@ snapshots: '@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: '@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/type': 4.0.2(@types/node@24.10.1) + '@inquirer/type': 4.0.2(@types/node@24.10.2) 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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: '@inquirer/ansi': 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 mute-stream: 3.0.0 signal-exit: 4.1.0 wrap-ansi: 9.0.2 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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/external-editor': 2.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) + '@inquirer/type': 4.0.2(@types/node@24.10.2) 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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: chardet: 2.1.1 iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: - '@inquirer/checkbox': 5.0.2(@types/node@24.10.1) - '@inquirer/confirm': 6.0.2(@types/node@24.10.1) - '@inquirer/editor': 5.0.2(@types/node@24.10.1) - '@inquirer/expand': 5.0.2(@types/node@24.10.1) - '@inquirer/input': 5.0.2(@types/node@24.10.1) - '@inquirer/number': 4.0.2(@types/node@24.10.1) - '@inquirer/password': 5.0.2(@types/node@24.10.1) - '@inquirer/rawlist': 5.0.2(@types/node@24.10.1) - '@inquirer/search': 4.0.2(@types/node@24.10.1) - '@inquirer/select': 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.2) + '@inquirer/editor': 5.0.2(@types/node@24.10.2) + '@inquirer/expand': 5.0.2(@types/node@24.10.2) + '@inquirer/input': 5.0.2(@types/node@24.10.2) + '@inquirer/number': 4.0.2(@types/node@24.10.2) + '@inquirer/password': 5.0.2(@types/node@24.10.2) + '@inquirer/rawlist': 5.0.2(@types/node@24.10.2) + '@inquirer/search': 4.0.2(@types/node@24.10.2) + '@inquirer/select': 5.0.2(@types/node@24.10.2) 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: - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) 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: - '@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/type': 4.0.2(@types/node@24.10.1) + '@inquirer/type': 4.0.2(@types/node@24.10.2) 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: '@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/type': 4.0.2(@types/node@24.10.1) + '@inquirer/type': 4.0.2(@types/node@24.10.2) 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: - '@types/node': 24.10.1 + '@types/node': 24.10.2 '@isaacs/cliui@8.0.2': dependencies: @@ -2740,6 +2823,24 @@ snapshots: '@kevisual/permission': 0.0.3 '@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': dependencies: idb-keyval: 6.2.1 @@ -2810,6 +2911,14 @@ snapshots: transitivePeerDependencies: - 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/use-config@1.0.21(dotenv@17.2.3)': @@ -2819,6 +2928,8 @@ snapshots: '@kevisual/ws@8.0.0': {} + '@noble/hashes@1.4.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2892,6 +3003,96 @@ snapshots: - debug - 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': optional: true @@ -3064,9 +3265,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.3': + '@types/bun@1.3.4': dependencies: - bun-types: 1.3.3 + bun-types: 1.3.4 '@types/crypto-js@4.2.2': {} @@ -3075,7 +3276,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 0.7.34 - '@types/node': 24.10.1 + '@types/node': 24.10.2 '@types/lodash-es@4.17.12': dependencies: @@ -3091,7 +3292,7 @@ snapshots: '@types/node@16.9.1': {} - '@types/node@24.10.1': + '@types/node@24.10.2': dependencies: undici-types: 7.16.0 @@ -3106,11 +3307,11 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.2 '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.2 abort-controller@3.0.0: dependencies: @@ -3172,6 +3373,12 @@ snapshots: 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: dependencies: tslib: 2.8.1 @@ -3230,9 +3437,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bun-types@1.3.3: + bun-types@1.3.4: dependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.2 + + bytestreamjs@2.0.1: {} call-bind-apply-helpers@1.0.2: dependencies: @@ -3713,17 +3922,17 @@ snapshots: ini@1.3.8: {} - inquirer@13.0.2(@types/node@24.10.1): + inquirer@13.0.2(@types/node@24.10.2): dependencies: '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@24.10.1) - '@inquirer/prompts': 8.0.2(@types/node@24.10.1) - '@inquirer/type': 4.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.2) + '@inquirer/type': 4.0.2(@types/node@24.10.2) mute-stream: 3.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.2 ip-address@9.0.5: dependencies: @@ -3934,6 +4143,8 @@ snapshots: dependencies: minipass: 7.1.2 + mitt@3.0.1: {} + mkdirp@1.0.4: {} module-details-from-path@1.0.3: {} @@ -4073,6 +4284,15 @@ snapshots: dependencies: 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): dependencies: debug: 4.4.0(supports-color@10.2.2) @@ -4216,6 +4436,12 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + queue-microtask@1.2.3: {} radix3@1.1.2: {} @@ -4258,6 +4484,8 @@ snapshots: readdirp@4.1.2: {} + reflect-metadata@0.2.2: {} + regenerator-runtime@0.13.11: {} require-in-the-middle@5.2.0(supports-color@10.2.2): @@ -4334,6 +4562,11 @@ snapshots: dependencies: node-forge: 1.3.1 + selfsigned@5.2.0: + dependencies: + '@peculiar/x509': 1.14.2 + pkijs: 3.3.3 + semver@5.7.2: {} semver@7.5.4: @@ -4515,6 +4748,10 @@ snapshots: tslib@2.8.1: {} + tsyringe@4.10.0: + dependencies: + tslib: 1.9.3 + tv4@1.3.0: {} tx2@1.0.5: diff --git a/src/ai/ai.ts b/src/ai/ai.ts new file mode 100644 index 0000000..3fbf539 --- /dev/null +++ b/src/ai/ai.ts @@ -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') || '' }); \ No newline at end of file diff --git a/src/ai/index.ts b/src/ai/index.ts new file mode 100644 index 0000000..c109f88 --- /dev/null +++ b/src/ai/index.ts @@ -0,0 +1,6 @@ +import { app } from './ai.ts' +import './routes/cmd-run.ts' + +export { + app +} \ No newline at end of file diff --git a/src/ai/routes/cmd-run.ts b/src/ai/routes/cmd-run.ts new file mode 100644 index 0000000..c2f6d85 --- /dev/null +++ b/src/ai/routes/cmd-run.ts @@ -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); \ No newline at end of file diff --git a/src/command/ai.ts b/src/command/ai.ts new file mode 100644 index 0000000..4d715e3 --- /dev/null +++ b/src/command/ai.ts @@ -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(); \ No newline at end of file diff --git a/src/command/deploy.ts b/src/command/deploy.ts index f181dc4..a090632 100644 --- a/src/command/deploy.ts +++ b/src/command/deploy.ts @@ -59,7 +59,7 @@ const command = new Command('deploy') if (!key && pkgInfo?.appKey) { key = pkgInfo?.appKey || ''; } - console.log('start deploy'); + logger.debug('start deploy'); if (!version || !key) { const answers = await inquirer.prompt([ { @@ -124,7 +124,6 @@ const command = new Command('deploy') const uploadDirectory = isDirectory ? directory : path.dirname(directory); const res = await uploadFiles(_relativeFiles, uploadDirectory, { key, version, username: org, noCheckAppFiles: !noCheck, directory: options.directory }); if (res?.code === 200) { - console.log('File uploaded successfully!'); res.data?.upload?.map?.((d) => { 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 } = res2.data || {}; if (id && !update) { - console.log(chalk.green('id: '), id); if (!org) { console.log(chalk.green(`更新为最新版本: envision deploy-load ${id}`)); } else { @@ -153,7 +151,7 @@ const command = new Command('deploy') logger.debug('deploy success', res2.data); if (id && showBackend) { console.log('\n'); - console.log(chalk.blue('服务端应用部署: '), 'envision pack-deploy', id); + console.log(chalk.blue('服务端应用部署:\n'), 'envision pack-deploy', id); console.log('\n'); } } else { @@ -180,8 +178,8 @@ const uploadFiles = async (files: string[], directory: string, opts: UploadFileO const filePath = path.join(directory, file); const hash = getHash(filePath); if (!hash) { - console.error('文件', filePath, '不存在'); - console.error('请检查文件是否存在'); + logger.error('文件', filePath, '不存在'); + logger.error('请检查文件是否存在'); } 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 check = checkData.find((d) => d.path === file); if (check?.isUpload) { - console.log('文件已经上传过了', file); + logger.debug('文件已经上传过了', file); continue; } const filename = path.basename(filePath); - console.log('upload file', file, filename); + logger.debug('upload file', file, filename); form.append('file', fs.createReadStream(filePath), { filename: filename, filepath: file, @@ -232,7 +230,7 @@ const uploadFiles = async (files: string[], directory: string, opts: UploadFileO needUpload = true; } if (!needUpload) { - console.log('所有文件都上传过了,不需要上传文件'); + logger.debug('所有文件都上传过了,不需要上传文件'); return { code: 200, }; @@ -260,16 +258,16 @@ const deployLoadFn = async (id: string, org?: string) => { }, }); 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 try { const { user, key } = res.data; const baseURL = getBaseURL(); const deployURL = new URL(`/${user}/${key}/`, baseURL); - console.log(chalk.blue('deployURL', deployURL.href)); + logger.info(chalk.blue('deployURL', deployURL.href)); } catch (error) { } } else { - console.error('deploy-load failed', res.message); + logger.error('deploy-load failed', res.message); } }; diff --git a/src/module/logger.ts b/src/module/logger.ts index 00b486a..ea78b20 100644 --- a/src/module/logger.ts +++ b/src/module/logger.ts @@ -1,5 +1,4 @@ import { Logger } from '@kevisual/logger/node'; - const level = process.env.LOG_LEVEL || 'info'; export const logger = new Logger({ level: level as any,