ai plugin

return {
  { -- codecompanion
    "olimorris/codecompanion.nvim",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "franco-ruggeri/codecompanion-spinner.nvim",
      "nvim-treesitter/nvim-treesitter",
    },
    keys = {
      { "<localleader>cc", "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle codecompanion chat" },
      { "<localleader>ca", "<cmd>CodeCompanionActions<cr>", desc = "codecompanion action" },
    },
    opts = {
      strategies = { chat = { adapter = "copilot" }, inline = { adapter = "copilot" }, agent = { adapter = "copilot" }, cmd = { adapter = "copilot" }, },
      extensions = {
        spinner = {},
      },
    },
  },
  { -- copilot
    "zbirenbaum/copilot.lua",
    cmd = "Copilot",
    keys = { -- Example mapping to toggle outline
      { "<leader>cc", "<cmd>Copilot<CR>", desc = "Copilot" },
      { "<leader>ct", "<cmd>Copilot toggle<CR>", desc = "Copilot toggle" },
      { "<leader>cd", "<cmd>Copilot detach<CR>", desc = "Copilot detach" },
      { "<leader>ca", "<cmd>Copilot attach<CR>", desc = "Copilot attach" },
      { "<leader>cp", "<cmd>Copilot panel<CR>", desc = "Copilot panel" },
    },
    dependencies = { { "zbirenbaum/copilot-cmp", config = true } },
    opts = {
      filetypes = { ["*"] = true },
      panel = {
        enabled = true,
        auto_refresh = true,
        keymap = {
          jump_prev = "K",
          jump_next = "J",
        },
        layout = {
          position = "bottom", -- | top | left | right
          ratio = 0.4,
        },
      },
      suggestion = {
        enabled = true,
        auto_trigger = false,
        hide_during_completion = false,
        debounce = 75,
      },
    },
  },
  { -- avante
    "yetone/avante.nvim",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "MunifTanjim/nui.nvim",
      "folke/snacks.nvim", -- for input provider snacks
      "zbirenbaum/copilot.lua", -- for providers='copilot'
    },
    build = "make",
    version = false, -- Never set this value to "*"! Never!
    keys = {
      { "<localleader>aa", "<cmd>AvanteChat<cr>", desc = "Avante chat" },
      { "<localleader>at", "<cmd>AvanteToggle<cr>", desc = "Toggle Avante chat" },
      { "<localleader>ar", "<cmd>AvanteRefresh<cr>", desc = "AvanteRefresh" },
      { "<localleader>af", "<cmd>AvanteFocus<cr>", desc = "Change focus" },
      { "<localleader>a?", "<cmd>AvanteModels<cr>", desc = "select model" },
      { "<localleader>an", "<cmd>AvanteChatNew<cr>", desc = "New Ask" },
      { "<localleader>ae", "<cmd>AvanteEdit<cr>", desc = "Edit selected block" },
      { "<localleader>aS", "<cmd>AvanteStop<cr>", desc = "Stop current AI request" },
      { "<localleader>ah", "<cmd>AvanteHistory<cr>", desc = "select between chat histories" },
      { "<localleader>aC", "<cmd>AvanteClear<cr>", desc = "Clear Avante chat" },
    },
    opts = {
      provider = "copilot",
      providers = {
        ollama = {
          endpoint = "http://localhost:11434",
          model = "qwen3:8b",
        },
      },
      behaviour = {
        auto_set_keymaps = false,
        support_paste_from_clipboard = true,
        enable_token_counting = true,
      },
      mappings = {
        files = {
          add_current = "<localleader>ac", -- Add current buffer to selected files
          add_all_buffers = "<localleader>aB", -- Add all buffer files to selected files
        },
        select_model = "<localleader>a?", -- Select model command
        select_history = "<localleader>ah", -- Select history command
        confirm = {
          focus_window = "<C-w>f",
          code = "c",
          resp = "r",
          input = "i",
        },
        ask = "<localleader>aa",
        new_ask = "<localleader>an",
        edit = "<localleader>ae",
        refresh = "<localleader>ar",
        focus = "<localleader>af",
        stop = "<localleader>aS",
        toggle = {
          default = "<localleader>at",
          debug = "<localleader>ad",
          hint = "<localleader>ah",
          suggestion = "<localleader>as",
          repomap = "<localleader>aR",
        },
        diff = {
          ours = "co",
          theirs = "ct",
          all_theirs = "ca",
          both = "cb",
          cursor = "cc",
          next = "]x",
          prev = "[x",
        },
        suggestion = {},
        jump = {
          next = "]]",
          prev = "[[",
        },
        cancel = {
          normal = { "<C-c>", "<Esc>", "q" },
          insert = { "<C-c>" },
        },
        sidebar = {
          apply_all = "A",
          apply_cursor = "a",
          retry_user_request = "r",
          edit_user_request = "e",
          switch_windows = "<Tab>",
          reverse_switch_windows = "<S-Tab>",
          remove_file = "d",
          add_file = "@",
          close = { "<Esc>", "q" },
          close_from_input = nil, -- e.g., { normal = "<Esc>", insert = "<C-d>" }
        },
      },
      input = { provider = "snacks" },
      hints = { enabled = false },
    },
  },
}