Skip to content

2017-7-18 cursor不能用了!!!!

>

1. cursor突然不能用了

2. 大批人在问

https://forum.cursor.com/t/this-model-provider-doesnt-serve-your-region/118453/36

3. 官方说可以退款

https://docs.cursor.com/account/regions#what-you-can-do-today

4. 我要退款

去你妈的,找开源方案

5. 开源的

5.1 roo-code

https://github.com/RooCodeInc/Roo-Code

Fork from cline

vscode插件形式

5.2 cline

https://github.com/cline/cline

vscode插件形式

5.2.1 使用

用不了自己的gemini

同样的配置roo-code可以用

5.2.2 源码

编译

yaml
npm run install:all

Debug

  1. Launch by pressing F5 (or Run->Start Debugging) to open a new VSCode window with the extension loaded. (You may need to install the esbuild problem matchers extension if you run into issues building the project.)

6.

6.1 void

https://voideditor.com/

Vscode 换皮

6.2 claude_code

https://github.com/anthropics/claude-code

只是一个命令行终端

6.3 gemini-cli

https://github.com/google-gemini/gemini-cli

使用gemni apikey

多注册google账号

https://aistudio.google.com/

在环境变量中加入

GEMINI_API_KEY,就可以

6.3.1 源码分析

用户输入在inputprompt.tsx中输入文本

handlerinput()-> handleSubmitAndClear(buffer.text);

app.tsx

xml
<InputPrompt
                  buffer={buffer}
                  inputWidth={inputWidth}
                  suggestionsWidth={suggestionsWidth}
                  onSubmit={handleFinalSubmit}
                  userMessages={userMessages}
                  onClearScreen={handleClearScreen}
                  config={config}
                  slashCommands={slashCommands}
                  commandContext={commandContext}
                  shellModeActive={shellModeActive}
                  setShellModeActive={setShellModeActive}
                  focus={isFocused}
                />

handleFinalSubmit

yaml
const handleFinalSubmit = useCallback(
    (submittedValue: string) => {
      const trimmedValue = submittedValue.trim();
      if (trimmedValue.length > 0) {
        submitQuery(trimmedValue);
      }
    },
    [submitQuery],
  );

调用 useGeminiStream中的submitQuery

submitquery先处理输入

yaml
const { queryToSend, shouldProceed } = await prepareQueryForGemini(
        query,
        userMessageTimestamp,
        abortSignal,
        prompt_id!,
      );

处理@ 和

java
// Handle @-commands (which might involve tool calls)
        if (isAtCommand(trimmedQuery)) {
          const atCommandResult = await handleAtCommand({
            query: trimmedQuery,
            config,
            addItem,
            onDebugMessage,
            messageId: userMessageTimestamp,
            signal: abortSignal,
          });
          if (!atCommandResult.shouldProceed) {
            return { queryToSend: null, shouldProceed: false };
          }
          localQueryToSendToGemini = atCommandResult.processedQuery;
        } else {
          // Normal query for Gemini
          addItem(
            { type: MessageType.USER, text: trimmedQuery },
            userMessageTimestamp,
          );
          localQueryToSendToGemini = trimmedQuery;
        }
      } else {
        // It's a function response (PartListUnion that isn't a string)
        localQueryToSendToGemini = query;
      }

6.3.2 举例

最终,gemini-cli 发送给 Gemini 模型的,并不是你输入的那一行简单文本,而是类似下面这样经过精心包装的多部分内容

json
[
  {
    "text": "请总结一下 @src/config/config.ts 这个文件的作用"
  },
  {
    "text": "\n--- Content from referenced files ---"
  },
  {
    "text": "\nContent from @src/config/config.ts:\n"
  },
  {
    "text": "/**\n * @license\n * Copyright 2025 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport yargs from 'yargs/yargs';\nimport { hideBin } from 'yargs/helpers';\nimport process from 'node:process';\n// ... (config.ts 文件的所有剩余内容) ...\n"
  },
  {
    "text": "\n--- End of content ---"
  }
]

6.3.3 总结:

从代码逻辑看,工具只是把用户需要提交的代码上下文和用户的输入组装成一个包发给ai,

并没有做过多的事。

那cursor应该也是如此,只是一个ui的包装而已。

7. 商业的

7.1 copilot

vscode插件

有代码补全,操作起来感觉没有cursor顺手,

比如,每次自动执行命令,都要我点一下,自动修改文件,自动读取文件是没问题的

有点不聪明,让他处理所有的报错,没处理完就退出了

想换个高级模型,要收费

价格挺轻民,cursor的一半。

7.2 kiro

ide

https://kiro.dev/

还没开放

7.3 trae

https://www.trae.cn/

字节ide

7.4 Vscode 中的gemni code

8. ai代理

目前最强的ai是google 的gemini pro

但是需要翻墙。

我有国外服务器,搭了一个https://github.com/snailyp/gemini-balance

使用cherrystudio可以检查是否可用https://github.com/CherryHQ/cherry-studio

8.1 使用openai接口模式

填上地址和密码即可

8.2 使用gemini模式

https://ai.google.dev/gemini-api/docs/models?hl=zh-cn找模型列表

复制id

添加模型

测试

8.3 gemini-balance 项目分析

9. vscode插件开发

了解这个项目前提要先知道vscode插件是怎么回事

9.1 资源:

有个中文文档:https://liiked.github.io/VS-Code-Extension-Doc-ZH/#/

官方文档 :https://code.visualstudio.com/api

9.2 注册事件

package.json-》

json
"contributes": {
    "commands": [
      {
        "command": "testhello.helloWorld",
        "title": "Hello World"
      }
    ]
  },

插件的入口:activate和deactivate

js
export function activate(context: vscode.ExtensionContext) {

    // Use the console to output diagnostic information (console.log) and errors (console.error)
    // This line of code will only be executed once when your extension is activated
    console.log('Congratulations, your extension "testhello" is now active!');

    // The command has been defined in the package.json file
    // Now provide the implementation of the command with registerCommand
    // The commandId parameter must match the command field in package.json
    const disposable = vscode.commands.registerCommand('testhello.helloWorld', () => {
        // The code you place here will be executed every time your command is executed
        // Display a message box to the user
        vscode.window.showInformationMessage('Hello World from testhello!');
    });

    context.subscriptions.push(disposable);
}

// This method is called when your extension is deactivated
export function deactivate() {}

9.3 简单了解

能力

9.3.1 https://code.visualstudio.com/api/extension-capabilities/extending-workbench