Claude code over acp for vicinae launcher
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

initial commit

chris 740607c1

+4790
+4
.gitignore
··· 1 + node_modules/ 2 + dist/ 3 + .claude/ 4 + assets/source-path.txt
assets/anthropic-logo.png

This is a binary file and will not be displayed.

assets/extension_icon.png

This is a binary file and will not be displayed.

+3936
package-lock.json
··· 1 + { 2 + "name": "vclaude", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "name": "vclaude", 8 + "license": "MIT", 9 + "dependencies": { 10 + "@vicinae/api": "^0.16.5", 11 + "@zed-industries/claude-agent-acp": "latest" 12 + } 13 + }, 14 + "node_modules/@agentclientprotocol/sdk": { 15 + "version": "0.16.1", 16 + "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-0.16.1.tgz", 17 + "integrity": "sha512-1ad+Sc/0sCtZGHthxxvgEUo5Wsbw16I+aF+YwdiLnPwkZG8KAGUEAPK6LM6Pf69lCyJPt1Aomk1d+8oE3C4ZEw==", 18 + "license": "Apache-2.0", 19 + "peerDependencies": { 20 + "zod": "^3.25.0 || ^4.0.0" 21 + } 22 + }, 23 + "node_modules/@anthropic-ai/claude-agent-sdk": { 24 + "version": "0.2.76", 25 + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.2.76.tgz", 26 + "integrity": "sha512-HZxvnT8ZWkzCnQygaYCA0dl8RSUzuVbxE1YG4ecy6vh4nQbTT36CxUxBy+QVdR12pPQluncC0mCOLhI2918Eaw==", 27 + "license": "SEE LICENSE IN README.md", 28 + "engines": { 29 + "node": ">=18.0.0" 30 + }, 31 + "optionalDependencies": { 32 + "@img/sharp-darwin-arm64": "^0.34.2", 33 + "@img/sharp-darwin-x64": "^0.34.2", 34 + "@img/sharp-linux-arm": "^0.34.2", 35 + "@img/sharp-linux-arm64": "^0.34.2", 36 + "@img/sharp-linux-x64": "^0.34.2", 37 + "@img/sharp-linuxmusl-arm64": "^0.34.2", 38 + "@img/sharp-linuxmusl-x64": "^0.34.2", 39 + "@img/sharp-win32-arm64": "^0.34.2", 40 + "@img/sharp-win32-x64": "^0.34.2" 41 + }, 42 + "peerDependencies": { 43 + "zod": "^4.0.0" 44 + } 45 + }, 46 + "node_modules/@esbuild/aix-ppc64": { 47 + "version": "0.25.12", 48 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", 49 + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 50 + "cpu": [ 51 + "ppc64" 52 + ], 53 + "license": "MIT", 54 + "optional": true, 55 + "os": [ 56 + "aix" 57 + ], 58 + "engines": { 59 + "node": ">=18" 60 + } 61 + }, 62 + "node_modules/@esbuild/android-arm": { 63 + "version": "0.25.12", 64 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", 65 + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 66 + "cpu": [ 67 + "arm" 68 + ], 69 + "license": "MIT", 70 + "optional": true, 71 + "os": [ 72 + "android" 73 + ], 74 + "engines": { 75 + "node": ">=18" 76 + } 77 + }, 78 + "node_modules/@esbuild/android-arm64": { 79 + "version": "0.25.12", 80 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", 81 + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 82 + "cpu": [ 83 + "arm64" 84 + ], 85 + "license": "MIT", 86 + "optional": true, 87 + "os": [ 88 + "android" 89 + ], 90 + "engines": { 91 + "node": ">=18" 92 + } 93 + }, 94 + "node_modules/@esbuild/android-x64": { 95 + "version": "0.25.12", 96 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", 97 + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 98 + "cpu": [ 99 + "x64" 100 + ], 101 + "license": "MIT", 102 + "optional": true, 103 + "os": [ 104 + "android" 105 + ], 106 + "engines": { 107 + "node": ">=18" 108 + } 109 + }, 110 + "node_modules/@esbuild/darwin-arm64": { 111 + "version": "0.25.12", 112 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", 113 + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 114 + "cpu": [ 115 + "arm64" 116 + ], 117 + "license": "MIT", 118 + "optional": true, 119 + "os": [ 120 + "darwin" 121 + ], 122 + "engines": { 123 + "node": ">=18" 124 + } 125 + }, 126 + "node_modules/@esbuild/darwin-x64": { 127 + "version": "0.25.12", 128 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", 129 + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 130 + "cpu": [ 131 + "x64" 132 + ], 133 + "license": "MIT", 134 + "optional": true, 135 + "os": [ 136 + "darwin" 137 + ], 138 + "engines": { 139 + "node": ">=18" 140 + } 141 + }, 142 + "node_modules/@esbuild/freebsd-arm64": { 143 + "version": "0.25.12", 144 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", 145 + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 146 + "cpu": [ 147 + "arm64" 148 + ], 149 + "license": "MIT", 150 + "optional": true, 151 + "os": [ 152 + "freebsd" 153 + ], 154 + "engines": { 155 + "node": ">=18" 156 + } 157 + }, 158 + "node_modules/@esbuild/freebsd-x64": { 159 + "version": "0.25.12", 160 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", 161 + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 162 + "cpu": [ 163 + "x64" 164 + ], 165 + "license": "MIT", 166 + "optional": true, 167 + "os": [ 168 + "freebsd" 169 + ], 170 + "engines": { 171 + "node": ">=18" 172 + } 173 + }, 174 + "node_modules/@esbuild/linux-arm": { 175 + "version": "0.25.12", 176 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", 177 + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 178 + "cpu": [ 179 + "arm" 180 + ], 181 + "license": "MIT", 182 + "optional": true, 183 + "os": [ 184 + "linux" 185 + ], 186 + "engines": { 187 + "node": ">=18" 188 + } 189 + }, 190 + "node_modules/@esbuild/linux-arm64": { 191 + "version": "0.25.12", 192 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", 193 + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 194 + "cpu": [ 195 + "arm64" 196 + ], 197 + "license": "MIT", 198 + "optional": true, 199 + "os": [ 200 + "linux" 201 + ], 202 + "engines": { 203 + "node": ">=18" 204 + } 205 + }, 206 + "node_modules/@esbuild/linux-ia32": { 207 + "version": "0.25.12", 208 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", 209 + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 210 + "cpu": [ 211 + "ia32" 212 + ], 213 + "license": "MIT", 214 + "optional": true, 215 + "os": [ 216 + "linux" 217 + ], 218 + "engines": { 219 + "node": ">=18" 220 + } 221 + }, 222 + "node_modules/@esbuild/linux-loong64": { 223 + "version": "0.25.12", 224 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", 225 + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 226 + "cpu": [ 227 + "loong64" 228 + ], 229 + "license": "MIT", 230 + "optional": true, 231 + "os": [ 232 + "linux" 233 + ], 234 + "engines": { 235 + "node": ">=18" 236 + } 237 + }, 238 + "node_modules/@esbuild/linux-mips64el": { 239 + "version": "0.25.12", 240 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", 241 + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 242 + "cpu": [ 243 + "mips64el" 244 + ], 245 + "license": "MIT", 246 + "optional": true, 247 + "os": [ 248 + "linux" 249 + ], 250 + "engines": { 251 + "node": ">=18" 252 + } 253 + }, 254 + "node_modules/@esbuild/linux-ppc64": { 255 + "version": "0.25.12", 256 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", 257 + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 258 + "cpu": [ 259 + "ppc64" 260 + ], 261 + "license": "MIT", 262 + "optional": true, 263 + "os": [ 264 + "linux" 265 + ], 266 + "engines": { 267 + "node": ">=18" 268 + } 269 + }, 270 + "node_modules/@esbuild/linux-riscv64": { 271 + "version": "0.25.12", 272 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", 273 + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 274 + "cpu": [ 275 + "riscv64" 276 + ], 277 + "license": "MIT", 278 + "optional": true, 279 + "os": [ 280 + "linux" 281 + ], 282 + "engines": { 283 + "node": ">=18" 284 + } 285 + }, 286 + "node_modules/@esbuild/linux-s390x": { 287 + "version": "0.25.12", 288 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", 289 + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 290 + "cpu": [ 291 + "s390x" 292 + ], 293 + "license": "MIT", 294 + "optional": true, 295 + "os": [ 296 + "linux" 297 + ], 298 + "engines": { 299 + "node": ">=18" 300 + } 301 + }, 302 + "node_modules/@esbuild/linux-x64": { 303 + "version": "0.25.12", 304 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", 305 + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 306 + "cpu": [ 307 + "x64" 308 + ], 309 + "license": "MIT", 310 + "optional": true, 311 + "os": [ 312 + "linux" 313 + ], 314 + "engines": { 315 + "node": ">=18" 316 + } 317 + }, 318 + "node_modules/@esbuild/netbsd-arm64": { 319 + "version": "0.25.12", 320 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", 321 + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 322 + "cpu": [ 323 + "arm64" 324 + ], 325 + "license": "MIT", 326 + "optional": true, 327 + "os": [ 328 + "netbsd" 329 + ], 330 + "engines": { 331 + "node": ">=18" 332 + } 333 + }, 334 + "node_modules/@esbuild/netbsd-x64": { 335 + "version": "0.25.12", 336 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", 337 + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 338 + "cpu": [ 339 + "x64" 340 + ], 341 + "license": "MIT", 342 + "optional": true, 343 + "os": [ 344 + "netbsd" 345 + ], 346 + "engines": { 347 + "node": ">=18" 348 + } 349 + }, 350 + "node_modules/@esbuild/openbsd-arm64": { 351 + "version": "0.25.12", 352 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", 353 + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 354 + "cpu": [ 355 + "arm64" 356 + ], 357 + "license": "MIT", 358 + "optional": true, 359 + "os": [ 360 + "openbsd" 361 + ], 362 + "engines": { 363 + "node": ">=18" 364 + } 365 + }, 366 + "node_modules/@esbuild/openbsd-x64": { 367 + "version": "0.25.12", 368 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", 369 + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 370 + "cpu": [ 371 + "x64" 372 + ], 373 + "license": "MIT", 374 + "optional": true, 375 + "os": [ 376 + "openbsd" 377 + ], 378 + "engines": { 379 + "node": ">=18" 380 + } 381 + }, 382 + "node_modules/@esbuild/openharmony-arm64": { 383 + "version": "0.25.12", 384 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", 385 + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 386 + "cpu": [ 387 + "arm64" 388 + ], 389 + "license": "MIT", 390 + "optional": true, 391 + "os": [ 392 + "openharmony" 393 + ], 394 + "engines": { 395 + "node": ">=18" 396 + } 397 + }, 398 + "node_modules/@esbuild/sunos-x64": { 399 + "version": "0.25.12", 400 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", 401 + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 402 + "cpu": [ 403 + "x64" 404 + ], 405 + "license": "MIT", 406 + "optional": true, 407 + "os": [ 408 + "sunos" 409 + ], 410 + "engines": { 411 + "node": ">=18" 412 + } 413 + }, 414 + "node_modules/@esbuild/win32-arm64": { 415 + "version": "0.25.12", 416 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", 417 + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 418 + "cpu": [ 419 + "arm64" 420 + ], 421 + "license": "MIT", 422 + "optional": true, 423 + "os": [ 424 + "win32" 425 + ], 426 + "engines": { 427 + "node": ">=18" 428 + } 429 + }, 430 + "node_modules/@esbuild/win32-ia32": { 431 + "version": "0.25.12", 432 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", 433 + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 434 + "cpu": [ 435 + "ia32" 436 + ], 437 + "license": "MIT", 438 + "optional": true, 439 + "os": [ 440 + "win32" 441 + ], 442 + "engines": { 443 + "node": ">=18" 444 + } 445 + }, 446 + "node_modules/@esbuild/win32-x64": { 447 + "version": "0.25.12", 448 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", 449 + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 450 + "cpu": [ 451 + "x64" 452 + ], 453 + "license": "MIT", 454 + "optional": true, 455 + "os": [ 456 + "win32" 457 + ], 458 + "engines": { 459 + "node": ">=18" 460 + } 461 + }, 462 + "node_modules/@img/sharp-darwin-arm64": { 463 + "version": "0.34.5", 464 + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", 465 + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", 466 + "cpu": [ 467 + "arm64" 468 + ], 469 + "license": "Apache-2.0", 470 + "optional": true, 471 + "os": [ 472 + "darwin" 473 + ], 474 + "engines": { 475 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 476 + }, 477 + "funding": { 478 + "url": "https://opencollective.com/libvips" 479 + }, 480 + "optionalDependencies": { 481 + "@img/sharp-libvips-darwin-arm64": "1.2.4" 482 + } 483 + }, 484 + "node_modules/@img/sharp-darwin-x64": { 485 + "version": "0.34.5", 486 + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", 487 + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", 488 + "cpu": [ 489 + "x64" 490 + ], 491 + "license": "Apache-2.0", 492 + "optional": true, 493 + "os": [ 494 + "darwin" 495 + ], 496 + "engines": { 497 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 498 + }, 499 + "funding": { 500 + "url": "https://opencollective.com/libvips" 501 + }, 502 + "optionalDependencies": { 503 + "@img/sharp-libvips-darwin-x64": "1.2.4" 504 + } 505 + }, 506 + "node_modules/@img/sharp-libvips-darwin-arm64": { 507 + "version": "1.2.4", 508 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", 509 + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", 510 + "cpu": [ 511 + "arm64" 512 + ], 513 + "license": "LGPL-3.0-or-later", 514 + "optional": true, 515 + "os": [ 516 + "darwin" 517 + ], 518 + "funding": { 519 + "url": "https://opencollective.com/libvips" 520 + } 521 + }, 522 + "node_modules/@img/sharp-libvips-darwin-x64": { 523 + "version": "1.2.4", 524 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", 525 + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", 526 + "cpu": [ 527 + "x64" 528 + ], 529 + "license": "LGPL-3.0-or-later", 530 + "optional": true, 531 + "os": [ 532 + "darwin" 533 + ], 534 + "funding": { 535 + "url": "https://opencollective.com/libvips" 536 + } 537 + }, 538 + "node_modules/@img/sharp-libvips-linux-arm": { 539 + "version": "1.2.4", 540 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", 541 + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", 542 + "cpu": [ 543 + "arm" 544 + ], 545 + "license": "LGPL-3.0-or-later", 546 + "optional": true, 547 + "os": [ 548 + "linux" 549 + ], 550 + "funding": { 551 + "url": "https://opencollective.com/libvips" 552 + } 553 + }, 554 + "node_modules/@img/sharp-libvips-linux-arm64": { 555 + "version": "1.2.4", 556 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", 557 + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", 558 + "cpu": [ 559 + "arm64" 560 + ], 561 + "license": "LGPL-3.0-or-later", 562 + "optional": true, 563 + "os": [ 564 + "linux" 565 + ], 566 + "funding": { 567 + "url": "https://opencollective.com/libvips" 568 + } 569 + }, 570 + "node_modules/@img/sharp-libvips-linux-x64": { 571 + "version": "1.2.4", 572 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", 573 + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", 574 + "cpu": [ 575 + "x64" 576 + ], 577 + "license": "LGPL-3.0-or-later", 578 + "optional": true, 579 + "os": [ 580 + "linux" 581 + ], 582 + "funding": { 583 + "url": "https://opencollective.com/libvips" 584 + } 585 + }, 586 + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 587 + "version": "1.2.4", 588 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", 589 + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", 590 + "cpu": [ 591 + "arm64" 592 + ], 593 + "license": "LGPL-3.0-or-later", 594 + "optional": true, 595 + "os": [ 596 + "linux" 597 + ], 598 + "funding": { 599 + "url": "https://opencollective.com/libvips" 600 + } 601 + }, 602 + "node_modules/@img/sharp-libvips-linuxmusl-x64": { 603 + "version": "1.2.4", 604 + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", 605 + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", 606 + "cpu": [ 607 + "x64" 608 + ], 609 + "license": "LGPL-3.0-or-later", 610 + "optional": true, 611 + "os": [ 612 + "linux" 613 + ], 614 + "funding": { 615 + "url": "https://opencollective.com/libvips" 616 + } 617 + }, 618 + "node_modules/@img/sharp-linux-arm": { 619 + "version": "0.34.5", 620 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", 621 + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", 622 + "cpu": [ 623 + "arm" 624 + ], 625 + "license": "Apache-2.0", 626 + "optional": true, 627 + "os": [ 628 + "linux" 629 + ], 630 + "engines": { 631 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 632 + }, 633 + "funding": { 634 + "url": "https://opencollective.com/libvips" 635 + }, 636 + "optionalDependencies": { 637 + "@img/sharp-libvips-linux-arm": "1.2.4" 638 + } 639 + }, 640 + "node_modules/@img/sharp-linux-arm64": { 641 + "version": "0.34.5", 642 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", 643 + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", 644 + "cpu": [ 645 + "arm64" 646 + ], 647 + "license": "Apache-2.0", 648 + "optional": true, 649 + "os": [ 650 + "linux" 651 + ], 652 + "engines": { 653 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 654 + }, 655 + "funding": { 656 + "url": "https://opencollective.com/libvips" 657 + }, 658 + "optionalDependencies": { 659 + "@img/sharp-libvips-linux-arm64": "1.2.4" 660 + } 661 + }, 662 + "node_modules/@img/sharp-linux-x64": { 663 + "version": "0.34.5", 664 + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", 665 + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", 666 + "cpu": [ 667 + "x64" 668 + ], 669 + "license": "Apache-2.0", 670 + "optional": true, 671 + "os": [ 672 + "linux" 673 + ], 674 + "engines": { 675 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 676 + }, 677 + "funding": { 678 + "url": "https://opencollective.com/libvips" 679 + }, 680 + "optionalDependencies": { 681 + "@img/sharp-libvips-linux-x64": "1.2.4" 682 + } 683 + }, 684 + "node_modules/@img/sharp-linuxmusl-arm64": { 685 + "version": "0.34.5", 686 + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", 687 + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", 688 + "cpu": [ 689 + "arm64" 690 + ], 691 + "license": "Apache-2.0", 692 + "optional": true, 693 + "os": [ 694 + "linux" 695 + ], 696 + "engines": { 697 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 698 + }, 699 + "funding": { 700 + "url": "https://opencollective.com/libvips" 701 + }, 702 + "optionalDependencies": { 703 + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" 704 + } 705 + }, 706 + "node_modules/@img/sharp-linuxmusl-x64": { 707 + "version": "0.34.5", 708 + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", 709 + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", 710 + "cpu": [ 711 + "x64" 712 + ], 713 + "license": "Apache-2.0", 714 + "optional": true, 715 + "os": [ 716 + "linux" 717 + ], 718 + "engines": { 719 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 720 + }, 721 + "funding": { 722 + "url": "https://opencollective.com/libvips" 723 + }, 724 + "optionalDependencies": { 725 + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" 726 + } 727 + }, 728 + "node_modules/@img/sharp-win32-arm64": { 729 + "version": "0.34.5", 730 + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", 731 + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", 732 + "cpu": [ 733 + "arm64" 734 + ], 735 + "license": "Apache-2.0 AND LGPL-3.0-or-later", 736 + "optional": true, 737 + "os": [ 738 + "win32" 739 + ], 740 + "engines": { 741 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 742 + }, 743 + "funding": { 744 + "url": "https://opencollective.com/libvips" 745 + } 746 + }, 747 + "node_modules/@img/sharp-win32-x64": { 748 + "version": "0.34.5", 749 + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", 750 + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", 751 + "cpu": [ 752 + "x64" 753 + ], 754 + "license": "Apache-2.0 AND LGPL-3.0-or-later", 755 + "optional": true, 756 + "os": [ 757 + "win32" 758 + ], 759 + "engines": { 760 + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 761 + }, 762 + "funding": { 763 + "url": "https://opencollective.com/libvips" 764 + } 765 + }, 766 + "node_modules/@jgoz/esbuild-plugin-typecheck": { 767 + "version": "4.0.4", 768 + "resolved": "https://registry.npmjs.org/@jgoz/esbuild-plugin-typecheck/-/esbuild-plugin-typecheck-4.0.4.tgz", 769 + "integrity": "sha512-ca38NAWnE/GchWjO5m7Wbny+yMOsYkoJOboQGheCjnnu5uDxqQWJSIegN+C+CWl8K/1naI/cMfTrAfDH1oRoVQ==", 770 + "license": "MIT", 771 + "peerDependencies": { 772 + "@jgoz/esbuild-plugin-livereload": ">=2.1.4", 773 + "esbuild": ">=0.25.0", 774 + "typescript": ">= 3.5" 775 + }, 776 + "peerDependenciesMeta": { 777 + "@jgoz/esbuild-plugin-livereload": { 778 + "optional": true 779 + } 780 + } 781 + }, 782 + "node_modules/@oclif/core": { 783 + "version": "4.10.2", 784 + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.10.2.tgz", 785 + "integrity": "sha512-3GvDh5nqpIE8566qUF5cBHKog9DFV9XgBeuR0nUrz0OMuz2FPYHat1AZHOwyQbvH9OKL4gJNQZHcsDOqDM/FRA==", 786 + "license": "MIT", 787 + "dependencies": { 788 + "ansi-escapes": "^4.3.2", 789 + "ansis": "^3.17.0", 790 + "clean-stack": "^3.0.1", 791 + "cli-spinners": "^2.9.2", 792 + "debug": "^4.4.3", 793 + "ejs": "^3.1.10", 794 + "get-package-type": "^0.1.0", 795 + "indent-string": "^4.0.0", 796 + "is-wsl": "^2.2.0", 797 + "lilconfig": "^3.1.3", 798 + "minimatch": "^10.2.4", 799 + "semver": "^7.7.3", 800 + "string-width": "^4.2.3", 801 + "supports-color": "^8", 802 + "tinyglobby": "^0.2.14", 803 + "widest-line": "^3.1.0", 804 + "wordwrap": "^1.0.0", 805 + "wrap-ansi": "^7.0.0" 806 + }, 807 + "engines": { 808 + "node": ">=18.0.0" 809 + } 810 + }, 811 + "node_modules/@oclif/plugin-help": { 812 + "version": "6.2.39", 813 + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.39.tgz", 814 + "integrity": "sha512-g/KQ5F68cLZWjm0f/bY2zKjrhYaz941++zp4xeWRtOPeu6U6pEfyBDxaOH5HncWw1qouJGsVQcGdU0ygN8eXTQ==", 815 + "license": "MIT", 816 + "dependencies": { 817 + "@oclif/core": "^4" 818 + }, 819 + "engines": { 820 + "node": ">=18.0.0" 821 + } 822 + }, 823 + "node_modules/@oclif/plugin-plugins": { 824 + "version": "5.4.59", 825 + "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.4.59.tgz", 826 + "integrity": "sha512-W/F3vNwhC3BHmn1o4g92H8kY4rYw9RsgVRm+GDulZg0XqSoseJYCMQell6ajTj8xljrrG0dZSTuEfc4ETwC2VA==", 827 + "license": "MIT", 828 + "dependencies": { 829 + "@oclif/core": "^4.8.0", 830 + "ansis": "^3.17.0", 831 + "debug": "^4.4.0", 832 + "npm": "^10.9.7", 833 + "npm-package-arg": "^11.0.3", 834 + "npm-run-path": "^5.3.0", 835 + "object-treeify": "^4.0.1", 836 + "semver": "^7.7.4", 837 + "validate-npm-package-name": "^5.0.1", 838 + "which": "^4.0.0", 839 + "yarn": "^1.22.22" 840 + }, 841 + "engines": { 842 + "node": ">=18.0.0" 843 + } 844 + }, 845 + "node_modules/@types/node": { 846 + "version": "25.5.0", 847 + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", 848 + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", 849 + "license": "MIT", 850 + "dependencies": { 851 + "undici-types": "~7.18.0" 852 + } 853 + }, 854 + "node_modules/@types/react": { 855 + "version": "19.0.10", 856 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", 857 + "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", 858 + "license": "MIT", 859 + "dependencies": { 860 + "csstype": "^3.0.2" 861 + } 862 + }, 863 + "node_modules/@vicinae/api": { 864 + "version": "0.16.14", 865 + "resolved": "https://registry.npmjs.org/@vicinae/api/-/api-0.16.14.tgz", 866 + "integrity": "sha512-+uBu+AnVjoYSTTgT4gQH2ddtQcSxtPobzEBgOmVvJwZTRvMNYf6LEohSzeolKPLGHVm8WwP2GSHhAkYUq6Dolg==", 867 + "license": "ISC", 868 + "dependencies": { 869 + "@jgoz/esbuild-plugin-typecheck": "^4.0.3", 870 + "@oclif/core": "^4", 871 + "@oclif/plugin-help": "^6", 872 + "@oclif/plugin-plugins": "^5", 873 + "@types/node": ">=18", 874 + "@types/react": "19.0.10", 875 + "chokidar": "^4.0.3", 876 + "esbuild": "^0.25.2", 877 + "react": "19.0.0", 878 + "zod": "^4.0.17" 879 + }, 880 + "bin": { 881 + "vici": "bin/run.js" 882 + }, 883 + "peerDependencies": { 884 + "@types/node": ">=18", 885 + "@types/react": "19.0.10" 886 + } 887 + }, 888 + "node_modules/@zed-industries/claude-agent-acp": { 889 + "version": "0.22.2", 890 + "resolved": "https://registry.npmjs.org/@zed-industries/claude-agent-acp/-/claude-agent-acp-0.22.2.tgz", 891 + "integrity": "sha512-GLiKxy5MBNS9UoiE1XaM9EHVxlEcvk0sXSMCnyDp9JNAQliynt0axZrhptTl5AWe6PXGjVh5hMFdPp+yulw2uQ==", 892 + "license": "Apache-2.0", 893 + "dependencies": { 894 + "@agentclientprotocol/sdk": "0.16.1", 895 + "@anthropic-ai/claude-agent-sdk": "0.2.76", 896 + "zod": "^3.25.0 || ^4.0.0" 897 + }, 898 + "bin": { 899 + "claude-agent-acp": "dist/index.js" 900 + } 901 + }, 902 + "node_modules/ansi-escapes": { 903 + "version": "4.3.2", 904 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 905 + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 906 + "license": "MIT", 907 + "dependencies": { 908 + "type-fest": "^0.21.3" 909 + }, 910 + "engines": { 911 + "node": ">=8" 912 + }, 913 + "funding": { 914 + "url": "https://github.com/sponsors/sindresorhus" 915 + } 916 + }, 917 + "node_modules/ansi-regex": { 918 + "version": "5.0.1", 919 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 920 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 921 + "license": "MIT", 922 + "engines": { 923 + "node": ">=8" 924 + } 925 + }, 926 + "node_modules/ansi-styles": { 927 + "version": "4.3.0", 928 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 929 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 930 + "license": "MIT", 931 + "dependencies": { 932 + "color-convert": "^2.0.1" 933 + }, 934 + "engines": { 935 + "node": ">=8" 936 + }, 937 + "funding": { 938 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 939 + } 940 + }, 941 + "node_modules/ansis": { 942 + "version": "3.17.0", 943 + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", 944 + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", 945 + "license": "ISC", 946 + "engines": { 947 + "node": ">=14" 948 + } 949 + }, 950 + "node_modules/async": { 951 + "version": "3.2.6", 952 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", 953 + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", 954 + "license": "MIT" 955 + }, 956 + "node_modules/balanced-match": { 957 + "version": "4.0.4", 958 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", 959 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", 960 + "license": "MIT", 961 + "engines": { 962 + "node": "18 || 20 || >=22" 963 + } 964 + }, 965 + "node_modules/brace-expansion": { 966 + "version": "5.0.4", 967 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", 968 + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", 969 + "license": "MIT", 970 + "dependencies": { 971 + "balanced-match": "^4.0.2" 972 + }, 973 + "engines": { 974 + "node": "18 || 20 || >=22" 975 + } 976 + }, 977 + "node_modules/chokidar": { 978 + "version": "4.0.3", 979 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 980 + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 981 + "license": "MIT", 982 + "dependencies": { 983 + "readdirp": "^4.0.1" 984 + }, 985 + "engines": { 986 + "node": ">= 14.16.0" 987 + }, 988 + "funding": { 989 + "url": "https://paulmillr.com/funding/" 990 + } 991 + }, 992 + "node_modules/clean-stack": { 993 + "version": "3.0.1", 994 + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", 995 + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", 996 + "license": "MIT", 997 + "dependencies": { 998 + "escape-string-regexp": "4.0.0" 999 + }, 1000 + "engines": { 1001 + "node": ">=10" 1002 + }, 1003 + "funding": { 1004 + "url": "https://github.com/sponsors/sindresorhus" 1005 + } 1006 + }, 1007 + "node_modules/cli-spinners": { 1008 + "version": "2.9.2", 1009 + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 1010 + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 1011 + "license": "MIT", 1012 + "engines": { 1013 + "node": ">=6" 1014 + }, 1015 + "funding": { 1016 + "url": "https://github.com/sponsors/sindresorhus" 1017 + } 1018 + }, 1019 + "node_modules/color-convert": { 1020 + "version": "2.0.1", 1021 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1022 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1023 + "license": "MIT", 1024 + "dependencies": { 1025 + "color-name": "~1.1.4" 1026 + }, 1027 + "engines": { 1028 + "node": ">=7.0.0" 1029 + } 1030 + }, 1031 + "node_modules/color-name": { 1032 + "version": "1.1.4", 1033 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1034 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1035 + "license": "MIT" 1036 + }, 1037 + "node_modules/csstype": { 1038 + "version": "3.2.3", 1039 + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 1040 + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 1041 + "license": "MIT" 1042 + }, 1043 + "node_modules/debug": { 1044 + "version": "4.4.3", 1045 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1046 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1047 + "license": "MIT", 1048 + "dependencies": { 1049 + "ms": "^2.1.3" 1050 + }, 1051 + "engines": { 1052 + "node": ">=6.0" 1053 + }, 1054 + "peerDependenciesMeta": { 1055 + "supports-color": { 1056 + "optional": true 1057 + } 1058 + } 1059 + }, 1060 + "node_modules/ejs": { 1061 + "version": "3.1.10", 1062 + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", 1063 + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", 1064 + "license": "Apache-2.0", 1065 + "dependencies": { 1066 + "jake": "^10.8.5" 1067 + }, 1068 + "bin": { 1069 + "ejs": "bin/cli.js" 1070 + }, 1071 + "engines": { 1072 + "node": ">=0.10.0" 1073 + } 1074 + }, 1075 + "node_modules/emoji-regex": { 1076 + "version": "8.0.0", 1077 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1078 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1079 + "license": "MIT" 1080 + }, 1081 + "node_modules/esbuild": { 1082 + "version": "0.25.12", 1083 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", 1084 + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 1085 + "hasInstallScript": true, 1086 + "license": "MIT", 1087 + "bin": { 1088 + "esbuild": "bin/esbuild" 1089 + }, 1090 + "engines": { 1091 + "node": ">=18" 1092 + }, 1093 + "optionalDependencies": { 1094 + "@esbuild/aix-ppc64": "0.25.12", 1095 + "@esbuild/android-arm": "0.25.12", 1096 + "@esbuild/android-arm64": "0.25.12", 1097 + "@esbuild/android-x64": "0.25.12", 1098 + "@esbuild/darwin-arm64": "0.25.12", 1099 + "@esbuild/darwin-x64": "0.25.12", 1100 + "@esbuild/freebsd-arm64": "0.25.12", 1101 + "@esbuild/freebsd-x64": "0.25.12", 1102 + "@esbuild/linux-arm": "0.25.12", 1103 + "@esbuild/linux-arm64": "0.25.12", 1104 + "@esbuild/linux-ia32": "0.25.12", 1105 + "@esbuild/linux-loong64": "0.25.12", 1106 + "@esbuild/linux-mips64el": "0.25.12", 1107 + "@esbuild/linux-ppc64": "0.25.12", 1108 + "@esbuild/linux-riscv64": "0.25.12", 1109 + "@esbuild/linux-s390x": "0.25.12", 1110 + "@esbuild/linux-x64": "0.25.12", 1111 + "@esbuild/netbsd-arm64": "0.25.12", 1112 + "@esbuild/netbsd-x64": "0.25.12", 1113 + "@esbuild/openbsd-arm64": "0.25.12", 1114 + "@esbuild/openbsd-x64": "0.25.12", 1115 + "@esbuild/openharmony-arm64": "0.25.12", 1116 + "@esbuild/sunos-x64": "0.25.12", 1117 + "@esbuild/win32-arm64": "0.25.12", 1118 + "@esbuild/win32-ia32": "0.25.12", 1119 + "@esbuild/win32-x64": "0.25.12" 1120 + } 1121 + }, 1122 + "node_modules/escape-string-regexp": { 1123 + "version": "4.0.0", 1124 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1125 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1126 + "license": "MIT", 1127 + "engines": { 1128 + "node": ">=10" 1129 + }, 1130 + "funding": { 1131 + "url": "https://github.com/sponsors/sindresorhus" 1132 + } 1133 + }, 1134 + "node_modules/fdir": { 1135 + "version": "6.5.0", 1136 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 1137 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1138 + "license": "MIT", 1139 + "engines": { 1140 + "node": ">=12.0.0" 1141 + }, 1142 + "peerDependencies": { 1143 + "picomatch": "^3 || ^4" 1144 + }, 1145 + "peerDependenciesMeta": { 1146 + "picomatch": { 1147 + "optional": true 1148 + } 1149 + } 1150 + }, 1151 + "node_modules/filelist": { 1152 + "version": "1.0.6", 1153 + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", 1154 + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", 1155 + "license": "Apache-2.0", 1156 + "dependencies": { 1157 + "minimatch": "^5.0.1" 1158 + } 1159 + }, 1160 + "node_modules/filelist/node_modules/balanced-match": { 1161 + "version": "1.0.2", 1162 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1163 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1164 + "license": "MIT" 1165 + }, 1166 + "node_modules/filelist/node_modules/brace-expansion": { 1167 + "version": "2.0.2", 1168 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1169 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1170 + "license": "MIT", 1171 + "dependencies": { 1172 + "balanced-match": "^1.0.0" 1173 + } 1174 + }, 1175 + "node_modules/filelist/node_modules/minimatch": { 1176 + "version": "5.1.9", 1177 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", 1178 + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", 1179 + "license": "ISC", 1180 + "dependencies": { 1181 + "brace-expansion": "^2.0.1" 1182 + }, 1183 + "engines": { 1184 + "node": ">=10" 1185 + } 1186 + }, 1187 + "node_modules/get-package-type": { 1188 + "version": "0.1.0", 1189 + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 1190 + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 1191 + "license": "MIT", 1192 + "engines": { 1193 + "node": ">=8.0.0" 1194 + } 1195 + }, 1196 + "node_modules/has-flag": { 1197 + "version": "4.0.0", 1198 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1199 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1200 + "license": "MIT", 1201 + "engines": { 1202 + "node": ">=8" 1203 + } 1204 + }, 1205 + "node_modules/hosted-git-info": { 1206 + "version": "7.0.2", 1207 + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", 1208 + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", 1209 + "license": "ISC", 1210 + "dependencies": { 1211 + "lru-cache": "^10.0.1" 1212 + }, 1213 + "engines": { 1214 + "node": "^16.14.0 || >=18.0.0" 1215 + } 1216 + }, 1217 + "node_modules/indent-string": { 1218 + "version": "4.0.0", 1219 + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1220 + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1221 + "license": "MIT", 1222 + "engines": { 1223 + "node": ">=8" 1224 + } 1225 + }, 1226 + "node_modules/is-docker": { 1227 + "version": "2.2.1", 1228 + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1229 + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1230 + "license": "MIT", 1231 + "bin": { 1232 + "is-docker": "cli.js" 1233 + }, 1234 + "engines": { 1235 + "node": ">=8" 1236 + }, 1237 + "funding": { 1238 + "url": "https://github.com/sponsors/sindresorhus" 1239 + } 1240 + }, 1241 + "node_modules/is-fullwidth-code-point": { 1242 + "version": "3.0.0", 1243 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1244 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1245 + "license": "MIT", 1246 + "engines": { 1247 + "node": ">=8" 1248 + } 1249 + }, 1250 + "node_modules/is-wsl": { 1251 + "version": "2.2.0", 1252 + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1253 + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1254 + "license": "MIT", 1255 + "dependencies": { 1256 + "is-docker": "^2.0.0" 1257 + }, 1258 + "engines": { 1259 + "node": ">=8" 1260 + } 1261 + }, 1262 + "node_modules/isexe": { 1263 + "version": "3.1.5", 1264 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", 1265 + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", 1266 + "license": "BlueOak-1.0.0", 1267 + "engines": { 1268 + "node": ">=18" 1269 + } 1270 + }, 1271 + "node_modules/jake": { 1272 + "version": "10.9.4", 1273 + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", 1274 + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", 1275 + "license": "Apache-2.0", 1276 + "dependencies": { 1277 + "async": "^3.2.6", 1278 + "filelist": "^1.0.4", 1279 + "picocolors": "^1.1.1" 1280 + }, 1281 + "bin": { 1282 + "jake": "bin/cli.js" 1283 + }, 1284 + "engines": { 1285 + "node": ">=10" 1286 + } 1287 + }, 1288 + "node_modules/lilconfig": { 1289 + "version": "3.1.3", 1290 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 1291 + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 1292 + "license": "MIT", 1293 + "engines": { 1294 + "node": ">=14" 1295 + }, 1296 + "funding": { 1297 + "url": "https://github.com/sponsors/antonk52" 1298 + } 1299 + }, 1300 + "node_modules/lru-cache": { 1301 + "version": "10.4.3", 1302 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1303 + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1304 + "license": "ISC" 1305 + }, 1306 + "node_modules/minimatch": { 1307 + "version": "10.2.4", 1308 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", 1309 + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", 1310 + "license": "BlueOak-1.0.0", 1311 + "dependencies": { 1312 + "brace-expansion": "^5.0.2" 1313 + }, 1314 + "engines": { 1315 + "node": "18 || 20 || >=22" 1316 + }, 1317 + "funding": { 1318 + "url": "https://github.com/sponsors/isaacs" 1319 + } 1320 + }, 1321 + "node_modules/ms": { 1322 + "version": "2.1.3", 1323 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1324 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1325 + "license": "MIT" 1326 + }, 1327 + "node_modules/npm": { 1328 + "version": "10.9.7", 1329 + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.7.tgz", 1330 + "integrity": "sha512-17u9+Ssv6as3iua2l6abTv1H4TtQDhle/Qn+XJ4TjKR4SzIjk1Ox3SZXRVBUW48KojLttHNQUk/U00m7sh1OGw==", 1331 + "bundleDependencies": [ 1332 + "@isaacs/string-locale-compare", 1333 + "@npmcli/arborist", 1334 + "@npmcli/config", 1335 + "@npmcli/fs", 1336 + "@npmcli/map-workspaces", 1337 + "@npmcli/package-json", 1338 + "@npmcli/promise-spawn", 1339 + "@npmcli/redact", 1340 + "@npmcli/run-script", 1341 + "@sigstore/tuf", 1342 + "abbrev", 1343 + "archy", 1344 + "cacache", 1345 + "chalk", 1346 + "ci-info", 1347 + "cli-columns", 1348 + "fastest-levenshtein", 1349 + "fs-minipass", 1350 + "glob", 1351 + "graceful-fs", 1352 + "hosted-git-info", 1353 + "ini", 1354 + "init-package-json", 1355 + "is-cidr", 1356 + "json-parse-even-better-errors", 1357 + "libnpmaccess", 1358 + "libnpmdiff", 1359 + "libnpmexec", 1360 + "libnpmfund", 1361 + "libnpmhook", 1362 + "libnpmorg", 1363 + "libnpmpack", 1364 + "libnpmpublish", 1365 + "libnpmsearch", 1366 + "libnpmteam", 1367 + "libnpmversion", 1368 + "make-fetch-happen", 1369 + "minimatch", 1370 + "minipass", 1371 + "minipass-pipeline", 1372 + "ms", 1373 + "node-gyp", 1374 + "nopt", 1375 + "normalize-package-data", 1376 + "npm-audit-report", 1377 + "npm-install-checks", 1378 + "npm-package-arg", 1379 + "npm-pick-manifest", 1380 + "npm-profile", 1381 + "npm-registry-fetch", 1382 + "npm-user-validate", 1383 + "p-map", 1384 + "pacote", 1385 + "parse-conflict-json", 1386 + "proc-log", 1387 + "qrcode-terminal", 1388 + "read", 1389 + "semver", 1390 + "spdx-expression-parse", 1391 + "ssri", 1392 + "supports-color", 1393 + "tar", 1394 + "text-table", 1395 + "tiny-relative-date", 1396 + "treeverse", 1397 + "validate-npm-package-name", 1398 + "which", 1399 + "write-file-atomic" 1400 + ], 1401 + "license": "Artistic-2.0", 1402 + "workspaces": [ 1403 + "docs", 1404 + "smoke-tests", 1405 + "mock-globals", 1406 + "mock-registry", 1407 + "workspaces/*" 1408 + ], 1409 + "dependencies": { 1410 + "@isaacs/string-locale-compare": "^1.1.0", 1411 + "@npmcli/arborist": "^8.0.4", 1412 + "@npmcli/config": "^9.0.0", 1413 + "@npmcli/fs": "^4.0.0", 1414 + "@npmcli/map-workspaces": "^4.0.2", 1415 + "@npmcli/package-json": "^6.2.0", 1416 + "@npmcli/promise-spawn": "^8.0.3", 1417 + "@npmcli/redact": "^3.2.2", 1418 + "@npmcli/run-script": "^9.1.0", 1419 + "@sigstore/tuf": "^3.1.1", 1420 + "abbrev": "^3.0.1", 1421 + "archy": "~1.0.0", 1422 + "cacache": "^19.0.1", 1423 + "chalk": "^5.6.2", 1424 + "ci-info": "^4.4.0", 1425 + "cli-columns": "^4.0.0", 1426 + "fastest-levenshtein": "^1.0.16", 1427 + "fs-minipass": "^3.0.3", 1428 + "glob": "^10.5.0", 1429 + "graceful-fs": "^4.2.11", 1430 + "hosted-git-info": "^8.1.0", 1431 + "ini": "^5.0.0", 1432 + "init-package-json": "^7.0.2", 1433 + "is-cidr": "^5.1.1", 1434 + "json-parse-even-better-errors": "^4.0.0", 1435 + "libnpmaccess": "^9.0.0", 1436 + "libnpmdiff": "^7.0.4", 1437 + "libnpmexec": "^9.0.4", 1438 + "libnpmfund": "^6.0.4", 1439 + "libnpmhook": "^11.0.0", 1440 + "libnpmorg": "^7.0.0", 1441 + "libnpmpack": "^8.0.4", 1442 + "libnpmpublish": "^10.0.2", 1443 + "libnpmsearch": "^8.0.0", 1444 + "libnpmteam": "^7.0.0", 1445 + "libnpmversion": "^7.0.0", 1446 + "make-fetch-happen": "^14.0.3", 1447 + "minimatch": "^9.0.9", 1448 + "minipass": "^7.1.3", 1449 + "minipass-pipeline": "^1.2.4", 1450 + "ms": "^2.1.2", 1451 + "node-gyp": "^11.5.0", 1452 + "nopt": "^8.1.0", 1453 + "normalize-package-data": "^7.0.1", 1454 + "npm-audit-report": "^6.0.0", 1455 + "npm-install-checks": "^7.1.2", 1456 + "npm-package-arg": "^12.0.2", 1457 + "npm-pick-manifest": "^10.0.0", 1458 + "npm-profile": "^11.0.1", 1459 + "npm-registry-fetch": "^18.0.2", 1460 + "npm-user-validate": "^3.0.0", 1461 + "p-map": "^7.0.4", 1462 + "pacote": "^19.0.1", 1463 + "parse-conflict-json": "^4.0.0", 1464 + "proc-log": "^5.0.0", 1465 + "qrcode-terminal": "^0.12.0", 1466 + "read": "^4.1.0", 1467 + "semver": "^7.7.4", 1468 + "spdx-expression-parse": "^4.0.0", 1469 + "ssri": "^12.0.0", 1470 + "supports-color": "^9.4.0", 1471 + "tar": "^7.5.11", 1472 + "text-table": "~0.2.0", 1473 + "tiny-relative-date": "^1.3.0", 1474 + "treeverse": "^3.0.0", 1475 + "validate-npm-package-name": "^6.0.2", 1476 + "which": "^5.0.0", 1477 + "write-file-atomic": "^6.0.0" 1478 + }, 1479 + "bin": { 1480 + "npm": "bin/npm-cli.js", 1481 + "npx": "bin/npx-cli.js" 1482 + }, 1483 + "engines": { 1484 + "node": "^18.17.0 || >=20.5.0" 1485 + } 1486 + }, 1487 + "node_modules/npm-package-arg": { 1488 + "version": "11.0.3", 1489 + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", 1490 + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", 1491 + "license": "ISC", 1492 + "dependencies": { 1493 + "hosted-git-info": "^7.0.0", 1494 + "proc-log": "^4.0.0", 1495 + "semver": "^7.3.5", 1496 + "validate-npm-package-name": "^5.0.0" 1497 + }, 1498 + "engines": { 1499 + "node": "^16.14.0 || >=18.0.0" 1500 + } 1501 + }, 1502 + "node_modules/npm-run-path": { 1503 + "version": "5.3.0", 1504 + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 1505 + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 1506 + "license": "MIT", 1507 + "dependencies": { 1508 + "path-key": "^4.0.0" 1509 + }, 1510 + "engines": { 1511 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1512 + }, 1513 + "funding": { 1514 + "url": "https://github.com/sponsors/sindresorhus" 1515 + } 1516 + }, 1517 + "node_modules/npm/node_modules/@isaacs/cliui": { 1518 + "version": "8.0.2", 1519 + "inBundle": true, 1520 + "license": "ISC", 1521 + "dependencies": { 1522 + "string-width": "^5.1.2", 1523 + "string-width-cjs": "npm:string-width@^4.2.0", 1524 + "strip-ansi": "^7.0.1", 1525 + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 1526 + "wrap-ansi": "^8.1.0", 1527 + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 1528 + }, 1529 + "engines": { 1530 + "node": ">=12" 1531 + } 1532 + }, 1533 + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { 1534 + "version": "6.2.2", 1535 + "inBundle": true, 1536 + "license": "MIT", 1537 + "engines": { 1538 + "node": ">=12" 1539 + }, 1540 + "funding": { 1541 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1542 + } 1543 + }, 1544 + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { 1545 + "version": "9.2.2", 1546 + "inBundle": true, 1547 + "license": "MIT" 1548 + }, 1549 + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { 1550 + "version": "5.1.2", 1551 + "inBundle": true, 1552 + "license": "MIT", 1553 + "dependencies": { 1554 + "eastasianwidth": "^0.2.0", 1555 + "emoji-regex": "^9.2.2", 1556 + "strip-ansi": "^7.0.1" 1557 + }, 1558 + "engines": { 1559 + "node": ">=12" 1560 + }, 1561 + "funding": { 1562 + "url": "https://github.com/sponsors/sindresorhus" 1563 + } 1564 + }, 1565 + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { 1566 + "version": "7.2.0", 1567 + "inBundle": true, 1568 + "license": "MIT", 1569 + "dependencies": { 1570 + "ansi-regex": "^6.2.2" 1571 + }, 1572 + "engines": { 1573 + "node": ">=12" 1574 + }, 1575 + "funding": { 1576 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1577 + } 1578 + }, 1579 + "node_modules/npm/node_modules/@isaacs/fs-minipass": { 1580 + "version": "4.0.1", 1581 + "inBundle": true, 1582 + "license": "ISC", 1583 + "dependencies": { 1584 + "minipass": "^7.0.4" 1585 + }, 1586 + "engines": { 1587 + "node": ">=18.0.0" 1588 + } 1589 + }, 1590 + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { 1591 + "version": "1.1.0", 1592 + "inBundle": true, 1593 + "license": "ISC" 1594 + }, 1595 + "node_modules/npm/node_modules/@npmcli/agent": { 1596 + "version": "3.0.0", 1597 + "inBundle": true, 1598 + "license": "ISC", 1599 + "dependencies": { 1600 + "agent-base": "^7.1.0", 1601 + "http-proxy-agent": "^7.0.0", 1602 + "https-proxy-agent": "^7.0.1", 1603 + "lru-cache": "^10.0.1", 1604 + "socks-proxy-agent": "^8.0.3" 1605 + }, 1606 + "engines": { 1607 + "node": "^18.17.0 || >=20.5.0" 1608 + } 1609 + }, 1610 + "node_modules/npm/node_modules/@npmcli/arborist": { 1611 + "version": "8.0.4", 1612 + "inBundle": true, 1613 + "license": "ISC", 1614 + "dependencies": { 1615 + "@isaacs/string-locale-compare": "^1.1.0", 1616 + "@npmcli/fs": "^4.0.0", 1617 + "@npmcli/installed-package-contents": "^3.0.0", 1618 + "@npmcli/map-workspaces": "^4.0.1", 1619 + "@npmcli/metavuln-calculator": "^8.0.0", 1620 + "@npmcli/name-from-folder": "^3.0.0", 1621 + "@npmcli/node-gyp": "^4.0.0", 1622 + "@npmcli/package-json": "^6.0.1", 1623 + "@npmcli/query": "^4.0.0", 1624 + "@npmcli/redact": "^3.0.0", 1625 + "@npmcli/run-script": "^9.0.1", 1626 + "bin-links": "^5.0.0", 1627 + "cacache": "^19.0.1", 1628 + "common-ancestor-path": "^1.0.1", 1629 + "hosted-git-info": "^8.0.0", 1630 + "json-parse-even-better-errors": "^4.0.0", 1631 + "json-stringify-nice": "^1.1.4", 1632 + "lru-cache": "^10.2.2", 1633 + "minimatch": "^9.0.4", 1634 + "nopt": "^8.0.0", 1635 + "npm-install-checks": "^7.1.0", 1636 + "npm-package-arg": "^12.0.0", 1637 + "npm-pick-manifest": "^10.0.0", 1638 + "npm-registry-fetch": "^18.0.1", 1639 + "pacote": "^19.0.0", 1640 + "parse-conflict-json": "^4.0.0", 1641 + "proc-log": "^5.0.0", 1642 + "proggy": "^3.0.0", 1643 + "promise-all-reject-late": "^1.0.0", 1644 + "promise-call-limit": "^3.0.1", 1645 + "promise-retry": "^2.0.1", 1646 + "read-package-json-fast": "^4.0.0", 1647 + "semver": "^7.3.7", 1648 + "ssri": "^12.0.0", 1649 + "treeverse": "^3.0.0", 1650 + "walk-up-path": "^3.0.1" 1651 + }, 1652 + "bin": { 1653 + "arborist": "bin/index.js" 1654 + }, 1655 + "engines": { 1656 + "node": "^18.17.0 || >=20.5.0" 1657 + } 1658 + }, 1659 + "node_modules/npm/node_modules/@npmcli/config": { 1660 + "version": "9.0.0", 1661 + "inBundle": true, 1662 + "license": "ISC", 1663 + "dependencies": { 1664 + "@npmcli/map-workspaces": "^4.0.1", 1665 + "@npmcli/package-json": "^6.0.1", 1666 + "ci-info": "^4.0.0", 1667 + "ini": "^5.0.0", 1668 + "nopt": "^8.0.0", 1669 + "proc-log": "^5.0.0", 1670 + "semver": "^7.3.5", 1671 + "walk-up-path": "^3.0.1" 1672 + }, 1673 + "engines": { 1674 + "node": "^18.17.0 || >=20.5.0" 1675 + } 1676 + }, 1677 + "node_modules/npm/node_modules/@npmcli/fs": { 1678 + "version": "4.0.0", 1679 + "inBundle": true, 1680 + "license": "ISC", 1681 + "dependencies": { 1682 + "semver": "^7.3.5" 1683 + }, 1684 + "engines": { 1685 + "node": "^18.17.0 || >=20.5.0" 1686 + } 1687 + }, 1688 + "node_modules/npm/node_modules/@npmcli/git": { 1689 + "version": "6.0.3", 1690 + "inBundle": true, 1691 + "license": "ISC", 1692 + "dependencies": { 1693 + "@npmcli/promise-spawn": "^8.0.0", 1694 + "ini": "^5.0.0", 1695 + "lru-cache": "^10.0.1", 1696 + "npm-pick-manifest": "^10.0.0", 1697 + "proc-log": "^5.0.0", 1698 + "promise-retry": "^2.0.1", 1699 + "semver": "^7.3.5", 1700 + "which": "^5.0.0" 1701 + }, 1702 + "engines": { 1703 + "node": "^18.17.0 || >=20.5.0" 1704 + } 1705 + }, 1706 + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { 1707 + "version": "3.0.0", 1708 + "inBundle": true, 1709 + "license": "ISC", 1710 + "dependencies": { 1711 + "npm-bundled": "^4.0.0", 1712 + "npm-normalize-package-bin": "^4.0.0" 1713 + }, 1714 + "bin": { 1715 + "installed-package-contents": "bin/index.js" 1716 + }, 1717 + "engines": { 1718 + "node": "^18.17.0 || >=20.5.0" 1719 + } 1720 + }, 1721 + "node_modules/npm/node_modules/@npmcli/map-workspaces": { 1722 + "version": "4.0.2", 1723 + "inBundle": true, 1724 + "license": "ISC", 1725 + "dependencies": { 1726 + "@npmcli/name-from-folder": "^3.0.0", 1727 + "@npmcli/package-json": "^6.0.0", 1728 + "glob": "^10.2.2", 1729 + "minimatch": "^9.0.0" 1730 + }, 1731 + "engines": { 1732 + "node": "^18.17.0 || >=20.5.0" 1733 + } 1734 + }, 1735 + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { 1736 + "version": "8.0.1", 1737 + "inBundle": true, 1738 + "license": "ISC", 1739 + "dependencies": { 1740 + "cacache": "^19.0.0", 1741 + "json-parse-even-better-errors": "^4.0.0", 1742 + "pacote": "^20.0.0", 1743 + "proc-log": "^5.0.0", 1744 + "semver": "^7.3.5" 1745 + }, 1746 + "engines": { 1747 + "node": "^18.17.0 || >=20.5.0" 1748 + } 1749 + }, 1750 + "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { 1751 + "version": "20.0.1", 1752 + "inBundle": true, 1753 + "license": "ISC", 1754 + "dependencies": { 1755 + "@npmcli/git": "^6.0.0", 1756 + "@npmcli/installed-package-contents": "^3.0.0", 1757 + "@npmcli/package-json": "^6.0.0", 1758 + "@npmcli/promise-spawn": "^8.0.0", 1759 + "@npmcli/run-script": "^9.0.0", 1760 + "cacache": "^19.0.0", 1761 + "fs-minipass": "^3.0.0", 1762 + "minipass": "^7.0.2", 1763 + "npm-package-arg": "^12.0.0", 1764 + "npm-packlist": "^9.0.0", 1765 + "npm-pick-manifest": "^10.0.0", 1766 + "npm-registry-fetch": "^18.0.0", 1767 + "proc-log": "^5.0.0", 1768 + "promise-retry": "^2.0.1", 1769 + "sigstore": "^3.0.0", 1770 + "ssri": "^12.0.0", 1771 + "tar": "^7.5.10" 1772 + }, 1773 + "bin": { 1774 + "pacote": "bin/index.js" 1775 + }, 1776 + "engines": { 1777 + "node": "^18.17.0 || >=20.5.0" 1778 + } 1779 + }, 1780 + "node_modules/npm/node_modules/@npmcli/name-from-folder": { 1781 + "version": "3.0.0", 1782 + "inBundle": true, 1783 + "license": "ISC", 1784 + "engines": { 1785 + "node": "^18.17.0 || >=20.5.0" 1786 + } 1787 + }, 1788 + "node_modules/npm/node_modules/@npmcli/node-gyp": { 1789 + "version": "4.0.0", 1790 + "inBundle": true, 1791 + "license": "ISC", 1792 + "engines": { 1793 + "node": "^18.17.0 || >=20.5.0" 1794 + } 1795 + }, 1796 + "node_modules/npm/node_modules/@npmcli/package-json": { 1797 + "version": "6.2.0", 1798 + "inBundle": true, 1799 + "license": "ISC", 1800 + "dependencies": { 1801 + "@npmcli/git": "^6.0.0", 1802 + "glob": "^10.2.2", 1803 + "hosted-git-info": "^8.0.0", 1804 + "json-parse-even-better-errors": "^4.0.0", 1805 + "proc-log": "^5.0.0", 1806 + "semver": "^7.5.3", 1807 + "validate-npm-package-license": "^3.0.4" 1808 + }, 1809 + "engines": { 1810 + "node": "^18.17.0 || >=20.5.0" 1811 + } 1812 + }, 1813 + "node_modules/npm/node_modules/@npmcli/promise-spawn": { 1814 + "version": "8.0.3", 1815 + "inBundle": true, 1816 + "license": "ISC", 1817 + "dependencies": { 1818 + "which": "^5.0.0" 1819 + }, 1820 + "engines": { 1821 + "node": "^18.17.0 || >=20.5.0" 1822 + } 1823 + }, 1824 + "node_modules/npm/node_modules/@npmcli/query": { 1825 + "version": "4.0.1", 1826 + "inBundle": true, 1827 + "license": "ISC", 1828 + "dependencies": { 1829 + "postcss-selector-parser": "^7.0.0" 1830 + }, 1831 + "engines": { 1832 + "node": "^18.17.0 || >=20.5.0" 1833 + } 1834 + }, 1835 + "node_modules/npm/node_modules/@npmcli/redact": { 1836 + "version": "3.2.2", 1837 + "inBundle": true, 1838 + "license": "ISC", 1839 + "engines": { 1840 + "node": "^18.17.0 || >=20.5.0" 1841 + } 1842 + }, 1843 + "node_modules/npm/node_modules/@npmcli/run-script": { 1844 + "version": "9.1.0", 1845 + "inBundle": true, 1846 + "license": "ISC", 1847 + "dependencies": { 1848 + "@npmcli/node-gyp": "^4.0.0", 1849 + "@npmcli/package-json": "^6.0.0", 1850 + "@npmcli/promise-spawn": "^8.0.0", 1851 + "node-gyp": "^11.0.0", 1852 + "proc-log": "^5.0.0", 1853 + "which": "^5.0.0" 1854 + }, 1855 + "engines": { 1856 + "node": "^18.17.0 || >=20.5.0" 1857 + } 1858 + }, 1859 + "node_modules/npm/node_modules/@pkgjs/parseargs": { 1860 + "version": "0.11.0", 1861 + "inBundle": true, 1862 + "license": "MIT", 1863 + "optional": true, 1864 + "engines": { 1865 + "node": ">=14" 1866 + } 1867 + }, 1868 + "node_modules/npm/node_modules/@sigstore/bundle": { 1869 + "version": "3.1.0", 1870 + "inBundle": true, 1871 + "license": "Apache-2.0", 1872 + "dependencies": { 1873 + "@sigstore/protobuf-specs": "^0.4.0" 1874 + }, 1875 + "engines": { 1876 + "node": "^18.17.0 || >=20.5.0" 1877 + } 1878 + }, 1879 + "node_modules/npm/node_modules/@sigstore/core": { 1880 + "version": "2.0.0", 1881 + "inBundle": true, 1882 + "license": "Apache-2.0", 1883 + "engines": { 1884 + "node": "^18.17.0 || >=20.5.0" 1885 + } 1886 + }, 1887 + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { 1888 + "version": "0.4.3", 1889 + "inBundle": true, 1890 + "license": "Apache-2.0", 1891 + "engines": { 1892 + "node": "^18.17.0 || >=20.5.0" 1893 + } 1894 + }, 1895 + "node_modules/npm/node_modules/@sigstore/sign": { 1896 + "version": "3.1.0", 1897 + "inBundle": true, 1898 + "license": "Apache-2.0", 1899 + "dependencies": { 1900 + "@sigstore/bundle": "^3.1.0", 1901 + "@sigstore/core": "^2.0.0", 1902 + "@sigstore/protobuf-specs": "^0.4.0", 1903 + "make-fetch-happen": "^14.0.2", 1904 + "proc-log": "^5.0.0", 1905 + "promise-retry": "^2.0.1" 1906 + }, 1907 + "engines": { 1908 + "node": "^18.17.0 || >=20.5.0" 1909 + } 1910 + }, 1911 + "node_modules/npm/node_modules/@sigstore/tuf": { 1912 + "version": "3.1.1", 1913 + "inBundle": true, 1914 + "license": "Apache-2.0", 1915 + "dependencies": { 1916 + "@sigstore/protobuf-specs": "^0.4.1", 1917 + "tuf-js": "^3.0.1" 1918 + }, 1919 + "engines": { 1920 + "node": "^18.17.0 || >=20.5.0" 1921 + } 1922 + }, 1923 + "node_modules/npm/node_modules/@sigstore/verify": { 1924 + "version": "2.1.1", 1925 + "inBundle": true, 1926 + "license": "Apache-2.0", 1927 + "dependencies": { 1928 + "@sigstore/bundle": "^3.1.0", 1929 + "@sigstore/core": "^2.0.0", 1930 + "@sigstore/protobuf-specs": "^0.4.1" 1931 + }, 1932 + "engines": { 1933 + "node": "^18.17.0 || >=20.5.0" 1934 + } 1935 + }, 1936 + "node_modules/npm/node_modules/@tufjs/canonical-json": { 1937 + "version": "2.0.0", 1938 + "inBundle": true, 1939 + "license": "MIT", 1940 + "engines": { 1941 + "node": "^16.14.0 || >=18.0.0" 1942 + } 1943 + }, 1944 + "node_modules/npm/node_modules/abbrev": { 1945 + "version": "3.0.1", 1946 + "inBundle": true, 1947 + "license": "ISC", 1948 + "engines": { 1949 + "node": "^18.17.0 || >=20.5.0" 1950 + } 1951 + }, 1952 + "node_modules/npm/node_modules/agent-base": { 1953 + "version": "7.1.4", 1954 + "inBundle": true, 1955 + "license": "MIT", 1956 + "engines": { 1957 + "node": ">= 14" 1958 + } 1959 + }, 1960 + "node_modules/npm/node_modules/ansi-regex": { 1961 + "version": "5.0.1", 1962 + "inBundle": true, 1963 + "license": "MIT", 1964 + "engines": { 1965 + "node": ">=8" 1966 + } 1967 + }, 1968 + "node_modules/npm/node_modules/ansi-styles": { 1969 + "version": "6.2.3", 1970 + "inBundle": true, 1971 + "license": "MIT", 1972 + "engines": { 1973 + "node": ">=12" 1974 + }, 1975 + "funding": { 1976 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1977 + } 1978 + }, 1979 + "node_modules/npm/node_modules/aproba": { 1980 + "version": "2.1.0", 1981 + "inBundle": true, 1982 + "license": "ISC" 1983 + }, 1984 + "node_modules/npm/node_modules/archy": { 1985 + "version": "1.0.0", 1986 + "inBundle": true, 1987 + "license": "MIT" 1988 + }, 1989 + "node_modules/npm/node_modules/balanced-match": { 1990 + "version": "1.0.2", 1991 + "inBundle": true, 1992 + "license": "MIT" 1993 + }, 1994 + "node_modules/npm/node_modules/bin-links": { 1995 + "version": "5.0.0", 1996 + "inBundle": true, 1997 + "license": "ISC", 1998 + "dependencies": { 1999 + "cmd-shim": "^7.0.0", 2000 + "npm-normalize-package-bin": "^4.0.0", 2001 + "proc-log": "^5.0.0", 2002 + "read-cmd-shim": "^5.0.0", 2003 + "write-file-atomic": "^6.0.0" 2004 + }, 2005 + "engines": { 2006 + "node": "^18.17.0 || >=20.5.0" 2007 + } 2008 + }, 2009 + "node_modules/npm/node_modules/binary-extensions": { 2010 + "version": "2.3.0", 2011 + "inBundle": true, 2012 + "license": "MIT", 2013 + "engines": { 2014 + "node": ">=8" 2015 + }, 2016 + "funding": { 2017 + "url": "https://github.com/sponsors/sindresorhus" 2018 + } 2019 + }, 2020 + "node_modules/npm/node_modules/brace-expansion": { 2021 + "version": "2.0.2", 2022 + "inBundle": true, 2023 + "license": "MIT", 2024 + "dependencies": { 2025 + "balanced-match": "^1.0.0" 2026 + } 2027 + }, 2028 + "node_modules/npm/node_modules/cacache": { 2029 + "version": "19.0.1", 2030 + "inBundle": true, 2031 + "license": "ISC", 2032 + "dependencies": { 2033 + "@npmcli/fs": "^4.0.0", 2034 + "fs-minipass": "^3.0.0", 2035 + "glob": "^10.2.2", 2036 + "lru-cache": "^10.0.1", 2037 + "minipass": "^7.0.3", 2038 + "minipass-collect": "^2.0.1", 2039 + "minipass-flush": "^1.0.5", 2040 + "minipass-pipeline": "^1.2.4", 2041 + "p-map": "^7.0.2", 2042 + "ssri": "^12.0.0", 2043 + "tar": "^7.4.3", 2044 + "unique-filename": "^4.0.0" 2045 + }, 2046 + "engines": { 2047 + "node": "^18.17.0 || >=20.5.0" 2048 + } 2049 + }, 2050 + "node_modules/npm/node_modules/chalk": { 2051 + "version": "5.6.2", 2052 + "inBundle": true, 2053 + "license": "MIT", 2054 + "engines": { 2055 + "node": "^12.17.0 || ^14.13 || >=16.0.0" 2056 + }, 2057 + "funding": { 2058 + "url": "https://github.com/chalk/chalk?sponsor=1" 2059 + } 2060 + }, 2061 + "node_modules/npm/node_modules/chownr": { 2062 + "version": "3.0.0", 2063 + "inBundle": true, 2064 + "license": "BlueOak-1.0.0", 2065 + "engines": { 2066 + "node": ">=18" 2067 + } 2068 + }, 2069 + "node_modules/npm/node_modules/ci-info": { 2070 + "version": "4.4.0", 2071 + "funding": [ 2072 + { 2073 + "type": "github", 2074 + "url": "https://github.com/sponsors/sibiraj-s" 2075 + } 2076 + ], 2077 + "inBundle": true, 2078 + "license": "MIT", 2079 + "engines": { 2080 + "node": ">=8" 2081 + } 2082 + }, 2083 + "node_modules/npm/node_modules/cidr-regex": { 2084 + "version": "4.1.3", 2085 + "inBundle": true, 2086 + "license": "BSD-2-Clause", 2087 + "dependencies": { 2088 + "ip-regex": "^5.0.0" 2089 + }, 2090 + "engines": { 2091 + "node": ">=14" 2092 + } 2093 + }, 2094 + "node_modules/npm/node_modules/cli-columns": { 2095 + "version": "4.0.0", 2096 + "inBundle": true, 2097 + "license": "MIT", 2098 + "dependencies": { 2099 + "string-width": "^4.2.3", 2100 + "strip-ansi": "^6.0.1" 2101 + }, 2102 + "engines": { 2103 + "node": ">= 10" 2104 + } 2105 + }, 2106 + "node_modules/npm/node_modules/cmd-shim": { 2107 + "version": "7.0.0", 2108 + "inBundle": true, 2109 + "license": "ISC", 2110 + "engines": { 2111 + "node": "^18.17.0 || >=20.5.0" 2112 + } 2113 + }, 2114 + "node_modules/npm/node_modules/color-convert": { 2115 + "version": "2.0.1", 2116 + "inBundle": true, 2117 + "license": "MIT", 2118 + "dependencies": { 2119 + "color-name": "~1.1.4" 2120 + }, 2121 + "engines": { 2122 + "node": ">=7.0.0" 2123 + } 2124 + }, 2125 + "node_modules/npm/node_modules/color-name": { 2126 + "version": "1.1.4", 2127 + "inBundle": true, 2128 + "license": "MIT" 2129 + }, 2130 + "node_modules/npm/node_modules/common-ancestor-path": { 2131 + "version": "1.0.1", 2132 + "inBundle": true, 2133 + "license": "ISC" 2134 + }, 2135 + "node_modules/npm/node_modules/cross-spawn": { 2136 + "version": "7.0.6", 2137 + "inBundle": true, 2138 + "license": "MIT", 2139 + "dependencies": { 2140 + "path-key": "^3.1.0", 2141 + "shebang-command": "^2.0.0", 2142 + "which": "^2.0.1" 2143 + }, 2144 + "engines": { 2145 + "node": ">= 8" 2146 + } 2147 + }, 2148 + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { 2149 + "version": "2.0.2", 2150 + "inBundle": true, 2151 + "license": "ISC", 2152 + "dependencies": { 2153 + "isexe": "^2.0.0" 2154 + }, 2155 + "bin": { 2156 + "node-which": "bin/node-which" 2157 + }, 2158 + "engines": { 2159 + "node": ">= 8" 2160 + } 2161 + }, 2162 + "node_modules/npm/node_modules/cssesc": { 2163 + "version": "3.0.0", 2164 + "inBundle": true, 2165 + "license": "MIT", 2166 + "bin": { 2167 + "cssesc": "bin/cssesc" 2168 + }, 2169 + "engines": { 2170 + "node": ">=4" 2171 + } 2172 + }, 2173 + "node_modules/npm/node_modules/debug": { 2174 + "version": "4.4.3", 2175 + "inBundle": true, 2176 + "license": "MIT", 2177 + "dependencies": { 2178 + "ms": "^2.1.3" 2179 + }, 2180 + "engines": { 2181 + "node": ">=6.0" 2182 + }, 2183 + "peerDependenciesMeta": { 2184 + "supports-color": { 2185 + "optional": true 2186 + } 2187 + } 2188 + }, 2189 + "node_modules/npm/node_modules/diff": { 2190 + "version": "5.2.2", 2191 + "inBundle": true, 2192 + "license": "BSD-3-Clause", 2193 + "engines": { 2194 + "node": ">=0.3.1" 2195 + } 2196 + }, 2197 + "node_modules/npm/node_modules/eastasianwidth": { 2198 + "version": "0.2.0", 2199 + "inBundle": true, 2200 + "license": "MIT" 2201 + }, 2202 + "node_modules/npm/node_modules/emoji-regex": { 2203 + "version": "8.0.0", 2204 + "inBundle": true, 2205 + "license": "MIT" 2206 + }, 2207 + "node_modules/npm/node_modules/encoding": { 2208 + "version": "0.1.13", 2209 + "inBundle": true, 2210 + "license": "MIT", 2211 + "optional": true, 2212 + "dependencies": { 2213 + "iconv-lite": "^0.6.2" 2214 + } 2215 + }, 2216 + "node_modules/npm/node_modules/env-paths": { 2217 + "version": "2.2.1", 2218 + "inBundle": true, 2219 + "license": "MIT", 2220 + "engines": { 2221 + "node": ">=6" 2222 + } 2223 + }, 2224 + "node_modules/npm/node_modules/err-code": { 2225 + "version": "2.0.3", 2226 + "inBundle": true, 2227 + "license": "MIT" 2228 + }, 2229 + "node_modules/npm/node_modules/exponential-backoff": { 2230 + "version": "3.1.3", 2231 + "inBundle": true, 2232 + "license": "Apache-2.0" 2233 + }, 2234 + "node_modules/npm/node_modules/fastest-levenshtein": { 2235 + "version": "1.0.16", 2236 + "inBundle": true, 2237 + "license": "MIT", 2238 + "engines": { 2239 + "node": ">= 4.9.1" 2240 + } 2241 + }, 2242 + "node_modules/npm/node_modules/fdir": { 2243 + "version": "6.5.0", 2244 + "inBundle": true, 2245 + "license": "MIT", 2246 + "engines": { 2247 + "node": ">=12.0.0" 2248 + }, 2249 + "peerDependencies": { 2250 + "picomatch": "^3 || ^4" 2251 + }, 2252 + "peerDependenciesMeta": { 2253 + "picomatch": { 2254 + "optional": true 2255 + } 2256 + } 2257 + }, 2258 + "node_modules/npm/node_modules/foreground-child": { 2259 + "version": "3.3.1", 2260 + "inBundle": true, 2261 + "license": "ISC", 2262 + "dependencies": { 2263 + "cross-spawn": "^7.0.6", 2264 + "signal-exit": "^4.0.1" 2265 + }, 2266 + "engines": { 2267 + "node": ">=14" 2268 + }, 2269 + "funding": { 2270 + "url": "https://github.com/sponsors/isaacs" 2271 + } 2272 + }, 2273 + "node_modules/npm/node_modules/fs-minipass": { 2274 + "version": "3.0.3", 2275 + "inBundle": true, 2276 + "license": "ISC", 2277 + "dependencies": { 2278 + "minipass": "^7.0.3" 2279 + }, 2280 + "engines": { 2281 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 2282 + } 2283 + }, 2284 + "node_modules/npm/node_modules/glob": { 2285 + "version": "10.5.0", 2286 + "inBundle": true, 2287 + "license": "ISC", 2288 + "dependencies": { 2289 + "foreground-child": "^3.1.0", 2290 + "jackspeak": "^3.1.2", 2291 + "minimatch": "^9.0.4", 2292 + "minipass": "^7.1.2", 2293 + "package-json-from-dist": "^1.0.0", 2294 + "path-scurry": "^1.11.1" 2295 + }, 2296 + "bin": { 2297 + "glob": "dist/esm/bin.mjs" 2298 + }, 2299 + "funding": { 2300 + "url": "https://github.com/sponsors/isaacs" 2301 + } 2302 + }, 2303 + "node_modules/npm/node_modules/graceful-fs": { 2304 + "version": "4.2.11", 2305 + "inBundle": true, 2306 + "license": "ISC" 2307 + }, 2308 + "node_modules/npm/node_modules/hosted-git-info": { 2309 + "version": "8.1.0", 2310 + "inBundle": true, 2311 + "license": "ISC", 2312 + "dependencies": { 2313 + "lru-cache": "^10.0.1" 2314 + }, 2315 + "engines": { 2316 + "node": "^18.17.0 || >=20.5.0" 2317 + } 2318 + }, 2319 + "node_modules/npm/node_modules/http-cache-semantics": { 2320 + "version": "4.2.0", 2321 + "inBundle": true, 2322 + "license": "BSD-2-Clause" 2323 + }, 2324 + "node_modules/npm/node_modules/http-proxy-agent": { 2325 + "version": "7.0.2", 2326 + "inBundle": true, 2327 + "license": "MIT", 2328 + "dependencies": { 2329 + "agent-base": "^7.1.0", 2330 + "debug": "^4.3.4" 2331 + }, 2332 + "engines": { 2333 + "node": ">= 14" 2334 + } 2335 + }, 2336 + "node_modules/npm/node_modules/https-proxy-agent": { 2337 + "version": "7.0.6", 2338 + "inBundle": true, 2339 + "license": "MIT", 2340 + "dependencies": { 2341 + "agent-base": "^7.1.2", 2342 + "debug": "4" 2343 + }, 2344 + "engines": { 2345 + "node": ">= 14" 2346 + } 2347 + }, 2348 + "node_modules/npm/node_modules/iconv-lite": { 2349 + "version": "0.6.3", 2350 + "inBundle": true, 2351 + "license": "MIT", 2352 + "optional": true, 2353 + "dependencies": { 2354 + "safer-buffer": ">= 2.1.2 < 3.0.0" 2355 + }, 2356 + "engines": { 2357 + "node": ">=0.10.0" 2358 + } 2359 + }, 2360 + "node_modules/npm/node_modules/ignore-walk": { 2361 + "version": "7.0.0", 2362 + "inBundle": true, 2363 + "license": "ISC", 2364 + "dependencies": { 2365 + "minimatch": "^9.0.0" 2366 + }, 2367 + "engines": { 2368 + "node": "^18.17.0 || >=20.5.0" 2369 + } 2370 + }, 2371 + "node_modules/npm/node_modules/imurmurhash": { 2372 + "version": "0.1.4", 2373 + "inBundle": true, 2374 + "license": "MIT", 2375 + "engines": { 2376 + "node": ">=0.8.19" 2377 + } 2378 + }, 2379 + "node_modules/npm/node_modules/ini": { 2380 + "version": "5.0.0", 2381 + "inBundle": true, 2382 + "license": "ISC", 2383 + "engines": { 2384 + "node": "^18.17.0 || >=20.5.0" 2385 + } 2386 + }, 2387 + "node_modules/npm/node_modules/init-package-json": { 2388 + "version": "7.0.2", 2389 + "inBundle": true, 2390 + "license": "ISC", 2391 + "dependencies": { 2392 + "@npmcli/package-json": "^6.0.0", 2393 + "npm-package-arg": "^12.0.0", 2394 + "promzard": "^2.0.0", 2395 + "read": "^4.0.0", 2396 + "semver": "^7.3.5", 2397 + "validate-npm-package-license": "^3.0.4", 2398 + "validate-npm-package-name": "^6.0.0" 2399 + }, 2400 + "engines": { 2401 + "node": "^18.17.0 || >=20.5.0" 2402 + } 2403 + }, 2404 + "node_modules/npm/node_modules/ip-address": { 2405 + "version": "10.1.0", 2406 + "inBundle": true, 2407 + "license": "MIT", 2408 + "engines": { 2409 + "node": ">= 12" 2410 + } 2411 + }, 2412 + "node_modules/npm/node_modules/ip-regex": { 2413 + "version": "5.0.0", 2414 + "inBundle": true, 2415 + "license": "MIT", 2416 + "engines": { 2417 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2418 + }, 2419 + "funding": { 2420 + "url": "https://github.com/sponsors/sindresorhus" 2421 + } 2422 + }, 2423 + "node_modules/npm/node_modules/is-cidr": { 2424 + "version": "5.1.1", 2425 + "inBundle": true, 2426 + "license": "BSD-2-Clause", 2427 + "dependencies": { 2428 + "cidr-regex": "^4.1.1" 2429 + }, 2430 + "engines": { 2431 + "node": ">=14" 2432 + } 2433 + }, 2434 + "node_modules/npm/node_modules/is-fullwidth-code-point": { 2435 + "version": "3.0.0", 2436 + "inBundle": true, 2437 + "license": "MIT", 2438 + "engines": { 2439 + "node": ">=8" 2440 + } 2441 + }, 2442 + "node_modules/npm/node_modules/isexe": { 2443 + "version": "2.0.0", 2444 + "inBundle": true, 2445 + "license": "ISC" 2446 + }, 2447 + "node_modules/npm/node_modules/jackspeak": { 2448 + "version": "3.4.3", 2449 + "inBundle": true, 2450 + "license": "BlueOak-1.0.0", 2451 + "dependencies": { 2452 + "@isaacs/cliui": "^8.0.2" 2453 + }, 2454 + "funding": { 2455 + "url": "https://github.com/sponsors/isaacs" 2456 + }, 2457 + "optionalDependencies": { 2458 + "@pkgjs/parseargs": "^0.11.0" 2459 + } 2460 + }, 2461 + "node_modules/npm/node_modules/json-parse-even-better-errors": { 2462 + "version": "4.0.0", 2463 + "inBundle": true, 2464 + "license": "MIT", 2465 + "engines": { 2466 + "node": "^18.17.0 || >=20.5.0" 2467 + } 2468 + }, 2469 + "node_modules/npm/node_modules/json-stringify-nice": { 2470 + "version": "1.1.4", 2471 + "inBundle": true, 2472 + "license": "ISC", 2473 + "funding": { 2474 + "url": "https://github.com/sponsors/isaacs" 2475 + } 2476 + }, 2477 + "node_modules/npm/node_modules/jsonparse": { 2478 + "version": "1.3.1", 2479 + "engines": [ 2480 + "node >= 0.2.0" 2481 + ], 2482 + "inBundle": true, 2483 + "license": "MIT" 2484 + }, 2485 + "node_modules/npm/node_modules/just-diff": { 2486 + "version": "6.0.2", 2487 + "inBundle": true, 2488 + "license": "MIT" 2489 + }, 2490 + "node_modules/npm/node_modules/just-diff-apply": { 2491 + "version": "5.5.0", 2492 + "inBundle": true, 2493 + "license": "MIT" 2494 + }, 2495 + "node_modules/npm/node_modules/libnpmaccess": { 2496 + "version": "9.0.0", 2497 + "inBundle": true, 2498 + "license": "ISC", 2499 + "dependencies": { 2500 + "npm-package-arg": "^12.0.0", 2501 + "npm-registry-fetch": "^18.0.1" 2502 + }, 2503 + "engines": { 2504 + "node": "^18.17.0 || >=20.5.0" 2505 + } 2506 + }, 2507 + "node_modules/npm/node_modules/libnpmdiff": { 2508 + "version": "7.0.4", 2509 + "inBundle": true, 2510 + "license": "ISC", 2511 + "dependencies": { 2512 + "@npmcli/arborist": "^8.0.4", 2513 + "@npmcli/installed-package-contents": "^3.0.0", 2514 + "binary-extensions": "^2.3.0", 2515 + "diff": "^5.1.0", 2516 + "minimatch": "^9.0.4", 2517 + "npm-package-arg": "^12.0.0", 2518 + "pacote": "^19.0.0", 2519 + "tar": "^7.5.11" 2520 + }, 2521 + "engines": { 2522 + "node": "^18.17.0 || >=20.5.0" 2523 + } 2524 + }, 2525 + "node_modules/npm/node_modules/libnpmexec": { 2526 + "version": "9.0.4", 2527 + "inBundle": true, 2528 + "license": "ISC", 2529 + "dependencies": { 2530 + "@npmcli/arborist": "^8.0.4", 2531 + "@npmcli/run-script": "^9.0.1", 2532 + "ci-info": "^4.0.0", 2533 + "npm-package-arg": "^12.0.0", 2534 + "pacote": "^19.0.0", 2535 + "proc-log": "^5.0.0", 2536 + "read": "^4.0.0", 2537 + "read-package-json-fast": "^4.0.0", 2538 + "semver": "^7.3.7", 2539 + "walk-up-path": "^3.0.1" 2540 + }, 2541 + "engines": { 2542 + "node": "^18.17.0 || >=20.5.0" 2543 + } 2544 + }, 2545 + "node_modules/npm/node_modules/libnpmfund": { 2546 + "version": "6.0.4", 2547 + "inBundle": true, 2548 + "license": "ISC", 2549 + "dependencies": { 2550 + "@npmcli/arborist": "^8.0.4" 2551 + }, 2552 + "engines": { 2553 + "node": "^18.17.0 || >=20.5.0" 2554 + } 2555 + }, 2556 + "node_modules/npm/node_modules/libnpmhook": { 2557 + "version": "11.0.0", 2558 + "inBundle": true, 2559 + "license": "ISC", 2560 + "dependencies": { 2561 + "aproba": "^2.0.0", 2562 + "npm-registry-fetch": "^18.0.1" 2563 + }, 2564 + "engines": { 2565 + "node": "^18.17.0 || >=20.5.0" 2566 + } 2567 + }, 2568 + "node_modules/npm/node_modules/libnpmorg": { 2569 + "version": "7.0.0", 2570 + "inBundle": true, 2571 + "license": "ISC", 2572 + "dependencies": { 2573 + "aproba": "^2.0.0", 2574 + "npm-registry-fetch": "^18.0.1" 2575 + }, 2576 + "engines": { 2577 + "node": "^18.17.0 || >=20.5.0" 2578 + } 2579 + }, 2580 + "node_modules/npm/node_modules/libnpmpack": { 2581 + "version": "8.0.4", 2582 + "inBundle": true, 2583 + "license": "ISC", 2584 + "dependencies": { 2585 + "@npmcli/arborist": "^8.0.4", 2586 + "@npmcli/run-script": "^9.0.1", 2587 + "npm-package-arg": "^12.0.0", 2588 + "pacote": "^19.0.0" 2589 + }, 2590 + "engines": { 2591 + "node": "^18.17.0 || >=20.5.0" 2592 + } 2593 + }, 2594 + "node_modules/npm/node_modules/libnpmpublish": { 2595 + "version": "10.0.2", 2596 + "inBundle": true, 2597 + "license": "ISC", 2598 + "dependencies": { 2599 + "ci-info": "^4.0.0", 2600 + "normalize-package-data": "^7.0.0", 2601 + "npm-package-arg": "^12.0.0", 2602 + "npm-registry-fetch": "^18.0.1", 2603 + "proc-log": "^5.0.0", 2604 + "semver": "^7.3.7", 2605 + "sigstore": "^3.0.0", 2606 + "ssri": "^12.0.0" 2607 + }, 2608 + "engines": { 2609 + "node": "^18.17.0 || >=20.5.0" 2610 + } 2611 + }, 2612 + "node_modules/npm/node_modules/libnpmsearch": { 2613 + "version": "8.0.0", 2614 + "inBundle": true, 2615 + "license": "ISC", 2616 + "dependencies": { 2617 + "npm-registry-fetch": "^18.0.1" 2618 + }, 2619 + "engines": { 2620 + "node": "^18.17.0 || >=20.5.0" 2621 + } 2622 + }, 2623 + "node_modules/npm/node_modules/libnpmteam": { 2624 + "version": "7.0.0", 2625 + "inBundle": true, 2626 + "license": "ISC", 2627 + "dependencies": { 2628 + "aproba": "^2.0.0", 2629 + "npm-registry-fetch": "^18.0.1" 2630 + }, 2631 + "engines": { 2632 + "node": "^18.17.0 || >=20.5.0" 2633 + } 2634 + }, 2635 + "node_modules/npm/node_modules/libnpmversion": { 2636 + "version": "7.0.0", 2637 + "inBundle": true, 2638 + "license": "ISC", 2639 + "dependencies": { 2640 + "@npmcli/git": "^6.0.1", 2641 + "@npmcli/run-script": "^9.0.1", 2642 + "json-parse-even-better-errors": "^4.0.0", 2643 + "proc-log": "^5.0.0", 2644 + "semver": "^7.3.7" 2645 + }, 2646 + "engines": { 2647 + "node": "^18.17.0 || >=20.5.0" 2648 + } 2649 + }, 2650 + "node_modules/npm/node_modules/lru-cache": { 2651 + "version": "10.4.3", 2652 + "inBundle": true, 2653 + "license": "ISC" 2654 + }, 2655 + "node_modules/npm/node_modules/make-fetch-happen": { 2656 + "version": "14.0.3", 2657 + "inBundle": true, 2658 + "license": "ISC", 2659 + "dependencies": { 2660 + "@npmcli/agent": "^3.0.0", 2661 + "cacache": "^19.0.1", 2662 + "http-cache-semantics": "^4.1.1", 2663 + "minipass": "^7.0.2", 2664 + "minipass-fetch": "^4.0.0", 2665 + "minipass-flush": "^1.0.5", 2666 + "minipass-pipeline": "^1.2.4", 2667 + "negotiator": "^1.0.0", 2668 + "proc-log": "^5.0.0", 2669 + "promise-retry": "^2.0.1", 2670 + "ssri": "^12.0.0" 2671 + }, 2672 + "engines": { 2673 + "node": "^18.17.0 || >=20.5.0" 2674 + } 2675 + }, 2676 + "node_modules/npm/node_modules/minimatch": { 2677 + "version": "9.0.9", 2678 + "inBundle": true, 2679 + "license": "ISC", 2680 + "dependencies": { 2681 + "brace-expansion": "^2.0.2" 2682 + }, 2683 + "engines": { 2684 + "node": ">=16 || 14 >=14.17" 2685 + }, 2686 + "funding": { 2687 + "url": "https://github.com/sponsors/isaacs" 2688 + } 2689 + }, 2690 + "node_modules/npm/node_modules/minipass": { 2691 + "version": "7.1.3", 2692 + "inBundle": true, 2693 + "license": "BlueOak-1.0.0", 2694 + "engines": { 2695 + "node": ">=16 || 14 >=14.17" 2696 + } 2697 + }, 2698 + "node_modules/npm/node_modules/minipass-collect": { 2699 + "version": "2.0.1", 2700 + "inBundle": true, 2701 + "license": "ISC", 2702 + "dependencies": { 2703 + "minipass": "^7.0.3" 2704 + }, 2705 + "engines": { 2706 + "node": ">=16 || 14 >=14.17" 2707 + } 2708 + }, 2709 + "node_modules/npm/node_modules/minipass-fetch": { 2710 + "version": "4.0.1", 2711 + "inBundle": true, 2712 + "license": "MIT", 2713 + "dependencies": { 2714 + "minipass": "^7.0.3", 2715 + "minipass-sized": "^1.0.3", 2716 + "minizlib": "^3.0.1" 2717 + }, 2718 + "engines": { 2719 + "node": "^18.17.0 || >=20.5.0" 2720 + }, 2721 + "optionalDependencies": { 2722 + "encoding": "^0.1.13" 2723 + } 2724 + }, 2725 + "node_modules/npm/node_modules/minipass-flush": { 2726 + "version": "1.0.5", 2727 + "inBundle": true, 2728 + "license": "ISC", 2729 + "dependencies": { 2730 + "minipass": "^3.0.0" 2731 + }, 2732 + "engines": { 2733 + "node": ">= 8" 2734 + } 2735 + }, 2736 + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { 2737 + "version": "3.3.6", 2738 + "inBundle": true, 2739 + "license": "ISC", 2740 + "dependencies": { 2741 + "yallist": "^4.0.0" 2742 + }, 2743 + "engines": { 2744 + "node": ">=8" 2745 + } 2746 + }, 2747 + "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": { 2748 + "version": "4.0.0", 2749 + "inBundle": true, 2750 + "license": "ISC" 2751 + }, 2752 + "node_modules/npm/node_modules/minipass-pipeline": { 2753 + "version": "1.2.4", 2754 + "inBundle": true, 2755 + "license": "ISC", 2756 + "dependencies": { 2757 + "minipass": "^3.0.0" 2758 + }, 2759 + "engines": { 2760 + "node": ">=8" 2761 + } 2762 + }, 2763 + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { 2764 + "version": "3.3.6", 2765 + "inBundle": true, 2766 + "license": "ISC", 2767 + "dependencies": { 2768 + "yallist": "^4.0.0" 2769 + }, 2770 + "engines": { 2771 + "node": ">=8" 2772 + } 2773 + }, 2774 + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { 2775 + "version": "4.0.0", 2776 + "inBundle": true, 2777 + "license": "ISC" 2778 + }, 2779 + "node_modules/npm/node_modules/minipass-sized": { 2780 + "version": "1.0.3", 2781 + "inBundle": true, 2782 + "license": "ISC", 2783 + "dependencies": { 2784 + "minipass": "^3.0.0" 2785 + }, 2786 + "engines": { 2787 + "node": ">=8" 2788 + } 2789 + }, 2790 + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { 2791 + "version": "3.3.6", 2792 + "inBundle": true, 2793 + "license": "ISC", 2794 + "dependencies": { 2795 + "yallist": "^4.0.0" 2796 + }, 2797 + "engines": { 2798 + "node": ">=8" 2799 + } 2800 + }, 2801 + "node_modules/npm/node_modules/minipass-sized/node_modules/yallist": { 2802 + "version": "4.0.0", 2803 + "inBundle": true, 2804 + "license": "ISC" 2805 + }, 2806 + "node_modules/npm/node_modules/minizlib": { 2807 + "version": "3.1.0", 2808 + "inBundle": true, 2809 + "license": "MIT", 2810 + "dependencies": { 2811 + "minipass": "^7.1.2" 2812 + }, 2813 + "engines": { 2814 + "node": ">= 18" 2815 + } 2816 + }, 2817 + "node_modules/npm/node_modules/ms": { 2818 + "version": "2.1.3", 2819 + "inBundle": true, 2820 + "license": "MIT" 2821 + }, 2822 + "node_modules/npm/node_modules/mute-stream": { 2823 + "version": "2.0.0", 2824 + "inBundle": true, 2825 + "license": "ISC", 2826 + "engines": { 2827 + "node": "^18.17.0 || >=20.5.0" 2828 + } 2829 + }, 2830 + "node_modules/npm/node_modules/negotiator": { 2831 + "version": "1.0.0", 2832 + "inBundle": true, 2833 + "license": "MIT", 2834 + "engines": { 2835 + "node": ">= 0.6" 2836 + } 2837 + }, 2838 + "node_modules/npm/node_modules/node-gyp": { 2839 + "version": "11.5.0", 2840 + "inBundle": true, 2841 + "license": "MIT", 2842 + "dependencies": { 2843 + "env-paths": "^2.2.0", 2844 + "exponential-backoff": "^3.1.1", 2845 + "graceful-fs": "^4.2.6", 2846 + "make-fetch-happen": "^14.0.3", 2847 + "nopt": "^8.0.0", 2848 + "proc-log": "^5.0.0", 2849 + "semver": "^7.3.5", 2850 + "tar": "^7.4.3", 2851 + "tinyglobby": "^0.2.12", 2852 + "which": "^5.0.0" 2853 + }, 2854 + "bin": { 2855 + "node-gyp": "bin/node-gyp.js" 2856 + }, 2857 + "engines": { 2858 + "node": "^18.17.0 || >=20.5.0" 2859 + } 2860 + }, 2861 + "node_modules/npm/node_modules/nopt": { 2862 + "version": "8.1.0", 2863 + "inBundle": true, 2864 + "license": "ISC", 2865 + "dependencies": { 2866 + "abbrev": "^3.0.0" 2867 + }, 2868 + "bin": { 2869 + "nopt": "bin/nopt.js" 2870 + }, 2871 + "engines": { 2872 + "node": "^18.17.0 || >=20.5.0" 2873 + } 2874 + }, 2875 + "node_modules/npm/node_modules/normalize-package-data": { 2876 + "version": "7.0.1", 2877 + "inBundle": true, 2878 + "license": "BSD-2-Clause", 2879 + "dependencies": { 2880 + "hosted-git-info": "^8.0.0", 2881 + "semver": "^7.3.5", 2882 + "validate-npm-package-license": "^3.0.4" 2883 + }, 2884 + "engines": { 2885 + "node": "^18.17.0 || >=20.5.0" 2886 + } 2887 + }, 2888 + "node_modules/npm/node_modules/npm-audit-report": { 2889 + "version": "6.0.0", 2890 + "inBundle": true, 2891 + "license": "ISC", 2892 + "engines": { 2893 + "node": "^18.17.0 || >=20.5.0" 2894 + } 2895 + }, 2896 + "node_modules/npm/node_modules/npm-bundled": { 2897 + "version": "4.0.0", 2898 + "inBundle": true, 2899 + "license": "ISC", 2900 + "dependencies": { 2901 + "npm-normalize-package-bin": "^4.0.0" 2902 + }, 2903 + "engines": { 2904 + "node": "^18.17.0 || >=20.5.0" 2905 + } 2906 + }, 2907 + "node_modules/npm/node_modules/npm-install-checks": { 2908 + "version": "7.1.2", 2909 + "inBundle": true, 2910 + "license": "BSD-2-Clause", 2911 + "dependencies": { 2912 + "semver": "^7.1.1" 2913 + }, 2914 + "engines": { 2915 + "node": "^18.17.0 || >=20.5.0" 2916 + } 2917 + }, 2918 + "node_modules/npm/node_modules/npm-normalize-package-bin": { 2919 + "version": "4.0.0", 2920 + "inBundle": true, 2921 + "license": "ISC", 2922 + "engines": { 2923 + "node": "^18.17.0 || >=20.5.0" 2924 + } 2925 + }, 2926 + "node_modules/npm/node_modules/npm-package-arg": { 2927 + "version": "12.0.2", 2928 + "inBundle": true, 2929 + "license": "ISC", 2930 + "dependencies": { 2931 + "hosted-git-info": "^8.0.0", 2932 + "proc-log": "^5.0.0", 2933 + "semver": "^7.3.5", 2934 + "validate-npm-package-name": "^6.0.0" 2935 + }, 2936 + "engines": { 2937 + "node": "^18.17.0 || >=20.5.0" 2938 + } 2939 + }, 2940 + "node_modules/npm/node_modules/npm-packlist": { 2941 + "version": "9.0.0", 2942 + "inBundle": true, 2943 + "license": "ISC", 2944 + "dependencies": { 2945 + "ignore-walk": "^7.0.0" 2946 + }, 2947 + "engines": { 2948 + "node": "^18.17.0 || >=20.5.0" 2949 + } 2950 + }, 2951 + "node_modules/npm/node_modules/npm-pick-manifest": { 2952 + "version": "10.0.0", 2953 + "inBundle": true, 2954 + "license": "ISC", 2955 + "dependencies": { 2956 + "npm-install-checks": "^7.1.0", 2957 + "npm-normalize-package-bin": "^4.0.0", 2958 + "npm-package-arg": "^12.0.0", 2959 + "semver": "^7.3.5" 2960 + }, 2961 + "engines": { 2962 + "node": "^18.17.0 || >=20.5.0" 2963 + } 2964 + }, 2965 + "node_modules/npm/node_modules/npm-profile": { 2966 + "version": "11.0.1", 2967 + "inBundle": true, 2968 + "license": "ISC", 2969 + "dependencies": { 2970 + "npm-registry-fetch": "^18.0.0", 2971 + "proc-log": "^5.0.0" 2972 + }, 2973 + "engines": { 2974 + "node": "^18.17.0 || >=20.5.0" 2975 + } 2976 + }, 2977 + "node_modules/npm/node_modules/npm-registry-fetch": { 2978 + "version": "18.0.2", 2979 + "inBundle": true, 2980 + "license": "ISC", 2981 + "dependencies": { 2982 + "@npmcli/redact": "^3.0.0", 2983 + "jsonparse": "^1.3.1", 2984 + "make-fetch-happen": "^14.0.0", 2985 + "minipass": "^7.0.2", 2986 + "minipass-fetch": "^4.0.0", 2987 + "minizlib": "^3.0.1", 2988 + "npm-package-arg": "^12.0.0", 2989 + "proc-log": "^5.0.0" 2990 + }, 2991 + "engines": { 2992 + "node": "^18.17.0 || >=20.5.0" 2993 + } 2994 + }, 2995 + "node_modules/npm/node_modules/npm-user-validate": { 2996 + "version": "3.0.0", 2997 + "inBundle": true, 2998 + "license": "BSD-2-Clause", 2999 + "engines": { 3000 + "node": "^18.17.0 || >=20.5.0" 3001 + } 3002 + }, 3003 + "node_modules/npm/node_modules/p-map": { 3004 + "version": "7.0.4", 3005 + "inBundle": true, 3006 + "license": "MIT", 3007 + "engines": { 3008 + "node": ">=18" 3009 + }, 3010 + "funding": { 3011 + "url": "https://github.com/sponsors/sindresorhus" 3012 + } 3013 + }, 3014 + "node_modules/npm/node_modules/package-json-from-dist": { 3015 + "version": "1.0.1", 3016 + "inBundle": true, 3017 + "license": "BlueOak-1.0.0" 3018 + }, 3019 + "node_modules/npm/node_modules/pacote": { 3020 + "version": "19.0.2", 3021 + "inBundle": true, 3022 + "license": "ISC", 3023 + "dependencies": { 3024 + "@npmcli/git": "^6.0.0", 3025 + "@npmcli/installed-package-contents": "^3.0.0", 3026 + "@npmcli/package-json": "^6.0.0", 3027 + "@npmcli/promise-spawn": "^8.0.0", 3028 + "@npmcli/run-script": "^9.0.0", 3029 + "cacache": "^19.0.0", 3030 + "fs-minipass": "^3.0.0", 3031 + "minipass": "^7.0.2", 3032 + "npm-package-arg": "^12.0.0", 3033 + "npm-packlist": "^9.0.0", 3034 + "npm-pick-manifest": "^10.0.0", 3035 + "npm-registry-fetch": "^18.0.0", 3036 + "proc-log": "^5.0.0", 3037 + "promise-retry": "^2.0.1", 3038 + "sigstore": "^3.0.0", 3039 + "ssri": "^12.0.0", 3040 + "tar": "^7.5.10" 3041 + }, 3042 + "bin": { 3043 + "pacote": "bin/index.js" 3044 + }, 3045 + "engines": { 3046 + "node": "^18.17.0 || >=20.5.0" 3047 + } 3048 + }, 3049 + "node_modules/npm/node_modules/parse-conflict-json": { 3050 + "version": "4.0.0", 3051 + "inBundle": true, 3052 + "license": "ISC", 3053 + "dependencies": { 3054 + "json-parse-even-better-errors": "^4.0.0", 3055 + "just-diff": "^6.0.0", 3056 + "just-diff-apply": "^5.2.0" 3057 + }, 3058 + "engines": { 3059 + "node": "^18.17.0 || >=20.5.0" 3060 + } 3061 + }, 3062 + "node_modules/npm/node_modules/path-key": { 3063 + "version": "3.1.1", 3064 + "inBundle": true, 3065 + "license": "MIT", 3066 + "engines": { 3067 + "node": ">=8" 3068 + } 3069 + }, 3070 + "node_modules/npm/node_modules/path-scurry": { 3071 + "version": "1.11.1", 3072 + "inBundle": true, 3073 + "license": "BlueOak-1.0.0", 3074 + "dependencies": { 3075 + "lru-cache": "^10.2.0", 3076 + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 3077 + }, 3078 + "engines": { 3079 + "node": ">=16 || 14 >=14.18" 3080 + }, 3081 + "funding": { 3082 + "url": "https://github.com/sponsors/isaacs" 3083 + } 3084 + }, 3085 + "node_modules/npm/node_modules/picomatch": { 3086 + "version": "4.0.3", 3087 + "inBundle": true, 3088 + "license": "MIT", 3089 + "engines": { 3090 + "node": ">=12" 3091 + }, 3092 + "funding": { 3093 + "url": "https://github.com/sponsors/jonschlinkert" 3094 + } 3095 + }, 3096 + "node_modules/npm/node_modules/postcss-selector-parser": { 3097 + "version": "7.1.1", 3098 + "inBundle": true, 3099 + "license": "MIT", 3100 + "dependencies": { 3101 + "cssesc": "^3.0.0", 3102 + "util-deprecate": "^1.0.2" 3103 + }, 3104 + "engines": { 3105 + "node": ">=4" 3106 + } 3107 + }, 3108 + "node_modules/npm/node_modules/proc-log": { 3109 + "version": "5.0.0", 3110 + "inBundle": true, 3111 + "license": "ISC", 3112 + "engines": { 3113 + "node": "^18.17.0 || >=20.5.0" 3114 + } 3115 + }, 3116 + "node_modules/npm/node_modules/proggy": { 3117 + "version": "3.0.0", 3118 + "inBundle": true, 3119 + "license": "ISC", 3120 + "engines": { 3121 + "node": "^18.17.0 || >=20.5.0" 3122 + } 3123 + }, 3124 + "node_modules/npm/node_modules/promise-all-reject-late": { 3125 + "version": "1.0.1", 3126 + "inBundle": true, 3127 + "license": "ISC", 3128 + "funding": { 3129 + "url": "https://github.com/sponsors/isaacs" 3130 + } 3131 + }, 3132 + "node_modules/npm/node_modules/promise-call-limit": { 3133 + "version": "3.0.2", 3134 + "inBundle": true, 3135 + "license": "ISC", 3136 + "funding": { 3137 + "url": "https://github.com/sponsors/isaacs" 3138 + } 3139 + }, 3140 + "node_modules/npm/node_modules/promise-retry": { 3141 + "version": "2.0.1", 3142 + "inBundle": true, 3143 + "license": "MIT", 3144 + "dependencies": { 3145 + "err-code": "^2.0.2", 3146 + "retry": "^0.12.0" 3147 + }, 3148 + "engines": { 3149 + "node": ">=10" 3150 + } 3151 + }, 3152 + "node_modules/npm/node_modules/promzard": { 3153 + "version": "2.0.0", 3154 + "inBundle": true, 3155 + "license": "ISC", 3156 + "dependencies": { 3157 + "read": "^4.0.0" 3158 + }, 3159 + "engines": { 3160 + "node": "^18.17.0 || >=20.5.0" 3161 + } 3162 + }, 3163 + "node_modules/npm/node_modules/qrcode-terminal": { 3164 + "version": "0.12.0", 3165 + "inBundle": true, 3166 + "bin": { 3167 + "qrcode-terminal": "bin/qrcode-terminal.js" 3168 + } 3169 + }, 3170 + "node_modules/npm/node_modules/read": { 3171 + "version": "4.1.0", 3172 + "inBundle": true, 3173 + "license": "ISC", 3174 + "dependencies": { 3175 + "mute-stream": "^2.0.0" 3176 + }, 3177 + "engines": { 3178 + "node": "^18.17.0 || >=20.5.0" 3179 + } 3180 + }, 3181 + "node_modules/npm/node_modules/read-cmd-shim": { 3182 + "version": "5.0.0", 3183 + "inBundle": true, 3184 + "license": "ISC", 3185 + "engines": { 3186 + "node": "^18.17.0 || >=20.5.0" 3187 + } 3188 + }, 3189 + "node_modules/npm/node_modules/read-package-json-fast": { 3190 + "version": "4.0.0", 3191 + "inBundle": true, 3192 + "license": "ISC", 3193 + "dependencies": { 3194 + "json-parse-even-better-errors": "^4.0.0", 3195 + "npm-normalize-package-bin": "^4.0.0" 3196 + }, 3197 + "engines": { 3198 + "node": "^18.17.0 || >=20.5.0" 3199 + } 3200 + }, 3201 + "node_modules/npm/node_modules/retry": { 3202 + "version": "0.12.0", 3203 + "inBundle": true, 3204 + "license": "MIT", 3205 + "engines": { 3206 + "node": ">= 4" 3207 + } 3208 + }, 3209 + "node_modules/npm/node_modules/safer-buffer": { 3210 + "version": "2.1.2", 3211 + "inBundle": true, 3212 + "license": "MIT", 3213 + "optional": true 3214 + }, 3215 + "node_modules/npm/node_modules/semver": { 3216 + "version": "7.7.4", 3217 + "inBundle": true, 3218 + "license": "ISC", 3219 + "bin": { 3220 + "semver": "bin/semver.js" 3221 + }, 3222 + "engines": { 3223 + "node": ">=10" 3224 + } 3225 + }, 3226 + "node_modules/npm/node_modules/shebang-command": { 3227 + "version": "2.0.0", 3228 + "inBundle": true, 3229 + "license": "MIT", 3230 + "dependencies": { 3231 + "shebang-regex": "^3.0.0" 3232 + }, 3233 + "engines": { 3234 + "node": ">=8" 3235 + } 3236 + }, 3237 + "node_modules/npm/node_modules/shebang-regex": { 3238 + "version": "3.0.0", 3239 + "inBundle": true, 3240 + "license": "MIT", 3241 + "engines": { 3242 + "node": ">=8" 3243 + } 3244 + }, 3245 + "node_modules/npm/node_modules/signal-exit": { 3246 + "version": "4.1.0", 3247 + "inBundle": true, 3248 + "license": "ISC", 3249 + "engines": { 3250 + "node": ">=14" 3251 + }, 3252 + "funding": { 3253 + "url": "https://github.com/sponsors/isaacs" 3254 + } 3255 + }, 3256 + "node_modules/npm/node_modules/sigstore": { 3257 + "version": "3.1.0", 3258 + "inBundle": true, 3259 + "license": "Apache-2.0", 3260 + "dependencies": { 3261 + "@sigstore/bundle": "^3.1.0", 3262 + "@sigstore/core": "^2.0.0", 3263 + "@sigstore/protobuf-specs": "^0.4.0", 3264 + "@sigstore/sign": "^3.1.0", 3265 + "@sigstore/tuf": "^3.1.0", 3266 + "@sigstore/verify": "^2.1.0" 3267 + }, 3268 + "engines": { 3269 + "node": "^18.17.0 || >=20.5.0" 3270 + } 3271 + }, 3272 + "node_modules/npm/node_modules/smart-buffer": { 3273 + "version": "4.2.0", 3274 + "inBundle": true, 3275 + "license": "MIT", 3276 + "engines": { 3277 + "node": ">= 6.0.0", 3278 + "npm": ">= 3.0.0" 3279 + } 3280 + }, 3281 + "node_modules/npm/node_modules/socks": { 3282 + "version": "2.8.7", 3283 + "inBundle": true, 3284 + "license": "MIT", 3285 + "dependencies": { 3286 + "ip-address": "^10.0.1", 3287 + "smart-buffer": "^4.2.0" 3288 + }, 3289 + "engines": { 3290 + "node": ">= 10.0.0", 3291 + "npm": ">= 3.0.0" 3292 + } 3293 + }, 3294 + "node_modules/npm/node_modules/socks-proxy-agent": { 3295 + "version": "8.0.5", 3296 + "inBundle": true, 3297 + "license": "MIT", 3298 + "dependencies": { 3299 + "agent-base": "^7.1.2", 3300 + "debug": "^4.3.4", 3301 + "socks": "^2.8.3" 3302 + }, 3303 + "engines": { 3304 + "node": ">= 14" 3305 + } 3306 + }, 3307 + "node_modules/npm/node_modules/spdx-correct": { 3308 + "version": "3.2.0", 3309 + "inBundle": true, 3310 + "license": "Apache-2.0", 3311 + "dependencies": { 3312 + "spdx-expression-parse": "^3.0.0", 3313 + "spdx-license-ids": "^3.0.0" 3314 + } 3315 + }, 3316 + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { 3317 + "version": "3.0.1", 3318 + "inBundle": true, 3319 + "license": "MIT", 3320 + "dependencies": { 3321 + "spdx-exceptions": "^2.1.0", 3322 + "spdx-license-ids": "^3.0.0" 3323 + } 3324 + }, 3325 + "node_modules/npm/node_modules/spdx-exceptions": { 3326 + "version": "2.5.0", 3327 + "inBundle": true, 3328 + "license": "CC-BY-3.0" 3329 + }, 3330 + "node_modules/npm/node_modules/spdx-expression-parse": { 3331 + "version": "4.0.0", 3332 + "inBundle": true, 3333 + "license": "MIT", 3334 + "dependencies": { 3335 + "spdx-exceptions": "^2.1.0", 3336 + "spdx-license-ids": "^3.0.0" 3337 + } 3338 + }, 3339 + "node_modules/npm/node_modules/spdx-license-ids": { 3340 + "version": "3.0.23", 3341 + "inBundle": true, 3342 + "license": "CC0-1.0" 3343 + }, 3344 + "node_modules/npm/node_modules/ssri": { 3345 + "version": "12.0.0", 3346 + "inBundle": true, 3347 + "license": "ISC", 3348 + "dependencies": { 3349 + "minipass": "^7.0.3" 3350 + }, 3351 + "engines": { 3352 + "node": "^18.17.0 || >=20.5.0" 3353 + } 3354 + }, 3355 + "node_modules/npm/node_modules/string-width": { 3356 + "version": "4.2.3", 3357 + "inBundle": true, 3358 + "license": "MIT", 3359 + "dependencies": { 3360 + "emoji-regex": "^8.0.0", 3361 + "is-fullwidth-code-point": "^3.0.0", 3362 + "strip-ansi": "^6.0.1" 3363 + }, 3364 + "engines": { 3365 + "node": ">=8" 3366 + } 3367 + }, 3368 + "node_modules/npm/node_modules/string-width-cjs": { 3369 + "name": "string-width", 3370 + "version": "4.2.3", 3371 + "inBundle": true, 3372 + "license": "MIT", 3373 + "dependencies": { 3374 + "emoji-regex": "^8.0.0", 3375 + "is-fullwidth-code-point": "^3.0.0", 3376 + "strip-ansi": "^6.0.1" 3377 + }, 3378 + "engines": { 3379 + "node": ">=8" 3380 + } 3381 + }, 3382 + "node_modules/npm/node_modules/strip-ansi": { 3383 + "version": "6.0.1", 3384 + "inBundle": true, 3385 + "license": "MIT", 3386 + "dependencies": { 3387 + "ansi-regex": "^5.0.1" 3388 + }, 3389 + "engines": { 3390 + "node": ">=8" 3391 + } 3392 + }, 3393 + "node_modules/npm/node_modules/strip-ansi-cjs": { 3394 + "name": "strip-ansi", 3395 + "version": "6.0.1", 3396 + "inBundle": true, 3397 + "license": "MIT", 3398 + "dependencies": { 3399 + "ansi-regex": "^5.0.1" 3400 + }, 3401 + "engines": { 3402 + "node": ">=8" 3403 + } 3404 + }, 3405 + "node_modules/npm/node_modules/supports-color": { 3406 + "version": "9.4.0", 3407 + "inBundle": true, 3408 + "license": "MIT", 3409 + "engines": { 3410 + "node": ">=12" 3411 + }, 3412 + "funding": { 3413 + "url": "https://github.com/chalk/supports-color?sponsor=1" 3414 + } 3415 + }, 3416 + "node_modules/npm/node_modules/tar": { 3417 + "version": "7.5.11", 3418 + "inBundle": true, 3419 + "license": "BlueOak-1.0.0", 3420 + "dependencies": { 3421 + "@isaacs/fs-minipass": "^4.0.0", 3422 + "chownr": "^3.0.0", 3423 + "minipass": "^7.1.2", 3424 + "minizlib": "^3.1.0", 3425 + "yallist": "^5.0.0" 3426 + }, 3427 + "engines": { 3428 + "node": ">=18" 3429 + } 3430 + }, 3431 + "node_modules/npm/node_modules/text-table": { 3432 + "version": "0.2.0", 3433 + "inBundle": true, 3434 + "license": "MIT" 3435 + }, 3436 + "node_modules/npm/node_modules/tiny-relative-date": { 3437 + "version": "1.3.0", 3438 + "inBundle": true, 3439 + "license": "MIT" 3440 + }, 3441 + "node_modules/npm/node_modules/tinyglobby": { 3442 + "version": "0.2.15", 3443 + "inBundle": true, 3444 + "license": "MIT", 3445 + "dependencies": { 3446 + "fdir": "^6.5.0", 3447 + "picomatch": "^4.0.3" 3448 + }, 3449 + "engines": { 3450 + "node": ">=12.0.0" 3451 + }, 3452 + "funding": { 3453 + "url": "https://github.com/sponsors/SuperchupuDev" 3454 + } 3455 + }, 3456 + "node_modules/npm/node_modules/treeverse": { 3457 + "version": "3.0.0", 3458 + "inBundle": true, 3459 + "license": "ISC", 3460 + "engines": { 3461 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 3462 + } 3463 + }, 3464 + "node_modules/npm/node_modules/tuf-js": { 3465 + "version": "3.1.0", 3466 + "inBundle": true, 3467 + "license": "MIT", 3468 + "dependencies": { 3469 + "@tufjs/models": "3.0.1", 3470 + "debug": "^4.4.1", 3471 + "make-fetch-happen": "^14.0.3" 3472 + }, 3473 + "engines": { 3474 + "node": "^18.17.0 || >=20.5.0" 3475 + } 3476 + }, 3477 + "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { 3478 + "version": "3.0.1", 3479 + "inBundle": true, 3480 + "license": "MIT", 3481 + "dependencies": { 3482 + "@tufjs/canonical-json": "2.0.0", 3483 + "minimatch": "^9.0.5" 3484 + }, 3485 + "engines": { 3486 + "node": "^18.17.0 || >=20.5.0" 3487 + } 3488 + }, 3489 + "node_modules/npm/node_modules/unique-filename": { 3490 + "version": "4.0.0", 3491 + "inBundle": true, 3492 + "license": "ISC", 3493 + "dependencies": { 3494 + "unique-slug": "^5.0.0" 3495 + }, 3496 + "engines": { 3497 + "node": "^18.17.0 || >=20.5.0" 3498 + } 3499 + }, 3500 + "node_modules/npm/node_modules/unique-slug": { 3501 + "version": "5.0.0", 3502 + "inBundle": true, 3503 + "license": "ISC", 3504 + "dependencies": { 3505 + "imurmurhash": "^0.1.4" 3506 + }, 3507 + "engines": { 3508 + "node": "^18.17.0 || >=20.5.0" 3509 + } 3510 + }, 3511 + "node_modules/npm/node_modules/util-deprecate": { 3512 + "version": "1.0.2", 3513 + "inBundle": true, 3514 + "license": "MIT" 3515 + }, 3516 + "node_modules/npm/node_modules/validate-npm-package-license": { 3517 + "version": "3.0.4", 3518 + "inBundle": true, 3519 + "license": "Apache-2.0", 3520 + "dependencies": { 3521 + "spdx-correct": "^3.0.0", 3522 + "spdx-expression-parse": "^3.0.0" 3523 + } 3524 + }, 3525 + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { 3526 + "version": "3.0.1", 3527 + "inBundle": true, 3528 + "license": "MIT", 3529 + "dependencies": { 3530 + "spdx-exceptions": "^2.1.0", 3531 + "spdx-license-ids": "^3.0.0" 3532 + } 3533 + }, 3534 + "node_modules/npm/node_modules/validate-npm-package-name": { 3535 + "version": "6.0.2", 3536 + "inBundle": true, 3537 + "license": "ISC", 3538 + "engines": { 3539 + "node": "^18.17.0 || >=20.5.0" 3540 + } 3541 + }, 3542 + "node_modules/npm/node_modules/walk-up-path": { 3543 + "version": "3.0.1", 3544 + "inBundle": true, 3545 + "license": "ISC" 3546 + }, 3547 + "node_modules/npm/node_modules/which": { 3548 + "version": "5.0.0", 3549 + "inBundle": true, 3550 + "license": "ISC", 3551 + "dependencies": { 3552 + "isexe": "^3.1.1" 3553 + }, 3554 + "bin": { 3555 + "node-which": "bin/which.js" 3556 + }, 3557 + "engines": { 3558 + "node": "^18.17.0 || >=20.5.0" 3559 + } 3560 + }, 3561 + "node_modules/npm/node_modules/which/node_modules/isexe": { 3562 + "version": "3.1.5", 3563 + "inBundle": true, 3564 + "license": "BlueOak-1.0.0", 3565 + "engines": { 3566 + "node": ">=18" 3567 + } 3568 + }, 3569 + "node_modules/npm/node_modules/wrap-ansi": { 3570 + "version": "8.1.0", 3571 + "inBundle": true, 3572 + "license": "MIT", 3573 + "dependencies": { 3574 + "ansi-styles": "^6.1.0", 3575 + "string-width": "^5.0.1", 3576 + "strip-ansi": "^7.0.1" 3577 + }, 3578 + "engines": { 3579 + "node": ">=12" 3580 + }, 3581 + "funding": { 3582 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3583 + } 3584 + }, 3585 + "node_modules/npm/node_modules/wrap-ansi-cjs": { 3586 + "name": "wrap-ansi", 3587 + "version": "7.0.0", 3588 + "inBundle": true, 3589 + "license": "MIT", 3590 + "dependencies": { 3591 + "ansi-styles": "^4.0.0", 3592 + "string-width": "^4.1.0", 3593 + "strip-ansi": "^6.0.0" 3594 + }, 3595 + "engines": { 3596 + "node": ">=10" 3597 + }, 3598 + "funding": { 3599 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3600 + } 3601 + }, 3602 + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 3603 + "version": "4.3.0", 3604 + "inBundle": true, 3605 + "license": "MIT", 3606 + "dependencies": { 3607 + "color-convert": "^2.0.1" 3608 + }, 3609 + "engines": { 3610 + "node": ">=8" 3611 + }, 3612 + "funding": { 3613 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3614 + } 3615 + }, 3616 + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { 3617 + "version": "6.2.2", 3618 + "inBundle": true, 3619 + "license": "MIT", 3620 + "engines": { 3621 + "node": ">=12" 3622 + }, 3623 + "funding": { 3624 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3625 + } 3626 + }, 3627 + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { 3628 + "version": "9.2.2", 3629 + "inBundle": true, 3630 + "license": "MIT" 3631 + }, 3632 + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { 3633 + "version": "5.1.2", 3634 + "inBundle": true, 3635 + "license": "MIT", 3636 + "dependencies": { 3637 + "eastasianwidth": "^0.2.0", 3638 + "emoji-regex": "^9.2.2", 3639 + "strip-ansi": "^7.0.1" 3640 + }, 3641 + "engines": { 3642 + "node": ">=12" 3643 + }, 3644 + "funding": { 3645 + "url": "https://github.com/sponsors/sindresorhus" 3646 + } 3647 + }, 3648 + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { 3649 + "version": "7.2.0", 3650 + "inBundle": true, 3651 + "license": "MIT", 3652 + "dependencies": { 3653 + "ansi-regex": "^6.2.2" 3654 + }, 3655 + "engines": { 3656 + "node": ">=12" 3657 + }, 3658 + "funding": { 3659 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3660 + } 3661 + }, 3662 + "node_modules/npm/node_modules/write-file-atomic": { 3663 + "version": "6.0.0", 3664 + "inBundle": true, 3665 + "license": "ISC", 3666 + "dependencies": { 3667 + "imurmurhash": "^0.1.4", 3668 + "signal-exit": "^4.0.1" 3669 + }, 3670 + "engines": { 3671 + "node": "^18.17.0 || >=20.5.0" 3672 + } 3673 + }, 3674 + "node_modules/npm/node_modules/yallist": { 3675 + "version": "5.0.0", 3676 + "inBundle": true, 3677 + "license": "BlueOak-1.0.0", 3678 + "engines": { 3679 + "node": ">=18" 3680 + } 3681 + }, 3682 + "node_modules/object-treeify": { 3683 + "version": "4.0.1", 3684 + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-4.0.1.tgz", 3685 + "integrity": "sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==", 3686 + "license": "MIT", 3687 + "engines": { 3688 + "node": ">= 16" 3689 + } 3690 + }, 3691 + "node_modules/path-key": { 3692 + "version": "4.0.0", 3693 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 3694 + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 3695 + "license": "MIT", 3696 + "engines": { 3697 + "node": ">=12" 3698 + }, 3699 + "funding": { 3700 + "url": "https://github.com/sponsors/sindresorhus" 3701 + } 3702 + }, 3703 + "node_modules/picocolors": { 3704 + "version": "1.1.1", 3705 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3706 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 3707 + "license": "ISC" 3708 + }, 3709 + "node_modules/picomatch": { 3710 + "version": "4.0.3", 3711 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 3712 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 3713 + "license": "MIT", 3714 + "engines": { 3715 + "node": ">=12" 3716 + }, 3717 + "funding": { 3718 + "url": "https://github.com/sponsors/jonschlinkert" 3719 + } 3720 + }, 3721 + "node_modules/proc-log": { 3722 + "version": "4.2.0", 3723 + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", 3724 + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", 3725 + "license": "ISC", 3726 + "engines": { 3727 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 3728 + } 3729 + }, 3730 + "node_modules/react": { 3731 + "version": "19.0.0", 3732 + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", 3733 + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", 3734 + "license": "MIT", 3735 + "engines": { 3736 + "node": ">=0.10.0" 3737 + } 3738 + }, 3739 + "node_modules/readdirp": { 3740 + "version": "4.1.2", 3741 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 3742 + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 3743 + "license": "MIT", 3744 + "engines": { 3745 + "node": ">= 14.18.0" 3746 + }, 3747 + "funding": { 3748 + "type": "individual", 3749 + "url": "https://paulmillr.com/funding/" 3750 + } 3751 + }, 3752 + "node_modules/semver": { 3753 + "version": "7.7.4", 3754 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 3755 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 3756 + "license": "ISC", 3757 + "bin": { 3758 + "semver": "bin/semver.js" 3759 + }, 3760 + "engines": { 3761 + "node": ">=10" 3762 + } 3763 + }, 3764 + "node_modules/string-width": { 3765 + "version": "4.2.3", 3766 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3767 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3768 + "license": "MIT", 3769 + "dependencies": { 3770 + "emoji-regex": "^8.0.0", 3771 + "is-fullwidth-code-point": "^3.0.0", 3772 + "strip-ansi": "^6.0.1" 3773 + }, 3774 + "engines": { 3775 + "node": ">=8" 3776 + } 3777 + }, 3778 + "node_modules/strip-ansi": { 3779 + "version": "6.0.1", 3780 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3781 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3782 + "license": "MIT", 3783 + "dependencies": { 3784 + "ansi-regex": "^5.0.1" 3785 + }, 3786 + "engines": { 3787 + "node": ">=8" 3788 + } 3789 + }, 3790 + "node_modules/supports-color": { 3791 + "version": "8.1.1", 3792 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 3793 + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 3794 + "license": "MIT", 3795 + "dependencies": { 3796 + "has-flag": "^4.0.0" 3797 + }, 3798 + "engines": { 3799 + "node": ">=10" 3800 + }, 3801 + "funding": { 3802 + "url": "https://github.com/chalk/supports-color?sponsor=1" 3803 + } 3804 + }, 3805 + "node_modules/tinyglobby": { 3806 + "version": "0.2.15", 3807 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 3808 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 3809 + "license": "MIT", 3810 + "dependencies": { 3811 + "fdir": "^6.5.0", 3812 + "picomatch": "^4.0.3" 3813 + }, 3814 + "engines": { 3815 + "node": ">=12.0.0" 3816 + }, 3817 + "funding": { 3818 + "url": "https://github.com/sponsors/SuperchupuDev" 3819 + } 3820 + }, 3821 + "node_modules/type-fest": { 3822 + "version": "0.21.3", 3823 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 3824 + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 3825 + "license": "(MIT OR CC0-1.0)", 3826 + "engines": { 3827 + "node": ">=10" 3828 + }, 3829 + "funding": { 3830 + "url": "https://github.com/sponsors/sindresorhus" 3831 + } 3832 + }, 3833 + "node_modules/typescript": { 3834 + "version": "5.9.3", 3835 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 3836 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 3837 + "license": "Apache-2.0", 3838 + "peer": true, 3839 + "bin": { 3840 + "tsc": "bin/tsc", 3841 + "tsserver": "bin/tsserver" 3842 + }, 3843 + "engines": { 3844 + "node": ">=14.17" 3845 + } 3846 + }, 3847 + "node_modules/undici-types": { 3848 + "version": "7.18.2", 3849 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", 3850 + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", 3851 + "license": "MIT" 3852 + }, 3853 + "node_modules/validate-npm-package-name": { 3854 + "version": "5.0.1", 3855 + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", 3856 + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", 3857 + "license": "ISC", 3858 + "engines": { 3859 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 3860 + } 3861 + }, 3862 + "node_modules/which": { 3863 + "version": "4.0.0", 3864 + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", 3865 + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", 3866 + "license": "ISC", 3867 + "dependencies": { 3868 + "isexe": "^3.1.1" 3869 + }, 3870 + "bin": { 3871 + "node-which": "bin/which.js" 3872 + }, 3873 + "engines": { 3874 + "node": "^16.13.0 || >=18.0.0" 3875 + } 3876 + }, 3877 + "node_modules/widest-line": { 3878 + "version": "3.1.0", 3879 + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 3880 + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 3881 + "license": "MIT", 3882 + "dependencies": { 3883 + "string-width": "^4.0.0" 3884 + }, 3885 + "engines": { 3886 + "node": ">=8" 3887 + } 3888 + }, 3889 + "node_modules/wordwrap": { 3890 + "version": "1.0.0", 3891 + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3892 + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", 3893 + "license": "MIT" 3894 + }, 3895 + "node_modules/wrap-ansi": { 3896 + "version": "7.0.0", 3897 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3898 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3899 + "license": "MIT", 3900 + "dependencies": { 3901 + "ansi-styles": "^4.0.0", 3902 + "string-width": "^4.1.0", 3903 + "strip-ansi": "^6.0.0" 3904 + }, 3905 + "engines": { 3906 + "node": ">=10" 3907 + }, 3908 + "funding": { 3909 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3910 + } 3911 + }, 3912 + "node_modules/yarn": { 3913 + "version": "1.22.22", 3914 + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", 3915 + "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", 3916 + "hasInstallScript": true, 3917 + "license": "BSD-2-Clause", 3918 + "bin": { 3919 + "yarn": "bin/yarn.js", 3920 + "yarnpkg": "bin/yarn.js" 3921 + }, 3922 + "engines": { 3923 + "node": ">=4.0.0" 3924 + } 3925 + }, 3926 + "node_modules/zod": { 3927 + "version": "4.3.6", 3928 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", 3929 + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", 3930 + "license": "MIT", 3931 + "funding": { 3932 + "url": "https://github.com/sponsors/colinhacks" 3933 + } 3934 + } 3935 + } 3936 + }
+28
package.json
··· 1 + { 2 + "$schema": "https://raw.githubusercontent.com/vicinaehq/vicinae/refs/heads/main/extra/schemas/extension.json", 3 + "name": "vclaude", 4 + "title": "Claude Code", 5 + "description": "Chat with Claude Code in the vclaude workspace via ACP", 6 + "icon": "extension_icon.png", 7 + "author": "chris", 8 + "license": "MIT", 9 + "categories": ["Developer Tools"], 10 + "commands": [ 11 + { 12 + "name": "sessions", 13 + "title": "Claude Code Sessions", 14 + "description": "Browse and resume Claude Code conversations", 15 + "mode": "view" 16 + } 17 + ], 18 + "dependencies": { 19 + "@vicinae/api": "^0.16.5", 20 + "@zed-industries/claude-agent-acp": "latest" 21 + }, 22 + "scripts": { 23 + "prebuild": "echo $PWD > assets/source-path.txt", 24 + "build": "vici build", 25 + "predev": "echo $PWD > assets/source-path.txt", 26 + "dev": "vici develop" 27 + } 28 + }
+382
src/acp-client.ts
··· 1 + import { spawn, ChildProcess, execSync } from 'child_process' 2 + import * as readline from 'readline' 3 + import * as path from 'path' 4 + import * as fs from 'fs' 5 + import * as net from 'net' 6 + import { environment } from '@vicinae/api' 7 + import type { PlanEntry, ToolCall, ToolCallStatus } from './types' 8 + 9 + const CWD = path.dirname(environment.assetsPath) 10 + 11 + function resolveAgentBin(): string { 12 + // 1. Installed location (when Vicinae runs npm install on installation) 13 + const installed = path.join(CWD, 'node_modules', '.bin', 'claude-agent-acp') 14 + if (fs.existsSync(installed)) return installed 15 + 16 + // 2. Source directory written into assets at build/dev time by the predev/prebuild script 17 + const sourcePathFile = path.join(environment.assetsPath, 'source-path.txt') 18 + if (fs.existsSync(sourcePathFile)) { 19 + const sourcePath = fs.readFileSync(sourcePathFile, 'utf8').trim() 20 + const fromSource = path.join(sourcePath, 'node_modules', '.bin', 'claude-agent-acp') 21 + if (fs.existsSync(fromSource)) return fromSource 22 + } 23 + 24 + // 3. Global install on PATH 25 + try { 26 + return execSync('which claude-agent-acp', { encoding: 'utf8' }).trim() 27 + } catch { 28 + throw new Error('claude-agent-acp not found. Run: npm install -g @zed-industries/claude-agent-acp') 29 + } 30 + } 31 + 32 + const AGENT_BIN = resolveAgentBin() 33 + const LOG_FILE = '/tmp/vclaude.log' 34 + 35 + function log(...args: unknown[]): void { 36 + const line = `[${new Date().toISOString()}] ${args.map((a) => (typeof a === 'object' ? JSON.stringify(a) : String(a))).join(' ')}\n` 37 + fs.appendFileSync(LOG_FILE, line) 38 + } 39 + 40 + // Fake SSH agent: returns "no identities" to prevent 1Password prompts. 41 + const FAKE_AGENT_SOCK = '/tmp/vclaude-ssh-agent.sock' 42 + // SSH wrapper on PATH: intercepts all ssh calls, forces BatchMode + IdentitiesOnly. 43 + const SSH_WRAPPER_DIR = '/tmp/vclaude-bin' 44 + const SSH_WRAPPER = `${SSH_WRAPPER_DIR}/ssh` 45 + const SAFE_PATH = `${SSH_WRAPPER_DIR}:${process.env.PATH}` 46 + 47 + function setupSSHIsolation(): void { 48 + // Create fake SSH agent 49 + try { fs.unlinkSync(FAKE_AGENT_SOCK) } catch {} 50 + const server = net.createServer((socket) => { 51 + socket.on('data', (buf: Buffer) => { 52 + if (buf.length < 5) return 53 + const msgType = buf.readUInt8(4) 54 + if (msgType === 11) { 55 + // SSH_AGENTC_REQUEST_IDENTITIES → 0 identities 56 + const reply = Buffer.alloc(9) 57 + reply.writeUInt32BE(5, 0) 58 + reply.writeUInt8(12, 4) 59 + reply.writeUInt32BE(0, 5) 60 + socket.write(reply) 61 + } else { 62 + // All other requests → SSH_AGENT_FAILURE 63 + const reply = Buffer.alloc(5) 64 + reply.writeUInt32BE(1, 0) 65 + reply.writeUInt8(5, 4) 66 + socket.write(reply) 67 + } 68 + }) 69 + socket.on('error', () => {}) 70 + }) 71 + server.on('error', (err) => log('fake SSH agent error:', err.message)) 72 + server.listen(FAKE_AGENT_SOCK, () => log('fake SSH agent listening at', FAKE_AGENT_SOCK)) 73 + 74 + // Create SSH wrapper script that forces BatchMode + IdentitiesOnly 75 + fs.mkdirSync(SSH_WRAPPER_DIR, { recursive: true }) 76 + fs.writeFileSync(SSH_WRAPPER, '#!/bin/sh\nexec /usr/bin/ssh -o BatchMode=yes -o IdentitiesOnly=yes "$@"\n', { mode: 0o755 }) 77 + log('SSH wrapper created at', SSH_WRAPPER) 78 + } 79 + 80 + setupSSHIsolation() 81 + 82 + // Shared env block applied to spawn and all ACP sessions 83 + const SSH_ISOLATED_ENV = { 84 + ...process.env, 85 + PATH: SAFE_PATH, 86 + GIT_TERMINAL_PROMPT: '0', 87 + GIT_OPTIONAL_LOCKS: '0', 88 + GIT_SSH_COMMAND: 'ssh -F /dev/null -o BatchMode=yes -o IdentitiesOnly=yes', 89 + DISABLE_NON_ESSENTIAL_MODEL_CALLS: '1', 90 + SSH_AUTH_SOCK: FAKE_AGENT_SOCK, 91 + } 92 + 93 + export type AcpUpdate = 94 + | { type: 'chunk'; text: string } 95 + | { type: 'plan'; entries: PlanEntry[] } 96 + | { type: 'tool_call'; toolCall: ToolCall } 97 + | { type: 'tool_call_update'; id: string; status: ToolCallStatus; result?: string } 98 + 99 + type PendingRequest = { 100 + resolve: (result: unknown) => void 101 + reject: (error: Error) => void 102 + } 103 + 104 + type NotificationListener = (params: unknown) => void 105 + 106 + class AcpClient { 107 + private proc: ChildProcess | null = null 108 + private nextId = 1 109 + private pending = new Map<number, PendingRequest>() 110 + private notificationListeners = new Map<string, NotificationListener[]>() 111 + private initialized = false 112 + 113 + private start(): void { 114 + if (this.proc) return 115 + 116 + log('spawn', AGENT_BIN, 'cwd:', CWD) 117 + this.proc = spawn(AGENT_BIN, [], { 118 + cwd: CWD, 119 + env: SSH_ISOLATED_ENV, 120 + stdio: ['pipe', 'pipe', 'pipe'], 121 + }) 122 + 123 + log('pid:', this.proc.pid) 124 + 125 + const rl = readline.createInterface({ input: this.proc.stdout! }) 126 + rl.on('line', (line) => { 127 + if (!line.trim()) return 128 + log('← stdout:', line) 129 + try { 130 + this.handleMessage(JSON.parse(line)) 131 + } catch (err) { 132 + log('parse error:', err, 'raw:', line) 133 + } 134 + }) 135 + 136 + const errRl = readline.createInterface({ input: this.proc.stderr! }) 137 + errRl.on('line', (line) => { 138 + log('stderr:', line) 139 + }) 140 + 141 + this.proc.on('error', (err) => { 142 + log('proc error:', err.message) 143 + }) 144 + 145 + this.proc.on('exit', (code, signal) => { 146 + log('proc exit code:', code, 'signal:', signal) 147 + this.proc = null 148 + this.initialized = false 149 + for (const { reject } of this.pending.values()) { 150 + reject(new Error(`ACP process exited (code=${code})`)) 151 + } 152 + this.pending.clear() 153 + }) 154 + } 155 + 156 + private handleMessage(msg: Record<string, unknown>): void { 157 + if ('id' in msg && msg.id !== null && msg.id !== undefined) { 158 + const id = msg.id as number | string 159 + 160 + // Server-sent request (has both id and method) — not a response to our request 161 + if ('method' in msg) { 162 + const method = msg.method as string 163 + log('← server request:', method, 'id:', id) 164 + this.handleServerRequest(id, method, msg.params as Record<string, unknown>) 165 + return 166 + } 167 + 168 + // Response to one of our requests 169 + const pending = this.pending.get(id as number) 170 + if (!pending) { 171 + log('no pending for id', id) 172 + return 173 + } 174 + this.pending.delete(id as number) 175 + if ('error' in msg) { 176 + const errMsg = String((msg.error as Record<string, unknown>)?.message ?? msg.error) 177 + log('rpc error id', id, ':', errMsg) 178 + pending.reject(new Error(errMsg)) 179 + } else { 180 + log('rpc ok id', id, 'result:', msg.result) 181 + pending.resolve(msg.result) 182 + } 183 + } else if ('method' in msg) { 184 + const method = msg.method as string 185 + log('notification:', method, msg.params) 186 + const listeners = this.notificationListeners.get(method) ?? [] 187 + for (const listener of listeners) { 188 + listener(msg.params) 189 + } 190 + } 191 + } 192 + 193 + private handleServerRequest(id: number | string, method: string, params: Record<string, unknown>): void { 194 + if (method === 'requestPermission') { 195 + const toolCall = (params?.toolCall ?? {}) as Record<string, unknown> 196 + const toolName = String(toolCall.name ?? toolCall.toolName ?? '') 197 + const rawInput = toolCall.rawInput as Record<string, unknown> | undefined 198 + const command = String(rawInput?.command ?? '') 199 + 200 + const isDenied = 201 + toolName === 'Bash' && /^git\s+(fetch|pull|push|remote\s+update)\b/.test(command.trimStart()) 202 + 203 + log('requestPermission tool:', toolName, 'command:', command, '→', isDenied ? 'deny' : 'allow') 204 + 205 + const result = isDenied 206 + ? { outcome: { outcome: 'selected', optionId: 'reject' } } 207 + : { outcome: { outcome: 'selected', optionId: 'allow' } } 208 + 209 + const response = JSON.stringify({ jsonrpc: '2.0', id, result }) + '\n' 210 + this.proc?.stdin?.write(response) 211 + } else { 212 + log('unhandled server request:', method) 213 + // Send a generic error response so the server doesn't hang 214 + const response = JSON.stringify({ jsonrpc: '2.0', id, error: { code: -32601, message: 'Method not found' } }) + '\n' 215 + this.proc?.stdin?.write(response) 216 + } 217 + } 218 + 219 + private send(method: string, params?: unknown): Promise<unknown> { 220 + return new Promise((resolve, reject) => { 221 + if (!this.proc?.stdin) { 222 + const err = 'ACP process not running' 223 + log('send failed:', err) 224 + reject(new Error(err)) 225 + return 226 + } 227 + const id = this.nextId++ 228 + this.pending.set(id, { resolve, reject }) 229 + const msg = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n' 230 + log('→ send id', id, method, params ?? '') 231 + this.proc.stdin.write(msg) 232 + }) 233 + } 234 + 235 + private onNotification(method: string, listener: NotificationListener): () => void { 236 + const listeners = this.notificationListeners.get(method) ?? [] 237 + listeners.push(listener) 238 + this.notificationListeners.set(method, listeners) 239 + return () => { 240 + const current = this.notificationListeners.get(method) ?? [] 241 + this.notificationListeners.set(method, current.filter((l) => l !== listener)) 242 + } 243 + } 244 + 245 + async initialize(): Promise<void> { 246 + if (this.initialized) return 247 + log('initializing ACP client') 248 + this.start() 249 + await this.send('initialize', { 250 + protocolVersion: 1, 251 + clientCapabilities: {}, 252 + clientInfo: { name: 'vclaude', version: '1.0' }, 253 + }) 254 + this.initialized = true 255 + log('ACP initialized') 256 + } 257 + 258 + async newSession(workingDir: string): Promise<string> { 259 + await this.initialize() 260 + log('creating new session, cwd:', workingDir) 261 + const result = await this.send('session/new', { 262 + cwd: workingDir, 263 + mcpServers: [], 264 + _meta: { 265 + systemPrompt: { 266 + append: 'IMPORTANT: Never run git fetch, git pull, git push, or git remote update. Do not perform any git network operations. Only use local git commands (status, log, diff, add, commit, etc.).', 267 + }, 268 + claudeCode: { 269 + options: { 270 + env: SSH_ISOLATED_ENV, 271 + }, 272 + }, 273 + }, 274 + }) 275 + const sessionId = (result as { sessionId: string }).sessionId 276 + log('new session id:', sessionId) 277 + return sessionId 278 + } 279 + 280 + async loadSession(acpSessionId: string, workingDir: string): Promise<string> { 281 + await this.initialize() 282 + log('loading session:', acpSessionId, 'cwd:', workingDir) 283 + const result = await this.send('session/load', { 284 + sessionId: acpSessionId, 285 + cwd: workingDir, 286 + mcpServers: [], 287 + _meta: { 288 + systemPrompt: { 289 + append: 'IMPORTANT: Never run git fetch, git pull, git push, or git remote update. Do not perform any git network operations. Only use local git commands (status, log, diff, add, commit, etc.).', 290 + }, 291 + claudeCode: { 292 + options: { 293 + env: SSH_ISOLATED_ENV, 294 + }, 295 + }, 296 + }, 297 + }) 298 + const sessionId = (result as { sessionId: string }).sessionId 299 + log('loaded session id:', sessionId) 300 + return sessionId 301 + } 302 + 303 + async prompt( 304 + sessionId: string, 305 + text: string, 306 + onUpdate: (update: AcpUpdate) => void 307 + ): Promise<string> { 308 + await this.initialize() 309 + log('prompt session:', sessionId, 'text:', text.slice(0, 80)) 310 + 311 + return new Promise((resolve, reject) => { 312 + const unsubscribe = this.onNotification('session/update', (params) => { 313 + const p = params as Record<string, unknown> 314 + if (p.sessionId !== sessionId) return 315 + 316 + const update = p.update as Record<string, unknown> 317 + if (!update) return 318 + 319 + const kind = String(update.sessionUpdate ?? '') 320 + log('update sessionUpdate:', kind) 321 + 322 + if (kind === 'agent_message_chunk') { 323 + const content = update.content as Record<string, unknown> 324 + if (content?.type === 'text') { 325 + onUpdate({ type: 'chunk', text: String(content.text ?? '') }) 326 + } 327 + } else if (kind === 'tool_use') { 328 + const tc = update as Record<string, unknown> 329 + onUpdate({ 330 + type: 'tool_call', 331 + toolCall: { 332 + id: String(tc.id ?? ''), 333 + title: String(tc.name ?? ''), 334 + kind: String(tc.name ?? ''), 335 + status: 'in_progress', 336 + }, 337 + }) 338 + } else if (kind === 'tool_result') { 339 + onUpdate({ 340 + type: 'tool_call_update', 341 + id: String(update.toolUseId ?? ''), 342 + status: 'completed', 343 + result: update.content !== undefined ? String(update.content) : undefined, 344 + }) 345 + } 346 + // ignore: available_commands_update, usage_update, and others 347 + }) 348 + 349 + this.send('session/prompt', { 350 + sessionId, 351 + prompt: [{ type: 'text', text }], 352 + }).then((result) => { 353 + unsubscribe() 354 + const r = result as Record<string, unknown> 355 + const reason = String(r?.stopReason ?? 'end_turn') 356 + log('stop:', reason) 357 + resolve(reason) 358 + }).catch((err) => { 359 + log('prompt send error:', err.message) 360 + unsubscribe() 361 + reject(err) 362 + }) 363 + }) 364 + } 365 + 366 + dispose(): void { 367 + log('disposing ACP client') 368 + this.proc?.kill() 369 + this.proc = null 370 + this.initialized = false 371 + } 372 + } 373 + 374 + let client: AcpClient | null = null 375 + 376 + export function getAcpClient(): AcpClient { 377 + if (!client) { 378 + log('creating ACP client singleton') 379 + client = new AcpClient() 380 + } 381 + return client 382 + }
+248
src/chat.tsx
··· 1 + import { List, Detail, ActionPanel, Action, Icon, showToast, Toast, useNavigation, getSelectedText, Clipboard, environment } from '@vicinae/api' 2 + import { useState, useRef } from 'react' 3 + import * as path from 'path' 4 + import type { Session, Message, ToolCall, PlanEntry } from './types' 5 + import { saveSession } from './storage' 6 + import { getAcpClient } from './acp-client' 7 + import * as fs from 'fs' 8 + 9 + type Props = { 10 + session: Session 11 + } 12 + 13 + function uiLog(...args: unknown[]): void { 14 + const line = `[UI ${new Date().toISOString()}] ${args.join(' ')}\n` 15 + fs.appendFileSync('/tmp/vclaude.log', line) 16 + } 17 + 18 + function statusIcon(status: ToolCall['status']): string { 19 + switch (status) { 20 + case 'completed': return '✓' 21 + case 'in_progress': return '⟳' 22 + case 'cancelled': return '✗' 23 + default: return '○' 24 + } 25 + } 26 + 27 + function planIcon(status: PlanEntry['status']): string { 28 + switch (status) { 29 + case 'completed': return '[x]' 30 + case 'in_progress': return '[-]' 31 + default: return '[ ]' 32 + } 33 + } 34 + 35 + function messageMarkdown(msg: Message): string { 36 + const sections: string[] = [] 37 + 38 + if (msg.plan.length > 0) { 39 + const planLines = msg.plan.map((e) => `- ${planIcon(e.status)} ${e.content}`) 40 + sections.push(`**Plan:**\n${planLines.join('\n')}`) 41 + } 42 + 43 + for (const tc of msg.toolCalls) { 44 + sections.push(`*Tool: ${tc.title || tc.kind}* ${statusIcon(tc.status)}`) 45 + } 46 + 47 + if (msg.content) { 48 + sections.push(msg.content) 49 + } 50 + 51 + return sections.join('\n\n') || '*(empty)*' 52 + } 53 + 54 + function messageTitle(msg: Message): string { 55 + if (msg.role === 'user') return msg.content.slice(0, 80) 56 + if (msg.content) return msg.content.replace(/\n/g, ' ').slice(0, 80) 57 + if (msg.toolCalls.length > 0) return `[${msg.toolCalls.map((t) => t.title || t.kind).join(', ')}]` 58 + return '...' 59 + } 60 + 61 + export function Chat({ session: initialSession }: Props) { 62 + const [messages, setMessages] = useState<Message[]>(initialSession.messages) 63 + const [acpSessionId, setAcpSessionId] = useState(initialSession.acpSessionId) 64 + const workingDirRef = useRef(initialSession.workingDir) 65 + const [sessionTitle, setSessionTitle] = useState(initialSession.title) 66 + const [input, setInput] = useState('') 67 + const [isLoading, setIsLoading] = useState(false) 68 + const sessionIdRef = useRef(initialSession.id) 69 + const { push } = useNavigation() 70 + 71 + async function sendMessage() { 72 + const text = input.trim() 73 + if (!text || isLoading) return 74 + 75 + setInput('') 76 + setIsLoading(true) 77 + 78 + const userMessage: Message = { role: 'user', content: text, toolCalls: [], plan: [] } 79 + setMessages((prev) => { 80 + uiLog('adding user message, prev count:', prev.length) 81 + return [...prev, userMessage] 82 + }) 83 + 84 + const toast = await showToast({ style: Toast.Style.Animated, title: 'Thinking...' }) 85 + const client = getAcpClient() 86 + 87 + try { 88 + let sid: string 89 + 90 + function createWorkingDir(): string { 91 + const dir = path.join(environment.supportPath, 'sessions', sessionIdRef.current) 92 + fs.mkdirSync(dir, { recursive: true }) 93 + workingDirRef.current = dir 94 + return dir 95 + } 96 + 97 + if (acpSessionId) { 98 + try { 99 + sid = await client.loadSession(acpSessionId, workingDirRef.current) 100 + } catch (err) { 101 + const msg = err instanceof Error ? err.message : String(err) 102 + if (msg.includes('Resource not found')) { 103 + uiLog('session not found, starting new session') 104 + sid = await client.newSession(createWorkingDir()) 105 + setAcpSessionId(sid) 106 + } else { 107 + throw err 108 + } 109 + } 110 + } else { 111 + sid = await client.newSession(createWorkingDir()) 112 + setAcpSessionId(sid) 113 + } 114 + 115 + let accText = '' 116 + let accPlan: PlanEntry[] = [] 117 + let accToolCalls: ToolCall[] = [] 118 + 119 + await client.prompt(sid, text, (update) => { 120 + if (update.type === 'chunk') { 121 + accText += update.text 122 + // update streaming in-place by replacing last message if it's assistant streaming 123 + setMessages((prev) => { 124 + const last = prev[prev.length - 1] 125 + if (last?.role === 'assistant' && (last as Message & { streaming?: boolean }).streaming) { 126 + return [...prev.slice(0, -1), { role: 'assistant', content: accText, toolCalls: accToolCalls, plan: accPlan, streaming: true } as Message & { streaming: boolean }] 127 + } 128 + return [...prev, { role: 'assistant', content: accText, toolCalls: accToolCalls, plan: accPlan, streaming: true } as Message & { streaming: boolean }] 129 + }) 130 + } else if (update.type === 'plan') { 131 + accPlan = update.entries 132 + } else if (update.type === 'tool_call') { 133 + accToolCalls = [...accToolCalls, update.toolCall] 134 + } else if (update.type === 'tool_call_update') { 135 + accToolCalls = accToolCalls.map((tc) => 136 + tc.id === update.id ? { ...tc, status: update.status, result: update.result } : tc 137 + ) 138 + } 139 + }) 140 + 141 + const assistantMessage: Message = { role: 'assistant', content: accText, toolCalls: accToolCalls, plan: accPlan } 142 + 143 + setMessages((prev) => { 144 + // replace the streaming placeholder with the final message 145 + const last = prev[prev.length - 1] 146 + const base = (last as Message & { streaming?: boolean })?.streaming ? prev.slice(0, -1) : prev 147 + const next = [...base, assistantMessage] 148 + uiLog('final messages count:', next.length) 149 + 150 + // save to storage after state is settled 151 + const title = sessionTitle === 'New Session' ? text.slice(0, 60) : sessionTitle 152 + const finalSession: Session = { 153 + id: sessionIdRef.current, 154 + acpSessionId: sid, 155 + workingDir: workingDirRef.current, 156 + title, 157 + messages: next, 158 + createdAt: initialSession.createdAt, 159 + updatedAt: Date.now(), 160 + } 161 + if (sessionTitle === 'New Session') setSessionTitle(title) 162 + saveSession(finalSession).catch(() => {}) 163 + 164 + return next 165 + }) 166 + 167 + toast.style = Toast.Style.Success 168 + toast.title = 'Done' 169 + } catch (err) { 170 + const msg = err instanceof Error ? err.message : String(err) 171 + uiLog('error:', msg) 172 + toast.style = Toast.Style.Failure 173 + toast.title = 'ACP Error' 174 + toast.message = msg 175 + const errorMessage: Message = { role: 'assistant', content: `Error: ${msg}`, toolCalls: [], plan: [] } 176 + setMessages((prev) => [...prev, errorMessage]) 177 + } finally { 178 + setIsLoading(false) 179 + } 180 + } 181 + 182 + uiLog('render: messages:', messages.length, 'loading:', isLoading) 183 + 184 + return ( 185 + <List 186 + isLoading={isLoading} 187 + navigationTitle={sessionTitle} 188 + searchBarPlaceholder="Message Claude..." 189 + searchText={input} 190 + onSearchTextChange={setInput} 191 + filtering={false} 192 + isShowingDetail 193 + actions={ 194 + <ActionPanel> 195 + <Action 196 + title="Send" 197 + shortcut={{ modifiers: [], key: 'return' }} 198 + onAction={sendMessage} 199 + /> 200 + </ActionPanel> 201 + } 202 + > 203 + {messages.length === 0 ? ( 204 + <List.Item 205 + title="Start a conversation" 206 + icon="💬" 207 + detail={<List.Item.Detail markdown="Type a message below and press **Enter** to send." />} 208 + actions={ 209 + <ActionPanel> 210 + <Action title="Send" shortcut={{ modifiers: [], key: 'return' }} onAction={sendMessage} /> 211 + </ActionPanel> 212 + } 213 + /> 214 + ) : ( 215 + [...messages].reverse().map((msg, i) => ( 216 + <List.Item 217 + key={`${messages.length - 1 - i}-${msg.role}-${msg.content.slice(0, 10)}`} 218 + title={messageTitle(msg)} 219 + icon={msg.role === 'user' ? '👤' : { source: 'anthropic-logo.png' }} 220 + detail={<List.Item.Detail markdown={messageMarkdown(msg)} />} 221 + actions={ 222 + <ActionPanel> 223 + <Action icon={Icon.SpeechBubble} title="Send" shortcut={{ modifiers: [], key: 'return' }} onAction={sendMessage} /> 224 + <Action 225 + icon={Icon.AppWindow} 226 + title="View Message" 227 + shortcut={{ modifiers: ['cmd'], key: 'return' }} 228 + onAction={() => push(<Detail markdown={messageMarkdown(msg)} actions={<ActionPanel><Action.CopyToClipboard icon={Icon.CopyClipboard} title="Copy Response" content={msg.content} /><Action icon={Icon.TextCursor} title="Copy Selected" onAction={async () => { const s = await getSelectedText(); if (s) await Clipboard.copy(s) }} /></ActionPanel>} />)} 229 + /> 230 + {msg.role === 'assistant' && ( 231 + <Action.CopyToClipboard icon={Icon.CopyClipboard} title="Copy Response" content={msg.content} /> 232 + )} 233 + <Action 234 + icon={Icon.TextCursor} 235 + title="Copy Selected" 236 + onAction={async () => { 237 + const selected = await getSelectedText() 238 + if (selected) await Clipboard.copy(selected) 239 + }} 240 + /> 241 + </ActionPanel> 242 + } 243 + /> 244 + )) 245 + )} 246 + </List> 247 + ) 248 + }
+89
src/sessions.tsx
··· 1 + import { List, ActionPanel, Action, useNavigation, confirmAlert, Alert } from '@vicinae/api' 2 + import { useEffect, useState } from 'react' 3 + import type { Session } from './types' 4 + import { loadSessions, deleteSession } from './storage' 5 + import { Chat } from './chat' 6 + 7 + function formatRelativeTime(ts: number): string { 8 + const diff = Date.now() - ts 9 + const minutes = Math.floor(diff / 60_000) 10 + if (minutes < 60) return minutes <= 1 ? 'Just now' : `${minutes}m ago` 11 + const hours = Math.floor(minutes / 60) 12 + if (hours < 24) return `${hours}h ago` 13 + const days = Math.floor(hours / 24) 14 + if (days === 1) return 'Yesterday' 15 + return `${days} days ago` 16 + } 17 + 18 + function newBlankSession(): Session { 19 + return { 20 + id: crypto.randomUUID(), 21 + acpSessionId: '', 22 + workingDir: '', 23 + title: 'New Session', 24 + messages: [], 25 + createdAt: Date.now(), 26 + updatedAt: Date.now(), 27 + } 28 + } 29 + 30 + export default function Sessions() { 31 + const { push } = useNavigation() 32 + const [sessions, setSessions] = useState<Session[]>([]) 33 + const [isLoading, setIsLoading] = useState(true) 34 + 35 + useEffect(() => { 36 + loadSessions().then((s) => { 37 + setSessions(s) 38 + setIsLoading(false) 39 + }) 40 + }, []) 41 + 42 + async function handleDelete(session: Session) { 43 + const confirmed = await confirmAlert({ 44 + title: 'Delete Session', 45 + message: `Delete "${session.title}"? This cannot be undone.`, 46 + primaryAction: { title: 'Delete', style: Alert.ActionStyle.Destructive }, 47 + }) 48 + if (!confirmed) return 49 + await deleteSession(session.id) 50 + setSessions((prev) => prev.filter((s) => s.id !== session.id)) 51 + } 52 + 53 + return ( 54 + <List isLoading={isLoading} searchBarPlaceholder="Search sessions..."> 55 + <List.Item 56 + title="New Session" 57 + icon="✦" 58 + actions={ 59 + <ActionPanel> 60 + <Action 61 + title="Start New Session" 62 + onAction={() => push(<Chat session={newBlankSession()} />)} 63 + /> 64 + </ActionPanel> 65 + } 66 + /> 67 + {sessions.map((session) => ( 68 + <List.Item 69 + key={session.id} 70 + title={session.title} 71 + accessories={[{ text: formatRelativeTime(session.updatedAt) }]} 72 + actions={ 73 + <ActionPanel> 74 + <Action 75 + title="Open Session" 76 + onAction={() => push(<Chat session={session} />)} 77 + /> 78 + <Action 79 + title="Delete Session" 80 + style="destructive" 81 + onAction={() => handleDelete(session)} 82 + /> 83 + </ActionPanel> 84 + } 85 + /> 86 + ))} 87 + </List> 88 + ) 89 + }
+32
src/storage.ts
··· 1 + import { LocalStorage } from '@vicinae/api' 2 + import type { Session } from './types' 3 + 4 + const SESSIONS_KEY = 'vclaude_sessions' 5 + 6 + export async function loadSessions(): Promise<Session[]> { 7 + const raw = await LocalStorage.getItem<string>(SESSIONS_KEY) 8 + if (!raw) return [] 9 + try { 10 + const sessions: Session[] = JSON.parse(raw) 11 + return sessions.sort((a, b) => b.updatedAt - a.updatedAt) 12 + } catch { 13 + return [] 14 + } 15 + } 16 + 17 + export async function saveSession(session: Session): Promise<void> { 18 + const sessions = await loadSessions() 19 + const idx = sessions.findIndex((s) => s.id === session.id) 20 + if (idx >= 0) { 21 + sessions[idx] = session 22 + } else { 23 + sessions.push(session) 24 + } 25 + await LocalStorage.setItem(SESSIONS_KEY, JSON.stringify(sessions)) 26 + } 27 + 28 + export async function deleteSession(id: string): Promise<void> { 29 + const sessions = await loadSessions() 30 + const filtered = sessions.filter((s) => s.id !== id) 31 + await LocalStorage.setItem(SESSIONS_KEY, JSON.stringify(filtered)) 32 + }
+31
src/types.ts
··· 1 + export type ToolCallStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled' 2 + 3 + export type ToolCall = { 4 + id: string 5 + title: string 6 + kind: string 7 + status: ToolCallStatus 8 + result?: string 9 + } 10 + 11 + export type PlanEntry = { 12 + content: string 13 + status: 'pending' | 'in_progress' | 'completed' 14 + } 15 + 16 + export type Message = { 17 + role: 'user' | 'assistant' 18 + content: string 19 + toolCalls: ToolCall[] 20 + plan: PlanEntry[] 21 + } 22 + 23 + export type Session = { 24 + id: string 25 + acpSessionId: string 26 + workingDir: string 27 + title: string 28 + messages: Message[] 29 + createdAt: number 30 + updatedAt: number 31 + }
+14
tsconfig.json
··· 1 + { 2 + "include": ["src/**/*"], 3 + "compilerOptions": { 4 + "module": "commonjs", 5 + "target": "es2020", 6 + "strict": true, 7 + "isolatedModules": true, 8 + "esModuleInterop": true, 9 + "skipLibCheck": true, 10 + "forceConsistentCasingInFileNames": true, 11 + "resolveJsonModule": true, 12 + "jsx": "react-jsx" 13 + } 14 + }
+26
vicinae-env.d.ts
··· 1 + /// <reference types="@vicinae/api"> 2 + 3 + /* 4 + * This file is auto-generated from the extension's manifest. 5 + * Do not modify manually. Instead, update the `package.json` file. 6 + */ 7 + 8 + type ExtensionPreferences = { 9 + 10 + } 11 + 12 + declare type Preferences = ExtensionPreferences 13 + 14 + declare namespace Preferences { 15 + /** Command: Claude Code Sessions */ 16 + export type Sessions = ExtensionPreferences & { 17 + 18 + } 19 + } 20 + 21 + declare namespace Arguments { 22 + /** Command: Claude Code Sessions */ 23 + export type Sessions = { 24 + 25 + } 26 + }