Files
nvim/lua/plugins/ai.lua

63 lines
2.4 KiB
Lua

-- lua/plugins/extras/ai.lua
-- ThePrimeagen/99 — AI agent for Neovim
-- Augments coding via opencode (default provider) with two core workflows:
-- search → AI project-wide search, results in quickfix list
-- visual → replace visual selection with AI-generated result
-- https://github.com/ThePrimeagen/99
return {
'ThePrimeagen/99',
dependencies = {
{ 'saghen/blink.compat', version = '2.*' },
},
config = function()
local _99 = require '99'
local basename = vim.fs.basename(vim.uv.cwd())
_99.setup {
-- OpenCodeProvider is the default; matches the opencode environment
logger = {
level = _99.DEBUG,
path = '/tmp/' .. basename .. '.99.debug',
print_on_error = true,
},
-- tmp_dir must be inside CWD so opencode has write permission
tmp_dir = './tmp',
-- Auto-inject AGENT.md files found between the open file and project root
md_files = { 'AGENT.md' },
completion = {
source = 'blink', -- blink.cmp is your completion engine
},
-- Default model (set to nil to use provider default)
-- Examples: 'opencode/claude-sonnet-4-5', 'claude-sonnet-4-5', 'gpt-4'
model = vim.env.NVIM_99_MODEL or 'openrouter/moonshotai/kimi-k2.5',
}
-- Visual selection → AI replacement
-- Intentionally v-mode only: avoids accidentally using a stale selection
vim.keymap.set('v', '<leader>9v', _99.visual, { desc = 'AI: replace visual selection' })
-- Project-wide AI search → quickfix list
vim.keymap.set('n', '<leader>9s', _99.search, { desc = 'AI: search project' })
-- Cancel all in-flight requests
vim.keymap.set('n', '<leader>9x', _99.stop_all_requests, { desc = 'AI: stop all requests' })
-- Clear previous search/visual results
vim.keymap.set('n', '<leader>9c', _99.clear_previous_requests, { desc = 'AI: clear previous requests' })
-- View debug logs for the last run
vim.keymap.set('n', '<leader>9l', _99.view_logs, { desc = 'AI: view logs' })
-- Telescope: switch model on the fly (persists for the session)
vim.keymap.set('n', '<leader>9m', function()
require('99.extensions.telescope').select_model()
end, { desc = 'AI: select model' })
-- Telescope: switch provider (OpenCode / Claude / Cursor / Gemini)
vim.keymap.set('n', '<leader>9p', function()
require('99.extensions.telescope').select_provider()
end, { desc = 'AI: select provider' })
end,
}