GUI integration
- crates/jarvis-gui/src/tauri_commands/backends.rs — 5 new Tauri commands:
get_active_backends() -> {tts, llm, llm_model, profile}
set_llm_backend(name) -> swap LLM hot, persists to DB
set_tts_backend(name) -> persist choice (effective on jarvis-app restart)
llm_reset_context() -> clear conversation history
llm_get_last_reply() -> last assistant message or null
- Registered in main.rs invoke_handler. Svelte side can now read active
backend + swap from a settings page / footer without env-var gymnastics.
Wikipedia pack rewritten (resources/commands/wikipedia/)
- Old `wiki/wiki.lua` (104 lines, hand-rolled Groq HTTP + inline SAPI PS) deleted.
- Replacement `wikipedia/summary.lua` (87 lines):
* REST summary endpoint (cleaner than opensearch+summary chain).
* Russian first, English fallback with LLM translation.
* Pure LLM fallback if Wikipedia has no article.
* Uses jarvis.cmd.{ok,error,not_found} + jarvis.llm + jarvis.speak (no
inline PowerShell SAPI). Phrases kept compatible with old pack.
GitHub PR voice review (resources/commands/github_pr/, 3 commands)
- "текущий репо bossiara13/J.A.R.V.I.S-rust" → github.set_repo
Persists repo via jarvis.memory.
- "какие пиары" / "открытые пиары" → github.list_prs
Calls `gh pr list --json number,title,author,createdAt --limit 10`.
Parses count + first 3 titles by regex from JSON.
- "разбери последний пиар" / "что в pr" → github.summarize_pr
`gh pr view N --json title,body,additions,deletions,changedFiles,author`,
sends to LLM with "senior reviewer" system prompt, speaks 3-5 sentence
review focusing on changes, risks, merge-readiness.
- Requires gh CLI installed and `gh auth login` done.
Tests: 52/52 jarvis-core unit tests pass (Wikipedia pack TOML/script auto-checked).
Build: cargo build --release -p jarvis-app -p jarvis-gui green.
39 lines
1.4 KiB
Lua
39 lines
1.4 KiB
Lua
local repo = jarvis.memory.recall("github.repo")
|
|
if not repo or repo == "" then
|
|
return jarvis.cmd.not_found("Сначала укажите репозиторий: текущий репо owner/repo.")
|
|
end
|
|
|
|
local result = jarvis.system.exec(string.format(
|
|
'gh pr list --repo "%s" --state open --json number,title,author,createdAt --limit 10',
|
|
repo
|
|
))
|
|
if not result or not result.success then
|
|
local err = (result and result.stderr) or "gh CLI не доступен"
|
|
jarvis.log("warn", "gh failed: " .. err)
|
|
return jarvis.cmd.error("gh CLI не отвечает. Установите gh и выполните gh auth login.")
|
|
end
|
|
|
|
local stdout = result.stdout or ""
|
|
if stdout:gsub("%s", "") == "" or stdout:gsub("%s", "") == "[]" then
|
|
return jarvis.cmd.ok("Открытых пиаров нет.")
|
|
end
|
|
|
|
-- Parse JSON via LLM (mlua doesn't ship a JSON parser by default).
|
|
-- Alternatively count number entries with a regex.
|
|
local _, count = stdout:gsub('"number"%s*:', "")
|
|
if count == 0 then
|
|
return jarvis.cmd.ok("Открытых пиаров нет.")
|
|
end
|
|
|
|
-- Get titles
|
|
local titles = {}
|
|
for title in stdout:gmatch('"title"%s*:%s*"([^"]+)"') do
|
|
table.insert(titles, title)
|
|
if #titles >= 3 then break end
|
|
end
|
|
|
|
local line = string.format("%d открытых пиаров. ", count)
|
|
if #titles > 0 then
|
|
line = line .. "Первые: " .. table.concat(titles, ". ") .. "."
|
|
end
|
|
return jarvis.cmd.ok(line)
|