feat(docs): add logo and improve setup instructions (#5)

main
Yixing Lao 2026-04-24 21:40:23 +08:00 committed by GitHub
parent 08eeb87c48
commit ab14a07f65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 68 additions and 17 deletions

View File

@ -1,4 +1,4 @@
# deepseek-cursor-proxy
<h1><img src="assets/logo.png" width="90" alt="deepseek-cursor-proxy logo" style="vertical-align: middle;"> deepseek-cursor-proxy</h1>
Compatibility proxy connecting Cursor to DeepSeek thinking models (`deepseek-v4-pro` and `deepseek-v4-flash`).
@ -6,7 +6,7 @@ Compatibility proxy connecting Cursor to DeepSeek thinking models (`deepseek-v4-
- ✅ Caches DeepSeek `reasoning_content` from regular and streamed responses, then restores it on later tool-call turns when Cursor omits it. See [DeepSeek docs](https://api-docs.deepseek.com/guides/thinking_mode#tool-calls) for more details.
- ✅ Mirrors streamed `reasoning_content` into Cursor-visible `<think>...</think>` text so that thinking tokens are shown in Cursor's UI. For BYOK/proxy mode, Cursor renders this as normal text, not as a native collapsible thinking block.
- ✅ Starts an ngrok tunnel so Cursor can reach the local proxy.
- ✅ Starts an ngrok tunnel so Cursor can reach the local proxy through a public HTTPS URL.
- ✅ Provides other compatibility fixes to make DeepSeek models run well in Cursor.
## Why This Exists
@ -32,9 +32,11 @@ Provider returned error:
### Step 1: Set Up ngrok
Create an ngrok account, visit ngrok's Dashboard: https://dashboard.ngrok.com
Cursor blocks non-public API URLs such as `localhost`, so the proxy needs a public HTTPS URL. [ngrok](https://ngrok.com/) can expose the local proxy to Cursor without opening router ports. Alternatively, you may use [Cloudflare Tunnel](https://developers.cloudflare.com/tunnel/setup/).
![ngrok dashboard showing the public URL](assets/ngrok_dashboard.png)
Create an ngrok account, then visit ngrok's Dashboard: https://dashboard.ngrok.com
![ngrok dashboard](assets/ngrok_dashboard.png)
Then, install and authenticate ngrok once:
@ -69,14 +71,16 @@ Note: you can toggle the custom API on and off with:
Install and run the proxy:
```bash
# Or, use your favourite Python package manager
# Or, use your favourite Python env manager
conda create -n dcp python=3.10 -y
conda activate dcp
# Install
git clone https://github.com/yxlao/deepseek-cursor-proxy.git
cd deepseek-cursor-proxy
pip install -e .
# Run in normal mode
# Run
deepseek-cursor-proxy
```
@ -84,23 +88,19 @@ The proxy creates `~/.deepseek-cursor-proxy/config.yaml` on first run.
This will also print the ngrok public URL. If it differs from the one in Cursor, update it in Cursor's Base URL field.
Normal mode prints startup info, the ngrok URL, and safe request summaries. It does not print prompts, code, API keys, or request bodies.
For more request lifecycle metadata, use verbose mode:
```bash
deepseek-cursor-proxy --verbose
```
Verbose mode adds client/path/upstream metadata and full payload logs. It may print prompts and code to the terminal, so keep it off for normal use.
### Step 4: Chat with DeepSeek in Cursor
Select `deepseek-v4-pro` in Cursor and use chat or agent mode as usual.
![Chatting with DeepSeek in Cursor](assets/cursor_chat.png)
## Debugging and Development
## Debugging
Run with verbose output:
```bash
deepseek-cursor-proxy --verbose
```
Run without ngrok for local curl testing:

BIN
assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

51
assets/logo.svg Normal file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="-20 -20 547.09113 432.29314"
width="547.09113"
height="432.29315"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<!-- Whale body -->
<path
d="m 253,114.86161 c -45.92709,14.27113 -82.71498,40.90567 -105,70 17.5114,5.36136 37.49219,9.56609 48,26 -4.70603,12.83463 -27.88458,64.3883 -96.5,64.1 3.25287,-14.40559 13.79207,-5.9152 26.5,-31.1 7.2,-15.5 3.89519,-29.64759 -0.90481,-42.54759 L 114,178.86161 c -15.86826,22.02798 -41.88742,34.9478 -41.2,63.4 l 0.2,11.6 -6.97899,10.08318 C 48.92101,256.34479 33.7,247.06161 20,250.86161 l -5.2,1.1 -34.8,6.9 c 2.22551,12.61121 365.31509,141.85759 497.11638,26.63814 17.91838,-15.04094 33.2139,34.62107 36.51784,28.53885 C 555.67962,236.63727 495.53261,117.94776 364,104.86161 c -38.2,-3.6 -76.4,-0.6 -111,10"
fill="#4d6bfe"
id="path1" />
<!-- Whale belly -->
<path
d="m 114,178.86161 c -24.91809,22.41929 -49.62736,42.02013 -41,75 -25.88736,-22.33434 -62.84658,-1.68936 -93,5 2.1,11.9 14.8407302,24.04853 24.3407302,31.14853 26.9644098,18.77157 48.1031198,11.04228 76.4504198,10.26917 79.83045,99.29128 315.25127,168.4065 415.43543,48.43636 30.14264,-36.6413 32.48086,-78.7128 30.22732,-98.8085 C 498.80687,274.63614 397.16257,236.3057 364,259.86161 c -1.8424,4.03208 26.94328,10.28509 48.71324,10.28509 21.76997,0 32.39427,-4.46758 35.15714,1.45567 2.00222,4.29253 -22.26089,19.3223 -50.82644,19.25335 C 196.91311,274.76848 177.2751,356.23604 81,273.86161 c 7.22691,-0.36179 13.44021,-2.19777 19.9,-5.1 11.3,-5 19.6,-14 25.1,-24.9 12.54329,-29.67204 3.50788,-41.73818 -12,-65"
fill="#6d86ff"
id="path2" />
<!-- Smile -->
<path
d="m 235.29689,319.65101 c 0,0 -57.73871,39.29007 -75.77946,54.38423 -18.04076,15.09415 -19.10661,21.69337 -11.82705,24.24 7.27956,2.54663 178.27712,-10.94593 201.23571,-89.12486 -38.94648,-8.00044 -80.60165,-10.86896 -113.6292,10.50063"
fill="#4d6bfe"
id="path3"
style="stroke-width:1.11632" />
<!-- Eye -->
<circle
cx="-371.21661"
cy="213.59879"
r="20.452892"
fill="#ffffff"
id="circle3"
style="stroke-width:1.46092"
transform="scale(-1,1)" />
<!-- Cursor (full, dark blue) -->
<!-- Cursor right half (light blue overlay) -->
<g
id="g5"
transform="matrix(-0.91717882,0,0,0.91717882,481.79815,-23.288813)">
<path
d="M 173.5,4.5 220,95.8 q 3.5,7.2 -4.5,7.2 h -26.3 q -6,0 -7.9,5.7 l -7.1,20.7 q -0.6,1.6 -2.4,1.6 h -1 q -1.8,0 -2.4,-1.6 l -7.1,-20.7 q -1.9,-5.7 -7.9,-5.7 h -26.3 q -8,0 -4.5,-7.2 L 169.1,4.5 c 2.5,-1.2 1.9,-1.2 4.4,0 z"
fill="#4d6bfe"
id="path4" />
<path
d="M 171.3,3.6209269 V 131 h 0.5 c 1.2,0 2,-0.53333 2.4,-1.6 l 7.1,-20.7 c 1.26667,-3.8 3.9,-5.7 7.9,-5.7 h 26.3 c 5.33333,0 6.83333,-2.4 4.5,-7.2 L 173.5,4.5 c -1.12452,-0.5457368 -2.06113,-1.0541558 -2.2,-0.8790731 z"
fill="#6d86ff"
id="path5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB