File size: 26,248 Bytes
c50496f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
---
title: gcli2api
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7861
pinned: false
---
# GeminiCLI to API

**灏?GeminiCLI 鍜?Antigravity 杞崲涓?OpenAI 銆丟EMINI 鍜?Claude API 鍏煎鎺ュ彛**

[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
[![License: CNC-1.0](https://img.shields.io/badge/License-CNC--1.0-red.svg)](LICENSE)
[![Docker](https://img.shields.io/badge/docker-available-blue.svg)](https://github.com/su-kaka/gcli2api/pkgs/container/gcli2api)

[English](docs/README_EN.md) | 涓枃 | [鏃ユ湰瑾瀅(docs/README_JA.md)

## 馃殌 蹇€熼儴缃?

[![Deploy on Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/templates/97VMEF?referralCode=sukaka)
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/su-kaka/gcli2api)
---

## 鈿狅笍 璁稿彲璇佸0鏄?

**鏈」鐩噰鐢?Cooperative Non-Commercial License (CNC-1.0)**

杩欐槸涓€涓弽鍟嗕笟鍖栫殑涓ユ牸寮€婧愬崗璁紝璇︽儏璇锋煡鐪?[LICENSE](LICENSE) 鏂囦欢銆?

### 鉁?鍏佽鐨勭敤閫旓細
- 涓汉瀛︿範銆佺爺绌躲€佹暀鑲茬敤閫?
- 闈炶惀鍒╃粍缁囦娇鐢?
- 寮€婧愰」鐩泦鎴愶紙闇€閬靛惊鐩稿悓鍗忚锛?
- 瀛︽湳鐮旂┒鍜岃鏂囧彂琛?

### 鉂?绂佹鐨勭敤閫旓細
- 浠讳綍褰㈠紡鐨勫晢涓氫娇鐢?
- 骞存敹鍏ヨ秴杩?00涓囩編鍏冪殑浼佷笟浣跨敤
- 椋庢姇鏀寔鎴栧叕寮€浜ゆ槗鐨勫叕鍙镐娇鐢? 
- 鎻愪緵浠樿垂鏈嶅姟鎴栦骇鍝?
- 鍟嗕笟绔炰簤鐢ㄩ€?

## 鏍稿績鍔熻兘

### 馃攧 API 绔偣鍜屾牸寮忔敮鎸?

**澶氱鐐瑰鏍煎紡鏀寔**
- **OpenAI 鍏煎绔偣**锛歚/v1/chat/completions` 鍜?`/v1/models`
  - 鏀寔鏍囧噯 OpenAI 鏍煎紡锛坢essages 缁撴瀯锛?
  - 鏀寔 Gemini 鍘熺敓鏍煎紡锛坈ontents 缁撴瀯锛?
  - 鑷姩鏍煎紡妫€娴嬪拰杞崲锛屾棤闇€鎵嬪姩鍒囨崲
  - 鏀寔澶氭ā鎬佽緭鍏ワ紙鏂囨湰 + 鍥惧儚锛?
- **Gemini 鍘熺敓绔偣**锛歚/v1/models/{model}:generateContent` 鍜?`streamGenerateContent`
  - 鏀寔瀹屾暣鐨?Gemini 鍘熺敓 API 瑙勮寖
  - 澶氱璁よ瘉鏂瑰紡锛欱earer Token銆亁-goog-api-key 澶撮儴銆乁RL 鍙傛暟 key
- **Claude 鏍煎紡鍏煎**锛氬畬鏁存敮鎸?Claude API 鏍煎紡
  - 绔偣锛歚/v1/messages`锛堥伒寰?Claude API 瑙勮寖锛?
  - 鏀寔 Claude 鏍囧噯鐨?messages 鏍煎紡
  - 鏀寔 system 鍙傛暟鍜?Claude 鐗规湁鍔熻兘
  - 鑷姩杞崲涓哄悗绔敮鎸佺殑鏍煎紡
- **Antigravity API 鏀寔**锛氬悓鏃舵敮鎸?OpenAI銆丟emini 鍜?Claude 鏍煎紡
  - OpenAI 鏍煎紡绔偣锛歚/antigravity/v1/chat/completions`
  - Gemini 鏍煎紡绔偣锛歚/antigravity/v1/models/{model}:generateContent` 鍜?`streamGenerateContent`
  - Claude 鏍煎紡绔偣锛歚/antigravity/v1/messages`
  - 鏀寔鎵€鏈?Antigravity 妯″瀷锛圕laude銆丟emini 绛夛級
  - 鑷姩妯″瀷鍚嶇О鏄犲皠鍜屾€濈淮妯″紡妫€娴?

### 馃攼 璁よ瘉鍜屽畨鍏ㄧ鐞?

**鐏垫椿鐨勫瘑鐮佺鐞?*
- **鍒嗙瀵嗙爜鏀寔**锛欰PI 瀵嗙爜锛堣亰澶╃鐐癸級鍜屾帶鍒堕潰鏉垮瘑鐮佸彲鐙珛璁剧疆
- **澶氱璁よ瘉鏂瑰紡**锛氭敮鎸?Authorization Bearer銆亁-goog-api-key 澶撮儴銆乁RL 鍙傛暟绛?
- **JWT Token 璁よ瘉**锛氭帶鍒堕潰鏉挎敮鎸?JWT 浠ょ墝璁よ瘉
- **鐢ㄦ埛閭鑾峰彇**锛氳嚜鍔ㄨ幏鍙栧拰鏄剧ず Google 璐︽埛閭鍦板潃

### 馃搳 鏅鸿兘鍑瘉绠$悊绯荤粺

**楂樼骇鍑瘉绠$悊**
- 澶氫釜 Google OAuth 鍑瘉鑷姩杞崲
- 閫氳繃鍐椾綑璁よ瘉澧炲己绋冲畾鎬?
- 璐熻浇鍧囪 涓庡苟鍙戣姹傛敮鎸?
- 鑷姩鏁呴殰妫€娴嬪拰鍑瘉绂佺敤
- 鍑瘉浣跨敤缁熻鍜岄厤棰濈鐞?
- 鏀寔鎵嬪姩鍚敤/绂佺敤鍑瘉鏂囦欢
- 鎵归噺鍑瘉鏂囦欢鎿嶄綔锛堝惎鐢ㄣ€佺鐢ㄣ€佸垹闄わ級

**鍑瘉鐘舵€佺洃鎺?*
- 瀹炴椂鍑瘉鍋ュ悍妫€鏌?
- 閿欒鐮佽拷韪紙429銆?03銆?00 绛夛級
- 鑷姩灏佺鏈哄埗锛堝彲閰嶇疆锛?

### 馃寠 娴佸紡浼犺緭鍜屽搷搴斿鐞?

**澶氱娴佸紡鏀寔**
- 鐪熸鐨勫疄鏃舵祦寮忓搷搴?
- 鍋囨祦寮忔ā寮忥紙鐢ㄤ簬鍏煎鎬э級
- 娴佸紡鎶楁埅鏂姛鑳斤紙闃叉鍥炵瓟琚埅鏂級
- 寮傛浠诲姟绠$悊鍜岃秴鏃跺鐞?

**鍝嶅簲浼樺寲**
- 鎬濈淮閾撅紙Thinking锛夊唴瀹瑰垎绂?
- 鎺ㄧ悊杩囩▼锛坮easoning_content锛夊鐞?
- 澶氳疆瀵硅瘽涓婁笅鏂囩鐞?
- 鍏煎鎬фā寮忥紙灏?system 娑堟伅杞崲涓?user 娑堟伅锛?

### 馃帥锔?Web 绠$悊鎺у埗鍙?

**鍏ㄥ姛鑳?Web 鐣岄潰**
- OAuth 璁よ瘉娴佺▼绠$悊锛堟敮鎸?GCLI 鍜?Antigravity 鍙屾ā寮忥級
- 鍑瘉鏂囦欢涓婁紶銆佷笅杞姐€佺鐞?
- 瀹炴椂鏃ュ織鏌ョ湅锛圵ebSocket锛?
- 绯荤粺閰嶇疆绠$悊
- 浣跨敤缁熻鍜岀洃鎺ч潰鏉?
- 绉诲姩绔€傞厤鐣岄潰

**鎵归噺鎿嶄綔鏀寔**
- ZIP 鏂囦欢鎵归噺涓婁紶鍑瘉锛圙CLI 鍜?Antigravity锛?
- 鎵归噺鍚敤/绂佺敤/鍒犻櫎鍑瘉
- 鎵归噺鑾峰彇鐢ㄦ埛閭
- 鎵归噺閰嶇疆绠$悊
- 缁熶竴鎵归噺涓婁紶鐣岄潰绠$悊鎵€鏈夊嚟璇佺被鍨?

### 馃搱 浣跨敤鐩戞帶

**瀹炴椂鐩戞帶**
- WebSocket 瀹炴椂鏃ュ織娴?
- 绯荤粺鐘舵€佺洃鎺?
- 鍑瘉鍋ュ悍鐘舵€?

### 馃敡 楂樼骇閰嶇疆鍜岃嚜瀹氫箟

**缃戠粶鍜屼唬鐞嗛厤缃?*
- HTTP/HTTPS 浠g悊鏀寔
- 浠g悊绔偣閰嶇疆锛圤Auth銆丟oogle APIs銆佸厓鏁版嵁鏈嶅姟锛?
- 瓒呮椂鍜岄噸璇曢厤缃?
- 缃戠粶閿欒澶勭悊鍜屾仮澶?

**鎬ц兘鍜岀ǔ瀹氭€ч厤缃?*
- 429 閿欒鑷姩閲嶈瘯锛堝彲閰嶇疆闂撮殧鍜屾鏁帮級
- 鎶楁埅鏂渶澶ч噸璇曟鏁?

**鏃ュ織鍜岃皟璇?*
- 澶氱骇鏃ュ織绯荤粺锛圖EBUG銆両NFO銆乄ARNING銆丒RROR锛?
- 鏃ュ織鏂囦欢绠$悊
- 瀹炴椂鏃ュ織娴?
- 鏃ュ織涓嬭浇鍜屾竻绌?

### 馃攧 鐜鍙橀噺鍜岄厤缃鐞?

**鐏垫椿鐨勯厤缃柟寮?*
- 鐜鍙橀噺閰嶇疆
- 鐑厤缃洿鏂帮紙閮ㄥ垎閰嶇疆椤癸級
- 閰嶇疆閿佸畾锛堢幆澧冨彉閲忎紭鍏堢骇锛?

## 鏀寔鐨勬ā鍨?

鎵€鏈夋ā鍨嬪潎鍏峰 1M 涓婁笅鏂囩獥鍙e閲忋€傛瘡涓嚟璇佹枃浠舵彁渚?1000 娆¤姹傞搴︺€?

### 馃 鍩虹妯″瀷
- `gemini-2.5-pro`
- `gemini-3-pro-preview`
- `gemini-3.1-pro-preview`

### 馃 鎬濈淮妯″瀷锛圱hinking Models锛?
- `gemini-2.5-pro-high`锛氭€濊€冩ā寮?
- `gemini-2.5-pro-low`锛氫綆鎬濊€冩ā寮?
- 鏀寔鑷畾涔夋€濊€冮绠楅厤缃?
- 鑷姩鍒嗙鎬濈淮鍐呭鍜屾渶缁堝洖绛?

### 馃攳 鎼滅储澧炲己妯″瀷
- `gemini-2.5-pro-search`锛氶泦鎴愭悳绱㈠姛鑳界殑妯″瀷

### 馃柤锔?鍥惧儚鐢熸垚妯″瀷锛圓ntigravity锛?
- `gemini-3.1-flash-image`锛氬熀纭€鍥惧儚鐢熸垚妯″瀷
- **鍒嗚鲸鐜囧悗缂€**锛?
  - `-2k`锛?K 鍒嗚鲸鐜?
  - `-4k`锛?K 楂樻竻鍒嗚鲸鐜?
- **姣斾緥鍚庣紑**锛?
  - `-1x1`锛氭鏂瑰舰锛堝ご鍍忥級
  - `-16x9`锛氭í灞忥紙鐢佃剳澹佺焊锛?
  - `-9x16`锛氱珫灞忥紙鎵嬫満澹佺焊锛?
  - `-21x9`锛氳秴瀹藉睆锛堝甫楸煎睆锛?
  - `-4x3`锛氫紶缁熸樉绀哄櫒
  - `-3x4`锛氱珫鐗堟捣鎶?
- **缁勫悎浣跨敤绀轰緥**锛?
  - `gemini-3.1-flash-image-4k-16x9`锛?K 妯睆
  - `gemini-3.1-flash-image-2k-9x16`锛?K 绔栧睆
- 涓嶆寚瀹氭瘮渚嬫椂锛孉PI 鑷姩鍐冲畾妯珫姣斾緥

### 馃寠 鐗规畩鍔熻兘鍙樹綋
- **鍋囨祦寮忔ā寮?*锛氬湪浠讳綍妯″瀷鍚嶇О鍚庢坊鍔?`-鍋囨祦寮廯 鍚庣紑
  - 渚嬶細`gemini-2.5-pro-鍋囨祦寮廯
  - 鐢ㄤ簬闇€瑕佹祦寮忓搷搴斾絾鏈嶅姟绔笉鏀寔鐪熸祦寮忕殑鍦烘櫙
- **娴佸紡鎶楁埅鏂ā寮?*锛氬湪妯″瀷鍚嶇О鍓嶆坊鍔?`娴佸紡鎶楁埅鏂?` 鍓嶇紑
  - 渚嬶細`娴佸紡鎶楁埅鏂?gemini-2.5-pro`  
  - 鑷姩妫€娴嬪搷搴旀埅鏂苟閲嶈瘯锛岀‘淇濆畬鏁村洖绛?

### 馃敡 妯″瀷鍔熻兘鑷姩妫€娴?
- 绯荤粺鑷姩璇嗗埆妯″瀷鍚嶇О涓殑鍔熻兘鏍囪瘑
- 閫忔槑鍦板鐞嗗姛鑳芥ā寮忚浆鎹?
- 鏀寔鍔熻兘缁勫悎浣跨敤


---

## 瀹夎鎸囧崡

### Termux 鐜

**鍒濆瀹夎**
```bash
curl -o termux-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/termux-install.sh" && chmod +x termux-install.sh && ./termux-install.sh
```

**閲嶅惎鏈嶅姟**
```bash
cd gcli2api
bash termux-start.sh
```

### Windows 鐜

**鍒濆瀹夎**
```powershell
iex (iwr "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.ps1" -UseBasicParsing).Content
```

**閲嶅惎鏈嶅姟**
鍙屽嚮鎵ц `start.bat`

### Linux 鐜

**鍒濆瀹夎**
```bash
curl -o install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.sh" && chmod +x install.sh && ./install.sh
```

**閲嶅惎鏈嶅姟**
```bash
cd gcli2api
bash start.sh
```

### macOS 鐜

**鍒濆瀹夎**
```bash
curl -o darwin-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/darwin-install.sh" && chmod +x darwin-install.sh && ./darwin-install.sh
```

**閲嶅惎鏈嶅姟**
```bash
cd gcli2api
bash start.sh
```

### Docker 鐜

**Docker 杩愯鍛戒护**
```bash
# 浣跨敤閫氱敤瀵嗙爜
docker run -d --name gcli2api --network host -e PASSWORD=pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest

# 浣跨敤鍒嗙瀵嗙爜
docker run -d --name gcli2api --network host -e API_PASSWORD=api_pwd -e PANEL_PASSWORD=panel_pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest
```

**Docker Mac**
```bash
# 浣跨敤閫氱敤瀵嗙爜
docker run -d \
  --name gcli2api \
  -p 7861:7861 \
  -p 8080:8080 \
  -e PASSWORD=pwd \
  -e PORT=7861 \
  -v "$(pwd)/data/creds":/app/creds \
  ghcr.io/su-kaka/gcli2api:latest
```

```bash
# 浣跨敤鍒嗙瀵嗙爜
docker run -d \
--name gcli2api \
-p 7861:7861 \
-p 8080:8080 \
-e API_PASSWORD=api_pwd \
-e PANEL_PASSWORD=panel_pwd \
-e PORT=7861 \
-v $(pwd)/data/creds:/app/creds \
ghcr.io/su-kaka/gcli2api:latest
```

**Docker Compose 杩愯鍛戒护**
1. 灏嗕互涓嬪唴瀹逛繚瀛樹负 `docker-compose.yml` 鏂囦欢锛?
    ```yaml
    version: '3.8'

    services:
      gcli2api:
        image: ghcr.io/su-kaka/gcli2api:latest
        container_name: gcli2api
        restart: unless-stopped
        network_mode: host
        environment:
          # 浣跨敤閫氱敤瀵嗙爜锛堟帹鑽愮敤浜庣畝鍗曢儴缃诧級
          - PASSWORD=pwd
          - PORT=7861
          # 鎴栦娇鐢ㄥ垎绂诲瘑鐮侊紙鎺ㄨ崘鐢ㄤ簬鐢熶骇鐜锛?
          # - API_PASSWORD=your_api_password
          # - PANEL_PASSWORD=your_panel_password
        volumes:
          - ./data/creds:/app/creds
        healthcheck:
          test: ["CMD-SHELL", "python -c \"import sys, urllib.request, os; port = os.environ.get('PORT', '7861'); req = urllib.request.Request(f'http://localhost:{port}/v1/models', headers={'Authorization': 'Bearer ' + os.environ.get('PASSWORD', 'pwd')}); sys.exit(0 if urllib.request.urlopen(req, timeout=5).getcode() == 200 else 1)\""]
          interval: 30s
          timeout: 10s
          retries: 3
          start_period: 40s
    ```
2. 鍚姩鏈嶅姟锛?
    ```bash
    docker-compose up -d
    ```

---

## 閰嶇疆璇存槑

1. 璁块棶 `http://127.0.0.1:7861` 锛堥粯璁ょ鍙o紝鍙€氳繃 PORT 鐜鍙橀噺淇敼锛?
2. 瀹屾垚 OAuth 璁よ瘉娴佺▼锛堥粯璁ゅ瘑鐮侊細`pwd`锛屽彲閫氳繃鐜鍙橀噺淇敼锛?
   - **GCLI 妯″紡**锛氱敤浜庤幏鍙?Google Cloud Gemini API 鍑瘉
   - **Antigravity 妯″紡**锛氱敤浜庤幏鍙?Google Antigravity API 鍑瘉
3. 閰嶇疆瀹㈡埛绔細

**OpenAI 鍏煎瀹㈡埛绔細**
   - **绔偣鍦板潃**锛歚http://127.0.0.1:7861/v1`
   - **API 瀵嗛挜**锛歚pwd`锛堥粯璁ゅ€硷紝鍙€氳繃 API_PASSWORD 鎴?PASSWORD 鐜鍙橀噺淇敼锛?

**Gemini 鍘熺敓瀹㈡埛绔細**
   - **绔偣鍦板潃**锛歚http://127.0.0.1:7861`
   - **璁よ瘉鏂瑰紡**锛?
     - `Authorization: Bearer your_api_password`
     - `x-goog-api-key: your_api_password`
     - URL 鍙傛暟锛歚?key=your_api_password`

### 馃専 鍙岃璇佹ā寮忔敮鎸?

**GCLI 璁よ瘉妯″紡**
- 鏍囧噯鐨?Google Cloud Gemini API 璁よ瘉
- 鏀寔 OAuth2.0 璁よ瘉娴佺▼
- 鑷姩鍚敤蹇呴渶鐨?Google Cloud API

**Antigravity 璁よ瘉妯″紡**
- Google Antigravity API 涓撶敤璁よ瘉
- 鐙珛鐨勫嚟璇佺鐞嗙郴缁?
- 鏀寔鎵归噺涓婁紶鍜岀鐞?
- 涓?GCLI 鍑瘉瀹屽叏闅旂

**缁熶竴绠$悊鐣岄潰**
- 鍦?鎵归噺涓婁紶"鏍囩椤典腑鍙竴娆℃€х鐞嗕袱绉嶅嚟璇?
- 涓婂崐閮ㄥ垎锛欸CLI 鍑瘉鎵归噺涓婁紶锛堣摑鑹蹭富棰橈級
- 涓嬪崐閮ㄥ垎锛欰ntigravity 鍑瘉鎵归噺涓婁紶锛堢豢鑹蹭富棰橈級
- 鍚勮嚜鐙珛鐨勫嚟璇佺鐞嗘爣绛鹃〉

## 馃捑 鏁版嵁瀛樺偍妯″紡

### 馃専 瀛樺偍鍚庣鏀寔

gcli2api 鏀寔涓ょ瀛樺偍鍚庣锛?*鏈湴 SQLite锛堥粯璁わ級** 鍜?**MongoDB锛堜簯绔垎甯冨紡瀛樺偍锛?*

### 馃搧 鏈湴 SQLite 瀛樺偍锛堥粯璁わ級

**榛樿瀛樺偍鏂瑰紡**
- 鏃犻渶閰嶇疆锛屽紑绠卞嵆鐢?
- 鏁版嵁瀛樺偍鍦ㄦ湰鍦?SQLite 鏁版嵁搴撲腑
- 閫傚悎鍗曟満閮ㄧ讲鍜屼釜浜轰娇鐢?
- 鑷姩鍒涘缓鍜岀鐞嗘暟鎹簱鏂囦欢

### 馃崈 MongoDB 浜戠瀛樺偍妯″紡

**浜戠鍒嗗竷寮忓瓨鍌ㄦ柟妗?*

褰撻渶瑕佸瀹炰緥閮ㄧ讲鎴栦簯绔瓨鍌ㄦ椂锛屽彲浠ュ惎鐢?MongoDB 瀛樺偍妯″紡銆?

### 鈿欙笍 鍚敤 MongoDB 妯″紡

**姝ラ 1: 閰嶇疆 MongoDB 杩炴帴**
```bash
# 鏈湴 MongoDB
export MONGODB_URI="mongodb://localhost:27017"

# MongoDB Atlas 浜戞湇鍔?
export MONGODB_URI="mongodb+srv://username:password@cluster.mongodb.net"

# 甯﹁璇佺殑 MongoDB
export MONGODB_URI="mongodb://admin:password@localhost:27017/admin"

# 鍙€夛細鑷畾涔夋暟鎹簱鍚嶇О锛堥粯璁? gcli2api锛?
export MONGODB_DATABASE="my_gcli_db"
```

**姝ラ 2: 鍚姩搴旂敤**
```bash
# 搴旂敤浼氳嚜鍔ㄦ娴?MongoDB 閰嶇疆骞朵娇鐢?MongoDB 瀛樺偍
python web.py
```

**Docker 鐜浣跨敤 MongoDB**
```bash
# 鍗曟満 MongoDB 閮ㄧ讲
docker run -d --name gcli2api \
  -e MONGODB_URI="mongodb://mongodb:27017" \
  -e API_PASSWORD=your_password \
  --network your_network \
  ghcr.io/su-kaka/gcli2api:latest

# 浣跨敤 MongoDB Atlas
docker run -d --name gcli2api \
  -e MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/gcli2api" \
  -e API_PASSWORD=your_password \
  -p 7861:7861 \
  ghcr.io/su-kaka/gcli2api:latest
```

**Docker Compose 绀轰緥**
```yaml
version: '3.8'

services:
  mongodb:
    image: mongo:7
    container_name: gcli2api-mongodb
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password123
    volumes:
      - mongodb_data:/data/db
    ports:
      - "27017:27017"

  gcli2api:
    image: ghcr.io/su-kaka/gcli2api:latest
    container_name: gcli2api
    restart: unless-stopped
    depends_on:
      - mongodb
    environment:
      - MONGODB_URI=mongodb://admin:password123@mongodb:27017/admin
      - MONGODB_DATABASE=gcli2api
      - API_PASSWORD=your_api_password
      - PORT=7861
    ports:
      - "7861:7861"

volumes:
  mongodb_data:
```


### 馃敡 楂樼骇閰嶇疆

**MongoDB 杩炴帴浼樺寲**
```bash
# 杩炴帴姹犲拰瓒呮椂閰嶇疆
export MONGODB_URI="mongodb://localhost:27017?maxPoolSize=10&serverSelectionTimeoutMS=5000"

# 鍓湰闆嗛厤缃?
export MONGODB_URI="mongodb://host1:27017,host2:27017,host3:27017/gcli2api?replicaSet=myReplicaSet"

# 璇诲啓鍒嗙閰嶇疆
export MONGODB_URI="mongodb://localhost:27017/gcli2api?readPreference=secondaryPreferred"
```

### 鐜鍙橀噺閰嶇疆

**鍩虹閰嶇疆**
- `PORT`: 鏈嶅姟绔彛锛堥粯璁わ細7861锛?
- `HOST`: 鏈嶅姟鍣ㄧ洃鍚湴鍧€锛堥粯璁わ細0.0.0.0锛?

**瀵嗙爜閰嶇疆**
- `API_PASSWORD`: 鑱婂ぉ API 璁块棶瀵嗙爜锛堥粯璁わ細缁ф壙 PASSWORD 鎴?pwd锛?
- `PANEL_PASSWORD`: 鎺у埗闈㈡澘璁块棶瀵嗙爜锛堥粯璁わ細缁ф壙 PASSWORD 鎴?pwd锛? 
- `PASSWORD`: 閫氱敤瀵嗙爜锛岃缃悗瑕嗙洊涓婅堪涓や釜锛堥粯璁わ細pwd锛?

**鎬ц兘鍜岀ǔ瀹氭€ч厤缃?*
- `RETRY_429_ENABLED`: 鍚敤 429 閿欒鑷姩閲嶈瘯锛堥粯璁わ細true锛?
- `RETRY_429_MAX_RETRIES`: 429 閿欒鏈€澶ч噸璇曟鏁帮紙榛樿锛?锛?
- `RETRY_429_INTERVAL`: 429 閿欒閲嶈瘯闂撮殧锛岀锛堥粯璁わ細1.0锛?
- `ANTI_TRUNCATION_MAX_ATTEMPTS`: 鎶楁埅鏂渶澶ч噸璇曟鏁帮紙榛樿锛?锛?

**缃戠粶鍜屼唬鐞嗛厤缃?*
- `PROXY`: HTTP/HTTPS 浠g悊鍦板潃锛堟牸寮忥細`http://host:port`锛?
- `OAUTH_PROXY_URL`: OAuth 璁よ瘉浠g悊绔偣
- `GOOGLEAPIS_PROXY_URL`: Google APIs 浠g悊绔偣
- `METADATA_SERVICE_URL`: 鍏冩暟鎹湇鍔′唬鐞嗙鐐?

**鑷姩鍖栭厤缃?*
- `AUTO_BAN`: 鍚敤鍑瘉鑷姩灏佺锛堥粯璁わ細true锛?
- `AUTO_LOAD_ENV_CREDS`: 鍚姩鏃惰嚜鍔ㄥ姞杞界幆澧冨彉閲忓嚟璇侊紙榛樿锛歠alse锛?

**鍏煎鎬ч厤缃?*
- `COMPATIBILITY_MODE`: 鍚敤鍏煎鎬фā寮忥紝灏?system 娑堟伅杞负 user 娑堟伅锛堥粯璁わ細false锛?

**鏃ュ織閰嶇疆**
- `LOG_LEVEL`: 鏃ュ織绾у埆锛圖EBUG/INFO/WARNING/ERROR锛岄粯璁わ細INFO锛?
- `LOG_FILE`: 鏃ュ織鏂囦欢璺緞锛堥粯璁わ細log.txt锛?

**瀛樺偍閰嶇疆**

**SQLite 閰嶇疆锛堥粯璁わ級**
- 鏃犻渶閰嶇疆锛岃嚜鍔ㄤ娇鐢ㄦ湰鍦?SQLite 鏁版嵁搴?
- 鏁版嵁搴撴枃浠惰嚜鍔ㄥ垱寤哄湪椤圭洰鐩綍

**MongoDB 閰嶇疆锛堝彲閫変簯绔瓨鍌級**
- `MONGODB_URI`: MongoDB 杩炴帴瀛楃涓诧紙璁剧疆鍚庡惎鐢?MongoDB 妯″紡锛?
- `MONGODB_DATABASE`: MongoDB 鏁版嵁搴撳悕绉帮紙榛樿锛歡cli2api锛?

**Docker 浣跨敤绀轰緥**
```bash
# 浣跨敤閫氱敤瀵嗙爜
docker run -d --name gcli2api \
  -e PASSWORD=mypassword \
  -e PORT=7861 \
  ghcr.io/su-kaka/gcli2api:latest

# 浣跨敤鍒嗙瀵嗙爜
docker run -d --name gcli2api \
  -e API_PASSWORD=my_api_password \
  -e PANEL_PASSWORD=my_panel_password \
  -e PORT=7861 \
  ghcr.io/su-kaka/gcli2api:latest
```

娉ㄦ剰锛氬綋璁剧疆浜嗗嚟璇佺幆澧冨彉閲忔椂锛岀郴缁熷皢浼樺厛浣跨敤鐜鍙橀噺涓殑鍑瘉锛屽拷鐣?`creds` 鐩綍涓殑鏂囦欢銆?

### API 浣跨敤鏂瑰紡

鏈湇鍔℃敮鎸佷笁濂楀畬鏁寸殑 API 绔偣锛?

#### 1. OpenAI 鍏煎绔偣锛圙CLI锛?

**绔偣锛?* `/v1/chat/completions`
**璁よ瘉锛?* `Authorization: Bearer your_api_password`

鏀寔涓ょ璇锋眰鏍煎紡锛屼細鑷姩妫€娴嬪苟澶勭悊锛?

**OpenAI 鏍煎紡锛?*
```json
{
  "model": "gemini-2.5-pro",
  "messages": [
    {"role": "system", "content": "You are a helpful assistant"},
    {"role": "user", "content": "Hello"}
  ],
  "temperature": 0.7,
  "stream": true
}
```

**Gemini 鍘熺敓鏍煎紡锛?*
```json
{
  "model": "gemini-2.5-pro",
  "contents": [
    {"role": "user", "parts": [{"text": "Hello"}]}
  ],
  "systemInstruction": {"parts": [{"text": "You are a helpful assistant"}]},
  "generationConfig": {
    "temperature": 0.7
  }
}
```

#### 2. Gemini 鍘熺敓绔偣锛圙CLI锛?

**闈炴祦寮忕鐐癸細** `/v1/models/{model}:generateContent`
**娴佸紡绔偣锛?* `/v1/models/{model}:streamGenerateContent`
**妯″瀷鍒楄〃锛?* `/v1/models`

**璁よ瘉鏂瑰紡锛堜换閫変竴绉嶏級锛?*
- `Authorization: Bearer your_api_password`
- `x-goog-api-key: your_api_password`
- URL 鍙傛暟锛歚?key=your_api_password`

**璇锋眰绀轰緥锛?*
```bash
# 浣跨敤 x-goog-api-key 澶撮儴
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:generateContent" \
  -H "x-goog-api-key: your_api_password" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "Hello"}]}
    ]
  }'

# 浣跨敤 URL 鍙傛暟
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:streamGenerateContent?key=your_api_password" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "Hello"}]}
    ]
  }'
```

#### 3. Claude API 鏍煎紡绔偣

**绔偣锛?* `/v1/messages`
**璁よ瘉锛?* `x-api-key: your_api_password` 鎴?`Authorization: Bearer your_api_password`

**璇锋眰绀轰緥锛?*
```bash
curl -X POST "http://127.0.0.1:7861/v1/messages" \
  -H "x-api-key: your_api_password" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.5-pro",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Hello, Claude!"}
    ]
  }'
```

**鏀寔 system 鍙傛暟锛?*
```json
{
  "model": "gemini-2.5-pro",
  "max_tokens": 1024,
  "system": "You are a helpful assistant",
  "messages": [
    {"role": "user", "content": "Hello"}
  ]
}
```

**璇存槑锛?*
- 瀹屽叏鍏煎 Claude API 鏍煎紡瑙勮寖
- 鑷姩杞崲涓?Gemini 鏍煎紡璋冪敤鍚庣
- 鏀寔 Claude 鐨勬墍鏈夋爣鍑嗗弬鏁?
- 鍝嶅簲鏍煎紡绗﹀悎 Claude API 瑙勮寖

## 馃搵 瀹屾暣 API 鍙傝€?

### Web 鎺у埗鍙?API

**璁よ瘉绔偣**
- `POST /auth/login` - 鐢ㄦ埛鐧诲綍
- `POST /auth/start` - 寮€濮?OAuth 璁よ瘉锛堟敮鎸?GCLI 鍜?Antigravity 妯″紡锛?
- `POST /auth/callback` - 澶勭悊 OAuth 鍥炶皟
- `POST /auth/callback-url` - 浠庡洖璋?URL 鐩存帴瀹屾垚璁よ瘉
- `GET /auth/status/{project_id}` - 妫€鏌ヨ璇佺姸鎬?

**鍑瘉绠$悊绔偣**锛堟敮鎸?`mode=geminicli` 鎴?`mode=antigravity` 鍙傛暟锛?
- `POST /creds/upload` - 鎵归噺涓婁紶鍑瘉鏂囦欢锛堟敮鎸?JSON 鍜?ZIP锛?
- `GET /creds/status` - 鑾峰彇鍑瘉鐘舵€佸垪琛紙鏀寔鍒嗛〉鍜岀瓫閫夛級
- `GET /creds/detail/{filename}` - 鑾峰彇鍗曚釜鍑瘉璇︽儏
- `POST /creds/action` - 鍗曚釜鍑瘉鎿嶄綔锛堝惎鐢?绂佺敤/鍒犻櫎锛?
- `POST /creds/batch-action` - 鎵归噺鍑瘉鎿嶄綔
- `GET /creds/download/{filename}` - 涓嬭浇鍗曚釜鍑瘉鏂囦欢
- `GET /creds/download-all` - 鎵撳寘涓嬭浇鎵€鏈夊嚟璇?
- `POST /creds/fetch-email/{filename}` - 鑾峰彇鐢ㄦ埛閭
- `POST /creds/refresh-all-emails` - 鎵归噺鍒锋柊鐢ㄦ埛閭
- `POST /creds/deduplicate-by-email` - 鎸夐偖绠卞幓閲嶅嚟璇?
- `POST /creds/verify-project/{filename}` - 妫€楠屽嚟璇?Project ID
- `GET /creds/quota/{filename}` - 鑾峰彇鍑瘉棰濆害淇℃伅锛堜粎 Antigravity锛?

**閰嶇疆绠$悊绔偣**
- `GET /config/get` - 鑾峰彇褰撳墠閰嶇疆
- `POST /config/save` - 淇濆瓨閰嶇疆

**鏃ュ織绠$悊绔偣**
- `POST /logs/clear` - 娓呯┖鏃ュ織
- `GET /logs/download` - 涓嬭浇鏃ュ織鏂囦欢
- `WebSocket /logs/stream` - 瀹炴椂鏃ュ織娴?

**鐗堟湰淇℃伅绔偣**
- `GET /version/info` - 鑾峰彇鐗堟湰淇℃伅锛堝彲閫?`check_update=true` 鍙傛暟妫€鏌ユ洿鏂帮級

### 鑱婂ぉ API 鍔熻兘鐗规€?

**澶氭ā鎬佹敮鎸?*
```json
{
  "model": "gemini-2.5-pro",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "鎻忚堪杩欏紶鍥剧墖"},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."
          }
        }
      ]
    }
  ]
}
```

**鎬濈淮妯″紡鏀寔**
```json
{
  "model": "gemini-2.5-pro-maxthinking",
  "messages": [
    {"role": "user", "content": "澶嶆潅鏁板闂"}
  ]
}
```

鍝嶅簲灏嗗寘鍚垎绂荤殑鎬濈淮鍐呭锛?
```json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "鏈€缁堢瓟妗?,
      "reasoning_content": "璇︾粏鐨勬€濊€冭繃绋?.."
    }
  }]
}
```

**娴佸紡鎶楁埅鏂娇鐢?*
```json
{
  "model": "娴佸紡鎶楁埅鏂?gemini-2.5-pro",
  "messages": [
    {"role": "user", "content": "鍐欎竴绡囬暱鏂囩珷"}
  ],
  "stream": true
}
```

**鍏煎鎬фā寮?*
```bash
# 鍚敤鍏煎鎬фā寮?
export COMPATIBILITY_MODE=true
```
姝ゆā寮忎笅锛屾墍鏈?`system` 娑堟伅浼氳浆鎹负 `user` 娑堟伅锛屾彁楂樹笌鏌愪簺瀹㈡埛绔殑鍏煎鎬с€?

---

## 馃挰 浜ゆ祦缇?

娆㈣繋鍔犲叆 QQ 缇や氦娴佽璁猴紒

**QQ 缇ゅ彿锛?083250744**

<img src="docs/qq缇?jpg" width="200" alt="QQ缇や簩缁寸爜">

---

## 璁稿彲璇佷笌鍏嶈矗澹版槑

鏈」鐩粎渚涘涔犲拰鐮旂┒鐢ㄩ€斻€備娇鐢ㄦ湰椤圭洰琛ㄧず鎮ㄥ悓鎰忥細
- 涓嶅皢鏈」鐩敤浜庝换浣曞晢涓氱敤閫?
- 鎵挎媴浣跨敤鏈」鐩殑鎵€鏈夐闄╁拰璐d换
- 閬靛畧鐩稿叧鐨勬湇鍔℃潯娆惧拰娉曞緥娉曡

椤圭洰浣滆€呭鍥犱娇鐢ㄦ湰椤圭洰鑰屼骇鐢熺殑浠讳綍鐩存帴鎴栭棿鎺ユ崯澶变笉鎵挎媴璐d换銆?