@viberaven/cli 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/stack/app.js CHANGED
@@ -16,4 +16,4 @@ ${l.map((d,h)=>`${h+1}. ${d.title}`).join(`
16
16
  `)}
17
17
  After each, note the files touched. Do not claim production-ready; I will re-check.`},`Fix all ${l.length} repo blockers`,{label:"Re-check to update the score",action:"recheck"})},focusBlockers(r){if(!S(e.get()).available.findings)return;e.set(d=>({section:"findings",drawer:null,contextProviderId:r,setup:{...d.setup,open:!1},flow:{...d.flow,step:"findings"}}));let l=Array.from(document.querySelectorAll(".finding")).find(d=>d.dataset.provider===r)??document.getElementById("stage-heading");l?.focus({preventScroll:!0}),l?.scrollIntoView?.({behavior:"smooth",block:"center"})},async compare(r,l){if(!r.trim()||!l.trim()){e.set({compare:{...e.get().compare,error:"Both refs are required."}});return}e.set({busy:{...e.get().busy,compare:!0},compare:{...e.get().compare,from:r,to:l,error:null}});try{let d=await k.compare(r.trim(),l.trim());e.set({compare:{from:r,to:l,result:d,error:null}})}catch(d){e.set({compare:{from:r,to:l,result:null,error:C(d)}})}finally{e.set({busy:{...e.get().busy,compare:!1}})}},async explainDiff(r,l){e.get().setup.running||await c({...o(),taskKind:"diff",release:{id:`${r.trim()}..${l.trim()}`,label:`${r.trim()} \u2192 ${l.trim()}`},prompt:`Explain what changed between ${r.trim()} and ${l.trim()} in this repo, in plain words. Call out anything risky for production: auth, database writes, webhooks, env, payments.`},`Explain ${r.trim()} \u2192 ${l.trim()}`)},goToStep(r){let l=S(e.get());l.available[r]&&(r==="fix"&&!l.current&&e.flow({fixId:l.fixable[0]?.id??null,handoff:null}),e.flow({step:r}),u())},async checkMyApp(){let r=e.get();if(!(r.busy.scan||r.setup.running)){e.set({busy:{...r.busy,scan:!0}});try{await k.scan(),await a();let l=S(e.get());e.flow({step:ie(l),fixId:null,handoff:null,recheck:null}),u()}catch(l){e.toast(`The check did not finish: ${C(l)}`,"err")}finally{e.set({busy:{...e.get().busy,scan:!1}})}}},fixFinding(r){let l=S(e.get()),d=r?l.fixable.find(h=>h.id===r):l.fixable[0];d&&(e.flow({step:"fix",fixId:d.id,handoff:e.get().flow.handoff?.findingId===d.id?e.get().flow.handoff:null}),u())},async sendFix(){let r=e.get(),l=S(r).current;if(!l||r.busy.chat||r.setup.running||!r.probes[r.cliId]?.ready&&(await p.testConnection(r.cliId),!e.get().probes[r.cliId]?.ready))return;let d=e.get().cliId,h=`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;e.set({busy:{...e.get().busy,chat:!0},workingSince:Date.now(),runId:h}),e.flow({handoff:{findingId:l.id,cliId:d,status:"running",output:""}}),e.push({role:"me",text:`Fix: ${l.title}`});try{let g=(await k.chat({...o(),runId:h,taskKind:"fix",prompt:l.prompt,displayPrompt:`Fix: ${l.title}`,provider:l.service?{id:l.service.id,name:l.service.name,area:""}:void 0})).agentRun,m=/Stopped by user/.test(g.stderr??""),M=g.timedOut||m||g.exitCode!==null&&g.exitCode!==0||!g.output?.trim(),w=g.output?.trim()||(m?"Stopped.":g.timedOut?`${d} did not finish in time and was stopped.`:`${d} exited with code ${g.exitCode??"unknown"} and no answer.
18
18
 
19
- ${Ge(g.stderr,1200)}`);e.flow({handoff:{findingId:l.id,cliId:d,status:M?"failed":"done",output:w}}),e.push({role:M?"error":"agent",text:w,cliId:d})}catch(y){e.flow({handoff:{findingId:l.id,cliId:d,status:"failed",output:C(y)}})}finally{e.set({busy:{...e.get().busy,chat:!1},workingSince:null,runId:null})}},async copyFix(){let r=S(e.get()).current;if(r)try{await navigator.clipboard.writeText(r.prompt),e.toast("Prompt copied. Paste it into your coding agent.")}catch{e.toast("Could not copy. Select the prompt and copy it by hand.","err")}},async checkAgain(){let r=e.get(),l=S(r).current;if(!l||r.busy.scan)return;let d=r.project.gate?.score;e.flow({step:"recheck",recheck:{findingId:l.id,title:l.title,status:"running",scoreBefore:d}}),e.set({busy:{...e.get().busy,scan:!0}}),u();try{await k.scan(),await a();let h=S(e.get()),y=h.findings.find(M=>M.id===l.id),g=e.get().project.gate?.score;if(y){e.flow({recheck:{findingId:l.id,title:l.title,status:"open",message:y.summary,scoreBefore:d,scoreAfter:g}});return}let m=h.fixable[0]??null;e.flow({recheck:{findingId:l.id,title:l.title,status:"fixed",nextId:m?.id??null,scoreBefore:d,scoreAfter:g}}),window.setTimeout(()=>{let M=e.get().flow;if(M.step!=="recheck"||M.recheck?.findingId!==l.id||M.recheck.status!=="fixed")return;let w=S(e.get());m&&w.fixable.some(D=>D.id===m.id)?e.flow({step:"fix",fixId:m.id,handoff:null}):e.flow({step:"ready",fixId:null,handoff:null}),u()},1600)}catch(h){e.flow({recheck:{findingId:l.id,title:l.title,status:"error",message:C(h),scoreBefore:d}})}finally{e.set({busy:{...e.get().busy,scan:!1}})}},toggleChecklistItem(r){let l={...e.get().flow.checklist,[r]:!e.get().flow.checklist[r]};e.flow({checklist:l})},togglePrChecks(r){let l=r??!e.get().prChecks.open;e.set(d=>({prChecks:{...d.prChecks,open:l,error:null}})),l?queueMicrotask(()=>document.getElementById("pr-checks-action")?.focus({preventScroll:!0})):document.getElementById("pr-checks-button")?.focus({preventScroll:!0})},async addPrChecks(){if(!e.get().prChecks.busy){e.set(r=>({prChecks:{...r.prChecks,busy:!0,error:null}}));try{let r=await k.addGithubWorkflow();e.set(l=>({prChecks:{...l.prChecks,status:r.status,written:r.written,busy:!1}})),queueMicrotask(()=>document.getElementById("pr-checks-copy")?.focus({preventScroll:!0}))}catch(r){e.set(l=>({prChecks:{...l.prChecks,busy:!1,error:C(r)}}))}}},async copyPrCommit(){let r=e.get().prChecks.status?.path??".github/workflows/viberaven.yml";try{await navigator.clipboard.writeText(`git add ${r} && git commit -m "Check pull requests with VibeRaven"`),e.toast("Copied. Run it, then push.")}catch{e.toast("Could not copy. Select the command and copy it by hand.","err")}},toggleMore(r){let l=r??!e.get().moreOpen;e.set({moreOpen:l}),l?queueMicrotask(()=>document.querySelector('#more-menu [role="menuitem"]')?.focus({preventScroll:!0})):document.getElementById("open-more")?.focus({preventScroll:!0})},openMore(r){if(e.set({moreOpen:!1}),r==="chat"){s();return}if(r==="services"){e.set({drawer:"services",agentOpen:!1}),queueMicrotask(()=>document.getElementById("drawer-close")?.focus({preventScroll:!0}));return}e.set({drawer:r,agentOpen:!1}),queueMicrotask(()=>document.getElementById("drawer-close")?.focus({preventScroll:!0}))}};return p}function Kt(){let e=document.getElementById("app");if(!e)return;let i=be(Wt()),n=qt(i),s=()=>He(e,i,n);i.subscribe(s),s(),document.addEventListener("keydown",u=>{let o=i.get().fullCheck.step;if(u.key==="Escape"&&o!=="closed"){o!=="running"&&n.closeFullCheck();return}if(u.key==="Escape"&&i.get().moreOpen){n.toggleMore(!1);return}if(u.key==="Escape"&&i.get().prChecks.open){n.togglePrChecks(!1);return}if(u.key==="Escape"&&i.get().agentOpen){n.toggleAgent();return}u.key==="Escape"&&i.get().drawer&&n.toggleDrawer(null)}),document.addEventListener("pointerdown",u=>{!i.get().moreOpen||u.target?.closest("#more-menu, #open-more")||i.set({moreOpen:!1})});let a=()=>{let u=i.get();if(!u.catalog.length||u.setup.running||u.busy.chat)return;let o=Qe(window.location.hash,u.catalog.map(p=>p.id));o!==null&&(i.set({section:"stack",agentOpen:!0,setup:{...u.setup,open:!0,initialized:!0,selected:o,progress:[],error:null}}),history.replaceState(null,"",window.location.pathname+window.location.search),document.getElementById("stack-setup-heading")?.focus())};window.addEventListener("hashchange",a),k.catalog().then(u=>{i.set(o=>({catalog:u.providers,setup:o.setup.open&&!o.setup.initialized?{...o.setup,initialized:!0,selected:pe(u.providers)}:o.setup})),a()}).catch(()=>{}),k.verified().then(u=>i.set({verified:u.verified})).catch(()=>{}),k.githubWorkflow().then(u=>i.set(o=>({prChecks:{...o.prChecks,status:u}}))).catch(()=>{}),k.agents().then(u=>{i.set({agents:u.agents.filter(p=>p.id==="codex"||p.id==="claude"||p.id==="gemini")});let o=u.agents.find(p=>p.id===i.get().cliId);if(o&&!o.installed){let p=u.agents.find(r=>r.installed);p&&i.set({cliId:p.id})}n.testConnection(i.get().cliId,{silent:!0})}).catch(()=>{});let c=async()=>{try{let u=await k.scanStatus();if(i.set({scan:u}),u.state==="running")window.setTimeout(c,1500);else if(u.state==="done"&&i.get().project.empty){let o=await k.project();i.set({project:o}),i.get().flow.step==="app"&&i.flow({step:ie(S(i.get()))})}}catch{}};c(),window.setInterval(()=>{Ye(document,i.get().workingSince)},1e3)}Kt();})();
19
+ ${Ge(g.stderr,1200)}`);e.flow({handoff:{findingId:l.id,cliId:d,status:M?"failed":"done",output:w}}),e.push({role:M?"error":"agent",text:w,cliId:d})}catch(y){e.flow({handoff:{findingId:l.id,cliId:d,status:"failed",output:C(y)}})}finally{e.set({busy:{...e.get().busy,chat:!1},workingSince:null,runId:null})}},async copyFix(){let r=S(e.get()).current;if(r)try{await navigator.clipboard.writeText(r.prompt),e.toast("Prompt copied. Paste it into your coding agent.")}catch{e.toast("Could not copy. Select the prompt and copy it by hand.","err")}},async checkAgain(){let r=e.get(),l=S(r).current;if(!l||r.busy.scan)return;let d=r.project.gate?.score;e.flow({step:"recheck",recheck:{findingId:l.id,title:l.title,status:"running",scoreBefore:d}}),e.set({busy:{...e.get().busy,scan:!0}}),u();try{await k.scan(),await a();let h=S(e.get()),y=h.findings.find(M=>M.id===l.id),g=e.get().project.gate?.score;if(y){e.flow({recheck:{findingId:l.id,title:l.title,status:"open",message:y.summary,scoreBefore:d,scoreAfter:g}});return}let m=h.fixable[0]??null;e.flow({recheck:{findingId:l.id,title:l.title,status:"fixed",nextId:m?.id??null,scoreBefore:d,scoreAfter:g}}),window.setTimeout(()=>{let M=e.get().flow;if(M.step!=="recheck"||M.recheck?.findingId!==l.id||M.recheck.status!=="fixed")return;let w=S(e.get());m&&w.fixable.some(D=>D.id===m.id)?e.flow({step:"fix",fixId:m.id,handoff:null}):e.flow({step:"ready",fixId:null,handoff:null}),u()},1600)}catch(h){e.flow({recheck:{findingId:l.id,title:l.title,status:"error",message:C(h),scoreBefore:d}})}finally{e.set({busy:{...e.get().busy,scan:!1}})}},toggleChecklistItem(r){let l={...e.get().flow.checklist,[r]:!e.get().flow.checklist[r]};e.flow({checklist:l})},togglePrChecks(r){let l=r??!e.get().prChecks.open;e.set(d=>({prChecks:{...d.prChecks,open:l,error:null}})),l?queueMicrotask(()=>document.getElementById("pr-checks-action")?.focus({preventScroll:!0})):document.getElementById("pr-checks-button")?.focus({preventScroll:!0})},async addPrChecks(){if(!e.get().prChecks.busy){e.set(r=>({prChecks:{...r.prChecks,busy:!0,error:null}}));try{let r=await k.addGithubWorkflow();e.set(l=>({prChecks:{...l.prChecks,status:r.status,written:r.written,busy:!1}})),queueMicrotask(()=>document.getElementById("pr-checks-copy")?.focus({preventScroll:!0}))}catch(r){e.set(l=>({prChecks:{...l.prChecks,busy:!1,error:C(r)}}))}}},async copyPrCommit(){let r=e.get().prChecks.status?.path??".github/workflows/viberaven.yml";try{await navigator.clipboard.writeText(`git add ${r} && git commit -m "Check pull requests with VibeRaven"`),e.toast("Copied. Run it, then push.")}catch{e.toast("Could not copy. Select the command and copy it by hand.","err")}},toggleMore(r){let l=r??!e.get().moreOpen;e.set({moreOpen:l}),l?queueMicrotask(()=>document.querySelector('#more-menu [role="menuitem"]')?.focus({preventScroll:!0})):document.getElementById("open-more")?.focus({preventScroll:!0})},openMore(r){if(e.set({moreOpen:!1}),r==="chat"){s();return}if(r==="services"){e.set({drawer:"services",agentOpen:!1}),queueMicrotask(()=>document.getElementById("drawer-close")?.focus({preventScroll:!0}));return}e.set({drawer:r,agentOpen:!1}),queueMicrotask(()=>document.getElementById("drawer-close")?.focus({preventScroll:!0}))}};return p}function Kt(){let e=document.getElementById("app");if(!e)return;let i=be(Wt()),n=qt(i),s=()=>He(e,i,n);i.subscribe(s),s(),document.addEventListener("keydown",u=>{let o=i.get().fullCheck.step;if(u.key==="Escape"&&o!=="closed"){o!=="running"&&n.closeFullCheck();return}if(u.key==="Escape"&&i.get().moreOpen){n.toggleMore(!1);return}if(u.key==="Escape"&&i.get().prChecks.open){n.togglePrChecks(!1);return}if(u.key==="Escape"&&i.get().agentOpen){n.toggleAgent();return}u.key==="Escape"&&i.get().drawer&&n.toggleDrawer(null)}),document.addEventListener("pointerdown",u=>{!i.get().moreOpen||u.target?.closest("#more-menu, #open-more")||i.set({moreOpen:!1})});let a=()=>{let u=i.get();if(!u.catalog.length||u.setup.running||u.busy.chat)return;let o=Qe(window.location.hash,u.catalog.map(p=>p.id));o!==null&&(i.set({section:"stack",drawer:"services",agentOpen:!1,moreOpen:!1,setup:{...u.setup,open:!0,initialized:!0,selected:o,progress:[],error:null}}),history.replaceState(null,"",window.location.pathname+window.location.search),document.getElementById("stack-setup-heading")?.focus())};window.addEventListener("hashchange",a),k.catalog().then(u=>{i.set(o=>({catalog:u.providers,setup:o.setup.open&&!o.setup.initialized?{...o.setup,initialized:!0,selected:pe(u.providers)}:o.setup})),a()}).catch(()=>{}),k.verified().then(u=>i.set({verified:u.verified})).catch(()=>{}),k.githubWorkflow().then(u=>i.set(o=>({prChecks:{...o.prChecks,status:u}}))).catch(()=>{}),k.agents().then(u=>{i.set({agents:u.agents.filter(p=>p.id==="codex"||p.id==="claude"||p.id==="gemini")});let o=u.agents.find(p=>p.id===i.get().cliId);if(o&&!o.installed){let p=u.agents.find(r=>r.installed);p&&i.set({cliId:p.id})}n.testConnection(i.get().cliId,{silent:!0})}).catch(()=>{});let c=async()=>{try{let u=await k.scanStatus();if(i.set({scan:u}),u.state==="running")window.setTimeout(c,1500);else if(u.state==="done"&&i.get().project.empty){let o=await k.project();i.set({project:o}),i.get().flow.step==="app"&&i.flow({step:ie(S(i.get()))})}}catch{}};c(),window.setInterval(()=>{Ye(document,i.get().workingSince)},1e3)}Kt();})();