CoolFace
Apppublic

devin15/cursor2api-rust

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
readme.html651 linesDownload Raw Back to static
1<h1>cursor-api</h1>2 3<h2>说明</h2>4 5<ul>6  <li>当前版本已稳定,若发现响应出现缺字漏字,与本程序无关。</li>7  <li>若发现首字慢,与本程序无关。</li>8  <li>若发现响应出现乱码,也与本程序无关。</li>9  <li>属于官方的问题,请不要像作者反馈。</li>10  <li>本程序拥有堪比客户端原本的速度,甚至可能更快。</li>11  <li>本程序的性能是非常厉害的。</li>12  <li>根据本项目开源协议,Fork的项目不能以作者的名义进行任何形式的宣传、推广或声明。</li>13</ul>14 15<h2>获取key</h2>16 17<ol>18  <li>访问 <a href="https://www.cursor.com">www.cursor.com</a> 并完成注册登录</li>19  <li>在浏览器中打开开发者工具(F12)</li>20  <li>在 Application-Cookies 中查找名为 <code>WorkosCursorSessionToken</code> 的条目,并复制其第三个字段。请注意,%3A%3A 是 :: 的 URL 编码形式,cookie21    的值使用冒号 (:) 进行分隔。</li>22</ol>23 24<h2>配置说明</h2>25 26<h3>环境变量</h3>27 28<ul>29  <li><code>PORT</code>: 服务器端口号(默认:3000)</li>30  <li><code>AUTH_TOKEN</code>: 认证令牌(必须,用于API认证)</li>31  <li><code>ROUTE_PREFIX</code>: 路由前缀(可选)</li>32  <li><code>TOKEN_FILE</code>: token文件路径(默认:.token)</li>33  <li><code>TOKEN_LIST_FILE</code>: token列表文件路径(默认:.token-list)</li>34</ul>35 36<p>更多请查看 <code>/env-example</code></p>37 38<h3>Token文件格式</h3>39 40<ol>41  <li>42    <p><code>.token</code> 文件:每行一个token,支持以下格式:</p>43 44    <pre><code># 这是注释45token146# alias与标签的作用差不多47alias::token248</code></pre>49 50    <p>alias 可以是任意值,用于区分不同的 token,更方便管理,WorkosCursorSessionToken 是相同格式<br>51      该文件将自动向.token-list文件中追加token,同时自动生成checksum</p>52  </li>53 54  <li>55    <p><code>.token-list</code> 文件:每行为token和checksum的对应关系:</p>56 57    <pre><code># 这里的#表示这行在下次读取要删除58token1,checksum159# alias被舍弃,会自动删除最后一个:或%3A的后一位前的所有内容60token2,checksum261</code></pre>62 63    <p>该文件可以被自动管理,但用户仅可在确认自己拥有修改能力时修改,一般仅有以下情况需要手动修改:</p>64 65    <ul>66      <li>需要删除某个 token</li>67      <li>需要使用已有 checksum 来对应某一个 token</li>68    </ul>69  </li>70</ol>71 72<h3>模型列表</h3>73 74<p>写死了,后续也不会会支持自定义模型列表</p>75 76<pre><code>claude-3.5-sonnet77gpt-478gpt-4o79claude-3-opus80cursor-fast81cursor-small82gpt-3.5-turbo83gpt-4-turbo-2024-04-0984gpt-4o-128k85gemini-1.5-flash-500k86claude-3-haiku-200k87claude-3-5-sonnet-200k88claude-3-5-sonnet-2024102289gpt-4o-mini90o1-mini91o1-preview92o193claude-3.5-haiku94gemini-exp-120695gemini-2.0-flash-thinking-exp96gemini-2.0-flash-exp97</code></pre>98 99<h1>接口说明</h1>100 101<h2>基础对话</h2>102 103<ul>104  <li>接口地址: <code>/v1/chat/completions</code></li>105  <li>请求方法: POST</li>106  <li>认证方式: Bearer Token107    <ol>108      <li>使用环境变量 <code>AUTH_TOKEN</code> 进行认证</li>109      <li>使用 <code>.token</code> 文件中的令牌列表进行轮询认证</li>110      <li>在v0.1.3-rc.3支持直接使用 token,checksum 进行认证,但未提供配置关闭</li>111    </ol>112  </li>113</ul>114 115<h3>请求格式</h3>116 117<pre><code class="language-json">{118  "model": "string",119  "messages": [120    {121      "role": "system" | "user" | "assistant", // 也可以是 "developer" | "human" | "ai"122      "content": "string" | [123        {124          "type": "text" | "image_url",125          "text": "string",126          "image_url": {127            "url": "string"128          }129        }130      ]131    }132  ],133  "stream": boolean134}135</code></pre>136 137<h3>响应格式</h3>138 139<p>如果 <code>stream</code> 为 <code>false</code>:</p>140 141<pre><code class="language-json">{142  "id": "string",143  "object": "chat.completion",144  "created": number,145  "model": "string",146  "choices": [147    {148      "index": number,149      "message": {150        "role": "assistant",151        "content": "string"152      },153      "finish_reason": "stop" | "length"154    }155  ],156  "usage": {157    "prompt_tokens": 0,158    "completion_tokens": 0,159    "total_tokens": 0160  }161}162</code></pre>163 164<p>不进行 tokens 计算主要是担心性能问题。</p>165 166<p>如果 <code>stream</code> 为 <code>true</code>:</p>167 168<pre><code>data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{"role":"assistant","content":"string"},"finish_reason":null}]}169 170data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{"content":"string"},"finish_reason":null}]}171 172data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{},"finish_reason":"stop"}]}173 174data: [DONE]175</code></pre>176 177<h2>Token管理接口</h2>178 179<h3>简易Token信息管理页面</h3>180 181<ul>182  <li>接口地址: <code>/tokeninfo</code></li>183  <li>请求方法: GET</li>184  <li>响应格式: HTML页面</li>185  <li>功能: 获取 .token 和 .token-list 文件内容,并允许用户方便地使用 API 修改文件内容</li>186</ul>187 188<h3>更新Token信息 (GET)</h3>189 190<ul>191  <li>接口地址: <code>/update-tokeninfo</code></li>192  <li>请求方法: GET</li>193  <li>认证方式: 不需要</li>194  <li>功能: 重新加载tokens并更新应用状态</li>195  <li>响应格式:</li>196</ul>197 198<pre><code class="language-json">{199  "status": "success",200  "message": "Token list has been reloaded"201}202</code></pre>203 204<h3>更新Token信息 (POST)</h3>205 206<ul>207  <li>接口地址: <code>/update-tokeninfo</code></li>208  <li>请求方法: POST</li>209  <li>认证方式: Bearer Token</li>210  <li>请求格式:</li>211</ul>212 213<pre><code class="language-json">{214  "tokens": "string",215  "token_list": "string"216}217</code></pre>218 219<ul>220  <li>响应格式:</li>221</ul>222 223<pre><code class="language-json">{224  "status": "success",225  "token_file": "string",226  "token_list_file": "string",227  "tokens_count": number,228  "message": "Token files have been updated and reloaded"229}230</code></pre>231 232<h3>获取Token信息</h3>233 234<ul>235  <li>接口地址: <code>/get-tokeninfo</code></li>236  <li>请求方法: POST</li>237  <li>认证方式: Bearer Token</li>238  <li>响应格式:</li>239</ul>240 241<pre><code class="language-json">{242  "status": "success",243  "token_file": "string",244  "token_list_file": "string",245  "tokens": "string",246  "tokens_count": number,247  "token_list": "string"248}249</code></pre>250 251<h2>配置管理接口</h2>252 253<h3>配置页面</h3>254 255<ul>256  <li>接口地址: <code>/config</code></li>257  <li>请求方法: GET</li>258  <li>响应格式: HTML页面</li>259  <li>功能: 提供配置管理界面,可以修改页面内容和系统配置</li>260</ul>261 262<h3>更新配置</h3>263 264<ul>265  <li>接口地址: <code>/config</code></li>266  <li>请求方法: POST</li>267  <li>认证方式: Bearer Token</li>268  <li>请求格式:</li>269</ul>270 271<pre><code class="language-json">{272  "action": "get" | "update" | "reset",273  "path": "string",274  "content": {275    "type": "default" | "text" | "html",276    "content": "string"277  },278  "enable_stream_check": boolean,279  "include_stop_stream": boolean,280  "vision_ability": "none" | "base64" | "all", // "disabled" | "base64-only" | "base64-http"281  "enable_slow_pool": boolean,282  "enable_all_claude": boolean,283  "check_usage_models": {284    "type": "none" | "default" | "all" | "list",285    "content": "string"286  }287}288</code></pre>289 290<ul>291  <li>响应格式:</li>292</ul>293 294<pre><code class="language-json">{295  "status": "success",296  "message": "string",297  "data": {298    "page_content": {299      "type": "default" | "text" | "html", // 对于js和css后两者是一样的300      "content": "string"301    },302    "enable_stream_check": boolean,303    "include_stop_stream": boolean,304    "vision_ability": "none" | "base64" | "all",305    "enable_slow_pool": boolean,306    "enable_all_claude": boolean,307    "check_usage_models": {308      "type": "none" | "default" | "all" | "list",309      "content": "string"310    }311  }312}313</code></pre>314 315<p>注意:<code>check_usage_models</code> 字段的默认值为:</p>316 317<pre><code class="language-json">{318  "type": "default",319  "content": "claude-3-5-sonnet-20241022,claude-3.5-sonnet,gemini-exp-1206,gpt-4,gpt-4-turbo-2024-04-09,gpt-4o,claude-3.5-haiku,gpt-4o-128k,gemini-1.5-flash-500k,claude-3-haiku-200k,claude-3-5-sonnet-200k"320}</code></pre>321 322<p>这些模型将默认进行使用量检查。您可以通过配置接口修改此设置。</p>323 324<p>路径修改注意:选择类型再修改文本,否则选择默认时内容的修改无效,在更新配置后自动被覆盖导致内容丢失,自行改进。</p>325 326<h2>静态资源接口</h2>327 328<h3>获取共享样式</h3>329 330<ul>331  <li>接口地址: <code>/static/shared-styles.css</code></li>332  <li>请求方法: GET</li>333  <li>响应格式: CSS文件</li>334  <li>功能: 获取共享样式表</li>335</ul>336 337<h3>获取共享脚本</h3>338 339<ul>340  <li>接口地址: <code>/static/shared.js</code></li>341  <li>请求方法: GET</li>342  <li>响应格式: JavaScript文件</li>343  <li>功能: 获取共享JavaScript代码</li>344</ul>345 346<h3>环境变量示例</h3>347 348<ul>349  <li>接口地址: <code>/env-example</code></li>350  <li>请求方法: GET</li>351  <li>响应格式: 文本文件</li>352  <li>功能: 获取环境变量配置示例</li>353</ul>354 355<h2>其他接口</h2>356 357<h3>获取模型列表</h3>358 359<ul>360  <li>接口地址: <code>/v1/models</code></li>361  <li>请求方法: GET</li>362  <li>响应格式:</li>363</ul>364 365<pre><code class="language-json">{366  "object": "list",367  "data": [368    {369      "id": "string",370      "object": "model",371      "created": number,372      "owned_by": "string"373    }374  ]375}376</code></pre>377 378<h3>获取一个随机hash</h3>379 380<ul>381  <li>接口地址: <code>/get-hash</code></li>382  <li>请求方法: GET</li>383  <li>响应格式:</li>384</ul>385 386<pre><code class="language-plaintext">string</code></pre>387 388<h3>获取或修复checksum</h3>389 390<ul>391  <li>接口地址: <code>/get-checksum</code></li>392  <li>请求方法: GET</li>393  <li>请求参数:394    <ul>395      <li><code>checksum</code>: 可选,用于修复的旧版本生成的checksum,也可只传入前8个字符;可用来自动刷新时间戳头</li>396    </ul>397  </li>398  <li>响应格式:</li>399</ul>400 401<pre><code class="language-plaintext">string</code></pre>402 403<p>说明:</p>404<ul>405  <li>如果不提供<code>checksum</code>参数,将生成一个新的随机checksum</li>406  <li>如果提供<code>checksum</code>参数,将尝试修复旧版本的checksum以适配v0.1.3-rc.3之后的版本使用,修复失败会返回新的checksum;若输入的checksum本来就有效,则返回更新tsheader后的checksum</li>407</ul>408 409<h3>获取当前的tsheader</h3>410 411<ul>412  <li>接口地址: <code>/get-tsheader</code></li>413  <li>请求方法: GET</li>414  <li>响应格式:</li>415</ul>416 417<pre><code class="language-plaintext">string</code></pre>418 419<h3>健康检查接口</h3>420 421<ul>422  <li>接口地址: <code>/health</code> 或 <code>/</code>(重定向)</li>423  <li>请求方法: GET</li>424  <li>认证方式: Bearer Token(可选)</li>425  <li>响应格式: 根据配置返回不同的内容类型(默认、文本或HTML),默认JSON</li>426</ul>427 428<pre><code class="language-json">{429  "status": "success",430  "version": "string",431  "uptime": number,432  "stats": {433    "started": "string",434    "total_requests": number,435    "active_requests": number,436    "system": {437      "memory": {438        "rss": number439      },440      "cpu": {441        "usage": number442      }443    }444  },445  "models": ["string"],446  "endpoints": ["string"]447}448</code></pre>449 450<p>注意:<code>stats</code> 字段仅在请求头中包含正确的 <code>AUTH_TOKEN</code> 时才会返回。否则,该字段将被省略。</p>451 452<h3>获取日志接口</h3>453 454<ul>455  <li>接口地址: <code>/logs</code></li>456  <li>请求方法: GET</li>457  <li>响应格式: 根据配置返回不同的内容类型(默认、文本或HTML)</li>458</ul>459 460<h3>获取日志数据</h3>461 462<ul>463  <li>接口地址: <code>/logs</code></li>464  <li>请求方法: POST</li>465  <li>认证方式: Bearer Token</li>466  <li>响应格式:</li>467</ul>468 469<pre><code class="language-json">{470  "total": number,471  "logs": [472    {473      "id": number,474      "timestamp": "string",475      "model": "string",476      "token_info": {477        "token": "string",478        "checksum": "string",479        "profile": {480          "usage": {481            "premium": {482              "requests": number,483              "requests_total": number,484              "tokens": number,485              "max_requests": number,486              "max_tokens": number487            },488            "standard": {489              "requests": number,490              "requests_total": number,491              "tokens": number,492              "max_requests": number,493              "max_tokens": number494            },495            "unknown": {496              "requests": number,497              "requests_total": number,498              "tokens": number,499              "max_requests": number,500              "max_tokens": number501            }502          },503          "user": {504            "email": "string",505            "name": "string",506            "id": "string",507            "updated_at": "string"508          },509          "stripe": {510            "membership_type": "free" | "free_trial" | "pro" | "enterprise",511            "payment_id": "string",512            "days_remaining_on_trial": number513          }514        }515      },516      "prompt": "string",517      "timing": {518        "total": number,519        "first": number520      },521      "stream": boolean,522      "status": "string",523      "error": "string"524    }525  ],526  "timestamp": "string",527  "status": "success"528}529</code></pre>530 531<h3>获取用户信息</h3>532 533<ul>534  <li>接口地址: <code>/userinfo</code></li>535  <li>请求方法: POST</li>536  <li>认证方式: 请求体中包含token</li>537  <li>请求格式:</li>538</ul>539 540<pre><code class="language-json">{541  "token": "string"542}543</code></pre>544 545<ul>546  <li>响应格式:</li>547</ul>548 549<pre><code class="language-json">{550  "usage": {551    "premium": {552      "requests": number,553      "requests_total": number,554      "tokens": number,555      "max_requests": number,556      "max_tokens": number557    },558    "standard": {559      "requests": number,560      "requests_total": number,561      "tokens": number,562      "max_requests": number,563      "max_tokens": number564    },565    "unknown": {566      "requests": number,567      "requests_total": number,568      "tokens": number,569      "max_requests": number,570      "max_tokens": number571    }572  },573  "user": {574    "email": "string",575    "name": "string",576    "id": "string",577    "updated_at": "string"578  },579  "stripe": {580    "membership_type": "free" | "free_trial" | "pro" | "enterprise",581    "payment_id": "string",582    "days_remaining_on_trial": number583  }584}585</code></pre>586 587<p>如果发生错误,响应格式为:</p>588 589<pre><code class="language-json">{590  "error": "string"591}592</code></pre>593 594<h3>基础校准</h3>595 596<ul>597  <li>接口地址: <code>/basic-calibration</code></li>598  <li>请求方法: POST</li>599  <li>认证方式: 请求体中包含token</li>600  <li>请求格式:</li>601</ul>602 603<pre><code class="language-json">{604  "token": "string"605}606</code></pre>607 608<ul>609  <li>响应格式:</li>610</ul>611 612<pre><code class="language-json">{613  "status": "success" | "error",614  "message": "string",615  "user_id": "string",616  "create_at": "string",617  "checksum_time": number618}619</code></pre>620 621<p>注意: <code>user_id</code>, <code>create_at</code>, 和 <code>checksum_time</code> 字段在校验失败时可能不存在。</p>622 623<h2>偷偷写在最后的话</h2>624 625<p>虽然作者觉得<del>骗</del>收点钱合理,但不强求,要是<strong>主动自愿</strong>发我我肯定收(因为真有人这么做,虽然不是赞助),赞助很合理吧</p>626 627<p>不是<strong>主动自愿</strong>就算了,不是很缺,给了会很感动罢了。</p>628 629<p>虽然不是很建议你赞助,但如果你赞助了,大概可以:</p>630 631<ul>632  <li>测试版更新</li>633  <li>要求功能</li>634  <li>问题更快解决</li>635</ul>636 637<p>即使如此,我也保留可以拒绝赞助和拒绝要求的权利。</p>638 639<p>求赞助还是有点不要脸了,接下来是吐槽:</p>640 641<p>辛辛苦苦做这个也不知道是为了谁,好累。其实还有很多功能可以做,比如直接传token支持配置(其实这个要专门做一个页面),这个作为rc.4的计划之一吧。</p>642 643<p>主要没想做用户管理,所以不存在是否接入LinuxDo的问题。虽然那个半成品公益版做好了就是了。</p>644 645<p>就说这么多,没啥可说的,不管那么多,做就完了。<span>[doge]</span> 自己想象吧。</p>646 647<p>为什么一直说要跑路呢?主要是有时Cursor的Claude太假了,堪比gpt-4o-mini,我对比发现真没啥差别,比以前差远了,无力了,所以不太想做了。我也感觉很奇怪。</p>648 649<p>查询额度会在一开始检测导致和完成时的额度有些差别,但是懒得改了,反正差别不大,对话也没响应内容,恰好完成了统一。</p>650 651<p>有人说少个二维码来着,还是算了。如果觉得好用,给点支持。其实没啥大不了的,没兴趣就不做了。不想那么多了。</p>