@vybestack/llxprt-code 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/package.json +3 -3
- package/dist/src/auth/anthropic-oauth-provider.d.ts +1 -0
- package/dist/src/auth/anthropic-oauth-provider.js +53 -45
- package/dist/src/auth/anthropic-oauth-provider.js.map +1 -1
- package/dist/src/auth/anthropic-oauth-provider.local-flow.spec.d.ts +1 -0
- package/dist/src/auth/anthropic-oauth-provider.local-flow.spec.js +89 -0
- package/dist/src/auth/anthropic-oauth-provider.local-flow.spec.js.map +1 -0
- package/dist/src/auth/local-oauth-callback.d.ts +14 -0
- package/dist/src/auth/local-oauth-callback.js +413 -0
- package/dist/src/auth/local-oauth-callback.js.map +1 -0
- package/dist/src/auth/local-oauth-callback.spec.d.ts +1 -0
- package/dist/src/auth/local-oauth-callback.spec.js +50 -0
- package/dist/src/auth/local-oauth-callback.spec.js.map +1 -0
- package/dist/src/config/config.js +16 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.loadMemory.test.js +105 -0
- package/dist/src/config/config.loadMemory.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/providers/aliases/cerebras-code.config +7 -0
- package/dist/src/providers/aliases/chutes-ai.config +7 -0
- package/dist/src/providers/aliases/fireworks.config +7 -0
- package/dist/src/providers/aliases/llama-cpp.config +7 -0
- package/dist/src/providers/aliases/lm-studio.config +7 -0
- package/dist/src/providers/aliases/openrouter.config +7 -0
- package/dist/src/providers/aliases/synthetic.config +7 -0
- package/dist/src/providers/aliases/xai.config +7 -0
- package/dist/src/providers/providerAliases.d.ts +25 -0
- package/dist/src/providers/providerAliases.js +96 -0
- package/dist/src/providers/providerAliases.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.d.ts +1 -0
- package/dist/src/providers/providerManagerInstance.js +133 -39
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/ui/App.js +2 -2
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/App.quittingMessages.test.d.ts +1 -0
- package/dist/src/ui/App.quittingMessages.test.js +14 -0
- package/dist/src/ui/App.quittingMessages.test.js.map +1 -0
- package/dist/src/ui/commands/providerCommand.js +120 -3
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/providerCommand.test.js +98 -0
- package/dist/src/ui/commands/providerCommand.test.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.js +60 -3
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.paste.spec.d.ts +6 -0
- package/dist/src/ui/components/{InputPrompt.paste.test.js → InputPrompt.paste.spec.js} +89 -76
- package/dist/src/ui/components/InputPrompt.paste.spec.js.map +1 -0
- package/dist/src/ui/contexts/KeypressContext.js +69 -61
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +56 -0
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +13 -5
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/ui/components/InputPrompt.paste.test.js.map +0 -1
- /package/dist/src/{ui/components/InputPrompt.paste.test.d.ts → config/config.loadMemory.test.d.ts} +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
const CLAUDE_CAT_BASE64 = 'iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1' +
|
|
3
|
+
'MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfpChwBMA/j21E5AAA0l0lE' +
|
|
4
|
+
'QVR42u29aXhcyXUYeqruvb13o1d0A41Go7EDJACC+84hZxU1i0ajPU+KnacoepYtO7JlK078Jc579nMc' +
|
|
5
|
+
'K7HkRN+zoyiStb2nGUmzS0POwmW4byCx740dDfS+3rUqP6oBbiAHRIMzoxeejx8/svt23apz6pw6ewE8' +
|
|
6
|
+
'gAfwAB7AA3gAD+D/t4AQwhxCCC39FzBGH/Sk/tcAhBG6AdcIIY7HS//5oCf34YD7iAaMESEUANzV9tpN' +
|
|
7
|
+
'/spGj9luxBzOp8S+d8f63x3/oNf+oYD7QgCEEKUUADxBx45nNoY6KnVGQZFUolEA4HisNwlnftl98qdX' +
|
|
8
|
+
'lp9c8/QRlDbCBw3cuo+IcBEjOz/W9vi/2OUJOKS8nI0XVFmjhFJKC2lJzMu1Hf7Z4WgykkEYwZoQeOMP' +
|
|
9
|
+
'1zzIGl6KAK3jG9eZABgjSiiv45766v5NjzcVMpIsKpjjOB7rDALHI4wx5rCqaAazThaV8a5ZjNAadjBj' +
|
|
10
|
+
'HZ1RsHksYlYCCug+H+wIIYQRJRQAMIfZP0oHfj2niBEhlNfxz33jkL/Rk0vkAQBjhDGiGC8JCsrxmBc4' +
|
|
11
|
+
'VdHK3BYAWAv2MaKEVtS7D39lj8lmiITjF17uHb86u/zVOi6KAeYQ0ShQqGrxtj/c4K1xjl6ePvGTy6WP' +
|
|
12
|
+
'vG4cwFYu6PnnvnGoot5dyEiYwxyHbmdVhECRNZ2BT0dzA6fDy+rpqt8EQEEw8B//40M2tyWbKPjqXE07' +
|
|
13
|
+
'awxmXfjaHFDAeC0sdRdg2oTRqj/0W9sPfn6Lt9aFENS0Vy5OxOOz6RJlEV77T2/GKdt3z3ztgL+pPJcs' +
|
|
14
|
+
'UAoIAaVw++QIoaqs8gKXWsiy397bjBECgMbtwfIa59iV6e9//eUTP76syurWJ1s//seHBANPCMXc+ogj' +
|
|
15
|
+
'hBBCiBBat7nqc3/+ROdjjdlE/qVvHj/y384ihKpavFCyGrNOIgghoPTh394ebKtIRjKCnsc8vtM2RAgZ' +
|
|
16
|
+
'zHpC6HjXDMA97x72fGWDGyHoPx0mGj3/Su/s8OJjX9pVvzXw7B8dfOVbJwoZaVkJXvualqTZtqc27PlE' +
|
|
17
|
+
'B6/neo6NHvvRpVyyUOaxyAWlrHyNIvRGWAcOwByihDbtDHY83JCO5hBCmMN3wasiqQaLbnZokUntexXZ' +
|
|
18
|
+
'7HlXlT2fFhcnEgDA8Xh6YOGFv3xzeiASbKv41L951OI0lcgHy9h/9Is7D3xus6Zq7/zjxdf+y7u5ZAEA' +
|
|
19
|
+
'ZFGRCoreKAAALU0ZKpUACCGiUaNFv++znbKoqLImGIQ7Pw2qrHI8BgqnXrjK1nmPrwMAMNkMdq8lHc1l' +
|
|
20
|
+
'E3kA0FSCOZyO5n7xH96eGVgoDzmf/Oo+Qc8Tja7N58F0Oczhp/5gf+djTelo7pVvnbz0ej9CqDjgsoAt' +
|
|
21
|
+
'GUrmAAQAsPuTHTaXWczKZruB13EAQMjK5hHC2FxmPP9K78zAAl6LxoIAQGcUdEZBysmqrLFPiUYwh8Wc' +
|
|
22
|
+
'/Iu/fnumf6G61fvs1w8K+pvPA1SU6QzuJLwxhwihepPwyX/9SMvumoVw/IW/fDN8bRZzmFLKVrWOZ3xJ' +
|
|
23
|
+
'BGB86ql2tO4NiVlZLiiphWx6MYsQMln1HI+Z6btMJ00hRotuomfuzM+vAQBZiwYKAGC06gWDkEuJALCs' +
|
|
24
|
+
'RBGNYA4xGkz3L4Q6Kp/944M38QEFegMwLDLtHnNFnxXGiGhUbxSe/fqhYFvFRM/8z/7iaHwujTlMNLI8' +
|
|
25
|
+
'A6NFL+j5deGAdTiENz3WaLYbz77Yc/zHlzBGCKMyjyXYXtHxcKOjwiZmJUooIFBlTWcQpLxy9LvnoDSF' +
|
|
26
|
+
'nddxHIdUWS0iZGkYhmsxJ//yb955+l8eqG71ffxPDr3ytyfyaZHjMcLIaNEjhCgAABVzsippjBLL82B7' +
|
|
27
|
+
'/9mvH6re6Jvonvvlf3xHLig3YH9JCdZznMDJBRkAEKBSjoG1EwAhRAm1uc31WwOpheyl1/spoRqhABCb' +
|
|
28
|
+
'ScVmUr3HRjcfbul8rElv1hUyElDQm3Vvfu9cajF705Lu6aUAFMDiMCGMV9QAmeZTyEhHv3v2ma89VNng' +
|
|
29
|
+
'/sy/fSwxnynzWHg9pzcKmkrYMGJOViS1kJaSC5nFyUR0MrkQjlMKz3ztoeBGX/g69tHtUzWVGQUdl0+L' +
|
|
30
|
+
't+yA95cAGKgGjTuq7V7r+Zd7M7HcMloZX0sF5czPrw2fm9z/TzY7K2xWp2m8a+baW8MIobVhfxkwxwTP' +
|
|
31
|
+
'betGABT0JmHPpzbVbvILBkHMynqzvnqjWczK+VRBEVWL0wSUUoqsLjMlxOW3128NcAJWJXV+LCaLaqDF' +
|
|
32
|
+
'O9EzX8Q+Rtel6E07wIh5zDSi0vBfAgHYzGo7q+SCMnRuAgCWj11KKdUoQoA5HJ1OHv/RpU/92aOKor37' +
|
|
33
|
+
's67riygB7iR8Gb5a99Xu+/Sm+bE4k1EYo+hk9qX/dDybyO/91KatT7aKWYkTODkv//yv35ZySpnH7Kl2' +
|
|
34
|
+
'+JvLazf5DRb99EDkF3/9dhH7dxCSVrcZAJKRbEnLYHNe28/YDrT7rL5a1+Jkcm44WtQt8PXIF6VFnb11' +
|
|
35
|
+
'f6293Dp0dmJxIrEmzWe1wPA1dH7yB3/y2uJEXG8UOIEzWg2nnr+aTeStTlPr/lpFUgFAp+fPv9IbnUxm' +
|
|
36
|
+
'YrnpgYUrRwZf/fbJsy92Tw8uvPy3J4pyf6V5Mtq7/WWKpKYiGShZI1ojBzAtuLLBY7Ibu4+NqIoGAPQG' +
|
|
37
|
+
'bsUYUQBCqGDg6zZXFbJSz7HR0qe79PaiVnMbegBzKJcoWBymqhavXFCMVsOVNwbC12YBoKa90uIw5pKi' +
|
|
38
|
+
'zsDH59JdR4dgyRBhrpTzL/eef7mXfXgnIUkp5XjsqrLnEoVEJLPyNN4HArCX+hs9lND4bNpZWVZR70YI' +
|
|
39
|
+
'8mlxcTKZieWWt4+/sdwdsE/2zM8OL8K9270rvreQFolGMbcC+7Lx936yA2GEOZxLFs691MO+qttapSkE' +
|
|
40
|
+
'AHgdf/WtYUpo0ce5NCzbVUy5WPHtzAdu81jKyi3zo7F8SoQbBO/7SwBCAcDhsxUy0rYnW/d/bjOv4xAA' +
|
|
41
|
+
'IVTMSulobuzyTPfxkVyiUF7j0On5yd55WHbqlgz5jKhIitVtvgVZTLWt3uCravGKWdlkM5x/+UohIwGA' +
|
|
42
|
+
'zW321boVSeUFLpfMD54Ow227gWHyLghlFPKGnKYyQyQchxvCru8vARAABV7Hme0GRVQAAVFJQVSYaOB4' +
|
|
43
|
+
'7K6ye2tdmx5ruvBKrztgV1XCnDbrIIAoAEAuUZDyirnMIBh4uaAsn+oIAQWobPRgDvMCTsynr7wxwH5n' +
|
|
44
|
+
'sOh5HafKqtGq7z42UsiuxVvHng62VaiyNnZ5el0WtJZDGC1Zg3qzDiHE8RylFHOYWWGUgiKrhbTI67g9' +
|
|
45
|
+
'n+wItHjzKTG1mIWSHYew5Atq2hW0ecyjl6flgnKjO54SAABPtUOVVZ1Rd/7lXk0lLA/DYNExn4QiaT3H' +
|
|
46
|
+
'RtYyGQQs4FHV4lUktahwfyAEKM4HIwCE8A2ZJtfRhDCHiUpkSeUEjmiEndIlox9YxK3tYEM2Xrj86wGA' +
|
|
47
|
+
'mzchAgDIp8Uyr3X4/GTfyTFYClSwMJzZbgxfm43PpteSDEABIaRI6uXX+3kdt/9zmzkeE0JLJMLa7YAl' +
|
|
48
|
+
'r1TRDmf+leXoCr2OkKIXrHT8Y4QIpQ3bA96Qs+vIYGohe4s/g+H09AtXI2OxwXMTbAJMzoSvzQ1fmDTb' +
|
|
49
|
+
'TW/9j/MlLJkCgitHBr21rs7Hmjofb774Wh+b1QdAAFREK6KUcDzm9QKTqgwLGGNAQDTC/C3rkjnChgh1' +
|
|
50
|
+
'VFJKhy9Owe0mHQVAUMhIPcdHAW7wGCOghL7yrZNLM197Jgv77bkXuxu2BToeaex+Z0TKy6WYlmsngKYQ' +
|
|
51
|
+
'5ogXDEI+VYj0zM8MLSQjWWZ/Gq368qDT7rWWBx1mu1HQ8wAl2cBMVdebhMoGT2ohOzcShRXlOAVARV65' +
|
|
52
|
+
'/u0N7vsSM5EooQijxHxm+MLUpkcbQx2VA2fCpTDBWgjAFiDmJDEn6U3CO/94YfDshFxQbnls8MwEADz5' +
|
|
53
|
+
'e/s27K+1e62LE4l7wz9z3wPAsnquEZvbYnWZp/sjTAeHYqJOEfPM4Qx0BUf38gel8yJbxcjFqY5HGkKd' +
|
|
54
|
+
'/oEz4VJGXOshjEBTSS4p6ozC3EiU2e7Mq87+YIw4gQOA6HQS89gdsBfn/p4DL3vnKVBCCaFEo5RQpnUY' +
|
|
55
|
+
'LDp+yQ3JMsCKzxBKl/Y8e/u6nDorAqNgZDyWieUr6lyCgaclHMVrFEGM6RJz6YbtgfKgIzqVBEpvVKsp' +
|
|
56
|
+
'AALCJqoppKLeDXc1gxFiDgBKl3avzig4KmwOn9Xhs5rKjKYyg8lmMFj0hYxU2ej57L97HBAqpMV8Wsyl' +
|
|
57
|
+
'xEw0l4nl4rPp1GJ2eQSEEMJAyTqnLrLhMrF8fDbtq3OVeSzRqeSaJVtJAZlIOI4AeWtdfbdl2jLXHAUa' +
|
|
58
|
+
'vjY3N7IYaPWWBx0LE4nb4zAsPkgIZa4kT9Dhb/QEWn3lNQ5zmZHTcRyPOR5TAlJe1lSiqcRg1plsBkop' +
|
|
59
|
+
'0Siv45iCTwnIBSUxn46Mx2eHF2cGF9KLOaoBFNMG1kH4XJ8zRpTQTCxXvdFndZmjU8kbv4J78bis1RVB' +
|
|
60
|
+
'AQDmR2P5tOhvKr8xwMJ8okQjDKFWpymbKFTUu9sfbnzze+fQjVlMqOhAphTMZcbazf7mXTW+ereg5zVF' +
|
|
61
|
+
'kwuKlJe1NJkfi/WfGk/MphVZ5QWeUlrZ6Kne4Ktpr6AUNEWT8grLzNA04qywhToqNZWko7mZwYXxrpmR' +
|
|
62
|
+
'S9PswGAJW+tCBnYMZJMFjsM6Aw8ANxiD9zZ+aYISwef+/AlvyPXjP/vVQjiOOQRQ9CNaHKbGHdW1nX5v' +
|
|
63
|
+
'yAUINIXwOu7/+/dHFieLTLDMClaXufOxxuY9oTKPRZW1XKqgyRriECWUFzjMYU0j0alk+Ors4NkJFgNh' +
|
|
64
|
+
'4KywdT7R3LAtYLDoWeAzFc0NnA7nU2LDtoC/udxebsUcis2kBs9M9Bwfjc+mYD28N8uDHPz81s4nmlIL' +
|
|
65
|
+
'OU3VGMeLOUmVtcne+bO/7F7lUGtPTWQbyuo01W8NpKO56f4I2192r3XL4ZaDX9javLvGbDcSQohKVEUz' +
|
|
66
|
+
'WPQ2t3ngdBgBYsmtmMPbnmp9/Es7G3YEiUrmR2O5VEHKK4KeN9uNZpuR0xWn5/BZ67cGWveF9EZhcTKp' +
|
|
67
|
+
'yhrmcD4tjnfNDJwOCwahstHD8ZzRaqisd0fC8ZM/vXLtreGFcFyRVHfA3rAt0Lij2mTVs0+WFae1bzyE' +
|
|
68
|
+
'KIXaTn9FnXt+NJqKZAtpKZvMy3mFpd6Er82tdqjSJkHdVfbP/Z9PZOP57/3hy3qTbsczG1v3hcxlRjEv' +
|
|
69
|
+
'a4pWjM+g4klotOrf+cHFrqODAOCrdT3829v9zeViVh44PX7lyGB8JoV5DBQEPW/zmCvq3YEWryfosLkt' +
|
|
70
|
+
'qqLJeRnz2GQzxGZSx350KXx1lkXcNJUAQKDFe/ALW52VNimvWBymid65V791kilLZeWW9kMNGw/UlXkt' +
|
|
71
|
+
'ixPJEz+9PHx+EkrLCmBrf+ZrDzVsD/zjN15bCMfXjMaSknMRQvm06K11VTV79Wbdjo9tbN5do8qaXFAQ' +
|
|
72
|
+
'XI+OEY0IeiGfLGCEQp2VM0OLVc3lT3/tgMNnm+iZ+/X/c7rr6FA+JVJCiUqIRhRJzSYK86OxwbMTfSfH' +
|
|
73
|
+
'YrMpi8PkqLBhhPIp0Wg1bNhfpzMKE91zjI0AQWox23N81O61VtS7M7G8o8K2YV/tdH8klyxIOXmyZ37o' +
|
|
74
|
+
'3ATHc9UbvEtpvLNrT+MtJkbwO57dSDR65hfXNJUgjDgOs92G0D2k65ZGAIyAQi5ZaNpV4/Lb9SadtIT6' +
|
|
75
|
+
'ZdYiGjFa9dlE4ed/9VY+IzZsqw5u8DVsq1ZE9fwrvUf+25l0NIcxKrqSEaNrUZcHQKqiRSeTvcdHI2Mx' +
|
|
76
|
+
'R6XN5S+T8ooqq8G2yop61/CFKU0lLBJKNDpycQpzuLbTX0iJOqPQuD040TOXT4m8wBWy0ujl6YWJhL/R' +
|
|
77
|
+
'U7+tujzoGLsyoyraGmjAVu0NOTc/0SwXFEVUVFUTMxLRKKUULQmo94MAzEGYjua8IZfLXyZmJV5fHJAF' +
|
|
78
|
+
'hBFGRpshfHX2xW8eyyYKcyNRopG6LQGi0Ymeube/f4FSYJmKt0oDet2NgzlEKSQjmZ5joxzPBVq9CKCQ' +
|
|
79
|
+
'lcprnJWNnsGzE0QjTPkCBFO9EYRQqNMvZiW9SVfbWTVwalwWFcxhhCA+mx69NO2pdtR1+gMt3pELU+xI' +
|
|
80
|
+
'uCcHCaNZ+6H66g0Vcl5p2hnc8pGW5l015jJjLlXIp6V7omip9QFs9vHZ1Ib9dQgjolKexwCAOaw36TRF' +
|
|
81
|
+
'u/ha/9HvnlUklaX2TQ8sFDJisK3CE3D4m8oTs+lMLH/3GbNvGRkme+fnR2OhDr/BrMunJU/A7q1xDpwO' +
|
|
82
|
+
'M1Kx3TfVF9EbhGB7RT4tWRzG8hpn/6lx5g/EHBaz0sCZsLfWFeqodPnLBs6E782ORUAJCHr+0D/dpjcJ' +
|
|
83
|
+
'r/7dyXd/1pWYy5jtxqZdNVs+0lK90acqWnwmtUoylFygQQFjlEuKvMDVdvoLGUmRVcxzYlbqOzn2xt+f' +
|
|
84
|
+
'Gb00BcsnHgKE0fxobLo/Uh501HRUtOwJlQcdhND0Qvbu2iFlXjYOJ+czo5en67dVm2z6fFry1bn0Jl34' +
|
|
85
|
+
'2iyLBbFTZ6J7rjzkKg868mnRW+MUc/L8aJTpjuzcHjo34Qk6NzxUB4ROdM+tXhCxbdR+qL7tYP1418y5' +
|
|
86
|
+
'F3sUUY2MxfreHe9+ZyQxl/HWunY+21ZR7+49Mfa+EGDJBJnqj/gbPRX1ntErMy/+zTtXjw6NXZlm2TU3' +
|
|
87
|
+
'lWlQwBxKR3O9x0eT8xmbx1K90bf1cIumktUggoXeChlp/Mp0/bZqo0VXyMrBDb74bDo6lWTmGGPKqd75' +
|
|
88
|
+
'pl1BvVFQJDXQ4h06PylmZRZDxhhpKhm5MEUJTHTPJSOZVWqDzN60e62Pf2kX5rG5zCDm5IXxOPtKLiiR' +
|
|
89
|
+
'8Xj3OyMT3fPRySQzO94PAsCSIAp3z9Vu9gdavYW0ONUfKcbFyAqOScYQCxOJ7mMjk72R6HRy5MJUNlFY' +
|
|
90
|
+
'DSKKNMhKk71zLXtCmMeaSvxN5f2nxhVRZQoi5rAsKrmU2LwrKOcVk81Ab9jpjFE0lYSvzSYjmVU6yRn2' +
|
|
91
|
+
'MY+f+cOHyoPOvpNj2XjhwOc2W13m8a4ZFvtEAJRCejG7SuyvGwHYvpYL6sxApHF7sGV3SG/WjXfNMFzc' +
|
|
92
|
+
'ur4lJLMkrXQ0N9UXySYKq8+4p5RiHueTYjqabd4dkvOyxWky2vSjl6aLblRKEUbRqWR5jdMTdMgFxVlZ' +
|
|
93
|
+
'NnA6LBeU615SBMx0Xz32dUbhqa/uD22qnBlceOmbxwbPTiiStu3J1trNVZPdc/m0hDBmr169JrpuRXqU' +
|
|
94
|
+
'JUUlxbEr01Ut3qadQW/IOTu8KGYlAMDcDYrmcpSKRUgw4jh8Xe1Z5esIxRyKTqUsTlNVi7eQFt1VjvEr' +
|
|
95
|
+
'M/mUyFDMql+lgtKyOySLqslqmB1aTMzdVFO3mjcue5Cc/rJn/uWBmk2Vi+HEi988JuUVhNFUX2S6P7Lx' +
|
|
96
|
+
'QF3HI41zw9HUQrboFn2f1NCVaJBPSyMXp20ec01HZdPOGl7gFicTqqyxsBRQ0BkFnUFYrq1YQQddLSAA' +
|
|
97
|
+
'mB5YaNgW0Jt0goE3WvXD5yeXmAAAQXI+E2jxlpVbMIcLaTF8bW5VZclLhghd2hZtB+s/8uXdnmr7VF/k' +
|
|
98
|
+
'pW8ey8Tzy1U0yUim/1Q41FG542NtkXCcRfxXv4Z1LtSmFDiBk3Iyr+NqO/y8wNVvq67fGrC5zVJeycbz' +
|
|
99
|
+
'ALDr4+0bDtQNnZ0oThTBpkcbYzMpopF7Vsk5rMqappLGndViVra6zUNnJ6R8Uc4wzVVnFOo2V6myxvG4' +
|
|
100
|
+
'59joavls6aio21z1yD/bseVwCy9wPcdGX/27k2JWZlU0sHQgSXm5+52Rqubypp3BrqND9+RwXWcCIARE' +
|
|
101
|
+
'o6Yyw0d+Zw+v40789Eomlgu0eGvaKzc92sgJeKJ7jtdxrXtr54ajrMLL6jLteHpjz/HR5ZgGx6+2Dp09' +
|
|
102
|
+
'vziRqGmrMDuMBrM+n5FmhxaL2hQqskLLnhomwYfOTd50DKywAAAAQc/76lwb9tft/2zntidbnf6yueHo' +
|
|
103
|
+
'm987f+HVPqLR21MxGDcMnp0YOjdZjNGvGtazUh6Yvq/R9kMN7oC959ho15FBALj25nD91kBlg2dxMgkA' +
|
|
104
|
+
'Y1dmdjyzccvhltf/67sAYHObFVllqLR7rc9949DpF671nxpfpd+YHY9D5yf3121WZTXUXnnhld7i9mTV' +
|
|
105
|
+
'ItPJdDRndZkRQgazkIndZfbF8oJP/OkjnoDDYNEpkjo/Gut+Z6T3xChz+KwoMAmhCCFV1jKx3L0mHqwr' +
|
|
106
|
+
'ARAQjQp6vmlXUMopLP0Y83h+LDY/FvPVufyN5ezBt75/4WN/9JC31hUZixnM+uR8BgAwRk/9/n6i0bEr' +
|
|
107
|
+
'M7Dq6DlDx9C5iS2HW3QG3l5htThM2USe8RPDS2wmZfdZNYWwMPV74Agho9WgSMrVt4ZGLk7NDCwwct59' +
|
|
108
|
+
'Q7CUoTW0blmfSvniWAgBQGhTpbfGOdU3P90fYWmjLI05nxbbDtXv+3QnACyE44NnwpsfbwYAU5mBhfQe' +
|
|
109
|
+
'/mc7PEHHL/76bSkvr940ZWpfJpaf7l/geM5o0fvqXLCUxMj+TkYyGOP33pkUEEJSTo7PpHgdf+6lnqm+' +
|
|
110
|
+
'CKEUY8SS8t7z52sIt60nAYqJU5v8mMODZycAiq3JiEYQQunF3Pe//orRqv8X//U5i8N4/MeXazf7Xf4y' +
|
|
111
|
+
'TdE4gdv8RPPOZzce//Gl1EKW13H0XloYsAcnumeZ9uKqKrv+KQAAJObSlJ0J7zUo+z4+lzZY9L6QC1j6' +
|
|
112
|
+
'ASmxGPtusH4iCAElVGcUqprL09Ecq4mgS1UOFCjmMCXkyHfPbjhQ99Tv749OJ4HCE1/eTTRS5rXqjcKp' +
|
|
113
|
+
'569eer0fAK5rqKuTp2zbTfZGxKxssundVfblD4v1BBmJ0mKR6nuuAgBSkQzmkNlhvF9Yvx8EYDLXW+N0' +
|
|
114
|
+
'VNhGL01nYvmbMjUoLEfte4+Pjl+Z2feZTgrUUWEDAEpoNpEfvzJTXuN0V9ldVWVmu/HS6/2Lk4nVpHsw' +
|
|
115
|
+
'WZ+J5eZHog3bq002AyydDYyCmMMIkKpoYk6+TpaVxwIAyKdFoGB1mn6zCAAUwFfnEvT83HAUlsooGTh8' +
|
|
116
|
+
'Vr1JpzMKgoHHHE7Mpd/+wYWKerfZYdQUgjnECdyu59oneublgrIQjifm0ukoy2hfFfOzdy1OJhp3Bm/D' +
|
|
117
|
+
'J6iypjcJifl0Jpq7+5jsi3xa1FRicZrg3jSaD5QAbFGeoENTSSQcg5sNfSmvqLLGCZxRx1GNEpVgDgl6' +
|
|
118
|
+
'nkVjVEWzucynftbVfypssukLS9Gle337zOCioOcLWQmWc0ApBYCFcHx2eLEYPrt7KJgCABTSkiKpjJPu' +
|
|
119
|
+
'NwXWjwCEYg65/PZ8qhCbTt0ydRYfz8Tz7L/lNc62gw0jF6catgfkguqqKhs8OzEzsNCwLeCosLmqyirq' +
|
|
120
|
+
'3cd+eGnk4tQqQ+fsmYmeuRf+77fmR6PLuGQOiXxa/OGfvn7jk3cHWVQUuUiA+90RcH0IwLabqcxoc5vT' +
|
|
121
|
+
'i7lsonD71JdjMns+0eGpdrz1P86X1zhjsylvjRPzuLLR46tzD5wJs4ftXiuT1/fqJmIVyzc5Vpc9gKs4' +
|
|
122
|
+
'0tmcC1mpkJGMNoNg4BVRLb2w+S6wTmooAgCwOk0Giy4dyzG986bvEaKE1m8NfPJPH1Ek9cVvHrO6zXav' +
|
|
123
|
+
'dezydN+p8Ve/fTKfEufHYmXlFr1JAIBkJCNmpTUkzbC03Ft3Lb3h71ue527STTGPAYAXOF7gMEYYr6ea' +
|
|
124
|
+
'vvKE12UUtgJWB5BezMEKWjwFAJ2BP/3CtfMv9/I6rn5r4PKv+90Bh73cuhCOZ2I5lpHYvDtksOgBrbGY' +
|
|
125
|
+
'gJB7OzyKqQzoelmVzig89sWdHI95PW+06mGpJu4+wXpS2OIwIoyKLSxuBla91Pfu+MzgAsfjR7+4s/ud' +
|
|
126
|
+
'EUrB5jFLeRkA3v1Z10d/b69UUK6+OVQedHA8d39PPwQAoDMK+z+72R2wMyOBaCTQ4v3cv3/C31yeT4u8' +
|
|
127
|
+
'gO93K0xYXxHE9ksxffO2mVNaZPDOx5tHLk4l5tIA4KywFdIiAESnkgOnwoe+sA0AJnvntdKK+tB71Qcs' +
|
|
128
|
+
'df6rfvi3t7PU+fIa56F/uu3ZPz5odZqkvIw5jDlssOhWXMs6wno645jde5eVE5UghEYuTrGGuZRQnUFI' +
|
|
129
|
+
'x/LsV2df7PZUO6DkKiJYtsLuHONc8ppUJubT7ir74a/sre308zpOzEpGm4ESKGQlh9darKy6n3DfD5lb' +
|
|
130
|
+
'V05pMpJZrnDvPjaSS+Zh2bM/mYCSNT+Ox098eTdLXl9ZhiyVm3lDLikvN+8JNWwLEI0QjehNuuHzk//v' +
|
|
131
|
+
'n78RnUwIBl5nEOA+93m/7xReYfk3bHBWa7fiV2se2eaxtB+qtzpNrI/rnR7zN3uZHS7oeXYATPVFL/96' +
|
|
132
|
+
'YKJ7DgCkvIwwMpUZAH5zRBBaHTvdiOJbMF6y1UMBQMxKyUjG5jbrDIIsKrdrU+yD+i1Vgo4fvzIxNxrL' +
|
|
133
|
+
'xvOzw4uskSzHY00lrCFd0R10P9WBdSIABQAQcwosHcWrnPR625kIYRCzcj4lOSqsRpteFpVberqxciij' +
|
|
134
|
+
'VR9sqxBz8rEfXUpHc0tfXff7JyMZTSV2n3XVS1kjrOcZkI3nKaU6k1D6UPcErJ0n5opFk5jHCCNexxWd' +
|
|
135
|
+
'OTcLEIQxALTurXVWlk10z6WjOY7HS+YbpYQyJSIdzckFxVlhW8dG6SvC+nAAm2AuWVBlzeY2w3r05bgT' +
|
|
136
|
+
'sFZQS2+9yc+vNwn126o37KvldRylwN+mwyAELDrf/nCDKqnd74wAs92WUMwizAihPZ/okPJyWbnVHbAv' +
|
|
137
|
+
'hOP3qSk7rK8IyibyYlYu81jgfvqwbgkN8gJnK7c4fFZ/Y3nd1ipnhS2XLGRieV7gLHYj3GxQI4ypRjof' +
|
|
138
|
+
'byqvcQyfnwpfmwVUDCcgDIRQohGjRf/kV/dV1LtTi1l3wF7VUr4Qjt9LycW9wTpxAKUAkE0UMrGcxWHS' +
|
|
139
|
+
'mwQpr9wPH5ag57c/vcHiNCGEDGYdJ3AWp9FcZtSbBACkSGo+LSmSttQc9CZgu9tVVbblcEshI517qRsA' +
|
|
140
|
+
'MMZEIxQoC12EOiof+vzWMo9FzMlGm0GVtZq2ysu/GqAldXm8/wRgQDSST0t2n9VcZpTyCsZMeq4PMzAZ' +
|
|
141
|
+
'rTcJ25/eoDfpWM0wpUBUommEFaIijDieE/ScpnL0ZqcQa//JCdxj/3yXyWa4+FrfzOAimzPHY7vX6qtz' +
|
|
142
|
+
'b3yorqLerSpaPiOay4xdRwYDrd5Aq9flL4vNpEo3D+87AWCphQqTEjdVDqNbI7L3WtDMBEU2Ufjpv31j' +
|
|
143
|
+
'+9MbfHVuo1XP8QgEbtlbRjSqaSQdy6mSCktOEbqc2MzhZ752wFfrlAuKr9a19aOtdq/FbDfa3Gabx6Iz' +
|
|
144
|
+
'CJqqSTmZaMTqMI1emX7nhxcPfmGrv7m8aVfN6Reu3hjg+/ASgOHU5jEbLDqEUSEtSXm5kClW7dyYWlP0' +
|
|
145
|
+
'FiwlM8OSFkjvmnuDEMyPxV7+2xMWh9Ebcjl8Vk7HsZZdYlZOLWQysXxyIfPk7+2jhObTxdAY0YjFaTr8' +
|
|
146
|
+
'O3tq2isWwglN1Xx1bl+dmw2qqURTCPMhYg5ZnKbw1dnX/u5dAOg/Nd5+qKF5d82l1/vuk1BdrwsciteK' +
|
|
147
|
+
'mO1GVdY+8uXdBoteU4mmaoqkRsbiY1emx67MsP55TKOoaa9QJJXJAcwhoLCa7I+id4FCNlHIJqbv9JjV' +
|
|
148
|
+
'ZZZFhTVwIRqp3xY48LnNLn9ZJJz4xX94y+W3P/v1g5lYjtfzLF8Yc0ivFzieU2W168jgWz+4ABQwh+dH' +
|
|
149
|
+
'Y+Grs817QhsO1F3+1QA7MD6MBGDGjs1lNtuNckEhhEgFBQAwRnqTrm5zVcO2QCae7zo6dPHVPtZ57fEv' +
|
|
150
|
+
'7bK4zBde7j33Ug/zSDdsr27aGfzVd06x0t870oBcZ5cbOtUwfR8RjVidJovTmInlM7FcedCx/ZmNjTuq' +
|
|
151
|
+
'WarSG39/RszJmVh+sncu0OpLLWaNFj3msSKp8dn0RM/cwOkJVluxLPGvvj1ct7Wq4+HG3uOjUl5Zr2sD' +
|
|
152
|
+
'lmF9knNZHnL91kDDtmpKqLnMyOt5jsOUUE0liqyqsqrT87Wb/KFNlTMDC7lkITqVrG71Nu0MNmyvtjpN' +
|
|
153
|
+
'2Xi+bkvVro+3pxZy86NRNuB7AAV68x/GiOU1zo6HG3Ipsaq5fN9nOr0hZzKSPfGTyyd+ekVVNE7gKKG5' +
|
|
154
|
+
'ZKF1b0jKya/9l1NdRwa7jg5e+tXAVF+kkJHQUq97lk+fnM/46tzVG32KpE71RViN2IeOAGz77f3UJmel' +
|
|
155
|
+
'beB0uOf4aDKSVUTVYBaMNgOv44hGCKGKpNrclpY9odmhhen+haFzE5pKymucTdurNz5UZ7IZVVmzey29' +
|
|
156
|
+
'x8dWZIJi+yYErD0j44LrgBHHYUJobWdVTUclx2NPtQMQTPbOP/8XbzKvHzsPEEapSNZZYavdXJWYSw+f' +
|
|
157
|
+
'n2TCihXM3OSqwggoZGL5xh3B8qBz/OpsLllYLkX6sBCAGes17RU7PtaWieZe/Oax2aHF8LXZ/lPj/afC' +
|
|
158
|
+
'cyNRvUlwVth4gdNUoimaYBDqNleNXZlOLebC1+b6T43HZ1O8TnB4Laqi2dyWyHgsMZdeMT2UNSos7vfb' +
|
|
159
|
+
'Ar9k6c4dR4VNkdT0YtbqNA2dmwxfm2Ubf2mzIACIjMcbdgSDbRVTvZFMPI85vEJTWQoIo3Q0Z3OZg20V' +
|
|
160
|
+
'Zrtx4HR4uQHRulymV3KdMGJX5/GHv7LXUWE9+4vuqf6IYOCZn4DJ1oHT4am+iN1ndVeVaSpRZc1kNfjq' +
|
|
161
|
+
'XD3HRxFGckGZH4vFZ1IbH6onBDgBY4yGz08CuvWmwo5HGg9/ZU+wraI86HRW2kw2AydwnMAZzDqry+wO' +
|
|
162
|
+
'2Jt2BTsfb/Y3eohabFGsMwgT3fPTAwu3yG5234kqq007gq4qe9/JsdsTCW6k1txItGFroKLeXdNW4at1' +
|
|
163
|
+
'8zo+NpMCug40KI0ASxN+4su7azv9wxem3vr+BQAgKinWqhXzc1Emlus7OSYX1Jr2Co7DYlZ2+Kyx2XRs' +
|
|
164
|
+
'OsX25oF/sqWy0dN1ZBBz2N/kGTgdlnLyDVcQI6Dgq3V1PNJocZp89a7QJn/TzmDL3tDGA3VthxraDtZv' +
|
|
165
|
+
'2Fcb6qg0mPWYxyxTHGPE6/mxy9NzI9FbUiWKGu1ozOkvq98a0JuEsSszd8ImxkiR1IVwvDzocAccwTZf' +
|
|
166
|
+
'066aykbP9EBEyskl0qDUZh1A4cD/tqXtYH02nicard3sr271mcqM6cWsKmvXL1/EiFKYG4lODywEWn1W' +
|
|
167
|
+
'l0ln1E31zs+PxVi3532f6cwl8i9+85jNZW7YXj07tBidSl6XQhQAQWQsFp1O+upcBpNeERVZVCihCGOM' +
|
|
168
|
+
'ESWgKZqYl6lGOYFjdSyEUEHP950ci02nbs9VYYib6V+o3eSv6fBn4/nIeHzFM5bpvunF3LW3hnuOjY5f' +
|
|
169
|
+
'mdEZhfotgcoGT9+7Y0QlpURsSuwXRDc/0bznuY5cSqQUbG6z3Wv11jjrtgRa99ZmE/noVPJ6yRwA5nB6' +
|
|
170
|
+
'MTt4Jmx1mVMLmbMv9jAifeT/2O3w2c6/1DvVN48Qat0XKmSk0cvTcLMPDCEUnUoOnp0QcxJLAtMbBcwV' +
|
|
171
|
+
'Oyuytmas5x9LepQLisGkG7k4tdTT7Ra8stJaZXEy2bwzGGyrmB5YSEdzK+s5tHjc272WSDjed3LMU+0I' +
|
|
172
|
+
'bfLLeWVmcKGUyxPXSAC2tX11rsO/u1fMyaxqEPOY1/GEUDEr8zqudU9ocTIZn0ktz4+VUymSOnJhauB0' +
|
|
173
|
+
'mKWh7/3Upg376+aGo7/++zOUUlXSWvfXIoR6jo3eztoMZTODiz3HRmcGF5ILGbmgUgoYIVlUVVk1O4xz' +
|
|
174
|
+
'Q4uXfz1w7uVehFBNe2Xfu+NLnpzbsEoBczi1kBWzcuPOYFWzd/j85IrlIcwsKCu3/PbfPL31cOv8SGyi' +
|
|
175
|
+
'e679UAPRSN+746WcAiW1r9/36U5Bx7/5388PnB7nBM7iMFU0uGs3+Ws6KtltRg99fsvCRDy9mFu2a8hS' +
|
|
176
|
+
'xANzSFNJ4/bqLYdbxKz09j9eIBpBCMScVEhLpjIDr+NUWbvF+ifakutYo1P9kan+CBtKZxR4gfvYHz6E' +
|
|
177
|
+
'MT71wjWWHuqrdTGGYChc0Y3AtNKrbw7ZfdadH2s7/JU9P/+rt27P4WWTTy1kX/ybY4d+a9tTf7D/53/1' +
|
|
178
|
+
'VnI+Y3WZV5zn6mFN3dMxAoCqFm+wvWLsygwrYJMLSnw21Xt89JVvnXj+/zo6dmWaFzhPwFFZ74GbE+Uo' +
|
|
179
|
+
'pQz7VS3eR//5To7n3v3Z1dmhRcwVr58khOiNOr1JBytlpbFmibDcYRQhoCBm5ZqOyqoW7/CFyfnRKK/j' +
|
|
180
|
+
'YSlN0WDRw1Il0x12EwWA4z+6NHB6vLbT/9Hf3ct22O238CGMRi9PH/mHszoDv+VwCycwVUoDeH9bFzNi' +
|
|
181
|
+
'126qFHR8/+lxYO5GQpZ7Rc2PxV751sm6zVWuqrLhC5NwcxSF9SvxhpyHf2e3yWa49Hr/lTcGEEaEkCVs' +
|
|
182
|
+
'IE3VNJX5Hu/smyPFsiNCqMGi2/H0RjEnsxobWhyKyqLC7hed6p2/U256sS0vpa9++6TBom/eE5JF9Y2/' +
|
|
183
|
+
'P8Naq8ANTlzm/5gfi6VjueqNPqNF33tyDEprBLgWArCXeUMuMSezmxkoYdeh3WShjF6eHr18k7+MfU40' +
|
|
184
|
+
'Utvpf/SLO21uc9eRwbd/cIEhi9FVZxSMFl0+LUp5BVZjcCIACvs+3empcVx6rX9uJIqW0BGbSQFA4/bq' +
|
|
185
|
+
'ph3Bqf7Ir75zajkh7DYaFFuovPrtk8994+FNjzaaywxH//u55Xh98TGN1dJaBL3AC3x8Nn3+pd5VTfLO' +
|
|
186
|
+
'sMZDmBO4rR9tRRguvdavSOqtJswSGZZPM4TRUnwGNj/R/Mj/vsNkNXS9Mfjm987DkjrLyOPyl239aOt0' +
|
|
187
|
+
'/8L1Uvo7A+Yx1WjLntDeT29KzKZf/84pRVKXa0UzsXx0MjnZM48xqmmrrGopHzwbViVtxVEpBYyRXFBG' +
|
|
188
|
+
'Lk6VB521m6uadgZtLjMghDHSGQWLw1RR52rZE9r1XHtZuSUZybz8n49n4nnWQXnNBCjBG4rghj6oK8yg' +
|
|
189
|
+
'KCKWipspUGelbe+nOxu3V6uydvwnly+80gs3+B0ZB5TXOHVGYX40BjcXOa2AfQ4TlVQ2eB7+rW1EJe/8' +
|
|
190
|
+
'8GI+Jd54TQ0llJULXH1z6Knf379hf+2Wj7Scev7qnWJbhFCMUS5Z+NlfHN39XHvHw407ntm49clWKSez' +
|
|
191
|
+
'ZAu9SWBa04VXes/+soclb5UYrC/JHf2e9sdyCqK7yr5hf+3Gh+qtLtP8aOz4jy+NX51FCAHQW3BRLHIa' +
|
|
192
|
+
'v7XI6VbsY0Q04ql2HP7dvTqjcOr5q6OXpm+/+O4T/+phZ2XZ6985deaX1xp3VFdv9J16/upd5DVZ6ih7' +
|
|
193
|
+
'6vmr194ert8SqGz0WN1mBKBpJDmfmR+NjXXNsKYX65IqsVYC0GKX7btWnLMMwPKdz2z0N5WbHcZkJHPi' +
|
|
194
|
+
'J5cvvtYviyvcU8fQXeaxqJIqZu9WzsikvDtg//ifHDJa9YTQoipyo66JACiMXJza91nPs3/00Mv/+UQm' +
|
|
195
|
+
'ltebdJzA3T31mpXxYIQysfyVI4NXjgyuSH6WRFQi9tdKAASaSvJp0e61GkxCIS2uWE3BtvahL2z11bqi' +
|
|
196
|
+
'U8mLr/f1HBtlx9rKagMCoJCN53k9z5IyV4x+sJscDGbdk1/dZ7ToxrtmKurcW59s7T05Jmal612sKSCM' +
|
|
197
|
+
'uo4OZeOFJ39/385n23RGIT6X1hTtvYMqFMhSrgq9oTkE825Ruoqq+VXDmuwAhAAgnxLZ0VTE3UrPWBxG' +
|
|
198
|
+
'q9M8Oxz98Z/9+vQL11iLUHSHsn92Ni5OJjBGG/bXwZ0YACEAYJ3t07H8S//p+OiVabvX+vBvbQOWCYCK' +
|
|
199
|
+
'DcTZpKYHImJWclWV6U3CyIWp5bm9JzCD4yZzjF1UsK4BmbURAAAgPpvidRzLnrzTggS9oDfrUgtZWVQ4' +
|
|
200
|
+
'HjOd/Y45+wQAYPTydHw23bQrWNvppyvdC88wMjcSnRuJuvxlTTuDx398ObWYbd5dc/h39tjc5uLFzaR4' +
|
|
201
|
+
'n0HjjiAvcAaLfrxrhnVNXsf9WzqsSQRRAIDUYg4AbB7L3R6kFKCIiPfcO0wZz8Ty517sfuxLu/Z+atNk' +
|
|
202
|
+
'b0SV1dslBpNgl14f8DeV7/tM5/D5yde+ffKZP3yo7VBDaFNlbCaVSxYIoYKOd1TanJVlVCMDp8NHv3sW' +
|
|
203
|
+
'1qP6Y31hTXYAQkBBZxI27KvLJvJD5yZv5wHG5gaLvvOx5th0cvjC1Gr62NGi2znOfI2YQxPX5m6PD7OK' +
|
|
204
|
+
's9hMylvjDLR6LU7T5V8PDJ6Z4PWc2WF0+e2+Opcn6LSXW1VFC1+dffdnXedf6mEhlw8V9qEUDkgv5vIZ' +
|
|
205
|
+
'0eGz3UUbQxgB0GKhz+oWznB07EcXK+pdnY81TfbMj3fNrHADN0JA6Ts/vOgNOVv2hGLTyf7T4atvDg+c' +
|
|
206
|
+
'GgeEFFHBHFYVLTmfYfXGxRugP2TYh1LiAZpKWnaHzHZD38liw85b8AgAvIDbDjaostZzbHS1reyWGgzL' +
|
|
207
|
+
'otqwvdpX6xo8MyGLyq2BJwqYQ2JWTs5nmnYFAxt8Wz7S3PloY6izqrzGCQBD5yfTizlV0diB/CFEPYO1' +
|
|
208
|
+
'xgMQEI3Wba5yVzsGz4RzycKtCELF59oPNgDA1TeHYCk8+d4koBQhFBmL2b3WUEelw2cbOB1e7q1+w2OA' +
|
|
209
|
+
'MYrPpolGnJVliflMdDKpqcRZWda0I8j8P2xi9zXBv0RYe0AGKFQ2eqpbvaOXpuOz6RXbQVJCm/eELA7j' +
|
|
210
|
+
'/GhMzMnsRsnVBFGLLaB75kPtlYENPsyhyd7522NVyz06ut8e6X57uO/d8WtvD/edGEMYVW/0BTf4+k+N' +
|
|
211
|
+
'38n58yGBNRKAedlsLlPjjuDc8OLs0CLCKwRdKaG1m/2+kKtxe/WGA3VOn21xMsFanr4nDTCHVFmLjMca' +
|
|
212
|
+
'tlVXt3iT85nFycSK8ULWh7hoSJdb8mlx9NKU1Wmq3xbIp8SZwcVSQoYfUgIwRQhzeMP+OjEnD52bhNuU' +
|
|
213
|
+
'nGW1x1PtKGQko9UQ2lRZvzUwPbCQTeTfkwYsXpiJ5XPJQsO2QGCjb3Yoml7M4pWaWrLRWMiw/WD9RPfc' +
|
|
214
|
+
'9MBCx8MNGOHek2MfWuzD2kUQAACoktq8O2S2G3uOj2qKdqt4pwAA0ank1TeHu44M9p0YI4TWtFeGOioH' +
|
|
215
|
+
'z0y8R/9ONgClGKOFiQS7FyPQ6hvvmi2kxRX4gBbnk0+JdVuqQpv8vcdHG7ZVCwa+59goM48/nLB2LYh1' +
|
|
216
|
+
'hAxs8FY2ekYvT2did9vUgVZvJpEfvTStNwuNO4KarE70zK9GMjCVf7I3YnGaQh3+YFvFzOBiNpG/3oz6' +
|
|
217
|
+
'xocJjYzFClmpZW8olyhUtXgLGenq0aEPGsl3g1KvsRIMfPOuUD5VmOiew/jWjclI4m/0fP4vP9q4Mzhy' +
|
|
218
|
+
'cWp2cLH9YAMncKxZx2qAMcropWm7z1rTVlHb6U8t5GLTKZYqUgwLI4QQYunAckHZsK/WE3RYnab+U+P3' +
|
|
219
|
+
'dD/DbxIBGGRj+cYdQW/INXA6LOXlW61WVrwXz6dj+Y37a3mBGzgd3vRoI8L4niQDo8Hw+Um9SRdsr6jf' +
|
|
220
|
+
'GrA6TfHZtJiVrueJLrktfbXuxp1BvVGIz6WP/MMZVdbuc7eBkqAkAmCMZFE12QwN2wKCnh+9NM1OTpYZ' +
|
|
221
|
+
'uHQlEqIUImOxqhav1WnKJQvtBxsWJxLdx0buKZWD0WD86mw2XvDVuWs7/c27Q5WNHpvHYnGarC6To8JW' +
|
|
222
|
+
'Uedue6h+25OtVqdxcTLxy/94LJ8SP8xWGJS4NZibTNDzn/13j/vqXJffGDzxk8u3XyzM4OAXtm48UJda' +
|
|
223
|
+
'yPrq3Uf+4UzX0aF7TSZgKXCUUqvLtOnRpsYdQWeljddxS7ERhDlEVLI4lew9PnrpVwOqrH7IrTAonTfZ' +
|
|
224
|
+
'Cj3V9qf/4IAn6IhOJ/vfHQ9fm8vEcoWMRAgFSnk9b3OZH/3iDpe/zGDR9x4fff07p9b8xuWor8GsYxdk' +
|
|
225
|
+
'lHksy1H4yHhsbiTKAmQffuzDughHtk6jzbD7ufaWPSGry6RKWiEr5VMFhinBwFucJo7DhazUdWTw1PNX' +
|
|
226
|
+
'4a7NfN77jeiOUR0GGCNyL9dYfICwPqfT8l6ze63BtopAi9dRYTPbDSyTSZHU5HxmemBh6NzkLRVYJb0U' +
|
|
227
|
+
'3RbcWk7U+E1A/dKU12ugm4tMMYf0Jh37kF35W3zsN0Es/AbDdcX81i9g5c//l4f7iJHl8haWtvgAHsAD' +
|
|
228
|
+
'eAAP4AE8gAfwAB7AA3gADwAAAP4nRx5Fyope+64AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjUtMTAtMjhU' +
|
|
229
|
+
'MDE6MTQ6MjIrMDA6MDBFFBWXAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI1LTEwLTI4VDAxOjE0OjIyKzAw' +
|
|
230
|
+
'OjAwNEmtKwAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNS0xMC0yOFQwMTo0ODoxNSswMDowMEMf+VUA' +
|
|
231
|
+
'AAAASUVORK5CYII=';
|
|
232
|
+
const SUCCESS_HTML = buildResponseHtml({
|
|
233
|
+
title: 'Authentication Complete',
|
|
234
|
+
heading: 'Authorization finished. Return to llxprt.',
|
|
235
|
+
includeCatImage: true,
|
|
236
|
+
});
|
|
237
|
+
const FAILURE_HTML = buildResponseHtml({
|
|
238
|
+
title: 'Authentication Failed',
|
|
239
|
+
heading: 'Authorization failed. Return to llxprt and try again.',
|
|
240
|
+
includeCatImage: false,
|
|
241
|
+
});
|
|
242
|
+
function buildResponseHtml(options) {
|
|
243
|
+
return `<!doctype html>
|
|
244
|
+
<html lang="en">
|
|
245
|
+
<head>
|
|
246
|
+
<meta charset="utf-8" />
|
|
247
|
+
<title>${options.title}</title>
|
|
248
|
+
<style>
|
|
249
|
+
:root {
|
|
250
|
+
color-scheme: dark;
|
|
251
|
+
}
|
|
252
|
+
body {
|
|
253
|
+
margin: 0;
|
|
254
|
+
min-height: 100vh;
|
|
255
|
+
display: flex;
|
|
256
|
+
align-items: center;
|
|
257
|
+
justify-content: center;
|
|
258
|
+
background: #000;
|
|
259
|
+
color: #6a9955;
|
|
260
|
+
font-family: "SFMono-Regular", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
261
|
+
text-align: center;
|
|
262
|
+
padding: 2rem;
|
|
263
|
+
}
|
|
264
|
+
main {
|
|
265
|
+
max-width: 32rem;
|
|
266
|
+
}
|
|
267
|
+
h1 {
|
|
268
|
+
font-size: 1.5rem;
|
|
269
|
+
margin-bottom: 0.75rem;
|
|
270
|
+
}
|
|
271
|
+
p {
|
|
272
|
+
margin: 0;
|
|
273
|
+
line-height: 1.6;
|
|
274
|
+
}
|
|
275
|
+
img {
|
|
276
|
+
display: block;
|
|
277
|
+
margin: 1.5rem auto 0 auto;
|
|
278
|
+
max-width: 240px;
|
|
279
|
+
width: 100%;
|
|
280
|
+
height: auto;
|
|
281
|
+
}
|
|
282
|
+
a {
|
|
283
|
+
color: #6a9955;
|
|
284
|
+
}
|
|
285
|
+
</style>
|
|
286
|
+
</head>
|
|
287
|
+
<body>
|
|
288
|
+
<main>
|
|
289
|
+
<h1>${options.title}</h1>
|
|
290
|
+
<p>${options.heading}</p>
|
|
291
|
+
${options.includeCatImage ? `<img src="data:image/png;base64,${CLAUDE_CAT_BASE64}" alt="Claude Cat" />` : ''}
|
|
292
|
+
</main>
|
|
293
|
+
</body>
|
|
294
|
+
</html>`;
|
|
295
|
+
}
|
|
296
|
+
export const startLocalOAuthCallback = async (options) => {
|
|
297
|
+
const [startPort, endPort] = options.portRange;
|
|
298
|
+
for (let port = startPort; port <= endPort; port += 1) {
|
|
299
|
+
try {
|
|
300
|
+
return await createCallbackServer(port, options);
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
const code = error.code;
|
|
304
|
+
if (code === 'EADDRINUSE' || code === 'EACCES') {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
throw new Error('No available port for OAuth callback');
|
|
311
|
+
};
|
|
312
|
+
const createCallbackServer = async (port, options) => {
|
|
313
|
+
const redirectUri = `http://localhost:${port}/callback`;
|
|
314
|
+
const server = http.createServer();
|
|
315
|
+
await listen(server, port);
|
|
316
|
+
let closed = false;
|
|
317
|
+
let timeout = null;
|
|
318
|
+
let settled = null;
|
|
319
|
+
let resolveHandler = null;
|
|
320
|
+
let rejectHandler = null;
|
|
321
|
+
const settle = (result) => {
|
|
322
|
+
if (settled) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
settled = result;
|
|
326
|
+
if (result instanceof Error) {
|
|
327
|
+
if (rejectHandler) {
|
|
328
|
+
rejectHandler(result);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else if (resolveHandler) {
|
|
332
|
+
resolveHandler(result);
|
|
333
|
+
}
|
|
334
|
+
resolveHandler = null;
|
|
335
|
+
rejectHandler = null;
|
|
336
|
+
};
|
|
337
|
+
const shutdown = async () => {
|
|
338
|
+
if (closed) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
closed = true;
|
|
342
|
+
if (timeout) {
|
|
343
|
+
clearTimeout(timeout);
|
|
344
|
+
timeout = null;
|
|
345
|
+
}
|
|
346
|
+
await new Promise((resolve) => {
|
|
347
|
+
server.close(() => resolve());
|
|
348
|
+
});
|
|
349
|
+
};
|
|
350
|
+
server.on('request', (request, response) => {
|
|
351
|
+
const url = new URL(request.url ?? '/', redirectUri);
|
|
352
|
+
const code = url.searchParams.get('code');
|
|
353
|
+
const state = url.searchParams.get('state');
|
|
354
|
+
if (!code || !state) {
|
|
355
|
+
respond(response, 400, FAILURE_HTML);
|
|
356
|
+
settle(new Error('OAuth callback missing code or state'));
|
|
357
|
+
void shutdown();
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
if (state !== options.state) {
|
|
361
|
+
respond(response, 400, FAILURE_HTML);
|
|
362
|
+
settle(new Error('OAuth state mismatch'));
|
|
363
|
+
void shutdown();
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
respond(response, 200, SUCCESS_HTML);
|
|
367
|
+
settle({ code, state });
|
|
368
|
+
void shutdown();
|
|
369
|
+
});
|
|
370
|
+
server.on('error', async (error) => {
|
|
371
|
+
settle(error instanceof Error ? error : new Error(String(error)));
|
|
372
|
+
await shutdown();
|
|
373
|
+
});
|
|
374
|
+
timeout = setTimeout(() => {
|
|
375
|
+
settle(new Error('OAuth callback timed out'));
|
|
376
|
+
void shutdown();
|
|
377
|
+
}, options.timeoutMs);
|
|
378
|
+
return {
|
|
379
|
+
redirectUri,
|
|
380
|
+
waitForCallback: () => {
|
|
381
|
+
if (settled instanceof Error) {
|
|
382
|
+
return Promise.reject(settled);
|
|
383
|
+
}
|
|
384
|
+
if (settled && !(settled instanceof Error)) {
|
|
385
|
+
return Promise.resolve(settled);
|
|
386
|
+
}
|
|
387
|
+
return new Promise((resolve, reject) => {
|
|
388
|
+
resolveHandler = resolve;
|
|
389
|
+
rejectHandler = reject;
|
|
390
|
+
});
|
|
391
|
+
},
|
|
392
|
+
shutdown,
|
|
393
|
+
};
|
|
394
|
+
};
|
|
395
|
+
const listen = (server, port) => new Promise((resolve, reject) => {
|
|
396
|
+
const handleError = (error) => {
|
|
397
|
+
server.removeListener('listening', handleListening);
|
|
398
|
+
reject(error);
|
|
399
|
+
};
|
|
400
|
+
const handleListening = () => {
|
|
401
|
+
server.removeListener('error', handleError);
|
|
402
|
+
resolve();
|
|
403
|
+
};
|
|
404
|
+
server.once('error', handleError);
|
|
405
|
+
server.once('listening', handleListening);
|
|
406
|
+
server.listen(port, '127.0.0.1');
|
|
407
|
+
});
|
|
408
|
+
const respond = (response, status, body) => {
|
|
409
|
+
response.statusCode = status;
|
|
410
|
+
response.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
411
|
+
response.end(body);
|
|
412
|
+
};
|
|
413
|
+
//# sourceMappingURL=local-oauth-callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-oauth-callback.js","sourceRoot":"","sources":["../../../src/auth/local-oauth-callback.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,iBAAiB,GACrB,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
2
|
+
import http from 'node:http';
|
|
3
|
+
import { startLocalOAuthCallback } from './local-oauth-callback.js';
|
|
4
|
+
describe('startLocalOAuthCallback', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
vi.useRealTimers();
|
|
7
|
+
});
|
|
8
|
+
it('captures authorization code from localhost redirect', async () => {
|
|
9
|
+
const server = await startLocalOAuthCallback({
|
|
10
|
+
state: 'state-123',
|
|
11
|
+
portRange: [8765, 8765],
|
|
12
|
+
timeoutMs: 500,
|
|
13
|
+
});
|
|
14
|
+
const callbackPromise = server.waitForCallback();
|
|
15
|
+
const url = new URL(server.redirectUri);
|
|
16
|
+
await new Promise((resolve, reject) => {
|
|
17
|
+
const request = http.request({
|
|
18
|
+
method: 'GET',
|
|
19
|
+
hostname: url.hostname,
|
|
20
|
+
port: Number(url.port),
|
|
21
|
+
path: `${url.pathname}?code=auth-code-456&state=state-123`,
|
|
22
|
+
}, (response) => {
|
|
23
|
+
response.resume();
|
|
24
|
+
response.on('end', resolve);
|
|
25
|
+
});
|
|
26
|
+
request.on('error', reject);
|
|
27
|
+
request.end();
|
|
28
|
+
});
|
|
29
|
+
const result = await callbackPromise;
|
|
30
|
+
await server.shutdown();
|
|
31
|
+
expect(result).toEqual({
|
|
32
|
+
code: 'auth-code-456',
|
|
33
|
+
state: 'state-123',
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('rejects when callback does not arrive within timeout', async () => {
|
|
37
|
+
vi.useFakeTimers();
|
|
38
|
+
const server = await startLocalOAuthCallback({
|
|
39
|
+
state: 'timeout-state',
|
|
40
|
+
portRange: [8770, 8770],
|
|
41
|
+
timeoutMs: 100,
|
|
42
|
+
});
|
|
43
|
+
const callbackPromise = server.waitForCallback();
|
|
44
|
+
const rejection = expect(callbackPromise).rejects.toThrowError('OAuth callback timed out');
|
|
45
|
+
await vi.advanceTimersByTimeAsync(150);
|
|
46
|
+
await rejection;
|
|
47
|
+
await server.shutdown();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=local-oauth-callback.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-oauth-callback.spec.js","sourceRoot":"","sources":["../../../src/auth/local-oauth-callback.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;YAC3C,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;YACvB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAExC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B;gBACE,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACtB,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,qCAAqC;aAC3D,EACD,CAAC,QAAQ,EAAE,EAAE;gBACX,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC,CACF,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QAErC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAExB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,EAAE,CAAC,aAAa,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;YAC3C,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;YACvB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,YAAY,CAC5D,0BAA0B,CAC3B,CAAC;QAEF,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAEvC,MAAM,SAAS,CAAC;QAEhB,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -284,7 +284,6 @@ export async function parseArguments(settings) {
|
|
|
284
284
|
.option('load-memory-from-include-directories', {
|
|
285
285
|
type: 'boolean',
|
|
286
286
|
description: 'If true, when refreshing memory, LLXPRT.md files should be loaded from all directories that are added. If false, LLXPRT.md files should only be loaded from the primary working directory.',
|
|
287
|
-
default: false,
|
|
288
287
|
})
|
|
289
288
|
// Register MCP subcommands
|
|
290
289
|
.command(mcpCommand);
|
|
@@ -470,14 +469,23 @@ export async function loadCliConfig(settings, extensions, sessionId, argv, cwd =
|
|
|
470
469
|
...DEFAULT_MEMORY_FILE_FILTERING_OPTIONS,
|
|
471
470
|
...effectiveSettings.fileFiltering,
|
|
472
471
|
};
|
|
473
|
-
const
|
|
472
|
+
const includeDirectoriesFromSettings = effectiveSettings.includeDirectories || [];
|
|
473
|
+
const includeDirectoriesFromCli = argv.includeDirectories || [];
|
|
474
|
+
const includeDirectories = includeDirectoriesFromSettings
|
|
474
475
|
.map(resolvePath)
|
|
475
|
-
.concat(
|
|
476
|
+
.concat(includeDirectoriesFromCli.map(resolvePath));
|
|
477
|
+
const includeDirectoriesProvided = includeDirectories.length > 0;
|
|
478
|
+
const cliLoadMemoryPreference = argv.loadMemoryFromIncludeDirectories;
|
|
479
|
+
const settingsLoadMemoryPreference = effectiveSettings.loadMemoryFromIncludeDirectories;
|
|
480
|
+
let resolvedLoadMemoryFromIncludeDirectories = cliLoadMemoryPreference ?? settingsLoadMemoryPreference ?? false;
|
|
481
|
+
if (!resolvedLoadMemoryFromIncludeDirectories &&
|
|
482
|
+
includeDirectoriesProvided &&
|
|
483
|
+
cliLoadMemoryPreference === undefined &&
|
|
484
|
+
settingsLoadMemoryPreference !== true) {
|
|
485
|
+
resolvedLoadMemoryFromIncludeDirectories = true;
|
|
486
|
+
}
|
|
476
487
|
// Call the (now wrapper) loadHierarchicalLlxprtMemory which calls the server's version
|
|
477
|
-
const { memoryContent, fileCount } = await loadHierarchicalLlxprtMemory(cwd, effectiveSettings
|
|
478
|
-
argv.loadMemoryFromIncludeDirectories
|
|
479
|
-
? includeDirectories
|
|
480
|
-
: [], debugMode, fileService, effectiveSettings, extensionContextFilePaths, trustedFolder, memoryImportFormat, fileFiltering);
|
|
488
|
+
const { memoryContent, fileCount } = await loadHierarchicalLlxprtMemory(cwd, resolvedLoadMemoryFromIncludeDirectories ? includeDirectories : [], debugMode, fileService, effectiveSettings, extensionContextFilePaths, trustedFolder, memoryImportFormat, fileFiltering);
|
|
481
489
|
let mcpServers = mergeMcpServers(effectiveSettings, activeExtensions);
|
|
482
490
|
const question = argv.promptInteractive || argv.prompt || (argv.promptWords || []).join(' ');
|
|
483
491
|
// Determine approval mode with backward compatibility
|
|
@@ -583,9 +591,7 @@ export async function loadCliConfig(settings, extensions, sessionId, argv, cwd =
|
|
|
583
591
|
sandbox: sandboxConfig,
|
|
584
592
|
targetDir: cwd,
|
|
585
593
|
includeDirectories,
|
|
586
|
-
loadMemoryFromIncludeDirectories:
|
|
587
|
-
effectiveSettings.loadMemoryFromIncludeDirectories ||
|
|
588
|
-
false,
|
|
594
|
+
loadMemoryFromIncludeDirectories: resolvedLoadMemoryFromIncludeDirectories,
|
|
589
595
|
debugMode,
|
|
590
596
|
question,
|
|
591
597
|
fullContext: argv.allFiles || false,
|