@acpus/web 0.1.0-alpha.0

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.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/client/api.d.ts +398 -0
  4. package/dist/client/api.d.ts.map +1 -0
  5. package/dist/client/api.js +73 -0
  6. package/dist/client/api.js.map +1 -0
  7. package/dist/client/assets/index-Cn1qpJ2F.css +1 -0
  8. package/dist/client/assets/index-DVV3hISu.js +2 -0
  9. package/dist/client/assets/vendor-B7fc3-WT.js +69 -0
  10. package/dist/client/assets/vendor-icons-BQrCRas_.js +241 -0
  11. package/dist/client/assets/vendor-json-view-B9Z7D9kT.css +1 -0
  12. package/dist/client/assets/vendor-json-view-uYZpLE5K.js +1 -0
  13. package/dist/client/assets/vendor-query-Co8PPx4J.js +1 -0
  14. package/dist/client/assets/vendor-radix-C9JUg2bE.js +1 -0
  15. package/dist/client/assets/vendor-react-BRGuIgbw.js +49 -0
  16. package/dist/client/index.html +26 -0
  17. package/dist/client/lib/utils.d.ts +3 -0
  18. package/dist/client/lib/utils.d.ts.map +1 -0
  19. package/dist/client/lib/utils.js +6 -0
  20. package/dist/client/lib/utils.js.map +1 -0
  21. package/dist/client/main.d.ts +2 -0
  22. package/dist/client/main.d.ts.map +1 -0
  23. package/dist/client/main.js +18 -0
  24. package/dist/client/main.js.map +1 -0
  25. package/dist/client/static-viz.d.ts +8 -0
  26. package/dist/client/static-viz.d.ts.map +1 -0
  27. package/dist/client/static-viz.js +10 -0
  28. package/dist/client/static-viz.js.map +1 -0
  29. package/dist/client/ui/App.d.ts +40 -0
  30. package/dist/client/ui/App.d.ts.map +1 -0
  31. package/dist/client/ui/App.js +742 -0
  32. package/dist/client/ui/App.js.map +1 -0
  33. package/dist/client/ui/RunGraph.d.ts +9 -0
  34. package/dist/client/ui/RunGraph.d.ts.map +1 -0
  35. package/dist/client/ui/RunGraph.js +294 -0
  36. package/dist/client/ui/RunGraph.js.map +1 -0
  37. package/dist/client/ui/StaticGraphApp.d.ts +22 -0
  38. package/dist/client/ui/StaticGraphApp.d.ts.map +1 -0
  39. package/dist/client/ui/StaticGraphApp.js +102 -0
  40. package/dist/client/ui/StaticGraphApp.js.map +1 -0
  41. package/dist/client/ui/Toast.d.ts +16 -0
  42. package/dist/client/ui/Toast.d.ts.map +1 -0
  43. package/dist/client/ui/Toast.js +41 -0
  44. package/dist/client/ui/Toast.js.map +1 -0
  45. package/dist/client/ui/shadcn/alert.d.ts +3 -0
  46. package/dist/client/ui/shadcn/alert.d.ts.map +1 -0
  47. package/dist/client/ui/shadcn/alert.js +6 -0
  48. package/dist/client/ui/shadcn/alert.js.map +1 -0
  49. package/dist/client/ui/shadcn/badge.d.ts +10 -0
  50. package/dist/client/ui/shadcn/badge.d.ts.map +1 -0
  51. package/dist/client/ui/shadcn/badge.js +19 -0
  52. package/dist/client/ui/shadcn/badge.js.map +1 -0
  53. package/dist/client/ui/shadcn/breadcrumb.d.ts +9 -0
  54. package/dist/client/ui/shadcn/breadcrumb.d.ts.map +1 -0
  55. package/dist/client/ui/shadcn/breadcrumb.js +15 -0
  56. package/dist/client/ui/shadcn/breadcrumb.js.map +1 -0
  57. package/dist/client/ui/shadcn/button.d.ts +12 -0
  58. package/dist/client/ui/shadcn/button.d.ts.map +1 -0
  59. package/dist/client/ui/shadcn/button.js +37 -0
  60. package/dist/client/ui/shadcn/button.js.map +1 -0
  61. package/dist/client/ui/shadcn/card.d.ts +6 -0
  62. package/dist/client/ui/shadcn/card.d.ts.map +1 -0
  63. package/dist/client/ui/shadcn/card.js +10 -0
  64. package/dist/client/ui/shadcn/card.js.map +1 -0
  65. package/dist/client/ui/shadcn/dialog.d.ts +11 -0
  66. package/dist/client/ui/shadcn/dialog.d.ts.map +1 -0
  67. package/dist/client/ui/shadcn/dialog.js +15 -0
  68. package/dist/client/ui/shadcn/dialog.js.map +1 -0
  69. package/dist/client/ui/shadcn/input.d.ts +5 -0
  70. package/dist/client/ui/shadcn/input.d.ts.map +1 -0
  71. package/dist/client/ui/shadcn/input.js +6 -0
  72. package/dist/client/ui/shadcn/input.js.map +1 -0
  73. package/dist/client/ui/shadcn/list.d.ts +8 -0
  74. package/dist/client/ui/shadcn/list.d.ts.map +1 -0
  75. package/dist/client/ui/shadcn/list.js +8 -0
  76. package/dist/client/ui/shadcn/list.js.map +1 -0
  77. package/dist/client/ui/shadcn/popover.d.ts +8 -0
  78. package/dist/client/ui/shadcn/popover.d.ts.map +1 -0
  79. package/dist/client/ui/shadcn/popover.js +11 -0
  80. package/dist/client/ui/shadcn/popover.js.map +1 -0
  81. package/dist/client/ui/shadcn/select.d.ts +9 -0
  82. package/dist/client/ui/shadcn/select.d.ts.map +1 -0
  83. package/dist/client/ui/shadcn/select.js +17 -0
  84. package/dist/client/ui/shadcn/select.js.map +1 -0
  85. package/dist/client/ui/shadcn/tabs.d.ts +7 -0
  86. package/dist/client/ui/shadcn/tabs.d.ts.map +1 -0
  87. package/dist/client/ui/shadcn/tabs.js +12 -0
  88. package/dist/client/ui/shadcn/tabs.js.map +1 -0
  89. package/dist/client/ui/shadcn/textarea.d.ts +3 -0
  90. package/dist/client/ui/shadcn/textarea.d.ts.map +1 -0
  91. package/dist/client/ui/shadcn/textarea.js +6 -0
  92. package/dist/client/ui/shadcn/textarea.js.map +1 -0
  93. package/dist/graph-renderer.d.ts +114 -0
  94. package/dist/graph-renderer.d.ts.map +1 -0
  95. package/dist/graph-renderer.js +673 -0
  96. package/dist/graph-renderer.js.map +1 -0
  97. package/dist/index.d.ts +5 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +5 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/runtime-status.d.ts +10 -0
  102. package/dist/runtime-status.d.ts.map +1 -0
  103. package/dist/runtime-status.js +45 -0
  104. package/dist/runtime-status.js.map +1 -0
  105. package/dist/server/app.d.ts +11 -0
  106. package/dist/server/app.d.ts.map +1 -0
  107. package/dist/server/app.js +244 -0
  108. package/dist/server/app.js.map +1 -0
  109. package/dist/server/assets.d.ts +3 -0
  110. package/dist/server/assets.d.ts.map +1 -0
  111. package/dist/server/assets.js +45 -0
  112. package/dist/server/assets.js.map +1 -0
  113. package/dist/server/errors.d.ts +14 -0
  114. package/dist/server/errors.d.ts.map +1 -0
  115. package/dist/server/errors.js +13 -0
  116. package/dist/server/errors.js.map +1 -0
  117. package/dist/server/graph.d.ts +137 -0
  118. package/dist/server/graph.d.ts.map +1 -0
  119. package/dist/server/graph.js +592 -0
  120. package/dist/server/graph.js.map +1 -0
  121. package/dist/server/launcher.d.ts +15 -0
  122. package/dist/server/launcher.d.ts.map +1 -0
  123. package/dist/server/launcher.js +30 -0
  124. package/dist/server/launcher.js.map +1 -0
  125. package/dist/server/node-inspection.d.ts +108 -0
  126. package/dist/server/node-inspection.d.ts.map +1 -0
  127. package/dist/server/node-inspection.js +435 -0
  128. package/dist/server/node-inspection.js.map +1 -0
  129. package/dist/server/security.d.ts +12 -0
  130. package/dist/server/security.d.ts.map +1 -0
  131. package/dist/server/security.js +43 -0
  132. package/dist/server/security.js.map +1 -0
  133. package/dist/server/static-viz-assets.generated.d.ts +3 -0
  134. package/dist/server/static-viz-assets.generated.d.ts.map +1 -0
  135. package/dist/server/static-viz-assets.generated.js +4 -0
  136. package/dist/server/static-viz-assets.generated.js.map +1 -0
  137. package/dist/server/workflows.d.ts +75 -0
  138. package/dist/server/workflows.d.ts.map +1 -0
  139. package/dist/server/workflows.js +205 -0
  140. package/dist/server/workflows.js.map +1 -0
  141. package/package.json +65 -0
@@ -0,0 +1,2 @@
1
+ import{r as d,j as t,c as sn}from"./vendor-react-BRGuIgbw.js";import{u as A,a as an,b as tt,Q as rn,c as on}from"./vendor-query-Co8PPx4J.js";import{J as nt,d as st,a as at}from"./vendor-json-view-uYZpLE5K.js";import{C as it,a as cn,b as ln,R as dn,S as un,c as rt,G as fn,d as hn,e as pn,f as ot,B as mn,T as ct,g as xn,h as lt,i as L,j as jn,k as gn,l as wn,L as ce,m as dt,n as vn,o as yn,M as kn,P as bn,p as ut,q as be,X as Nn,r as Ne,s as ft,W as Sn,t as Cn,u as $n,A as In,F as Rn,v as ht,w as pt,x as Pn,y as Mn,z as zn,D as En,E as On,H as Bn,I as Tn,J as mt}from"./vendor-icons-BQrCRas_.js";import{S as xt,a as jt,b as Dn,c as Wn,d as gt,e as An,f as Ln,g as Fn,h as wt,i as Kn,j as Vn,k as qn,l as Un,D as vt,m as Jn,n as yt,o as Hn,p as _n,q as Gn,P as Zn,C as kt,R as Xn,T as Qn,r as Yn,L as bt,s as Nt,t as St,u as es}from"./vendor-radix-C9JUg2bE.js";import{t as ts,e as ns,g as Ct,M as ss,r as as}from"./vendor-B7fc3-WT.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const r of a)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function s(a){const r={};return a.integrity&&(r.integrity=a.integrity),a.referrerPolicy&&(r.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?r.credentials="include":a.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(a){if(a.ep)return;a.ep=!0;const r=s(a);fetch(a.href,r)}})();async function T(e){var s;const n=await e.json();if(!e.ok||!n.ok)throw new Error(((s=n.error)==null?void 0:s.message)??`Request failed with ${e.status}.`);return n}async function is(){return T(await fetch("/api/health")).then(e=>e.health)}async function rs(){return T(await fetch("/api/runs")).then(e=>e.runs)}async function os(e){return T(await fetch(`/api/runs/${encodeURIComponent(e)}/runtime-snapshot`))}async function cs(e,n,s){return T(await fetch($t(e,n,s))).then(i=>i.inspection)}async function ls(e,n,s){return T(await fetch($t(e,n,s,"/execution"))).then(i=>i.execution)}function $t(e,n,s,i=""){const a=`/api/runs/${encodeURIComponent(e)}/nodes/${encodeURIComponent(n)}${i}`;return!s||s.length===0?a:`${a}?context=${encodeURIComponent(ds(s))}`}function ds(e){const n=JSON.stringify(e),s=new TextEncoder().encode(n);let i="";for(const a of s)i+=String.fromCharCode(a);return btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function us(e,n){const s=await fetch(`/api/runs/${encodeURIComponent(e)}/artifacts/${encodeURIComponent(n)}/preview`);if(!s.ok)throw new Error(`Artifact preview failed with ${s.status}.`);return{text:await s.text(),mediaType:s.headers.get("content-type")??"text/plain",size:Number(s.headers.get("x-artifact-size")??"0"),truncated:s.headers.get("x-artifact-truncated")==="true"}}async function fs(e,n){return T(await fetch(`/api/runs/${encodeURIComponent(e)}/controls`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n)}))}async function hs(){return T(await fetch("/api/workflows/catalog")).then(e=>e.catalog)}async function ps(e=""){return T(await fetch(`/api/workflows/files?dir=${encodeURIComponent(e)}`)).then(n=>n.files)}async function ms(e){return T(await fetch("/api/workflows/visualize",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({source:e})})).then(n=>n.result)}async function xs(){return T(await fetch("/api/config")).then(e=>e.config)}const js=new Set(["running","awaiting"]);function z(e){switch(e){case"pending":case"ready":return"queued";case"started":return"running";case"cancelled":return"canceled";case"timed_out":return"failed";case"consumed":case"superseded":return"completed";case"running":case"awaiting":case"paused":case"completed":case"failed":case"canceled":case"skipped":case"not_started":return e;default:return"not_started"}}function gs(e){return z(e)}function Be(e){return z(e)}function ws(e){return js.has(z(e))}function V(e){return z(e).replaceAll("_"," ")}const vs=200,ys=72,ks=260,bs=340,Ns=78,Te=220,Ss=64,De=46,Cs=18,$s=32,Is=56,We=36,Ae=36,_=48,Rs=12,Ps=32,Ms=.045,zs=.75,It=2,Es=8e-4,Rt=48,Le=1,Os=18,Fe=_,he=It,Ke=Rt;function Bs(e){return Le+Math.min(Math.max(0,e),Os-Le)}function Ts(e){if(e)switch(e.kind){case"assert":return e.condition;case"signal":return e.outputSchema;case"agent":return[`use: ${e.use??e.command??e.agent}`,e.model].filter(Boolean).join(" · ");case"task":return e.inputs.length>0?`input: ${e.inputs.join(", ")}`:void 0;default:return}}function Ds(e){if(e)switch(e.kind){case"parallel":return`${e.branches.length} branch(es)`;case"switch":return`${e.cases.length+(e.hasDefault?1:0)} branch(es)`;case"if":return`Condition: ${e.condition}`;case"fanout":return e.over;case"loop":return;default:return}}function Ws(e,n){return e.kind==="loop"&&n.iteration!==void 0?`iter ${n.iteration}`:n.label}function As(e){return e.toUpperCase()}function Ls(e){if((e==null?void 0:e.kind)==="parallel"||(e==null?void 0:e.kind)==="fanout")return e.strategy.toUpperCase()}function Ve(e,n={}){var g;if(!e)return{mode:"static",items:new Map,rootIds:[],edges:[],parentOf:new Map};const s=Ce(e,n),i=$e(e,s),a=new Map(i.map(u=>[u.nodeId,u])),r=new Set([...e.nodes.map(u=>u.id),...e.containers.map(u=>u.id)]),o=Ks([...e.containers.map(u=>({id:u.id,parentId:u.parentId})),...e.nodes.map(u=>ta(u.id,u.parentId??u.parentNodeId))],r),l=new Map;for(const u of e.containers){const f=_e(e,u.id,u.status,s),j=Be(f),m=o.get(u.id);l.set(u.id,{id:u.id,type:"container",kind:u.kind,label:u.label,status:j,rawStatus:f,dimmed:!1,active:X(j),children:[],path:u.path,nodeId:u.nodeId,container:{...u,status:j},...m?{parentId:m}:{}})}for(const u of e.nodes){const f=_e(e,u.id,u.status,s),j=Be(f),m=a.get(u.id),w=m?((g=s.get(m.nodeId))==null?void 0:g.id)??m.defaultOptionId:void 0,v=o.get(u.id);l.set(u.id,{id:u.id,type:"node",kind:u.kind,label:u.label,status:j,rawStatus:f,dimmed:!1,active:X(j),children:[],path:u.path,nodeId:u.nodeId,node:{...u,status:j},...v?{parentId:v}:{},...m?{selector:m}:{},...w?{selectedOptionId:w}:{}})}const c=new Map;for(const u of l.keys()){const f=o.get(u)??"";c.set(f,[...c.get(f)??[],u])}const p=aa(e);for(const[u,f]of l)f.children=Ge(c.get(u)??[],e.edges,p);return ia(e,l,o),{mode:e.mode,items:l,rootIds:Ge(c.get("")??[],e.edges,p),edges:e.edges.filter(u=>r.has(u.source)&&r.has(u.target)),parentOf:o}}function Fs(e,n){const s={},i=Ce(e,n);for(const a of $e(e,i)){const r=n[a.nodeId],o=a.options.find(l=>l.id===r)??a.options.find(l=>l.id===a.defaultOptionId)??a.options.at(-1)??a.options[0];o&&(s[a.nodeId]=o.id)}return s}function qe(e,n,s,i){if(!e||e.mode==="static")return[];const a=Ce(e,n);return $e(e,a).flatMap(r=>{if(s&&i&&s!==r.targetId&&!je(r.targetId,s,i))return[];const o=a.get(r.nodeId)??r.options.find(l=>l.id===r.defaultOptionId)??r.options[0];return o?[sa(r,o)]:[]})}function Ks(e,n){const s=new Map,i=(a,r)=>{const o=new Set;let l=a;for(;l&&!o.has(l);){if(l===r)return!0;o.add(l),l=s.get(l)}return!1};for(const a of e){const r=a.parentId;r===void 0||r===a.id||!n.has(r)||i(r,a.id)||s.set(a.id,r)}return s}function Vs(e){const n=new Map,s=new Map,i=f=>{const j=s.get(f);if(j)return j;const m=e.items.get(f);if(!m)return{width:0,height:0};let w;if(m.children.length===0)m.type==="container"?w={width:Te,height:Ss}:zt(m.kind)?w={width:a(m),height:Ns}:w={width:vs,height:ys};else{const v=o(m.children,e.items),k=m.type==="container"?Te:a(m),$=r(m);w={width:Math.max(k,v.width+$*2),height:De+$+v.height+$}}return s.set(f,w),w};function a(f){return f.kind==="loop"?bs:ks}function r(f){var j;return f.type!=="container"?Cs:((j=f.container)==null?void 0:j.kind)==="scope"?Is:$s}const o=(f,j)=>{if(f.length===0)return{width:0,height:0};const m=Ze(f,j),w=f.map(i);return m==="horizontal"?{width:w.reduce((v,k)=>v+k.width,0)+Ae*(w.length-1),height:Math.max(...w.map(v=>v.height))}:{width:Math.max(...w.map(v=>v.width)),height:w.reduce((v,k)=>v+k.height,0)+We*(w.length-1)}},l=o(e.rootIds,e.items),c=(f,j,m)=>{const w=e.items.get(f);if(!w)return;const v=i(f);if(n.set(f,{id:f,x:j,y:m,width:v.width,height:v.height}),w.children.length===0)return;const k=o(w.children,e.items),$=r(w);p(w.children,j+(v.width-k.width)/2,m+De+$,k.width)},p=(f,j,m,w,v)=>{if(Ze(f,e.items)==="horizontal"){let M=j;for(const y of f){const H=i(y);c(y,M,m),M+=H.width+Ae}return}let $=m;for(const M of f){const y=i(M);c(M,j+(w-y.width)/2,$),$+=y.height+We}};p(e.rootIds,_,_,l.width);const g=Math.max(l.width+_*2,960),u=Math.max(l.height+_*2,540);return{boxes:n,edgePaths:qs(e.edges,n,e.parentOf,Pt(e)),width:g,height:u}}function qs(e,n,s,i=new Set){const a=[];for(const r of Se(e,s)){const o=n.get(r.source),l=n.get(r.target);if(!o||!l)continue;const c={x:o.x+o.width/2,y:o.y+o.height},p={x:l.x+l.width/2,y:l.y},g=r.kind==="loop"||p.y<c.y?Bt(c.x,c.y,p.x,p.y,o,l):Ot(c.x,c.y,p.x,p.y);a.push({id:r.id,kind:r.kind,d:g,...i.has(r.id)?{active:!0}:{}})}return a}function Us(e,n,s,i,a=new Set){return Se(e,s).flatMap(r=>{const o=Js(r,n,i);return o?[{...o,...a.has(r.id)?{active:!0}:{}}]:[]})}function Js(e,n,s){const i=n.get(e.source),a=n.get(e.target);if(!i||!a)return;const r=Z(i,s),o=Z(a,s),l=Ue({x:i.x+i.width/2,y:i.y+i.height},s),c=Ue({x:a.x+a.width/2,y:a.y},s),p=e.kind==="loop"||c.y<l.y?Bt(l.x,l.y,c.x,c.y,r,o):Ot(l.x,l.y,c.x,c.y);return{id:e.id,kind:e.kind,d:p}}function Se(e,n){return e.filter(s=>n.get(s.source)===n.get(s.target)&&!je(s.source,s.target,n)&&!je(s.target,s.source,n))}function Pt(e){const n=new Set;for(const s of Se(e.edges,e.parentOf)){const i=e.items.get(s.source),a=e.items.get(s.target);!i||!a||(X(i.status)||X(a.status))&&n.add(s.id)}return n}function Hs(e,n){return new Map([...e].map(([s,i])=>[s,Z(i,n)]))}function Z(e,n){return{id:e.id,x:n.x+e.x*n.scale,y:n.y+e.y*n.scale,width:e.width*n.scale,height:e.height*n.scale}}function Ue(e,n){return{x:n.x+e.x*n.scale,y:n.y+e.y*n.scale}}function _s(e){return e>=1}function Je(e,n){if(e.width<=0||e.height<=0||n.width<=0||n.height<=0)return{x:0,y:0,scale:1};const s=Mt(e,n);return{x:(n.width-e.width*s)/2,y:(n.height-e.height*s)/2,scale:s}}function Mt(e,n){if(e.width<=0||e.height<=0||n.width<=0||n.height<=0)return 1;const s=Gs(n),i=Math.max(1,n.width-s*2),a=Math.max(1,n.height-s*2);return Ie(Math.min(i/e.width,a/e.height,1),0,It)}function Gs(e){return e.width<=0||e.height<=0?0:Ie(Math.min(e.width,e.height)*Ms,Rs,Ps)}function Zs(e){return e*zs}function Xs(e,n,s,i){return Ie(e*Math.exp(-n*Es),s,i)}function Qs(e,n,s,i){return{x:s-(s-e.x)/e.scale*n,y:i-(i-e.y)/e.scale*n,scale:n}}function He(e,n,s,i=Rt){if(!s||n.width<=0||n.height<=0)return e;const a=Z(s,e),r={...e},o=n.width-i*2,l=n.height-i*2;a.width>=o?r.x+=(n.width-a.width)/2-a.x:a.x<i?r.x+=i-a.x:a.x+a.width>n.width-i&&(r.x-=a.x+a.width-(n.width-i));const c=Z(s,r);return c.height>=l?r.y+=(n.height-c.height)/2-c.y:c.y<i?r.y+=i-c.y:c.y+c.height>n.height-i&&(r.y-=c.y+c.height-(n.height-i)),r}function Ys(e){return!e||typeof e.closest!="function"?!1:!e.closest(".graph-toolbar, button, input, select, textarea, a")}function ea(e,n){return Math.hypot(e,n)>=4}function pe(e,n){let s=0;const i=new Set;let a=n.get(e);for(;a&&!i.has(a);)i.add(a),s+=1,a=n.get(a);return s}function zt(e){return e==="if"||e==="switch"||e==="parallel"||e==="fanout"||e==="loop"}function ta(e,n){return n===void 0?{id:e}:{id:e,parentId:n}}function _e(e,n,s,i){var r;if(e.mode==="static")return s;const a=e.runtimeStates.filter(o=>o.targetId===n);return a.length===0?s:((r=a.find(o=>na(o,i)))==null?void 0:r.status)??"not_started"}function na(e,n){return e.selectors.every(s=>{const i=n.get(s.nodeId);return!i||Et(s,i)})}function Et(e,n){return e.kind==="fanout"?e.itemIndex!==void 0&&n.itemIndex!==void 0?e.itemIndex===n.itemIndex:e.itemKey!==void 0&&n.itemKey!==void 0?e.itemKey===n.itemKey:!1:e.iteration===n.iteration}function sa(e,n){return e.kind==="fanout"?{nodeId:e.nodeId,kind:"fanout",...n.itemKey===void 0?{}:{itemKey:n.itemKey},...n.itemIndex===void 0?{}:{itemIndex:n.itemIndex}}:{nodeId:e.nodeId,kind:"loop",...n.iteration===void 0?{}:{iteration:n.iteration}}}function Ce(e,n){const s=new Map;for(const i of e.selectors){const a=i.options.find(r=>r.id===n[i.nodeId])??i.options.find(r=>r.id===i.defaultOptionId)??i.options.at(-1)??i.options[0];a&&s.set(i.nodeId,a)}return s}function $e(e,n){return e.selectors.map(s=>{var r;const i=s.options.filter(o=>o.parentSelections.every(l=>{const c=n.get(l.nodeId);return c?Et(l,c):!0})),a=i.some(o=>o.id===s.defaultOptionId)?s.defaultOptionId:(r=i.at(-1))==null?void 0:r.id;return{...s,options:i,...a?{defaultOptionId:a}:{}}}).filter(s=>s.options.length>0)}function aa(e){const n=new Map;let s=0;for(const i of e.containers)n.set(i.id,s++);for(const i of e.nodes)n.set(i.id,s++);return n}function Ge(e,n,s){const i=new Set(e),a=new Map,r=new Map(e.map(p=>[p,0]));for(const p of n)!i.has(p.source)||!i.has(p.target)||(a.set(p.source,[...a.get(p.source)??[],p.target]),r.set(p.target,(r.get(p.target)??0)+1));const o=(p,g)=>(s.get(p)??Number.MAX_SAFE_INTEGER)-(s.get(g)??Number.MAX_SAFE_INTEGER),l=e.filter(p=>(r.get(p)??0)===0).sort(o),c=[];for(;l.length>0;){const p=l.shift();c.push(p);for(const g of a.get(p)??[]){const u=(r.get(g)??0)-1;r.set(g,u),u===0&&(l.push(g),l.sort(o))}}return c.length===e.length?c:[...e].sort(o)}function Ze(e,n){return e.length<=1?"vertical":e.every(i=>{var r;const a=n.get(i);return(a==null?void 0:a.type)==="container"&&((r=a.container)==null?void 0:r.kind)==="branch"})?"horizontal":"vertical"}function ia(e,n,s){ra(e,n,s);const i=a=>{const r=n.get(a);return r?X(r.status)?!0:r.children.some(i):!1};for(const a of n.values())a.active=i(a.id),a.dimmed=e.mode==="runtime"&&(a.status==="not_started"||a.status==="skipped")}function ra(e,n,s){if(e.mode!=="runtime"||!oa(e.workflow.status))return;const i=r=>{const o=n.get(r);if(!(!o||o.status!=="not_started")){o.status="skipped";for(const l of o.children)i(l)}},a=new Map;for(const r of n.keys()){const o=s.get(r);o&&a.set(o,[...a.get(o)??[],r])}for(const r of a.values())if(!(r.length<2||!r.some(l=>{var p;const c=(p=n.get(l))==null?void 0:p.status;return c!==void 0&&c!=="not_started"&&c!=="skipped"})))for(const l of r)i(l)}function oa(e){const n=gs(e);return n==="completed"||n==="canceled"}function X(e){return ws(e)}function je(e,n,s){const i=new Set;let a=s.get(n);for(;a&&!i.has(a);){if(a===e)return!0;i.add(a),a=s.get(a)}return!1}function Ie(e,n,s){return Math.min(s,Math.max(n,e))}function Ot(e,n,s,i){const a=n+Math.max(24,(i-n)/2);return`M ${e} ${n} V ${a} H ${s} V ${i-1}`}function Bt(e,n,s,i,a,r){const o=Math.max(a.x+a.width,r.x+r.width)+22;return`M ${e} ${n} V ${n+24} H ${o} V ${i-24} H ${s} V ${i-1}`}function C(...e){return ts(ns(e))}const ca=Ct("ui-button",{variants:{variant:{default:"primary-button",icon:"icon-button",ghost:"ui-button-ghost",tool:"graph-tool-button",confirmPrimary:"confirm-primary",confirmSecondary:"confirm-secondary",tab:"inspector-tab"},tone:{default:"",pause:"pause",resume:"resume",retry:"retry",cancel:"cancel",destructive:"cancel"}},defaultVariants:{variant:"default",tone:"default"}}),I=d.forwardRef(({className:e,variant:n,tone:s,asChild:i=!1,...a},r)=>{const o=i?xt:"button";return t.jsx(o,{ref:r,className:C(ca({variant:n,tone:s}),e),...a})});I.displayName="Button";const Re=qn,Pe=Un,le=d.forwardRef(({className:e,children:n,...s},i)=>t.jsxs(jt,{ref:i,className:C("select-trigger",e),...s,children:[n,t.jsx(Dn,{asChild:!0,children:t.jsx(it,{size:14,strokeWidth:1.8})})]}));le.displayName=jt.displayName;const de=d.forwardRef(({className:e,children:n,position:s="popper",...i},a)=>t.jsx(Wn,{children:t.jsxs(gt,{ref:a,className:C("select-content",e),position:s,sideOffset:6,...i,children:[t.jsx(An,{className:"select-scroll-button",children:t.jsx(cn,{size:14})}),t.jsx(Ln,{className:"select-viewport",children:n}),t.jsx(Fn,{className:"select-scroll-button",children:t.jsx(it,{size:14})})]})}));de.displayName=gt.displayName;const ue=d.forwardRef(({className:e,children:n,...s},i)=>t.jsxs(wt,{ref:i,className:C("select-item",e),...s,children:[t.jsx("span",{className:"select-item-indicator",children:t.jsx(Kn,{children:t.jsx(ln,{size:13,strokeWidth:2})})}),t.jsx(Vn,{children:n})]}));ue.displayName=wt.displayName;const la={task:ct,agent:mn,signal:ot,assert:pn,if:hn,switch:fn,parallel:rt,fanout:un,loop:dn};function Tt({kind:e,size:n}){const s=la[e]??ct;return t.jsx(s,{size:n,strokeWidth:1.75})}const da={queued:dt,running:ce,awaiting:wn,paused:gn,completed:jn,failed:L,canceled:lt,skipped:xn};function Dt({status:e}){const n=z(e);if(n==="not_started")return null;const s=da[n]??dt,i=n==="completed"||n==="failed";return t.jsx("span",{className:`runtime-status-glyph ${n}`,title:V(n),"aria-label":V(n),children:t.jsx(s,{size:i?15:14,strokeWidth:i?3:2.15})})}function ua(){return t.jsxs("div",{className:"graph-empty",role:"group","aria-labelledby":"graph-empty-title","aria-describedby":"graph-empty-detail",children:[t.jsx(rt,{size:22,strokeWidth:1.75,"aria-hidden":"true"}),t.jsx("strong",{id:"graph-empty-title",children:"Graph view is empty"}),t.jsx("p",{id:"graph-empty-detail",children:"Open a run with workflow structure; if the run just loaded, the graph will appear when details arrive."})]})}function Wt({graph:e,selectedNodeId:n,onSelectNode:s,onSelectWorkflow:i}){const[a,r]=d.useState({}),[o,l]=d.useState({x:0,y:0,scale:1}),[c,p]=d.useState(!1),g=d.useRef(null),u=d.useRef({}),f=d.useRef({x:0,y:0,scale:1}),j=d.useRef(void 0),m=d.useRef(!1),w=d.useRef(!1),v=d.useRef(void 0);d.useEffect(()=>{e&&r(h=>Fs(e,h))},[e]),d.useEffect(()=>{u.current=a},[a]),d.useEffect(()=>{f.current=o},[o]);const k=d.useMemo(()=>Ve(e,a),[e,a]),$=h=>h?qe(e,a,h,k.parentOf):[],M=h=>{var x;return h?(x=k.items.get(h))==null?void 0:x.status:void 0},y=d.useMemo(()=>Vs(k),[k]),H=`${(e==null?void 0:e.mode)??"none"}:${(e==null?void 0:e.workflow.runId)??(e==null?void 0:e.workflow.name)??"graph"}:${y.width}x${y.height}`,ee=d.useMemo(()=>Pt(k),[k]),E=_s(o.scale),D=d.useMemo(()=>E?Hs(y.boxes,o):y.boxes,[y.boxes,E,o]),te=d.useMemo(()=>E?Us(k.edges,y.boxes,k.parentOf,o,ee):y.edgePaths,[ee,y.boxes,y.edgePaths,E,k.edges,k.parentOf,o]),q=E?Math.max(y.width*o.scale+Math.abs(o.x)+Fe,960):y.width,U=E?Math.max(y.height*o.scale+Math.abs(o.y)+Fe,540):y.height,O=(h,x)=>{if(v.current!==void 0&&window.clearTimeout(v.current),l(h),f.current=h,!x){p(!1);return}p(!0),v.current=window.setTimeout(()=>{p(!1),v.current=void 0},230)},b=(h=!1)=>{const x=g.current;x&&O(Je(y,x.getBoundingClientRect()),h)},R=()=>{const h=g.current;return Zs(h?Mt(y,h.getBoundingClientRect()):o.scale)};return d.useEffect(()=>{w.current=!1,requestAnimationFrame(()=>b(!1))},[H]),d.useEffect(()=>{const h=g.current;if(!h)return;const x=new ResizeObserver(()=>{const P=h.getBoundingClientRect();if(!w.current){O(Je(y,P),!0);return}n&&O(He(f.current,P,y.boxes.get(n),Ke),!0)});return x.observe(h),()=>x.disconnect()},[y,n]),d.useEffect(()=>{const h=g.current;if(!h||!n)return;const x=requestAnimationFrame(()=>{O(He(f.current,h.getBoundingClientRect(),y.boxes.get(n),Ke),!0)});return()=>cancelAnimationFrame(x)},[y,n]),d.useEffect(()=>{n&&s(n,$(n),M(n))},[k,n]),d.useEffect(()=>{const h=g.current;if(!h)return;const x=P=>{P.preventDefault();const F=h.getBoundingClientRect(),K=f.current,ne=Xs(K.scale,P.deltaY,R(),he),se=P.clientX-F.left,nn=P.clientY-F.top;w.current=!0,O(Qs(K,ne,se,nn),!1)};return h.addEventListener("wheel",x,{passive:!1}),()=>h.removeEventListener("wheel",x)},[y]),d.useEffect(()=>()=>{v.current!==void 0&&window.clearTimeout(v.current)},[]),e?t.jsxs("div",{className:`graph-flow-shell run-status-${e.workflow.status?z(e.workflow.status):"static"} ${c?"viewport-animating":""}`,ref:g,onClickCapture:h=>{m.current&&(m.current=!1,h.preventDefault(),h.stopPropagation())},onClick:()=>s(void 0),onPointerDown:h=>{if(!Ys(h.target))return;const x=h.target.closest(".graph-box");j.current={pointerId:h.pointerId,startX:h.clientX,startY:h.clientY,viewport:o,moved:!1,...(x==null?void 0:x.dataset.selectNodeId)===void 0?{}:{selectNodeId:x.dataset.selectNodeId}}},onPointerMove:h=>{const x=j.current;if(!x||x.pointerId!==h.pointerId)return;const P=h.clientX-x.startX,F=h.clientY-x.startY;!x.moved&&!ea(P,F)||(h.preventDefault(),x.moved||h.currentTarget.setPointerCapture(h.pointerId),x.moved=!0,w.current=!0,l({...x.viewport,x:x.viewport.x+P,y:x.viewport.y+F}))},onPointerUp:h=>{const x=j.current;(x==null?void 0:x.pointerId)===h.pointerId&&(m.current=x.moved||!!x.selectNodeId,!x.moved&&x.selectNodeId&&s(x.selectNodeId,$(x.selectNodeId),M(x.selectNodeId)),j.current=void 0)},onPointerCancel:()=>{j.current=void 0},children:[t.jsxs("div",{className:"graph-toolbar",onClick:h=>h.stopPropagation(),children:[i&&t.jsxs(I,{type:"button",variant:"tool",className:"graph-tool-button workflow-io",title:"Workflow I/O","aria-label":"Workflow I/O: open workflow input and output",onClick:i,children:[t.jsx(vn,{size:14}),t.jsx("span",{children:"Workflow I/O"})]}),t.jsx(I,{type:"button",variant:"tool",className:"graph-tool-button",title:"Fit view","aria-label":"Fit graph to view",onClick:()=>b(!0),children:t.jsx(yn,{size:14})}),t.jsx(I,{type:"button",variant:"tool",className:"graph-tool-button",title:"Zoom out","aria-label":"Zoom graph out",onClick:()=>{w.current=!0;const h=f.current;O({...h,scale:Xe(h.scale*.85,R(),he)},!1)},children:t.jsx(kn,{size:14})}),t.jsx(I,{type:"button",variant:"tool",className:"graph-tool-button",title:"Zoom in","aria-label":"Zoom graph in",onClick:()=>{w.current=!0;const h=f.current;O({...h,scale:Xe(h.scale*1.15,R(),he)},!1)},children:t.jsx(bn,{size:14})})]}),t.jsxs("div",{className:"graph-canvas",style:{width:q,height:U,transform:E?void 0:`translate(${o.x}px, ${o.y}px) scale(${o.scale})`},children:[t.jsxs("svg",{className:"graph-edges",width:q,height:U,viewBox:`0 0 ${q} ${U}`,children:[t.jsx("defs",{children:t.jsx("marker",{id:"graph-arrow",viewBox:"0 0 10 10",refX:"8.5",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:t.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z"})})}),te.map(h=>t.jsx("path",{className:`graph-edge ${h.kind} ${h.active?"active":""}`,d:h.d,markerEnd:h.kind==="loop"?void 0:"url(#graph-arrow)"},h.id))]}),[...D.values()].sort((h,x)=>pe(h.id,k.parentOf)-pe(x.id,k.parentOf)).map(h=>{const x=k.items.get(h.id);return x?t.jsx(fa,{box:h,item:x,selected:n===x.id||x.type==="container"&&n===x.nodeId,depth:pe(x.id,k.parentOf),onSelectNode:P=>s(P,$(P),M(P)),onSelectOption:(P,F)=>{var se;const K={...u.current,[P]:F};u.current=K,r(K);const ne=Ve(e,K);n&&s(n,qe(e,K,n,ne.parentOf),(se=ne.items.get(n))==null?void 0:se.status)}},x.id):null})]})]}):t.jsx(ua,{})}const fa=d.memo(function({box:n,item:s,selected:i,depth:a,onSelectNode:r,onSelectOption:o}){const l=["graph-box",s.type==="container"?"graph-container":"node",s.kind,s.status,`runtime-status-${s.status}`,s.active?"runtime-active":"",s.dimmed?"runtime-dimmed":"",i?"selected":"",s.children.length===0?"empty":""].filter(Boolean).join(" ");return t.jsx("div",{className:l,"data-select-node-id":s.type==="node"?s.id:s.nodeId,role:"button",tabIndex:0,"aria-label":`${s.type==="node"?"Node":"Container"} ${s.label}`,style:{left:n.x,top:n.y,width:n.width,height:n.height,zIndex:Bs(a)},onClick:c=>{c.stopPropagation(),r(s.type==="node"?s.id:s.nodeId)},onKeyDown:c=>{c.currentTarget===c.target&&(c.key!=="Enter"&&c.key!==" "||(c.preventDefault(),c.stopPropagation(),r(s.type==="node"?s.id:s.nodeId)))},children:s.type==="container"?t.jsx(ma,{item:s}):s.children.length>0||zt(s.kind)?t.jsx(pa,{item:s,onSelectOption:o}):t.jsx(ha,{item:s})})});function ha({item:e}){var s;const n=Ts((s=e.node)==null?void 0:s.detail);return t.jsxs("div",{className:"node-card",children:[t.jsxs("div",{className:"node-card-head",children:[t.jsx("span",{className:`type-badge ${e.kind}`,children:e.kind.toUpperCase()}),t.jsx(Tt,{kind:e.kind,size:14}),t.jsx("strong",{children:e.label}),t.jsx(Dt,{status:e.status})]}),n&&t.jsx("div",{className:"node-detail",children:n})]})}function pa({item:e,onSelectOption:n}){var a,r,o;const s=Ds((a=e.node)==null?void 0:a.detail),i=Ls((r=e.node)==null?void 0:r.detail);return t.jsxs("div",{className:"graph-box-header",children:[t.jsxs("span",{className:"composite-title",children:[t.jsx(Tt,{kind:e.kind,size:14}),t.jsx("strong",{children:e.label}),t.jsx("span",{className:`type-badge ${e.kind}`,children:As(e.kind)}),i&&t.jsx("span",{className:"strategy-badge",children:i}),t.jsx(Dt,{status:e.status}),s&&t.jsx("span",{className:"composite-descriptor",children:s})]}),e.selector&&e.selector.options.length>0&&t.jsx("span",{className:`graph-selector-wrap ${e.selector.kind}`,children:t.jsxs(Re,{value:e.selectedOptionId??e.selector.defaultOptionId??((o=e.selector.options[0])==null?void 0:o.id)??"",onValueChange:l=>n(e.selector.nodeId,l),children:[t.jsx(le,{className:`graph-selector ${e.selector.kind}`,"aria-label":`${e.selector.kind==="loop"?"Loop iteration":"Fanout item"} for ${e.label}`,onClick:l=>l.stopPropagation(),children:t.jsx(Pe,{})}),t.jsx(de,{children:e.selector.options.map(l=>t.jsx(ue,{value:l.id,children:Ws(e.selector,l)},l.id))})]})})]})}function ma({item:e}){return t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"branch-pill",children:e.label}),e.children.length===0&&t.jsx("div",{className:"empty-branch",children:e.kind==="scope"?"empty scope":"empty branch"})]})}function Xe(e,n,s){return Math.min(s,Math.max(n,e))}const Me=d.forwardRef(({className:e,asChild:n=!1,...s},i)=>{const a=n?xt:"section";return t.jsx(a,{ref:i,className:C("ui-card",e),...s})});Me.displayName="Card";const xa=220;function ja({data:e}){const[n,s]=d.useState(),{exiting:i,close:a,layoutState:r}=ga(n,()=>s(void 0)),o=(n==null?void 0:n.kind)==="node"?n.id:void 0;return t.jsx("div",{className:"static-viz-root",children:t.jsxs("div",{className:`graph-inspection-layout ${r==="open"?"with-inspector":r==="closing"?"closing-inspector":""}`,children:[t.jsx("section",{className:"graph-panel",children:t.jsx(Wt,{graph:e.graph,...o===void 0?{}:{selectedNodeId:o},onSelectNode:(l,c=[])=>s(l?{kind:"node",id:l,context:c}:void 0),onSelectWorkflow:()=>s({kind:"workflow"})})}),n&&t.jsx("div",{className:"inspector-slot",children:t.jsx(ya,{title:n.kind==="workflow"?"Workflow I/O":o??"Node",exiting:i,onClose:a,children:n.kind==="workflow"?t.jsx(wa,{data:e}):t.jsx(va,{graph:e.graph,target:o})})})]})})}function ga(e,n){const[s,i]=d.useState(!1);return d.useEffect(()=>{e&&i(!1)},[e]),{exiting:s,layoutState:e?s?"closing":"open":"closed",close:()=>{if(!(!e||s)){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){n();return}i(!0),window.setTimeout(()=>{i(!1),n()},xa)}}}}function wa({data:e}){var s,i;const n=e.workflow??{name:e.graph.workflow.name,...e.graph.workflow.description===void 0?{}:{description:e.graph.workflow.description},irVersion:e.graph.version??0,nodeCount:e.graph.nodes.length};return t.jsxs("div",{className:"inspector-stack",children:[t.jsxs(ie,{title:"Workflow",children:[t.jsx(W,{label:"Name",value:n.name}),n.description&&t.jsx(W,{label:"Description",value:n.description}),t.jsx(W,{label:"IR version",value:String(n.irVersion)}),t.jsx(W,{label:"Node count",value:String(n.nodeCount)}),e.irDigest&&t.jsx(W,{label:"IR digest",value:e.irDigest}),e.sourceGraphDigest&&t.jsx(W,{label:"Source digest",value:e.sourceGraphDigest})]}),(s=e.contract)!=null&&s.inputSchema?t.jsx(ge,{title:"Input Contract",value:e.contract.inputSchema}):t.jsx(ie,{title:"Input Contract",children:t.jsx(we,{title:"No input schema",detail:"This workflow does not declare an input schema."})}),t.jsx(ge,{title:"Output Mapping",value:((i=e.contract)==null?void 0:i.outputs)??{}})]})}function va({graph:e,target:n}){if(!e||!n)return t.jsx(we,{title:"Select a graph node",detail:"Node details appear here after selection."});const s=e.nodes.find(a=>a.id===n),i=e.containers.find(a=>a.id===n);return!s&&!i?t.jsx(we,{title:"No graph detail",detail:"The selected graph target is no longer available."}):t.jsxs("div",{className:"inspector-stack",children:[t.jsxs(ie,{title:"Identity",children:[t.jsx(W,{label:"Kind",value:(s==null?void 0:s.kind)??(i==null?void 0:i.kind)??"unknown"}),t.jsx(W,{label:"Node ID",value:(s==null?void 0:s.nodeId)??(i==null?void 0:i.nodeId)??n}),t.jsx(W,{label:"Path",value:((s==null?void 0:s.path)??(i==null?void 0:i.path)??[]).join(" / ")})]}),(s==null?void 0:s.detail)&&t.jsx(ge,{title:"Definition",value:s.detail})]})}function ya({title:e,exiting:n=!1,onClose:s,children:i}){return d.useEffect(()=>{const a=r=>{r.key==="Escape"&&s()};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[s]),t.jsx(Me,{asChild:!0,className:`inspector-card ${n?"exiting":""}`,children:t.jsxs("aside",{role:"dialog","aria-label":e,children:[t.jsxs("div",{className:"inspector-card-head",children:[t.jsxs("div",{children:[t.jsx("span",{children:"Inspector"}),t.jsx("strong",{children:e})]}),t.jsx(I,{variant:"ghost",className:"close-button",onClick:s,"aria-label":"Close inspector",children:t.jsx(L,{size:16})})]}),t.jsx("div",{className:"inspector-card-body",children:i})]})})}function ie({title:e,action:n,children:s}){return t.jsxs("section",{className:"inspector-section",children:[t.jsxs("div",{className:"inspector-section-head",children:[t.jsx("h3",{children:e}),n]}),t.jsx("div",{className:"inspector-section-body",children:s})]})}function ge({title:e,value:n}){return t.jsx(ie,{title:e,action:t.jsx(ka,{value:n}),children:t.jsx(ba,{value:n})})}function ka({value:e}){const[n,s]=d.useState("idle");return t.jsxs(I,{type:"button",variant:"ghost",className:`json-copy-button ${n}`,onClick:async()=>{try{await navigator.clipboard.writeText(JSON.stringify(e,null,2)),s("copied"),window.setTimeout(()=>s("idle"),1400)}catch{s("failed"),window.setTimeout(()=>s("idle"),1800)}},children:[t.jsx(ut,{size:13}),n==="copied"?"Copied":n==="failed"?"Copy failed":"Copy JSON"]})}function ba({value:e}){return t.jsx("div",{className:"json-viewer",children:t.jsx(nt,{data:Na(e),shouldExpandNode:at,style:st})})}function Na(e){return e!==null&&typeof e=="object"?e:{value:e}}function W({label:e,value:n}){return t.jsxs("div",{className:"key-value",tabIndex:0,title:`${e}: ${n}`,"aria-label":`${e}: ${n}`,children:[t.jsx("span",{children:e}),t.jsx("strong",{children:n})]})}function we({title:e,detail:n}){return t.jsxs("div",{className:"state-block empty",children:[t.jsx("strong",{children:e}),n&&t.jsx("span",{children:n})]})}const Sa=4e3;function Ca(){const[e,n]=d.useState([]),s=d.useRef(new Map),i=d.useCallback(r=>{n(l=>l.filter(c=>c.id!==r));const o=s.current.get(r);o&&(clearTimeout(o),s.current.delete(r))},[]),a=d.useCallback(r=>{const o=`${Date.now()}:${Math.random().toString(36).slice(2,8)}`;n(l=>[...l,{...r,id:o}]),s.current.set(o,setTimeout(()=>i(o),Sa))},[i]);return d.useEffect(()=>{const r=s.current;return()=>{for(const o of r.values())clearTimeout(o);r.clear()}},[]),{toasts:e,push:a,dismiss:i}}function $a({toasts:e,onDismiss:n}){return e.length===0?null:t.jsx("div",{className:"toast-viewport",children:e.map(s=>t.jsxs("div",{className:`toast ${s.tone}`,role:s.tone==="error"?"alert":"status","aria-live":s.tone==="error"?"assertive":"polite","aria-atomic":"true",children:[s.tone==="success"?t.jsx(be,{size:16}):t.jsx(L,{size:16}),t.jsxs("div",{className:"toast-body",children:[t.jsx("strong",{children:s.title}),s.detail&&t.jsx("span",{children:s.detail})]}),t.jsx(I,{variant:"ghost",className:"toast-close",onClick:()=>n(s.id),"aria-label":"Dismiss",children:t.jsx(Nn,{size:14})})]},s.id))})}const At=d.forwardRef(({className:e,...n},s)=>t.jsx("div",{ref:s,className:C("ui-alert",e),...n}));At.displayName="Alert";const Ia=Ct("ui-badge",{variants:{variant:{default:"",status:"status-pill",tabCount:"tab-count"}},defaultVariants:{variant:"default"}}),Y=d.forwardRef(({className:e,variant:n,...s},i)=>t.jsx("span",{ref:i,className:C(Ia({variant:n}),e),...s}));Y.displayName="Badge";const Lt=d.forwardRef(({className:e,...n},s)=>t.jsx("nav",{ref:s,className:C("breadcrumb",e),...n}));Lt.displayName="Breadcrumb";const Ft=d.forwardRef(({className:e,...n},s)=>t.jsx("ol",{ref:s,className:C("breadcrumb-list",e),...n}));Ft.displayName="BreadcrumbList";const ve=d.forwardRef(({className:e,...n},s)=>t.jsx("li",{ref:s,className:C("breadcrumb-item",e),...n}));ve.displayName="BreadcrumbItem";const ye=d.forwardRef(({className:e,type:n="button",...s},i)=>t.jsx("button",{ref:i,type:n,className:C("breadcrumb-button",e),...s}));ye.displayName="BreadcrumbButton";function Ra({children:e}){return t.jsx("span",{className:"breadcrumb-separator","aria-hidden":"true",children:e})}const Pa=Hn,Ma=Jn,za=_n,Ea=Gn,Kt=d.forwardRef(({className:e,...n},s)=>t.jsx(vt,{ref:s,className:C("dialog-overlay",e),...n}));Kt.displayName=vt.displayName;const Vt=d.forwardRef(({className:e,children:n,...s},i)=>t.jsxs(Ma,{children:[t.jsx(Kt,{}),t.jsx(yt,{ref:i,className:C("dialog-content",e),...s,children:n})]}));Vt.displayName=yt.displayName;const qt=d.forwardRef(({className:e,...n},s)=>t.jsx("input",{ref:s,className:C("ui-input",e),...n}));qt.displayName="Input";const ze=d.forwardRef(({className:e,...n},s)=>t.jsx("div",{ref:s,className:C("ui-list",e),...n}));ze.displayName="List";const Ee=d.forwardRef(({className:e,type:n="button",...s},i)=>t.jsx("button",{ref:i,type:n,className:C("ui-list-row",e),...s}));Ee.displayName="ListRow";const Oa=Xn,Ba=Qn,Ta=Yn,Ut=d.forwardRef(({className:e,align:n="start",side:s="right",sideOffset:i=10,...a},r)=>t.jsx(Zn,{children:t.jsx(kt,{ref:r,align:n,side:s,sideOffset:i,className:C("popover-content",e),...a})}));Ut.displayName=kt.displayName;const Jt=es,Oe=d.forwardRef(({className:e,...n},s)=>t.jsx(bt,{ref:s,className:C("tabs-list",e),...n}));Oe.displayName=bt.displayName;const re=d.forwardRef(({className:e,...n},s)=>t.jsx(Nt,{ref:s,className:C("tabs-trigger",e),...n}));re.displayName=Nt.displayName;const oe=d.forwardRef(({className:e,...n},s)=>t.jsx(St,{ref:s,className:C("tabs-content",e),...n}));oe.displayName=St.displayName;const Ht=d.forwardRef(({className:e,...n},s)=>t.jsx("textarea",{ref:s,className:C("ui-textarea",e),...n}));Ht.displayName="Textarea";const Da=220,Wa="(prefers-reduced-motion: reduce)";function Aa(){const[e,n]=d.useState("runtime"),[s,i]=d.useState(),[a,r]=d.useState(),[o,l]=d.useState(!1),[c,p]=d.useState(!0),g=A({queryKey:["runs"],queryFn:rs,refetchInterval:4e3}),u=A({queryKey:["health"],queryFn:is,refetchInterval:5e3}),f=A({queryKey:["config"],queryFn:xs});return d.useEffect(()=>{var j;!s&&((j=g.data)!=null&&j[0])&&i(g.data[0].id)},[g.data,s]),t.jsxs("main",{className:`app-shell ${c?"sidebar-collapsed":""}`,children:[t.jsxs("aside",{className:"sidebar",children:[t.jsxs("div",{className:"sidebar-head",children:[t.jsxs("div",{className:"brand",children:[t.jsx("div",{className:"brand-mark",children:t.jsx(Sn,{size:19})}),t.jsx("div",{className:"brand-copy",children:t.jsx("h1",{children:"Acpus"})})]}),t.jsx(I,{type:"button",variant:"ghost",className:"sidebar-toggle","aria-label":c?"Expand sidebar":"Collapse sidebar",title:c?"Expand sidebar":"Collapse sidebar",onClick:()=>p(j=>!j),children:c?t.jsx(Cn,{size:16}):t.jsx($n,{size:16})})]}),t.jsxs("nav",{className:"nav-list",children:[t.jsx(Ye,{icon:t.jsx(In,{size:17}),label:"Runtime",active:e==="runtime",onClick:()=>n("runtime")}),t.jsx(Ye,{icon:t.jsx(Rn,{size:17}),label:"Workflows",active:e==="workflows",onClick:()=>n("workflows")})]}),t.jsxs(Oa,{open:o,onOpenChange:l,children:[t.jsx(Ba,{asChild:!0,children:t.jsx(Xt,{health:u.data,config:f.data})}),t.jsx(yi,{health:u.data,config:f.data})]})]}),t.jsxs("section",{className:"workspace",children:[e==="runtime"&&t.jsx(La,{runId:s,runs:g.data??[],selectedTarget:a,onSelectRun:j=>{i(j),r(void 0)},onSelectTarget:r}),e==="workflows"&&t.jsx(Ua,{})]})]})}function La({runId:e,runs:n,selectedTarget:s,onSelectRun:i,onSelectTarget:a}){var te,q,U,O;const r=an(),{toasts:o,push:l,dismiss:c}=Ca(),{exiting:p,close:g,layoutState:u}=qa(s,()=>a(void 0)),f=(s==null?void 0:s.kind)==="node"?s.id:void 0,j=(s==null?void 0:s.kind)==="node"?s.context:[],m=(s==null?void 0:s.kind)==="node"?s.displayStatus:void 0,w=A({queryKey:["run-runtime-snapshot",e],queryFn:()=>os(e),enabled:!!e,refetchInterval:b=>{var R;return Yt((R=b.state.data)==null?void 0:R.run.status)?!1:1e3}}),v=A({queryKey:["node-inspection",e,f,j],queryFn:()=>cs(e,f,j),enabled:!!(e&&f),refetchInterval:2500}),k=tt({mutationFn:b=>fs(e,b),onSuccess:async(b,R)=>{l({tone:"success",title:`${Qe(R)} accepted`}),await Promise.all([r.invalidateQueries({queryKey:["run",e]}),r.invalidateQueries({queryKey:["run-runtime-snapshot",e]}),r.invalidateQueries({queryKey:["runs"]})])},onError:(b,R)=>{l({tone:"error",title:`${Qe(R)} failed`,detail:b instanceof Error?b.message:String(b)})}}),$=(te=w.data)==null?void 0:te.run,M=(s==null?void 0:s.kind)==="node"?(q=v.data)==null?void 0:q.signalWaits.find(b=>b.status==="awaiting"):void 0,y=si($),H=y.map(b=>b.value).join("|"),[ee,E]=d.useState();if(d.useEffect(()=>{const b=new Set(y.map(R=>R.value));E(R=>{var h;return R&&b.has(R)?R:(h=y[0])==null?void 0:h.value})},[H]),!e)return t.jsx(tn,{title:"No Run Selected",detail:"Open Runs to choose a durable run."});const D=Fa($,w.error);return t.jsxs("div",{className:"runtime-grid",children:[t.jsxs("header",{className:"topbar",children:[t.jsx("div",{className:"run-titlebar",children:D.kind==="ready"?t.jsxs(t.Fragment,{children:[t.jsx("h2",{children:D.run.name}),t.jsxs("div",{className:"run-meta",children:[t.jsx(Si,{status:D.run.status}),t.jsx("span",{children:e}),D.run.updatedAt&&t.jsx("span",{children:Q(D.run.updatedAt)})]})]}):D.kind==="error"?t.jsx(Va,{message:D.message}):t.jsx(Ka,{})}),t.jsxs("div",{className:"run-header-actions",children:[t.jsx(ni,{runs:n,selectedRunId:e,onSelectRun:i}),t.jsx(ti,{disabled:!$||k.isPending,status:$==null?void 0:$.status,selectedNodeId:f,retryTargets:y,selectedRetryTarget:ee,onSelectRetryTarget:E,onCommand:b=>k.mutate(b)})]})]}),t.jsxs("div",{className:`graph-inspection-layout ${u==="open"?"with-inspector":u==="closing"?"closing-inspector":""}`,children:[t.jsx("section",{className:"graph-panel",children:t.jsx(Wt,{graph:(U=w.data)==null?void 0:U.graph,...f===void 0?{}:{selectedNodeId:f},onSelectNode:(b,R=[],h)=>a(b?{kind:"node",id:b,context:R,...h?{displayStatus:h}:{}}:void 0),onSelectWorkflow:()=>a({kind:"workflow"})})}),s&&t.jsx("div",{className:"inspector-slot",children:t.jsxs(ei,{title:s.kind==="workflow"?"Workflow I/O":((O=v.data)==null?void 0:O.summary.nodeId)??f??"Node",exiting:p,onClose:g,children:[s.kind==="workflow"?t.jsx(Ya,{run:$}):t.jsx(di,{runId:e,target:f,context:j,displayStatus:m,inspection:v.data,loading:v.isLoading}),s.kind==="node"&&M&&t.jsx(vi,{wait:M,onSubmit:b=>k.mutate({type:"signal",target:M.nodeKey,payload:b})})]})})]}),t.jsx($a,{toasts:o,onDismiss:c})]})}function Fa(e,n){return e?{kind:"ready",run:e}:n?{kind:"error",message:n instanceof Error?n.message:String(n)}:{kind:"loading"}}function Ka(){return t.jsxs("div",{className:"run-header-skeleton",role:"status","aria-label":"Loading run details","aria-busy":"true",children:[t.jsx("span",{className:"state-skeleton-line title","aria-hidden":"true"}),t.jsx("span",{className:"state-skeleton-line meta","aria-hidden":"true"})]})}function Va({message:e}){return t.jsxs("div",{className:"run-header-error",role:"alert",children:[t.jsx("strong",{children:"Run details unavailable"}),t.jsx("span",{children:e})]})}function Qe(e){return typeof e.type=="string"?e.type:"command"}function qa(e,n){const[s,i]=d.useState(!1),a=d.useRef(void 0);return d.useEffect(()=>{i(!1),a.current!==void 0&&(window.clearTimeout(a.current),a.current=void 0)},[e]),d.useEffect(()=>()=>{a.current!==void 0&&window.clearTimeout(a.current)},[]),{exiting:s,layoutState:e?s?"closing":"open":"closed",close:()=>{if(!(!e||s)){if(window.matchMedia(Wa).matches){i(!1),n();return}i(!0),a.current=window.setTimeout(()=>{a.current=void 0,i(!1),n()},Da)}}}}function Ua(){var g,u;const[e,n]=d.useState(""),[s,i]=d.useState(),[a,r]=d.useState(),o=A({queryKey:["workflow-catalog"],queryFn:hs}),l=A({queryKey:["workflow-files",e],queryFn:()=>ps(e)}),c=tt({mutationFn:f=>ms(f),onSuccess:f=>{r(f)}}),p=(a==null?void 0:a.status)==="ready"?a.graph:void 0;return t.jsxs("div",{className:"workflow-viz-grid",children:[t.jsxs("section",{className:"table-panel workflow-source-panel",children:[t.jsx(bi,{title:"Workflows",detail:"Static Visualization"}),t.jsx(Ja,{catalog:o.data??[],catalogLoading:o.isLoading,catalogError:o.error,files:((g=l.data)==null?void 0:g.entries)??[],filesLoading:l.isLoading,filesError:l.error,dir:((u=l.data)==null?void 0:u.dir)??e,selected:s,visualizing:c.isPending,visualizeError:c.error,visualizationFailure:(a==null?void 0:a.status)==="failed"?a:void 0,onOpenDir:n,onSelect:f=>{i(f),r(void 0)},onVisualize:()=>s&&c.mutate(s)})]}),p&&(a==null?void 0:a.status)==="ready"?t.jsx(ja,{data:a}):t.jsx("section",{className:"graph-panel",children:t.jsx(tn,{title:"No Workflow Visualized",detail:"Choose a catalog entry or workspace workflow file, then click Visualize."})})]})}function Ja({catalog:e,catalogLoading:n,catalogError:s,files:i,filesLoading:a,filesError:r,dir:o,selected:l,visualizing:c,visualizeError:p,visualizationFailure:g,onOpenDir:u,onSelect:f,onVisualize:j}){const[m,w]=d.useState("catalog"),v=Za(l);return t.jsxs("div",{className:"workflow-picker",children:[t.jsxs(Jt,{value:m,onValueChange:k=>w(k),className:"workflow-picker-tabs",children:[t.jsxs(Oe,{className:"workflow-picker-tabs-list","aria-label":"Workflow source type",children:[t.jsx(re,{value:"catalog",children:"Catalog"}),t.jsx(re,{value:"files",children:"Files"})]}),t.jsx(oe,{value:"catalog",className:"workflow-picker-tab-panel",children:t.jsx(Ha,{entries:e,loading:n,error:s,selected:l,onSelect:f})}),t.jsx(oe,{value:"files",className:"workflow-picker-tab-panel",children:t.jsx(_a,{entries:i,loading:a,error:r,dir:o,selected:l,onOpenDir:u,onSelect:f})})]}),t.jsxs("div",{className:"workflow-picker-footer",children:[t.jsxs("div",{className:`workflow-selected-source ${l?"selected":""}`,children:[t.jsx("span",{children:"Selected source"}),t.jsx("strong",{children:v.title}),v.detail&&t.jsx("small",{children:v.detail})]}),t.jsx(I,{variant:"default",className:"primary-button",disabled:!l||c,onClick:j,children:c?"Visualizing...":"Visualize"}),p?t.jsx(N,{tone:"error",title:"Visualization failed",detail:p instanceof Error?p.message:String(p)}):null,g&&t.jsx(N,{tone:"error",title:`${g.phase} failed`,detail:g.message})]})]})}function Ha({entries:e,loading:n,error:s,selected:i,onSelect:a}){return n?t.jsx(N,{tone:"loading",title:"Loading catalog"}):s?t.jsx(N,{tone:"error",title:"Catalog unavailable",detail:s instanceof Error?s.message:String(s)}):e.length===0?t.jsx(N,{tone:"empty",title:"No catalog workflows",detail:"Use Files to choose a workflow module from this workspace."}):t.jsx(ze,{className:"workflow-source-table","aria-label":"Project catalog workflows",children:e.map(r=>{const o=(i==null?void 0:i.kind)==="catalog"&&i.name===r.name;return t.jsxs(Ee,{className:`workflow-list-row catalog ${o?"selected":""}`,"aria-pressed":o,onClick:()=>a({kind:"catalog",name:r.name}),children:[t.jsx(En,{size:15}),t.jsxs("span",{className:"workflow-row-main",children:[t.jsx("strong",{children:r.name}),t.jsx("small",{children:Qa(r.entryPath)})]}),t.jsx(Y,{className:"workflow-row-badge",children:"project"})]},r.name)})})}function _a({entries:e,loading:n,error:s,dir:i,selected:a,onOpenDir:r,onSelect:o}){const[l,c]=d.useState(""),p=l.trim().toLowerCase(),g=p?e.filter(u=>`${u.name} ${u.path}`.toLowerCase().includes(p)):e;return t.jsxs("div",{className:"workflow-file-selector",children:[t.jsxs("div",{className:"workflow-file-toolbar",children:[t.jsx(Ga,{dir:i,onOpenDir:r}),t.jsxs("label",{className:"workflow-filter",children:[t.jsx(On,{size:14,"aria-hidden":"true"}),t.jsx(qt,{value:l,onChange:u=>c(u.currentTarget.value),placeholder:"Filter current directory","aria-label":"Filter current directory"})]})]}),n?t.jsx(N,{tone:"loading",title:"Loading workspace files"}):s?t.jsx(N,{tone:"error",title:"Files unavailable",detail:s instanceof Error?s.message:String(s)}):g.length===0?t.jsx(N,{tone:"empty",title:"No workflow files here",detail:l?"Clear the filter or open another directory.":"Open a directory that contains .workflow.ts or .workflow.tsx files."}):t.jsx(ze,{className:"workflow-source-table","aria-label":"Workspace workflow files",children:g.map(u=>{const f=(a==null?void 0:a.kind)==="file"&&a.path===u.path,j=u.kind==="directory";return t.jsxs(Ee,{className:`workflow-list-row file ${j?"directory":"workflow"} ${f?"selected":""}`,"aria-pressed":f,onClick:()=>j?r(u.path):o({kind:"file",path:u.path}),children:[j?t.jsx(Bn,{size:15}):t.jsx(Tn,{size:15}),t.jsxs("span",{className:"workflow-row-main",children:[t.jsx("strong",{children:u.name}),t.jsx("small",{children:u.path})]}),t.jsx(Y,{className:"workflow-row-badge",children:j?"directory":"workflow"}),j&&t.jsx(mt,{size:14,className:"workflow-row-chevron","aria-hidden":"true"})]},`${u.kind}:${u.path}`)})})]})}function Ga({dir:e,onOpenDir:n}){const s=e.split("/").filter(Boolean),i=s.map((a,r)=>s.slice(0,r+1).join("/"));return t.jsx(Lt,{"aria-label":"Workspace path",className:"workflow-breadcrumb",children:t.jsxs(Ft,{children:[t.jsx(ve,{children:t.jsx(ye,{"aria-current":e.length===0?"page":void 0,onClick:()=>n(""),children:"Workspace"})}),s.map((a,r)=>{const o=i[r];return t.jsxs(d.Fragment,{children:[t.jsx(Ra,{children:t.jsx(mt,{size:13})}),t.jsx(ve,{children:t.jsx(ye,{"aria-current":o===e?"page":void 0,onClick:()=>n(o),children:a})})]},o)})]})})}function Za(e){return e?e.kind==="catalog"?{title:e.name,detail:"Project catalog entry"}:{title:Xa(e.path),detail:e.path}:{title:"None selected",detail:"Choose from Catalog or Files."}}function Xa(e){return e.split("/").filter(Boolean).at(-1)??e}function Qa(e){const n="/.acpus/workflows/",s=e.indexOf(n);if(s>=0)return`.acpus/workflows/${e.slice(s+n.length)}`;const i="/packages/",a=e.indexOf(i);return a>=0?`packages/${e.slice(a+i.length)}`:e}function Ya({run:e}){var i;if(!e)return t.jsx(N,{tone:"loading",title:"Loading workflow I/O"});const n=e.output!==void 0,s=Yt(e.status);return t.jsxs("div",{className:"inspector-stack",children:[t.jsxs(B,{title:"Workflow",children:[t.jsx(S,{label:"Name",value:e.name}),t.jsx(S,{label:"Run ID",value:e.id}),t.jsx(S,{label:"Status",value:V(z(e.status))}),((i=e.dynamic)==null?void 0:i.version)!==void 0&&t.jsx(S,{label:"Runtime version",value:String(e.dynamic.version)}),t.jsx(S,{label:"Started",value:Q(e.createdAt)}),t.jsx(S,{label:"Updated",value:Q(e.updatedAt)}),t.jsx(S,{label:"Duration",value:fe($i(e.createdAt,e.updatedAt))})]}),t.jsx(G,{title:"Input",value:e.input}),n?t.jsx(G,{title:"Output",value:e.output}):t.jsx(B,{title:"Output",children:t.jsx(N,{tone:"empty",title:s?"No workflow output recorded":"Output pending",detail:s?"The run reached a terminal state without a workflow output value.":"Workflow output is available after the run completes."})})]})}function ei({title:e,exiting:n=!1,onClose:s,children:i}){return d.useEffect(()=>{const a=r=>{r.key==="Escape"&&s()};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[s]),t.jsx(Me,{asChild:!0,className:`inspector-card ${n?"exiting":""}`,children:t.jsxs("aside",{role:"dialog","aria-label":e,children:[t.jsxs("div",{className:"inspector-card-head",children:[t.jsxs("div",{children:[t.jsx("span",{children:"Inspector"}),t.jsx("strong",{children:e})]}),t.jsx(I,{variant:"ghost",className:"close-button",onClick:s,"aria-label":"Close inspector",children:t.jsx(L,{size:16})})]}),t.jsx("div",{className:"inspector-card-body",children:i})]})})}function ti({disabled:e,status:n,selectedNodeId:s,retryTargets:i,selectedRetryTarget:a,onSelectRetryTarget:r,onCommand:o}){var f,j;const l=ai(n,e,i),c=ii(i,a),[p,g]=d.useState(),u=(f=i.find(m=>m.value===c))==null?void 0:f.label;return t.jsxs("div",{className:"control-strip",children:[i.length>1&&l.some(m=>m.id==="retry")&&t.jsxs(Re,{value:a??((j=i[0])==null?void 0:j.value)??"",disabled:e,onValueChange:r,children:[t.jsx(le,{className:"retry-target-select","aria-label":"Retry target",title:"Retry target",children:t.jsx(Pe,{placeholder:"Retry target"})}),t.jsx(de,{children:i.map(m=>t.jsx(ue,{value:m.value,children:m.label},m.value))})]}),l.map(m=>{const w=ri(m.id,c,s),v=m.id==="retry"&&!w;return t.jsx(ki,{label:m.label,title:m.title,tone:m.tone,icon:ci(m.id),disabled:m.disabled||v,onClick:()=>{w&&g({control:m,command:w,targetLabel:m.id==="retry"?u:s,restoreFocus:document.activeElement instanceof HTMLElement?document.activeElement:void 0})}},m.id)}),p&&t.jsx(li,{confirmation:oi(p.control.id,p.targetLabel),restoreFocus:p.restoreFocus,onCancel:()=>g(void 0),onConfirm:()=>{o(p.command),g(void 0)}})]})}function ni({runs:e,selectedRunId:n,onSelectRun:s}){return t.jsxs("label",{className:"run-select-wrap",children:[t.jsx("span",{children:"Run"}),t.jsxs(Re,{...n?{value:n}:{},disabled:e.length===0,onValueChange:s,children:[t.jsx(le,{className:"run-select","aria-label":"Select run",children:t.jsx(Pe,{placeholder:"No runs"})}),t.jsx(de,{children:e.map(i=>t.jsxs(ue,{value:i.id,children:[i.name," · ",V(z(i.status))]},i.id))})]})]})}function si(e){var i,a,r;const n=new Map,s=o=>{o.value.length>0&&!n.has(o.value)&&n.set(o.value,o)};for(const o of((i=e==null?void 0:e.dynamic)==null?void 0:i.frames)??[])o.status==="failed"&&(o.frameKind!==void 0&&o.frameKind!=="node"&&o.frameKind!=="loop"||s({value:o.frameKey,label:o.nodeId?`frame: ${o.nodeId}`:`frame: ${o.frameKey}`,kind:"frame"}));for(const o of((a=e==null?void 0:e.dynamic)==null?void 0:a.nodeInstances)??[])o.status==="failed"&&s({value:o.nodeKey,label:`node: ${o.nodeId}`,kind:"node"});for(const o of((r=e==null?void 0:e.dynamic)==null?void 0:r.groupMembers)??[])o.status==="failed"&&s({value:o.memberKey,label:`member: ${o.branchId??o.itemKey??o.memberKey}`,kind:"member"});return[...n.values()].sort((o,l)=>o.value.localeCompare(l.value))}function ai(e,n,s=[]){return e==="failed"?[{id:"retry",label:"Retry",tone:"retry",disabled:n||s.length===0,title:s.length===0?"No failed retry target found. Use CLI for run-level retry.":"Retry failed target"}]:e==="paused"?[J("resume",n),J("cancel",n)]:e==="pending"||e==="running"||e==="awaiting"?[J("pause",n),J("cancel",n)]:[J("pause",!0),J("cancel",!0)]}function ii(e,n){return e.length===1?e[0].value:e.some(s=>s.value===n)?n:void 0}function ri(e,n,s){return e==="retry"?n?{type:"retry",target:n}:void 0:e==="cancel"?s?{type:"cancel",target:s}:{type:"cancel"}:{type:e}}function oi(e,n){return e==="cancel"?{title:n?"Cancel selected target?":"Cancel this run?",detail:n?`Cancel target ${n}. This cannot be undone.`:"Cancel the current run. This cannot be undone.",confirmLabel:"Cancel",tone:"cancel"}:e==="retry"?{title:"Retry failed target?",detail:n?`Retry ${n}. The selected failed target will be re-driven.`:"Retry the selected failed target.",confirmLabel:"Retry",tone:"retry"}:e==="resume"?{title:"Resume this run?",detail:"Resume the paused run and continue eligible work.",confirmLabel:"Resume",tone:"resume"}:{title:"Pause this run?",detail:"Pause the run and stop active work as soon as the runtime can safely do so.",confirmLabel:"Pause",tone:"pause"}}function J(e,n){return{id:e,label:e[0].toUpperCase()+e.slice(1),tone:e,disabled:n,title:e[0].toUpperCase()+e.slice(1)}}function ci(e){return e==="pause"?t.jsx(pt,{size:16}):e==="resume"?t.jsx(Pn,{size:16}):e==="retry"?t.jsx(Mn,{size:16}):t.jsx(zn,{size:16})}function li({confirmation:e,restoreFocus:n,onCancel:s,onConfirm:i}){return t.jsx(Pa,{open:!0,onOpenChange:a=>{a||s()},children:t.jsxs(Vt,{className:`confirm-dialog ${e.tone}`,onCloseAutoFocus:a=>{a.preventDefault(),n==null||n.focus()},children:[t.jsx(za,{children:e.title}),t.jsx(Ea,{children:e.detail}),t.jsxs("div",{className:"confirm-actions",children:[t.jsx(I,{type:"button",variant:"confirmSecondary",onClick:s,children:"Back"}),t.jsx(I,{type:"button",variant:"confirmPrimary",tone:e.tone,onClick:i,children:e.confirmLabel})]})]})})}function di({runId:e,target:n,context:s,displayStatus:i,inspection:a,loading:r}){const[o,l]=d.useState("overview");if(d.useEffect(()=>{l("overview")},[n]),d.useEffect(()=>{const f=((a==null?void 0:a.summary.artifacts.length)??0)>0,j=(a==null?void 0:a.summary.staticKind)==="agent";(o==="artifacts"&&!f||o==="execution"&&!j)&&l("overview")},[o,a==null?void 0:a.summary.artifacts.length,a==null?void 0:a.summary.staticKind]),r)return t.jsx(N,{tone:"loading",title:"Loading node details"});if(!a)return t.jsx(N,{tone:"empty",title:"Select a graph node",detail:"Node runtime details appear here after selection."});const c=a.summary,p=i??z(c.nodeStatus??c.runStatus),g=c.artifacts.length>0,u=c.staticKind==="agent";return t.jsxs("div",{className:"inspector-stack",children:[t.jsxs("div",{className:"inspector-runtime-head",children:[t.jsx(Ni,{status:p}),t.jsxs("div",{children:[c.runStartedAt&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"Start"}),t.jsx("strong",{children:Q(c.runStartedAt)})]}),c.runDurationMs!==void 0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"Duration"}),t.jsx("strong",{children:fe(c.runDurationMs)})]})]})]}),t.jsxs(Jt,{value:o,onValueChange:f=>l(f),children:[t.jsxs(Oe,{className:"inspector-tabs","aria-label":"Inspector sections",children:[t.jsx(me,{id:"overview",children:"Overview"}),g&&t.jsxs(me,{id:"artifacts",children:["Artifacts ",t.jsx(Y,{variant:"tabCount",children:c.artifacts.length})]}),u&&t.jsx(me,{id:"execution",children:"Execution"})]}),t.jsx(xe,{id:"overview",children:t.jsxs(t.Fragment,{children:[t.jsxs(B,{title:"Identity",children:[c.nodeId&&t.jsx(S,{label:"Node ID",value:c.nodeId}),c.nodeKey&&t.jsx(S,{label:"Node Key",value:c.nodeKey}),c.frameKey&&t.jsx(S,{label:"Frame Key",value:c.frameKey}),c.staticKind&&t.jsx(S,{label:"Kind",value:c.staticKind}),c.staticOrder!==void 0&&t.jsx(S,{label:"Static order",value:String(c.staticOrder)}),t.jsx(S,{label:"Runtime",value:p}),c.latestAttempt&&t.jsx(S,{label:"Latest attempt",value:`${c.latestAttempt.attemptNo} · ${c.latestAttempt.status}`})]}),c.input&&t.jsx(G,{title:c.input.kind==="runtime"?"Input":"Authored Input",value:c.input.value}),c.prompt&&t.jsx(B,{title:"Prompt",children:t.jsx(fi,{runId:e,prompt:c.prompt})}),c.output!==void 0&&t.jsx(G,{title:"Output",value:c.output}),c.error!==void 0&&t.jsx(G,{title:"Diagnostics",value:c.error})]})}),g&&t.jsx(xe,{id:"artifacts",children:t.jsx(hi,{runId:e,artifacts:c.artifacts})}),u&&t.jsx(xe,{id:"execution",children:e&&n&&t.jsx(pi,{runId:e,target:n,context:s,active:o==="execution"})})]})]})}function me({id:e,children:n}){return t.jsx(re,{value:e,id:`inspector-tab-${e}`,className:"inspector-tab","aria-controls":`inspector-panel-${e}`,children:n})}function xe({id:e,children:n}){return t.jsx(oe,{value:e,id:`inspector-panel-${e}`,className:"inspector-tab-panel","aria-labelledby":`inspector-tab-${e}`,children:n})}function B({title:e,action:n,children:s}){return t.jsxs("section",{className:"inspector-section",children:[t.jsxs("div",{className:"inspector-section-head",children:[t.jsx("h3",{children:e}),n]}),t.jsx("div",{className:"inspector-section-body",children:s})]})}function G({title:e,value:n}){return t.jsx(B,{title:e,action:t.jsx(ui,{value:n}),children:t.jsx(Gt,{value:n})})}function ui({value:e}){const[n,s]=d.useState("idle");return t.jsxs(I,{type:"button",variant:"ghost",className:`json-copy-button ${n}`,onClick:async()=>{try{await navigator.clipboard.writeText(JSON.stringify(e,null,2)),s("copied"),window.setTimeout(()=>s("idle"),1400)}catch{s("failed"),window.setTimeout(()=>s("idle"),1800)}},children:[t.jsx(ut,{size:13}),n==="copied"?"Copied":n==="failed"?"Copy failed":"Copy JSON"]})}function fi({runId:e,prompt:n}){return n.text?t.jsx(Zt,{value:n.text}):!e||!n.artifactId?t.jsx(N,{tone:"empty",title:"Prompt unavailable",detail:"No prompt artifact or inline prompt was recorded for this scope."}):t.jsx(_t,{runId:e,artifactId:n.artifactId,...n.mediaType?{mediaType:n.mediaType}:{}})}function hi({runId:e,artifacts:n}){const[s,i]=d.useState(),a=n.find(r=>r.id===s);return t.jsxs("div",{className:"artifact-stack",children:[t.jsx("div",{className:"artifact-list",children:n.map(r=>t.jsxs(I,{variant:"ghost",className:`artifact-row ${r.id===s?"selected":""}`,title:r.relativePath,"aria-label":`Artifact ${r.relativePath}`,onClick:()=>i(o=>o===r.id?void 0:r.id),children:[t.jsx("span",{className:"artifact-title mono",title:r.relativePath,children:r.relativePath}),t.jsx("span",{children:r.mediaType??"unknown"}),t.jsx("span",{children:Ii(r.size)})]},r.id))}),e&&a&&t.jsx(_t,{runId:e,artifactId:a.id,...a.mediaType?{mediaType:a.mediaType}:{}})]})}function _t({runId:e,artifactId:n,mediaType:s}){const i=A({queryKey:["artifact-preview",e,n],queryFn:()=>us(e,n)});if(i.isLoading)return t.jsx(N,{tone:"loading",title:"Loading artifact"});if(i.error)return t.jsx(N,{tone:"error",title:"Artifact preview failed",detail:i.error instanceof Error?i.error.message:String(i.error)});const a=i.data;if(!a)return null;const r=s??a.mediaType;if(Ri(r)){const o=zi(a.text);return o.ok?t.jsx("div",{className:"json-standalone",children:t.jsx(Gt,{value:o.value})}):t.jsx(ke,{value:a.text,label:"Raw JSON text"})}return Pi(r)?t.jsx(Zt,{value:a.text}):Mi(r)?t.jsx(ke,{value:a.text}):t.jsx(N,{tone:"empty",title:"Preview unavailable",detail:`Preview is not available for ${r}.`})}function pi({runId:e,target:n,context:s,active:i}){const a=A({queryKey:["node-execution",e,n,s],queryFn:()=>ls(e,n,s),enabled:i,refetchInterval:i?2500:!1});if(a.isLoading)return t.jsx(N,{tone:"loading",title:"Loading execution telemetry"});if(a.error)return t.jsx(N,{tone:"error",title:"Execution telemetry failed",detail:a.error instanceof Error?a.error.message:String(a.error)});if(!a.data)return t.jsx(N,{tone:"empty",title:"No execution telemetry",detail:"No agent execution metadata exists for the selected scope."});const r=a.data;return r.available?t.jsxs("div",{className:"inspector-stack",children:[t.jsxs(B,{title:"Summary",children:[r.summary.status&&t.jsx(S,{label:"Status",value:r.summary.status}),r.lastActiveAt&&t.jsx(S,{label:"Last active",value:Ci(r.lastActiveAt)}),r.summary.sessionName&&t.jsx(S,{label:"Session",value:r.summary.sessionName}),r.summary.turnCount!==void 0&&t.jsx(S,{label:"Turns",value:String(r.summary.turnCount)}),r.summary.message&&t.jsx(S,{label:"Message",value:r.summary.message})]}),t.jsx(B,{title:"Context Window",children:r.contextWindow?t.jsx(mi,{context:r.contextWindow}):t.jsx(N,{tone:"empty",title:"No context window data",detail:"The selected agent attempt did not report context usage."})}),t.jsx(B,{title:"Token Usage",children:r.tokenUsage?t.jsx(xi,{usage:r.tokenUsage}):t.jsx(N,{tone:"empty",title:"No token usage",detail:"The selected agent attempt did not report token usage."})}),t.jsx(B,{title:"Output Stream",children:r.output?t.jsx(ke,{value:r.output.tail,label:ji(r.output)}):t.jsx(N,{tone:"empty",title:"No streamed output",detail:"The selected agent attempt did not report streamed output."})}),t.jsx(B,{title:"Last Tool Calls",children:r.lastToolCalls.length>0?t.jsx(gi,{calls:r.lastToolCalls,total:r.toolCallCount}):t.jsx(N,{tone:"empty",title:"No tool calls",detail:"No tool calls were recorded for the selected agent attempt."})})]}):t.jsx(N,{tone:"empty",title:"No execution telemetry",detail:r.reason??"No agent execution metadata exists for the selected scope."})}function mi({context:e}){const n=Math.max(0,Math.min(e.percent??0,100));return t.jsxs("div",{className:"execution-card",children:[t.jsxs("div",{className:"execution-meter-head",children:[t.jsxs("strong",{children:[e.used??"?"," / ",e.size??"?"]}),e.percent!==void 0&&t.jsxs("span",{children:[e.percent,"%"]})]}),t.jsx("div",{className:"execution-meter","aria-label":`Context window ${e.percent??0}% used`,children:t.jsx("span",{style:{width:`${n}%`}})}),e.updatedAt&&t.jsxs("small",{children:["Updated ",Q(e.updatedAt)]})]})}function xi({usage:e}){return t.jsxs("div",{className:"execution-metrics",children:[t.jsx(ae,{label:"Input",value:e.inputTokens}),t.jsx(ae,{label:"Output",value:e.outputTokens}),t.jsx(ae,{label:"Total",value:e.totalTokens}),e.source&&t.jsx(ae,{label:"Source",value:e.source})]})}function ji(e){const n=new TextEncoder().encode(e.tail).length;return e.truncated?`Last ${n} of ${e.totalBytes} bytes`:`${e.totalBytes} bytes`}function ae({label:e,value:n}){return t.jsxs("div",{className:"execution-metric",children:[t.jsx("span",{children:e}),t.jsx("strong",{children:n??"n/a"})]})}function gi({calls:e,total:n}){return t.jsxs("div",{className:"tool-call-stack",children:[n!==void 0&&t.jsxs("span",{className:"tool-call-summary",children:["Last ",e.length," of ",n]}),e.map((s,i)=>t.jsxs("div",{className:"tool-call-row",children:[t.jsxs("div",{className:"tool-call-head",children:[t.jsxs("div",{children:[t.jsx("strong",{children:s.toolName??"Tool call"}),t.jsxs("span",{children:["turn ",s.turn,s.durationMs!==void 0?` · ${fe(s.durationMs)}`:""]})]}),s.status&&t.jsx(wi,{status:s.status})]}),s.inputPreview&&t.jsx("p",{children:s.inputPreview}),s.outputPreview&&t.jsx("p",{children:s.outputPreview})]},`${s.turn}-${s.toolCallId??i}`))]})}function wi({status:e}){const n=z(e);return t.jsxs("span",{className:`tool-call-status ${n}`,children:[en(n),t.jsx("span",{children:V(n)})]})}function Gt({value:e}){return t.jsx("div",{className:"json-viewer",children:t.jsx(nt,{data:Ei(e),shouldExpandNode:at,style:st})})}function Zt({value:e}){return t.jsx("div",{className:"markdown-viewer",children:t.jsx(ss,{remarkPlugins:[as],children:e})})}function ke({value:e,label:n}){return t.jsxs("div",{className:"text-artifact-shell",children:[n&&t.jsx("div",{className:"artifact-preview-label",children:n}),t.jsx("pre",{className:"text-artifact-preview",children:e})]})}function vi({wait:e,onSubmit:n}){const[s,i]=d.useState("{}"),[a,r]=d.useState();return t.jsxs("form",{className:"signal-box",onSubmit:o=>{o.preventDefault();try{n(JSON.parse(s)),r(void 0)}catch{r("Signal payload must be valid JSON.")}},children:[t.jsx("strong",{children:"Awaiting Signal"}),e.renderedPrompt&&t.jsx("p",{children:e.renderedPrompt}),t.jsx(Ht,{value:s,"aria-label":"Signal payload JSON","aria-invalid":a?!0:void 0,"aria-describedby":a?"signal-payload-error":void 0,onChange:o=>{i(o.target.value),a&&r(void 0)}}),a&&t.jsx("p",{id:"signal-payload-error",className:"signal-error",role:"alert",children:a}),t.jsx(I,{className:"primary-button",type:"submit",children:"Submit Signal"})]})}function yi({health:e,config:n}){const s=e==null?void 0:e.checks.find(r=>r.area==="daemon"),i=(e==null?void 0:e.checks.filter(r=>r.area!=="daemon"&&r.status!=="ok"))??[],a=(s==null?void 0:s.status)??(e?"unknown":"checking");return t.jsxs(Ut,{className:"status-info-popover",role:"dialog","aria-labelledby":"status-info-title",children:[t.jsxs("div",{className:"dialog-head",children:[t.jsxs("div",{className:"status-info-title",children:[t.jsx("span",{className:`sidebar-status-icon ${a}`,"aria-hidden":"true",children:Qt(a)}),t.jsx("h2",{id:"status-info-title",children:"Runtime status"})]}),t.jsx(Ta,{asChild:!0,children:t.jsx(I,{variant:"ghost",className:"close-button","aria-label":"Close",children:t.jsx(L,{size:16})})})]}),t.jsxs("div",{className:"status-info-rows",children:[t.jsx(S,{label:"Daemon",value:s!=null&&s.message?`${s.status}: ${s.message}`:a}),t.jsx(S,{label:"Access",value:(n==null?void 0:n.access)==="token"?"Token":"Open"}),t.jsx(S,{label:"Workspace",value:(n==null?void 0:n.cwd)??"Resolving"}),t.jsx("div",{className:"status-health-summary",children:e?i.length===0?t.jsx("span",{children:"Health checks OK"}):i.map(r=>t.jsxs("span",{children:[r.status==="warn"?t.jsx(Ne,{size:14}):t.jsx(L,{size:14}),t.jsx("strong",{children:r.area}),r.message]},`${r.area}-${r.message}`)):t.jsx("span",{children:"Checking runtime health"})})]})]})}const Xt=d.forwardRef(({health:e,config:n,...s},i)=>{const a=e==null?void 0:e.checks.find(o=>o.area==="daemon"),r=(a==null?void 0:a.status)??(e?"unknown":"checking");return t.jsxs(I,{ref:i,type:"button",variant:"ghost",className:"sidebar-status",title:"Runtime status",...s,children:[t.jsx("span",{className:`sidebar-status-icon ${r}`,"aria-hidden":"true",children:Qt(r)}),t.jsxs("span",{className:"sidebar-status-copy",children:[t.jsx("span",{children:"Runtime status"}),t.jsxs("small",{children:[r," · ",(n==null?void 0:n.access)==="token"?"token":"open"]})]})]})});Xt.displayName="SidebarStatus";function Qt(e){return e==="ok"||e==="running"?t.jsx(be,{size:14,strokeWidth:2}):e==="warn"?t.jsx(Ne,{size:14,strokeWidth:2}):e==="fail"||e==="error"?t.jsx(L,{size:14,strokeWidth:2}):e==="checking"?t.jsx(ce,{size:14,strokeWidth:2}):t.jsx(ft,{size:14,strokeWidth:2})}function Ye({icon:e,label:n,active:s,onClick:i}){return t.jsxs(I,{variant:"ghost",className:`nav-button ${s?"active":""}`,"aria-label":n,"aria-current":s?"page":void 0,onClick:i,children:[e,t.jsx("span",{children:n})]})}function ki({icon:e,label:n,title:s,disabled:i,tone:a,onClick:r}){return t.jsxs(I,{variant:"icon",tone:a,disabled:i,onClick:r,title:s,children:[e,t.jsx("span",{children:n})]})}function bi({title:e,detail:n}){return t.jsxs("header",{className:"page-header",children:[t.jsx("h2",{children:e}),t.jsx("span",{className:"page-header-detail",children:n})]})}function Ni({status:e}){return t.jsx(Y,{variant:"status",className:e,children:e})}function Si({status:e}){const n=z(e),s=n==="running"||n==="awaiting";return t.jsxs("span",{className:`run-status-indicator ${n} ${s?"live":""}`,"aria-label":`Run status ${V(n)}`,children:[t.jsx("span",{className:"run-status-icon",children:en(n)}),t.jsx("span",{className:"run-status-label",children:V(n)})]})}function Yt(e){const n=z(e);return n==="completed"||n==="failed"||n==="canceled"}function en(e){return e==="running"?t.jsx(ce,{size:13,strokeWidth:2}):e==="awaiting"?t.jsx(ot,{size:13,strokeWidth:2}):e==="paused"?t.jsx(pt,{size:13,strokeWidth:2}):e==="completed"?t.jsx(be,{size:13,strokeWidth:2}):e==="failed"?t.jsx(L,{size:13,strokeWidth:2}):e==="canceled"?t.jsx(lt,{size:13,strokeWidth:2}):t.jsx(ft,{size:13,strokeWidth:2})}function S({label:e,value:n}){return t.jsxs("div",{className:"key-value",tabIndex:0,title:`${e}: ${n}`,"aria-label":`${e}: ${n}`,children:[t.jsx("span",{children:e}),t.jsx("strong",{children:n})]})}function tn({title:e,detail:n}){return t.jsxs("div",{className:"empty-state",children:[t.jsx(ht,{size:22}),t.jsx("h2",{children:e}),t.jsx("p",{children:n})]})}function N({tone:e,title:n,detail:s}){const i=e==="loading"?t.jsx(ce,{size:16}):e==="error"?t.jsx(Ne,{size:16}):t.jsx(ht,{size:16});return t.jsxs(At,{className:`state-block ${e}`,role:e==="error"?"alert":e==="loading"?"status":void 0,"aria-busy":e==="loading"?!0:void 0,children:[t.jsx("span",{className:"state-block-icon",children:i}),t.jsxs("div",{children:[t.jsx("strong",{children:n}),s&&t.jsx("p",{children:s}),e==="loading"&&t.jsxs("div",{className:"state-skeleton","aria-hidden":"true",children:[t.jsx("span",{className:"state-skeleton-line"}),t.jsx("span",{className:"state-skeleton-line short"})]})]})]})}function Q(e){const n=new Date(e);if(Number.isNaN(n.getTime()))return e;const s=i=>String(i).padStart(2,"0");return`${n.getFullYear()}/${s(n.getMonth()+1)}/${s(n.getDate())} ${s(n.getHours())}:${s(n.getMinutes())}`}function Ci(e){const n=Date.parse(e);if(!Number.isFinite(n))return e;const s=Math.max(0,Date.now()-n);return s<1e3?"<1s ago":`${fe(s)} ago`}function $i(e,n){return Math.max(0,Date.parse(n)-Date.parse(e))}function fe(e){if(e<1e3)return`${e}ms`;const n=Math.round(e/1e3);if(n<60)return`${n}s`;const s=Math.floor(n/60),i=n%60;return i===0?`${s}m`:`${s}m ${i}s`}function Ii(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Ri(e){return e.includes("json")||e.includes("ndjson")}function Pi(e){return e.includes("markdown")||e.includes("md")}function Mi(e){return e.startsWith("text/")||e.includes("xml")||e.includes("yaml")}function zi(e){try{return{ok:!0,value:JSON.parse(e)}}catch{const n=e.split(`
2
+ `).filter(Boolean);if(n.length===0)return{ok:!1};const s=[];for(const i of n)try{s.push(JSON.parse(i))}catch{return{ok:!1}}return{ok:!0,value:s}}}function Ei(e){return e!==null&&typeof e=="object"?e:{value:e}}const et=document.getElementById("root"),Oi=new rn({defaultOptions:{queries:{staleTime:2e3,retry:1}}});et&&sn.createRoot(et).render(t.jsx(on,{client:Oi,children:t.jsx(Aa,{})}));