├── .gitignore ├── .prettierrc.json ├── .vscode ├── extensions.json └── settings.json ├── README.md ├── chisel.png ├── package-lock.json ├── package.json ├── src ├── index.ts ├── read-files.ts └── write-files.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | .env 4 | _files.txt 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "overrides": [] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "nrwl.angular-console", 4 | "esbenp.prettier-vscode", 5 | "astro-build.astro-vscode" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "editor.tabSize": 4, 4 | "[typescript]": { 5 | "editor.defaultFormatter": "esbenp.prettier-vscode", 6 | "editor.formatOnSave": true 7 | }, 8 | "[typescriptreact]": { 9 | "editor.defaultFormatter": "esbenp.prettier-vscode", 10 | "editor.formatOnSave": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # chisel 2 | 3 | A command line GPT-4 chat loop that can directly read and write code on your local filesystem. 4 | 5 | ## Status 6 | 7 | alpha/proof of concept. 8 | 9 | Currently this is can only work with small apps, or subdirectories of larger apps. The model used, `gpt-4-1106-preview` has a [128k token context window](https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo) ("300 pages of text"). Larger codebases and longer chats could exceed that window and `chisel` might start forgetting about your code or its job. The CLI logs the number of tokens used. 10 | 11 | The maximum output size is also 4096 tokens, so there may be issues on larger files. 12 | 13 | ## Quick Start 14 | 15 | - `git clone https://github.com/martinpllu/chisel` 16 | - `cd chisel` 17 | - `npm install` 18 | - Add a file `.env` containing: 19 | 20 | ```env 21 | OPENAI_API_KEY=your_api_key_here 22 | ``` 23 | - (Note that you need to enable [pay-as-you-go billing](https://lifehacker.com/openai-s-pay-as-you-go-is-the-best-way-to-use-chatgpt-1850318349) and have a positive credit balance, e.g. $10) 24 | - Start via `npx tsx src/index.ts --directory=/path/to/your/app` 25 | - `chisel` will start by sending the content of all files in the directory to chatgpt. 26 | - Files in `src/read-files.ts#DEFAULT_IGNORE_PATHS` will be ignored, as will any glob paths passed as `--ignorePaths` 27 | - Prompt the CLI to make a code change, e.g. add a feature, refactor or fix an issue. 28 | - `chisel` will change the required file(s) 29 | - You can then review changes. If your application is managed with git you can review the diffs and commit. 30 | - You can also ask `chisel` questions about the code. 31 | - Press Ctri-C to quit. 32 | 33 | ## How does it work? 34 | 35 | `chisel` uses ChatGPT's [function calling](https://platform.openai.com/docs/guides/function-calling) feature. Two functions are used: 36 | 37 | - `readFiles` which reads all files in the supplied directory (the `--directory` argument), apart from the ignored files and returns their contents. 38 | - `writeFiles` which accepts a list of paths within the directory, and a corresponding list of file contents to write. 39 | 40 | ![Sequence diagram](chisel.png) 41 | 42 | ## Safety 43 | 44 | `chisel` can only read and write files within the directory specified on the command line. All ChatGPT-supplied paths are checked to ensure that they resolve to files which are actually within the directory. 45 | 46 | ## License 47 | 48 | This project is open source and available under the MIT License. 49 | -------------------------------------------------------------------------------- /chisel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martinpllu/chisel/75919759a04d56b76209cc1ab527b0bfa17d11e1/chisel.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chisel", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "chisel", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.27.2", 13 | "dotenv": "^16.0.1", 14 | "openai": "^4.24.1", 15 | "ora": "^8.0.1", 16 | "prompt-sync": "^4.2.0", 17 | "tsx": "^4.7.0", 18 | "yargs": "^17.7.2" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.0.0", 22 | "@types/prompt-sync": "^4.2.3", 23 | "@types/yargs": "^17.0.32", 24 | "typescript": "^4.7.4" 25 | } 26 | }, 27 | "node_modules/@esbuild/aix-ppc64": { 28 | "version": "0.19.11", 29 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", 30 | "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", 31 | "cpu": [ 32 | "ppc64" 33 | ], 34 | "optional": true, 35 | "os": [ 36 | "aix" 37 | ], 38 | "engines": { 39 | "node": ">=12" 40 | } 41 | }, 42 | "node_modules/@esbuild/android-arm": { 43 | "version": "0.19.11", 44 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", 45 | "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", 46 | "cpu": [ 47 | "arm" 48 | ], 49 | "optional": true, 50 | "os": [ 51 | "android" 52 | ], 53 | "engines": { 54 | "node": ">=12" 55 | } 56 | }, 57 | "node_modules/@esbuild/android-arm64": { 58 | "version": "0.19.11", 59 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", 60 | "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", 61 | "cpu": [ 62 | "arm64" 63 | ], 64 | "optional": true, 65 | "os": [ 66 | "android" 67 | ], 68 | "engines": { 69 | "node": ">=12" 70 | } 71 | }, 72 | "node_modules/@esbuild/android-x64": { 73 | "version": "0.19.11", 74 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", 75 | "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", 76 | "cpu": [ 77 | "x64" 78 | ], 79 | "optional": true, 80 | "os": [ 81 | "android" 82 | ], 83 | "engines": { 84 | "node": ">=12" 85 | } 86 | }, 87 | "node_modules/@esbuild/darwin-arm64": { 88 | "version": "0.19.11", 89 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", 90 | "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", 91 | "cpu": [ 92 | "arm64" 93 | ], 94 | "optional": true, 95 | "os": [ 96 | "darwin" 97 | ], 98 | "engines": { 99 | "node": ">=12" 100 | } 101 | }, 102 | "node_modules/@esbuild/darwin-x64": { 103 | "version": "0.19.11", 104 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", 105 | "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", 106 | "cpu": [ 107 | "x64" 108 | ], 109 | "optional": true, 110 | "os": [ 111 | "darwin" 112 | ], 113 | "engines": { 114 | "node": ">=12" 115 | } 116 | }, 117 | "node_modules/@esbuild/freebsd-arm64": { 118 | "version": "0.19.11", 119 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", 120 | "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", 121 | "cpu": [ 122 | "arm64" 123 | ], 124 | "optional": true, 125 | "os": [ 126 | "freebsd" 127 | ], 128 | "engines": { 129 | "node": ">=12" 130 | } 131 | }, 132 | "node_modules/@esbuild/freebsd-x64": { 133 | "version": "0.19.11", 134 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", 135 | "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", 136 | "cpu": [ 137 | "x64" 138 | ], 139 | "optional": true, 140 | "os": [ 141 | "freebsd" 142 | ], 143 | "engines": { 144 | "node": ">=12" 145 | } 146 | }, 147 | "node_modules/@esbuild/linux-arm": { 148 | "version": "0.19.11", 149 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", 150 | "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", 151 | "cpu": [ 152 | "arm" 153 | ], 154 | "optional": true, 155 | "os": [ 156 | "linux" 157 | ], 158 | "engines": { 159 | "node": ">=12" 160 | } 161 | }, 162 | "node_modules/@esbuild/linux-arm64": { 163 | "version": "0.19.11", 164 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", 165 | "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", 166 | "cpu": [ 167 | "arm64" 168 | ], 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-ia32": { 178 | "version": "0.19.11", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", 180 | "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", 181 | "cpu": [ 182 | "ia32" 183 | ], 184 | "optional": true, 185 | "os": [ 186 | "linux" 187 | ], 188 | "engines": { 189 | "node": ">=12" 190 | } 191 | }, 192 | "node_modules/@esbuild/linux-loong64": { 193 | "version": "0.19.11", 194 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", 195 | "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", 196 | "cpu": [ 197 | "loong64" 198 | ], 199 | "optional": true, 200 | "os": [ 201 | "linux" 202 | ], 203 | "engines": { 204 | "node": ">=12" 205 | } 206 | }, 207 | "node_modules/@esbuild/linux-mips64el": { 208 | "version": "0.19.11", 209 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", 210 | "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", 211 | "cpu": [ 212 | "mips64el" 213 | ], 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=12" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-ppc64": { 223 | "version": "0.19.11", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", 225 | "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", 226 | "cpu": [ 227 | "ppc64" 228 | ], 229 | "optional": true, 230 | "os": [ 231 | "linux" 232 | ], 233 | "engines": { 234 | "node": ">=12" 235 | } 236 | }, 237 | "node_modules/@esbuild/linux-riscv64": { 238 | "version": "0.19.11", 239 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", 240 | "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", 241 | "cpu": [ 242 | "riscv64" 243 | ], 244 | "optional": true, 245 | "os": [ 246 | "linux" 247 | ], 248 | "engines": { 249 | "node": ">=12" 250 | } 251 | }, 252 | "node_modules/@esbuild/linux-s390x": { 253 | "version": "0.19.11", 254 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", 255 | "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", 256 | "cpu": [ 257 | "s390x" 258 | ], 259 | "optional": true, 260 | "os": [ 261 | "linux" 262 | ], 263 | "engines": { 264 | "node": ">=12" 265 | } 266 | }, 267 | "node_modules/@esbuild/linux-x64": { 268 | "version": "0.19.11", 269 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", 270 | "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", 271 | "cpu": [ 272 | "x64" 273 | ], 274 | "optional": true, 275 | "os": [ 276 | "linux" 277 | ], 278 | "engines": { 279 | "node": ">=12" 280 | } 281 | }, 282 | "node_modules/@esbuild/netbsd-x64": { 283 | "version": "0.19.11", 284 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", 285 | "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", 286 | "cpu": [ 287 | "x64" 288 | ], 289 | "optional": true, 290 | "os": [ 291 | "netbsd" 292 | ], 293 | "engines": { 294 | "node": ">=12" 295 | } 296 | }, 297 | "node_modules/@esbuild/openbsd-x64": { 298 | "version": "0.19.11", 299 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", 300 | "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", 301 | "cpu": [ 302 | "x64" 303 | ], 304 | "optional": true, 305 | "os": [ 306 | "openbsd" 307 | ], 308 | "engines": { 309 | "node": ">=12" 310 | } 311 | }, 312 | "node_modules/@esbuild/sunos-x64": { 313 | "version": "0.19.11", 314 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", 315 | "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", 316 | "cpu": [ 317 | "x64" 318 | ], 319 | "optional": true, 320 | "os": [ 321 | "sunos" 322 | ], 323 | "engines": { 324 | "node": ">=12" 325 | } 326 | }, 327 | "node_modules/@esbuild/win32-arm64": { 328 | "version": "0.19.11", 329 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", 330 | "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", 331 | "cpu": [ 332 | "arm64" 333 | ], 334 | "optional": true, 335 | "os": [ 336 | "win32" 337 | ], 338 | "engines": { 339 | "node": ">=12" 340 | } 341 | }, 342 | "node_modules/@esbuild/win32-ia32": { 343 | "version": "0.19.11", 344 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", 345 | "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", 346 | "cpu": [ 347 | "ia32" 348 | ], 349 | "optional": true, 350 | "os": [ 351 | "win32" 352 | ], 353 | "engines": { 354 | "node": ">=12" 355 | } 356 | }, 357 | "node_modules/@esbuild/win32-x64": { 358 | "version": "0.19.11", 359 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", 360 | "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", 361 | "cpu": [ 362 | "x64" 363 | ], 364 | "optional": true, 365 | "os": [ 366 | "win32" 367 | ], 368 | "engines": { 369 | "node": ">=12" 370 | } 371 | }, 372 | "node_modules/@types/node": { 373 | "version": "18.19.4", 374 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.4.tgz", 375 | "integrity": "sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==", 376 | "dependencies": { 377 | "undici-types": "~5.26.4" 378 | } 379 | }, 380 | "node_modules/@types/node-fetch": { 381 | "version": "2.6.10", 382 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.10.tgz", 383 | "integrity": "sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==", 384 | "dependencies": { 385 | "@types/node": "*", 386 | "form-data": "^4.0.0" 387 | } 388 | }, 389 | "node_modules/@types/prompt-sync": { 390 | "version": "4.2.3", 391 | "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.3.tgz", 392 | "integrity": "sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==", 393 | "dev": true 394 | }, 395 | "node_modules/@types/yargs": { 396 | "version": "17.0.32", 397 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", 398 | "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", 399 | "dev": true, 400 | "dependencies": { 401 | "@types/yargs-parser": "*" 402 | } 403 | }, 404 | "node_modules/@types/yargs-parser": { 405 | "version": "21.0.3", 406 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", 407 | "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", 408 | "dev": true 409 | }, 410 | "node_modules/abort-controller": { 411 | "version": "3.0.0", 412 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 413 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 414 | "dependencies": { 415 | "event-target-shim": "^5.0.0" 416 | }, 417 | "engines": { 418 | "node": ">=6.5" 419 | } 420 | }, 421 | "node_modules/agentkeepalive": { 422 | "version": "4.5.0", 423 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", 424 | "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", 425 | "dependencies": { 426 | "humanize-ms": "^1.2.1" 427 | }, 428 | "engines": { 429 | "node": ">= 8.0.0" 430 | } 431 | }, 432 | "node_modules/ansi-regex": { 433 | "version": "5.0.1", 434 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 435 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 436 | "engines": { 437 | "node": ">=8" 438 | } 439 | }, 440 | "node_modules/ansi-styles": { 441 | "version": "4.3.0", 442 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 443 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 444 | "dependencies": { 445 | "color-convert": "^2.0.1" 446 | }, 447 | "engines": { 448 | "node": ">=8" 449 | }, 450 | "funding": { 451 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 452 | } 453 | }, 454 | "node_modules/asynckit": { 455 | "version": "0.4.0", 456 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 457 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 458 | }, 459 | "node_modules/axios": { 460 | "version": "0.27.2", 461 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", 462 | "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", 463 | "dependencies": { 464 | "follow-redirects": "^1.14.9", 465 | "form-data": "^4.0.0" 466 | } 467 | }, 468 | "node_modules/base-64": { 469 | "version": "0.1.0", 470 | "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", 471 | "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" 472 | }, 473 | "node_modules/chalk": { 474 | "version": "5.3.0", 475 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 476 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 477 | "engines": { 478 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 479 | }, 480 | "funding": { 481 | "url": "https://github.com/chalk/chalk?sponsor=1" 482 | } 483 | }, 484 | "node_modules/charenc": { 485 | "version": "0.0.2", 486 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 487 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", 488 | "engines": { 489 | "node": "*" 490 | } 491 | }, 492 | "node_modules/cli-cursor": { 493 | "version": "4.0.0", 494 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", 495 | "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", 496 | "dependencies": { 497 | "restore-cursor": "^4.0.0" 498 | }, 499 | "engines": { 500 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 501 | }, 502 | "funding": { 503 | "url": "https://github.com/sponsors/sindresorhus" 504 | } 505 | }, 506 | "node_modules/cli-spinners": { 507 | "version": "2.9.2", 508 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 509 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 510 | "engines": { 511 | "node": ">=6" 512 | }, 513 | "funding": { 514 | "url": "https://github.com/sponsors/sindresorhus" 515 | } 516 | }, 517 | "node_modules/cliui": { 518 | "version": "8.0.1", 519 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 520 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 521 | "dependencies": { 522 | "string-width": "^4.2.0", 523 | "strip-ansi": "^6.0.1", 524 | "wrap-ansi": "^7.0.0" 525 | }, 526 | "engines": { 527 | "node": ">=12" 528 | } 529 | }, 530 | "node_modules/color-convert": { 531 | "version": "2.0.1", 532 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 533 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 534 | "dependencies": { 535 | "color-name": "~1.1.4" 536 | }, 537 | "engines": { 538 | "node": ">=7.0.0" 539 | } 540 | }, 541 | "node_modules/color-name": { 542 | "version": "1.1.4", 543 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 544 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 545 | }, 546 | "node_modules/combined-stream": { 547 | "version": "1.0.8", 548 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 549 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 550 | "dependencies": { 551 | "delayed-stream": "~1.0.0" 552 | }, 553 | "engines": { 554 | "node": ">= 0.8" 555 | } 556 | }, 557 | "node_modules/crypt": { 558 | "version": "0.0.2", 559 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 560 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", 561 | "engines": { 562 | "node": "*" 563 | } 564 | }, 565 | "node_modules/delayed-stream": { 566 | "version": "1.0.0", 567 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 568 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 569 | "engines": { 570 | "node": ">=0.4.0" 571 | } 572 | }, 573 | "node_modules/digest-fetch": { 574 | "version": "1.3.0", 575 | "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", 576 | "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", 577 | "dependencies": { 578 | "base-64": "^0.1.0", 579 | "md5": "^2.3.0" 580 | } 581 | }, 582 | "node_modules/dotenv": { 583 | "version": "16.3.1", 584 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 585 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", 586 | "engines": { 587 | "node": ">=12" 588 | }, 589 | "funding": { 590 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 591 | } 592 | }, 593 | "node_modules/emoji-regex": { 594 | "version": "8.0.0", 595 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 596 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 597 | }, 598 | "node_modules/esbuild": { 599 | "version": "0.19.11", 600 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", 601 | "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", 602 | "hasInstallScript": true, 603 | "bin": { 604 | "esbuild": "bin/esbuild" 605 | }, 606 | "engines": { 607 | "node": ">=12" 608 | }, 609 | "optionalDependencies": { 610 | "@esbuild/aix-ppc64": "0.19.11", 611 | "@esbuild/android-arm": "0.19.11", 612 | "@esbuild/android-arm64": "0.19.11", 613 | "@esbuild/android-x64": "0.19.11", 614 | "@esbuild/darwin-arm64": "0.19.11", 615 | "@esbuild/darwin-x64": "0.19.11", 616 | "@esbuild/freebsd-arm64": "0.19.11", 617 | "@esbuild/freebsd-x64": "0.19.11", 618 | "@esbuild/linux-arm": "0.19.11", 619 | "@esbuild/linux-arm64": "0.19.11", 620 | "@esbuild/linux-ia32": "0.19.11", 621 | "@esbuild/linux-loong64": "0.19.11", 622 | "@esbuild/linux-mips64el": "0.19.11", 623 | "@esbuild/linux-ppc64": "0.19.11", 624 | "@esbuild/linux-riscv64": "0.19.11", 625 | "@esbuild/linux-s390x": "0.19.11", 626 | "@esbuild/linux-x64": "0.19.11", 627 | "@esbuild/netbsd-x64": "0.19.11", 628 | "@esbuild/openbsd-x64": "0.19.11", 629 | "@esbuild/sunos-x64": "0.19.11", 630 | "@esbuild/win32-arm64": "0.19.11", 631 | "@esbuild/win32-ia32": "0.19.11", 632 | "@esbuild/win32-x64": "0.19.11" 633 | } 634 | }, 635 | "node_modules/escalade": { 636 | "version": "3.1.1", 637 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 638 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 639 | "engines": { 640 | "node": ">=6" 641 | } 642 | }, 643 | "node_modules/event-target-shim": { 644 | "version": "5.0.1", 645 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 646 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 647 | "engines": { 648 | "node": ">=6" 649 | } 650 | }, 651 | "node_modules/follow-redirects": { 652 | "version": "1.15.4", 653 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", 654 | "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", 655 | "funding": [ 656 | { 657 | "type": "individual", 658 | "url": "https://github.com/sponsors/RubenVerborgh" 659 | } 660 | ], 661 | "engines": { 662 | "node": ">=4.0" 663 | }, 664 | "peerDependenciesMeta": { 665 | "debug": { 666 | "optional": true 667 | } 668 | } 669 | }, 670 | "node_modules/form-data": { 671 | "version": "4.0.0", 672 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 673 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 674 | "dependencies": { 675 | "asynckit": "^0.4.0", 676 | "combined-stream": "^1.0.8", 677 | "mime-types": "^2.1.12" 678 | }, 679 | "engines": { 680 | "node": ">= 6" 681 | } 682 | }, 683 | "node_modules/form-data-encoder": { 684 | "version": "1.7.2", 685 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", 686 | "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" 687 | }, 688 | "node_modules/formdata-node": { 689 | "version": "4.4.1", 690 | "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", 691 | "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", 692 | "dependencies": { 693 | "node-domexception": "1.0.0", 694 | "web-streams-polyfill": "4.0.0-beta.3" 695 | }, 696 | "engines": { 697 | "node": ">= 12.20" 698 | } 699 | }, 700 | "node_modules/formdata-node/node_modules/web-streams-polyfill": { 701 | "version": "4.0.0-beta.3", 702 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", 703 | "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", 704 | "engines": { 705 | "node": ">= 14" 706 | } 707 | }, 708 | "node_modules/fsevents": { 709 | "version": "2.3.3", 710 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 711 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 712 | "hasInstallScript": true, 713 | "optional": true, 714 | "os": [ 715 | "darwin" 716 | ], 717 | "engines": { 718 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 719 | } 720 | }, 721 | "node_modules/get-caller-file": { 722 | "version": "2.0.5", 723 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 724 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 725 | "engines": { 726 | "node": "6.* || 8.* || >= 10.*" 727 | } 728 | }, 729 | "node_modules/get-east-asian-width": { 730 | "version": "1.2.0", 731 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 732 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", 733 | "engines": { 734 | "node": ">=18" 735 | }, 736 | "funding": { 737 | "url": "https://github.com/sponsors/sindresorhus" 738 | } 739 | }, 740 | "node_modules/get-tsconfig": { 741 | "version": "4.7.2", 742 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", 743 | "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", 744 | "dependencies": { 745 | "resolve-pkg-maps": "^1.0.0" 746 | }, 747 | "funding": { 748 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 749 | } 750 | }, 751 | "node_modules/humanize-ms": { 752 | "version": "1.2.1", 753 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 754 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 755 | "dependencies": { 756 | "ms": "^2.0.0" 757 | } 758 | }, 759 | "node_modules/is-buffer": { 760 | "version": "1.1.6", 761 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 762 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 763 | }, 764 | "node_modules/is-fullwidth-code-point": { 765 | "version": "3.0.0", 766 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 767 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 768 | "engines": { 769 | "node": ">=8" 770 | } 771 | }, 772 | "node_modules/is-interactive": { 773 | "version": "2.0.0", 774 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", 775 | "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", 776 | "engines": { 777 | "node": ">=12" 778 | }, 779 | "funding": { 780 | "url": "https://github.com/sponsors/sindresorhus" 781 | } 782 | }, 783 | "node_modules/is-unicode-supported": { 784 | "version": "2.0.0", 785 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", 786 | "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", 787 | "engines": { 788 | "node": ">=18" 789 | }, 790 | "funding": { 791 | "url": "https://github.com/sponsors/sindresorhus" 792 | } 793 | }, 794 | "node_modules/log-symbols": { 795 | "version": "6.0.0", 796 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", 797 | "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", 798 | "dependencies": { 799 | "chalk": "^5.3.0", 800 | "is-unicode-supported": "^1.3.0" 801 | }, 802 | "engines": { 803 | "node": ">=18" 804 | }, 805 | "funding": { 806 | "url": "https://github.com/sponsors/sindresorhus" 807 | } 808 | }, 809 | "node_modules/log-symbols/node_modules/is-unicode-supported": { 810 | "version": "1.3.0", 811 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 812 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 813 | "engines": { 814 | "node": ">=12" 815 | }, 816 | "funding": { 817 | "url": "https://github.com/sponsors/sindresorhus" 818 | } 819 | }, 820 | "node_modules/md5": { 821 | "version": "2.3.0", 822 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 823 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 824 | "dependencies": { 825 | "charenc": "0.0.2", 826 | "crypt": "0.0.2", 827 | "is-buffer": "~1.1.6" 828 | } 829 | }, 830 | "node_modules/mime-db": { 831 | "version": "1.52.0", 832 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 833 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 834 | "engines": { 835 | "node": ">= 0.6" 836 | } 837 | }, 838 | "node_modules/mime-types": { 839 | "version": "2.1.35", 840 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 841 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 842 | "dependencies": { 843 | "mime-db": "1.52.0" 844 | }, 845 | "engines": { 846 | "node": ">= 0.6" 847 | } 848 | }, 849 | "node_modules/mimic-fn": { 850 | "version": "2.1.0", 851 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 852 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 853 | "engines": { 854 | "node": ">=6" 855 | } 856 | }, 857 | "node_modules/ms": { 858 | "version": "2.1.3", 859 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 860 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 861 | }, 862 | "node_modules/node-domexception": { 863 | "version": "1.0.0", 864 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 865 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 866 | "funding": [ 867 | { 868 | "type": "github", 869 | "url": "https://github.com/sponsors/jimmywarting" 870 | }, 871 | { 872 | "type": "github", 873 | "url": "https://paypal.me/jimmywarting" 874 | } 875 | ], 876 | "engines": { 877 | "node": ">=10.5.0" 878 | } 879 | }, 880 | "node_modules/node-fetch": { 881 | "version": "2.7.0", 882 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 883 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 884 | "dependencies": { 885 | "whatwg-url": "^5.0.0" 886 | }, 887 | "engines": { 888 | "node": "4.x || >=6.0.0" 889 | }, 890 | "peerDependencies": { 891 | "encoding": "^0.1.0" 892 | }, 893 | "peerDependenciesMeta": { 894 | "encoding": { 895 | "optional": true 896 | } 897 | } 898 | }, 899 | "node_modules/onetime": { 900 | "version": "5.1.2", 901 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 902 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 903 | "dependencies": { 904 | "mimic-fn": "^2.1.0" 905 | }, 906 | "engines": { 907 | "node": ">=6" 908 | }, 909 | "funding": { 910 | "url": "https://github.com/sponsors/sindresorhus" 911 | } 912 | }, 913 | "node_modules/openai": { 914 | "version": "4.24.1", 915 | "resolved": "https://registry.npmjs.org/openai/-/openai-4.24.1.tgz", 916 | "integrity": "sha512-ezm/O3eiZMnyBqirUnWm9N6INJU1WhNtz+nK/Zj/2oyKvRz9pgpViDxa5wYOtyGYXPn1sIKBV0I/S4BDhtydqw==", 917 | "dependencies": { 918 | "@types/node": "^18.11.18", 919 | "@types/node-fetch": "^2.6.4", 920 | "abort-controller": "^3.0.0", 921 | "agentkeepalive": "^4.2.1", 922 | "digest-fetch": "^1.3.0", 923 | "form-data-encoder": "1.7.2", 924 | "formdata-node": "^4.3.2", 925 | "node-fetch": "^2.6.7", 926 | "web-streams-polyfill": "^3.2.1" 927 | }, 928 | "bin": { 929 | "openai": "bin/cli" 930 | } 931 | }, 932 | "node_modules/ora": { 933 | "version": "8.0.1", 934 | "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", 935 | "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", 936 | "dependencies": { 937 | "chalk": "^5.3.0", 938 | "cli-cursor": "^4.0.0", 939 | "cli-spinners": "^2.9.2", 940 | "is-interactive": "^2.0.0", 941 | "is-unicode-supported": "^2.0.0", 942 | "log-symbols": "^6.0.0", 943 | "stdin-discarder": "^0.2.1", 944 | "string-width": "^7.0.0", 945 | "strip-ansi": "^7.1.0" 946 | }, 947 | "engines": { 948 | "node": ">=18" 949 | }, 950 | "funding": { 951 | "url": "https://github.com/sponsors/sindresorhus" 952 | } 953 | }, 954 | "node_modules/ora/node_modules/ansi-regex": { 955 | "version": "6.0.1", 956 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 957 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 958 | "engines": { 959 | "node": ">=12" 960 | }, 961 | "funding": { 962 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 963 | } 964 | }, 965 | "node_modules/ora/node_modules/emoji-regex": { 966 | "version": "10.3.0", 967 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", 968 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" 969 | }, 970 | "node_modules/ora/node_modules/string-width": { 971 | "version": "7.0.0", 972 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", 973 | "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", 974 | "dependencies": { 975 | "emoji-regex": "^10.3.0", 976 | "get-east-asian-width": "^1.0.0", 977 | "strip-ansi": "^7.1.0" 978 | }, 979 | "engines": { 980 | "node": ">=18" 981 | }, 982 | "funding": { 983 | "url": "https://github.com/sponsors/sindresorhus" 984 | } 985 | }, 986 | "node_modules/ora/node_modules/strip-ansi": { 987 | "version": "7.1.0", 988 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 989 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 990 | "dependencies": { 991 | "ansi-regex": "^6.0.1" 992 | }, 993 | "engines": { 994 | "node": ">=12" 995 | }, 996 | "funding": { 997 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 998 | } 999 | }, 1000 | "node_modules/prompt-sync": { 1001 | "version": "4.2.0", 1002 | "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", 1003 | "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", 1004 | "dependencies": { 1005 | "strip-ansi": "^5.0.0" 1006 | } 1007 | }, 1008 | "node_modules/prompt-sync/node_modules/ansi-regex": { 1009 | "version": "4.1.1", 1010 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1011 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 1012 | "engines": { 1013 | "node": ">=6" 1014 | } 1015 | }, 1016 | "node_modules/prompt-sync/node_modules/strip-ansi": { 1017 | "version": "5.2.0", 1018 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1019 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1020 | "dependencies": { 1021 | "ansi-regex": "^4.1.0" 1022 | }, 1023 | "engines": { 1024 | "node": ">=6" 1025 | } 1026 | }, 1027 | "node_modules/require-directory": { 1028 | "version": "2.1.1", 1029 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1030 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1031 | "engines": { 1032 | "node": ">=0.10.0" 1033 | } 1034 | }, 1035 | "node_modules/resolve-pkg-maps": { 1036 | "version": "1.0.0", 1037 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 1038 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 1039 | "funding": { 1040 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 1041 | } 1042 | }, 1043 | "node_modules/restore-cursor": { 1044 | "version": "4.0.0", 1045 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", 1046 | "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", 1047 | "dependencies": { 1048 | "onetime": "^5.1.0", 1049 | "signal-exit": "^3.0.2" 1050 | }, 1051 | "engines": { 1052 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1053 | }, 1054 | "funding": { 1055 | "url": "https://github.com/sponsors/sindresorhus" 1056 | } 1057 | }, 1058 | "node_modules/signal-exit": { 1059 | "version": "3.0.7", 1060 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1061 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1062 | }, 1063 | "node_modules/stdin-discarder": { 1064 | "version": "0.2.1", 1065 | "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.1.tgz", 1066 | "integrity": "sha512-wRXvkxiYhOAduH+LFL/Qpim5zIWKYH1yEGvU0W8PgmabrZZ29iC1LKS8i443SYct12oZmQH7nyEonKiV8RTIsg==", 1067 | "engines": { 1068 | "node": ">=18" 1069 | }, 1070 | "funding": { 1071 | "url": "https://github.com/sponsors/sindresorhus" 1072 | } 1073 | }, 1074 | "node_modules/string-width": { 1075 | "version": "4.2.3", 1076 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1077 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1078 | "dependencies": { 1079 | "emoji-regex": "^8.0.0", 1080 | "is-fullwidth-code-point": "^3.0.0", 1081 | "strip-ansi": "^6.0.1" 1082 | }, 1083 | "engines": { 1084 | "node": ">=8" 1085 | } 1086 | }, 1087 | "node_modules/strip-ansi": { 1088 | "version": "6.0.1", 1089 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1090 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1091 | "dependencies": { 1092 | "ansi-regex": "^5.0.1" 1093 | }, 1094 | "engines": { 1095 | "node": ">=8" 1096 | } 1097 | }, 1098 | "node_modules/tr46": { 1099 | "version": "0.0.3", 1100 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1101 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1102 | }, 1103 | "node_modules/tsx": { 1104 | "version": "4.7.0", 1105 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", 1106 | "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", 1107 | "dependencies": { 1108 | "esbuild": "~0.19.10", 1109 | "get-tsconfig": "^4.7.2" 1110 | }, 1111 | "bin": { 1112 | "tsx": "dist/cli.mjs" 1113 | }, 1114 | "engines": { 1115 | "node": ">=18.0.0" 1116 | }, 1117 | "optionalDependencies": { 1118 | "fsevents": "~2.3.3" 1119 | } 1120 | }, 1121 | "node_modules/typescript": { 1122 | "version": "4.9.5", 1123 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 1124 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1125 | "dev": true, 1126 | "bin": { 1127 | "tsc": "bin/tsc", 1128 | "tsserver": "bin/tsserver" 1129 | }, 1130 | "engines": { 1131 | "node": ">=4.2.0" 1132 | } 1133 | }, 1134 | "node_modules/undici-types": { 1135 | "version": "5.26.5", 1136 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 1137 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 1138 | }, 1139 | "node_modules/web-streams-polyfill": { 1140 | "version": "3.2.1", 1141 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", 1142 | "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", 1143 | "engines": { 1144 | "node": ">= 8" 1145 | } 1146 | }, 1147 | "node_modules/webidl-conversions": { 1148 | "version": "3.0.1", 1149 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1150 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1151 | }, 1152 | "node_modules/whatwg-url": { 1153 | "version": "5.0.0", 1154 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1155 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1156 | "dependencies": { 1157 | "tr46": "~0.0.3", 1158 | "webidl-conversions": "^3.0.0" 1159 | } 1160 | }, 1161 | "node_modules/wrap-ansi": { 1162 | "version": "7.0.0", 1163 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1164 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1165 | "dependencies": { 1166 | "ansi-styles": "^4.0.0", 1167 | "string-width": "^4.1.0", 1168 | "strip-ansi": "^6.0.0" 1169 | }, 1170 | "engines": { 1171 | "node": ">=10" 1172 | }, 1173 | "funding": { 1174 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1175 | } 1176 | }, 1177 | "node_modules/y18n": { 1178 | "version": "5.0.8", 1179 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1180 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1181 | "engines": { 1182 | "node": ">=10" 1183 | } 1184 | }, 1185 | "node_modules/yargs": { 1186 | "version": "17.7.2", 1187 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1188 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1189 | "dependencies": { 1190 | "cliui": "^8.0.1", 1191 | "escalade": "^3.1.1", 1192 | "get-caller-file": "^2.0.5", 1193 | "require-directory": "^2.1.1", 1194 | "string-width": "^4.2.3", 1195 | "y18n": "^5.0.5", 1196 | "yargs-parser": "^21.1.1" 1197 | }, 1198 | "engines": { 1199 | "node": ">=12" 1200 | } 1201 | }, 1202 | "node_modules/yargs-parser": { 1203 | "version": "21.1.1", 1204 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1205 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1206 | "engines": { 1207 | "node": ">=12" 1208 | } 1209 | } 1210 | }, 1211 | "dependencies": { 1212 | "@esbuild/aix-ppc64": { 1213 | "version": "0.19.11", 1214 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", 1215 | "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", 1216 | "optional": true 1217 | }, 1218 | "@esbuild/android-arm": { 1219 | "version": "0.19.11", 1220 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", 1221 | "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", 1222 | "optional": true 1223 | }, 1224 | "@esbuild/android-arm64": { 1225 | "version": "0.19.11", 1226 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", 1227 | "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", 1228 | "optional": true 1229 | }, 1230 | "@esbuild/android-x64": { 1231 | "version": "0.19.11", 1232 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", 1233 | "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", 1234 | "optional": true 1235 | }, 1236 | "@esbuild/darwin-arm64": { 1237 | "version": "0.19.11", 1238 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", 1239 | "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", 1240 | "optional": true 1241 | }, 1242 | "@esbuild/darwin-x64": { 1243 | "version": "0.19.11", 1244 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", 1245 | "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", 1246 | "optional": true 1247 | }, 1248 | "@esbuild/freebsd-arm64": { 1249 | "version": "0.19.11", 1250 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", 1251 | "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", 1252 | "optional": true 1253 | }, 1254 | "@esbuild/freebsd-x64": { 1255 | "version": "0.19.11", 1256 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", 1257 | "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", 1258 | "optional": true 1259 | }, 1260 | "@esbuild/linux-arm": { 1261 | "version": "0.19.11", 1262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", 1263 | "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", 1264 | "optional": true 1265 | }, 1266 | "@esbuild/linux-arm64": { 1267 | "version": "0.19.11", 1268 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", 1269 | "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", 1270 | "optional": true 1271 | }, 1272 | "@esbuild/linux-ia32": { 1273 | "version": "0.19.11", 1274 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", 1275 | "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", 1276 | "optional": true 1277 | }, 1278 | "@esbuild/linux-loong64": { 1279 | "version": "0.19.11", 1280 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", 1281 | "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", 1282 | "optional": true 1283 | }, 1284 | "@esbuild/linux-mips64el": { 1285 | "version": "0.19.11", 1286 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", 1287 | "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", 1288 | "optional": true 1289 | }, 1290 | "@esbuild/linux-ppc64": { 1291 | "version": "0.19.11", 1292 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", 1293 | "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", 1294 | "optional": true 1295 | }, 1296 | "@esbuild/linux-riscv64": { 1297 | "version": "0.19.11", 1298 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", 1299 | "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", 1300 | "optional": true 1301 | }, 1302 | "@esbuild/linux-s390x": { 1303 | "version": "0.19.11", 1304 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", 1305 | "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", 1306 | "optional": true 1307 | }, 1308 | "@esbuild/linux-x64": { 1309 | "version": "0.19.11", 1310 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", 1311 | "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", 1312 | "optional": true 1313 | }, 1314 | "@esbuild/netbsd-x64": { 1315 | "version": "0.19.11", 1316 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", 1317 | "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", 1318 | "optional": true 1319 | }, 1320 | "@esbuild/openbsd-x64": { 1321 | "version": "0.19.11", 1322 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", 1323 | "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", 1324 | "optional": true 1325 | }, 1326 | "@esbuild/sunos-x64": { 1327 | "version": "0.19.11", 1328 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", 1329 | "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", 1330 | "optional": true 1331 | }, 1332 | "@esbuild/win32-arm64": { 1333 | "version": "0.19.11", 1334 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", 1335 | "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", 1336 | "optional": true 1337 | }, 1338 | "@esbuild/win32-ia32": { 1339 | "version": "0.19.11", 1340 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", 1341 | "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", 1342 | "optional": true 1343 | }, 1344 | "@esbuild/win32-x64": { 1345 | "version": "0.19.11", 1346 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", 1347 | "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", 1348 | "optional": true 1349 | }, 1350 | "@types/node": { 1351 | "version": "18.19.4", 1352 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.4.tgz", 1353 | "integrity": "sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==", 1354 | "requires": { 1355 | "undici-types": "~5.26.4" 1356 | } 1357 | }, 1358 | "@types/node-fetch": { 1359 | "version": "2.6.10", 1360 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.10.tgz", 1361 | "integrity": "sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==", 1362 | "requires": { 1363 | "@types/node": "*", 1364 | "form-data": "^4.0.0" 1365 | } 1366 | }, 1367 | "@types/prompt-sync": { 1368 | "version": "4.2.3", 1369 | "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.3.tgz", 1370 | "integrity": "sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==", 1371 | "dev": true 1372 | }, 1373 | "@types/yargs": { 1374 | "version": "17.0.32", 1375 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", 1376 | "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", 1377 | "dev": true, 1378 | "requires": { 1379 | "@types/yargs-parser": "*" 1380 | } 1381 | }, 1382 | "@types/yargs-parser": { 1383 | "version": "21.0.3", 1384 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", 1385 | "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", 1386 | "dev": true 1387 | }, 1388 | "abort-controller": { 1389 | "version": "3.0.0", 1390 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 1391 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 1392 | "requires": { 1393 | "event-target-shim": "^5.0.0" 1394 | } 1395 | }, 1396 | "agentkeepalive": { 1397 | "version": "4.5.0", 1398 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", 1399 | "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", 1400 | "requires": { 1401 | "humanize-ms": "^1.2.1" 1402 | } 1403 | }, 1404 | "ansi-regex": { 1405 | "version": "5.0.1", 1406 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1407 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 1408 | }, 1409 | "ansi-styles": { 1410 | "version": "4.3.0", 1411 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1412 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1413 | "requires": { 1414 | "color-convert": "^2.0.1" 1415 | } 1416 | }, 1417 | "asynckit": { 1418 | "version": "0.4.0", 1419 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1420 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 1421 | }, 1422 | "axios": { 1423 | "version": "0.27.2", 1424 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", 1425 | "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", 1426 | "requires": { 1427 | "follow-redirects": "^1.14.9", 1428 | "form-data": "^4.0.0" 1429 | } 1430 | }, 1431 | "base-64": { 1432 | "version": "0.1.0", 1433 | "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", 1434 | "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" 1435 | }, 1436 | "chalk": { 1437 | "version": "5.3.0", 1438 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1439 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" 1440 | }, 1441 | "charenc": { 1442 | "version": "0.0.2", 1443 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 1444 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" 1445 | }, 1446 | "cli-cursor": { 1447 | "version": "4.0.0", 1448 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", 1449 | "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", 1450 | "requires": { 1451 | "restore-cursor": "^4.0.0" 1452 | } 1453 | }, 1454 | "cli-spinners": { 1455 | "version": "2.9.2", 1456 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 1457 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" 1458 | }, 1459 | "cliui": { 1460 | "version": "8.0.1", 1461 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1462 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1463 | "requires": { 1464 | "string-width": "^4.2.0", 1465 | "strip-ansi": "^6.0.1", 1466 | "wrap-ansi": "^7.0.0" 1467 | } 1468 | }, 1469 | "color-convert": { 1470 | "version": "2.0.1", 1471 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1472 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1473 | "requires": { 1474 | "color-name": "~1.1.4" 1475 | } 1476 | }, 1477 | "color-name": { 1478 | "version": "1.1.4", 1479 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1480 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1481 | }, 1482 | "combined-stream": { 1483 | "version": "1.0.8", 1484 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1485 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1486 | "requires": { 1487 | "delayed-stream": "~1.0.0" 1488 | } 1489 | }, 1490 | "crypt": { 1491 | "version": "0.0.2", 1492 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 1493 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" 1494 | }, 1495 | "delayed-stream": { 1496 | "version": "1.0.0", 1497 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1498 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 1499 | }, 1500 | "digest-fetch": { 1501 | "version": "1.3.0", 1502 | "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", 1503 | "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", 1504 | "requires": { 1505 | "base-64": "^0.1.0", 1506 | "md5": "^2.3.0" 1507 | } 1508 | }, 1509 | "dotenv": { 1510 | "version": "16.3.1", 1511 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 1512 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" 1513 | }, 1514 | "emoji-regex": { 1515 | "version": "8.0.0", 1516 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1517 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1518 | }, 1519 | "esbuild": { 1520 | "version": "0.19.11", 1521 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", 1522 | "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", 1523 | "requires": { 1524 | "@esbuild/aix-ppc64": "0.19.11", 1525 | "@esbuild/android-arm": "0.19.11", 1526 | "@esbuild/android-arm64": "0.19.11", 1527 | "@esbuild/android-x64": "0.19.11", 1528 | "@esbuild/darwin-arm64": "0.19.11", 1529 | "@esbuild/darwin-x64": "0.19.11", 1530 | "@esbuild/freebsd-arm64": "0.19.11", 1531 | "@esbuild/freebsd-x64": "0.19.11", 1532 | "@esbuild/linux-arm": "0.19.11", 1533 | "@esbuild/linux-arm64": "0.19.11", 1534 | "@esbuild/linux-ia32": "0.19.11", 1535 | "@esbuild/linux-loong64": "0.19.11", 1536 | "@esbuild/linux-mips64el": "0.19.11", 1537 | "@esbuild/linux-ppc64": "0.19.11", 1538 | "@esbuild/linux-riscv64": "0.19.11", 1539 | "@esbuild/linux-s390x": "0.19.11", 1540 | "@esbuild/linux-x64": "0.19.11", 1541 | "@esbuild/netbsd-x64": "0.19.11", 1542 | "@esbuild/openbsd-x64": "0.19.11", 1543 | "@esbuild/sunos-x64": "0.19.11", 1544 | "@esbuild/win32-arm64": "0.19.11", 1545 | "@esbuild/win32-ia32": "0.19.11", 1546 | "@esbuild/win32-x64": "0.19.11" 1547 | } 1548 | }, 1549 | "escalade": { 1550 | "version": "3.1.1", 1551 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1552 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1553 | }, 1554 | "event-target-shim": { 1555 | "version": "5.0.1", 1556 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1557 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 1558 | }, 1559 | "follow-redirects": { 1560 | "version": "1.15.4", 1561 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", 1562 | "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" 1563 | }, 1564 | "form-data": { 1565 | "version": "4.0.0", 1566 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1567 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1568 | "requires": { 1569 | "asynckit": "^0.4.0", 1570 | "combined-stream": "^1.0.8", 1571 | "mime-types": "^2.1.12" 1572 | } 1573 | }, 1574 | "form-data-encoder": { 1575 | "version": "1.7.2", 1576 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", 1577 | "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" 1578 | }, 1579 | "formdata-node": { 1580 | "version": "4.4.1", 1581 | "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", 1582 | "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", 1583 | "requires": { 1584 | "node-domexception": "1.0.0", 1585 | "web-streams-polyfill": "4.0.0-beta.3" 1586 | }, 1587 | "dependencies": { 1588 | "web-streams-polyfill": { 1589 | "version": "4.0.0-beta.3", 1590 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", 1591 | "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" 1592 | } 1593 | } 1594 | }, 1595 | "fsevents": { 1596 | "version": "2.3.3", 1597 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1598 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1599 | "optional": true 1600 | }, 1601 | "get-caller-file": { 1602 | "version": "2.0.5", 1603 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1604 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1605 | }, 1606 | "get-east-asian-width": { 1607 | "version": "1.2.0", 1608 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 1609 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==" 1610 | }, 1611 | "get-tsconfig": { 1612 | "version": "4.7.2", 1613 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", 1614 | "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", 1615 | "requires": { 1616 | "resolve-pkg-maps": "^1.0.0" 1617 | } 1618 | }, 1619 | "humanize-ms": { 1620 | "version": "1.2.1", 1621 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 1622 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 1623 | "requires": { 1624 | "ms": "^2.0.0" 1625 | } 1626 | }, 1627 | "is-buffer": { 1628 | "version": "1.1.6", 1629 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1630 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1631 | }, 1632 | "is-fullwidth-code-point": { 1633 | "version": "3.0.0", 1634 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1635 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1636 | }, 1637 | "is-interactive": { 1638 | "version": "2.0.0", 1639 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", 1640 | "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" 1641 | }, 1642 | "is-unicode-supported": { 1643 | "version": "2.0.0", 1644 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", 1645 | "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==" 1646 | }, 1647 | "log-symbols": { 1648 | "version": "6.0.0", 1649 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", 1650 | "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", 1651 | "requires": { 1652 | "chalk": "^5.3.0", 1653 | "is-unicode-supported": "^1.3.0" 1654 | }, 1655 | "dependencies": { 1656 | "is-unicode-supported": { 1657 | "version": "1.3.0", 1658 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 1659 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" 1660 | } 1661 | } 1662 | }, 1663 | "md5": { 1664 | "version": "2.3.0", 1665 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 1666 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 1667 | "requires": { 1668 | "charenc": "0.0.2", 1669 | "crypt": "0.0.2", 1670 | "is-buffer": "~1.1.6" 1671 | } 1672 | }, 1673 | "mime-db": { 1674 | "version": "1.52.0", 1675 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1676 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1677 | }, 1678 | "mime-types": { 1679 | "version": "2.1.35", 1680 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1681 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1682 | "requires": { 1683 | "mime-db": "1.52.0" 1684 | } 1685 | }, 1686 | "mimic-fn": { 1687 | "version": "2.1.0", 1688 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1689 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 1690 | }, 1691 | "ms": { 1692 | "version": "2.1.3", 1693 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1694 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1695 | }, 1696 | "node-domexception": { 1697 | "version": "1.0.0", 1698 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 1699 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" 1700 | }, 1701 | "node-fetch": { 1702 | "version": "2.7.0", 1703 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1704 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1705 | "requires": { 1706 | "whatwg-url": "^5.0.0" 1707 | } 1708 | }, 1709 | "onetime": { 1710 | "version": "5.1.2", 1711 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1712 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1713 | "requires": { 1714 | "mimic-fn": "^2.1.0" 1715 | } 1716 | }, 1717 | "openai": { 1718 | "version": "4.24.1", 1719 | "resolved": "https://registry.npmjs.org/openai/-/openai-4.24.1.tgz", 1720 | "integrity": "sha512-ezm/O3eiZMnyBqirUnWm9N6INJU1WhNtz+nK/Zj/2oyKvRz9pgpViDxa5wYOtyGYXPn1sIKBV0I/S4BDhtydqw==", 1721 | "requires": { 1722 | "@types/node": "^18.11.18", 1723 | "@types/node-fetch": "^2.6.4", 1724 | "abort-controller": "^3.0.0", 1725 | "agentkeepalive": "^4.2.1", 1726 | "digest-fetch": "^1.3.0", 1727 | "form-data-encoder": "1.7.2", 1728 | "formdata-node": "^4.3.2", 1729 | "node-fetch": "^2.6.7", 1730 | "web-streams-polyfill": "^3.2.1" 1731 | } 1732 | }, 1733 | "ora": { 1734 | "version": "8.0.1", 1735 | "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", 1736 | "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", 1737 | "requires": { 1738 | "chalk": "^5.3.0", 1739 | "cli-cursor": "^4.0.0", 1740 | "cli-spinners": "^2.9.2", 1741 | "is-interactive": "^2.0.0", 1742 | "is-unicode-supported": "^2.0.0", 1743 | "log-symbols": "^6.0.0", 1744 | "stdin-discarder": "^0.2.1", 1745 | "string-width": "^7.0.0", 1746 | "strip-ansi": "^7.1.0" 1747 | }, 1748 | "dependencies": { 1749 | "ansi-regex": { 1750 | "version": "6.0.1", 1751 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1752 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" 1753 | }, 1754 | "emoji-regex": { 1755 | "version": "10.3.0", 1756 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", 1757 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" 1758 | }, 1759 | "string-width": { 1760 | "version": "7.0.0", 1761 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", 1762 | "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", 1763 | "requires": { 1764 | "emoji-regex": "^10.3.0", 1765 | "get-east-asian-width": "^1.0.0", 1766 | "strip-ansi": "^7.1.0" 1767 | } 1768 | }, 1769 | "strip-ansi": { 1770 | "version": "7.1.0", 1771 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1772 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1773 | "requires": { 1774 | "ansi-regex": "^6.0.1" 1775 | } 1776 | } 1777 | } 1778 | }, 1779 | "prompt-sync": { 1780 | "version": "4.2.0", 1781 | "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", 1782 | "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", 1783 | "requires": { 1784 | "strip-ansi": "^5.0.0" 1785 | }, 1786 | "dependencies": { 1787 | "ansi-regex": { 1788 | "version": "4.1.1", 1789 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1790 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" 1791 | }, 1792 | "strip-ansi": { 1793 | "version": "5.2.0", 1794 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1795 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1796 | "requires": { 1797 | "ansi-regex": "^4.1.0" 1798 | } 1799 | } 1800 | } 1801 | }, 1802 | "require-directory": { 1803 | "version": "2.1.1", 1804 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1805 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 1806 | }, 1807 | "resolve-pkg-maps": { 1808 | "version": "1.0.0", 1809 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 1810 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" 1811 | }, 1812 | "restore-cursor": { 1813 | "version": "4.0.0", 1814 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", 1815 | "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", 1816 | "requires": { 1817 | "onetime": "^5.1.0", 1818 | "signal-exit": "^3.0.2" 1819 | } 1820 | }, 1821 | "signal-exit": { 1822 | "version": "3.0.7", 1823 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1824 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1825 | }, 1826 | "stdin-discarder": { 1827 | "version": "0.2.1", 1828 | "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.1.tgz", 1829 | "integrity": "sha512-wRXvkxiYhOAduH+LFL/Qpim5zIWKYH1yEGvU0W8PgmabrZZ29iC1LKS8i443SYct12oZmQH7nyEonKiV8RTIsg==" 1830 | }, 1831 | "string-width": { 1832 | "version": "4.2.3", 1833 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1834 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1835 | "requires": { 1836 | "emoji-regex": "^8.0.0", 1837 | "is-fullwidth-code-point": "^3.0.0", 1838 | "strip-ansi": "^6.0.1" 1839 | } 1840 | }, 1841 | "strip-ansi": { 1842 | "version": "6.0.1", 1843 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1844 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1845 | "requires": { 1846 | "ansi-regex": "^5.0.1" 1847 | } 1848 | }, 1849 | "tr46": { 1850 | "version": "0.0.3", 1851 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1852 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1853 | }, 1854 | "tsx": { 1855 | "version": "4.7.0", 1856 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", 1857 | "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", 1858 | "requires": { 1859 | "esbuild": "~0.19.10", 1860 | "fsevents": "~2.3.3", 1861 | "get-tsconfig": "^4.7.2" 1862 | } 1863 | }, 1864 | "typescript": { 1865 | "version": "4.9.5", 1866 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 1867 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1868 | "dev": true 1869 | }, 1870 | "undici-types": { 1871 | "version": "5.26.5", 1872 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 1873 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 1874 | }, 1875 | "web-streams-polyfill": { 1876 | "version": "3.2.1", 1877 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", 1878 | "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" 1879 | }, 1880 | "webidl-conversions": { 1881 | "version": "3.0.1", 1882 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1883 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1884 | }, 1885 | "whatwg-url": { 1886 | "version": "5.0.0", 1887 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1888 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1889 | "requires": { 1890 | "tr46": "~0.0.3", 1891 | "webidl-conversions": "^3.0.0" 1892 | } 1893 | }, 1894 | "wrap-ansi": { 1895 | "version": "7.0.0", 1896 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1897 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1898 | "requires": { 1899 | "ansi-styles": "^4.0.0", 1900 | "string-width": "^4.1.0", 1901 | "strip-ansi": "^6.0.0" 1902 | } 1903 | }, 1904 | "y18n": { 1905 | "version": "5.0.8", 1906 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1907 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 1908 | }, 1909 | "yargs": { 1910 | "version": "17.7.2", 1911 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1912 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1913 | "requires": { 1914 | "cliui": "^8.0.1", 1915 | "escalade": "^3.1.1", 1916 | "get-caller-file": "^2.0.5", 1917 | "require-directory": "^2.1.1", 1918 | "string-width": "^4.2.3", 1919 | "y18n": "^5.0.5", 1920 | "yargs-parser": "^21.1.1" 1921 | } 1922 | }, 1923 | "yargs-parser": { 1924 | "version": "21.1.1", 1925 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1926 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" 1927 | } 1928 | } 1929 | } 1930 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chisel", 3 | "version": "1.0.0", 4 | "description": "Give ChatGPT direct access to read and write your application code", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "start": "tsx src/index.ts", 8 | "build": "tsc" 9 | }, 10 | "keywords": [ 11 | "chatgpt", 12 | "openai", 13 | "cli", 14 | "typescript" 15 | ], 16 | "author": "", 17 | "license": "ISC", 18 | "dependencies": { 19 | "axios": "^0.27.2", 20 | "dotenv": "^16.0.1", 21 | "openai": "^4.24.1", 22 | "ora": "^8.0.1", 23 | "prompt-sync": "^4.2.0", 24 | "tsx": "^4.7.0", 25 | "yargs": "^17.7.2" 26 | }, 27 | "devDependencies": { 28 | "@types/node": "^18.0.0", 29 | "@types/prompt-sync": "^4.2.3", 30 | "@types/yargs": "^17.0.32", 31 | "typescript": "^4.7.4" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as dotenv from "dotenv"; 2 | import { existsSync } from "fs"; 3 | import OpenAI from "openai"; 4 | import { ChatCompletionMessageParam } from "openai/resources"; 5 | import ora from "ora"; 6 | import path from "path"; 7 | import promptSync from "prompt-sync"; 8 | import { hideBin } from "yargs/helpers"; 9 | import yargs from "yargs/yargs"; 10 | import { readFiles, readFilesSpec } from "./read-files"; 11 | import { writeFiles, writeFilesSpec } from "./write-files"; 12 | 13 | const prompt = promptSync({ sigint: true }); 14 | dotenv.config(); 15 | 16 | const spinner = ora("ChatGPT"); 17 | process.on("SIGINT", () => { 18 | spinner.stop(); 19 | console.log("\nOperation interrupted by the user."); 20 | process.exit(1); 21 | }); 22 | 23 | const options = yargs(hideBin(process.argv)) 24 | .options({ 25 | directory: { 26 | alias: ["d", "dir"], 27 | type: "string", 28 | describe: `The directory containing the code`, 29 | }, 30 | ignorePaths: { 31 | type: "array", 32 | describe: 33 | "Paths to ignore. You can specify multiple, e.g. --ignorePaths 'path/to/ignore1' --ignorePaths 'path/to/ignore2'", 34 | default: [], 35 | }, 36 | logFullResponses: { 37 | type: "boolean", 38 | describe: "Log the full ChatGPT response object", 39 | }, 40 | }) 41 | .demandOption(["directory"]) 42 | .strict() 43 | .parseSync(); 44 | 45 | const dir = options.directory as string; 46 | const ignorePaths = (options.ignorePaths as string[]) || []; 47 | const logFullResponses = options.logFullResponses as boolean; 48 | 49 | if (!existsSync(dir)) { 50 | console.error(`Directory ${dir} does not exist`); 51 | process.exit(1); 52 | } 53 | const absoluteDir = path.resolve(dir); 54 | 55 | const openai = new OpenAI({ 56 | apiKey: process.env["OPENAI_API_KEY"] as string, 57 | }); 58 | 59 | const conversationHistory: ChatCompletionMessageParam[] = []; 60 | 61 | async function handlePrompt(prompt: ChatCompletionMessageParam) { 62 | const response = await sendToChatGPT(prompt); 63 | const responseMessage = response.choices[0].message; 64 | if (responseMessage.function_call?.name === readFiles.name) { 65 | const result = await readFiles(absoluteDir, ignorePaths); 66 | await sendToChatGPT({ 67 | role: "function", 68 | name: "readFiles", 69 | content: result, 70 | }); 71 | } else if (responseMessage.function_call?.name === writeFiles.name) { 72 | const args = JSON.parse(responseMessage.function_call.arguments); 73 | writeFiles(absoluteDir, args.relativePaths, args.contentsArray); 74 | await sendToChatGPT({ 75 | role: "function", 76 | name: "writeFiles", 77 | content: "Done", 78 | }); 79 | console.log(`Writing ${args.relativePaths}`); 80 | } else { 81 | conversationHistory.push({ 82 | role: "assistant", 83 | content: responseMessage.content, 84 | }); 85 | } 86 | } 87 | 88 | async function sendToChatGPT(prompt: ChatCompletionMessageParam) { 89 | conversationHistory.push(prompt); 90 | spinner.start(); 91 | const response = await openai.chat.completions.create({ 92 | model: "gpt-4-1106-preview", 93 | messages: conversationHistory, 94 | functions: [readFilesSpec, writeFilesSpec], 95 | }); 96 | spinner.stop(); 97 | const totalTokens = response.usage?.total_tokens; 98 | console.log(`[${totalTokens} tokens]`); 99 | if (logFullResponses) { 100 | console.log("", JSON.stringify(response, null, 2), ""); 101 | } 102 | const responseMessage = response.choices[0].message; 103 | if (responseMessage.content) { 104 | console.log(); 105 | console.log("ChatGPT:", responseMessage.content); 106 | } 107 | return response; 108 | } 109 | 110 | async function chat() { 111 | console.log(); 112 | const content = prompt("You: "); 113 | await handlePrompt({ 114 | role: "user", 115 | content, 116 | }); 117 | await chat(); 118 | } 119 | 120 | const systemPrompts = [ 121 | `Start by reading the contents of all files in the directory.`, 122 | `Never output code changes to the console. Always write to files instead.`, 123 | `Always write the whole file contents, not just the changes.`, 124 | `Don't suggest any changes after you read the files for the first time.`, 125 | ]; 126 | 127 | (async () => { 128 | await handlePrompt({ 129 | role: "system", 130 | content: systemPrompts.join("\n"), 131 | }); 132 | await chat(); 133 | })(); 134 | -------------------------------------------------------------------------------- /src/read-files.ts: -------------------------------------------------------------------------------- 1 | import { readdir, readFile } from "fs/promises"; 2 | import path from "path"; 3 | 4 | const DEFAULT_IGNORE_PATHS = [ 5 | `\\.git`, 6 | `\\.idea`, 7 | `\\.vscode`, 8 | `\\.DS_Store`, 9 | `\\.env*`, 10 | `dist`, 11 | `build`, 12 | `out`, 13 | `node_modules`, 14 | `pnpm-lock\\.yaml`, 15 | `package-lock\\.json`, 16 | `\\.(jpg|jpeg|png|gif|ico)$`, 17 | ]; 18 | 19 | export const readFilesSpec = { 20 | name: readFiles.name, 21 | description: 22 | "Read the contents of all files in the directory, apart from 'ignored' files like node_modules", 23 | parameters: {}, 24 | }; 25 | 26 | export async function readFiles( 27 | absoluteDir: string, 28 | ignorePaths: string[] = [] 29 | ) { 30 | console.log(`Reading contents of directory ${absoluteDir}...`); 31 | const allIgnorePaths = [...DEFAULT_IGNORE_PATHS, ...ignorePaths]; 32 | const files = await getFilesRecursive(absoluteDir, allIgnorePaths); 33 | let combinedContent = ""; 34 | for (const file of files) { 35 | const relativePath = path.relative(absoluteDir, file); 36 | combinedContent += `@@@@ CONTENTS OF FILE ${relativePath} @@@@\n\n`; 37 | combinedContent += (await readFile(file, "utf8")) + "\n"; 38 | } 39 | return combinedContent; 40 | } 41 | 42 | async function getFilesRecursive( 43 | dir: string, 44 | ignorePatterns: string[] 45 | ): Promise { 46 | let results: string[] = []; 47 | const entries = await readdir(dir, { withFileTypes: true }); 48 | for (const entry of entries) { 49 | const fullPath = path.resolve(dir, entry.name); 50 | if (entry.isDirectory()) { 51 | results = [ 52 | ...results, 53 | ...(await getFilesRecursive(fullPath, ignorePatterns)), 54 | ]; 55 | } else if (!isIgnored(fullPath, ignorePatterns)) { 56 | results.push(fullPath); 57 | } 58 | } 59 | return results; 60 | } 61 | 62 | function isIgnored(filePath: string, ignorePatterns: string[]) { 63 | return ignorePatterns.some((pattern) => new RegExp(pattern).test(filePath)); 64 | } 65 | -------------------------------------------------------------------------------- /src/write-files.ts: -------------------------------------------------------------------------------- 1 | import { writeFileSync, existsSync, mkdirSync } from "fs"; 2 | import path from "path"; 3 | 4 | export const writeFilesSpec = { 5 | name: "writeFiles", 6 | description: 7 | "Write content to multiple files inside the directory, creating each file if it does not exist.", 8 | parameters: { 9 | type: "object", 10 | properties: { 11 | relativePaths: { 12 | type: "array", 13 | items: { 14 | type: "string", 15 | description: 16 | "The paths of the files to write to, relative to the root of the directory", 17 | }, 18 | }, 19 | contentsArray: { 20 | type: "array", 21 | items: { 22 | type: "string", 23 | description: "The contents of the files", 24 | }, 25 | }, 26 | }, 27 | required: ["relativePaths", "contentsArray"], 28 | }, 29 | }; 30 | 31 | export function writeFiles( 32 | absoluteDir: string, 33 | relativePaths: string[], 34 | contentsArray: string[] 35 | ) { 36 | if (relativePaths.length !== contentsArray.length) { 37 | throw new Error("The number of paths and contents must be equal"); 38 | } 39 | for (let i = 0; i < relativePaths.length; i++) { 40 | const fullPath = path.resolve(absoluteDir, relativePaths[i]); 41 | if (!fullPath.startsWith(absoluteDir)) { 42 | throw new Error( 43 | "One of the paths is outside the directory: " + fullPath 44 | ); 45 | } 46 | 47 | if (!existsSync(fullPath)) { 48 | const directory = path.dirname(fullPath); 49 | 50 | mkdirSync(directory, { recursive: true }); 51 | } 52 | 53 | writeFileSync(fullPath, contentsArray[i]); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | "target": "es5", 5 | "module": "commonjs", 6 | "rootDir": "./src", 7 | "outDir": "./dist", 8 | "esModuleInterop": true, 9 | "strict": true 10 | }, 11 | "include": ["src/**/*"], 12 | "exclude": ["node_modules", "**/*.spec.ts"] 13 | } 14 | --------------------------------------------------------------------------------