local _VERSION = '0.4.1'; local createAi = require('/apis/libai'); local args = table.pack(...); local function printUsage() print('ai usage:'); print(); print(' ai '); print(' ai ping'); print(' ai new '); print(' ai --new '); print(' ai sessions'); print(' ai --sessions'); print(' ai --version'); print(' ai --help'); print(); print('settings required:'); print(' opencc.server_url'); print(); print('settings optional:'); print(' opencc.username (default: opencode)'); print(' opencc.password (Basic Auth password)'); print(' opencc.session_id (auto-managed)'); end local function joinArgs(start) local parts = {}; for i = start, args.n do parts[#parts + 1] = args[i]; end return table.concat(parts, ' '); end local function printSessions(ai) local ok, result = ai.listSessions(); if not ok then print(result); return; end if #result == 0 then print('no sessions'); else for _, s in ipairs(result) do print((s.id or '?') .. ' ' .. (s.title or '(untitled)')); end end end local function askAndPrint(ai, prompt) local ok, result = ai.ask(prompt); if not ok then print(result); return; end print(result.reply); end local command = args[1]; if command == '--version' or command == '-version' or command == 'version' then print('ai v' .. _VERSION); return; end if command == '--help' or command == '-help' or command == 'help' then printUsage(); return; end if args.n == 0 then printUsage(); return; end local ai = createAi(); if (command == 'sessions' or command == '--sessions') and args.n == 1 then printSessions(ai); return; end if command == 'ping' and args.n == 1 then local ok, result = ai.ping(); if not ok then print(result); return; end print(result.reply); return; end if command == 'new' or command == '--new' then local prompt = joinArgs(2); if prompt == '' then printUsage(); return; end ai.clearSession(); askAndPrint(ai, prompt); return; end if string.sub(command, 1, 1) == '-' then printUsage(); return; end askAndPrint(ai, joinArgs(1));