81 lines
2.2 KiB
Lua
81 lines
2.2 KiB
Lua
local M = {}
|
|
|
|
local context = require('chatgpt_nvim.context')
|
|
local handler = require('chatgpt_nvim.handler')
|
|
local config = require('chatgpt_nvim.config')
|
|
|
|
local ok_yaml, lyaml = pcall(require, "lyaml")
|
|
|
|
local function copy_to_clipboard(text)
|
|
vim.fn.setreg('+', text)
|
|
end
|
|
|
|
local function parse_response(raw)
|
|
if not ok_yaml then
|
|
vim.api.nvim_err_writeln("lyaml not available. Install with `luarocks install lyaml`.")
|
|
return nil
|
|
end
|
|
local ok, data = pcall(lyaml.load, raw)
|
|
if not ok or not data then
|
|
vim.api.nvim_err_writeln("Failed to parse YAML response.")
|
|
return nil
|
|
end
|
|
data = data[1]
|
|
return data
|
|
end
|
|
|
|
function M.run_chatgpt_command()
|
|
local conf = config.load()
|
|
local user_input = vim.fn.input("Message for O1 Model: ")
|
|
if user_input == "" then
|
|
print("No input provided.")
|
|
return
|
|
end
|
|
|
|
local dirs = conf.directories or {"."}
|
|
local project_structure = context.get_project_structure(dirs)
|
|
local all_files = context.get_project_files(dirs)
|
|
local file_sections = context.get_file_contents(all_files)
|
|
local current_file_content, current_file_path = context.get_current_file()
|
|
local readme_content = context.get_readme_content()
|
|
|
|
local sections = {
|
|
conf.initial_prompt .. "\n" .. user_input,
|
|
"\n\nProject Structure:\n",
|
|
project_structure,
|
|
"\n\nFiels:\n",
|
|
}
|
|
|
|
table.insert(sections, file_sections)
|
|
|
|
local prompt = table.concat(sections, "\n")
|
|
copy_to_clipboard(prompt)
|
|
print("Prompt copied to clipboard! Paste it into the ChatGPT O1 model.")
|
|
end
|
|
|
|
function M.run_chatgpt_paste_command()
|
|
print("Reading ChatGPT YAML response from clipboard...")
|
|
local raw = handler.get_clipboard_content()
|
|
if raw == "" then
|
|
vim.api.nvim_err_writeln("Clipboard is empty. Please copy the YAML response from ChatGPT first.")
|
|
return
|
|
end
|
|
|
|
local data = parse_response(raw)
|
|
if not data or not data.files then
|
|
vim.api.nvim_err_writeln("No 'files' field found in the YAML response.")
|
|
return
|
|
end
|
|
|
|
for _, fileinfo in ipairs(data.files) do
|
|
if fileinfo.path and fileinfo.content then
|
|
handler.write_file(fileinfo.path, fileinfo.content)
|
|
print("Wrote file: " .. fileinfo.path)
|
|
else
|
|
vim.api.nvim_err_writeln("Invalid file entry. Must have 'path' and 'content'.")
|
|
end
|
|
end
|
|
end
|
|
|
|
return M
|