aicommit2 1.6.0 → 1.7.1
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 +83 -39
- package/dist/cli.mjs +53 -58
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,12 +16,17 @@
|
|
|
16
16
|
|
|
17
17
|
## Introduction
|
|
18
18
|
|
|
19
|
-
AICommit2 streamlines interactions with various AI, enabling users to
|
|
19
|
+
AICommit2 streamlines interactions with various AI, enabling users to request multiple AI simultaneously and select the most suitable message without waiting for all AI responses.
|
|
20
20
|
|
|
21
21
|
## Project Base & Inspiration
|
|
22
22
|
|
|
23
23
|
The core functionalities and architecture of this project are inspired by [AI Commits](https://github.com/Nutlope/aicommits).
|
|
24
24
|
|
|
25
|
+
## Features
|
|
26
|
+
- **Generate Commit Messages**: Quickly generate commit messages based on AI predictions.
|
|
27
|
+
- **Multiple AI Support**: Utilize various AI providers simultaneously.
|
|
28
|
+
- **Local Model**: Integrate with the local Ollama model for offline use.
|
|
29
|
+
|
|
25
30
|
## Supported Providers
|
|
26
31
|
|
|
27
32
|
- [OpenAI](https://openai.com/)
|
|
@@ -32,7 +37,7 @@ The core functionalities and architecture of this project are inspired by [AI Co
|
|
|
32
37
|
- [Clova X **(Unofficial)**](https://clova-x.naver.com/)
|
|
33
38
|
|
|
34
39
|
## Local Model
|
|
35
|
-
|
|
40
|
+
|
|
36
41
|
- [Ollama](https://ollama.com/)
|
|
37
42
|
|
|
38
43
|
## Setup
|
|
@@ -45,18 +50,18 @@ The core functionalities and architecture of this project are inspired by [AI Co
|
|
|
45
50
|
npm install -g aicommit2
|
|
46
51
|
```
|
|
47
52
|
|
|
48
|
-
2. Retrieve the API key or Cookie you intend to use
|
|
53
|
+
2. Retrieve the API key or Cookie you intend to use:
|
|
49
54
|
|
|
50
55
|
- [OpenAI](https://platform.openai.com/account/api-keys)
|
|
51
56
|
- [Anthropic Claude](https://console.anthropic.com/)
|
|
52
57
|
- [Gemini](https://aistudio.google.com/app/apikey)
|
|
53
58
|
- [Mistral AI](https://console.mistral.ai/)
|
|
54
|
-
- [Huggingface **(Unofficial)**](https://github.com/tak-bro/aicommit2
|
|
55
|
-
- [Clova X **(Unofficial)**](https://github.com/tak-bro/aicommit2
|
|
56
|
-
|
|
57
|
-
> If you haven't already, you'll have to create an account and set up billing.
|
|
59
|
+
- [Huggingface **(Unofficial)**](https://github.com/tak-bro/aicommit2?tab=readme-ov-file#how-to-get-cookieunofficial-api)
|
|
60
|
+
- [Clova X **(Unofficial)**](https://github.com/tak-bro/aicommit2?tab=readme-ov-file#how-to-get-cookieunofficial-api)
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
> You may need to create an account and set up billing.
|
|
63
|
+
|
|
64
|
+
3. Set API keys you intend to use:
|
|
60
65
|
|
|
61
66
|
```sh
|
|
62
67
|
aicommit2 config set OPENAI_KEY=<your key> # OpenAI
|
|
@@ -73,11 +78,17 @@ This will create a `.aicommit2` file in your home directory.
|
|
|
73
78
|
|
|
74
79
|
> It is not necessary to set all keys. **But at least one key must be set up.**
|
|
75
80
|
|
|
81
|
+
4. Run aicommits with your staged in git repository:
|
|
82
|
+
```shell
|
|
83
|
+
git add <files...>
|
|
84
|
+
aicommit2
|
|
85
|
+
```
|
|
86
|
+
|
|
76
87
|
## Using Locally
|
|
77
88
|
|
|
78
89
|
You can also use your model for free with [Ollama](https://ollama.com/).
|
|
79
90
|
|
|
80
|
-
1. Install Ollama from [https://ollama.com](https://ollama.com/)
|
|
91
|
+
1. Install Ollama from [https://ollama.com](https://ollama.com/)
|
|
81
92
|
|
|
82
93
|
2. Start it with your model
|
|
83
94
|
|
|
@@ -89,25 +100,23 @@ ollama run llama2 # model you want use
|
|
|
89
100
|
|
|
90
101
|
```sh
|
|
91
102
|
aicommit2 config set OLLAMA_MODEL=<your model>
|
|
92
|
-
aicommit2 config set OLLAMA_HOST=<host> # The default host for ollama is http://localhost:11434.
|
|
93
|
-
aicommit2 config set OLLAMA_TIMEOUT=<timout> # default is 100000ms (100s)
|
|
103
|
+
aicommit2 config set OLLAMA_HOST=<host> # Optional. The default host for ollama is http://localhost:11434.
|
|
104
|
+
aicommit2 config set OLLAMA_TIMEOUT=<timout> # Optional. default is 100000ms (100s)
|
|
94
105
|
```
|
|
95
106
|
|
|
96
107
|
> If you want to use ollama, you must set **OLLAMA_MODEL**.
|
|
97
108
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
aicommit2 --version
|
|
109
|
+
4. Run aicommits with your staged in git repository
|
|
110
|
+
```shell
|
|
111
|
+
git add <files...>
|
|
112
|
+
aicommit2
|
|
104
113
|
```
|
|
105
114
|
|
|
106
|
-
|
|
115
|
+
## How it works
|
|
107
116
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
117
|
+
This CLI tool runs `git diff` to grab all your latest code changes, sends them to configured AI, then returns the AI generated commit message.
|
|
118
|
+
|
|
119
|
+
> If the diff becomes too large, AI will not function properly. If you encounter an error saying the message is too long or it's not a valid commit message, try reducing the commit unit.
|
|
111
120
|
|
|
112
121
|
## Usage
|
|
113
122
|
|
|
@@ -174,16 +183,23 @@ aicommit2 --confirm # or -y
|
|
|
174
183
|
|
|
175
184
|
##### `--clipboard` or `-c`
|
|
176
185
|
- Copy the selected message to the clipboard (default: **false**)
|
|
177
|
-
- This is a useful option when you don't want to commit through
|
|
178
|
-
- If you give this option,
|
|
179
|
-
|
|
186
|
+
- This is a useful option when you don't want to commit through AICommit2.
|
|
187
|
+
- If you give this option, AICommit2 will not commit.
|
|
188
|
+
|
|
180
189
|
```sh
|
|
181
190
|
aicommit2 --clipboard # or -c
|
|
182
191
|
```
|
|
183
192
|
|
|
193
|
+
##### `--prompt` or `-p`
|
|
194
|
+
- Additional prompt to let users fine-tune provided prompt
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
aicommit2 --prompt <s> # or -p <s>
|
|
198
|
+
```
|
|
199
|
+
|
|
184
200
|
### Git hook
|
|
185
201
|
|
|
186
|
-
You can also integrate
|
|
202
|
+
You can also integrate _AICommit2_ with Git via the [`prepare-commit-msg`](https://git-scm.com/docs/githooks#_prepare_commit_msg) hook. This lets you use Git like you normally would, and edit the commit message before committing.
|
|
187
203
|
|
|
188
204
|
#### Install
|
|
189
205
|
|
|
@@ -264,6 +280,7 @@ aicommit2 config set OPENAI_KEY=<your-api-key> generate=3 locale=en
|
|
|
264
280
|
|-------------------|----------------------------------------|-------------------------------------------------------------------------------------------------------------------------|
|
|
265
281
|
| `OPENAI_KEY` | N/A | The OpenAI API key |
|
|
266
282
|
| `OPENAI_MODEL` | `gpt-3.5-turbo` | The OpenAI Model to use |
|
|
283
|
+
| `OPENAI_HOST` | `https://api.openai.com ` | The OpenAI URL |
|
|
267
284
|
| `ANTHROPIC_KEY` | N/A | The Anthropic API key |
|
|
268
285
|
| `ANTHROPIC_MODEL` | `claude-2.1` | The Anthropic Model to use |
|
|
269
286
|
| `GEMINI_KEY` | N/A | The Gemini API key |
|
|
@@ -284,19 +301,20 @@ aicommit2 config set OPENAI_KEY=<your-api-key> generate=3 locale=en
|
|
|
284
301
|
| `max-length` | `50` | Maximum character length of the generated commit message |
|
|
285
302
|
| `max-tokens` | `200` | The maximum number of tokens that the AI models can generate (for **Open AI, Anthropic, Gemini, Mistral**) |
|
|
286
303
|
| `temperature` | `0.7` | The temperature (0.0-2.0) is used to control the randomness of the output (for **Open AI, Anthropic, Gemini, Mistral**) |
|
|
304
|
+
| `prompt` | N/A | Additional prompt to let users fine-tune provided prompt |
|
|
287
305
|
|
|
288
306
|
> **Currently, options are set universally. However, there are plans to develop the ability to set individual options in the future.**
|
|
289
307
|
|
|
290
308
|
#### Available Options by Model
|
|
291
|
-
| | locale | generate | type | proxy | timeout | max-length | max-tokens | temperature |
|
|
292
|
-
|
|
293
|
-
| **OpenAI** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
294
|
-
| **Anthropic Claude** | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ |
|
|
295
|
-
| **Gemini** | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ |
|
|
296
|
-
| **Mistral AI** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ |
|
|
297
|
-
| **Huggingface** | ✓ | ✓ | ✓ | | ✓ | ✓ | | |
|
|
298
|
-
| **Clova X** | ✓ | ✓ | ✓ | | ✓ | ✓ | | |
|
|
299
|
-
| **Ollama** | ✓ | ✓ | ✓ | | ✓<br/>(OLLAMA_TIMEOUT) | ✓ | | ✓ |
|
|
309
|
+
| | locale | generate | type | proxy | timeout | max-length | max-tokens | temperature | prompt |
|
|
310
|
+
|:--------------------:|:------:|:--------:|:-----:|:-----:|:----------------------:|:-----------:|:----------:|:-----------:|:------:|
|
|
311
|
+
| **OpenAI** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
312
|
+
| **Anthropic Claude** | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
313
|
+
| **Gemini** | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
314
|
+
| **Mistral AI** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
315
|
+
| **Huggingface** | ✓ | ✓ | ✓ | | ✓ | ✓ | | | ✓ |
|
|
316
|
+
| **Clova X** | ✓ | ✓ | ✓ | | ✓ | ✓ | | | ✓ |
|
|
317
|
+
| **Ollama** | ✓ | ✓ | ✓ | | ✓<br/>(OLLAMA_TIMEOUT) | ✓ | | ✓ | ✓ |
|
|
300
318
|
|
|
301
319
|
#### OPENAI_KEY
|
|
302
320
|
|
|
@@ -314,6 +332,12 @@ The Chat Completions (`/v1/chat/completions`) model to use. Consult the list of
|
|
|
314
332
|
aicommit2 config set OPENAI_MODEL=gpt-4
|
|
315
333
|
```
|
|
316
334
|
|
|
335
|
+
#### OPENAI_HOST
|
|
336
|
+
|
|
337
|
+
Default: `https://api.openai.com`
|
|
338
|
+
|
|
339
|
+
The OpenAI URL for custom. Both https and http protocols supported. It allows to run local OpenAI-compatible server.
|
|
340
|
+
|
|
317
341
|
#### ANTHROPIC_KEY
|
|
318
342
|
|
|
319
343
|
The Anthropic API key. To get started with Anthropic Claude, request access to their API at [anthropic.com/earlyaccess](https://www.anthropic.com/earlyaccess).
|
|
@@ -378,7 +402,7 @@ The [Huggingface Chat](https://huggingface.co/chat/) Cookie. Please check [how t
|
|
|
378
402
|
|
|
379
403
|
Default: `mistralai/Mixtral-8x7B-Instruct-v0.1`
|
|
380
404
|
|
|
381
|
-
Supported:
|
|
405
|
+
Supported:
|
|
382
406
|
- `mistralai/Mixtral-8x7B-Instruct-v0.1`
|
|
383
407
|
- `meta-llama/Llama-2-70b-chat-hf`
|
|
384
408
|
- `NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO`
|
|
@@ -482,7 +506,7 @@ aicommit2 config set max-tokens=1000
|
|
|
482
506
|
```
|
|
483
507
|
|
|
484
508
|
#### temperature
|
|
485
|
-
The temperature (0.0-2.0) is used to control the randomness of the output
|
|
509
|
+
The temperature (0.0-2.0) is used to control the randomness of the output
|
|
486
510
|
|
|
487
511
|
Default: `0.7`
|
|
488
512
|
|
|
@@ -490,15 +514,32 @@ Default: `0.7`
|
|
|
490
514
|
aicommit2 config set temperature=0
|
|
491
515
|
```
|
|
492
516
|
|
|
493
|
-
|
|
517
|
+
#### prompt
|
|
518
|
+
Additional prompt to let users fine-tune provided prompt. Users provide extra instructions to AI and can guide how commit messages should look like.
|
|
494
519
|
|
|
495
|
-
|
|
520
|
+
```sh
|
|
521
|
+
aicommit2 config set prompt="Do not mention config changes"
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
## Upgrading
|
|
525
|
+
|
|
526
|
+
Check the installed version with:
|
|
527
|
+
|
|
528
|
+
```
|
|
529
|
+
aicommit2 --version
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
If it's not the [latest version](https://github.com/tak-bro/aicommit2/releases/latest), run:
|
|
533
|
+
|
|
534
|
+
```sh
|
|
535
|
+
npm update -g aicommit2
|
|
536
|
+
```
|
|
496
537
|
|
|
497
538
|
## How to get Cookie(**Unofficial API**)
|
|
498
539
|
|
|
499
540
|
* Login to the site you want
|
|
500
541
|
* You can get cookie from the browser's developer tools network tab
|
|
501
|
-
* See for any requests check out the Cookie, **Copy whole value**
|
|
542
|
+
* See for any requests check out the Cookie, **Copy whole value**
|
|
502
543
|
* Check below image for the format of cookie
|
|
503
544
|
|
|
504
545
|
> When setting cookies with long string values, ensure to **escape characters** like ", ', and others properly.
|
|
@@ -519,6 +560,9 @@ Users are responsible for understanding and abiding by the terms of use, rate li
|
|
|
519
560
|
|
|
520
561
|
It is recommended that users thoroughly review the API documentation and adhere to best practices to ensure a positive and compliant experience.
|
|
521
562
|
|
|
563
|
+
## Please Star⭐️
|
|
564
|
+
If this project has been helpful to you, I would greatly appreciate it if you could click the Star⭐️ button on this repository!
|
|
565
|
+
|
|
522
566
|
## Maintainers
|
|
523
567
|
|
|
524
568
|
- [@tak-bro](https://env-tak.github.io/)
|
package/dist/cli.mjs
CHANGED
|
@@ -1,65 +1,60 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import Se from"tty";import{createRequire as cn}from"module";import{Buffer as ln}from"node:buffer";import V from"node:path";import Mt from"node:child_process";import T from"node:process";import fn from"child_process";import X from"path";import Pe from"fs";import pn from"node:url";import dn,{constants as St}from"node:os";import Pt from"assert";import Tt from"events";import mn from"buffer";import Te from"stream";import _t from"util";import _e from"inquirer";import Ne from"ora";import g from"chalk";import{of as _,concatMap as k,from as N,map as R,catchError as j,mergeMap as hn,BehaviorSubject as Nt,ReplaySubject as gn,lastValueFrom as Cn,filter as Fn,toArray as En}from"rxjs";import Re from"@anthropic-ai/sdk";import{fromPromise as G}from"rxjs/internal/observable/innerFrom";import yn from"https";import"@dqbd/tiktoken";import wn from"net";import bn from"tls";import An,{fileURLToPath as vn,pathToFileURL as Bn}from"url";import Rt from"os";import{FormData as $n,Blob as xn}from"formdata-node";import O from"fs/promises";import On from"axios";import{GoogleGenerativeAI as In}from"@google/generative-ai";import me from"readline";import Mn from"figlet";import Sn from"inquirer-reactive-list-prompt";const Pn="known-flag",Tn="unknown-flag",_n="argument",{stringify:ue}=JSON,Nn=/\B([A-Z])/g,Rn=e=>e.replace(Nn,"-$1").toLowerCase(),{hasOwnProperty:Ln}=Object.prototype,se=(e,t)=>Ln.call(e,t),kn=e=>Array.isArray(e),Lt=e=>typeof e=="function"?[e,!1]:kn(e)?[e[0],!0]:Lt(e.type),jn=(e,t)=>e===Boolean?t!=="false":t,Gn=(e,t)=>typeof t=="boolean"?t:e===Number&&t===""?Number.NaN:e(t),Hn=/[\s.:=]/,Un=e=>{const t=`Flag name ${ue(e)}`;if(e.length===0)throw new Error(`${t} cannot be empty`);if(e.length===1)throw new Error(`${t} must be longer than a character`);const r=e.match(Hn);if(r)throw new Error(`${t} cannot contain ${ue(r?.[0])}`)},Kn=e=>{const t={},r=(n,o)=>{if(se(t,n))throw new Error(`Duplicate flags named ${ue(n)}`);t[n]=o};for(const n in e){if(!se(e,n))continue;Un(n);const o=e[n],u=[[],...Lt(o),o];r(n,u);const s=Rn(n);if(n!==s&&r(s,u),"alias"in o&&typeof o.alias=="string"){const{alias:i}=o,a=`Flag alias ${ue(i)} for flag ${ue(n)}`;if(i.length===0)throw new Error(`${a} cannot be empty`);if(i.length>1)throw new Error(`${a} must be a single character`);r(i,u)}}return t},qn=(e,t)=>{const r={};for(const n in e){if(!se(e,n))continue;const[o,,u,s]=t[n];if(o.length===0&&"default"in s){let{default:i}=s;typeof i=="function"&&(i=i()),r[n]=i}else r[n]=u?o:o.pop()}return r},he="--",zn=/[.:=]/,Yn=/^-{1,2}\w/,Wn=e=>{if(!Yn.test(e))return;const t=!e.startsWith(he);let r=e.slice(t?1:2),n;const o=r.match(zn);if(o){const{index:u}=o;n=r.slice(u+1),r=r.slice(0,u)}return[r,n,t]},Vn=(e,{onFlag:t,onArgument:r})=>{let n;const o=(u,s)=>{if(typeof n!="function")return!0;n(u,s),n=void 0};for(let u=0;u<e.length;u+=1){const s=e[u];if(s===he){o();const a=e.slice(u+1);r?.(a,[u],!0);break}const i=Wn(s);if(i){if(o(),!t)continue;const[a,f,l]=i;if(l)for(let D=0;D<a.length;D+=1){o();const c=D===a.length-1;n=t(a[D],c?f:void 0,[u,D+1,c])}else n=t(a,f,[u])}else o(s,[u])&&r?.([s],[u])}o()},Xn=(e,t)=>{for(const[r,n,o]of t.reverse()){if(n){const u=e[r];let s=u.slice(0,n);if(o||(s+=u.slice(n+1)),s!=="-"){e[r]=s;continue}}e.splice(r,1)}},Jn=(e,t=process.argv.slice(2),{ignore:r}={})=>{const n=[],o=Kn(e),u={},s=[];return s[he]=[],Vn(t,{onFlag(i,a,f){const l=se(o,i);if(!r?.(l?Pn:Tn,i,a)){if(l){const[D,c]=o[i],p=jn(c,a),d=(m,h)=>{n.push(f),h&&n.push(h),D.push(Gn(c,m||""))};return p===void 0?d:d(p)}se(u,i)||(u[i]=[]),u[i].push(a===void 0?!0:a),n.push(f)}},onArgument(i,a,f){r?.(_n,t[a[0]])||(s.push(...i),f?(s[he]=i,t.splice(a[0])):n.push(a))}}),Xn(t,n),{flags:qn(e,o),unknownFlags:u,_:s}};var Zn=Object.create,ge=Object.defineProperty,Qn=Object.defineProperties,eo=Object.getOwnPropertyDescriptor,to=Object.getOwnPropertyDescriptors,ro=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,no=Object.getPrototypeOf,jt=Object.prototype.hasOwnProperty,oo=Object.prototype.propertyIsEnumerable,Gt=(e,t,r)=>t in e?ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ce=(e,t)=>{for(var r in t||(t={}))jt.call(t,r)&&Gt(e,r,t[r]);if(kt)for(var r of kt(t))oo.call(t,r)&&Gt(e,r,t[r]);return e},Le=(e,t)=>Qn(e,to(t)),uo=e=>ge(e,"__esModule",{value:!0}),so=(e,t)=>()=>(e&&(t=e(e=0)),t),io=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ao=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ro(t))!jt.call(e,o)&&(r||o!=="default")&&ge(e,o,{get:()=>t[o],enumerable:!(n=eo(t,o))||n.enumerable});return e},Do=(e,t)=>ao(uo(ge(e!=null?Zn(no(e)):{},"default",!t&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),B=so(()=>{}),co=io((e,t)=>{B(),t.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});B(),B(),B();var lo=e=>{var t,r,n;let o=(t=process.stdout.columns)!=null?t:Number.POSITIVE_INFINITY;return typeof e=="function"&&(e=e(o)),e||(e={}),Array.isArray(e)?{columns:e,stdoutColumns:o}:{columns:(r=e.columns)!=null?r:[],stdoutColumns:(n=e.stdoutColumns)!=null?n:o}};B(),B(),B(),B(),B();function fo({onlyFirst:e=!1}={}){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}function Ht(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(fo(),"")}B();function po(e){return Number.isInteger(e)?e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141):!1}var mo=Do(co(),1);function H(e){if(typeof e!="string"||e.length===0||(e=Ht(e),e.length===0))return 0;e=e.replace((0,mo.default)()," ");let t=0;for(let r=0;r<e.length;r++){let n=e.codePointAt(r);n<=31||n>=127&&n<=159||n>=768&&n<=879||(n>65535&&r++,t+=po(n)?2:1)}return t}var Ut=e=>Math.max(...e.split(`
|
|
3
|
-
`).map(H)),
|
|
4
|
-
`)];for(let[f
|
|
5
|
-
`?(u&&(
|
|
6
|
-
`&&(o&&D&&(
|
|
2
|
+
import Pe from"tty";import{createRequire as cn}from"module";import{Buffer as ln}from"node:buffer";import W from"node:path";import Mt from"node:child_process";import _ from"node:process";import fn from"child_process";import V from"path";import _e from"fs";import pn from"node:url";import dn,{constants as Pt}from"node:os";import _t from"assert";import Tt from"events";import mn from"buffer";import Te from"stream";import Nt from"util";import Ne from"inquirer";import Le from"ora";import g from"chalk";import{of as T,concatMap as k,from as N,map as L,catchError as j,mergeMap as hn,BehaviorSubject as Lt,ReplaySubject as gn,lastValueFrom as Cn,filter as Fn,toArray as En}from"rxjs";import Re from"@anthropic-ai/sdk";import{fromPromise as G}from"rxjs/internal/observable/innerFrom";import yn from"http";import wn from"https";import"@dqbd/tiktoken";import bn from"net";import An from"tls";import vn,{fileURLToPath as Bn,pathToFileURL as $n}from"url";import Rt from"os";import{FormData as xn,Blob as On}from"formdata-node";import x from"fs/promises";import In from"axios";import{GoogleGenerativeAI as Sn}from"@google/generative-ai";import me from"readline";import Mn from"figlet";import Pn from"inquirer-reactive-list-prompt";const _n="known-flag",Tn="unknown-flag",Nn="argument",{stringify:ue}=JSON,Ln=/\B([A-Z])/g,Rn=e=>e.replace(Ln,"-$1").toLowerCase(),{hasOwnProperty:kn}=Object.prototype,se=(e,t)=>kn.call(e,t),jn=e=>Array.isArray(e),kt=e=>typeof e=="function"?[e,!1]:jn(e)?[e[0],!0]:kt(e.type),Gn=(e,t)=>e===Boolean?t!=="false":t,Hn=(e,t)=>typeof t=="boolean"?t:e===Number&&t===""?Number.NaN:e(t),Un=/[\s.:=]/,Kn=e=>{const t=`Flag name ${ue(e)}`;if(e.length===0)throw new Error(`${t} cannot be empty`);if(e.length===1)throw new Error(`${t} must be longer than a character`);const n=e.match(Un);if(n)throw new Error(`${t} cannot contain ${ue(n?.[0])}`)},qn=e=>{const t={},n=(r,o)=>{if(se(t,r))throw new Error(`Duplicate flags named ${ue(r)}`);t[r]=o};for(const r in e){if(!se(e,r))continue;Kn(r);const o=e[r],u=[[],...kt(o),o];n(r,u);const s=Rn(r);if(r!==s&&n(s,u),"alias"in o&&typeof o.alias=="string"){const{alias:a}=o,i=`Flag alias ${ue(a)} for flag ${ue(r)}`;if(a.length===0)throw new Error(`${i} cannot be empty`);if(a.length>1)throw new Error(`${i} must be a single character`);n(a,u)}}return t},zn=(e,t)=>{const n={};for(const r in e){if(!se(e,r))continue;const[o,,u,s]=t[r];if(o.length===0&&"default"in s){let{default:a}=s;typeof a=="function"&&(a=a()),n[r]=a}else n[r]=u?o:o.pop()}return n},he="--",Yn=/[.:=]/,Wn=/^-{1,2}\w/,Vn=e=>{if(!Wn.test(e))return;const t=!e.startsWith(he);let n=e.slice(t?1:2),r;const o=n.match(Yn);if(o){const{index:u}=o;r=n.slice(u+1),n=n.slice(0,u)}return[n,r,t]},Xn=(e,{onFlag:t,onArgument:n})=>{let r;const o=(u,s)=>{if(typeof r!="function")return!0;r(u,s),r=void 0};for(let u=0;u<e.length;u+=1){const s=e[u];if(s===he){o();const i=e.slice(u+1);n?.(i,[u],!0);break}const a=Vn(s);if(a){if(o(),!t)continue;const[i,l,f]=a;if(f)for(let D=0;D<i.length;D+=1){o();const c=D===i.length-1;r=t(i[D],c?l:void 0,[u,D+1,c])}else r=t(i,l,[u])}else o(s,[u])&&n?.([s],[u])}o()},Jn=(e,t)=>{for(const[n,r,o]of t.reverse()){if(r){const u=e[n];let s=u.slice(0,r);if(o||(s+=u.slice(r+1)),s!=="-"){e[n]=s;continue}}e.splice(n,1)}},Zn=(e,t=process.argv.slice(2),{ignore:n}={})=>{const r=[],o=qn(e),u={},s=[];return s[he]=[],Xn(t,{onFlag(a,i,l){const f=se(o,a);if(!n?.(f?_n:Tn,a,i)){if(f){const[D,c]=o[a],p=Gn(c,i),d=(m,h)=>{r.push(l),h&&r.push(h),D.push(Hn(c,m||""))};return p===void 0?d:d(p)}se(u,a)||(u[a]=[]),u[a].push(i===void 0?!0:i),r.push(l)}},onArgument(a,i,l){n?.(Nn,t[i[0]])||(s.push(...a),l?(s[he]=a,t.splice(i[0])):r.push(i))}}),Jn(t,r),{flags:zn(e,o),unknownFlags:u,_:s}};var Qn=Object.create,ge=Object.defineProperty,eo=Object.defineProperties,to=Object.getOwnPropertyDescriptor,ro=Object.getOwnPropertyDescriptors,no=Object.getOwnPropertyNames,jt=Object.getOwnPropertySymbols,oo=Object.getPrototypeOf,Gt=Object.prototype.hasOwnProperty,uo=Object.prototype.propertyIsEnumerable,Ht=(e,t,n)=>t in e?ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ce=(e,t)=>{for(var n in t||(t={}))Gt.call(t,n)&&Ht(e,n,t[n]);if(jt)for(var n of jt(t))uo.call(t,n)&&Ht(e,n,t[n]);return e},ke=(e,t)=>eo(e,ro(t)),so=e=>ge(e,"__esModule",{value:!0}),io=(e,t)=>()=>(e&&(t=e(e=0)),t),ao=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Do=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of no(t))!Gt.call(e,o)&&(n||o!=="default")&&ge(e,o,{get:()=>t[o],enumerable:!(r=to(t,o))||r.enumerable});return e},co=(e,t)=>Do(so(ge(e!=null?Qn(oo(e)):{},"default",!t&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),B=io(()=>{}),lo=ao((e,t)=>{B(),t.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});B(),B(),B();var fo=e=>{var t,n,r;let o=(t=process.stdout.columns)!=null?t:Number.POSITIVE_INFINITY;return typeof e=="function"&&(e=e(o)),e||(e={}),Array.isArray(e)?{columns:e,stdoutColumns:o}:{columns:(n=e.columns)!=null?n:[],stdoutColumns:(r=e.stdoutColumns)!=null?r:o}};B(),B(),B(),B(),B();function po({onlyFirst:e=!1}={}){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}function Ut(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(po(),"")}B();function mo(e){return Number.isInteger(e)?e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141):!1}var ho=co(lo(),1);function H(e){if(typeof e!="string"||e.length===0||(e=Ut(e),e.length===0))return 0;e=e.replace((0,ho.default)()," ");let t=0;for(let n=0;n<e.length;n++){let r=e.codePointAt(n);r<=31||r>=127&&r<=159||r>=768&&r<=879||(r>65535&&n++,t+=mo(r)?2:1)}return t}var Kt=e=>Math.max(...e.split(`
|
|
3
|
+
`).map(H)),go=e=>{let t=[];for(let n of e){let{length:r}=n,o=r-t.length;for(let u=0;u<o;u+=1)t.push(0);for(let u=0;u<r;u+=1){let s=Kt(n[u]);s>t[u]&&(t[u]=s)}}return t};B();var qt=/^\d+%$/,zt={width:"auto",align:"left",contentWidth:0,paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0,horizontalPadding:0,paddingLeftString:"",paddingRightString:""},Co=(e,t)=>{var n;let r=[];for(let o=0;o<e.length;o+=1){let u=(n=t[o])!=null?n:"auto";if(typeof u=="number"||u==="auto"||u==="content-width"||typeof u=="string"&&qt.test(u)){r.push(ke(Ce({},zt),{width:u,contentWidth:e[o]}));continue}if(u&&typeof u=="object"){let s=ke(Ce(Ce({},zt),u),{contentWidth:e[o]});s.horizontalPadding=s.paddingLeft+s.paddingRight,r.push(s);continue}throw new Error(`Invalid column width: ${JSON.stringify(u)}`)}return r};function Fo(e,t){for(let n of e){let{width:r}=n;if(r==="content-width"&&(n.width=n.contentWidth),r==="auto"){let i=Math.min(20,n.contentWidth);n.width=i,n.autoOverflow=n.contentWidth-i}if(typeof r=="string"&&qt.test(r)){let i=Number.parseFloat(r.slice(0,-1))/100;n.width=Math.floor(t*i)-(n.paddingLeft+n.paddingRight)}let{horizontalPadding:o}=n,u=1,s=u+o;if(s>=t){let i=s-t,l=Math.ceil(n.paddingLeft/o*i),f=i-l;n.paddingLeft-=l,n.paddingRight-=f,n.horizontalPadding=n.paddingLeft+n.paddingRight}n.paddingLeftString=n.paddingLeft?" ".repeat(n.paddingLeft):"",n.paddingRightString=n.paddingRight?" ".repeat(n.paddingRight):"";let a=t-n.horizontalPadding;n.width=Math.max(Math.min(n.width,a),u)}}var Yt=()=>Object.assign([],{columns:0});function Eo(e,t){let n=[Yt()],[r]=n;for(let o of e){let u=o.width+o.horizontalPadding;r.columns+u>t&&(r=Yt(),n.push(r)),r.push(o),r.columns+=u}for(let o of n){let u=o.reduce((c,p)=>c+p.width+p.horizontalPadding,0),s=t-u;if(s===0)continue;let a=o.filter(c=>"autoOverflow"in c),i=a.filter(c=>c.autoOverflow>0),l=i.reduce((c,p)=>c+p.autoOverflow,0),f=Math.min(l,s);for(let c of i){let p=Math.floor(c.autoOverflow/l*f);c.width+=p,s-=p}let D=Math.floor(s/a.length);for(let c=0;c<a.length;c+=1){let p=a[c];c===a.length-1?p.width+=s:p.width+=D,s-=D}}return n}function yo(e,t,n){let r=Co(n,t);return Fo(r,e),Eo(r,e)}B(),B(),B();var je=10,Wt=(e=0)=>t=>`\x1B[${t+e}m`,Vt=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Xt=(e=0)=>(t,n,r)=>`\x1B[${38+e};2;${t};${n};${r}m`;function wo(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[n,r]of Object.entries(t)){for(let[o,u]of Object.entries(r))t[o]={open:`\x1B[${u[0]}m`,close:`\x1B[${u[1]}m`},r[o]=t[o],e.set(u[0],u[1]);Object.defineProperty(t,n,{value:r,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",t.color.ansi=Wt(),t.color.ansi256=Vt(),t.color.ansi16m=Xt(),t.bgColor.ansi=Wt(je),t.bgColor.ansi256=Vt(je),t.bgColor.ansi16m=Xt(je),Object.defineProperties(t,{rgbToAnsi256:{value:(n,r,o)=>n===r&&r===o?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5),enumerable:!1},hexToRgb:{value:n=>{let r=/(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i.exec(n.toString(16));if(!r)return[0,0,0];let{colorString:o}=r.groups;o.length===3&&(o=o.split("").map(s=>s+s).join(""));let u=Number.parseInt(o,16);return[u>>16&255,u>>8&255,u&255]},enumerable:!1},hexToAnsi256:{value:n=>t.rgbToAnsi256(...t.hexToRgb(n)),enumerable:!1},ansi256ToAnsi:{value:n=>{if(n<8)return 30+n;if(n<16)return 90+(n-8);let r,o,u;if(n>=232)r=((n-232)*10+8)/255,o=r,u=r;else{n-=16;let i=n%36;r=Math.floor(n/36)/5,o=Math.floor(i/6)/5,u=i%6/5}let s=Math.max(r,o,u)*2;if(s===0)return 30;let a=30+(Math.round(u)<<2|Math.round(o)<<1|Math.round(r));return s===2&&(a+=60),a},enumerable:!1},rgbToAnsi:{value:(n,r,o)=>t.ansi256ToAnsi(t.rgbToAnsi256(n,r,o)),enumerable:!1},hexToAnsi:{value:n=>t.ansi256ToAnsi(t.hexToAnsi256(n)),enumerable:!1}}),t}var bo=wo(),Ao=bo,Fe=new Set(["\x1B","\x9B"]),vo=39,Ge="\x07",Jt="[",Bo="]",Zt="m",He=`${Bo}8;;`,Qt=e=>`${Fe.values().next().value}${Jt}${e}${Zt}`,er=e=>`${Fe.values().next().value}${He}${e}${Ge}`,$o=e=>e.split(" ").map(t=>H(t)),Ue=(e,t,n)=>{let r=[...t],o=!1,u=!1,s=H(Ut(e[e.length-1]));for(let[a,i]of r.entries()){let l=H(i);if(s+l<=n?e[e.length-1]+=i:(e.push(i),s=0),Fe.has(i)&&(o=!0,u=r.slice(a+1).join("").startsWith(He)),o){u?i===Ge&&(o=!1,u=!1):i===Zt&&(o=!1);continue}s+=l,s===n&&a<r.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},xo=e=>{let t=e.split(" "),n=t.length;for(;n>0&&!(H(t[n-1])>0);)n--;return n===t.length?e:t.slice(0,n).join(" ")+t.slice(n).join("")},Oo=(e,t,n={})=>{if(n.trim!==!1&&e.trim()==="")return"";let r="",o,u,s=$o(e),a=[""];for(let[l,f]of e.split(" ").entries()){n.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let D=H(a[a.length-1]);if(l!==0&&(D>=t&&(n.wordWrap===!1||n.trim===!1)&&(a.push(""),D=0),(D>0||n.trim===!1)&&(a[a.length-1]+=" ",D++)),n.hard&&s[l]>t){let c=t-D,p=1+Math.floor((s[l]-c-1)/t);Math.floor((s[l]-1)/t)<p&&a.push(""),Ue(a,f,t);continue}if(D+s[l]>t&&D>0&&s[l]>0){if(n.wordWrap===!1&&D<t){Ue(a,f,t);continue}a.push("")}if(D+s[l]>t&&n.wordWrap===!1){Ue(a,f,t);continue}a[a.length-1]+=f}n.trim!==!1&&(a=a.map(l=>xo(l)));let i=[...a.join(`
|
|
4
|
+
`)];for(let[l,f]of i.entries()){if(r+=f,Fe.has(f)){let{groups:c}=new RegExp(`(?:\\${Jt}(?<code>\\d+)m|\\${He}(?<uri>.*)${Ge})`).exec(i.slice(l).join(""))||{groups:{}};if(c.code!==void 0){let p=Number.parseFloat(c.code);o=p===vo?void 0:p}else c.uri!==void 0&&(u=c.uri.length===0?void 0:c.uri)}let D=Ao.codes.get(Number(o));i[l+1]===`
|
|
5
|
+
`?(u&&(r+=er("")),o&&D&&(r+=Qt(D))):f===`
|
|
6
|
+
`&&(o&&D&&(r+=Qt(o)),u&&(r+=er(u)))}return r};function Io(e,t,n){return String(e).normalize().replace(/\r\n/g,`
|
|
7
7
|
`).split(`
|
|
8
|
-
`).map(
|
|
9
|
-
`)}var
|
|
10
|
-
`);if(
|
|
11
|
-
`))}return
|
|
12
|
-
`)}function Mo(e,t){if(!e||e.length===0)return"";let
|
|
13
|
-
`)}B();var
|
|
14
|
-
`}}function
|
|
15
|
-
`}}function
|
|
16
|
-
`):t.usage}}:void 0;if(e.name){const
|
|
17
|
-
`)}}}}function
|
|
18
|
-
`)),
|
|
19
|
-
`:"")+(
|
|
20
|
-
`}table({tableData:t,tableOptions:
|
|
21
|
-
`);if("type"in t&&this[t.type]){const
|
|
22
|
-
`),
|
|
8
|
+
`).map(r=>Oo(r,t,n)).join(`
|
|
9
|
+
`)}var tr=e=>Array.from({length:e}).fill("");function So(e,t){let n=[],r=0;for(let o of e){let u=0,s=o.map(i=>{var l;let f=(l=t[r])!=null?l:"";r+=1,i.preprocess&&(f=i.preprocess(f)),Kt(f)>i.width&&(f=Io(f,i.width,{hard:!0}));let D=f.split(`
|
|
10
|
+
`);if(i.postprocess){let{postprocess:c}=i;D=D.map((p,d)=>c.call(i,p,d))}return i.paddingTop&&D.unshift(...tr(i.paddingTop)),i.paddingBottom&&D.push(...tr(i.paddingBottom)),D.length>u&&(u=D.length),ke(Ce({},i),{lines:D})}),a=[];for(let i=0;i<u;i+=1){let l=s.map(f=>{var D;let c=(D=f.lines[i])!=null?D:"",p=Number.isFinite(f.width)?" ".repeat(f.width-H(c)):"",d=f.paddingLeftString;return f.align==="right"&&(d+=p),d+=c,f.align==="left"&&(d+=p),d+f.paddingRightString}).join("");a.push(l)}n.push(a.join(`
|
|
11
|
+
`))}return n.join(`
|
|
12
|
+
`)}function Mo(e,t){if(!e||e.length===0)return"";let n=go(e),r=n.length;if(r===0)return"";let{stdoutColumns:o,columns:u}=fo(t);if(u.length>r)throw new Error(`${u.length} columns defined, but only ${r} columns found`);let s=yo(o,u,n);return e.map(a=>So(s,a)).join(`
|
|
13
|
+
`)}B();var Po=["<",">","=",">=","<="];function _o(e){if(!Po.includes(e))throw new TypeError(`Invalid breakpoint operator: ${e}`)}function To(e){let t=Object.keys(e).map(n=>{let[r,o]=n.split(" ");_o(r);let u=Number.parseInt(o,10);if(Number.isNaN(u))throw new TypeError(`Invalid breakpoint value: ${o}`);let s=e[n];return{operator:r,breakpoint:u,value:s}}).sort((n,r)=>r.breakpoint-n.breakpoint);return n=>{var r;return(r=t.find(({operator:o,breakpoint:u})=>o==="="&&n===u||o===">"&&n>u||o==="<"&&n<u||o===">="&&n>=u||o==="<="&&n<=u))==null?void 0:r.value}}const No=e=>e.replace(/[\W_]([a-z\d])?/gi,(t,n)=>n?n.toUpperCase():""),Lo=e=>e.replace(/\B([A-Z])/g,"-$1").toLowerCase(),Ro={"> 80":[{width:"content-width",paddingLeft:2,paddingRight:8},{width:"auto"}],"> 40":[{width:"auto",paddingLeft:2,paddingRight:8,preprocess:e=>e.trim()},{width:"100%",paddingLeft:2,paddingBottom:1}],"> 0":{stdoutColumns:1e3,columns:[{width:"content-width",paddingLeft:2,paddingRight:8},{width:"content-width"}]}};function ko(e){let t=!1;return{type:"table",data:{tableData:Object.keys(e).sort((n,r)=>n.localeCompare(r)).map(n=>{const r=e[n],o="alias"in r;return o&&(t=!0),{name:n,flag:r,flagFormatted:`--${Lo(n)}`,aliasesEnabled:t,aliasFormatted:o?`-${r.alias}`:void 0}}).map(n=>(n.aliasesEnabled=t,[{type:"flagName",data:n},{type:"flagDescription",data:n}])),tableBreakpoints:Ro}}}const rr=e=>!e||(e.version??(e.help?e.help.version:void 0)),nr=e=>{const t="parent"in e&&e.parent?.name;return(t?`${t} `:"")+e.name};function jo(e){const t=[];e.name&&t.push(nr(e));const n=rr(e)??("parent"in e&&rr(e.parent));if(n&&t.push(`v${n}`),t.length!==0)return{id:"name",type:"text",data:`${t.join(" ")}
|
|
14
|
+
`}}function Go(e){const{help:t}=e;if(!(!t||!t.description))return{id:"description",type:"text",data:`${t.description}
|
|
15
|
+
`}}function Ho(e){const t=e.help||{};if("usage"in t)return t.usage?{id:"usage",type:"section",data:{title:"Usage:",body:Array.isArray(t.usage)?t.usage.join(`
|
|
16
|
+
`):t.usage}}:void 0;if(e.name){const n=[],r=[nr(e)];if(e.flags&&Object.keys(e.flags).length>0&&r.push("[flags...]"),e.parameters&&e.parameters.length>0){const{parameters:o}=e,u=o.indexOf("--"),s=u>-1&&o.slice(u+1).some(a=>a.startsWith("<"));r.push(o.map(a=>a!=="--"?a:s?"--":"[--]").join(" "))}if(r.length>1&&n.push(r.join(" ")),"commands"in e&&e.commands?.length&&n.push(`${e.name} <command>`),n.length>0)return{id:"usage",type:"section",data:{title:"Usage:",body:n.join(`
|
|
17
|
+
`)}}}}function Uo(e){return!("commands"in e)||!e.commands?.length?void 0:{id:"commands",type:"section",data:{title:"Commands:",body:{type:"table",data:{tableData:e.commands.map(t=>[t.options.name,t.options.help?t.options.help.description:""]),tableOptions:[{width:"content-width",paddingLeft:2,paddingRight:8}]}},indentBody:0}}}function Ko(e){if(!(!e.flags||Object.keys(e.flags).length===0))return{id:"flags",type:"section",data:{title:"Flags:",body:ko(e.flags),indentBody:0}}}function qo(e){const{help:t}=e;if(!t||!t.examples||t.examples.length===0)return;let{examples:n}=t;if(Array.isArray(n)&&(n=n.join(`
|
|
18
|
+
`)),n)return{id:"examples",type:"section",data:{title:"Examples:",body:n}}}function zo(e){if(!("alias"in e)||!e.alias)return;const{alias:t}=e;return{id:"aliases",type:"section",data:{title:"Aliases:",body:Array.isArray(t)?t.join(", "):t}}}const Yo=e=>[jo,Go,Ho,Uo,Ko,qo,zo].map(t=>t(e)).filter(Boolean),Wo=Pe.WriteStream.prototype.hasColors();class Vo{text(t){return t}bold(t){return Wo?`\x1B[1m${t}\x1B[22m`:t.toLocaleUpperCase()}indentText({text:t,spaces:n}){return t.replace(/^/gm," ".repeat(n))}heading(t){return this.bold(t)}section({title:t,body:n,indentBody:r=2}){return`${(t?`${this.heading(t)}
|
|
19
|
+
`:"")+(n?this.indentText({text:this.render(n),spaces:r}):"")}
|
|
20
|
+
`}table({tableData:t,tableOptions:n,tableBreakpoints:r}){return Mo(t.map(o=>o.map(u=>this.render(u))),r?To(r):n)}flagParameter(t){return t===Boolean?"":t===String?"<string>":t===Number?"<number>":Array.isArray(t)?this.flagParameter(t[0]):"<value>"}flagOperator(t){return" "}flagName(t){const{flag:n,flagFormatted:r,aliasesEnabled:o,aliasFormatted:u}=t;let s="";if(u?s+=`${u}, `:o&&(s+=" "),s+=r,"placeholder"in n&&typeof n.placeholder=="string")s+=`${this.flagOperator(t)}${n.placeholder}`;else{const a=this.flagParameter("type"in n?n.type:n);a&&(s+=`${this.flagOperator(t)}${a}`)}return s}flagDefault(t){return JSON.stringify(t)}flagDescription({flag:t}){let n="description"in t?t.description??"":"";if("default"in t){let{default:r}=t;typeof r=="function"&&(r=r()),r&&(n+=` (default: ${this.flagDefault(r)})`)}return n}render(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(n=>this.render(n)).join(`
|
|
21
|
+
`);if("type"in t&&this[t.type]){const n=this[t.type];if(typeof n=="function")return n.call(this,t.data)}throw new Error(`Invalid node type: ${JSON.stringify(t)}`)}}const Ke=/^[\w.-]+$/,{stringify:I}=JSON,Xo=/[|\\{}()[\]^$+*?.]/;function qe(e){const t=[];let n,r;for(const o of e){if(r)throw new Error(`Invalid parameter: Spread parameter ${I(r)} must be last`);const u=o[0],s=o[o.length-1];let a;if(u==="<"&&s===">"&&(a=!0,n))throw new Error(`Invalid parameter: Required parameter ${I(o)} cannot come after optional parameter ${I(n)}`);if(u==="["&&s==="]"&&(a=!1,n=o),a===void 0)throw new Error(`Invalid parameter: ${I(o)}. Must be wrapped in <> (required parameter) or [] (optional parameter)`);let i=o.slice(1,-1);const l=i.slice(-3)==="...";l&&(r=o,i=i.slice(0,-3));const f=i.match(Xo);if(f)throw new Error(`Invalid parameter: ${I(o)}. Invalid character found ${I(f[0])}`);t.push({name:i,required:a,spread:l})}return t}function ze(e,t,n,r){for(let o=0;o<t.length;o+=1){const{name:u,required:s,spread:a}=t[o],i=No(u);if(i in e)throw new Error(`Invalid parameter: ${I(u)} is used more than once.`);const l=a?n.slice(o):n[o];if(a&&(o=t.length),s&&(!l||a&&l.length===0))return console.error(`Error: Missing required parameter ${I(u)}
|
|
22
|
+
`),r(),process.exit(1);e[i]=l}}function Jo(e){return e===void 0||e!==!1}function or(e,t,n,r){const o={...t.flags},u=t.version;u&&(o.version={type:Boolean,description:"Show version"});const{help:s}=t,a=Jo(s);a&&!("help"in o)&&(o.help={type:Boolean,alias:"h",description:"Show help"});const i=Zn(o,r,{ignore:t.ignoreArgv}),l=()=>{console.log(t.version)};if(u&&i.flags.version===!0)return l(),process.exit(0);const f=new Vo,D=a&&s?.render?s.render:d=>f.render(d),c=d=>{const m=Yo({...t,...d?{help:d}:{},flags:o});console.log(D(m,f))};if(a&&i.flags.help===!0)return c(),process.exit(0);if(t.parameters){let{parameters:d}=t,m=i._;const h=d.indexOf("--"),C=d.slice(h+1),b=Object.create(null);if(h>-1&&C.length>0){d=d.slice(0,h);const O=i._["--"];m=m.slice(0,-O.length||void 0),ze(b,qe(d),m,c),ze(b,qe(C),O,c)}else ze(b,qe(d),m,c);Object.assign(i._,b)}const p={...i,showVersion:l,showHelp:c};return typeof n=="function"&&n(p),{command:e,...p}}function Zo(e,t){const n=new Map;for(const r of t){const o=[r.options.name],{alias:u}=r.options;u&&(Array.isArray(u)?o.push(...u):o.push(u));for(const s of o){if(n.has(s))throw new Error(`Duplicate command name found: ${I(s)}`);n.set(s,r)}}return n.get(e)}function Qo(e,t,n=process.argv.slice(2)){if(!e)throw new Error("Options is required");if("name"in e&&(!e.name||!Ke.test(e.name)))throw new Error(`Invalid script name: ${I(e.name)}`);const r=n[0];if(e.commands&&Ke.test(r)){const o=Zo(r,e.commands);if(o)return or(o.options.name,{...o.options,parent:e},o.callback,n.slice(1))}return or(void 0,e,t,n)}function ur(e,t){if(!e)throw new Error("Command options are required");const{name:n}=e;if(e.name===void 0)throw new Error("Command name is required");if(!Ke.test(n))throw new Error(`Invalid command name ${JSON.stringify(n)}. Command names must be one word.`);return{options:e,callback:t}}var eu=cn(import.meta.url),A=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function X(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var J={exports:{}},Ye,sr;function tu(){if(sr)return Ye;sr=1,Ye=r,r.sync=o;var e=_e;function t(u,s){var a=s.pathExt!==void 0?s.pathExt:process.env.PATHEXT;if(!a||(a=a.split(";"),a.indexOf("")!==-1))return!0;for(var i=0;i<a.length;i++){var l=a[i].toLowerCase();if(l&&u.substr(-l.length).toLowerCase()===l)return!0}return!1}function n(u,s,a){return!u.isSymbolicLink()&&!u.isFile()?!1:t(s,a)}function r(u,s,a){e.stat(u,function(i,l){a(i,i?!1:n(l,u,s))})}function o(u,s){return n(e.statSync(u),u,s)}return Ye}var We,ir;function ru(){if(ir)return We;ir=1,We=t,t.sync=n;var e=_e;function t(u,s,a){e.stat(u,function(i,l){a(i,i?!1:r(l,s))})}function n(u,s){return r(e.statSync(u),s)}function r(u,s){return u.isFile()&&o(u,s)}function o(u,s){var a=u.mode,i=u.uid,l=u.gid,f=s.uid!==void 0?s.uid:process.getuid&&process.getuid(),D=s.gid!==void 0?s.gid:process.getgid&&process.getgid(),c=parseInt("100",8),p=parseInt("010",8),d=parseInt("001",8),m=c|p,h=a&d||a&p&&l===D||a&c&&i===f||a&m&&f===0;return h}return We}var Ee;process.platform==="win32"||A.TESTING_WINDOWS?Ee=tu():Ee=ru();var nu=Ve;Ve.sync=ou;function Ve(e,t,n){if(typeof t=="function"&&(n=t,t={}),!n){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(r,o){Ve(e,t||{},function(u,s){u?o(u):r(s)})})}Ee(e,t||{},function(r,o){r&&(r.code==="EACCES"||t&&t.ignoreErrors)&&(r=null,o=!1),n(r,o)})}function ou(e,t){try{return Ee.sync(e,t||{})}catch(n){if(t&&t.ignoreErrors||n.code==="EACCES")return!1;throw n}}const Z=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",ar=V,uu=Z?";":":",Dr=nu,cr=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),lr=(e,t)=>{const n=t.colon||uu,r=e.match(/\//)||Z&&e.match(/\\/)?[""]:[...Z?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(n)],o=Z?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",u=Z?o.split(n):[""];return Z&&e.indexOf(".")!==-1&&u[0]!==""&&u.unshift(""),{pathEnv:r,pathExt:u,pathExtExe:o}},fr=(e,t,n)=>{typeof t=="function"&&(n=t,t={}),t||(t={});const{pathEnv:r,pathExt:o,pathExtExe:u}=lr(e,t),s=[],a=l=>new Promise((f,D)=>{if(l===r.length)return t.all&&s.length?f(s):D(cr(e));const c=r[l],p=/^".*"$/.test(c)?c.slice(1,-1):c,d=ar.join(p,e),m=!p&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;f(i(m,l,0))}),i=(l,f,D)=>new Promise((c,p)=>{if(D===o.length)return c(a(f+1));const d=o[D];Dr(l+d,{pathExt:u},(m,h)=>{if(!m&&h)if(t.all)s.push(l+d);else return c(l+d);return c(i(l,f,D+1))})});return n?a(0).then(l=>n(null,l),n):a(0)},su=(e,t)=>{t=t||{};const{pathEnv:n,pathExt:r,pathExtExe:o}=lr(e,t),u=[];for(let s=0;s<n.length;s++){const a=n[s],i=/^".*"$/.test(a)?a.slice(1,-1):a,l=ar.join(i,e),f=!i&&/^\.[\\\/]/.test(e)?e.slice(0,2)+l:l;for(let D=0;D<r.length;D++){const c=f+r[D];try{if(Dr.sync(c,{pathExt:o}))if(t.all)u.push(c);else return c}catch{}}}if(t.all&&u.length)return u;if(t.nothrow)return null;throw cr(e)};var iu=fr;fr.sync=su;var Xe={exports:{}};const pr=(e={})=>{const t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"};Xe.exports=pr,Xe.exports.default=pr;var au=Xe.exports;const dr=V,Du=iu,cu=au;function mr(e,t){const n=e.options.env||process.env,r=process.cwd(),o=e.options.cwd!=null,u=o&&process.chdir!==void 0&&!process.chdir.disabled;if(u)try{process.chdir(e.options.cwd)}catch{}let s;try{s=Du.sync(e.command,{path:n[cu({env:n})],pathExt:t?dr.delimiter:void 0})}catch{}finally{u&&process.chdir(r)}return s&&(s=dr.resolve(o?e.options.cwd:"",s)),s}function lu(e){return mr(e)||mr(e,!0)}var fu=lu,Je={};const Ze=/([()\][%!^"`<>&|;, *?])/g;function pu(e){return e=e.replace(Ze,"^$1"),e}function du(e,t){return e=`${e}`,e=e.replace(/(\\*)"/g,'$1$1\\"'),e=e.replace(/(\\*)$/,"$1$1"),e=`"${e}"`,e=e.replace(Ze,"^$1"),t&&(e=e.replace(Ze,"^$1")),e}Je.command=pu,Je.argument=du;var mu=/^#!(.*)/;const hu=mu;var gu=(e="")=>{const t=e.match(hu);if(!t)return null;const[n,r]=t[0].replace(/#! ?/,"").split(" "),o=n.split("/").pop();return o==="env"?r:r?`${o} ${r}`:o};const Qe=_e,Cu=gu;function Fu(e){const n=Buffer.alloc(150);let r;try{r=Qe.openSync(e,"r"),Qe.readSync(r,n,0,150,0),Qe.closeSync(r)}catch{}return Cu(n.toString())}var Eu=Fu;const yu=V,hr=fu,gr=Je,wu=Eu,bu=process.platform==="win32",Au=/\.(?:com|exe)$/i,vu=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Bu(e){e.file=hr(e);const t=e.file&&wu(e.file);return t?(e.args.unshift(e.file),e.command=t,hr(e)):e.file}function $u(e){if(!bu)return e;const t=Bu(e),n=!Au.test(t);if(e.options.forceShell||n){const r=vu.test(t);e.command=yu.normalize(e.command),e.command=gr.command(e.command),e.args=e.args.map(u=>gr.argument(u,r));const o=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${o}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function xu(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);const r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:$u(r)}var Ou=xu;const et=process.platform==="win32";function tt(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function Iu(e,t){if(!et)return;const n=e.emit;e.emit=function(r,o){if(r==="exit"){const u=Cr(o,t);if(u)return n.call(e,"error",u)}return n.apply(e,arguments)}}function Cr(e,t){return et&&e===1&&!t.file?tt(t.original,"spawn"):null}function Su(e,t){return et&&e===1&&!t.file?tt(t.original,"spawnSync"):null}var Mu={hookChildProcess:Iu,verifyENOENT:Cr,verifyENOENTSync:Su,notFoundError:tt};const Fr=fn,rt=Ou,nt=Mu;function Er(e,t,n){const r=rt(e,t,n),o=Fr.spawn(r.command,r.args,r.options);return nt.hookChildProcess(o,r),o}function Pu(e,t,n){const r=rt(e,t,n),o=Fr.spawnSync(r.command,r.args,r.options);return o.error=o.error||nt.verifyENOENTSync(o.status,r),o}J.exports=Er,J.exports.spawn=Er,J.exports.sync=Pu,J.exports._parse=rt,J.exports._enoent=nt;var _u=J.exports,Tu=X(_u);function Nu(e){const t=typeof e=="string"?`
|
|
23
23
|
`:`
|
|
24
|
-
`.charCodeAt(),
|
|
25
|
-
${t}`,
|
|
26
|
-
${
|
|
27
|
-
`);return h?(
|
|
28
|
-
${
|
|
29
|
-
${JSON.stringify({docs:"Documentation only changes",style:"Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)",refactor:"A code change that neither fixes a bug nor adds a feature",perf:"A code change that improves performance",test:"Adding missing tests or correcting existing tests",build:"Changes that affect the build system or external dependencies",ci:"Changes to our CI configuration files and scripts",chore:"Other changes that don't modify src or test files",revert:"Reverts a previous commit",feat:"A new feature",fix:"A bug fix"},null,2)}`},
|
|
30
|
-
`),
|
|
31
|
-
Please just generate ${
|
|
24
|
+
`.charCodeAt(),n=typeof e=="string"?"\r":"\r".charCodeAt();return e[e.length-1]===t&&(e=e.slice(0,-1)),e[e.length-1]===n&&(e=e.slice(0,-1)),e}function yr(e={}){const{env:t=process.env,platform:n=process.platform}=e;return n!=="win32"?"PATH":Object.keys(t).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"}function Lu(e={}){const{cwd:t=_.cwd(),path:n=_.env[yr()],execPath:r=_.execPath}=e;let o;const u=t instanceof URL?pn.fileURLToPath(t):t;let s=W.resolve(u);const a=[];for(;o!==s;)a.push(W.join(s,"node_modules/.bin")),o=s,s=W.resolve(s,"..");return a.push(W.resolve(u,r,"..")),[...a,n].join(W.delimiter)}function Ru({env:e=_.env,...t}={}){e={...e};const n=yr({env:e});return t.path=e[n],e[n]=Lu(t),e}const ku=(e,t,n,r)=>{if(n==="length"||n==="prototype"||n==="arguments"||n==="caller")return;const o=Object.getOwnPropertyDescriptor(e,n),u=Object.getOwnPropertyDescriptor(t,n);!ju(o,u)&&r||Object.defineProperty(e,n,u)},ju=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},Gu=(e,t)=>{const n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n)},Hu=(e,t)=>`/* Wrapped ${e}*/
|
|
25
|
+
${t}`,Uu=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),Ku=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),qu=(e,t,n)=>{const r=n===""?"":`with ${n.trim()}() `,o=Hu.bind(null,r,t.toString());Object.defineProperty(o,"name",Ku),Object.defineProperty(e,"toString",{...Uu,value:o})};function zu(e,t,{ignoreNonConfigurable:n=!1}={}){const{name:r}=e;for(const o of Reflect.ownKeys(t))ku(e,t,o,n);return Gu(e,t),qu(e,t,r),e}const ye=new WeakMap,wr=(e,t={})=>{if(typeof e!="function")throw new TypeError("Expected a function");let n,r=0;const o=e.displayName||e.name||"<anonymous>",u=function(...s){if(ye.set(u,++r),r===1)n=e.apply(this,s),e=null;else if(t.throw===!0)throw new Error(`Function \`${o}\` can only be called once`);return n};return zu(u,e),ye.set(u,r),u};wr.callCount=e=>{if(!ye.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return ye.get(e)};const Yu=()=>{const e=Ar-br+1;return Array.from({length:e},Wu)},Wu=(e,t)=>({name:`SIGRT${t+1}`,number:br+t,action:"terminate",description:"Application-specific signal (realtime)",standard:"posix"}),br=34,Ar=64,Vu=[{name:"SIGHUP",number:1,action:"terminate",description:"Terminal closed",standard:"posix"},{name:"SIGINT",number:2,action:"terminate",description:"User interruption with CTRL-C",standard:"ansi"},{name:"SIGQUIT",number:3,action:"core",description:"User interruption with CTRL-\\",standard:"posix"},{name:"SIGILL",number:4,action:"core",description:"Invalid machine instruction",standard:"ansi"},{name:"SIGTRAP",number:5,action:"core",description:"Debugger breakpoint",standard:"posix"},{name:"SIGABRT",number:6,action:"core",description:"Aborted",standard:"ansi"},{name:"SIGIOT",number:6,action:"core",description:"Aborted",standard:"bsd"},{name:"SIGBUS",number:7,action:"core",description:"Bus error due to misaligned, non-existing address or paging error",standard:"bsd"},{name:"SIGEMT",number:7,action:"terminate",description:"Command should be emulated but is not implemented",standard:"other"},{name:"SIGFPE",number:8,action:"core",description:"Floating point arithmetic error",standard:"ansi"},{name:"SIGKILL",number:9,action:"terminate",description:"Forced termination",standard:"posix",forced:!0},{name:"SIGUSR1",number:10,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGSEGV",number:11,action:"core",description:"Segmentation fault",standard:"ansi"},{name:"SIGUSR2",number:12,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGPIPE",number:13,action:"terminate",description:"Broken pipe or socket",standard:"posix"},{name:"SIGALRM",number:14,action:"terminate",description:"Timeout or timer",standard:"posix"},{name:"SIGTERM",number:15,action:"terminate",description:"Termination",standard:"ansi"},{name:"SIGSTKFLT",number:16,action:"terminate",description:"Stack is empty or overflowed",standard:"other"},{name:"SIGCHLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"posix"},{name:"SIGCLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"other"},{name:"SIGCONT",number:18,action:"unpause",description:"Unpaused",standard:"posix",forced:!0},{name:"SIGSTOP",number:19,action:"pause",description:"Paused",standard:"posix",forced:!0},{name:"SIGTSTP",number:20,action:"pause",description:'Paused using CTRL-Z or "suspend"',standard:"posix"},{name:"SIGTTIN",number:21,action:"pause",description:"Background process cannot read terminal input",standard:"posix"},{name:"SIGBREAK",number:21,action:"terminate",description:"User interruption with CTRL-BREAK",standard:"other"},{name:"SIGTTOU",number:22,action:"pause",description:"Background process cannot write to terminal output",standard:"posix"},{name:"SIGURG",number:23,action:"ignore",description:"Socket received out-of-band data",standard:"bsd"},{name:"SIGXCPU",number:24,action:"core",description:"Process timed out",standard:"bsd"},{name:"SIGXFSZ",number:25,action:"core",description:"File too big",standard:"bsd"},{name:"SIGVTALRM",number:26,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGPROF",number:27,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGWINCH",number:28,action:"ignore",description:"Terminal window size changed",standard:"bsd"},{name:"SIGIO",number:29,action:"terminate",description:"I/O is available",standard:"other"},{name:"SIGPOLL",number:29,action:"terminate",description:"Watched event",standard:"other"},{name:"SIGINFO",number:29,action:"ignore",description:"Request for process information",standard:"other"},{name:"SIGPWR",number:30,action:"terminate",description:"Device running out of power",standard:"systemv"},{name:"SIGSYS",number:31,action:"core",description:"Invalid system call",standard:"other"},{name:"SIGUNUSED",number:31,action:"terminate",description:"Invalid system call",standard:"other"}],vr=()=>{const e=Yu();return[...Vu,...e].map(Xu)},Xu=({name:e,number:t,description:n,action:r,forced:o=!1,standard:u})=>{const{signals:{[e]:s}}=Pt,a=s!==void 0;return{name:e,number:a?s:t,description:n,supported:a,action:r,forced:o,standard:u}},Ju=()=>{const e=vr();return Object.fromEntries(e.map(Zu))},Zu=({name:e,number:t,description:n,supported:r,action:o,forced:u,standard:s})=>[e,{name:e,number:t,description:n,supported:r,action:o,forced:u,standard:s}],Qu=Ju(),es=()=>{const e=vr(),t=Ar+1,n=Array.from({length:t},(r,o)=>ts(o,e));return Object.assign({},...n)},ts=(e,t)=>{const n=rs(e,t);if(n===void 0)return{};const{name:r,description:o,supported:u,action:s,forced:a,standard:i}=n;return{[e]:{name:r,number:e,description:o,supported:u,action:s,forced:a,standard:i}}},rs=(e,t)=>{const n=t.find(({name:r})=>Pt.signals[r]===e);return n!==void 0?n:t.find(r=>r.number===e)};es();const ns=({timedOut:e,timeout:t,errorCode:n,signal:r,signalDescription:o,exitCode:u,isCanceled:s})=>e?`timed out after ${t} milliseconds`:s?"was canceled":n!==void 0?`failed with ${n}`:r!==void 0?`was killed with ${r} (${o})`:u!==void 0?`failed with exit code ${u}`:"failed",Br=({stdout:e,stderr:t,all:n,error:r,signal:o,exitCode:u,command:s,escapedCommand:a,timedOut:i,isCanceled:l,killed:f,parsed:{options:{timeout:D}}})=>{u=u===null?void 0:u,o=o===null?void 0:o;const c=o===void 0?void 0:Qu[o].description,p=r&&r.code,m=`Command ${ns({timedOut:i,timeout:D,errorCode:p,signal:o,signalDescription:c,exitCode:u,isCanceled:l})}: ${s}`,h=Object.prototype.toString.call(r)==="[object Error]",C=h?`${m}
|
|
26
|
+
${r.message}`:m,b=[C,t,e].filter(Boolean).join(`
|
|
27
|
+
`);return h?(r.originalMessage=r.message,r.message=b):r=new Error(b),r.shortMessage=C,r.command=s,r.escapedCommand=a,r.exitCode=u,r.signal=o,r.signalDescription=c,r.stdout=e,r.stderr=t,n!==void 0&&(r.all=n),"bufferedData"in r&&delete r.bufferedData,r.failed=!0,r.timedOut=!!i,r.isCanceled=l,r.killed=f&&!i,r},we=["stdin","stdout","stderr"],os=e=>we.some(t=>e[t]!==void 0),us=e=>{if(!e)return;const{stdio:t}=e;if(t===void 0)return we.map(r=>e[r]);if(os(e))throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${we.map(r=>`\`${r}\``).join(", ")}`);if(typeof t=="string")return t;if(!Array.isArray(t))throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof t}\``);const n=Math.max(t.length,we.length);return Array.from({length:n},(r,o)=>t[o])};var Q={exports:{}},be={exports:{}};be.exports;var $r;function ss(){return $r||($r=1,function(e){e.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"],process.platform!=="win32"&&e.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT"),process.platform==="linux"&&e.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")}(be)),be.exports}var F=A.process;const U=function(e){return e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function"};if(!U(F))Q.exports=function(){return function(){}};else{var is=_t,ie=ss(),as=/^win/i.test(F.platform),Ae=Tt;typeof Ae!="function"&&(Ae=Ae.EventEmitter);var v;F.__signal_exit_emitter__?v=F.__signal_exit_emitter__:(v=F.__signal_exit_emitter__=new Ae,v.count=0,v.emitted={}),v.infinite||(v.setMaxListeners(1/0),v.infinite=!0),Q.exports=function(e,t){if(!U(A.process))return function(){};is.equal(typeof e,"function","a callback must be provided for exit handler"),ae===!1&&xr();var n="exit";t&&t.alwaysLast&&(n="afterexit");var r=function(){v.removeListener(n,e),v.listeners("exit").length===0&&v.listeners("afterexit").length===0&&ot()};return v.on(n,e),r};var ot=function(){!ae||!U(A.process)||(ae=!1,ie.forEach(function(t){try{F.removeListener(t,ut[t])}catch{}}),F.emit=st,F.reallyExit=Or,v.count-=1)};Q.exports.unload=ot;var ee=function(t,n,r){v.emitted[t]||(v.emitted[t]=!0,v.emit(t,n,r))},ut={};ie.forEach(function(e){ut[e]=function(){if(U(A.process)){var n=F.listeners(e);n.length===v.count&&(ot(),ee("exit",null,e),ee("afterexit",null,e),as&&e==="SIGHUP"&&(e="SIGINT"),F.kill(F.pid,e))}}}),Q.exports.signals=function(){return ie};var ae=!1,xr=function(){ae||!U(A.process)||(ae=!0,v.count+=1,ie=ie.filter(function(t){try{return F.on(t,ut[t]),!0}catch{return!1}}),F.emit=cs,F.reallyExit=Ds)};Q.exports.load=xr;var Or=F.reallyExit,Ds=function(t){U(A.process)&&(F.exitCode=t||0,ee("exit",F.exitCode,null),ee("afterexit",F.exitCode,null),Or.call(F,F.exitCode))},st=F.emit,cs=function(t,n){if(t==="exit"&&U(A.process)){n!==void 0&&(F.exitCode=n);var r=st.apply(this,arguments);return ee("exit",F.exitCode,null),ee("afterexit",F.exitCode,null),r}else return st.apply(this,arguments)}}var ls=Q.exports,fs=X(ls);const ps=1e3*5,ds=(e,t="SIGTERM",n={})=>{const r=e(t);return ms(e,t,n,r),r},ms=(e,t,n,r)=>{if(!hs(t,n,r))return;const o=Cs(n),u=setTimeout(()=>{e("SIGKILL")},o);u.unref&&u.unref()},hs=(e,{forceKillAfterTimeout:t},n)=>gs(e)&&t!==!1&&n,gs=e=>e===dn.constants.signals.SIGTERM||typeof e=="string"&&e.toUpperCase()==="SIGTERM",Cs=({forceKillAfterTimeout:e=!0})=>{if(e===!0)return ps;if(!Number.isFinite(e)||e<0)throw new TypeError(`Expected the \`forceKillAfterTimeout\` option to be a non-negative integer, got \`${e}\` (${typeof e})`);return e},Fs=(e,t)=>{e.kill()&&(t.isCanceled=!0)},Es=(e,t,n)=>{e.kill(t),n(Object.assign(new Error("Timed out"),{timedOut:!0,signal:t}))},ys=(e,{timeout:t,killSignal:n="SIGTERM"},r)=>{if(t===0||t===void 0)return r;let o;const u=new Promise((a,i)=>{o=setTimeout(()=>{Es(e,n,i)},t)}),s=r.finally(()=>{clearTimeout(o)});return Promise.race([u,s])},ws=({timeout:e})=>{if(e!==void 0&&(!Number.isFinite(e)||e<0))throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${e}\` (${typeof e})`)},bs=async(e,{cleanup:t,detached:n},r)=>{if(!t||n)return r;const o=fs(()=>{e.kill()});return r.finally(()=>{o()})};function As(e){return e!==null&&typeof e=="object"&&typeof e.pipe=="function"}var De={exports:{}};const{PassThrough:vs}=Te;var Bs=e=>{e={...e};const{array:t}=e;let{encoding:n}=e;const r=n==="buffer";let o=!1;t?o=!(n||r):n=n||"utf8",r&&(n=null);const u=new vs({objectMode:o});n&&u.setEncoding(n);let s=0;const a=[];return u.on("data",i=>{a.push(i),o?s=a.length:s+=i.length}),u.getBufferedValue=()=>t?a:r?Buffer.concat(a,s):a.join(""),u.getBufferedLength=()=>s,u};const{constants:$s}=mn,xs=Te,{promisify:Os}=Nt,Is=Bs,Ss=Os(xs.pipeline);class Ir extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}}async function it(e,t){if(!e)throw new Error("Expected a stream");t={maxBuffer:1/0,...t};const{maxBuffer:n}=t,r=Is(t);return await new Promise((o,u)=>{const s=a=>{a&&r.getBufferedLength()<=$s.MAX_LENGTH&&(a.bufferedData=r.getBufferedValue()),u(a)};(async()=>{try{await Ss(e,r),o()}catch(a){s(a)}})(),r.on("data",()=>{r.getBufferedLength()>n&&s(new Ir)})}),r.getBufferedValue()}De.exports=it,De.exports.buffer=(e,t)=>it(e,{...t,encoding:"buffer"}),De.exports.array=(e,t)=>it(e,{...t,array:!0}),De.exports.MaxBufferError=Ir;var Ms=De.exports,Sr=X(Ms);const{PassThrough:Ps}=Te;var _s=function(){var e=[],t=new Ps({objectMode:!0});return t.setMaxListeners(0),t.add=n,t.isEmpty=r,t.on("unpipe",o),Array.prototype.slice.call(arguments).forEach(n),t;function n(u){return Array.isArray(u)?(u.forEach(n),this):(e.push(u),u.once("end",o.bind(null,u)),u.once("error",t.emit.bind(t,"error")),u.pipe(t,{end:!1}),this)}function r(){return e.length==0}function o(u){e=e.filter(function(s){return s!==u}),!e.length&&t.readable&&t.end()}},Ts=X(_s);const Ns=(e,t)=>{t!==void 0&&(As(t)?t.pipe(e.stdin):e.stdin.end(t))},Ls=(e,{all:t})=>{if(!t||!e.stdout&&!e.stderr)return;const n=Ts();return e.stdout&&n.add(e.stdout),e.stderr&&n.add(e.stderr),n},at=async(e,t)=>{if(!(!e||t===void 0)){e.destroy();try{return await t}catch(n){return n.bufferedData}}},Dt=(e,{encoding:t,buffer:n,maxBuffer:r})=>{if(!(!e||!n))return t?Sr(e,{encoding:t,maxBuffer:r}):Sr.buffer(e,{maxBuffer:r})},Rs=async({stdout:e,stderr:t,all:n},{encoding:r,buffer:o,maxBuffer:u},s)=>{const a=Dt(e,{encoding:r,buffer:o,maxBuffer:u}),i=Dt(t,{encoding:r,buffer:o,maxBuffer:u}),l=Dt(n,{encoding:r,buffer:o,maxBuffer:u*2});try{return await Promise.all([s,a,i,l])}catch(f){return Promise.all([{error:f,signal:f.signal,timedOut:f.timedOut},at(e,a),at(t,i),at(n,l)])}},ks=(async()=>{})().constructor.prototype,js=["then","catch","finally"].map(e=>[e,Reflect.getOwnPropertyDescriptor(ks,e)]),Mr=(e,t)=>{for(const[n,r]of js){const o=typeof t=="function"?(...u)=>Reflect.apply(r.value,t(),u):r.value.bind(t);Reflect.defineProperty(e,n,{...r,value:o})}return e},Gs=e=>new Promise((t,n)=>{e.on("exit",(r,o)=>{t({exitCode:r,signal:o})}),e.on("error",r=>{n(r)}),e.stdin&&e.stdin.on("error",r=>{n(r)})}),Pr=(e,t=[])=>Array.isArray(t)?[e,...t]:[e],Hs=/^[\w.-]+$/,Us=/"/g,Ks=e=>typeof e!="string"||Hs.test(e)?e:`"${e.replace(Us,'\\"')}"`,qs=(e,t)=>Pr(e,t).join(" "),zs=(e,t)=>Pr(e,t).map(n=>Ks(n)).join(" "),Ys=1e3*1e3*100,Ws=({env:e,extendEnv:t,preferLocal:n,localDir:r,execPath:o})=>{const u=t?{..._.env,...e}:e;return n?Ru({env:u,cwd:r,execPath:o}):u},Vs=(e,t,n={})=>{const r=Tu._parse(e,t,n);return e=r.command,t=r.args,n=r.options,n={maxBuffer:Ys,buffer:!0,stripFinalNewline:!0,extendEnv:!0,preferLocal:!1,localDir:n.cwd||_.cwd(),execPath:_.execPath,encoding:"utf8",reject:!0,cleanup:!0,all:!1,windowsHide:!0,...n},n.env=Ws(n),n.stdio=us(n),_.platform==="win32"&&W.basename(e,".exe")==="cmd"&&t.unshift("/q"),{file:e,args:t,options:n,parsed:r}},ct=(e,t,n)=>typeof t!="string"&&!ln.isBuffer(t)?n===void 0?void 0:"":e.stripFinalNewline?Nu(t):t;function te(e,t,n){const r=Vs(e,t,n),o=qs(e,t),u=zs(e,t);ws(r.options);let s;try{s=Mt.spawn(r.file,r.args,r.options)}catch(p){const d=new Mt.ChildProcess,m=Promise.reject(Br({error:p,stdout:"",stderr:"",all:"",command:o,escapedCommand:u,parsed:r,timedOut:!1,isCanceled:!1,killed:!1}));return Mr(d,m)}const a=Gs(s),i=ys(s,r.options,a),l=bs(s,r.options,i),f={isCanceled:!1};s.kill=ds.bind(null,s.kill.bind(s)),s.cancel=Fs.bind(null,s,f);const c=wr(async()=>{const[{error:p,exitCode:d,signal:m,timedOut:h},C,b,O]=await Rs(s,r.options,l),S=ct(r.options,C),M=ct(r.options,b),oe=ct(r.options,O);if(p||d!==0||m!==null){const w=Br({error:p,exitCode:d,signal:m,stdout:S,stderr:M,all:oe,command:o,escapedCommand:u,parsed:r,timedOut:h,isCanceled:f.isCanceled||(r.options.signal?r.options.signal.aborted:!1),killed:s.killed});if(!r.options.reject)return w;throw w}return{command:o,escapedCommand:u,exitCode:0,stdout:S,stderr:M,all:oe,failed:!1,timedOut:!1,isCanceled:!1,killed:!1}});return Ns(s,r.options.input),s.all=Ls(s,r.options),Mr(s,c)}class K{static create(t,n){return new t(n)}}const Xs={"":"<commit message>",conventional:"<type>(<optional scope>): <description>",gitmoji:":<emoji>: <description>"},Js=e=>`The output response must be in ${e} commit type:
|
|
28
|
+
${Xs[e]}`,Zs={"":"",gitmoji:"",conventional:`Choose a type from the type-to-description JSON below that best describes the git diff:
|
|
29
|
+
${JSON.stringify({docs:"Documentation only changes",style:"Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)",refactor:"A code change that neither fixes a bug nor adds a feature",perf:"A code change that improves performance",test:"Adding missing tests or correcting existing tests",build:"Changes that affect the build system or external dependencies",ci:"Changes to our CI configuration files and scripts",chore:"Other changes that don't modify src or test files",revert:"Reverts a previous commit",feat:"A new feature",fix:"A bug fix"},null,2)}`},_r=(e,t,n,r)=>["Generate a concise git commit message written in present tense for the following code diff with the given specifications below:",`Message language: ${e}`,`Commit message must be a maximum of ${t} characters.`,"Please exclude anything unnecessary such as translation or explanation. Your entire response will be passed directly into git commit.",Zs[n],Js(n),r].filter(Boolean).join(`
|
|
30
|
+
`),Qs=e=>/^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\s\w\.\-\p{Extended_Pictographic}]+\))?(!)?: ([\s\w \p{Extended_Pictographic}])+([\s\S]*)/.test(e),ei=e=>/^\:\w+\: (.*)$/.test(e),R={OPEN_AI:"OPENAI_KEY",GEMINI:"GEMINI_KEY",ANTHROPIC:"ANTHROPIC_KEY",HUGGING:"HUGGING_COOKIE",CLOVA_X:"CLOVAX_COOKIE",MISTRAL:"MISTRAL_KEY",OLLAMA:"OLLAMA_MODEL"},Tr=Object.values(R).map(e=>e);class q{constructor(t){this.handleError$=n=>{let r="An error occurred";return n.message&&(r=n.message),T({name:`${this.errorPrefix} ${r}`,value:r,isError:!0})},this.serviceName="AI",this.errorPrefix="ERROR",this.colors={primary:""}}buildPrompt(t,n,r,o,u,s){return`${_r(t,o,u,s)}
|
|
31
|
+
Please just generate ${r} messages in numbered list format.
|
|
32
32
|
Here are git diff:
|
|
33
|
-
${
|
|
33
|
+
${n}`}extractCommitMessageFromRawText(t,n){switch(t){case"conventional":const r=new RegExp(/(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(.*\))?: .*$/),o=n.match(r);return o?o[0].replace(/: (\w)/,(a,i)=>`: ${i.toLowerCase()}`):"";case"gitmoji":const u=new RegExp(/\:\w+\: (.*)$/),s=n.match(u);return s?s[0]:"";default:return n}}sanitizeMessage(t,n,r){const o=t.split(`
|
|
34
|
+
`).map(u=>u.trim().replace(/^\d+\.\s/,"")).map(u=>u.replace(/`/g,"")).map(u=>this.extractCommitMessageFromRawText(n,u)).filter(u=>!!u);return o.length>r?o.slice(0,r):o}}var Nr="1.7.1",ti="A Reactive CLI that generates git commit messages with various AI";class y extends Error{}const lt=" ",ve=e=>{e instanceof Error&&(e instanceof y||(e.stack&&console.error(g.dim(e.stack.split(`
|
|
34
35
|
`).slice(1).join(`
|
|
35
36
|
`))),console.error(`
|
|
36
|
-
${
|
|
37
|
-
${
|
|
37
|
+
${lt}${g.dim(`aicommit2 v${Nr}`)}`),console.error(`
|
|
38
|
+
${lt}Please open a Bug report with the information above:`),console.error(`${lt}https://github.com/tak-bro/aicommit2/issues/new/choose`)))};var ft={},pt={exports:{}},ce={exports:{}},dt,Lr;function ri(){if(Lr)return dt;Lr=1;var e=1e3,t=e*60,n=t*60,r=n*24,o=r*7,u=r*365.25;dt=function(f,D){D=D||{};var c=typeof f;if(c==="string"&&f.length>0)return s(f);if(c==="number"&&isFinite(f))return D.long?i(f):a(f);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(f))};function s(f){if(f=String(f),!(f.length>100)){var D=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(f);if(D){var c=parseFloat(D[1]),p=(D[2]||"ms").toLowerCase();switch(p){case"years":case"year":case"yrs":case"yr":case"y":return c*u;case"weeks":case"week":case"w":return c*o;case"days":case"day":case"d":return c*r;case"hours":case"hour":case"hrs":case"hr":case"h":return c*n;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function a(f){var D=Math.abs(f);return D>=r?Math.round(f/r)+"d":D>=n?Math.round(f/n)+"h":D>=t?Math.round(f/t)+"m":D>=e?Math.round(f/e)+"s":f+"ms"}function i(f){var D=Math.abs(f);return D>=r?l(f,D,r,"day"):D>=n?l(f,D,n,"hour"):D>=t?l(f,D,t,"minute"):D>=e?l(f,D,e,"second"):f+" ms"}function l(f,D,c,p){var d=D>=c*1.5;return Math.round(f/c)+" "+p+(d?"s":"")}return dt}var mt,Rr;function kr(){if(Rr)return mt;Rr=1;function e(t){r.debug=r,r.default=r,r.coerce=l,r.disable=s,r.enable=u,r.enabled=a,r.humanize=ri(),r.destroy=f,Object.keys(t).forEach(D=>{r[D]=t[D]}),r.names=[],r.skips=[],r.formatters={};function n(D){let c=0;for(let p=0;p<D.length;p++)c=(c<<5)-c+D.charCodeAt(p),c|=0;return r.colors[Math.abs(c)%r.colors.length]}r.selectColor=n;function r(D){let c,p=null,d,m;function h(...C){if(!h.enabled)return;const b=h,O=Number(new Date),S=O-(c||O);b.diff=S,b.prev=c,b.curr=O,c=O,C[0]=r.coerce(C[0]),typeof C[0]!="string"&&C.unshift("%O");let M=0;C[0]=C[0].replace(/%([a-zA-Z%])/g,(w,Me)=>{if(w==="%%")return"%";M++;const St=r.formatters[Me];if(typeof St=="function"){const Dn=C[M];w=St.call(b,Dn),C.splice(M,1),M--}return w}),r.formatArgs.call(b,C),(b.log||r.log).apply(b,C)}return h.namespace=D,h.useColors=r.useColors(),h.color=r.selectColor(D),h.extend=o,h.destroy=r.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(d!==r.namespaces&&(d=r.namespaces,m=r.enabled(D)),m),set:C=>{p=C}}),typeof r.init=="function"&&r.init(h),h}function o(D,c){const p=r(this.namespace+(typeof c>"u"?":":c)+D);return p.log=this.log,p}function u(D){r.save(D),r.namespaces=D,r.names=[],r.skips=[];let c;const p=(typeof D=="string"?D:"").split(/[\s,]+/),d=p.length;for(c=0;c<d;c++)p[c]&&(D=p[c].replace(/\*/g,".*?"),D[0]==="-"?r.skips.push(new RegExp("^"+D.slice(1)+"$")):r.names.push(new RegExp("^"+D+"$")))}function s(){const D=[...r.names.map(i),...r.skips.map(i).map(c=>"-"+c)].join(",");return r.enable(""),D}function a(D){if(D[D.length-1]==="*")return!0;let c,p;for(c=0,p=r.skips.length;c<p;c++)if(r.skips[c].test(D))return!1;for(c=0,p=r.names.length;c<p;c++)if(r.names[c].test(D))return!0;return!1}function i(D){return D.toString().substring(2,D.toString().length-2).replace(/\.\*\?$/,"*")}function l(D){return D instanceof Error?D.stack||D.message:D}function f(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}return mt=e,mt}ce.exports;var jr;function ni(){return jr||(jr=1,function(e,t){t.formatArgs=r,t.save=o,t.load=u,t.useColors=n,t.storage=s(),t.destroy=(()=>{let i=!1;return()=>{i||(i=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(i){if(i[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+i[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const l="color: "+this.color;i.splice(1,0,l,"color: inherit");let f=0,D=0;i[0].replace(/%[a-zA-Z%]/g,c=>{c!=="%%"&&(f++,c==="%c"&&(D=f))}),i.splice(D,0,l)}t.log=console.debug||console.log||(()=>{});function o(i){try{i?t.storage.setItem("debug",i):t.storage.removeItem("debug")}catch{}}function u(){let i;try{i=t.storage.getItem("debug")}catch{}return!i&&typeof process<"u"&&"env"in process&&(i=process.env.DEBUG),i}function s(){try{return localStorage}catch{}}e.exports=kr()(t);const{formatters:a}=e.exports;a.j=function(i){try{return JSON.stringify(i)}catch(l){return"[UnexpectedJSONParseError]: "+l.message}}}(ce,ce.exports)),ce.exports}var le={exports:{}},ht,Gr;function oi(){return Gr||(Gr=1,ht=(e,t=process.argv)=>{const n=e.startsWith("-")?"":e.length===1?"-":"--",r=t.indexOf(n+e),o=t.indexOf("--");return r!==-1&&(o===-1||r<o)}),ht}var gt,Hr;function ui(){if(Hr)return gt;Hr=1;const e=Rt,t=Pe,n=oi(),{env:r}=process;let o;n("no-color")||n("no-colors")||n("color=false")||n("color=never")?o=0:(n("color")||n("colors")||n("color=true")||n("color=always"))&&(o=1),"FORCE_COLOR"in r&&(r.FORCE_COLOR==="true"?o=1:r.FORCE_COLOR==="false"?o=0:o=r.FORCE_COLOR.length===0?1:Math.min(parseInt(r.FORCE_COLOR,10),3));function u(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function s(i,l){if(o===0)return 0;if(n("color=16m")||n("color=full")||n("color=truecolor"))return 3;if(n("color=256"))return 2;if(i&&!l&&o===void 0)return 0;const f=o||0;if(r.TERM==="dumb")return f;if(process.platform==="win32"){const D=e.release().split(".");return Number(D[0])>=10&&Number(D[2])>=10586?Number(D[2])>=14931?3:2:1}if("CI"in r)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(D=>D in r)||r.CI_NAME==="codeship"?1:f;if("TEAMCITY_VERSION"in r)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(r.TEAMCITY_VERSION)?1:0;if(r.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in r){const D=parseInt((r.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(r.TERM_PROGRAM){case"iTerm.app":return D>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(r.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(r.TERM)||"COLORTERM"in r?1:f}function a(i){const l=s(i,i&&i.isTTY);return u(l)}return gt={supportsColor:a,stdout:u(s(!0,t.isatty(1))),stderr:u(s(!0,t.isatty(2)))},gt}le.exports;var Ur;function si(){return Ur||(Ur=1,function(e,t){const n=Pe,r=Nt;t.init=f,t.log=a,t.formatArgs=u,t.save=i,t.load=l,t.useColors=o,t.destroy=r.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{const c=ui();c&&(c.stderr||c).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}t.inspectOpts=Object.keys(process.env).filter(c=>/^debug_/i.test(c)).reduce((c,p)=>{const d=p.substring(6).toLowerCase().replace(/_([a-z])/g,(h,C)=>C.toUpperCase());let m=process.env[p];return/^(yes|on|true|enabled)$/i.test(m)?m=!0:/^(no|off|false|disabled)$/i.test(m)?m=!1:m==="null"?m=null:m=Number(m),c[d]=m,c},{});function o(){return"colors"in t.inspectOpts?!!t.inspectOpts.colors:n.isatty(process.stderr.fd)}function u(c){const{namespace:p,useColors:d}=this;if(d){const m=this.color,h="\x1B[3"+(m<8?m:"8;5;"+m),C=` ${h};1m${p} \x1B[0m`;c[0]=C+c[0].split(`
|
|
38
39
|
`).join(`
|
|
39
|
-
`+C),c.push(h+"m+"+e.exports.humanize(this.diff)+"\x1B[0m")}else c[0]=s()+p+" "+c[0]}function s(){return t.inspectOpts.hideDate?"":new Date().toISOString()+" "}function
|
|
40
|
-
`)}function
|
|
41
|
-
`).map(p=>p.trim()).join(" ")},D.O=function(c){return this.inspectOpts.colors=this.useColors,
|
|
42
|
-
`).some(t=>t.indexOf("(https.js:")!==-1||t.indexOf("node:https:")!==-1)}function Be(e,t){return new Be.Agent(e,t)}(function(e){class t extends
|
|
40
|
+
`+C),c.push(h+"m+"+e.exports.humanize(this.diff)+"\x1B[0m")}else c[0]=s()+p+" "+c[0]}function s(){return t.inspectOpts.hideDate?"":new Date().toISOString()+" "}function a(...c){return process.stderr.write(r.format(...c)+`
|
|
41
|
+
`)}function i(c){c?process.env.DEBUG=c:delete process.env.DEBUG}function l(){return process.env.DEBUG}function f(c){c.inspectOpts={};const p=Object.keys(t.inspectOpts);for(let d=0;d<p.length;d++)c.inspectOpts[p[d]]=t.inspectOpts[p[d]]}e.exports=kr()(t);const{formatters:D}=e.exports;D.o=function(c){return this.inspectOpts.colors=this.useColors,r.inspect(c,this.inspectOpts).split(`
|
|
42
|
+
`).map(p=>p.trim()).join(" ")},D.O=function(c){return this.inspectOpts.colors=this.useColors,r.inspect(c,this.inspectOpts)}}(le,le.exports)),le.exports}typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?pt.exports=ni():pt.exports=si();var Ct=pt.exports,Ft={};Object.defineProperty(Ft,"__esModule",{value:!0});function ii(e){return function(t,n){return new Promise((r,o)=>{e.call(this,t,n,(u,s)=>{u?o(u):r(s)})})}}Ft.default=ii;var Kr=A&&A.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};const ai=Tt,Di=Kr(Ct),ci=Kr(Ft),fe=Di.default("agent-base");function li(e){return!!e&&typeof e.addRequest=="function"}function Et(){const{stack:e}=new Error;return typeof e!="string"?!1:e.split(`
|
|
43
|
+
`).some(t=>t.indexOf("(https.js:")!==-1||t.indexOf("node:https:")!==-1)}function Be(e,t){return new Be.Agent(e,t)}(function(e){class t extends ai.EventEmitter{constructor(r,o){super();let u=o;typeof r=="function"?this.callback=r:r&&(u=r),this.timeout=null,u&&typeof u.timeout=="number"&&(this.timeout=u.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:Et()?443:80}set defaultPort(r){this.explicitDefaultPort=r}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:Et()?"https:":"http:"}set protocol(r){this.explicitProtocol=r}callback(r,o,u){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(r,o){const u=Object.assign({},o);typeof u.secureEndpoint!="boolean"&&(u.secureEndpoint=Et()),u.host==null&&(u.host="localhost"),u.port==null&&(u.port=u.secureEndpoint?443:80),u.protocol==null&&(u.protocol=u.secureEndpoint?"https:":"http:"),u.host&&u.path&&delete u.path,delete u.agent,delete u.hostname,delete u._defaultAgent,delete u.defaultPort,delete u.createConnection,r._last=!0,r.shouldKeepAlive=!1;let s=!1,a=null;const i=u.timeout||this.timeout,l=p=>{r._hadError||(r.emit("error",p),r._hadError=!0)},f=()=>{a=null,s=!0;const p=new Error(`A "socket" was not created for HTTP request before ${i}ms`);p.code="ETIMEOUT",l(p)},D=p=>{s||(a!==null&&(clearTimeout(a),a=null),l(p))},c=p=>{if(s)return;if(a!=null&&(clearTimeout(a),a=null),li(p)){fe("Callback returned another Agent instance %o",p.constructor.name),p.addRequest(r,u);return}if(p){p.once("free",()=>{this.freeSocket(p,u)}),r.onSocket(p);return}const d=new Error(`no Duplex stream was returned to agent-base for \`${r.method} ${r.path}\``);l(d)};if(typeof this.callback!="function"){l(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(fe("Converting legacy callback function to promise"),this.promisifiedCallback=ci.default(this.callback)):this.promisifiedCallback=this.callback),typeof i=="number"&&i>0&&(a=setTimeout(f,i)),"port"in u&&typeof u.port!="number"&&(u.port=Number(u.port));try{fe("Resolving socket for %o request: %o",u.protocol,`${r.method} ${r.path}`),Promise.resolve(this.promisifiedCallback(r,u)).then(c,D)}catch(p){Promise.reject(p).catch(D)}}freeSocket(r,o){fe("Freeing socket %o %o",r.constructor.name,o),r.destroy()}destroy(){fe("Destroying agent %o",this.constructor.name)}}e.Agent=t,e.prototype=e.Agent.prototype})(Be||(Be={}));var fi=Be,yt={},pi=A&&A.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yt,"__esModule",{value:!0});const di=pi(Ct),pe=di.default("https-proxy-agent:parse-proxy-response");function mi(e){return new Promise((t,n)=>{let r=0;const o=[];function u(){const D=e.read();D?f(D):e.once("readable",u)}function s(){e.removeListener("end",i),e.removeListener("error",l),e.removeListener("close",a),e.removeListener("readable",u)}function a(D){pe("onclose had error %o",D)}function i(){pe("onend")}function l(D){s(),pe("onerror %o",D),n(D)}function f(D){o.push(D),r+=D.length;const c=Buffer.concat(o,r);if(c.indexOf(`\r
|
|
43
44
|
\r
|
|
44
45
|
`)===-1){pe("have not received end of HTTP headers yet..."),u();return}const d=c.toString("ascii",0,c.indexOf(`\r
|
|
45
|
-
`)),m=+d.split(" ")[1];pe("got proxy server response: %o",d),t({statusCode:m,buffered:c})}e.on("error",
|
|
46
|
-
`;
|
|
47
|
-
`;const c=
|
|
48
|
-
`);const{statusCode:p,buffered:d}=yield c;if(p===200){if(t.once("socket",
|
|
46
|
+
`)),m=+d.split(" ")[1];pe("got proxy server response: %o",d),t({statusCode:m,buffered:c})}e.on("error",l),e.on("close",a),e.on("end",i),u()})}yt.default=mi;var hi=A&&A.__awaiter||function(e,t,n,r){function o(u){return u instanceof n?u:new n(function(s){s(u)})}return new(n||(n=Promise))(function(u,s){function a(f){try{l(r.next(f))}catch(D){s(D)}}function i(f){try{l(r.throw(f))}catch(D){s(D)}}function l(f){f.done?u(f.value):o(f.value).then(a,i)}l((r=r.apply(e,t||[])).next())})},re=A&&A.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ft,"__esModule",{value:!0});const qr=re(bn),zr=re(An),gi=re(vn),Ci=re(_t),Fi=re(Ct),Ei=fi,yi=re(yt),de=Fi.default("https-proxy-agent:agent");class wi extends Ei.Agent{constructor(t){let n;if(typeof t=="string"?n=gi.default.parse(t):n=t,!n)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");de("creating new HttpsProxyAgent instance: %o",n),super(n);const r=Object.assign({},n);this.secureProxy=n.secureProxy||vi(r.protocol),r.host=r.hostname||r.host,typeof r.port=="string"&&(r.port=parseInt(r.port,10)),!r.port&&r.host&&(r.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in r)&&(r.ALPNProtocols=["http 1.1"]),r.host&&r.path&&(delete r.path,delete r.pathname),this.proxy=r}callback(t,n){return hi(this,void 0,void 0,function*(){const{proxy:r,secureProxy:o}=this;let u;o?(de("Creating `tls.Socket`: %o",r),u=zr.default.connect(r)):(de("Creating `net.Socket`: %o",r),u=qr.default.connect(r));const s=Object.assign({},r.headers);let i=`CONNECT ${`${n.host}:${n.port}`} HTTP/1.1\r
|
|
47
|
+
`;r.auth&&(s["Proxy-Authorization"]=`Basic ${Buffer.from(r.auth).toString("base64")}`);let{host:l,port:f,secureEndpoint:D}=n;Ai(f,D)||(l+=`:${f}`),s.Host=l,s.Connection="close";for(const h of Object.keys(s))i+=`${h}: ${s[h]}\r
|
|
48
|
+
`;const c=yi.default(u);u.write(`${i}\r
|
|
49
|
+
`);const{statusCode:p,buffered:d}=yield c;if(p===200){if(t.once("socket",bi),n.secureEndpoint){de("Upgrading socket connection to TLS");const h=n.servername||n.host;return zr.default.connect(Object.assign(Object.assign({},Bi(n,"host","hostname","path","port")),{socket:u,servername:h}))}return u}u.destroy();const m=new qr.default.Socket({writable:!1});return m.readable=!0,t.once("socket",h=>{de("replaying proxy buffer for failed request"),Ci.default(h.listenerCount("data")>0),h.push(d),h.push(null)}),m})}}ft.default=wi;function bi(e){e.resume()}function Ai(e,t){return!!(!t&&e===80||t&&e===443)}function vi(e){return typeof e=="string"?/^https:?$/i.test(e):!1}function Bi(e,...t){const n={};let r;for(r in e)t.includes(r)||(n[r]=e[r]);return n}var $i=A&&A.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};const wt=$i(ft);function bt(e){return new wt.default(e)}(function(e){e.HttpsProxyAgent=wt.default,e.prototype=wt.default.prototype})(bt||(bt={}));var xi=bt,Oi=X(xi);const Ii=async(e,t,n,r,o,u,s)=>new Promise((a,i)=>{const l=JSON.stringify(r),D=(e.protocol.includes("https")?wn:yn).request({port:s||void 0,hostname:e.hostname,path:t,method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(l),...n},timeout:o,agent:u?Oi(u):void 0},c=>{const p=[];c.on("data",d=>p.push(d)),c.on("end",()=>{a({request:D,response:c,data:Buffer.concat(p).toString()})})});D.on("error",i),D.on("timeout",()=>{D.destroy(),i(new y(`Time out error: request took over ${o}ms. Try increasing the \`timeout\` config`))}),D.write(l),D.end()}),Si=async(e,t,n,r,o)=>{const u=new URL(e),{response:s,data:a}=await Ii(u,"/v1/chat/completions",{Authorization:`Bearer ${t}`},n,r,o);if(!s.statusCode||s.statusCode<200||s.statusCode>299){let i=`OpenAI API Error: ${s.statusCode} - ${s.statusMessage}`;throw a&&(i+=`
|
|
49
50
|
|
|
50
|
-
${
|
|
51
|
+
${a}`),s.statusCode===500&&(i+=`
|
|
51
52
|
|
|
52
|
-
Check the API status: https://status.openai.com`),new y(
|
|
53
|
-
`).map(r=>r.trim().replace(/^\d+\.\s/,"")).map(r=>r.replace(/`/g,"")).map(r=>this.extractCommitMessageFromRawText(this.params.config.type,r)).filter(r=>!!r)}}const{hasOwnProperty:bt}=Object.prototype,$e=typeof process<"u"&&process.platform==="win32"?`\r
|
|
53
|
+
Check the API status: https://status.openai.com`),new y(i)}return JSON.parse(a)},Mi=e=>e.trim().replace(/[\n\r]/g,"").replace(/(\w)\.$/,"$1"),z=e=>Array.from(new Set(e)),Pi=async(e,t,n,r,o,u,s,a,i,l,f,D,c)=>{try{const p=await Si(e,t,{model:n,messages:[{role:"system",content:_r(r,s,a,D)},{role:"user",content:o}],temperature:f,top_p:1,frequency_penalty:0,presence_penalty:0,max_tokens:l,stream:!1,n:u},i,c);return z(p.choices.filter(d=>d.message?.content).map(d=>Mi(d.message.content)).map(d=>{if(a==="conventional"){const m=/: (\w)/;return d.replace(m,(h,C)=>`: ${C.toLowerCase()}`)}return d}).filter(d=>{switch(a){case"gitmoji":return ei(d);case"conventional":return Qs(d);case"":default:return!0}}))}catch(p){const d=p;throw d.code==="ENOTFOUND"?new y(`Error connecting to ${d.hostname} (${d.syscall})`):d}};class _i extends q{constructor(t){super(t),this.params=t,this.handleError$=n=>{const r=n.error?.error?.message?.replace(/(\r\n|\n|\r)/gm,"")||"An error occurred";return T({name:`${this.errorPrefix} ${r}`,value:r,isError:!0})},this.colors={primary:"#AE5630",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[Anthropic]"),this.errorPrefix=g.red.bold("[Anthropic]"),this.anthropic=new Re({apiKey:this.params.config.ANTHROPIC_KEY})}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:n,generate:r,type:o,prompt:u}=this.params.config,s=this.params.config["max-length"],a=this.buildPrompt(n,t,r,s,o,u),l=(await this.anthropic.completions.create({model:this.params.config.ANTHROPIC_MODEL,max_tokens_to_sample:this.params.config["max-tokens"],temperature:this.params.config.temperature,prompt:`${Re.HUMAN_PROMPT} ${a}${Re.AI_PROMPT}`})).completion;return z(this.sanitizeMessage(l,this.params.config.type,r))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}}const{hasOwnProperty:At}=Object.prototype,$e=typeof process<"u"&&process.platform==="win32"?`\r
|
|
54
54
|
`:`
|
|
55
|
-
`,At=(e,t)=>{const r=[];let n="";typeof t=="string"?t={section:t,whitespace:!1}:(t=t||Object.create(null),t.whitespace=t.whitespace===!0);const o=t.whitespace?" = ":"=";for(const u of Object.keys(e)){const s=e[u];if(s&&Array.isArray(s))for(const i of s)n+=oe(u+"[]")+o+oe(i)+$e;else s&&typeof s=="object"?r.push(u):n+=oe(u)+o+oe(s)+$e}t.section&&n.length&&(n="["+oe(t.section)+"]"+$e+n);for(const u of r){const s=zr(u).join("\\."),i=(t.section?t.section+".":"")+s,{whitespace:a}=t,f=At(e[u],{section:i,whitespace:a});n.length&&f.length&&(n+=$e),n+=f}return n},zr=e=>e.replace(/\1/g,"LITERAL\\1LITERAL").replace(/\\\./g,"").split(/\./).map(t=>t.replace(/\1/g,"\\.").replace(/\2LITERAL\\1LITERAL\2/g,"")),Yr=e=>{const t=Object.create(null);let r=t,n=null;const o=/^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i,u=e.split(/[\r\n]+/g);for(const i of u){if(!i||i.match(/^\s*[;#]/))continue;const a=i.match(o);if(!a)continue;if(a[1]!==void 0){if(n=xe(a[1]),n==="__proto__"){r=Object.create(null);continue}r=t[n]=t[n]||Object.create(null);continue}const f=xe(a[2]),l=f.length>2&&f.slice(-2)==="[]",D=l?f.slice(0,-2):f;if(D==="__proto__")continue;const c=a[3]?xe(a[4]):!0,p=c==="true"||c==="false"||c==="null"?JSON.parse(c):c;l&&(bt.call(r,D)?Array.isArray(r[D])||(r[D]=[r[D]]):r[D]=[]),Array.isArray(r[D])?r[D].push(p):r[D]=p}const s=[];for(const i of Object.keys(t)){if(!bt.call(t,i)||typeof t[i]!="object"||Array.isArray(t[i]))continue;const a=zr(i);r=t;const f=a.pop(),l=f.replace(/\\\./g,".");for(const D of a)D!=="__proto__"&&((!bt.call(r,D)||typeof r[D]!="object")&&(r[D]=Object.create(null)),r=r[D]);r===t&&l===f||(r[l]=t[i],s.push(i))}for(const i of s)delete t[i];return t},Wr=e=>e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"),oe=e=>typeof e!="string"||e.match(/[=\r\n]/)||e.match(/^\[/)||e.length>1&&Wr(e)||e!==e.trim()?JSON.stringify(e):e.split(";").join("\\;").split("#").join("\\#"),xe=(e,t)=>{if(e=(e||"").trim(),Wr(e)){e.charAt(0)==="'"&&(e=e.slice(1,-1));try{e=JSON.parse(e)}catch{}}else{let r=!1,n="";for(let o=0,u=e.length;o<u;o++){const s=e.charAt(o);if(r)"\\;#".indexOf(s)!==-1?n+=s:n+="\\"+s,r=!1;else{if(";#".indexOf(s)!==-1)break;s==="\\"?r=!0:n+=s}}return r&&(n+="\\"),n.trim()}return e};var Ti={parse:Yr,decode:Yr,stringify:At,encode:At,safe:oe,unsafe:xe},Vr=J(Ti);const Xr=e=>O.lstat(e).then(()=>!0,()=>!1),_i=["","conventional","gitmoji"],{hasOwnProperty:Ni}=Object.prototype,Y=(e,t)=>Ni.call(e,t),E=(e,t,r)=>{if(!t)throw new y(`Invalid config property ${e}: ${r}`)},Oe={OPENAI_KEY(e){return e?(E("OPENAI_KEY",e.startsWith("sk-"),'Must start with "sk-"'),e):""},OPENAI_MODEL(e){return!e||e.length===0?"gpt-3.5-turbo":e},HUGGING_COOKIE(e){return e||""},HUGGING_MODEL(e){return!e||e.length===0?"mistralai/Mixtral-8x7B-Instruct-v0.1":(E("HUGGING_MODEL",["mistralai/Mixtral-8x7B-Instruct-v0.1","meta-llama/Llama-2-70b-chat-hf","NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO","codellama/CodeLlama-70b-Instruct-hf","mistralai/Mistral-7B-Instruct-v0.2","openchat/openchat-3.5-0106"].includes(e),"Invalid model type of hugging"),e)},CLOVAX_COOKIE(e){return e||""},GEMINI_KEY(e){return e||""},GEMINI_MODEL(e){return!e||e.length===0?"gemini-pro":(E("GEMINI_MODEL",["gemini-pro"].includes(e),"Invalid model type of Gemini"),e)},ANTHROPIC_MODEL(e){return!e||e.length===0?"claude-2.1":(E("ANTHROPIC_MODEL",["claude-2.1","claude-2.0","claude-instant-1.2"].includes(e),"Invalid model type of Anthropic"),e)},ANTHROPIC_KEY(e){return e||""},MISTRAL_KEY(e){return e||""},MISTRAL_MODEL(e){return!e||e.length===0?"mistral-tiny":(E("MISTRAL_MODEL",["open-mistral-7b","mistral-tiny-2312","mistral-tiny","open-mixtral-8x7b","mistral-small-2312","mistral-small","mistral-small-2402","mistral-small-latest","mistral-medium-latest","mistral-medium-2312","mistral-medium","mistral-large-latest","mistral-large-2402","mistral-embed"].includes(e),"Invalid model type of Mistral AI"),e)},OLLAMA_MODEL(e){return e||""},OLLAMA_HOST(e){return e||"http://localhost:11434"},OLLAMA_TIMEOUT(e){if(!e)return 1e5;E("OLLAMA_TIMEOUT",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("OLLAMA_TIMEOUT",t>=500,"Must be greater than 500ms"),t},confirm(e){return e?typeof e=="boolean"?e:(E("confirm",/^(?:true|false)$/.test(e),"Must be a boolean"),e==="true"):!1},locale(e){return e?(E("locale",e,"Cannot be empty"),E("locale",/^[a-z-]+$/i.test(e),"Must be a valid locale (letters and dashes/underscores). You can consult the list of codes in: https://wikipedia.org/wiki/List_of_ISO_639-1_codes"),e):"en"},generate(e){if(!e)return 1;E("generate",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("generate",t>0,"Must be greater than 0"),E("generate",t<=5,"Must be less or equal to 5"),t},type(e){return e?(E("type",_i.includes(e),"Invalid commit type"),e):"conventional"},proxy(e){if(!(!e||e.length===0))return E("proxy",/^https?:\/\//.test(e),"Must be a valid URL"),e},timeout(e){if(!e)return 1e4;E("timeout",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("timeout",t>=500,"Must be greater than 500ms"),t},temperature(e){if(!e)return .7;E("temperature",/^(2|\d)(\.\d{1,2})?$/.test(e),"Must be decimal between 0 and 2");const t=Number(e);return E("temperature",t>0,"Must be greater than 0"),E("temperature",t<=2,"Must be less than or equal to 2"),t},"max-length"(e){if(!e)return 50;E("max-length",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("max-length",t>=20,"Must be greater than 20 characters"),t},"max-tokens"(e){return e?(E("max-tokens",/^\d+$/.test(e),"Must be an integer"),Number(e)):200}},vt=X.join(Rt.homedir(),".aicommit2"),Jr=async()=>{if(!await Xr(vt))return Object.create(null);const t=await O.readFile(vt,"utf8");return Vr.parse(t)},Bt=async(e,t)=>{const r=await Jr(),n={};for(const o of Object.keys(Oe)){const u=Oe[o],s=e?.[o]??r[o];if(t)try{n[o]=u(s)}catch{}else n[o]=u(s)}return n},Ri=async e=>{const t=await Jr();for(const[r,n]of e){if(!Y(Oe,r))throw new y(`Invalid config property: ${r}`);const o=Oe[r](n);t[r]=o}await O.writeFile(vt,Vr.stringify(t),"utf8")};class x{constructor(t={}){if(!t.method)throw new Error("method should be defined!");if(!t.baseURL)throw new Error("baseURL should be defined!");this.config={...t},this.axiosInstance=On.create(this.config)}setHeaders(t){return this.config.headers=t,this}setParams(t){return this.config.params=t,this}setBody(t){return this.config.data=t,this}setMethod(t){return this.config.method=t,this}async execute(){try{return await this.axiosInstance.request(this.config)}catch(t){throw t}}}class Li extends q{constructor(t){super(t),this.params=t,this.host="https://clova-x.naver.com",this.cookie="",this.colors={primary:"#00db9b",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[CLOVA X]"),this.errorPrefix=g.red.bold("[CLOVA X]"),this.cookie=this.params.config.CLOVAX_COOKIE}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),R(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const{locale:t,generate:r,type:n}=this.params.config,o=this.params.config["max-length"],u=this.params.stagedDiff.diff,s=this.buildPrompt(t,u,r,o,n);await this.getAllConversationIds();const i=await this.sendMessage(s),{conversationId:a,allText:f}=this.parseSendMessageResult(i);return await this.deleteConversation(a),z(this.sanitizeMessage(f))}catch(t){const r=t;throw r.code==="ENOTFOUND"?new y(`Error connecting to ${r.hostname} (${r.syscall})`):r}}async getAllConversationIds(){const r=(await new x({method:"GET",baseURL:`${this.host}/api/v1/conversations`,timeout:this.params.config.timeout}).setHeaders({Cookie:this.cookie}).setParams({page:0,size:50,sort:"turnUpdatedTime,DESC"}).execute()).data;if(!r||!r.content)throw new Error("No content on conversations ClovaX");return r.content.length===0?[]:r.content.map(o=>o.conversationId||"").filter(o=>!!o)}async sendMessage(t){const r={text:t,action:"new"},n=new $n;return n.set("form",new xn([JSON.stringify(r)],{type:"application/json"})),(await new x({method:"POST",baseURL:`${this.host}/api/v1/generate`,timeout:this.params.config.timeout}).setHeaders({"Content-Type":"multipart/form-data","Content-Length":this.getContentLength(n),Cookie:this.cookie}).setBody(n).execute()).data}parseSendMessageResult(t){const r=/data:{(.*)}/g,n=t.match(r);if(!n)throw new Error("Failed to extract object from generated text");const o=n.map(a=>a.trim().replace(/data:/g,""));if(!o||o.length===0)throw new Error("Cannot extract message");let u="",s="",i="";if(o.map(a=>{try{return JSON.parse(a)}catch{return null}}).filter(a=>!!a).forEach(a=>{if(Y(a,"conversationId")){u=a.conversationId;return}if(Y(a,"text")){s+=a.text;return}if(Y(a,"error")){i=`${a.error}: ${a.type||a.message||""}`;return}}),i)throw new Error(i);if(!u)throw new Error("No conversationId!");if(!s)throw new Error("No allText!");return{conversationId:u,allText:s}}sanitizeMessage(t){return t.split(`
|
|
56
|
-
`)
|
|
57
|
-
`)
|
|
58
|
-
`).map(u=>u.trim().replace(/^\d+\.\s/,"")).map(u=>u.replace(/`/g,"")).map(u=>this.extractCommitMessageFromRawText(this.params.config.type,u)).filter(u=>!!u)}async prepareNewConversation(){return(await new x({method:"POST",baseURL:`${this.host}/api/event`}).setHeaders({"content-type":"application/json",Cookie:this.cookie}).setBody({d:"huggingface.co",n:"pageview",r:"https://huggingface.co/chat/",u:"https://huggingface.co/chat/"}).execute()).data}async prepareConversationEvent(t){return(await new x({method:"POST",baseURL:`${this.host}/api/event`}).setHeaders({"content-type":"application/json",Cookie:this.cookie}).setBody({d:"huggingface.co",n:"pageview",r:"https://huggingface.co/chat/",u:`https://huggingface.co/chat/conversation/${t}`}).execute()).data}async getNewConversationId(){const t=await new x({method:"POST",baseURL:`${this.host}/chat/conversation`,timeout:this.params.config.timeout}).setHeaders({"content-type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Host:"huggingface.co",Origin:"https://huggingface.co"}).setBody({model:this.params.config.HUGGING_MODEL,preprompt:""}).execute();if(!t.data||!t.data.conversationId)throw new Error("No conversationId on Hugging service");return t.data}async getConversationInfo(t){const n=(await new x({method:"GET",baseURL:`${this.host}/chat/conversation/${t}/__data.json`,timeout:this.params.config.timeout}).setParams({"x-sveltekit-invalidated":"11"}).setHeaders({"Content-Type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Referer:"https://huggingface.co/chat/"}).execute()).data;if(!n||!n.nodes||n.nodes.length===0)throw new Error("No Nodes on conversation info");if(!n.nodes[1]||!n.nodes[1].data||n.nodes[1].data.length===0||!n.nodes[1].data[3])throw new Error("No data on node");const s=n.nodes[1]?.data[3];return{conversationInfo:n,lastMessageId:s}}async deleteConversation(t){return await new x({method:"DELETE",baseURL:`${this.host}/chat/conversation/${t}`,timeout:this.params.config.timeout}).setHeaders({Cookie:this.cookie}).execute(),(await new x({method:"GET",baseURL:`${this.host}/chat/__data.json`,timeout:this.params.config.timeout}).setParams({"x-sveltekit-trailing-slash":"1","x-sveltekit-invalidated":"10"}).setHeaders({"Content-Type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Referer:"https://huggingface.co/chat/"}).execute()).data}async sendMessage(t,r,n){return(await new x({method:"POST",baseURL:`${this.host}/chat/conversation/${t}`,timeout:this.params.config.timeout}).setHeaders({"content-type":"application/json",Cookie:this.cookie,authority:"huggingface.co",accept:"*/*",origin:"https://huggingface.co"}).setBody({files:[],id:n,inputs:r,is_continue:!1,is_retry:!1,use_cache:!1}).execute()).data}}const Gi=(e,t)=>{const r=Math.ceil(e),n=Math.floor(t);return Math.floor(Math.random()*(n-r+1))+r};class Hi extends q{constructor(t){super(t),this.params=t,this.host="https://api.mistral.ai",this.apiKey="",this.handleError$=r=>{const n=r.message?.replace(/(\r\n|\n|\r)/gm,"")||"An error occurred";return _({name:`${this.errorPrefix} ${n}`,value:n,isError:!0})},this.colors={primary:"#FC4A0A",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[MistralAI]"),this.errorPrefix=g.red.bold("[MistralAI]"),this.apiKey=this.params.config.MISTRAL_KEY}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),R(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:r,generate:n,type:o}=this.params.config,u=this.params.config["max-length"],s=this.buildPrompt(r,t,n,u,o);await this.checkAvailableModels();const i=await this.createChatCompletions(s);return z(this.sanitizeMessage(i))}catch(t){const r=t;throw r.code==="ENOTFOUND"?new y(`Error connecting to ${r.hostname} (${r.syscall})`):r}}async checkAvailableModels(){if((await this.getAvailableModels()).includes(this.params.config.MISTRAL_MODEL))return!0;throw new Error("Invalid model type of Mistral AI")}async getAvailableModels(){return(await new x({method:"GET",baseURL:`${this.host}/v1/models`,timeout:this.params.config.timeout}).setHeaders({Authorization:`Bearer ${this.apiKey}`,"content-type":"application/json"}).execute()).data.data.filter(r=>r.object==="model").map(r=>r.id)}async createChatCompletions(t){const n=(await new x({method:"POST",baseURL:`${this.host}/v1/chat/completions`,timeout:this.params.config.timeout}).setHeaders({Authorization:`Bearer ${this.apiKey}`,"content-type":"application/json"}).setBody({model:this.params.config.MISTRAL_MODEL,messages:[{role:"user",content:t}],temperature:this.params.config.temperature,top_p:1,max_tokens:this.params.config["max-tokens"],stream:!1,safe_prompt:!1,random_seed:Gi(10,1e3)}).execute()).data;if(!n.choices||n.choices.length===0||!n.choices[0].message?.content)throw new Error("No Content on response. Please open a Bug report");return n.choices[0].message.content}sanitizeMessage(t){return t.split(`
|
|
59
|
-
`).map(r=>r.trim().replace(/^\d+\.\s/,"")).map(r=>r.replace(/`/g,"")).map(r=>this.extractCommitMessageFromRawText(this.params.config.type,r)).filter(r=>!!r)}}class Ui extends q{constructor(t){super(t),this.params=t,this.host="http://localhost:11434",this.model="",this.handleError$=r=>{if(r.response.data?.error)return _({name:`${this.errorPrefix} ${r.response.data?.error}`,value:r.response.data?.error,isError:!0});const n=r.message?.replace(/(\r\n|\n|\r)/gm,"")||"An error occurred";return _({name:`${this.errorPrefix} ${n}`,value:n,isError:!0})},this.colors={primary:"#FFF",secondary:"#000"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[Ollama]"),this.errorPrefix=g.red.bold("[Ollama]"),this.model=this.params.config.OLLAMA_MODEL,this.host=this.params.config.OLLAMA_HOST||"http://localhost:11434"}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),R(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:r,generate:n,type:o}=this.params.config,u=this.params.config["max-length"],s=this.buildPrompt(r,t,n,u,o);await this.checkIsAvailableOllama();const i=await this.createChatCompletions(s);return z(this.sanitizeMessage(i))}catch(t){const r=t;throw r.code==="ENOTFOUND"?new y(`Error connecting to ${r.hostname} (${r.syscall})`):r}}async checkIsAvailableOllama(){try{return(await new x({method:"GET",baseURL:`${this.host}`,timeout:this.params.config.OLLAMA_TIMEOUT}).execute()).data}catch(t){throw t.code==="ECONNREFUSED"?new y(`Error connecting to ${this.host}. Please run Ollama or check host`):t}}async createChatCompletions(t){return(await new x({method:"POST",baseURL:`${this.host}/api/generate`,timeout:this.params.config.OLLAMA_TIMEOUT}).setBody({model:this.params.config.OLLAMA_MODEL,prompt:t,stream:!1,options:{temperature:this.params.config.temperature,top_p:1}}).execute()).data.response}sanitizeMessage(t){return t.split(`
|
|
60
|
-
`).map(r=>r.trim().replace(/^\d+\.\s/,"")).map(r=>r.replace(/`/g,"")).map(r=>this.extractCommitMessageFromRawText(this.params.config.type,r)).filter(r=>!!r)}}class Ki extends q{constructor(t){super(t),this.params=t,this.handleError$=r=>{let n="An error occurred";if(r.message){n=r.message.split(`
|
|
61
|
-
`)[0];const o=this.extractJSONFromError(r.message);n+=`: ${o.error.message}`}return _({name:`${this.errorPrefix} ${n}`,value:n,isError:!0})},this.colors={primary:"#74AA9C",secondary:"#FFF"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[ChatGPT]"),this.errorPrefix=g.red.bold("[ChatGPT]")}generateCommitMessage$(){return G(Si(this.params.config.OPENAI_KEY,this.params.config.OPENAI_MODEL,this.params.config.locale,this.params.stagedDiff.diff,this.params.config.generate,this.params.config["max-length"],this.params.config.type,this.params.config.timeout,this.params.config["max-tokens"],this.params.config.temperature,this.params.config.proxy)).pipe(k(t=>N(t)),R(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}extractJSONFromError(t){const r=/[{[]{1}([,:{}[\]0-9.\-+Eaeflnr-u \n\r\t]|".*?")+[}\]]{1}/gis,n=t.match(r);return n?Object.assign({},...n.map(o=>JSON.parse(o))):{error:{message:"Unknown error"}}}}class Zr{constructor(t,r){this.config=t,this.stagedDiff=r}createAIRequests$(t){return N(t).pipe(hn(r=>{const n={config:this.config,stagedDiff:this.stagedDiff};switch(r){case L.OPEN_AI:return K.create(Ki,n).generateCommitMessage$();case L.GEMINI:return K.create(ki,n).generateCommitMessage$();case L.ANTHROPIC:return K.create(Pi,n).generateCommitMessage$();case L.HUGGING:return K.create(ji,n).generateCommitMessage$();case L.CLOVA_X:return K.create(Li,n).generateCommitMessage$();case L.MISTRAL:return K.create(Hi,n).generateCommitMessage$();case L.OLLAMA:return K.create(Ui,n).generateCommitMessage$();default:const o=g.red.bold(`[${r}]`);return _({name:o+" Invalid AI type",value:"Invalid AI type",isError:!0})}}))}}const Qr=async()=>{const{stdout:e,failed:t}=await re("git",["rev-parse","--show-toplevel"],{reject:!1});if(t)throw new y("The current directory must be a Git repository!");return e},$t=e=>`:(exclude)${e}`,en=["package-lock.json","pnpm-lock.yaml","*.lock"].map($t),tn=async e=>{const t=["diff","--cached","--diff-algorithm=minimal"],{stdout:r}=await re("git",[...t,"--name-only",...en,...e?e.map($t):[]]);if(!r)return null;const{stdout:n}=await re("git",[...t,...en,...e?e.map($t):[]]);return{files:r.split(`
|
|
62
|
-
`),diff:n}},qi=e=>`Detected ${e.length.toLocaleString()} staged file${e.length>1?"s":""}`;class Ie{constructor(){this.title="aicommit2"}printTitle(){console.log(Mn.textSync(this.title,{font:"Small"}))}displaySpinner(t){return Ne(t).start()}stopSpinner(t){t.stop(),t.clear()}printStagedFiles(t){console.log(g.bold.green("\u2714 ")+g.bold(`${qi(t.files)}:`)),console.log(`${t.files.map(r=>` ${r}`).join(`
|
|
55
|
+
`,vt=(e,t)=>{const n=[];let r="";typeof t=="string"?t={section:t,whitespace:!1}:(t=t||Object.create(null),t.whitespace=t.whitespace===!0);const o=t.whitespace?" = ":"=";for(const u of Object.keys(e)){const s=e[u];if(s&&Array.isArray(s))for(const a of s)r+=ne(u+"[]")+o+ne(a)+$e;else s&&typeof s=="object"?n.push(u):r+=ne(u)+o+ne(s)+$e}t.section&&r.length&&(r="["+ne(t.section)+"]"+$e+r);for(const u of n){const s=Yr(u).join("\\."),a=(t.section?t.section+".":"")+s,{whitespace:i}=t,l=vt(e[u],{section:a,whitespace:i});r.length&&l.length&&(r+=$e),r+=l}return r},Yr=e=>e.replace(/\1/g,"LITERAL\\1LITERAL").replace(/\\\./g,"").split(/\./).map(t=>t.replace(/\1/g,"\\.").replace(/\2LITERAL\\1LITERAL\2/g,"")),Wr=e=>{const t=Object.create(null);let n=t,r=null;const o=/^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i,u=e.split(/[\r\n]+/g);for(const a of u){if(!a||a.match(/^\s*[;#]/))continue;const i=a.match(o);if(!i)continue;if(i[1]!==void 0){if(r=xe(i[1]),r==="__proto__"){n=Object.create(null);continue}n=t[r]=t[r]||Object.create(null);continue}const l=xe(i[2]),f=l.length>2&&l.slice(-2)==="[]",D=f?l.slice(0,-2):l;if(D==="__proto__")continue;const c=i[3]?xe(i[4]):!0,p=c==="true"||c==="false"||c==="null"?JSON.parse(c):c;f&&(At.call(n,D)?Array.isArray(n[D])||(n[D]=[n[D]]):n[D]=[]),Array.isArray(n[D])?n[D].push(p):n[D]=p}const s=[];for(const a of Object.keys(t)){if(!At.call(t,a)||typeof t[a]!="object"||Array.isArray(t[a]))continue;const i=Yr(a);n=t;const l=i.pop(),f=l.replace(/\\\./g,".");for(const D of i)D!=="__proto__"&&((!At.call(n,D)||typeof n[D]!="object")&&(n[D]=Object.create(null)),n=n[D]);n===t&&f===l||(n[f]=t[a],s.push(a))}for(const a of s)delete t[a];return t},Vr=e=>e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"),ne=e=>typeof e!="string"||e.match(/[=\r\n]/)||e.match(/^\[/)||e.length>1&&Vr(e)||e!==e.trim()?JSON.stringify(e):e.split(";").join("\\;").split("#").join("\\#"),xe=(e,t)=>{if(e=(e||"").trim(),Vr(e)){e.charAt(0)==="'"&&(e=e.slice(1,-1));try{e=JSON.parse(e)}catch{}}else{let n=!1,r="";for(let o=0,u=e.length;o<u;o++){const s=e.charAt(o);if(n)"\\;#".indexOf(s)!==-1?r+=s:r+="\\"+s,n=!1;else{if(";#".indexOf(s)!==-1)break;s==="\\"?n=!0:r+=s}}return n&&(r+="\\"),r.trim()}return e};var Ti={parse:Wr,decode:Wr,stringify:vt,encode:vt,safe:ne,unsafe:xe},Xr=X(Ti);const Jr=e=>x.lstat(e).then(()=>!0,()=>!1),Ni=["","conventional","gitmoji"],{hasOwnProperty:Li}=Object.prototype,Y=(e,t)=>Li.call(e,t),E=(e,t,n)=>{if(!t)throw new y(`Invalid config property ${e}: ${n}`)},Oe={OPENAI_KEY(e){return e||""},OPENAI_MODEL(e){return!e||e.length===0?"gpt-3.5-turbo":e},OPENAI_HOST(e){return e?(E("OPENAI_HOST",/^https?:\/\//.test(e),"Must be a valid URL"),e):"https://api.openai.com"},HUGGING_COOKIE(e){return e||""},HUGGING_MODEL(e){return!e||e.length===0?"mistralai/Mixtral-8x7B-Instruct-v0.1":(E("HUGGING_MODEL",["mistralai/Mixtral-8x7B-Instruct-v0.1","meta-llama/Llama-2-70b-chat-hf","NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO","codellama/CodeLlama-70b-Instruct-hf","mistralai/Mistral-7B-Instruct-v0.2","openchat/openchat-3.5-0106"].includes(e),"Invalid model type of hugging"),e)},CLOVAX_COOKIE(e){return e||""},GEMINI_KEY(e){return e||""},GEMINI_MODEL(e){return!e||e.length===0?"gemini-pro":(E("GEMINI_MODEL",["gemini-pro"].includes(e),"Invalid model type of Gemini"),e)},ANTHROPIC_MODEL(e){return!e||e.length===0?"claude-2.1":(E("ANTHROPIC_MODEL",["claude-2.1","claude-2.0","claude-instant-1.2"].includes(e),"Invalid model type of Anthropic"),e)},ANTHROPIC_KEY(e){return e||""},MISTRAL_KEY(e){return e||""},MISTRAL_MODEL(e){return!e||e.length===0?"mistral-tiny":(E("MISTRAL_MODEL",["open-mistral-7b","mistral-tiny-2312","mistral-tiny","open-mixtral-8x7b","mistral-small-2312","mistral-small","mistral-small-2402","mistral-small-latest","mistral-medium-latest","mistral-medium-2312","mistral-medium","mistral-large-latest","mistral-large-2402","mistral-embed"].includes(e),"Invalid model type of Mistral AI"),e)},OLLAMA_MODEL(e){return e||""},OLLAMA_HOST(e){return e?(E("OLLAMA_HOST",/^https?:\/\//.test(e),"Must be a valid URL"),e):"http://localhost:11434"},OLLAMA_TIMEOUT(e){if(!e)return 1e5;E("OLLAMA_TIMEOUT",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("OLLAMA_TIMEOUT",t>=500,"Must be greater than 500ms"),t},confirm(e){return e?typeof e=="boolean"?e:(E("confirm",/^(?:true|false)$/.test(e),"Must be a boolean"),e==="true"):!1},prompt(e){return e||""},locale(e){return e?(E("locale",e,"Cannot be empty"),E("locale",/^[a-z-]+$/i.test(e),"Must be a valid locale (letters and dashes/underscores). You can consult the list of codes in: https://wikipedia.org/wiki/List_of_ISO_639-1_codes"),e):"en"},generate(e){if(!e)return 1;E("generate",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("generate",t>0,"Must be greater than 0"),E("generate",t<=5,"Must be less or equal to 5"),t},type(e){return e?(E("type",Ni.includes(e),"Invalid commit type"),e):"conventional"},proxy(e){if(!(!e||e.length===0))return E("proxy",/^https?:\/\//.test(e),"Must be a valid URL"),e},timeout(e){if(!e)return 1e4;E("timeout",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("timeout",t>=500,"Must be greater than 500ms"),t},temperature(e){if(!e)return .7;E("temperature",/^(2|\d)(\.\d{1,2})?$/.test(e),"Must be decimal between 0 and 2");const t=Number(e);return E("temperature",t>0,"Must be greater than 0"),E("temperature",t<=2,"Must be less than or equal to 2"),t},"max-length"(e){if(!e)return 50;E("max-length",/^\d+$/.test(e),"Must be an integer");const t=Number(e);return E("max-length",t>=20,"Must be greater than 20 characters"),t},"max-tokens"(e){return e?(E("max-tokens",/^\d+$/.test(e),"Must be an integer"),Number(e)):200}},Bt=V.join(Rt.homedir(),".aicommit2"),Zr=async()=>{if(!await Jr(Bt))return Object.create(null);const t=await x.readFile(Bt,"utf8");return Xr.parse(t)},$t=async(e,t)=>{const n=await Zr(),r={};for(const o of Object.keys(Oe)){const u=Oe[o],s=e?.[o]??n[o];if(t)try{r[o]=u(s)}catch{}else r[o]=u(s)}return r},Ri=async e=>{const t=await Zr();for(const[n,r]of e){if(!Y(Oe,n))throw new y(`Invalid config property: ${n}`);const o=Oe[n](r);t[n]=o}await x.writeFile(Bt,Xr.stringify(t),"utf8")};class ${constructor(t={}){if(!t.method)throw new Error("method should be defined!");if(!t.baseURL)throw new Error("baseURL should be defined!");this.config={...t},this.axiosInstance=In.create(this.config)}setHeaders(t){return this.config.headers=t,this}setParams(t){return this.config.params=t,this}setBody(t){return this.config.data=t,this}setMethod(t){return this.config.method=t,this}async execute(){try{return await this.axiosInstance.request(this.config)}catch(t){throw t}}}class ki extends q{constructor(t){super(t),this.params=t,this.host="https://clova-x.naver.com",this.cookie="",this.colors={primary:"#00db9b",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[CLOVA X]"),this.errorPrefix=g.red.bold("[CLOVA X]"),this.cookie=this.params.config.CLOVAX_COOKIE}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const{locale:t,generate:n,type:r,prompt:o}=this.params.config,u=this.params.config["max-length"],s=this.params.stagedDiff.diff,a=this.buildPrompt(t,s,n,u,r,o);await this.getAllConversationIds();const i=await this.sendMessage(a),{conversationId:l,allText:f}=this.parseSendMessageResult(i);return await this.deleteConversation(l),z(this.sanitizeMessage(f,this.params.config.type,n))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}async getAllConversationIds(){const n=(await new $({method:"GET",baseURL:`${this.host}/api/v1/conversations`,timeout:this.params.config.timeout}).setHeaders({Cookie:this.cookie}).setParams({page:0,size:50,sort:"turnUpdatedTime,DESC"}).execute()).data;if(!n||!n.content)throw new Error("No content on conversations ClovaX");return n.content.length===0?[]:n.content.map(o=>o.conversationId||"").filter(o=>!!o)}async sendMessage(t){const n={text:t,action:"new"},r=new xn;return r.set("form",new On([JSON.stringify(n)],{type:"application/json"})),(await new $({method:"POST",baseURL:`${this.host}/api/v1/generate`,timeout:this.params.config.timeout}).setHeaders({"Content-Type":"multipart/form-data","Content-Length":this.getContentLength(r),Cookie:this.cookie}).setBody(r).execute()).data}parseSendMessageResult(t){const n=/data:{(.*)}/g,r=t.match(n);if(!r)throw new Error("Failed to extract object from generated text");const o=r.map(i=>i.trim().replace(/data:/g,""));if(!o||o.length===0)throw new Error("Cannot extract message");let u="",s="",a="";if(o.map(i=>{try{return JSON.parse(i)}catch{return null}}).filter(i=>!!i).forEach(i=>{if(Y(i,"conversationId")){u=i.conversationId;return}if(Y(i,"text")){s+=i.text;return}if(Y(i,"error")){a=`${i.error}: ${i.type||i.message||""}`;return}}),a)throw new Error(a);if(!u)throw new Error("No conversationId!");if(!s)throw new Error("No allText!");return{conversationId:u,allText:s}}async deleteConversation(t){return(await new $({method:"DELETE",baseURL:`${this.host}/api/v1/conversation/${t}`,timeout:this.params.config.timeout}).setHeaders({Cookie:this.cookie}).execute()).data}getContentLength(t){return Array.from(t.entries(),([n,r])=>({[n]:{ContentLength:typeof r=="string"?r.length:r.size}}))}}class ji extends q{constructor(t){super(t),this.params=t,this.handleError$=n=>{const r=n.message||n.toString(),o=/(\[.*?\]\s*[^[]*)/g,u=[...r.matchAll(o)],s=[];u.forEach(i=>s.push(i[1]));const a=s[1]||"An error occurred";return T({name:`${this.errorPrefix} ${a}`,value:a,isError:!0})},this.colors={primary:"#0077FF",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[Gemini]"),this.errorPrefix=g.red.bold("[Gemini]"),this.genAI=new Sn(this.params.config.GEMINI_KEY)}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:n,generate:r,type:o,prompt:u}=this.params.config,s=this.params.config["max-length"],a=this.buildPrompt(n,t,r,s,o,u),i=this.params.config["max-tokens"],c=(await(await this.genAI.getGenerativeModel({model:this.params.config.GEMINI_MODEL,generationConfig:{maxOutputTokens:i,temperature:this.params.config.temperature}}).generateContent(a)).response).text();return z(this.sanitizeMessage(c,this.params.config.type,r))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}}class Gi extends q{constructor(t){super(t),this.params=t,this.host="https://huggingface.co",this.cookie="",this.colors={primary:"#FED21F",secondary:"#000"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[HuggingFace]"),this.errorPrefix=g.red.bold("[HuggingFace]"),this.cookie=this.params.config.HUGGING_COOKIE}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const{locale:t,generate:n,type:r,prompt:o}=this.params.config,u=this.params.config["max-length"],s=this.params.stagedDiff.diff,a=this.buildPrompt(t,s,n,u,r,o);await this.prepareNewConversation();const{conversationId:i}=await this.getNewConversationId();await this.prepareConversationEvent(i);const{lastMessageId:l}=await this.getConversationInfo(i),f=await this.sendMessage(i,a,l);return await this.deleteConversation(i),z(this.sanitizeHuggingMessage(f,this.params.config.type,n))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}sanitizeHuggingMessage(t,n,r){const o=/{[^{}]*}/g,u=t.match(o);if(!u)throw new Error("Failed to extract object from generated text");let s=null;if(u.forEach((a,i)=>{try{const l=JSON.parse(a);Y(l,"type")&&l.type==="finalAnswer"&&(s=l)}catch{}}),!s||!Y(s,"text"))throw new Error("Cannot parse finalAnswer");return this.sanitizeMessage(t,n,r)}async prepareNewConversation(){return(await new $({method:"POST",baseURL:`${this.host}/api/event`}).setHeaders({"content-type":"application/json",Cookie:this.cookie}).setBody({d:"huggingface.co",n:"pageview",r:"https://huggingface.co/chat/",u:"https://huggingface.co/chat/"}).execute()).data}async prepareConversationEvent(t){return(await new $({method:"POST",baseURL:`${this.host}/api/event`}).setHeaders({"content-type":"application/json",Cookie:this.cookie}).setBody({d:"huggingface.co",n:"pageview",r:"https://huggingface.co/chat/",u:`https://huggingface.co/chat/conversation/${t}`}).execute()).data}async getNewConversationId(){const t=await new $({method:"POST",baseURL:`${this.host}/chat/conversation`,timeout:this.params.config.timeout}).setHeaders({"content-type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Host:"huggingface.co",Origin:"https://huggingface.co"}).setBody({model:this.params.config.HUGGING_MODEL,preprompt:""}).execute();if(!t.data||!t.data.conversationId)throw new Error("No conversationId on Hugging service");return t.data}async getConversationInfo(t){const r=(await new $({method:"GET",baseURL:`${this.host}/chat/conversation/${t}/__data.json`,timeout:this.params.config.timeout}).setParams({"x-sveltekit-invalidated":"11"}).setHeaders({"Content-Type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Referer:"https://huggingface.co/chat/"}).execute()).data;if(!r||!r.nodes||r.nodes.length===0)throw new Error("No Nodes on conversation info");if(!r.nodes[1]||!r.nodes[1].data||r.nodes[1].data.length===0||!r.nodes[1].data[3])throw new Error("No data on node");const s=r.nodes[1]?.data[3];return{conversationInfo:r,lastMessageId:s}}async deleteConversation(t){return await new $({method:"DELETE",baseURL:`${this.host}/chat/conversation/${t}`,timeout:this.params.config.timeout}).setHeaders({Cookie:this.cookie}).execute(),(await new $({method:"GET",baseURL:`${this.host}/chat/__data.json`,timeout:this.params.config.timeout}).setParams({"x-sveltekit-trailing-slash":"1","x-sveltekit-invalidated":"10"}).setHeaders({"Content-Type":"application/json",Cookie:this.cookie,Accept:"*/*",Connection:"keep-alive",Referer:"https://huggingface.co/chat/"}).execute()).data}async sendMessage(t,n,r){return(await new $({method:"POST",baseURL:`${this.host}/chat/conversation/${t}`,timeout:this.params.config.timeout}).setHeaders({"content-type":"application/json",Cookie:this.cookie,authority:"huggingface.co",accept:"*/*",origin:"https://huggingface.co"}).setBody({files:[],id:r,inputs:n,is_continue:!1,is_retry:!1,use_cache:!1}).execute()).data}}const Hi=(e,t)=>{const n=Math.ceil(e),r=Math.floor(t);return Math.floor(Math.random()*(r-n+1))+n};class Ui extends q{constructor(t){super(t),this.params=t,this.host="https://api.mistral.ai",this.apiKey="",this.handleError$=n=>{const r=n.message?.replace(/(\r\n|\n|\r)/gm,"")||"An error occurred";return T({name:`${this.errorPrefix} ${r}`,value:r,isError:!0})},this.colors={primary:"#FC4A0A",secondary:"#fff"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[MistralAI]"),this.errorPrefix=g.red.bold("[MistralAI]"),this.apiKey=this.params.config.MISTRAL_KEY}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:n,generate:r,type:o,prompt:u}=this.params.config,s=this.params.config["max-length"],a=this.buildPrompt(n,t,r,s,o,u);await this.checkAvailableModels();const i=await this.createChatCompletions(a);return z(this.sanitizeMessage(i,this.params.config.type,r))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}async checkAvailableModels(){if((await this.getAvailableModels()).includes(this.params.config.MISTRAL_MODEL))return!0;throw new Error("Invalid model type of Mistral AI")}async getAvailableModels(){return(await new $({method:"GET",baseURL:`${this.host}/v1/models`,timeout:this.params.config.timeout}).setHeaders({Authorization:`Bearer ${this.apiKey}`,"content-type":"application/json"}).execute()).data.data.filter(n=>n.object==="model").map(n=>n.id)}async createChatCompletions(t){const r=(await new $({method:"POST",baseURL:`${this.host}/v1/chat/completions`,timeout:this.params.config.timeout}).setHeaders({Authorization:`Bearer ${this.apiKey}`,"content-type":"application/json"}).setBody({model:this.params.config.MISTRAL_MODEL,messages:[{role:"user",content:t}],temperature:this.params.config.temperature,top_p:1,max_tokens:this.params.config["max-tokens"],stream:!1,safe_prompt:!1,random_seed:Hi(10,1e3)}).execute()).data;if(!r.choices||r.choices.length===0||!r.choices[0].message?.content)throw new Error("No Content on response. Please open a Bug report");return r.choices[0].message.content}}class Ki extends q{constructor(t){super(t),this.params=t,this.host="http://localhost:11434",this.model="",this.handleError$=n=>{if(n.response.data?.error)return T({name:`${this.errorPrefix} ${n.response.data?.error}`,value:n.response.data?.error,isError:!0});const r=n.message?.replace(/(\r\n|\n|\r)/gm,"")||"An error occurred";return T({name:`${this.errorPrefix} ${r}`,value:r,isError:!0})},this.colors={primary:"#FFF",secondary:"#000"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[Ollama]"),this.errorPrefix=g.red.bold("[Ollama]"),this.model=this.params.config.OLLAMA_MODEL,this.host=this.params.config.OLLAMA_HOST||"http://localhost:11434"}generateCommitMessage$(){return G(this.generateMessage()).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}async generateMessage(){try{const t=this.params.stagedDiff.diff,{locale:n,generate:r,type:o,prompt:u}=this.params.config,s=this.params.config["max-length"],a=this.buildPrompt(n,t,r,s,o,u);await this.checkIsAvailableOllama();const i=await this.createChatCompletions(a);return z(this.sanitizeMessage(i,this.params.config.type,r))}catch(t){const n=t;throw n.code==="ENOTFOUND"?new y(`Error connecting to ${n.hostname} (${n.syscall})`):n}}async checkIsAvailableOllama(){try{return(await new $({method:"GET",baseURL:`${this.host}`,timeout:this.params.config.OLLAMA_TIMEOUT}).execute()).data}catch(t){throw t.code==="ECONNREFUSED"?new y(`Error connecting to ${this.host}. Please run Ollama or check host`):t}}async createChatCompletions(t){return(await new $({method:"POST",baseURL:`${this.host}/api/generate`,timeout:this.params.config.OLLAMA_TIMEOUT}).setBody({model:this.params.config.OLLAMA_MODEL,prompt:t,stream:!1,options:{temperature:this.params.config.temperature,top_p:1}}).execute()).data.response}}class qi extends q{constructor(t){super(t),this.params=t,this.handleError$=n=>{let r="An error occurred";if(n.message){r=n.message.split(`
|
|
56
|
+
`)[0];const o=this.extractJSONFromError(n.message);r+=`: ${o.error.message}`}return T({name:`${this.errorPrefix} ${r}`,value:r,isError:!0})},this.colors={primary:"#74AA9C",secondary:"#FFF"},this.serviceName=g.bgHex(this.colors.primary).hex(this.colors.secondary).bold("[ChatGPT]"),this.errorPrefix=g.red.bold("[ChatGPT]")}generateCommitMessage$(){return G(Pi(this.params.config.OPENAI_HOST,this.params.config.OPENAI_KEY,this.params.config.OPENAI_MODEL,this.params.config.locale,this.params.stagedDiff.diff,this.params.config.generate,this.params.config["max-length"],this.params.config.type,this.params.config.timeout,this.params.config["max-tokens"],this.params.config.temperature,this.params.config.prompt,this.params.config.proxy)).pipe(k(t=>N(t)),L(t=>({name:`${this.serviceName} ${t}`,value:t,isError:!1})),j(this.handleError$))}extractJSONFromError(t){const n=/[{[]{1}([,:{}[\]0-9.\-+Eaeflnr-u \n\r\t]|".*?")+[}\]]{1}/gis,r=t.match(n);return r?Object.assign({},...r.map(o=>JSON.parse(o))):{error:{message:"Unknown error"}}}}class Qr{constructor(t,n){this.config=t,this.stagedDiff=n}createAIRequests$(t){return N(t).pipe(hn(n=>{const r={config:this.config,stagedDiff:this.stagedDiff};switch(n){case R.OPEN_AI:return K.create(qi,r).generateCommitMessage$();case R.GEMINI:return K.create(ji,r).generateCommitMessage$();case R.ANTHROPIC:return K.create(_i,r).generateCommitMessage$();case R.HUGGING:return K.create(Gi,r).generateCommitMessage$();case R.CLOVA_X:return K.create(ki,r).generateCommitMessage$();case R.MISTRAL:return K.create(Ui,r).generateCommitMessage$();case R.OLLAMA:return K.create(Ki,r).generateCommitMessage$();default:const o=g.red.bold(`[${n}]`);return T({name:o+" Invalid AI type",value:"Invalid AI type",isError:!0})}}))}}const en=async()=>{const{stdout:e,failed:t}=await te("git",["rev-parse","--show-toplevel"],{reject:!1});if(t)throw new y("The current directory must be a Git repository!");return e},xt=e=>`:(exclude)${e}`,tn=["package-lock.json","pnpm-lock.yaml","*.lock"].map(xt),rn=async e=>{const t=["diff","--cached","--diff-algorithm=minimal"],{stdout:n}=await te("git",[...t,"--name-only",...tn,...e?e.map(xt):[]]);if(!n)return null;const{stdout:r}=await te("git",[...t,...tn,...e?e.map(xt):[]]);return{files:n.split(`
|
|
57
|
+
`),diff:r}},zi=e=>`Detected ${e.length.toLocaleString()} staged file${e.length>1?"s":""}`;class Ie{constructor(){this.title="aicommit2"}printTitle(){console.log(Mn.textSync(this.title,{font:"Small"}))}displaySpinner(t){return Le(t).start()}stopSpinner(t){t.stop(),t.clear()}printStagedFiles(t){console.log(g.bold.green("\u2714 ")+g.bold(`${zi(t.files)}:`)),console.log(`${t.files.map(n=>` ${n}`).join(`
|
|
63
58
|
`)}
|
|
64
59
|
`)}printAnalyzed(){console.log(`
|
|
65
60
|
${g.bold.green("\u2714")} ${g.bold("Changes analyzed")}`)}printCommitted(){console.log(`
|
|
@@ -67,14 +62,14 @@ ${g.bold.green("\u2714")} ${g.bold("Successfully committed!")}`)}printCopied(){c
|
|
|
67
62
|
${g.bold.green("\u2714")} ${g.bold("Successfully copied! Press 'Ctrl + V' to paste")}`)}printSavedCommitMessage(){console.log(`
|
|
68
63
|
${g.bold.green("\u2714")} ${g.bold("Saved commit message")}`)}printCancelledCommit(){console.log(`
|
|
69
64
|
${g.bold.yellow("\u26A0")} ${g.yellow("Commit cancelled")}`)}printErrorMessage(t){console.log(`
|
|
70
|
-
${g.bold.red("\u2716")} ${g.red(`${t}`)}`)}moveCursorUp(){const t=me.createInterface({input:process.stdin,output:process.stdout});me.moveCursor(process.stdout,0,-1),t.close()}moveCursorDown(){const t=me.createInterface({input:process.stdin,output:process.stdout});me.moveCursor(process.stdout,0,1),t.close()}}const
|
|
65
|
+
${g.bold.red("\u2716")} ${g.red(`${t}`)}`)}moveCursorUp(){const t=me.createInterface({input:process.stdin,output:process.stdout});me.moveCursor(process.stdout,0,-1),t.close()}moveCursorDown(){const t=me.createInterface({input:process.stdin,output:process.stdout});me.moveCursor(process.stdout,0,1),t.close()}}const Yi={isLoading:!1,startOption:{text:"AI is analyzing your changes"}},Ot="No commit messages were generated";class Wi{constructor(){this.choices$=new Lt([]),this.loader$=new Lt(Yi),this.destroyed$=new gn(1)}initPrompt(){return Ne.registerPrompt("reactiveListPrompt",Pn),Ne.prompt({type:"reactiveListPrompt",name:"aicommit2Prompt",message:"Pick a commit message to use: ",emptyMessage:`\u26A0 ${Ot}`,choices$:this.choices$,loader$:this.loader$,loop:!1})}startLoader(){this.loader$.next({isLoading:!0})}refreshChoices(t){const{name:n,value:r,isError:o}=t;if(!t||!r)return;const u=this.choices$.getValue();this.choices$.next([...u,{name:n,value:r,disabled:o,isError:o}])}checkErrorOnChoices(){if(this.choices$.getValue().map(n=>n).every(n=>n?.isError||n?.disabled)){this.alertNoGeneratedMessage(),this.logEmptyCommitMessage(),process.exit(1);return}this.stopLoaderOnSuccess()}completeSubject(){this.choices$.complete(),this.loader$.complete(),this.destroyed$.next(!0),this.destroyed$.complete()}alertNoGeneratedMessage(){this.loader$.next({isLoading:!1,message:Ot,stopOption:{doneFrame:"\u26A0",color:"yellow"}})}stopLoaderOnSuccess(){this.loader$.next({isLoading:!1,message:"Changes analyzed"})}logEmptyCommitMessage(){console.log(`${g.bold.yellow("\u26A0")} ${g.yellow(`${Ot}`)}`)}}const P=new Ie;var Vi=async(e,t,n,r,o,u,s,a,i)=>(async()=>{P.printTitle(),await en(),r&&await te("git",["add","--update"]);const l=P.displaySpinner("Detecting staged files"),f=await rn(n);if(l.stop(),!f)throw new y("No staged changes found. Stage your changes manually, or automatically stage all changes with the `--all` flag.");P.printStagedFiles(f);const{env:D}=process,c=await $t({OPENAI_KEY:D.OPENAI_KEY||D.OPENAI_API_KEY,OPENAI_MODEL:D.OPENAI_MODEL||D["openai-model"]||D.openai_model,OPENAI_HOST:D.OPENAI_HOST||D["openai-host"]||D.openai_host,GEMINI_KEY:D.GEMINI_KEY||D.GEMINI_API_KEY,GEMINI_MODEL:D.GEMINI_MODEL||D["gemini-model"]||D.gemini_model,ANTHROPIC_KEY:D.ANTHROPIC_KEY||D.ANTHROPIC_API_KEY,ANTHROPIC_MODEL:D.ANTHROPIC_MODEL||D["anthropic-model"]||D.anthropic_model,HUGGING_COOKIE:D.HUGGING_COOKIE||D.HUGGING_API_KEY||D.HF_TOKEN,HUGGING_MODEL:D.HUGGING_MODEL||D["hugging-model"],CLOVAX_COOKIE:D.CLOVAX_COOKIE||D.CLOVA_X_COOKIE,proxy:D.https_proxy||D.HTTPS_PROXY||D.http_proxy||D.HTTP_PROXY,temperature:D.temperature,generate:t?.toString()||D.generate,type:o?.toString()||D.type,locale:e?.toString()||D.locale,prompt:a?.toString()||D.prompt}),p=Object.entries(c).filter(([w])=>Tr.includes(w)).filter(([w,Me])=>!!Me).map(([w])=>w);if(p.length===0)throw new y("Please set at least one API key via `aicommit2 config set OPENAI_KEY=<your token>`");const m=new Qr(c,f),h=new Wi,C=h.initPrompt();h.startLoader();const b=m.createAIRequests$(p).subscribe(w=>h.refreshChoices(w),()=>{},()=>h.checkErrorOnChoices()),O=await C;b.unsubscribe(),h.completeSubject(),P.moveCursorUp();const S=O.aicommit2Prompt?.value;if(!S)throw new y("An error occurred! No selected message");if(s&&(eu("copy-paste").copy(S),P.printCopied(),process.exit()),u){const w=Le("Committing with the generated message").start();await te("git",["commit","-m",S,...i]),w.stop(),w.clear(),P.printCommitted(),process.exit()}const M=await Ne.prompt([{type:"confirm",name:"confirmationPrompt",message:"Use selected message?",default:!0}]),{confirmationPrompt:oe}=M;if(oe){const w=Le("Committing with the generated message").start();await te("git",["commit","-m",S,...i]),w.stop(),w.clear(),P.printCommitted(),process.exit()}P.printCancelledCommit(),process.exit()})().catch(l=>{P.printErrorMessage(l.message),ve(l),process.exit(1)}),Xi=ur({name:"config",parameters:["<mode>","<key=value...>"]},e=>{(async()=>{const{mode:t,keyValue:n}=e._;if(t==="get"){const r=await $t({},!0);for(const o of n)Y(r,o)&&console.log(`${o}=${r[o]}`);return}if(t==="set"){await Ri(n.map(r=>r.split("=")));return}throw new y(`Invalid mode: ${t}`)})().catch(t=>{new Ie().printErrorMessage(t.message),ve(t),process.exit(1)})});const nn="prepare-commit-msg",on=`.git/hooks/${nn}`,Se=Bn(new URL("cli.mjs",import.meta.url)),Ji=process.argv[1].replace(/\\/g,"/").endsWith(`/${on}`),un=process.platform==="win32",sn=`
|
|
71
66
|
#!/usr/bin/env node
|
|
72
|
-
import(${JSON.stringify(
|
|
73
|
-
`.trim();var
|
|
74
|
-
`),D?(
|
|
67
|
+
import(${JSON.stringify($n(Se))})
|
|
68
|
+
`.trim();var Zi=ur({name:"hook",parameters:["<install/uninstall>"]},e=>{(async()=>{const t=await en(),{installUninstall:n}=e._,r=V.join(t,on),o=await Jr(r);if(n==="install"){if(o){if(await x.realpath(r).catch(()=>{})===Se){console.warn("The hook is already installed");return}throw new y(`A different ${nn} hook seems to be installed. Please remove it before installing aicommit2.`)}await x.mkdir(V.dirname(r),{recursive:!0}),un?await x.writeFile(r,sn):(await x.symlink(Se,r,"file"),await x.chmod(r,493)),console.log(`${g.green("\u2714")} Hook installed`);return}if(n==="uninstall"){if(!o){console.warn("Hook is not installed");return}if(un){if(await x.readFile(r,"utf8")!==sn){console.warn("Hook is not installed");return}}else if(await x.realpath(r)!==Se){console.warn("Hook is not installed");return}await x.rm(r),console.log(`${g.green("\u2714")} Hook uninstalled`);return}throw new y(`Invalid mode: ${n}`)})().catch(t=>{console.error(`${g.red("\u2716")} ${t.message}`),ve(t),process.exit(1)})});const[It,Qi]=process.argv.slice(2);var ea=()=>(async()=>{if(!It)throw new y('Commit message file path is missing. This file should be called from the "prepare-commit-msg" git hook');if(Qi)return;const e=await rn();if(!e)return;const t=new Ie;t.printTitle();const{env:n}=process,r=await $t({proxy:n.https_proxy||n.HTTPS_PROXY||n.http_proxy||n.HTTP_PROXY}),o=Object.entries(r).filter(([p])=>Tr.includes(p)).filter(([p,d])=>!!d).map(([p])=>p);if(o.length===0)throw new y("Please set at least one API key via `aicommit2 config set OPENAI_KEY=<your token>`");const s=new Qr(r,e),a=t.displaySpinner("The AI is analyzing your changes");let i;try{i=await Cn(s.createAIRequests$(o).pipe(Fn(p=>!p.isError),L(p=>p.value),En()))}finally{a.stop(),a.clear(),t.printAnalyzed()}const f=await x.readFile(It,"utf8")!=="",D=i.length>1;let c="";f&&(c=`# \u{1F916} AI generated commit${D?"s":""}
|
|
69
|
+
`),D?(f&&(c+=`# Select one of the following messages by uncommenting:
|
|
75
70
|
`),c+=`
|
|
76
|
-
${
|
|
77
|
-
`)}`):(
|
|
71
|
+
${i.map(p=>`# ${p}`).join(`
|
|
72
|
+
`)}`):(f&&(c+=`# Edit the message below and commit:
|
|
78
73
|
`),c+=`
|
|
79
|
-
${
|
|
80
|
-
`),await
|
|
74
|
+
${i[0]}
|
|
75
|
+
`),await x.appendFile(It,c),t.printSavedCommitMessage()})().catch(e=>{new Ie().printErrorMessage(e.message),ve(e),process.exit(1)});const an=process.argv.slice(2);Qo({name:"aicommit2",version:Nr,flags:{locale:{type:String,description:"Locale to use for the generated commit messages (default: en)",alias:"l"},generate:{type:Number,description:"Number of messages to generate (Warning: generating multiple costs more) (default: 1)",alias:"g"},exclude:{type:[String],description:"Files to exclude from AI analysis",alias:"x"},all:{type:Boolean,description:"Automatically stage changes in tracked files for the commit",alias:"a",default:!1},type:{type:String,description:"Type of commit message to generate",alias:"t",default:"conventional"},confirm:{type:Boolean,description:"Skip confirmation when committing after message generation (default: false)",alias:"y",default:!1},clipboard:{type:Boolean,description:"Copy the selected message to the clipboard",alias:"c",default:!1},prompt:{type:String,description:"Additional prompt to let users fine-tune provided prompt",alias:"p"}},commands:[Xi,Zi],help:{description:ti},ignoreArgv:e=>e==="unknown-flag"||e==="argument"},e=>{if(Ji){ea();return}Vi(e.flags.locale,e.flags.generate,e.flags.exclude,e.flags.all,e.flags.type,e.flags.confirm,e.flags.clipboard,e.flags.prompt,an)},an);
|