ClineをデバッグしてOllamaの接続エラーが発生している問題を特定する。

2025年2月15日

 今回の記事は下記に行きつくまでにやったことです。

デバッグまでの準備

ClineのREADME.mdに書いてますが、以下の部分をそのままやる。

1. Clone the repository _(Requires [git-lfs](https://git-lfs.com/))_:
    ```bash
    git clone https://github.com/cline/cline.git
    ```
2. Open the project in VSCode:
    ```bash
    code cline
    ```
3. Install the necessary dependencies for the extension and webview-gui:
    ```bash
    npm run install:all
    ```
4. 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](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers) if you run into issues building the project.)

 

 

うまくいけば普通に行けるんでしょうが、私の環境ではF5の時だけなぜかGlobalなnpmを参照してしまい、エラーが出てしまいました。

最初はこちらの問題の解消をやっていったので、念の為記録として残しておきます。

npmの問題解決の部分は多分僕だけの問題だと思うので、デバッグ方法について知りたい方はClineデバッグから見てください。

あと、以下で使用したテンプレートの場合、Authorization Bearer xxxを不要にする必要があります。

その場合、以下で設定した内容を参考にしてください。

一言で言うとAUTH_EXCLUDEに11434(APIのポート)を追加するです。

npmの問題解決の記録

 

まず、extensions.jsonに記載されているやつを全部入れといた方がいい。

例えば、connor4312.esbuild-problem-matchersをインストールしていない場合、tasks.jsonのproblemMatcherで以下がないと怒られる。

"problemMatcher": "$esbuild-watch",

F5デバッグ時に使用されるnpmがグローバルにインストールされているnpm問題

ここからの問題はこの節のタイトルの通りです。

解決策1

この問題の解決策として一番手っ取り早いやり方はvscodeのF5デバッグで使用されるnodeを設定で指定するということでした。

.vscode/settings.jsonに以下を追加しました。

	"terminal.integrated.env.osx": {
		"PATH": "/Users/takumi/.nvm/versions/node/v22.14.0/bin:${env:PATH}"
	}

解決策2

今回はこちらの対応を入れました。

sudo ln -s /Users/takumi/.nvm/versions/node/v20.18.0/bin/npm /usr/local/bin/npm

nvmでインストールしたnpmのシンボリックリンクを作ってやる。
注意点としては、Nodeのバージョン変更時の更新nvmで別のバージョンを使用する場合、リンク先のnpmは古いバージョンのままにです。この場合は、リンクを再作成する必要があります。

これ以降はあくまでその記録なので、上記設定を入れれば解決です。

再度実行してもエラーが出てる。なんかこのエラー見覚えある。確かnode_modulesを一旦消してnpm installを再度やった方がいい系のエラーだった気がする。

 

 

README.mdに書いてあるnpm run install:allする。これの実態はこれ。

"install:all": "npm install && cd webview-ui && npm install",
takumi@ ~/Documents/src/private_src/daily/2025-02-12/cline$ npm run install:all

> claude-dev@3.3.2 install:all
> npm install && cd webview-ui && npm install

npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm warn deprecated gauge@5.0.2: This package is no longer supported.

> claude-dev@3.3.2 prepare
> husky


added 1121 packages, and audited 1122 packages in 12s

194 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

added 1 package, and audited 1533 packages in 3s

337 packages are looking for funding
  run `npm fund` for details

8 vulnerabilities (2 moderate, 6 high)

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

相変わらずエラーが出ている。

実行するタスク: npm run build:webview 

node:internal/modules/cjs/loader:959
  throw err;
  ^

Error: Cannot find module '../lib/cli.js'
Require stack:
- /usr/local/bin/npm
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)
    at Function.Module._load (node:internal/modules/cjs/loader:804:27)
    at Module.require (node:internal/modules/cjs/loader:1028:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/usr/local/bin/npm:2:1)
    at Module._compile (node:internal/modules/cjs/loader:1126:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
    at Module.load (node:internal/modules/cjs/loader:1004:32)
    at Function.Module._load (node:internal/modules/cjs/loader:839:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/usr/local/bin/npm' ]
}

 *  ターミナル プロセス "/bin/zsh '-l', '-c', 'npm run build:webview'" が終了コード 1 で終了しました。 

 

エラーの内容を調査してたらこれっぽい?

https://stackoverflow.com/questions/73385049/nodeinternal-modules-cjs-loader959

 

一旦nvmで使うnodeのバージョンを変えて新しいLTSを入れる。

nvm install v22.14.0

 

 

色々やってみたけどダメだったので、以下の通り実行

npm cache clean --force

delete node_modules folder

delete package-lock.json file

npm run install:all

 

もう一度エラーをしっかりみると、この部分が問題だとわかる。

  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/usr/local/bin/npm' ]

特に、’/usr/local/bin/npm’ がおかしい。nvmでnodeを扱っているはずだけど、なぜかvscodeがここを見にいっている。なので以下のように一旦リネームしてみる。

$ sudo mv /usr/local/bin/npm /usr/local/bin/_npm

うまくいった?

なんかエラーが出てるので、もう一度だけnode_moduleとか色々削除してやる。

あとnvm use v22.14.0にしておく。

 

Clineデバッグ

 

やっと本題。

 

ブレークポイント設定した状態F5を押す。すると、拡張機能開発ホストってので起動されます。これでOllamaの設定にして実行する。

 

あと、備忘録として、vast.aiでollama pull hhao/qwen2.5-coder-tools:3bしておく。

 

 

 

実行する前に、ブレークポイント置いておく。

 

ちゃんと停まりました。

 

これは一般的なデバッグテクニックかもですが、コールスタックを見てどういう順序で呼び出されたかを確認するのが重要。

なんとなく怪しそうなところにtry catch入れて補足してみる。

 

エラーが出ていることがわかった。

このエラー「unable to verify the first certificate」は、SSL/TLS証明書の検証に失敗しているときによく出ますね。特に、Node.js や他の HTTPS クライアントを使って API に接続するときに遭遇しやすいです。ローカル環境などで自己署名証明書を使っていると、Node.js はそれを信頼せずエラーになります。そもそも、今回はsshでトンネリングしているだけなので、実態はサーバにあります。

 

 

開発環境限定で、証明書の検証を無効にする方法もあります。

export NODE_TLS_REJECT_UNAUTHORIZED=0

しかし、Clineの起動時にこれを設定しないといけないので、やろうと思うと恐らく起動オプションみたいに入れないといけないはず。

 

コードとして修正するなら以下のような感じでしょうか。

これもOllamaのオプションとしてUIから設定できたらありがたいんですがね。

 

connection errorは解決しましたが、適したモデルを使ってないから実行時にエラーが出てます。

ただ、これはまた別の問題だからモデル変えたり色々したら修正されるのかも。

 

んーこれはPull Request投げたいけど、どうなんだろう。