mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-12 12:54:07 -07:00
fix(update): replace update-notifier with latest-version (#11989)
This commit is contained in:
Generated
+44
-314
@@ -12,6 +12,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@testing-library/dom": "^10.4.1",
|
"@testing-library/dom": "^10.4.1",
|
||||||
|
"latest-version": "^9.0.0",
|
||||||
"simple-git": "^3.28.0"
|
"simple-git": "^3.28.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -3891,6 +3892,16 @@
|
|||||||
"text-table": "^0.2.0"
|
"text-table": "^0.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@textlint/linter-formatter/node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@textlint/linter-formatter/node_modules/argparse": {
|
"node_modules/@textlint/linter-formatter/node_modules/argparse": {
|
||||||
"version": "1.0.10",
|
"version": "1.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||||
@@ -5481,6 +5492,15 @@
|
|||||||
"string-width": "^4.1.0"
|
"string-width": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ansi-align/node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ansi-align/node_modules/emoji-regex": {
|
"node_modules/ansi-align/node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
@@ -5967,15 +5987,6 @@
|
|||||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/atomically": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==",
|
|
||||||
"dependencies": {
|
|
||||||
"stubborn-fs": "^1.2.5",
|
|
||||||
"when-exit": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/auto-bind": {
|
"node_modules/auto-bind": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz",
|
||||||
@@ -6987,30 +6998,6 @@
|
|||||||
"proto-list": "~1.2.1"
|
"proto-list": "~1.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/config-chain/node_modules/ini": {
|
|
||||||
"version": "1.3.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
|
||||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/configstore": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz",
|
|
||||||
"integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==",
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"atomically": "^2.0.3",
|
|
||||||
"dot-prop": "^9.0.0",
|
|
||||||
"graceful-fs": "^4.2.11",
|
|
||||||
"xdg-basedir": "^5.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/yeoman/configstore?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/content-disposition": {
|
"node_modules/content-disposition": {
|
||||||
"version": "0.5.4",
|
"version": "0.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
||||||
@@ -7630,33 +7617,6 @@
|
|||||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dot-prop": {
|
|
||||||
"version": "9.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
|
|
||||||
"integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"type-fest": "^4.18.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dot-prop/node_modules/type-fest": {
|
|
||||||
"version": "4.41.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
|
|
||||||
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
|
|
||||||
"license": "(MIT OR CC0-1.0)",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dotenv": {
|
"node_modules/dotenv": {
|
||||||
"version": "17.1.0",
|
"version": "17.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.1.0.tgz",
|
||||||
@@ -8066,18 +8026,6 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/escape-goat": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/escape-html": {
|
"node_modules/escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
@@ -9477,21 +9425,6 @@
|
|||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/global-directory": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
|
|
||||||
"integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ini": "4.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "16.3.0",
|
"version": "16.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
|
||||||
@@ -10200,13 +10133,10 @@
|
|||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/ini": {
|
"node_modules/ini": {
|
||||||
"version": "4.1.1",
|
"version": "1.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||||
"integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
|
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
||||||
"license": "ISC",
|
"license": "ISC"
|
||||||
"engines": {
|
|
||||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/ink": {
|
"node_modules/ink": {
|
||||||
"version": "6.2.3",
|
"version": "6.2.3",
|
||||||
@@ -10652,21 +10582,6 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-in-ci": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"is-in-ci": "cli.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-inside-container": {
|
"node_modules/is-inside-container": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
|
||||||
@@ -10685,22 +10600,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-installed-globally": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"global-directory": "^4.0.1",
|
|
||||||
"is-path-inside": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-map": {
|
"node_modules/is-map": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
|
||||||
@@ -10734,18 +10633,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/is-npm": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-number": {
|
"node_modules/is-number": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
@@ -10782,18 +10669,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-path-inside": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-plain-obj": {
|
"node_modules/is-plain-obj": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
|
||||||
@@ -11413,9 +11288,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/ky": {
|
"node_modules/ky": {
|
||||||
"version": "1.8.1",
|
"version": "1.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/ky/-/ky-1.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/ky/-/ky-1.13.0.tgz",
|
||||||
"integrity": "sha512-7Bp3TpsE+L+TARSnnDpk3xg8Idi8RwSLdj6CMbNWoOARIrGrbuLGusV0dYwbZOm4bB3jHNxSw8Wk/ByDqJEnDw==",
|
"integrity": "sha512-JeNNGs44hVUp2XxO3FY9WV28ymG7LgO4wju4HL/dCq1A8eKDcFgVrdCn1ssn+3Q/5OQilv5aYsL0DMt5mmAV9w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
@@ -13805,21 +13680,6 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pupa": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"escape-goat": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12.20"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/qs": {
|
"node_modules/qs": {
|
||||||
"version": "6.13.0",
|
"version": "6.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
|
||||||
@@ -13940,12 +13800,6 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rc/node_modules/ini": {
|
|
||||||
"version": "1.3.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
|
||||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/rc/node_modules/strip-json-comments": {
|
"node_modules/rc/node_modules/strip-json-comments": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||||
@@ -15481,15 +15335,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/strip-ansi/node_modules/ansi-regex": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
|
||||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/strip-bom": {
|
"node_modules/strip-bom": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
|
||||||
@@ -15559,11 +15404,6 @@
|
|||||||
"boundary": "^2.0.0"
|
"boundary": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/stubborn-fs": {
|
|
||||||
"version": "1.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz",
|
|
||||||
"integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g=="
|
|
||||||
},
|
|
||||||
"node_modules/stubs": {
|
"node_modules/stubs": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
|
||||||
@@ -15724,6 +15564,16 @@
|
|||||||
"url": "https://github.com/sponsors/epoberezkin"
|
"url": "https://github.com/sponsors/epoberezkin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/table/node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/table/node_modules/emoji-regex": {
|
"node_modules/table/node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
@@ -16589,126 +16439,6 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/update-notifier": {
|
|
||||||
"version": "7.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz",
|
|
||||||
"integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==",
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"boxen": "^8.0.1",
|
|
||||||
"chalk": "^5.3.0",
|
|
||||||
"configstore": "^7.0.0",
|
|
||||||
"is-in-ci": "^1.0.0",
|
|
||||||
"is-installed-globally": "^1.0.0",
|
|
||||||
"is-npm": "^6.0.0",
|
|
||||||
"latest-version": "^9.0.0",
|
|
||||||
"pupa": "^3.1.0",
|
|
||||||
"semver": "^7.6.3",
|
|
||||||
"xdg-basedir": "^5.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/yeoman/update-notifier?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/boxen": {
|
|
||||||
"version": "8.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
|
|
||||||
"integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-align": "^3.0.1",
|
|
||||||
"camelcase": "^8.0.0",
|
|
||||||
"chalk": "^5.3.0",
|
|
||||||
"cli-boxes": "^3.0.0",
|
|
||||||
"string-width": "^7.2.0",
|
|
||||||
"type-fest": "^4.21.0",
|
|
||||||
"widest-line": "^5.0.0",
|
|
||||||
"wrap-ansi": "^9.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/camelcase": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
|
|
||||||
"integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/chalk": {
|
|
||||||
"version": "5.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
|
|
||||||
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/emoji-regex": {
|
|
||||||
"version": "10.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
|
||||||
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/string-width": {
|
|
||||||
"version": "7.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
|
||||||
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"emoji-regex": "^10.3.0",
|
|
||||||
"get-east-asian-width": "^1.0.0",
|
|
||||||
"strip-ansi": "^7.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/type-fest": {
|
|
||||||
"version": "4.41.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
|
|
||||||
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
|
|
||||||
"license": "(MIT OR CC0-1.0)",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/update-notifier/node_modules/widest-line": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
|
|
||||||
"integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"string-width": "^7.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/uri-js": {
|
"node_modules/uri-js": {
|
||||||
"version": "4.4.1",
|
"version": "4.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||||
@@ -17092,12 +16822,6 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/when-exit": {
|
|
||||||
"version": "2.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz",
|
|
||||||
"integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/which": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
@@ -18003,6 +17727,7 @@
|
|||||||
"ink": "^6.2.3",
|
"ink": "^6.2.3",
|
||||||
"ink-gradient": "^3.0.0",
|
"ink-gradient": "^3.0.0",
|
||||||
"ink-spinner": "^5.0.0",
|
"ink-spinner": "^5.0.0",
|
||||||
|
"latest-version": "^9.0.0",
|
||||||
"lowlight": "^3.3.0",
|
"lowlight": "^3.3.0",
|
||||||
"mnemonist": "^0.40.3",
|
"mnemonist": "^0.40.3",
|
||||||
"open": "^10.1.2",
|
"open": "^10.1.2",
|
||||||
@@ -18016,7 +17741,6 @@
|
|||||||
"strip-json-comments": "^3.1.1",
|
"strip-json-comments": "^3.1.1",
|
||||||
"tar": "^7.5.1",
|
"tar": "^7.5.1",
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"update-notifier": "^7.3.1",
|
|
||||||
"wrap-ansi": "9.0.2",
|
"wrap-ansi": "9.0.2",
|
||||||
"yargs": "^17.7.2",
|
"yargs": "^17.7.2",
|
||||||
"zod": "^3.23.8"
|
"zod": "^3.23.8"
|
||||||
@@ -18079,6 +17803,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/cli/node_modules/emoji-regex": {
|
||||||
|
"version": "10.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
|
||||||
|
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"packages/cli/node_modules/string-width": {
|
"packages/cli/node_modules/string-width": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,6 @@
|
|||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"wrap-ansi": "9.0.2",
|
"wrap-ansi": "9.0.2",
|
||||||
"ansi-regex": "5.0.1",
|
|
||||||
"cliui": {
|
"cliui": {
|
||||||
"wrap-ansi": "7.0.0"
|
"wrap-ansi": "7.0.0"
|
||||||
}
|
}
|
||||||
@@ -113,6 +112,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@testing-library/dom": "^10.4.1",
|
"@testing-library/dom": "^10.4.1",
|
||||||
|
"latest-version": "^9.0.0",
|
||||||
"simple-git": "^3.28.0"
|
"simple-git": "^3.28.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
"ink": "^6.2.3",
|
"ink": "^6.2.3",
|
||||||
"ink-gradient": "^3.0.0",
|
"ink-gradient": "^3.0.0",
|
||||||
"ink-spinner": "^5.0.0",
|
"ink-spinner": "^5.0.0",
|
||||||
|
"latest-version": "^9.0.0",
|
||||||
"lowlight": "^3.3.0",
|
"lowlight": "^3.3.0",
|
||||||
"mnemonist": "^0.40.3",
|
"mnemonist": "^0.40.3",
|
||||||
"open": "^10.1.2",
|
"open": "^10.1.2",
|
||||||
@@ -58,7 +59,6 @@
|
|||||||
"strip-json-comments": "^3.1.1",
|
"strip-json-comments": "^3.1.1",
|
||||||
"tar": "^7.5.1",
|
"tar": "^7.5.1",
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"update-notifier": "^7.3.1",
|
|
||||||
"wrap-ansi": "9.0.2",
|
"wrap-ansi": "9.0.2",
|
||||||
"yargs": "^17.7.2",
|
"yargs": "^17.7.2",
|
||||||
"zod": "^3.23.8"
|
"zod": "^3.23.8"
|
||||||
|
|||||||
@@ -375,6 +375,10 @@ export async function loadCliConfig(
|
|||||||
): Promise<Config> {
|
): Promise<Config> {
|
||||||
const debugMode = isDebugMode(argv);
|
const debugMode = isDebugMode(argv);
|
||||||
|
|
||||||
|
if (argv.sandbox) {
|
||||||
|
process.env['GEMINI_SANDBOX'] = 'true';
|
||||||
|
}
|
||||||
|
|
||||||
const memoryImportFormat = settings.context?.importFormat || 'tree';
|
const memoryImportFormat = settings.context?.importFormat || 'tree';
|
||||||
|
|
||||||
const ideMode = settings.ide?.enabled ?? false;
|
const ideMode = settings.ide?.enabled ?? false;
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ vi.mock('../../utils/package.js', () => ({
|
|||||||
getPackageJson,
|
getPackageJson,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const updateNotifier = vi.hoisted(() => vi.fn());
|
const latestVersion = vi.hoisted(() => vi.fn());
|
||||||
vi.mock('update-notifier', () => ({
|
vi.mock('latest-version', () => ({
|
||||||
default: updateNotifier,
|
default: latestVersion,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
describe('checkForUpdates', () => {
|
describe('checkForUpdates', () => {
|
||||||
@@ -46,7 +46,7 @@ describe('checkForUpdates', () => {
|
|||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
expect(getPackageJson).not.toHaveBeenCalled();
|
expect(getPackageJson).not.toHaveBeenCalled();
|
||||||
expect(updateNotifier).not.toHaveBeenCalled();
|
expect(latestVersion).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null when running from source (DEV=true)', async () => {
|
it('should return null when running from source (DEV=true)', async () => {
|
||||||
@@ -55,15 +55,11 @@ describe('checkForUpdates', () => {
|
|||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockResolvedValue('1.1.0');
|
||||||
fetchInfo: vi
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue({ current: '1.0.0', latest: '1.1.0' }),
|
|
||||||
});
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
expect(getPackageJson).not.toHaveBeenCalled();
|
expect(getPackageJson).not.toHaveBeenCalled();
|
||||||
expect(updateNotifier).not.toHaveBeenCalled();
|
expect(latestVersion).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null if package.json is missing', async () => {
|
it('should return null if package.json is missing', async () => {
|
||||||
@@ -77,9 +73,7 @@ describe('checkForUpdates', () => {
|
|||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockResolvedValue('1.0.0');
|
||||||
fetchInfo: vi.fn().mockResolvedValue(null),
|
|
||||||
});
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
});
|
});
|
||||||
@@ -89,15 +83,13 @@ describe('checkForUpdates', () => {
|
|||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockResolvedValue('1.1.0');
|
||||||
fetchInfo: vi
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue({ current: '1.0.0', latest: '1.1.0' }),
|
|
||||||
});
|
|
||||||
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result?.message).toContain('1.0.0 → 1.1.0');
|
expect(result?.message).toContain('1.0.0 → 1.1.0');
|
||||||
expect(result?.update).toEqual({ current: '1.0.0', latest: '1.1.0' });
|
expect(result?.update.current).toEqual('1.0.0');
|
||||||
|
expect(result?.update.latest).toEqual('1.1.0');
|
||||||
|
expect(result?.update.name).toEqual('test-package');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null if the latest version is the same as the current version', async () => {
|
it('should return null if the latest version is the same as the current version', async () => {
|
||||||
@@ -105,11 +97,7 @@ describe('checkForUpdates', () => {
|
|||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockResolvedValue('1.0.0');
|
||||||
fetchInfo: vi
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue({ current: '1.0.0', latest: '1.0.0' }),
|
|
||||||
});
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
});
|
});
|
||||||
@@ -119,23 +107,17 @@ describe('checkForUpdates', () => {
|
|||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.1.0',
|
version: '1.1.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockResolvedValue('1.0.0');
|
||||||
fetchInfo: vi
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue({ current: '1.1.0', latest: '1.0.0' }),
|
|
||||||
});
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null if fetchInfo rejects', async () => {
|
it('should return null if latestVersion rejects', async () => {
|
||||||
getPackageJson.mockResolvedValue({
|
getPackageJson.mockResolvedValue({
|
||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
});
|
});
|
||||||
updateNotifier.mockReturnValue({
|
latestVersion.mockRejectedValue(new Error('Timeout'));
|
||||||
fetchInfo: vi.fn().mockRejectedValue(new Error('Timeout')),
|
|
||||||
});
|
|
||||||
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result).toBeNull();
|
expect(result).toBeNull();
|
||||||
@@ -154,26 +136,13 @@ describe('checkForUpdates', () => {
|
|||||||
version: '1.2.3-nightly.1',
|
version: '1.2.3-nightly.1',
|
||||||
});
|
});
|
||||||
|
|
||||||
const fetchInfoMock = vi.fn().mockImplementation(({ distTag }) => {
|
latestVersion.mockImplementation(async (name, options) => {
|
||||||
if (distTag === 'nightly') {
|
if (options?.version === 'nightly') {
|
||||||
return Promise.resolve({
|
return '1.2.3-nightly.2';
|
||||||
latest: '1.2.3-nightly.2',
|
|
||||||
current: '1.2.3-nightly.1',
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (distTag === 'latest') {
|
return '1.2.3';
|
||||||
return Promise.resolve({
|
|
||||||
latest: '1.2.3',
|
|
||||||
current: '1.2.3-nightly.1',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return Promise.resolve(null);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
updateNotifier.mockImplementation(({ pkg, distTag }) => ({
|
|
||||||
fetchInfo: () => fetchInfoMock({ pkg, distTag }),
|
|
||||||
}));
|
|
||||||
|
|
||||||
const result = await checkForUpdates(mockSettings);
|
const result = await checkForUpdates(mockSettings);
|
||||||
expect(result?.message).toContain('1.2.3-nightly.1 → 1.2.3-nightly.2');
|
expect(result?.message).toContain('1.2.3-nightly.1 → 1.2.3-nightly.2');
|
||||||
expect(result?.update.latest).toBe('1.2.3-nightly.2');
|
expect(result?.update.latest).toBe('1.2.3-nightly.2');
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { UpdateInfo } from 'update-notifier';
|
import latestVersion from 'latest-version';
|
||||||
import updateNotifier from 'update-notifier';
|
|
||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
import { getPackageJson } from '../../utils/package.js';
|
import { getPackageJson } from '../../utils/package.js';
|
||||||
import type { LoadedSettings } from '../../config/settings.js';
|
import type { LoadedSettings } from '../../config/settings.js';
|
||||||
@@ -13,32 +12,35 @@ import { debugLogger } from '@google/gemini-cli-core';
|
|||||||
|
|
||||||
export const FETCH_TIMEOUT_MS = 2000;
|
export const FETCH_TIMEOUT_MS = 2000;
|
||||||
|
|
||||||
|
// Replicating the bits of UpdateInfo we need from update-notifier
|
||||||
|
export interface UpdateInfo {
|
||||||
|
latest: string;
|
||||||
|
current: string;
|
||||||
|
name: string;
|
||||||
|
type?: semver.ReleaseType;
|
||||||
|
}
|
||||||
|
|
||||||
export interface UpdateObject {
|
export interface UpdateObject {
|
||||||
message: string;
|
message: string;
|
||||||
update: UpdateInfo;
|
update: UpdateInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* From a nightly and stable update, determines which is the "best" one to offer.
|
* From a nightly and stable version, determines which is the "best" one to offer.
|
||||||
* The rule is to always prefer nightly if the base versions are the same.
|
* The rule is to always prefer nightly if the base versions are the same.
|
||||||
*/
|
*/
|
||||||
function getBestAvailableUpdate(
|
function getBestAvailableUpdate(
|
||||||
nightly?: UpdateInfo,
|
nightly?: string,
|
||||||
stable?: UpdateInfo,
|
stable?: string,
|
||||||
): UpdateInfo | null {
|
): string | null {
|
||||||
if (!nightly) return stable || null;
|
if (!nightly) return stable || null;
|
||||||
if (!stable) return nightly || null;
|
if (!stable) return nightly || null;
|
||||||
|
|
||||||
const nightlyVer = nightly.latest;
|
if (semver.coerce(stable)?.version === semver.coerce(nightly)?.version) {
|
||||||
const stableVer = stable.latest;
|
|
||||||
|
|
||||||
if (
|
|
||||||
semver.coerce(stableVer)?.version === semver.coerce(nightlyVer)?.version
|
|
||||||
) {
|
|
||||||
return nightly;
|
return nightly;
|
||||||
}
|
}
|
||||||
|
|
||||||
return semver.gt(stableVer, nightlyVer) ? stable : nightly;
|
return semver.gt(stable, nightly) ? stable : nightly;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkForUpdates(
|
export async function checkForUpdates(
|
||||||
@@ -59,43 +61,42 @@ export async function checkForUpdates(
|
|||||||
|
|
||||||
const { name, version: currentVersion } = packageJson;
|
const { name, version: currentVersion } = packageJson;
|
||||||
const isNightly = currentVersion.includes('nightly');
|
const isNightly = currentVersion.includes('nightly');
|
||||||
const createNotifier = (distTag: 'latest' | 'nightly') =>
|
|
||||||
updateNotifier({
|
|
||||||
pkg: {
|
|
||||||
name,
|
|
||||||
version: currentVersion,
|
|
||||||
},
|
|
||||||
updateCheckInterval: 0,
|
|
||||||
shouldNotifyInNpmScript: true,
|
|
||||||
distTag,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isNightly) {
|
if (isNightly) {
|
||||||
const [nightlyUpdateInfo, latestUpdateInfo] = await Promise.all([
|
const [nightlyUpdate, latestUpdate] = await Promise.all([
|
||||||
createNotifier('nightly').fetchInfo(),
|
latestVersion(name, { version: 'nightly' }),
|
||||||
createNotifier('latest').fetchInfo(),
|
latestVersion(name),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const bestUpdate = getBestAvailableUpdate(
|
const bestUpdate = getBestAvailableUpdate(nightlyUpdate, latestUpdate);
|
||||||
nightlyUpdateInfo,
|
|
||||||
latestUpdateInfo,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (bestUpdate && semver.gt(bestUpdate.latest, currentVersion)) {
|
if (bestUpdate && semver.gt(bestUpdate, currentVersion)) {
|
||||||
const message = `A new version of Gemini CLI is available! ${currentVersion} → ${bestUpdate.latest}`;
|
const message = `A new version of Gemini CLI is available! ${currentVersion} → ${bestUpdate}`;
|
||||||
|
const type = semver.diff(bestUpdate, currentVersion) || undefined;
|
||||||
return {
|
return {
|
||||||
message,
|
message,
|
||||||
update: { ...bestUpdate, current: currentVersion },
|
update: {
|
||||||
|
latest: bestUpdate,
|
||||||
|
current: currentVersion,
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const updateInfo = await createNotifier('latest').fetchInfo();
|
const latestUpdate = await latestVersion(name);
|
||||||
|
|
||||||
if (updateInfo && semver.gt(updateInfo.latest, currentVersion)) {
|
if (latestUpdate && semver.gt(latestUpdate, currentVersion)) {
|
||||||
const message = `Gemini CLI update available! ${currentVersion} → ${updateInfo.latest}`;
|
const message = `Gemini CLI update available! ${currentVersion} → ${latestUpdate}`;
|
||||||
|
const type = semver.diff(latestUpdate, currentVersion) || undefined;
|
||||||
return {
|
return {
|
||||||
message,
|
message,
|
||||||
update: { ...updateInfo, current: currentVersion },
|
update: {
|
||||||
|
latest: latestUpdate,
|
||||||
|
current: currentVersion,
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,13 @@ export function handleAutoUpdate(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.merged.tools?.sandbox || process.env['GEMINI_SANDBOX']) {
|
||||||
|
updateEventEmitter.emit('update-info', {
|
||||||
|
message: `${info.message}\nAutomatic update is not available in sandbox mode.`,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.merged.general?.disableUpdateNag) {
|
if (settings.merged.general?.disableUpdateNag) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user