(()=>{const k=window.React;if(!k)return;const e=k.createElement,d=k.useState,_=k.useEffect,b=()=>window.COMPANYX_OPS_API_BASE||window.CANVAS_API_BASE||"/api",m={source:"seed",heroKpis:[{label:"Running",value:"9",trend:"up"},{label:"Queued",value:"7",trend:"flat"},{label:"Escalations",value:"3",trend:"down"},{label:"Runs (24h)",value:"142",trend:"up"}],workers:[{id:"w1",name:"intake-agt",state:"running",currentTask:"triage inbound #4821"},{id:"w2",name:"classify-agt",state:"ok",currentTask:"idle \xB7 last 06:12"},{id:"w3",name:"dedupe-agt",state:"running",currentTask:"dedupe residual rows"}],queue:[{id:"q1",task:"triage inbound #4821",worker:"intake-agt",stream:"Sales",state:"run",age:"2m 10s",attempts:1,harness:"claude-code",tier:"sonnet",worktree:"wt: feat/4821-triage",dirty:!0,stageLabel:"CODE",cost:"$0.42"},{id:"q2",task:"dedupe residual rows (batch 7 of 9)",worker:"dedupe-agt",stream:"Data",state:"run",age:"11m 02s",attempts:1,harness:"codex",tier:"gpt-5",worktree:"wt: feat/dedupe-batch7",dirty:!1,stageLabel:"TEST",cost:"$1.18"},{id:"q3",task:"score leads batch 44",worker:"ranker-agt",stream:"Growth",state:"wait",age:"3m 40s",attempts:2,harness:"gemini",tier:"gemini-2.5-pro",worktree:"wt: feat/score-leads-44",dirty:!0,stageLabel:"SPECIFY",cost:"$0.07"}],runHistory:[{id:"r1",task:"generate weekly brief",worker:"writer-agt",verdict:"ok",duration:"1m 12s",attempts:1},{id:"r2",task:"reconcile ledger June",worker:"discovery-agt",verdict:"fail",duration:"4m 03s",attempts:3},{id:"r3",task:"publish changelog",worker:"release-agt",verdict:"ok",duration:"0m 44s",attempts:1}],escalations:[{id:"e1",severity:"fail",ask:"Promote discovery-agt to F6 (full autonomy on ledger posting)",owner:"you",waiting:"2h 14m",state:"pending_review"},{id:"e2",severity:"fail",ask:"ranker-agt failed 3x \u2014 approve rollback to prior model",owner:"ops",waiting:"46m",state:"pending_review"},{id:"e3",severity:"warn",ask:"intake-agt requests wider inbox scope",owner:"you",waiting:"12m",state:"changes_requested"}]};async function E(s,t,i){if(window.SHOWCASE)return{phase:"showcase-noop"};const a={"Content-Type":"application/json","X-Confirm":"true"},l=typeof window.__AUTH_TOKEN=="string"?window.__AUTH_TOKEN:null;l&&(a.Authorization=`Bearer ${l}`);try{const c=await fetch(`${b()}/actions/ops.review`,{method:"POST",headers:a,body:JSON.stringify({escalation_id:s,verdict:t,note:i||""})}),o=await c.json().catch(()=>({}));return c.ok?o:(console.warn(`[ops-control] ops.review ${t} \u2192 HTTP ${c.status}`,o),{error:c.status,body:o})}catch(c){return console.warn("[ops-control] ops.review failed:",c.message),{error:"network"}}}async function R(s){if(!window.SHOWCASE)try{const t=await fetch(`${b()}/ops-control/retry?itemId=${encodeURIComponent(s)}`,{method:"POST"});if(t.status===501){console.info("[ops-control] retry not yet wired (501) \u2014 no-op, by design");return}t.ok||console.warn(`[ops-control] retry \u2192 HTTP ${t.status}`)}catch(t){console.warn("[ops-control] retry failed:",t.message)}}function y(s,t){const i={accent:"var(--app-accent)",warn:"var(--app-warn)",ok:"var(--app-success)",fail:"var(--app-signal, var(--app-fail))",faint:"var(--app-ink-faint)"},a=i[t]||i.faint;return e("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:999,fontFamily:"var(--app-font-mono, monospace)",letterSpacing:".06em",textTransform:"uppercase",color:a,background:"color-mix(in srgb, "+a+" 14%, transparent)"}},s)}function C(s,t){const i=a=>a==="run"||a==="running"?"running":a==="wait"?"awaiting":a==="fail"?"fail":"success";return e("div",{className:"view-agentSwimlanes"},[e("div",{key:"lanes",className:"wk-lanes"},s.map(a=>e("div",{key:a.id,className:`wk-lane ${i(a.state)}`},[e("div",{key:"hd",className:"wk-lane-head"},[e("span",{key:"st",className:"wk-lane-status"},a.state||""),e("span",{key:"ag",className:"wk-lane-time"},a.age||"")]),e("div",{key:"task",className:"wk-lane-task"},a.task||""),e("div",{key:"wt",className:"wk-lane-worktree"},[e("span",{key:"w"},a.worker||""),e("span",{key:"s",className:"wk-lane-dirty"},a.stream||"")]),a.harness||a.worktree||a.stageLabel?e("div",{key:"meta",style:{display:"flex",alignItems:"center",gap:6,marginTop:8,flexWrap:"wrap"}},[a.harness?y(a.harness,"accent"):null,a.tier?y(a.tier,"faint"):null,a.worktree?e("span",{key:"wtb",style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,fontFamily:"var(--app-font-mono, monospace)",color:"var(--app-ink-soft)"}},[e("span",{key:"dot",style:{width:6,height:6,borderRadius:"50%",display:"inline-block",background:a.dirty?"var(--app-warn)":"var(--app-success)"}}),a.worktree]):null,a.stageLabel?y(a.stageLabel,"warn"):null,e("span",{key:"rt",style:{marginLeft:"auto",fontSize:11,fontFamily:"var(--app-font-mono, monospace)",color:"var(--app-ink-faint)"}},[a.age,a.cost].filter(Boolean).join(" \xB7 "))]):null])))])}function A(s){return e("div",{className:"view-runReviewDiff"},[e("div",{key:"strip",className:"wk-run-strip"},s.map(t=>e("div",{key:t.id,className:"wk-run-chip"},[e("div",{key:"t",className:"wk-lane-task"},t.task||""),e("div",{key:"m",className:"wk-run-chip-meta"},`${t.worker||""} \xB7 ${t.duration||""} \xB7 ${t.attempts||1}\xD7`),e("div",{key:"v",className:`wk-run-verdict ${t.verdict==="fail"?"fail":"success"}`},t.verdict||""),e("div",{key:"act",className:"wk-lane-controls"},e("button",{type:"button",className:"wk-icon-btn",title:"Retry (501 stub \u2014 fails open)",onClick:()=>R(t.id)},"\u21BB"))]))),e("div",{key:"ro",className:"wk-pr-readonly"},"run history \xB7 read-only")])}const T=["Blocking now","Needs decision","FYI \xB7 aging"];function x(s){return s.severity==="fail"&&s.state==="pending_review"?"Blocking now":s.severity==="warn"||s.state==="changes_requested"?"Needs decision":"FYI \xB7 aging"}function O(s,t,i,a){const l={};s.forEach(o=>{const n=x(o);l[n]||(l[n]=[]),l[n].push(o)});const c=o=>o.severity==="fail"?"var(--app-signal, var(--app-fail))":o.severity==="warn"?"var(--app-warn)":"var(--app-rule)";return e("div",{className:"view-operatorInbox"},T.filter(o=>l[o]&&l[o].length).map(o=>e("div",{key:o,className:"wk-inbox-group",style:{marginBottom:18}},[e("div",{key:"hd",className:"wk-inbox-group-head",style:{fontSize:11,letterSpacing:".08em",textTransform:"uppercase",color:"var(--app-ink-faint)",marginBottom:8}},o),...l[o].map(n=>e("div",{key:n.id,className:"wk-inbox-card",onClick:a?()=>a(n.id):void 0,style:{display:"flex",flexDirection:"column",gap:8,padding:"12px 14px",marginBottom:8,borderRadius:10,cursor:a?"pointer":"default",background:i===n.id?"var(--app-elevated)":"var(--app-surface)",border:"1px solid "+(i===n.id?"var(--app-accent)":"var(--app-rule)"),borderLeft:"3px solid "+c(n)}},[e("div",{key:"top",className:"wk-inbox-item",style:{display:"flex",alignItems:"center",gap:8}},[e("span",{key:"f",className:`wk-prio-flag ${n.severity}`},null),y(n.state||"",n.severity==="fail"?"fail":n.severity==="warn"?"warn":"faint"),e("span",{key:"ask",style:{fontSize:13,color:"var(--app-ink)",flex:1}},n.ask||""),e("span",{key:"age",className:"wk-age",style:{fontSize:11,fontFamily:"var(--app-font-mono, monospace)",color:"var(--app-ink-faint)"}},n.waiting||"")]),e("div",{key:"act",className:"wk-drawer-actions"},[e("button",{key:"a",type:"button",className:"wk-btn wk-btn-primary",onClick:p=>{p.stopPropagation(),t(n.id,"approve")}},"Approve"),e("button",{key:"c",type:"button",className:"wk-btn",onClick:p=>{p.stopPropagation(),t(n.id,"request-changes")}},"Request changes"),e("button",{key:"r",type:"button",className:"wk-btn wk-btn-ghost",onClick:p=>{p.stopPropagation(),t(n.id,"reject")}},"Reject")])]))])))}function $(s,t,i){return e("div",{className:"view-unifiedAsk"},[e("div",{key:"ask",className:"ua-ask"},e("input",{className:"ua-ask-in",type:"search",placeholder:"Unified Ask \u2014 search queue \xB7 runs \xB7 escalations",value:s,onChange:a=>t(a.target.value)})),e("div",{key:"main",className:"ua-main"},i.length?i.map((a,l)=>e("div",{key:l,className:"wk-msg"},[e("span",{key:"s",className:"wk-msg-tag"},a._source||""),e("span",{key:"t",className:"wk-msg-text"},a.task||a.ask||a.name||"")])):e("div",{className:"wk-none"},s?"no matches":"type to search live ops sources"))])}function v(){const s=()=>window.KIND_REGISTRY&&window.KIND_REGISTRY.opsControl&&window.KIND_REGISTRY.opsControl.data||m,[t,i]=d(s),[a,l]=d("queue"),[c,o]=d(""),[n,p]=d(null),[D,P]=d(null);_(()=>{const r=()=>i(s());return window.addEventListener("ops-control-live-hydrated",r),()=>window.removeEventListener("ops-control-live-hydrated",r)},[]);const L=Array.isArray(t&&t.workers)?t.workers:[],h=Array.isArray(t&&t.queue)?t.queue:[],N=Array.isArray(t&&t.runHistory)?t.runHistory:[],S=Array.isArray(t&&t.escalations)?t.escalations:[],B=async(r,g)=>{const w=await E(r,g,"");w&&w.error===403?p("Not permitted \u2014 operator entitlement required."):w&&w.error?p(`Action failed (${w.error}).`):p(`${g} recorded for ${r}.`),setTimeout(()=>p(null),4e3)},I=c.trim().toLowerCase(),K=I?[...h.map(r=>({...r,_source:"queue"})),...N.map(r=>({...r,_source:"run-history"})),...S.map(r=>({...r,_source:"escalations"}))].filter(r=>[r.task,r.ask,r.worker,r.stream,r.name].filter(Boolean).join(" ").toLowerCase().includes(I)):[],f=(r,g)=>e("button",{key:r,type:"button",className:`fndry-tab${a===r?" on":""}`,onClick:()=>l(r)},g);let u;return a==="queue"?u=C(h,L):a==="runs"?u=A(N):a==="inbox"?u=O(S,B,D,P):u=$(c,o,K),e("div",{className:"opscontrol"},[t&&t.source?e("p",{key:"src",className:"fndry-src"},`source: ${t.source}`):null,n?e("div",{key:"flash",className:"wk-pr-verdict-note"},n):null,e("div",{key:"tabs",className:"fndry-tabs"},[f("queue","Queue"),f("runs","Run history"),f("inbox","Operator inbox"),f("ask","Unified Ask")]),e("div",{key:"body",className:"fndry-body"},u)])}v.displayName="OpsControlView",window.OPS_CONTROL_VIEW_FN=v,window.VIEWS=window.VIEWS||{},window.VIEWS.opsControl=v,window.KIND_REGISTRY=window.KIND_REGISTRY||{},window.KIND_REGISTRY.opsControl=window.KIND_REGISTRY.opsControl||{id:"opsControl",label:"Work Dashboard",workspaceLabel:"Operator / Work",workspaceIcon:"dashboard",description:"Operator/Work control surface: the running-work queue, the run-history log with retry, the escalation inbox with a real approve/reject/request-changes workflow, and Unified Ask. Data is per-tenant + operator-scoped via the G2 connectors; approve/reject/request-changes drive the ops.review workflow engine.",defaultView:"opsControl",defaultDetail:"none",agentTreatment:"implicit",primaryAction:{label:"Refresh",kind:"primary",icon:"refresh"},secondaryActions:[{label:"Export",icon:"download"}],heroKpis:m.heroKpis,data:m},window.OPS_CONTROL_SEED=m})();
