👌

avante.nvimのプロバイダ表示プラグインavante-status.nvimを作った

に公開

avante.nvimとは

avante.nvimはneovimをCursorのようなAI IDEに進化させるプラグインです。
日常的に利用しておりもう手放せないレベルですがいくつか不満点、というか怖いなぁという点があります。

  • neovimの設定ファイルを複数PC(個人,会社,その他)で共有しており、それぞれのPCで利用するAIプロバイダを自動で変えたい
  • 有効になっているAIプロバイダを一目で確認したい

例えば私の場合は個人開発ではClaude, 会社ではAzureを利用しています。

うっかり会社PCでプロバイダを切り替え忘れてあっちゃ~情報漏洩だ!とならないようにしたかったので、切り替えミスによる不安感を減らすセーフティネットとしてavante-status.nvimを開発しました。

avante-status.nvimの機能

https://github.com/takeshiD/avante-status.nvim

avante-status.nvimでは以下の機能を利用出来ます。

優先度付きプロバイダ関数

avante.nvimでは使用したいprovider, auto_suggestions_providerを文字列で設定します。
プロバイダを切り替えるときは毎回コメントアウトをして再設定する必要がありました。

avante-status.nvimで提供する優先度付きプロバイダ取得関数get_chat_providerget_suggestion_providerを使用するとそれぞれのプロバイダに適した方法で利用可否を確認し、最初に利用可能なプロバイダの文字列を返します。

provider = reuqire("avante-status").get_chat_provider({
    "azure",    -- 最初に利用可能か確認
    "openai",   -- 最初のプロバイダが利用不可な場合、利用可能か確認
    "claude",   -- 同様
}), -- 一つも利用できなければエラー出力
auto_suggestions_provider = require("avante-status").get_suggestion_provider({
    "azure",
    "copilot",
    "claude",
})

上記の例のproviderは azure > openai > claude の順に確認するように設定されています。

リスト形式で列挙することでひと目で優先度が把握しやすく環境ごとに異なるAPIキーを簡単に管理でき、誤って機密情報を漏洩するリスクを減らすことができます。

使用したくないプロバイダはリストに入れなければOKです。

利用中プロバイダのステータスライン表示

誤ったプロバイダを設定したまま利用してしまうと情報漏洩に繋がりますので、現在有効なプロバイダを一目で確認したくなります。

そこでavante-status.nvimではlualine.nvim用のコンポーネントを提供しています。

  • chat_component : 対話チャット用プロバイダコンポーネント
  • suggestions_component : サジェスト用プロバイダコンポーネント
{
    "nvim-lualine/lualine.nvim",
    event = 'VeryLazy', -- recommeded
    dependencies = {
        -- other dependencies
        "takeshid/avante-status.nvim",
    },
    config = function()
        local lualine = require("lualine")
        -- other your components ... 
        local avante_chat_component = require('avante-status.lualine').chat_component
        local avante_suggestions_component = require('avante-status.lualine').suggestions_component
        local config = {
            options = {
                -- your options ... 
            },
            sections = {
                -- your sections ... 
                lualine_x = {
                    'encoding',
                    'fileformat',
                    'filetype',
                    avante_chat_component,
                    avante_suggestions_component },
                -- your sections ...
            },
            inactive_sections = {
                -- your seciotns  ...
            },
        }
        lualine.setup(config)
    end
}

表示のカスタマイズ

見た目系のプラグインはだいたいカスタマイズしたくなります。

以下のように設定することでデフォルトプロバイダの変更、カスタムプロバイダの追加が可能です。

{
"takeshid/avante-status.nvim",
opts = {
    providers_map = {
        -- デフォルトで提供する`claude-haiku`のアイコン・色を変更
        ['claude-haiku'] = {
            icon = "󰉁",
            fg = "#ffd700",
        },
        -- カスタムプロバイダの追加, この例はOllamaでphi4を追加
        phi4 = {
            type = "endpoint",
            value = "http://127.0.0.1:11434/v1/chat/completions",
            icon = "🦙",
            fg = "#ffffff",
            name = "Ollama/phi4",
            model = "phi4",
        }
    }
}

個人的にClaudeHaikuを雷マークにしたのは気に入ってます。(早いぞ!感がある)

プラグイン開発のお気持ち

vimプラグインは簡単なものは開発したことがありましたが、neovimプラグインの開発は初めてでした。
Luaでの開発は慣れればモジュール化がしやすく管理がしやすい印象です。

しかしvim固有のAPIを利用しようとするとデバッグがしづらいという感は残ります。
今回は利用していませんがvustedというneovimプラグイン用のテストフレームワークがあるようで、これを利用すればvimのAPIもテストしやすくなるのかもしれません。

GitHubで編集を提案

Discussion