fix: Terraform Agent uses SQLite RAG only, terminal shows errors properly
- Skip ADB vector search for Terraform Agent (uses local SQLite resource reference instead) - Show error message in terminal when plan fails validation (no more stuck "Aguardando execução") - Write region validation error to plan_output field for terminal display - Fix Plan/Re-plan button visibility for all workspace states (including stuck planning/applying)
This commit is contained in:
@@ -1401,12 +1401,13 @@ function _tfBadge(st){
|
||||
function rTfActions(){
|
||||
if(S.tfRunning)return'<button class="btn bsm" style="background:var(--rd);color:#fff;border-color:var(--rd);font-size:.72rem;padding:4px 12px" onclick="tfCancel()">Cancel</button>';
|
||||
const st=S.tfStatus;let btns='';
|
||||
if(S.tfCode&&(st==='draft'||st==='failed'||st==='destroyed'))btns+=`<button class="btn bsm" style="background:var(--pp);color:#fff;border-color:var(--pp);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfSaveAndPlan()">${TF_ICON} Plan</button>`;
|
||||
const canPlan=S.tfCode&&['draft','failed','destroyed','planning','applying','destroying'].includes(st);
|
||||
const canReplan=S.tfCode&&['planned','failed','applied'].includes(st);
|
||||
if(canPlan&&!canReplan)btns+=`<button class="btn bsm" style="background:var(--pp);color:#fff;border-color:var(--pp);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfSaveAndPlan()">${TF_ICON} Plan</button>`;
|
||||
if(canReplan)btns+=`<button class="btn bsm" style="background:var(--pp);color:#fff;border-color:var(--pp);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfSaveAndPlan()">${TF_ICON} Re-plan</button>`;
|
||||
if(st==='failed'&&S.tfPlanOut&&S.tfFiles.length&&S.tfModel)btns+=`<button class="btn bsm" style="background:#e67e22;color:#fff;border-color:#e67e22;font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfAutoFix()">${IC.fix} Auto-corrigir</button>`;
|
||||
if(st==='failed'&&(S.tfApplyOut||S.tfHadApply))btns+='<button class="btn bsm" style="background:var(--rd);color:#fff;border-color:var(--rd);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="S.tfConfirmRollback=true;R()">↩ Rollback</button>';
|
||||
if(st==='planned'||st==='failed')btns+=`<button class="btn bsm" style="background:var(--pp);color:#fff;border-color:var(--pp);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfSaveAndPlan()">${TF_ICON} Re-plan</button>`;
|
||||
if(st==='planned')btns+='<button class="btn bsm" style="background:var(--gn);color:#fff;border-color:var(--gn);font-size:.72rem;padding:4px 12px" onclick="tfApply()">✓ Apply</button>';
|
||||
if(st==='applied')btns+=`<button class="btn bsm" style="background:var(--pp);color:#fff;border-color:var(--pp);font-size:.72rem;padding:4px 12px;gap:4px;display:inline-flex;align-items:center" onclick="tfSaveAndPlan()">${TF_ICON} Re-plan</button>`;
|
||||
if(st==='applied'||st==='planned')btns+='<button class="btn bsm" style="background:var(--rd);color:#fff;border-color:var(--rd);font-size:.72rem;padding:4px 12px" onclick="S.tfConfirmDest=true;R()">✕ Destroy</button>';
|
||||
return btns;
|
||||
}
|
||||
@@ -1786,13 +1787,14 @@ async function tfPollExec(){
|
||||
S.tfPlanOut=r.plan_output||S.tfPlanOut;
|
||||
S.tfApplyOut=r.apply_output||S.tfApplyOut;
|
||||
S.tfDestroyOut=r.destroy_output||S.tfDestroyOut;
|
||||
S.tfError=r.error||'';
|
||||
S.tfStatus=r.status;
|
||||
const done=!['planning','applying','destroying'].includes(r.status);
|
||||
if(done){S.tfRunning=false;if(r.status==='destroyed')S.tfHadApply=false;}
|
||||
// Update only the terminal body without full re-render
|
||||
const t=document.getElementById('tfTermOut');
|
||||
if(t){
|
||||
const content=S.tfDestroyOut||S.tfApplyOut||S.tfPlanOut||'';
|
||||
const content=S.tfDestroyOut||S.tfApplyOut||S.tfPlanOut||(done&&S.tfError?'ERROR: '+S.tfError:'')||'';
|
||||
t.innerHTML=content?escHtml(content):'<span style="opacity:.4">Aguardando execução...</span>';
|
||||
t.scrollTop=t.scrollHeight;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user