@pushpalsdev/cli 1.0.60 → 1.0.62
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/monitor-ui/+not-found.html +1 -1
- package/monitor-ui/_expo/static/js/web/{entry-5fe4b1b2c73e657048674b0a7f392de9.js → entry-d69cc703f72afa383e4108efd6e0f726.js} +2 -2
- package/monitor-ui/_sitemap.html +1 -1
- package/monitor-ui/index.html +1 -1
- package/monitor-ui/modal.html +1 -1
- package/package.json +1 -1
- package/runtime/prompts/workerpals/openai_codex_command_router_policy.md +10 -0
- package/runtime/sandbox/apps/workerpals/src/backends/openai_codex/openai_codex_executor.py +62 -14
- package/runtime/sandbox/apps/workerpals/src/backends/openai_codex/test_openai_codex_runtime_config.py +11 -1
- package/runtime/sandbox/apps/workerpals/src/common/types.ts +10 -0
- package/runtime/sandbox/apps/workerpals/src/docker_executor.ts +18 -4
- package/runtime/sandbox/apps/workerpals/src/execute_job.ts +107 -15
- package/runtime/sandbox/apps/workerpals/src/job_runner.ts +19 -2
- package/runtime/sandbox/apps/workerpals/src/workerpals_main.ts +26 -1
- package/runtime/sandbox/prompts/workerpals/openai_codex_command_router_policy.md +10 -0
|
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
435
435
|
@keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
|
|
436
436
|
@keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
|
|
437
437
|
@keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
|
|
438
|
-
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-
|
|
438
|
+
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-d69cc703f72afa383e4108efd6e0f726.js" defer></script>
|
|
439
439
|
</body></html>
|
|
@@ -1022,11 +1022,11 @@ __d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e
|
|
|
1022
1022
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.ChatComposer=function(e){const l=(0,t.c)(50),{theme:f,input:x,setInput:y,connected:S,onSend:C,onComposerKeyPress:P}=e;let j;l[0]!==y?(j=e=>{y(t=>{const n=String(t??"").trim();return n?n.toLowerCase().includes(e.toLowerCase())?t:`${n}\n\n${e}`:e})},l[0]=y,l[1]=j):j=l[1];const k=j;let z,H,v,F,M,L;l[2]!==k||l[3]!==f.border||l[4]!==f.fontSans||l[5]!==f.panelAlt||l[6]!==f.textMuted?(z=b.map(e=>(0,p.jsx)(n.default,{style:[h.quickPromptChip,{borderColor:f.border,backgroundColor:f.panelAlt}],onPress:()=>k(e.text),accessibilityRole:"button",accessibilityLabel:`Apply ${e.label} prompt template`,accessibilityHint:"Adds this template text into the composer.",children:(0,p.jsx)(s.default,{style:[h.quickPromptLabel,{color:f.textMuted,fontFamily:f.fontSans}],children:e.label})},e.label)),l[2]=k,l[3]=f.border,l[4]=f.fontSans,l[5]=f.panelAlt,l[6]=f.textMuted,l[7]=z):z=l[7];l[8]!==z?(H=(0,p.jsx)(u.default,{style:h.quickPromptContainer,children:(0,p.jsx)(o.default,{horizontal:!0,showsHorizontalScrollIndicator:!1,children:z})}),l[8]=z,l[9]=H):H=l[9];l[10]!==f.border||l[11]!==f.panel?(v=[h.composer,{borderColor:f.border,backgroundColor:f.panel}],l[10]=f.border,l[11]=f.panel,l[12]=v):v=l[12];l[13]!==f.border||l[14]!==f.fontSans||l[15]!==f.inputBg||l[16]!==f.text?(F=[h.composerInput,{color:f.text,borderColor:f.border,backgroundColor:f.inputBg,fontFamily:f.fontSans}],l[13]=f.border,l[14]=f.fontSans,l[15]=f.inputBg,l[16]=f.text,l[17]=F):F=l[17];l[18]!==x||l[19]!==P||l[20]!==y||l[21]!==F||l[22]!==f.textMuted?(M=(0,p.jsx)(c.default,{style:F,value:x,onChangeText:y,placeholder:"Ask PushPals anything...",placeholderTextColor:f.textMuted,multiline:!0,onKeyPress:P,accessibilityLabel:"Chat composer input"}),l[18]=x,l[19]=P,l[20]=y,l[21]=F,l[22]=f.textMuted,l[23]=M):M=l[23];l[24]!==S||l[25]!==x?(L=!S||!x.trim(),l[24]=S,l[25]=x,l[26]=L):L=l[26];const q=S&&x.trim()?1:.45;let I,w,A,W,B,R,_;l[27]!==q||l[28]!==f.accent?(I=[h.sendButton,{backgroundColor:f.accent,opacity:q}],l[27]=q,l[28]=f.accent,l[29]=I):I=l[29];l[30]!==f.fontSans?(w=(0,p.jsx)(s.default,{style:[h.sendLabel,{fontFamily:f.fontSans}],children:"Send"}),l[30]=f.fontSans,l[31]=w):w=l[31];l[32]!==C||l[33]!==w||l[34]!==L||l[35]!==I?(A=(0,p.jsx)(n.default,{onPress:C,disabled:L,style:I,accessibilityRole:"button",accessibilityLabel:"Send message",accessibilityHint:"Submits the current prompt through the local PushPals server session.",children:w}),l[32]=C,l[33]=w,l[34]=L,l[35]=I,l[36]=A):A=l[36];l[37]!==f.fontSans||l[38]!==f.textMuted?(W=(0,p.jsx)(s.default,{style:[h.shortcutHint,{color:f.textMuted,fontFamily:f.fontSans}],children:"Alt+Enter / Cmd+Enter"}),l[37]=f.fontSans,l[38]=f.textMuted,l[39]=W):W=l[39];l[40]!==A||l[41]!==W?(B=(0,p.jsxs)(u.default,{style:h.sendWrap,children:[A,W]}),l[40]=A,l[41]=W,l[42]=B):B=l[42];l[43]!==B||l[44]!==v||l[45]!==M?(R=(0,p.jsxs)(u.default,{style:v,children:[M,B]}),l[43]=B,l[44]=v,l[45]=M,l[46]=R):R=l[46];l[47]!==R||l[48]!==H?(_=(0,p.jsxs)(p.Fragment,{children:[H,R]}),l[47]=R,l[48]=H,l[49]=_):_=l[49];return _};var t=r(d[0]);r(d[1]);var n=e(r(d[2])),o=e(r(d[3])),l=e(r(d[4])),s=e(r(d[5])),c=e(r(d[6])),u=e(r(d[7])),p=r(d[8]);const b=[{label:"Plan & Scope",text:"Plan this change with explicit file targets, acceptance criteria, and validation steps before execution:"},{label:"Execute",text:"Implement this task and include a concise progress summary every major step:"},{label:"Status Digest",text:"Summarize active requests, running jobs, and what I should review next."},{label:"Autonomy Sync",text:"Compare my current request queue with autonomous objectives and flag overlap or conflicts."}];const h=l.default.create({quickPromptContainer:{paddingHorizontal:12,paddingBottom:8},quickPromptChip:{borderWidth:1,borderRadius:999,paddingHorizontal:12,paddingVertical:6,marginRight:8},quickPromptLabel:{fontSize:11,fontWeight:"700",letterSpacing:.2},composer:{flexDirection:"row",alignItems:"flex-end",borderTopWidth:1,paddingHorizontal:12,paddingVertical:10},composerInput:{flex:1,minHeight:44,maxHeight:130,borderWidth:1,borderRadius:12,paddingHorizontal:11,paddingVertical:8,fontSize:14},sendWrap:{marginLeft:8,alignItems:"center"},sendButton:{height:44,borderRadius:12,paddingHorizontal:16,justifyContent:"center",alignItems:"center"},sendLabel:{color:"#FFFFFF",fontWeight:"700",fontSize:13},shortcutHint:{marginTop:4,fontSize:10,fontWeight:"600"}})},1011,[1134,21,417,317,136,123,427,310,2]);
|
|
1023
1023
|
__d(function(g,r,i,a,m,e,d){"use strict";function b(b){const l=b.match(/workerpal-([a-z0-9]+)/i);return l?.[1]?l[1].slice(0,8):null}Object.defineProperty(e,'__esModule',{value:!0}),e.resolveChatSpeaker=function(l,o){const t=(l??"").trim(),n=t.toLowerCase(),u="dark"===o.mode?{local:{bg:"#1A3342",border:"#2B6984",label:"#93D5FF"},remote:{bg:"#222C48",border:"#4F66D9",label:"#B6C5FF"},worker:{bg:"#213628",border:"#4D9F67",label:"#A4E2BA"},scm:{bg:"#352919",border:"#B88949",label:"#FFD4A2"},server:{bg:"#2A2638",border:"#7D6BB3",label:"#D4C5FF"},agent:{bg:o.bubbleAgent,border:o.bubbleAgentBorder,label:o.accent}}:{local:{bg:"#E9F6FF",border:"#9CCBF0",label:"#165B86"},remote:{bg:"#EEF0FF",border:"#AAB8F8",label:"#35449A"},worker:{bg:"#EAF8EC",border:"#9CD2AE",label:"#1E6C40"},scm:{bg:"#FFF4E7",border:"#E1B67A",label:"#8A5D1D"},server:{bg:"#F0EDFA",border:"#B8AFE5",label:"#5C4DA5"},agent:{bg:o.bubbleAgent,border:o.bubbleAgentBorder,label:o.accentText}};if(n.includes("localbuddy"))return{label:"Local Buddy",bubbleBg:u.local.bg,bubbleBorder:u.local.border,labelColor:u.local.label};if(n.includes("remotebuddy"))return{label:"Remote Buddy",bubbleBg:u.remote.bg,bubbleBorder:u.remote.border,labelColor:u.remote.label};if(n.includes("workerpal")||n.includes("workerpals")){const l=b(n);return{label:l?`WorkerPal ${l}`:"WorkerPal",bubbleBg:u.worker.bg,bubbleBorder:u.worker.border,labelColor:u.worker.label}}if(n.includes("source_control_manager")||n.includes("sourcecontrolmanager")||n.includes("scm"))return{label:"Source Control Manager",bubbleBg:u.scm.bg,bubbleBorder:u.scm.border,labelColor:u.scm.label};if(n.includes("server"))return{label:"Server",bubbleBg:u.server.bg,bubbleBorder:u.server.border,labelColor:u.server.label};if(!t)return{label:"Agent",bubbleBg:u.agent.bg,bubbleBorder:u.agent.border,labelColor:u.agent.label};const c=t.replace(/^agent:/i,"").replace(/[-_]+/g," ").trim();return{label:c.replace(/\b\w/g,b=>b.toUpperCase())||"Agent",bubbleBg:u.agent.bg,bubbleBorder:u.agent.border,labelColor:u.agent.label}}},1012,[]);
|
|
1024
1024
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.CoordinationPane=function(e){const s=(0,t.c)(134),{theme:b,isWide:T,rows:W,requestCounts:A,jobCounts:B,completionCounts:L,onReusePrompt:k,onOpenLogs:z}=e,_=v;let $;s[0]===Symbol.for("react.memo_cache_sentinel")?($=async e=>{const t=_(e);if(t)try{if(!await n.default.canOpenURL(t))return void console.error(`[CoordinationPane] Cannot open review URL: ${t}`);await n.default.openURL(t)}catch(e){const n=e;console.error(`[CoordinationPane] Failed to open review URL: ${t}`,n)}},s[0]=$):$=s[0];const V=$;let D;s[1]!==W?(D=W.filter(M),s[1]=W,s[2]=D):D=s[2];const H=D.length;let I;s[3]!==W?(I=W.filter(q),s[3]=W,s[4]=I):I=s[4];const U=I.length;let O;s[5]!==W?(O=W.filter(F),s[5]=W,s[6]=O):O=s[6];const N=O.length;let E;s[7]!==W?(E=W.filter(R),s[7]=W,s[8]=E):E=s[8];const Q=E.length;let G,J,K,X,Y,Z,ee,te,ne,oe,le,re,ie,ae,se,de;if(s[9]!==N||s[10]!==Q||s[11]!==L||s[12]!==U||s[13]!==T||s[14]!==B||s[15]!==z||s[16]!==k||s[17]!==H||s[18]!==A||s[19]!==W||s[20]!==b){const e=W.filter(w).slice(0,8),t=W.filter(C).slice(0,8);let n,R,F,q;if(s[34]!==N||s[35]!==Q||s[36]!==L||s[37]!==U||s[38]!==T||s[39]!==B||s[40]!==k||s[41]!==H||s[42]!==A||s[43]!==W||s[44]!==b){const e=W.slice(0,24);K=l.default,ee=P.fill,te=P.content;const t=String(H);let S;s[55]!==L?(S=(0,f.queueValue)(L,"processed"),s[55]=L,s[56]=S):S=s[56];const C=`${S} processed completions`,w=H>0?"positive":"accent";let M;s[57]!==t||s[58]!==C||s[59]!==w||s[60]!==b?(M=(0,y.jsx)(p.MetricTile,{title:"Ready For Review",value:t,detail:C,tone:w,theme:b}),s[57]=t,s[58]=C,s[59]=w,s[60]=b,s[61]=M):M=s[61];const v=String(N);let z;s[62]!==B?(z=(0,f.queueValue)(B,"claimed"),s[62]=B,s[63]=z):z=s[63];const _=`${z} running jobs`,$=N>0?"warning":"accent";let V;s[64]!==v||s[65]!==_||s[66]!==$||s[67]!==b?(V=(0,y.jsx)(p.MetricTile,{title:"Active Handoffs",value:v,detail:_,tone:$,theme:b}),s[64]=v,s[65]=_,s[66]=$,s[67]=b,s[68]=V):V=s[68];const D=String(Q);let I;s[69]!==A?(I=(0,f.queueValue)(A,"pending"),s[69]=A,s[70]=I):I=s[70];const O=`${I} pending requests`,E=Q>0?"warning":"positive";let G;s[71]!==D||s[72]!==O||s[73]!==E||s[74]!==b?(G=(0,y.jsx)(p.MetricTile,{title:"Awaiting Remote",value:D,detail:O,tone:E,theme:b}),s[71]=D,s[72]=O,s[73]=E,s[74]=b,s[75]=G):G=s[75];const X=String(U);let Z;s[76]!==B?(Z=(0,f.queueValue)(B,"failed"),s[76]=B,s[77]=Z):Z=s[77];const oe=`${Z} failed jobs`,le=U>0?"danger":"positive";let re;s[78]!==X||s[79]!==oe||s[80]!==le||s[81]!==b?(re=(0,y.jsx)(p.MetricTile,{title:"Blocked",value:X,detail:oe,tone:le,theme:b}),s[78]=X,s[79]=oe,s[80]=le,s[81]=b,s[82]=re):re=s[82],s[83]!==M||s[84]!==V||s[85]!==G||s[86]!==re?(ne=(0,y.jsxs)(u.default,{style:P.metricRow,children:[M,V,G,re]}),s[83]=M,s[84]=V,s[85]=G,s[86]=re,s[87]=ne):ne=s[87],J=u.default;const ie=T&&P.gridWide;let ae,se;s[88]!==ie?(Y=[P.grid,ie],s[88]=ie,s[89]=Y):Y=s[89],n=u.default,s[90]!==b.border||s[91]!==b.panel?(R=[P.mainPanel,{borderColor:b.border,backgroundColor:b.panel}],s[90]=b.border,s[91]=b.panel,s[92]=R):R=s[92],s[93]!==b.fontSans||s[94]!==b.text?(ae=(0,y.jsx)(c.default,{style:[P.sectionTitle,{color:b.text,fontFamily:b.fontSans}],children:"Change Coordination Board"}),s[93]=b.fontSans,s[94]=b.text,s[95]=ae):ae=s[95],s[96]!==b.fontSans||s[97]!==b.textMuted?(se=[P.systemMeta,{color:b.textMuted,fontFamily:b.fontSans}],s[96]=b.fontSans,s[97]=b.textMuted,s[98]=se):se=s[98],F=(0,y.jsxs)(u.default,{style:P.rowBetween,children:[ae,(0,y.jsxs)(c.default,{style:se,children:[e.length," latest requests"]})]}),q=0===e.length?(0,y.jsxs)(u.default,{style:P.emptyState,children:[(0,y.jsx)(c.default,{style:[P.emptyTitle,{color:b.text,fontFamily:b.fontSans}],children:"Nothing to coordinate yet"}),(0,y.jsx)(c.default,{style:[P.emptySubtitle,{color:b.textMuted,fontFamily:b.fontSans}],children:"Send a task from chat and this board will trace the full handoff from request to integration."})]}):e.map(e=>{const t=x(e.stage),n=(0,f.toneColor)(b,t),l=e.completions[0],s=l&&"processed"===l.status?`${l.branch??"branch"} @ ${l.commitSha?.slice(0,8)??"--"}`:null;return(0,y.jsxs)(u.default,{style:[P.card,{borderColor:b.border,backgroundColor:b.panelAlt}],children:[(0,y.jsxs)(u.default,{style:P.rowBetween,children:[(0,y.jsx)(c.default,{style:[P.requestId,{color:b.text,fontFamily:b.fontMono}],children:e.request.id.slice(0,8)}),(0,y.jsx)(u.default,{style:[P.statusPill,{borderColor:`${n}66`,backgroundColor:`${n}22`}],children:(0,y.jsx)(c.default,{style:[P.statusPillText,{color:n,fontFamily:b.fontSans}],children:h(e.stage)})})]}),(0,y.jsx)(c.default,{style:[P.requestPrompt,{color:b.text,fontFamily:b.fontSans}],children:(0,f.clip)(e.request.prompt,280)}),(0,y.jsxs)(c.default,{style:[P.requestSubline,{color:b.textMuted,fontFamily:b.fontSans}],children:["priority ",e.request.priority??"normal"," | created"," ",(0,f.prettyTs)(e.request.createdAt)," | updated ",(0,f.relativeMs)(e.request.updatedAt)]}),(0,y.jsx)(c.default,{style:[P.stageDetail,{color:b.textMuted,fontFamily:b.fontSans}],children:e.stageDetail}),(0,y.jsxs)(u.default,{style:P.laneRow,children:[(0,y.jsxs)(u.default,{style:[P.laneChip,{borderColor:b.border,backgroundColor:b.panel}],children:[(0,y.jsx)(c.default,{style:[P.laneLabel,{color:b.textMuted,fontFamily:b.fontSans}],children:"User"}),(0,y.jsx)(c.default,{style:[P.laneValue,{color:b.text,fontFamily:b.fontSans}],children:"Requested"})]}),(0,y.jsxs)(u.default,{style:[P.laneChip,{borderColor:b.border,backgroundColor:b.panel}],children:[(0,y.jsx)(c.default,{style:[P.laneLabel,{color:b.textMuted,fontFamily:b.fontSans}],children:"Remote"}),(0,y.jsx)(c.default,{style:[P.laneValue,{color:b.text,fontFamily:b.fontSans}],children:e.jobs.length>0?`${e.jobs.length} job(s)`:"Waiting"})]}),(0,y.jsxs)(u.default,{style:[P.laneChip,{borderColor:b.border,backgroundColor:b.panel}],children:[(0,y.jsx)(c.default,{style:[P.laneLabel,{color:b.textMuted,fontFamily:b.fontSans}],children:"Worker"}),(0,y.jsx)(c.default,{style:[P.laneValue,{color:b.text,fontFamily:b.fontSans}],children:e.jobs.some(j)?"Running":"Idle"})]}),(0,y.jsxs)(u.default,{style:[P.laneChip,{borderColor:b.border,backgroundColor:b.panel}],children:[(0,y.jsx)(c.default,{style:[P.laneLabel,{color:b.textMuted,fontFamily:b.fontSans}],children:"SCM"}),(0,y.jsx)(c.default,{style:[P.laneValue,{color:b.text,fontFamily:b.fontSans}],children:s?"Ready":"Pending"})]})]}),s?(0,y.jsxs)(c.default,{style:[P.reviewRef,{color:b.positive,fontFamily:b.fontMono}],children:["review ",s]}):null,(0,y.jsx)(o.default,{style:[P.reuseButton,{borderColor:b.border,backgroundColor:b.panel}],onPress:()=>k(e.request.prompt),accessibilityRole:"button",accessibilityLabel:`Reuse request ${e.request.id.slice(0,8)} prompt`,accessibilityHint:"Moves this prompt back into chat composer for edits or retry.",children:(0,y.jsx)(c.default,{style:[P.reuseLabel,{color:b.accent,fontFamily:b.fontSans}],children:"Reuse Prompt In Chat"})})]},e.request.id)}),s[34]=N,s[35]=Q,s[36]=L,s[37]=U,s[38]=T,s[39]=B,s[40]=k,s[41]=H,s[42]=A,s[43]=W,s[44]=b,s[45]=J,s[46]=K,s[47]=n,s[48]=Y,s[49]=ee,s[50]=te,s[51]=ne,s[52]=R,s[53]=F,s[54]=q}else J=s[45],K=s[46],n=s[47],Y=s[48],ee=s[49],te=s[50],ne=s[51],R=s[52],F=s[53],q=s[54];s[99]!==n||s[100]!==R||s[101]!==F||s[102]!==q?(Z=(0,y.jsxs)(n,{style:R,children:[F,q]}),s[99]=n,s[100]=R,s[101]=F,s[102]=q,s[103]=Z):Z=s[103],G=u.default;const M=T&&P.sidePanelWide;let v;s[104]!==b.border||s[105]!==b.panel?(v={borderColor:b.border,backgroundColor:b.panel},s[104]=b.border,s[105]=b.panel,s[106]=v):v=s[106],s[107]!==M||s[108]!==v?(oe=[P.sidePanel,M,v],s[107]=M,s[108]=v,s[109]=oe):oe=s[109],s[110]!==b.fontSans||s[111]!==b.text?(le=(0,y.jsx)(c.default,{style:[P.sectionTitle,{color:b.text,fontFamily:b.fontSans}],children:"Review Queue"}),s[110]=b.fontSans,s[111]=b.text,s[112]=le):le=s[112],re=0===e.length?(0,y.jsx)(c.default,{style:[P.emptySubtitle,{color:b.textMuted,fontFamily:b.fontSans}],children:"No processed completions yet."}):e.map(e=>{const t=e.completions.find(S),n=_(t);return(0,y.jsxs)(u.default,{style:[P.sideCard,{borderColor:b.border,backgroundColor:b.panelAlt}],children:[(0,y.jsx)(c.default,{style:[P.requestId,{color:b.text,fontFamily:b.fontMono}],children:e.request.id.slice(0,8)}),(0,y.jsx)(c.default,{style:[P.sidePrompt,{color:b.text,fontFamily:b.fontSans}],children:(0,f.clip)(e.request.prompt,110)}),(0,y.jsxs)(c.default,{style:[P.sideMeta,{color:b.positive,fontFamily:b.fontMono}],children:[t?.branch??"--"," | ",t?.commitSha?.slice(0,8)??"--"]}),(0,y.jsxs)(u.default,{style:P.sideActions,children:[(0,y.jsx)(o.default,{style:[P.sideActionButton,{borderColor:b.border,backgroundColor:b.panel}],onPress:()=>k(e.request.prompt),children:(0,y.jsx)(c.default,{style:[P.sideActionLabel,{color:b.accent,fontFamily:b.fontSans}],children:"Retry"})}),(0,y.jsx)(o.default,{style:[P.sideActionButton,{borderColor:b.border,backgroundColor:b.panel}],onPress:()=>z(e),children:(0,y.jsx)(c.default,{style:[P.sideActionLabel,{color:b.accent,fontFamily:b.fontSans}],children:"Open Logs"})}),(0,y.jsx)(o.default,{style:[P.sideActionButton,P.sideActionButtonWide,{borderColor:b.border,backgroundColor:b.panel},!n&&P.sideActionDisabled],onPress:()=>{V(t)},disabled:!n,children:(0,y.jsx)(c.default,{style:[P.sideActionLabel,{color:n?b.positive:b.textMuted,fontFamily:b.fontSans}],children:"PR"})})]})]},`review-${e.request.id}`)}),s[113]!==b.fontSans||s[114]!==b.text?(ie=(0,y.jsx)(c.default,{style:[P.sectionTitle,{color:b.text,fontFamily:b.fontSans,marginTop:14}],children:"Needs Attention"}),s[113]=b.fontSans,s[114]=b.text,s[115]=ie):ie=s[115],X=0===t.length?(0,y.jsx)(c.default,{style:[P.emptySubtitle,{color:b.textMuted,fontFamily:b.fontSans}],children:"No failed coordination chains."}):t.map(e=>(0,y.jsxs)(u.default,{style:[P.sideCard,{borderColor:`${b.danger}66`,backgroundColor:`${b.danger}14`}],children:[(0,y.jsx)(c.default,{style:[P.requestId,{color:b.text,fontFamily:b.fontMono}],children:e.request.id.slice(0,8)}),(0,y.jsx)(c.default,{style:[P.sidePrompt,{color:b.text,fontFamily:b.fontSans}],children:(0,f.clip)(e.request.prompt,110)}),(0,y.jsx)(c.default,{style:[P.sideMeta,{color:b.danger,fontFamily:b.fontSans}],children:e.stageDetail}),(0,y.jsxs)(u.default,{style:P.sideActions,children:[(0,y.jsx)(o.default,{style:[P.sideActionButton,{borderColor:b.border,backgroundColor:b.panel}],onPress:()=>k(e.request.prompt),children:(0,y.jsx)(c.default,{style:[P.sideActionLabel,{color:b.accent,fontFamily:b.fontSans}],children:"Retry"})}),(0,y.jsx)(o.default,{style:[P.sideActionButton,{borderColor:b.border,backgroundColor:b.panel}],onPress:()=>z(e),children:(0,y.jsx)(c.default,{style:[P.sideActionLabel,{color:b.accent,fontFamily:b.fontSans}],children:"Open Logs"})})]})]},`blocked-${e.request.id}`)),s[9]=N,s[10]=Q,s[11]=L,s[12]=U,s[13]=T,s[14]=B,s[15]=z,s[16]=k,s[17]=H,s[18]=A,s[19]=W,s[20]=b,s[21]=G,s[22]=J,s[23]=K,s[24]=X,s[25]=Y,s[26]=Z,s[27]=ee,s[28]=te,s[29]=ne,s[30]=oe,s[31]=le,s[32]=re,s[33]=ie}else G=s[21],J=s[22],K=s[23],X=s[24],Y=s[25],Z=s[26],ee=s[27],te=s[28],ne=s[29],oe=s[30],le=s[31],re=s[32],ie=s[33];s[116]!==G||s[117]!==X||s[118]!==oe||s[119]!==le||s[120]!==re||s[121]!==ie?(ae=(0,y.jsxs)(G,{style:oe,children:[le,re,ie,X]}),s[116]=G,s[117]=X,s[118]=oe,s[119]=le,s[120]=re,s[121]=ie,s[122]=ae):ae=s[122];s[123]!==J||s[124]!==Y||s[125]!==Z||s[126]!==ae?(se=(0,y.jsxs)(J,{style:Y,children:[Z,ae]}),s[123]=J,s[124]=Y,s[125]=Z,s[126]=ae,s[127]=se):se=s[127];s[128]!==K||s[129]!==ee||s[130]!==te||s[131]!==ne||s[132]!==se?(de=(0,y.jsxs)(K,{style:ee,contentContainerStyle:te,children:[ne,se]}),s[128]=K,s[129]=ee,s[130]=te,s[131]=ne,s[132]=se,s[133]=de):de=s[133];return de};var t=r(d[0]);r(d[1]);var n=e(r(d[2])),o=e(r(d[3])),l=e(r(d[4])),s=e(r(d[5])),c=e(r(d[6])),u=e(r(d[7])),f=r(d[8]),p=r(d[9]),y=r(d[10]);function h(e){return"awaiting_remote"===e?"Awaiting Remote":"planning"===e?"Planning":"executing"===e?"Executing":"ready_for_review"===e?"Ready For Review":"Failed"}function x(e){return"ready_for_review"===e?"positive":"failed"===e?"danger":"planning"===e||"executing"===e?"warning":"accent"}function b(e){const t=String(e??"").trim();if(!t)return null;const n=t.match(/https?:\/\/[^\s)]+/i);return n?.[0]??null}function S(e){return"processed"===e.status}function j(e){return"claimed"===e.status}function C(e){return"failed"===e.stage}function w(e){return"ready_for_review"===e.stage}function R(e){return"awaiting_remote"===e.stage}function F(e){return"planning"===e.stage||"executing"===e.stage}function q(e){return"failed"===e.stage}function M(e){return"ready_for_review"===e.stage}function v(e){if(!e)return null;const t=b(e.prUrl);if(t)return t;const n=b(e.prBody);if(n)return n;const o=b(e.prTitle);return o||null}const P=s.default.create({fill:{flex:1},content:{paddingHorizontal:20,paddingBottom:18},metricRow:{flexDirection:"row",flexWrap:"wrap",paddingBottom:10},grid:{flexDirection:"column"},gridWide:{flexDirection:"row",alignItems:"flex-start"},mainPanel:{borderWidth:1,borderRadius:16,padding:12,marginBottom:10,flex:1.35},sidePanel:{borderWidth:1,borderRadius:16,padding:12,marginBottom:10,flex:.85,marginLeft:0},sidePanelWide:{marginLeft:10},rowBetween:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},sectionTitle:{fontSize:16,fontWeight:"700",marginBottom:8},systemMeta:{fontSize:11,marginTop:5},emptyState:{borderRadius:16,padding:16,alignItems:"flex-start"},emptyTitle:{fontSize:18,fontWeight:"700",marginBottom:4},emptySubtitle:{fontSize:13,lineHeight:19},card:{borderWidth:1,borderRadius:14,padding:12,marginBottom:10},requestId:{fontSize:12,fontWeight:"700"},statusPill:{borderWidth:1,borderRadius:999,paddingHorizontal:9,paddingVertical:3},statusPillText:{fontSize:11,fontWeight:"700",textTransform:"uppercase"},requestPrompt:{fontSize:14,lineHeight:20,marginTop:7},requestSubline:{fontSize:12,marginTop:6},stageDetail:{fontSize:12,marginTop:6,lineHeight:18},laneRow:{flexDirection:"row",flexWrap:"wrap",marginTop:8},laneChip:{borderWidth:1,borderRadius:10,paddingHorizontal:8,paddingVertical:7,marginRight:6,marginBottom:6,minWidth:92},laneLabel:{fontSize:10,textTransform:"uppercase",letterSpacing:.3},laneValue:{marginTop:3,fontSize:12,fontWeight:"700"},reviewRef:{marginTop:6,fontSize:11},reuseButton:{borderWidth:1,borderRadius:10,marginTop:8,alignSelf:"flex-start",paddingHorizontal:10,paddingVertical:6},reuseLabel:{fontSize:11,fontWeight:"700",textTransform:"uppercase",letterSpacing:.2},sideCard:{borderWidth:1,borderRadius:12,padding:10,marginBottom:8},sidePrompt:{marginTop:5,fontSize:12,lineHeight:18},sideMeta:{marginTop:5,fontSize:11},sideActions:{flexDirection:"row",flexWrap:"wrap",marginTop:8},sideActionButton:{borderWidth:1,borderRadius:8,paddingHorizontal:8,paddingVertical:5,marginRight:6,marginBottom:6},sideActionButtonWide:{minWidth:124},sideActionDisabled:{opacity:.55},sideActionLabel:{fontSize:10,fontWeight:"700",textTransform:"uppercase",letterSpacing:.2}})},1013,[1134,21,396,417,317,136,123,310,1014,1015,2]);
|
|
1025
|
-
__d(function(g,r,i,a,m,e,d){"use strict";function n(n){return n.replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}Object.defineProperty(e,'__esModule',{value:!0}),e.queueValue=function(n,t){return Number(n?.[t]??0)},e.clip=function(n,t=180){return n?n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}...`:""},e.prettyTs=function(n){if(!n)return"--";const t=Date.parse(n);return Number.isFinite(t)?new Date(t).toLocaleTimeString():"--"},e.relativeMs=function(n){if(!n)return"unknown";const t=Date.parse(n);if(!Number.isFinite(t))return"unknown";const o=Date.now()-t;return o<1e4?"just now":o<6e4?`${Math.floor(o/1e3)}s ago`:o<36e5?`${Math.floor(o/6e4)}m ago`:`${Math.floor(o/36e5)}h ago`},e.statusColor=function(n,t){const o=t.toLowerCase();if(o.includes("complete")||o.includes("processed"))return n.positive;if(o.includes("abandon"))return n.warning;if(o.includes("fail")||o.includes("error")||o.includes("offline"))return n.danger;return o.includes("initializing")||o.includes("busy")||o.includes("claim")||o.includes("progress")||o.includes("start")?n.warning:n.accent},e.formatPercent=function(n){return"number"==typeof n&&Number.isFinite(n)?`${Math.round(100*n)}%`:"--"},e.formatDuration=function(n){return"number"!=typeof n||!Number.isFinite(n)||n<0?"--":n<1e3?`${Math.round(n)}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:`${Math.round(n/1e3)}s`},e.formatUptime=function(n){if("number"!=typeof n||!Number.isFinite(n)||n<0)return"--";const t=Math.floor(n/1e3),o=Math.floor(t/86400),u=Math.floor(t%86400/3600),s=Math.floor(t%3600/60),c=t%60;return o>0?`${o}d ${u}h ${s}m`:u>0?`${u}h ${s}m`:s>0?`${s}m ${c}s`:`${c}s`},e.formatTokenCount=function(t){if("number"!=typeof t||!Number.isFinite(t)||t<0)return"--";if(t<1e3)return Math.round(t).toLocaleString();if(t<1e6)return`${n((t/1e3).toFixed(t<1e4?1:0))}k`;if(t<1e9)return`${n((t/1e6).toFixed(t<1e7?1:0))}M`;return t.toExponential(2).replace("+","")},e.formatEtaMs=function(n){if("number"!=typeof n||!Number.isFinite(n)||n<=0)return"now";if(n<1e3)return`${Math.round(n)}ms`;const t=Math.ceil(n/1e3);if(t<60)return`${t}s`;const o=Math.floor(t/60),u=t%60;return u>0?`${o}m ${u}s`:`${o}m`},e.parseJsonText=function(n){if(!n)return"";try{const t=JSON.parse(n);return"string"==typeof t?t:JSON.stringify(t,null,2)}catch{return n}},e.toneColor=function(n,t){return"positive"===t?n.positive:"warning"===t?n.warning:"danger"===t?n.danger:n.accent}},1014,[]);
|
|
1025
|
+
__d(function(g,r,i,a,m,e,d){"use strict";function n(n){return n.replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}Object.defineProperty(e,'__esModule',{value:!0}),e.queueValue=function(n,t){return Number(n?.[t]??0)},e.clip=function(n,t=180){return n?n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}...`:""},e.prettyTs=function(n){if(!n)return"--";const t=Date.parse(n);return Number.isFinite(t)?new Date(t).toLocaleTimeString():"--"},e.relativeMs=function(n){if(!n)return"unknown";const t=Date.parse(n);if(!Number.isFinite(t))return"unknown";const o=Date.now()-t;return o<1e4?"just now":o<6e4?`${Math.floor(o/1e3)}s ago`:o<36e5?`${Math.floor(o/6e4)}m ago`:`${Math.floor(o/36e5)}h ago`},e.statusColor=function(n,t){const o=t.toLowerCase();if(o.includes("complete")||o.includes("processed"))return n.positive;if(o.includes("abandon"))return n.warning;if(o.includes("publish_blocked")||o.includes("publish blocked"))return n.danger;if(o.includes("fail")||o.includes("error")||o.includes("offline"))return n.danger;return o.includes("initializing")||o.includes("busy")||o.includes("claim")||o.includes("progress")||o.includes("start")?n.warning:n.accent},e.formatPercent=function(n){return"number"==typeof n&&Number.isFinite(n)?`${Math.round(100*n)}%`:"--"},e.formatDuration=function(n){return"number"!=typeof n||!Number.isFinite(n)||n<0?"--":n<1e3?`${Math.round(n)}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:`${Math.round(n/1e3)}s`},e.formatUptime=function(n){if("number"!=typeof n||!Number.isFinite(n)||n<0)return"--";const t=Math.floor(n/1e3),o=Math.floor(t/86400),u=Math.floor(t%86400/3600),s=Math.floor(t%3600/60),c=t%60;return o>0?`${o}d ${u}h ${s}m`:u>0?`${u}h ${s}m`:s>0?`${s}m ${c}s`:`${c}s`},e.formatTokenCount=function(t){if("number"!=typeof t||!Number.isFinite(t)||t<0)return"--";if(t<1e3)return Math.round(t).toLocaleString();if(t<1e6)return`${n((t/1e3).toFixed(t<1e4?1:0))}k`;if(t<1e9)return`${n((t/1e6).toFixed(t<1e7?1:0))}M`;return t.toExponential(2).replace("+","")},e.formatEtaMs=function(n){if("number"!=typeof n||!Number.isFinite(n)||n<=0)return"now";if(n<1e3)return`${Math.round(n)}ms`;const t=Math.ceil(n/1e3);if(t<60)return`${t}s`;const o=Math.floor(t/60),u=t%60;return u>0?`${o}m ${u}s`:`${o}m`},e.parseJsonText=function(n){if(!n)return"";try{const t=JSON.parse(n);return"string"==typeof t?t:JSON.stringify(t,null,2)}catch{return n}},e.toneColor=function(n,t){return"positive"===t?n.positive:"warning"===t?n.warning:"danger"===t?n.danger:n.accent}},1014,[]);
|
|
1026
1026
|
__d(function(g,r,i,a,m,_e,d){"use strict";function t(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.MetricTile=function(t){const n=(0,e.c)(24),{title:f,value:u,detail:p,theme:S,tone:x}=t,h=void 0===x?"accent":x,M="positive"===h?S.positive:"warning"===h?S.warning:"danger"===h?S.danger:S.accent;let b,y,T,v,_,j,z;n[0]!==S.border||n[1]!==S.panelAlt?(b=[s.metricTile,{borderColor:S.border,backgroundColor:S.panelAlt}],n[0]=S.border,n[1]=S.panelAlt,n[2]=b):b=n[2];n[3]!==S.fontSans||n[4]!==S.textMuted?(y=[s.metricTitle,{color:S.textMuted,fontFamily:S.fontSans}],n[3]=S.fontSans,n[4]=S.textMuted,n[5]=y):y=n[5];n[6]!==y||n[7]!==f?(T=(0,c.jsx)(o.default,{style:y,children:f}),n[6]=y,n[7]=f,n[8]=T):T=n[8];n[9]!==M||n[10]!==S.fontSans?(v=[s.metricValue,{color:M,fontFamily:S.fontSans}],n[9]=M,n[10]=S.fontSans,n[11]=v):v=n[11];n[12]!==v||n[13]!==u?(_=(0,c.jsx)(o.default,{style:v,children:u}),n[12]=v,n[13]=u,n[14]=_):_=n[14];n[15]!==p||n[16]!==S.fontSans||n[17]!==S.textMuted?(j=p?(0,c.jsx)(o.default,{style:[s.metricDetail,{color:S.textMuted,fontFamily:S.fontSans}],children:p}):null,n[15]=p,n[16]=S.fontSans,n[17]=S.textMuted,n[18]=j):j=n[18];n[19]!==b||n[20]!==T||n[21]!==_||n[22]!==j?(z=(0,c.jsxs)(l.default,{style:b,children:[T,_,j]}),n[19]=b,n[20]=T,n[21]=_,n[22]=j,n[23]=z):z=n[23];return z};var e=r(d[0]);r(d[1]);var n=t(r(d[2])),o=t(r(d[3])),l=t(r(d[4])),c=r(d[5]);const s=n.default.create({metricTile:{minWidth:150,flexGrow:1,borderWidth:1,borderRadius:14,paddingHorizontal:12,paddingVertical:10,marginRight:8,marginBottom:8},metricTitle:{fontSize:11,textTransform:"uppercase",letterSpacing:.7},metricValue:{fontSize:22,fontWeight:"700",marginTop:3},metricDetail:{fontSize:12,marginTop:3}})},1015,[1134,21,136,123,310,2]);
|
|
1027
1027
|
__d(function(g,r,i,_a,m,e,d){"use strict";function t(t){if(!t)return null;try{const n=JSON.parse(t);if(n&&"object"==typeof n&&!Array.isArray(n))return n}catch{return null}return null}function n(n){const o=t(n.params),s=o?.requestId;return"string"==typeof s&&s.trim()?s:null}Object.defineProperty(e,'__esModule',{value:!0}),e.deriveCoordinationRows=function(t,o,s){const a=new Map;for(const t of o){const o=n(t);if(!o)continue;const s=a.get(o)??[];s.push(t),a.set(o,s)}const u=new Map;for(const t of s){const n=u.get(t.jobId)??[];n.push(t),u.set(t.jobId,n)}return t.map(t=>{const n=[...a.get(t.id)??[]].sort((t,n)=>n.updatedAt.localeCompare(t.updatedAt)),o=n.flatMap(t=>u.get(t.id)??[]),s="failed"===t.status||n.some(t=>"failed"===t.status)||o.some(t=>"failed"===t.status),c=o.find(t=>"processed"===t.status),l=n.some(t=>"claimed"===t.status),f=n.length>0||"claimed"===t.status||"completed"===t.status;let p="awaiting_remote",h="This request has not been delegated to execution yet.";if(s)p="failed",h="A planning/execution/finalization step failed and needs intervention.";else if(c){p="ready_for_review",h=`Ready to review on ${c.branch??"integration branch"} (${c.commitSha?.slice(0,8)??"new commit"}).`}else l||"claimed"===t.status?(p="executing",h="WorkerPal execution is active or waiting on downstream completion."):f&&(p="planning",h="RemoteBuddy has routed work and prepared execution artifacts.");return{request:t,jobs:n,completions:o,stage:p,stageDetail:h}})}},1016,[]);
|
|
1028
1028
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.FlowRibbon=function(e){const o=(0,t.c)(14),{theme:p,steps:b}=e;let h,x,y,w;o[0]!==p.border||o[1]!==p.panelAlt?(h=[f.wrap,{backgroundColor:p.panelAlt,borderColor:p.border}],o[0]=p.border,o[1]=p.panelAlt,o[2]=h):h=o[2];if(o[3]!==b||o[4]!==p){let e;o[6]!==b.length||o[7]!==p?(e=(e,t)=>{const n=u(p,e.tone),o=t<b.length-1;return(0,c.jsxs)(s.default,{style:f.stepOuter,children:[(0,c.jsxs)(s.default,{style:[f.step,{borderColor:`${n}66`,backgroundColor:`${n}16`}],children:[(0,c.jsx)(l.default,{style:[f.label,{color:n,fontFamily:p.fontSans}],numberOfLines:1,children:e.label}),(0,c.jsx)(l.default,{style:[f.detail,{color:p.textMuted,fontFamily:p.fontSans}],numberOfLines:2,children:e.detail})]}),o?(0,c.jsx)(s.default,{style:[f.connector,{backgroundColor:`${p.border}CC`}]}):null]},e.key)},o[6]=b.length,o[7]=p,o[8]=e):e=o[8],x=b.map(e),o[3]=b,o[4]=p,o[5]=x}else x=o[5];o[9]!==x?(y=(0,c.jsx)(n.default,{horizontal:!0,showsHorizontalScrollIndicator:!1,children:x}),o[9]=x,o[10]=y):y=o[10];o[11]!==h||o[12]!==y?(w=(0,c.jsx)(s.default,{style:h,children:y}),o[11]=h,o[12]=y,o[13]=w):w=o[13];return w};var t=r(d[0]);r(d[1]);var n=e(r(d[2])),o=e(r(d[3])),l=e(r(d[4])),s=e(r(d[5])),c=r(d[6]);function u(e,t){return"positive"===t?e.positive:"warning"===t?e.warning:"danger"===t?e.danger:e.accent}const f=o.default.create({wrap:{marginHorizontal:20,marginBottom:10,borderWidth:1,borderRadius:14,paddingHorizontal:10,paddingVertical:10},stepOuter:{flexDirection:"row",alignItems:"center"},step:{width:172,borderWidth:1,borderRadius:12,paddingHorizontal:10,paddingVertical:9},label:{fontSize:11,fontWeight:"700",textTransform:"uppercase",letterSpacing:.3},detail:{marginTop:4,fontSize:12,lineHeight:16},connector:{width:18,height:1,marginHorizontal:8}})},1017,[1134,21,317,136,123,310,2]);
|
|
1029
|
-
__d(function(g,r,i,a,m,_e,d){"use strict";function t(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.JobsPane=function(t){const l=(0,e.c)(108),{theme:y,isWide:A,jobs:F,jobCounts:w,pendingSnapshot:z,completions:B,completionCounts:C,sessionState:L,requestFilterId:k,jobFilterId:W,onClearFilter:q}=t;let I;t:{if(W){let t;if(l[0]!==W||l[1]!==F){let e;l[3]!==W?(e=t=>t.id===W,l[3]=W,l[4]=e):e=l[4],t=F.filter(e),l[0]=W,l[1]=F,l[2]=t}else t=l[2];I=t;break t}if(k){let t;if(l[5]!==F||l[6]!==k){let e;l[8]!==k?(e=t=>x(t.params)===k,l[8]=k,l[9]=e):e=l[9],t=F.filter(e),l[5]=F,l[6]=k,l[7]=t}else t=l[7];I=t;break t}I=F}const R=I;let D;l[10]!==R?(D=R.slice(0,40),l[10]=R,l[11]=D):D=l[11];const P=D;let $;l[12]!==R?($=new Set(R.map(M)),l[12]=R,l[13]=$):$=l[13];const v=$;let H;t:{if(0===v.size&&(k||W)){let t;l[14]===Symbol.for("react.memo_cache_sentinel")?(t=[],l[14]=t):t=l[14],H=t;break t}if(!k&&!W){H=B;break t}let t;if(l[15]!==B||l[16]!==v){let e;l[18]!==v?(e=t=>v.has(t.jobId),l[18]=v,l[19]=e):e=l[19],t=B.filter(e),l[15]=B,l[16]=v,l[17]=t}else t=l[17];H=t}const _=H;let V;l[20]!==z?(V=new Map(z.map(S)),l[20]=z,l[21]=V):V=l[21];const J=V,N=Boolean(k||W),E=W??R[0]?.id??null;let K;l[22]!==w?(K=(0,f.queueValue)(w,"pending"),l[22]=w,l[23]=K):K=l[23];const O=String(K);let Q,G;l[24]!==O||l[25]!==y?(Q=(0,p.jsx)(b.MetricTile,{title:"Queued Jobs",value:O,tone:"warning",theme:y}),l[24]=O,l[25]=y,l[26]=Q):Q=l[26];l[27]!==w?(G=(0,f.queueValue)(w,"claimed"),l[27]=w,l[28]=G):G=l[28];const U=String(G);let X,Y;l[29]!==U||l[30]!==y?(X=(0,p.jsx)(b.MetricTile,{title:"Running Jobs",value:U,tone:"accent",theme:y}),l[29]=U,l[30]=y,l[31]=X):X=l[31];l[32]!==C?(Y=(0,f.queueValue)(C,"processed"),l[32]=C,l[33]=Y):Y=l[33];const Z=String(Y);let tt;l[34]!==Z||l[35]!==y?(tt=(0,p.jsx)(b.MetricTile,{title:"Completions",value:Z,tone:"positive",theme:y}),l[34]=Z,l[35]=y,l[36]=tt):tt=l[36];const et=String((0,f.queueValue)(w,"failed")+(0,f.queueValue)(w,"abandoned"));let ot,nt;l[37]!==et||l[38]!==y?(ot=(0,p.jsx)(b.MetricTile,{title:"Failed / Abandoned",value:et,tone:"danger",theme:y}),l[37]=et,l[38]=y,l[39]=ot):ot=l[39];l[40]!==X||l[41]!==tt||l[42]!==ot||l[43]!==Q?(nt=(0,p.jsxs)(u.default,{style:T.metricRow,children:[Q,X,tt,ot]}),l[40]=X,l[41]=tt,l[42]=ot,l[43]=Q,l[44]=nt):nt=l[44];const lt=A&&T.jobsLayoutWide;let it,rt,at,st,dt,ut,ct,ft,mt,bt,pt,xt,yt,jt,gt,ht;l[45]!==lt?(it=[T.jobsLayout,lt],l[45]=lt,l[46]=it):it=l[46];l[47]!==y.border||l[48]!==y.panel?(rt=[T.jobsListPane,{borderColor:y.border,backgroundColor:y.panel}],l[47]=y.border,l[48]=y.panel,l[49]=rt):rt=l[49];l[50]!==y.fontSans||l[51]!==y.text?(at=(0,p.jsx)(s.default,{style:[T.sectionTitle,{color:y.text,fontFamily:y.fontSans}],children:"Queue Activity"}),l[50]=y.fontSans,l[51]=y.text,l[52]=at):at=l[52];l[53]!==N||l[54]!==q||l[55]!==y.accent||l[56]!==y.border||l[57]!==y.fontSans||l[58]!==y.panelAlt?(st=N&&q?(0,p.jsx)(n.default,{style:[T.clearFilterButton,{borderColor:y.border,backgroundColor:y.panelAlt}],onPress:q,children:(0,p.jsx)(s.default,{style:[T.clearFilterLabel,{color:y.accent,fontFamily:y.fontSans}],children:"Clear Filter"})}):null,l[53]=N,l[54]=q,l[55]=y.accent,l[56]=y.border,l[57]=y.fontSans,l[58]=y.panelAlt,l[59]=st):st=l[59];l[60]!==at||l[61]!==st?(dt=(0,p.jsxs)(u.default,{style:T.sectionHeader,children:[at,st]}),l[60]=at,l[61]=st,l[62]=dt):dt=l[62];l[63]!==N||l[64]!==W||l[65]!==k||l[66]!==y.fontMono||l[67]!==y.textMuted?(ut=N?(0,p.jsxs)(s.default,{style:[T.filterMeta,{color:y.textMuted,fontFamily:y.fontMono}],children:["request ",k?.slice(0,8)??"--"," | job"," ",W?.slice(0,8)??"--"]}):null,l[63]=N,l[64]=W,l[65]=k,l[66]=y.fontMono,l[67]=y.textMuted,l[68]=ut):ut=l[68];l[69]!==N||l[70]!==J||l[71]!==P||l[72]!==y?(ct=0===P.length?(0,p.jsx)(s.default,{style:[T.emptySubtitle,{color:y.textMuted,fontFamily:y.fontSans}],children:N?"No jobs matched the selected request/job.":"No job rows yet."}):(0,p.jsx)(o.default,{data:P,keyExtractor:h,renderItem:t=>{const{item:e}=t,o=(0,f.statusColor)(y,e.status),n=J.get(e.id),l=e.priority??"normal",c=j(e),b=[e.enqueuedAt?`enq ${(0,f.prettyTs)(e.enqueuedAt)}`:null,e.claimedAt?`claim ${(0,f.prettyTs)(e.claimedAt)}`:null,e.startedAt?`start ${(0,f.prettyTs)(e.startedAt)}`:null,e.firstLogAt?`first-log ${(0,f.prettyTs)(e.firstLogAt)}`:null,e.completedAt?`done ${(0,f.prettyTs)(e.completedAt)}`:null,e.abandonedAt?`abandon ${(0,f.prettyTs)(e.abandonedAt)}`:null,e.failedAt?`fail ${(0,f.prettyTs)(e.failedAt)}`:null].filter(Boolean);("completed"===e.status||"failed"===e.status||"abandoned"===e.status)&&null!=c&&b.push(`elapsed ${(0,f.formatDuration)(c)}`);const x="pending"===e.status&&n?`queue #${n.position} (eta ${(0,f.formatEtaMs)(n.etaMs)})`:"claimed"===e.status?"running":"abandoned"===e.status?"abandoned":null!=c?`elapsed ${(0,f.formatDuration)(c)}`:"terminal";return(0,p.jsxs)(u.default,{style:[T.jobRow,{borderColor:y.border}],children:[(0,p.jsx)(u.default,{style:[T.jobDot,{backgroundColor:o}]}),(0,p.jsxs)(u.default,{style:T.jobTextCol,children:[(0,p.jsx)(s.default,{style:[T.jobKind,{color:y.text,fontFamily:y.fontSans}],children:e.kind}),(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:y.textMuted,fontFamily:y.fontSans}],children:[e.id.slice(0,8)," | worker ",e.workerId??"--"," |"," ",(0,f.relativeMs)(e.updatedAt)]}),(0,p.jsxs)(s.default,{selectable:!0,style:[T.jobIdentifierLine,{color:y.textMuted,fontFamily:y.fontMono}],children:["jobId=",e.id," | workerId=",e.workerId??"--"]}),(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:y.textMuted,fontFamily:y.fontSans}],children:["priority ",l," | ",x]}),b.length>0?(0,p.jsx)(s.default,{style:[T.jobPhaseLine,{color:y.textMuted,fontFamily:y.fontMono}],children:b.join(" | ")}):null,null!=e.executionBudgetMs||null!=e.finalizationBudgetMs?(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:y.textMuted,fontFamily:y.fontSans}],children:["budget exec ",(0,f.formatDuration)(e.executionBudgetMs)," | finalize"," ",(0,f.formatDuration)(e.finalizationBudgetMs)]}):null]}),(0,p.jsx)(s.default,{style:[T.jobStatus,{color:o,fontFamily:y.fontSans}],children:e.status})]})}}),l[69]=N,l[70]=J,l[71]=P,l[72]=y,l[73]=ct):ct=l[73];l[74]!==y||l[75]!==_?(ft=_.length>0?(0,p.jsxs)(u.default,{style:T.completionStrip,children:[(0,p.jsx)(s.default,{style:[T.subSectionTitle,{color:y.text,fontFamily:y.fontSans}],children:"Recent Completions"}),_.slice(0,16).map(t=>{const e=(0,f.statusColor)(y,t.status);return(0,p.jsxs)(u.default,{style:[T.completionRow,{borderColor:y.border}],children:[(0,p.jsx)(s.default,{style:[T.completionMeta,{color:y.text,fontFamily:y.fontMono}],children:t.id.slice(0,8)}),(0,p.jsx)(s.default,{style:[T.completionLine,{color:y.textMuted,fontFamily:y.fontSans}],children:(0,f.clip)(t.message,110)}),(0,p.jsxs)(s.default,{style:[T.completionMeta,{color:y.textMuted,fontFamily:y.fontSans}],children:[t.branch??"--"," | ",t.commitSha?.slice(0,8)??"--"]}),(0,p.jsx)(s.default,{style:[T.completionStatus,{color:e,fontFamily:y.fontSans}],children:t.status})]},t.id)})]}):null,l[74]=y,l[75]=_,l[76]=ft):ft=l[76];l[77]!==rt||l[78]!==dt||l[79]!==ut||l[80]!==ct||l[81]!==ft?(mt=(0,p.jsxs)(u.default,{style:rt,children:[dt,ut,ct,ft]}),l[77]=rt,l[78]=dt,l[79]=ut,l[80]=ct,l[81]=ft,l[82]=mt):mt=l[82];l[83]!==y.border||l[84]!==y.panel?(bt=[T.jobsTracePane,{borderColor:y.border,backgroundColor:y.panel}],l[83]=y.border,l[84]=y.panel,l[85]=bt):bt=l[85];l[86]!==y.fontSans||l[87]!==y.text?(pt=(0,p.jsx)(s.default,{style:[T.sectionTitle,{color:y.text,fontFamily:y.fontSans}],children:"Tasks and Traces"}),l[86]=y.fontSans,l[87]=y.text,l[88]=pt):pt=l[88];l[89]!==y.fontMono||l[90]!==y.fontSans||l[91]!==y.mode?(xt={mode:y.mode,fontSans:y.fontSans,fontMono:y.fontMono},l[89]=y.fontMono,l[90]=y.fontSans,l[91]=y.mode,l[92]=xt):xt=l[92];l[93]!==E||l[94]!==L||l[95]!==xt?(yt=(0,p.jsx)(u.default,{style:T.tracePanelBody,children:(0,p.jsx)(c.TasksJobsLogs,{state:L,theme:xt,focusJobId:E})}),l[93]=E,l[94]=L,l[95]=xt,l[96]=yt):yt=l[96];l[97]!==bt||l[98]!==pt||l[99]!==yt?(jt=(0,p.jsxs)(u.default,{style:bt,children:[pt,yt]}),l[97]=bt,l[98]=pt,l[99]=yt,l[100]=jt):jt=l[100];l[101]!==it||l[102]!==mt||l[103]!==jt?(gt=(0,p.jsxs)(u.default,{style:it,children:[mt,jt]}),l[101]=it,l[102]=mt,l[103]=jt,l[104]=gt):gt=l[104];l[105]!==nt||l[106]!==gt?(ht=(0,p.jsxs)(u.default,{style:T.fill,children:[nt,gt]}),l[105]=nt,l[106]=gt,l[107]=ht):ht=l[107];return ht};var e=r(d[0]);r(d[1]);var o=t(r(d[2])),n=t(r(d[3])),l=t(r(d[4])),s=t(r(d[5])),u=t(r(d[6])),c=r(d[7]),f=r(d[8]),b=r(d[9]),p=r(d[10]);function x(t){if(!t)return null;try{const e=JSON.parse(t);if(!e||"object"!=typeof e||Array.isArray(e))return null;const o=e.requestId;return"string"==typeof o&&o.trim()?o.trim():null}catch{return null}}function y(t){if(!t)return null;const e=Date.parse(t);return Number.isFinite(e)?e:null}function j(t){if("number"==typeof t.durationMs&&Number.isFinite(t.durationMs)&&t.durationMs>=0)return Math.floor(t.durationMs);const e=y(t.completedAt)??y(t.abandonedAt)??y(t.failedAt)??("completed"===t.status||"failed"===t.status||"abandoned"===t.status?y(t.updatedAt):null),o=y(t.startedAt)??y(t.claimedAt)??y(t.enqueuedAt);return null==o||null==e||e<o?null:e-o}function h(t){return t.id}function S(t){return[t.id,t]}function M(t){return t.id}const T=l.default.create({fill:{flex:1},metricRow:{flexDirection:"row",flexWrap:"wrap",paddingHorizontal:20,paddingBottom:10},emptySubtitle:{fontSize:13,lineHeight:19},jobsLayout:{flex:1,flexDirection:"column",paddingHorizontal:20,paddingBottom:14},jobsLayoutWide:{flexDirection:"row"},jobsListPane:{flex:1,borderWidth:1,borderRadius:16,padding:12,marginBottom:10,minHeight:220},jobsTracePane:{flex:1.25,borderWidth:1,borderRadius:16,padding:12,minHeight:260},tracePanelBody:{flex:1,minHeight:260},sectionHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},sectionTitle:{fontSize:16,fontWeight:"700",marginBottom:8},filterMeta:{fontSize:11,marginBottom:8},clearFilterButton:{borderWidth:1,borderRadius:8,paddingHorizontal:9,paddingVertical:4,marginBottom:8,marginLeft:8},clearFilterLabel:{fontSize:10,fontWeight:"700",textTransform:"uppercase",letterSpacing:.2},subSectionTitle:{fontSize:13,fontWeight:"700",marginBottom:5},jobRow:{flexDirection:"row",alignItems:"center",borderBottomWidth:1,paddingVertical:8},jobDot:{width:8,height:8,borderRadius:4,marginRight:10},jobTextCol:{flex:1},jobKind:{fontSize:13,fontWeight:"700"},jobMeta:{fontSize:12,marginTop:2},jobIdentifierLine:{fontSize:11,marginTop:3},jobPhaseLine:{fontSize:11,marginTop:4},jobStatus:{fontSize:11,fontWeight:"700",textTransform:"uppercase"},completionStrip:{marginTop:8},completionRow:{borderTopWidth:1,paddingTop:8,marginTop:7},completionLine:{fontSize:12,marginBottom:3},completionMeta:{fontSize:11,marginBottom:2},completionStatus:{fontSize:11,fontWeight:"700",textTransform:"uppercase"}})},1018,[1134,21,308,417,136,123,310,1019,1014,1015,2]);
|
|
1029
|
+
__d(function(g,r,i,a,m,_e,d){"use strict";function t(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.JobsPane=function(t){const l=(0,e.c)(108),{theme:x,isWide:A,jobs:F,jobCounts:k,pendingSnapshot:B,completions:w,completionCounts:z,sessionState:C,requestFilterId:L,jobFilterId:q,onClearFilter:W}=t;let I;t:{if(q){let t;if(l[0]!==q||l[1]!==F){let e;l[3]!==q?(e=t=>t.id===q,l[3]=q,l[4]=e):e=l[4],t=F.filter(e),l[0]=q,l[1]=F,l[2]=t}else t=l[2];I=t;break t}if(L){let t;if(l[5]!==F||l[6]!==L){let e;l[8]!==L?(e=t=>h(t.params)===L,l[8]=L,l[9]=e):e=l[9],t=F.filter(e),l[5]=F,l[6]=L,l[7]=t}else t=l[7];I=t;break t}I=F}const R=I;let D;l[10]!==R?(D=R.slice(0,40),l[10]=R,l[11]=D):D=l[11];const $=D;let _;l[12]!==R?(_=new Set(R.map(M)),l[12]=R,l[13]=_):_=l[13];const P=_;let v;t:{if(0===P.size&&(L||q)){let t;l[14]===Symbol.for("react.memo_cache_sentinel")?(t=[],l[14]=t):t=l[14],v=t;break t}if(!L&&!q){v=w;break t}let t;if(l[15]!==w||l[16]!==P){let e;l[18]!==P?(e=t=>P.has(t.jobId),l[18]=P,l[19]=e):e=l[19],t=w.filter(e),l[15]=w,l[16]=P,l[17]=t}else t=l[17];v=t}const H=v;let V;l[20]!==B?(V=new Map(B.map(S)),l[20]=B,l[21]=V):V=l[21];const J=V,N=Boolean(L||q),E=q??R[0]?.id??null;let K;l[22]!==k?(K=(0,f.queueValue)(k,"pending"),l[22]=k,l[23]=K):K=l[23];const O=String(K);let Q,G;l[24]!==O||l[25]!==x?(Q=(0,p.jsx)(b.MetricTile,{title:"Queued Jobs",value:O,tone:"warning",theme:x}),l[24]=O,l[25]=x,l[26]=Q):Q=l[26];l[27]!==k?(G=(0,f.queueValue)(k,"claimed"),l[27]=k,l[28]=G):G=l[28];const U=String(G);let X,Y;l[29]!==U||l[30]!==x?(X=(0,p.jsx)(b.MetricTile,{title:"Running Jobs",value:U,tone:"accent",theme:x}),l[29]=U,l[30]=x,l[31]=X):X=l[31];l[32]!==z?(Y=(0,f.queueValue)(z,"processed"),l[32]=z,l[33]=Y):Y=l[33];const Z=String(Y);let tt;l[34]!==Z||l[35]!==x?(tt=(0,p.jsx)(b.MetricTile,{title:"Completions",value:Z,tone:"positive",theme:x}),l[34]=Z,l[35]=x,l[36]=tt):tt=l[36];const et=String((0,f.queueValue)(k,"failed")+(0,f.queueValue)(k,"abandoned")+(0,f.queueValue)(k,"publish_blocked"));let ot,nt;l[37]!==et||l[38]!==x?(ot=(0,p.jsx)(b.MetricTile,{title:"Failed / Abandoned / Blocked",value:et,tone:"danger",theme:x}),l[37]=et,l[38]=x,l[39]=ot):ot=l[39];l[40]!==X||l[41]!==tt||l[42]!==ot||l[43]!==Q?(nt=(0,p.jsxs)(u.default,{style:T.metricRow,children:[Q,X,tt,ot]}),l[40]=X,l[41]=tt,l[42]=ot,l[43]=Q,l[44]=nt):nt=l[44];const lt=A&&T.jobsLayoutWide;let it,at,rt,st,dt,ut,ct,ft,mt,bt,pt,ht,xt,yt,jt,gt;l[45]!==lt?(it=[T.jobsLayout,lt],l[45]=lt,l[46]=it):it=l[46];l[47]!==x.border||l[48]!==x.panel?(at=[T.jobsListPane,{borderColor:x.border,backgroundColor:x.panel}],l[47]=x.border,l[48]=x.panel,l[49]=at):at=l[49];l[50]!==x.fontSans||l[51]!==x.text?(rt=(0,p.jsx)(s.default,{style:[T.sectionTitle,{color:x.text,fontFamily:x.fontSans}],children:"Queue Activity"}),l[50]=x.fontSans,l[51]=x.text,l[52]=rt):rt=l[52];l[53]!==N||l[54]!==W||l[55]!==x.accent||l[56]!==x.border||l[57]!==x.fontSans||l[58]!==x.panelAlt?(st=N&&W?(0,p.jsx)(n.default,{style:[T.clearFilterButton,{borderColor:x.border,backgroundColor:x.panelAlt}],onPress:W,children:(0,p.jsx)(s.default,{style:[T.clearFilterLabel,{color:x.accent,fontFamily:x.fontSans}],children:"Clear Filter"})}):null,l[53]=N,l[54]=W,l[55]=x.accent,l[56]=x.border,l[57]=x.fontSans,l[58]=x.panelAlt,l[59]=st):st=l[59];l[60]!==rt||l[61]!==st?(dt=(0,p.jsxs)(u.default,{style:T.sectionHeader,children:[rt,st]}),l[60]=rt,l[61]=st,l[62]=dt):dt=l[62];l[63]!==N||l[64]!==q||l[65]!==L||l[66]!==x.fontMono||l[67]!==x.textMuted?(ut=N?(0,p.jsxs)(s.default,{style:[T.filterMeta,{color:x.textMuted,fontFamily:x.fontMono}],children:["request ",L?.slice(0,8)??"--"," | job"," ",q?.slice(0,8)??"--"]}):null,l[63]=N,l[64]=q,l[65]=L,l[66]=x.fontMono,l[67]=x.textMuted,l[68]=ut):ut=l[68];l[69]!==N||l[70]!==J||l[71]!==$||l[72]!==x?(ct=0===$.length?(0,p.jsx)(s.default,{style:[T.emptySubtitle,{color:x.textMuted,fontFamily:x.fontSans}],children:N?"No jobs matched the selected request/job.":"No job rows yet."}):(0,p.jsx)(o.default,{data:$,keyExtractor:j,renderItem:t=>{const{item:e}=t,o=(0,f.statusColor)(x,e.status),n=J.get(e.id),l=e.priority??"normal",c=y(e),b=[e.enqueuedAt?`enq ${(0,f.prettyTs)(e.enqueuedAt)}`:null,e.claimedAt?`claim ${(0,f.prettyTs)(e.claimedAt)}`:null,e.startedAt?`start ${(0,f.prettyTs)(e.startedAt)}`:null,e.firstLogAt?`first-log ${(0,f.prettyTs)(e.firstLogAt)}`:null,e.completedAt?`done ${(0,f.prettyTs)(e.completedAt)}`:null,e.abandonedAt?`abandon ${(0,f.prettyTs)(e.abandonedAt)}`:null,e.publishBlockedAt?`blocked ${(0,f.prettyTs)(e.publishBlockedAt)}`:null,e.failedAt?`fail ${(0,f.prettyTs)(e.failedAt)}`:null].filter(Boolean);("completed"===e.status||"failed"===e.status||"abandoned"===e.status||"publish_blocked"===e.status)&&null!=c&&b.push(`elapsed ${(0,f.formatDuration)(c)}`);const h="pending"===e.status&&n?`queue #${n.position} (eta ${(0,f.formatEtaMs)(n.etaMs)})`:"claimed"===e.status?"running":"abandoned"===e.status?"abandoned":"publish_blocked"===e.status?"publish blocked":null!=c?`elapsed ${(0,f.formatDuration)(c)}`:"terminal";return(0,p.jsxs)(u.default,{style:[T.jobRow,{borderColor:x.border}],children:[(0,p.jsx)(u.default,{style:[T.jobDot,{backgroundColor:o}]}),(0,p.jsxs)(u.default,{style:T.jobTextCol,children:[(0,p.jsx)(s.default,{style:[T.jobKind,{color:x.text,fontFamily:x.fontSans}],children:e.kind}),(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:x.textMuted,fontFamily:x.fontSans}],children:[e.id.slice(0,8)," | worker ",e.workerId??"--"," |"," ",(0,f.relativeMs)(e.updatedAt)]}),(0,p.jsxs)(s.default,{selectable:!0,style:[T.jobIdentifierLine,{color:x.textMuted,fontFamily:x.fontMono}],children:["jobId=",e.id," | workerId=",e.workerId??"--"]}),(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:x.textMuted,fontFamily:x.fontSans}],children:["priority ",l," | ",h]}),b.length>0?(0,p.jsx)(s.default,{style:[T.jobPhaseLine,{color:x.textMuted,fontFamily:x.fontMono}],children:b.join(" | ")}):null,null!=e.executionBudgetMs||null!=e.finalizationBudgetMs?(0,p.jsxs)(s.default,{style:[T.jobMeta,{color:x.textMuted,fontFamily:x.fontSans}],children:["budget exec ",(0,f.formatDuration)(e.executionBudgetMs)," | finalize"," ",(0,f.formatDuration)(e.finalizationBudgetMs)]}):null]}),(0,p.jsx)(s.default,{style:[T.jobStatus,{color:o,fontFamily:x.fontSans}],children:e.status})]})}}),l[69]=N,l[70]=J,l[71]=$,l[72]=x,l[73]=ct):ct=l[73];l[74]!==x||l[75]!==H?(ft=H.length>0?(0,p.jsxs)(u.default,{style:T.completionStrip,children:[(0,p.jsx)(s.default,{style:[T.subSectionTitle,{color:x.text,fontFamily:x.fontSans}],children:"Recent Completions"}),H.slice(0,16).map(t=>{const e=(0,f.statusColor)(x,t.status);return(0,p.jsxs)(u.default,{style:[T.completionRow,{borderColor:x.border}],children:[(0,p.jsx)(s.default,{style:[T.completionMeta,{color:x.text,fontFamily:x.fontMono}],children:t.id.slice(0,8)}),(0,p.jsx)(s.default,{style:[T.completionLine,{color:x.textMuted,fontFamily:x.fontSans}],children:(0,f.clip)(t.message,110)}),(0,p.jsxs)(s.default,{style:[T.completionMeta,{color:x.textMuted,fontFamily:x.fontSans}],children:[t.branch??"--"," | ",t.commitSha?.slice(0,8)??"--"]}),(0,p.jsx)(s.default,{style:[T.completionStatus,{color:e,fontFamily:x.fontSans}],children:t.status})]},t.id)})]}):null,l[74]=x,l[75]=H,l[76]=ft):ft=l[76];l[77]!==at||l[78]!==dt||l[79]!==ut||l[80]!==ct||l[81]!==ft?(mt=(0,p.jsxs)(u.default,{style:at,children:[dt,ut,ct,ft]}),l[77]=at,l[78]=dt,l[79]=ut,l[80]=ct,l[81]=ft,l[82]=mt):mt=l[82];l[83]!==x.border||l[84]!==x.panel?(bt=[T.jobsTracePane,{borderColor:x.border,backgroundColor:x.panel}],l[83]=x.border,l[84]=x.panel,l[85]=bt):bt=l[85];l[86]!==x.fontSans||l[87]!==x.text?(pt=(0,p.jsx)(s.default,{style:[T.sectionTitle,{color:x.text,fontFamily:x.fontSans}],children:"Tasks and Traces"}),l[86]=x.fontSans,l[87]=x.text,l[88]=pt):pt=l[88];l[89]!==x.fontMono||l[90]!==x.fontSans||l[91]!==x.mode?(ht={mode:x.mode,fontSans:x.fontSans,fontMono:x.fontMono},l[89]=x.fontMono,l[90]=x.fontSans,l[91]=x.mode,l[92]=ht):ht=l[92];l[93]!==E||l[94]!==C||l[95]!==ht?(xt=(0,p.jsx)(u.default,{style:T.tracePanelBody,children:(0,p.jsx)(c.TasksJobsLogs,{state:C,theme:ht,focusJobId:E})}),l[93]=E,l[94]=C,l[95]=ht,l[96]=xt):xt=l[96];l[97]!==bt||l[98]!==pt||l[99]!==xt?(yt=(0,p.jsxs)(u.default,{style:bt,children:[pt,xt]}),l[97]=bt,l[98]=pt,l[99]=xt,l[100]=yt):yt=l[100];l[101]!==it||l[102]!==mt||l[103]!==yt?(jt=(0,p.jsxs)(u.default,{style:it,children:[mt,yt]}),l[101]=it,l[102]=mt,l[103]=yt,l[104]=jt):jt=l[104];l[105]!==nt||l[106]!==jt?(gt=(0,p.jsxs)(u.default,{style:T.fill,children:[nt,jt]}),l[105]=nt,l[106]=jt,l[107]=gt):gt=l[107];return gt};var e=r(d[0]);r(d[1]);var o=t(r(d[2])),n=t(r(d[3])),l=t(r(d[4])),s=t(r(d[5])),u=t(r(d[6])),c=r(d[7]),f=r(d[8]),b=r(d[9]),p=r(d[10]);function h(t){if(!t)return null;try{const e=JSON.parse(t);if(!e||"object"!=typeof e||Array.isArray(e))return null;const o=e.requestId;return"string"==typeof o&&o.trim()?o.trim():null}catch{return null}}function x(t){if(!t)return null;const e=Date.parse(t);return Number.isFinite(e)?e:null}function y(t){if("number"==typeof t.durationMs&&Number.isFinite(t.durationMs)&&t.durationMs>=0)return Math.floor(t.durationMs);const e=x(t.completedAt)??x(t.abandonedAt)??x(t.publishBlockedAt)??x(t.failedAt)??("completed"===t.status||"failed"===t.status||"abandoned"===t.status||"publish_blocked"===t.status?x(t.updatedAt):null),o=x(t.startedAt)??x(t.claimedAt)??x(t.enqueuedAt);return null==o||null==e||e<o?null:e-o}function j(t){return t.id}function S(t){return[t.id,t]}function M(t){return t.id}const T=l.default.create({fill:{flex:1},metricRow:{flexDirection:"row",flexWrap:"wrap",paddingHorizontal:20,paddingBottom:10},emptySubtitle:{fontSize:13,lineHeight:19},jobsLayout:{flex:1,flexDirection:"column",paddingHorizontal:20,paddingBottom:14},jobsLayoutWide:{flexDirection:"row"},jobsListPane:{flex:1,borderWidth:1,borderRadius:16,padding:12,marginBottom:10,minHeight:220},jobsTracePane:{flex:1.25,borderWidth:1,borderRadius:16,padding:12,minHeight:260},tracePanelBody:{flex:1,minHeight:260},sectionHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},sectionTitle:{fontSize:16,fontWeight:"700",marginBottom:8},filterMeta:{fontSize:11,marginBottom:8},clearFilterButton:{borderWidth:1,borderRadius:8,paddingHorizontal:9,paddingVertical:4,marginBottom:8,marginLeft:8},clearFilterLabel:{fontSize:10,fontWeight:"700",textTransform:"uppercase",letterSpacing:.2},subSectionTitle:{fontSize:13,fontWeight:"700",marginBottom:5},jobRow:{flexDirection:"row",alignItems:"center",borderBottomWidth:1,paddingVertical:8},jobDot:{width:8,height:8,borderRadius:4,marginRight:10},jobTextCol:{flex:1},jobKind:{fontSize:13,fontWeight:"700"},jobMeta:{fontSize:12,marginTop:2},jobIdentifierLine:{fontSize:11,marginTop:3},jobPhaseLine:{fontSize:11,marginTop:4},jobStatus:{fontSize:11,fontWeight:"700",textTransform:"uppercase"},completionStrip:{marginTop:8},completionRow:{borderTopWidth:1,paddingTop:8,marginTop:7},completionLine:{fontSize:12,marginBottom:3},completionMeta:{fontSize:11,marginBottom:2},completionStatus:{fontSize:11,fontWeight:"700",textTransform:"uppercase"}})},1018,[1134,21,308,417,136,123,310,1019,1014,1015,2]);
|
|
1030
1030
|
__d(function(g,r,i,_a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.TasksJobsLogs=function(e){const a=(0,t.c)(37),{state:c,theme:f,focusJobId:b}=e,[p,y]=(0,o.useState)(null),h=f?.mode??"light";let x;a[0]!==h?(x=S(h),a[0]=h,a[1]=x):x=a[1];const j=x;let k;a[2]!==j||a[3]!==f?(k=_(j,f),a[2]=j,a[3]=f,a[4]=k):k=a[4];const I=k;let T,F,B,C,w,E,z;if(a[5]!==c.tasks){F=Array.from(c.tasks.values()).sort(J),T=new Set;for(const e of F)for(const t of e.jobIds)T.add(t);a[5]=c.tasks,a[6]=T,a[7]=F}else T=a[6],F=a[7];a[8]!==b||a[9]!==F?(B=()=>{if(!b)return;const e=F.find(e=>e.jobIds.includes(b));e&&y(e.taskId)},C=[b,F],a[8]=b,a[9]=F,a[10]=B,a[11]=C):(B=a[10],C=a[11]);if((0,o.useEffect)(B,C),0===F.length&&0===c.jobs.size){let e,t;return a[12]!==I.muted?(e=(0,u.jsx)(s.default,{style:I.muted,children:"No tasks or jobs yet"}),a[12]=I.muted,a[13]=e):e=a[13],a[14]!==I.emptyContainer||a[15]!==e?(t=(0,u.jsx)(n.default,{style:I.emptyContainer,children:e}),a[14]=I.emptyContainer,a[15]=e,a[16]=t):t=a[16],t}a[17]!==p||a[18]!==b||a[19]!==j||a[20]!==c.jobs||a[21]!==c.logs||a[22]!==I||a[23]!==F?(w=F.length>0?(0,u.jsxs)(n.default,{style:I.section,children:[(0,u.jsx)(s.default,{style:I.sectionTitle,children:"Tasks"}),F.map(e=>{const t=e.jobIds.map(e=>c.jobs.get(e)).filter(Boolean),o={claimed:0,enqueued:1,completed:2,failed:3};return t.sort((e,t)=>{const n=o[e.status]??9,s=o[t.status]??9;return n!==s?n-s:e.ts.localeCompare(t.ts)}),(0,u.jsx)(D,{task:e,jobs:t,logs:c.logs,expanded:p===e.taskId,onToggle:()=>y(p===e.taskId?null:e.taskId),focusJobId:b,styles:I,palette:j},e.taskId)})]}):null,a[17]=p,a[18]=b,a[19]=j,a[20]=c.jobs,a[21]=c.logs,a[22]=I,a[23]=F,a[24]=w):w=a[24];a[25]!==b||a[26]!==j||a[27]!==c.jobs||a[28]!==c.logs||a[29]!==I||a[30]!==T?(E=(0,u.jsx)(R,{jobs:c.jobs,logs:c.logs,taskJobIds:T,focusJobId:b,styles:I,palette:j}),a[25]=b,a[26]=j,a[27]=c.jobs,a[28]=c.logs,a[29]=I,a[30]=T,a[31]=E):E=a[31];a[32]!==I.container||a[33]!==I.content||a[34]!==w||a[35]!==E?(z=(0,u.jsxs)(l.default,{style:I.container,contentContainerStyle:I.content,children:[w,E]}),a[32]=I.container,a[33]=I.content,a[34]=w,a[35]=E,a[36]=z):z=a[36];return z};var t=r(d[0]),o=r(d[1]),n=e(r(d[2])),s=e(r(d[3])),a=e(r(d[4])),l=e(r(d[5])),c=e(r(d[6]));r(d[7]);var u=r(d[8]);const f="__PUSHPALS_OH_RESULT__ ",b="___RESULT___ ",p=500,y=/\x1b\[[0-9;]*m/g;const h=(function(e){const t=Number.parseInt(String(e??"").trim(),10);return Number.isFinite(t)?Math.max(20,Math.min(500,t)):100})(void 0);async function x(e){const t=String(e??"").trim();if(!t)return!1;try{const e=globalThis.navigator,o=e?.clipboard?.writeText;return"function"==typeof o&&(await o(t),!0)}catch{return!1}}const j={bg:"#F4F8FB",panel:"#FFFFFF",panelAlt:"#EEF4F8",border:"#D2E0E8",text:"#112230",textMuted:"#547086",accent:"#007E77",success:"#169A58",warning:"#C7851E",danger:"#D64553",reasoningText:"#1D4E89",reasoningBg:"#EAF4FF",actionText:"#0F6C48",actionBg:"#E9FBF5",infoText:"#334155",infoBg:"#F4F8FB",errorText:"#A22A35",errorBg:"#FEECEF"},k={bg:"#14212A",panel:"#16222B",panelAlt:"#1B2A35",border:"#284050",text:"#EAF3F6",textMuted:"#97B3C2",accent:"#2FD6C8",success:"#5DDD8B",warning:"#FFB95A",danger:"#FF6B72",reasoningText:"#9BC6FF",reasoningBg:"#1D2A40",actionText:"#8EF5BD",actionBg:"#163628",infoText:"#D2E3ED",infoBg:"#1A2934",errorText:"#FFACB5",errorBg:"#3A1B22"};function S(e){return"dark"===e?k:j}function I(e,t){switch(e){case"completed":return t.success;case"failed":return t.danger;case"claimed":case"started":case"in_progress":return t.warning;default:return t.accent}}function T(e){return e.replace(y,"").replace(/\s+/g," ").trim()}function F(e){return e.length<=p?e:`${e.slice(0,497)}...`}function B(e){if(!e)return"";const t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleTimeString():""}function C(e,t){const o=e.toLowerCase();return"stderr"===t||o.includes("error")||o.includes("failed")||o.includes("traceback")||o.includes("exception")?"error":/\b(think|reason|analysis|plan|decide|why|because|approach|strategy)\b/i.test(o)?"reasoning":/\b(run|running|execute|executing|write|patch|edit|search|read|fetch|merge|commit|push|claim)\b/i.test(o)?"action":"info"}function w(e,t,o,n,s,a){const l=n.trim();if(!l)return;const c=`${o}|${l}`;t.has(c)||(t.add(c),e.push({key:`${o}:${e.length}`,source:o,line:l,tone:s,ts:a}))}function E(e,t,o,n,s){for(const a of n.split(/\r?\n/).map(e=>F(T(e))).filter(Boolean))w(e,t,o,a,s)}function z(e){if(e.length<=h)return e;const t=e.length-h,o=e.slice(-h);return[{key:`trace:compacted:${e.length}`,source:"trace",line:`Compacted trace: showing latest ${h} lines (${t} older lines hidden).`,tone:"info"},...o]}function H(e,t){const o=[],n=new Set;if(e.summary&&E(o,n,"summary",e.summary,"reasoning"),e.message&&E(o,n,"failure",e.message,"error"),e.detail&&E(o,n,"detail",e.detail,"error"),e.params&&"object"==typeof e.params){const t="string"==typeof e.params.instruction?e.params.instruction:"",s="string"==typeof e.params.targetPath?e.params.targetPath:"";t&&E(o,n,"request",`Instruction: ${t}`,"reasoning"),s&&E(o,n,"request",`Target path: ${s}`,"action")}if(Array.isArray(e.artifacts))for(const t of e.artifacts){if(!t?.text)continue;const e=`artifact.${t.kind||"text"}`,s="stderr"===t.kind?"error":"info";E(o,n,e,t.text,s)}for(const e of t){const t=T(e.line||"");if(t&&!t.startsWith(b)){if(t.startsWith(f)){const s=t.slice(f.length).trim();if(!s)continue;try{const e=JSON.parse(s);"string"==typeof e.summary&&E(o,n,"openhands.summary",e.summary,"reasoning"),"string"==typeof e.stdout&&E(o,n,"openhands.stdout",e.stdout,"info"),"string"==typeof e.stderr&&E(o,n,"openhands.stderr",e.stderr,"error")}catch{E(o,n,"openhands",s,C(s,e.stream))}continue}w(o,n,`log.${e.stream}`,t,C(t,e.stream),e.ts)}}return z(o)}function _(e,t){const o=t?.fontSans,n=t?.fontMono??"monospace";return c.default.create({container:{flex:1,backgroundColor:e.bg},content:{padding:12,paddingBottom:16},emptyContainer:{flex:1,alignItems:"center",justifyContent:"center",padding:24},section:{marginBottom:16},sectionTitle:{fontSize:13,fontWeight:"700",color:e.textMuted,textTransform:"uppercase",letterSpacing:.5,marginBottom:8,fontFamily:o},taskCard:{backgroundColor:e.panel,borderRadius:8,marginBottom:8,borderLeftWidth:3,borderLeftColor:e.border,boxShadow:"0 1px 3px rgba(0,0,0,0.12)"},taskHeader:{flexDirection:"row",alignItems:"center",padding:10,gap:8},taskTitle:{flex:1,fontSize:14,fontWeight:"600",color:e.text,fontFamily:o},taskBody:{paddingHorizontal:10,paddingBottom:10},desc:{fontSize:12,color:e.textMuted,marginBottom:4,fontFamily:o},progressMsg:{fontSize:12,color:e.warning,fontStyle:"italic",marginBottom:8,fontFamily:o},jobCard:{backgroundColor:e.panelAlt,borderRadius:6,marginTop:6,borderWidth:1,borderColor:e.border},jobCardFocused:{borderColor:e.accent,borderWidth:2},jobHeader:{flexDirection:"row",alignItems:"center",padding:8,gap:6,flexWrap:"wrap"},jobBody:{borderTopWidth:1,borderTopColor:e.border,paddingBottom:8},jobKind:{fontSize:13,fontWeight:"500",color:e.text,fontFamily:o},workerId:{fontSize:11,color:e.accent,fontFamily:n},logCount:{fontSize:11,color:e.textMuted,marginLeft:"auto",fontFamily:o},jobSummary:{fontSize:12,color:e.text,paddingHorizontal:8,paddingTop:8,paddingBottom:4,fontFamily:o},identifierSection:{paddingHorizontal:8,paddingTop:6,paddingBottom:2},identifierRow:{flexDirection:"column",alignItems:"flex-start"},identifierText:{fontSize:11,color:e.textMuted,fontFamily:n},copyIdsButton:{marginTop:6,alignSelf:"flex-start",borderRadius:6,borderWidth:1,borderColor:e.border,backgroundColor:e.panel,paddingHorizontal:8,paddingVertical:4},copyIdsButtonText:{fontSize:11,fontWeight:"600",color:e.text,fontFamily:o},jobError:{fontSize:12,color:e.danger,paddingHorizontal:8,paddingTop:4,fontFamily:o},jobErrorDetail:{fontSize:11,color:e.danger,paddingHorizontal:8,paddingTop:2,fontFamily:n},traceSection:{marginTop:4},traceScroll:{maxHeight:220},traceLine:{fontSize:11,paddingHorizontal:8,paddingVertical:2,fontFamily:n},traceReasoning:{color:e.reasoningText,backgroundColor:e.reasoningBg},traceAction:{color:e.actionText,backgroundColor:e.actionBg},traceInfo:{color:e.infoText,backgroundColor:e.infoBg},traceError:{color:e.errorText,backgroundColor:e.errorBg},rawToggle:{marginTop:6,marginHorizontal:8,paddingHorizontal:8,paddingVertical:6,borderRadius:6,borderWidth:1,borderColor:e.border,backgroundColor:e.panel,alignSelf:"flex-start"},rawToggleText:{fontSize:11,color:e.text,fontWeight:"600",fontFamily:o},logSections:{borderTopWidth:1,borderTopColor:e.border,marginTop:6},streamLabel:{fontSize:10,fontWeight:"700",color:e.textMuted,textTransform:"uppercase",paddingHorizontal:8,paddingTop:6,letterSpacing:.5,fontFamily:o},logScroll:{maxHeight:200},logLine:{fontSize:11,paddingHorizontal:8,paddingVertical:1,fontFamily:n},logStdout:{color:e.infoText,backgroundColor:e.actionBg},logStderr:{color:e.errorText,backgroundColor:e.errorBg},dot:{width:8,height:8,borderRadius:4},statusBadge:{fontSize:11,fontWeight:"600",fontFamily:o},chevron:{fontSize:12,color:e.textMuted,fontFamily:o},muted:{fontSize:12,color:e.textMuted,fontStyle:"italic",paddingHorizontal:8,fontFamily:o}})}function A(e,t){switch(e){case"reasoning":return t.traceReasoning;case"action":return t.traceAction;case"error":return t.traceError;default:return t.traceInfo}}function D(e){const o=(0,t.c)(42),{task:l,jobs:c,logs:f,expanded:b,onToggle:p,focusJobId:y,styles:h,palette:x}=e;let j;o[0]!==x||o[1]!==l.status?(j=I(l.status,x),o[0]=x,o[1]=l.status,o[2]=j):j=o[2];const k=j;let S,T,F,B,C,w;o[3]!==k?(S={backgroundColor:k},o[3]=k,o[4]=S):S=o[4],o[5]!==h.dot||o[6]!==S?(T=(0,u.jsx)(n.default,{style:[h.dot,S]}),o[5]=h.dot,o[6]=S,o[7]=T):T=o[7],o[8]!==h.taskTitle||o[9]!==l.title?(F=(0,u.jsx)(s.default,{style:h.taskTitle,numberOfLines:1,children:l.title}),o[8]=h.taskTitle,o[9]=l.title,o[10]=F):F=o[10],o[11]!==k?(B={color:k},o[11]=k,o[12]=B):B=o[12],o[13]!==h.statusBadge||o[14]!==B?(C=[h.statusBadge,B],o[13]=h.statusBadge,o[14]=B,o[15]=C):C=o[15],o[16]!==C||o[17]!==l.status?(w=(0,u.jsx)(s.default,{style:C,children:l.status}),o[16]=C,o[17]=l.status,o[18]=w):w=o[18];const E=b?"v":">";let z,H,_,A;return o[19]!==h.chevron||o[20]!==E?(z=(0,u.jsx)(s.default,{style:h.chevron,children:E}),o[19]=h.chevron,o[20]=E,o[21]=z):z=o[21],o[22]!==p||o[23]!==h.taskHeader||o[24]!==T||o[25]!==F||o[26]!==w||o[27]!==z?(H=(0,u.jsxs)(a.default,{onPress:p,style:h.taskHeader,children:[T,F,w,z]}),o[22]=p,o[23]=h.taskHeader,o[24]=T,o[25]=F,o[26]=w,o[27]=z,o[28]=H):H=o[28],o[29]!==b||o[30]!==y||o[31]!==c||o[32]!==f||o[33]!==x||o[34]!==h||o[35]!==l.description||o[36]!==l.latestProgress?(_=b&&(0,u.jsxs)(n.default,{style:h.taskBody,children:[l.description?(0,u.jsx)(s.default,{style:h.desc,children:l.description}):null,l.latestProgress?(0,u.jsx)(s.default,{style:h.progressMsg,children:l.latestProgress}):null,0===c.length&&(0,u.jsx)(s.default,{style:h.muted,children:"No jobs yet"}),c.map(e=>(0,u.jsx)(v,{job:e,logs:f.get(e.jobId)??[],forceExpanded:y===e.jobId,focused:y===e.jobId,styles:h,palette:x},e.jobId))]}),o[29]=b,o[30]=y,o[31]=c,o[32]=f,o[33]=x,o[34]=h,o[35]=l.description,o[36]=l.latestProgress,o[37]=_):_=o[37],o[38]!==h.taskCard||o[39]!==H||o[40]!==_?(A=(0,u.jsxs)(n.default,{style:h.taskCard,children:[H,_]}),o[38]=h.taskCard,o[39]=H,o[40]=_,o[41]=A):A=o[41],A}function v(e){const c=(0,t.c)(79),{job:f,logs:b,forceExpanded:p,focused:y,styles:h,palette:j}=e,k=void 0!==p&&p,S=void 0!==y&&y,[T,F]=(0,o.useState)(!1),[C,w]=(0,o.useState)(!1),[E,z]=(0,o.useState)("idle"),_=(0,o.useRef)(null);let D;c[0]!==f.status||c[1]!==j?(D=I(f.status,j),c[0]=f.status,c[1]=j,c[2]=D):D=c[2];const v=D;let R,P,J,q,N;c[3]!==k?(R=()=>{k&&F(!0)},c[3]=k,c[4]=R):R=c[4],c[5]!==k||c[6]!==f.jobId?(P=[k,f.jobId],c[5]=k,c[6]=f.jobId,c[7]=P):P=c[7],(0,o.useEffect)(R,P),c[8]===Symbol.for("react.memo_cache_sentinel")?(J=()=>()=>{_.current&&clearTimeout(_.current)},q=[],c[8]=J,c[9]=q):(J=c[8],q=c[9]),(0,o.useEffect)(J,q),c[10]!==f.jobId||c[11]!==f.workerId?(N=async()=>{const e=[`jobId=${f.jobId}`];f.workerId&&e.push(`workerId=${f.workerId}`);const t=await x(e.join("\n"));z(t?"copied":"unavailable"),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>z("idle"),t?1600:2600)},c[10]=f.jobId,c[11]=f.workerId,c[12]=N):N=c[12];const O=N;let K;c[13]!==b?(K=b.filter(M).sort(W),c[13]=b,c[14]=K):K=c[14];const U=K;let V;c[15]!==b?(V=b.filter($).sort(L),c[15]=b,c[16]=V):V=c[16];const G=V;let Q;c[17]!==f||c[18]!==b?(Q=H(f,b),c[17]=f,c[18]=b,c[19]=Q):Q=c[19];const X=Q,Y=U.length+G.length,Z=S&&h.jobCardFocused;let ee,te,oe,re,ne,se,ae,le,ie,de;c[20]!==h.jobCard||c[21]!==Z?(ee=[h.jobCard,Z],c[20]=h.jobCard,c[21]=Z,c[22]=ee):ee=c[22],c[23]!==T?(te=()=>F(!T),c[23]=T,c[24]=te):te=c[24],c[25]!==v?(oe={backgroundColor:v},c[25]=v,c[26]=oe):oe=c[26],c[27]!==h.dot||c[28]!==oe?(re=(0,u.jsx)(n.default,{style:[h.dot,oe]}),c[27]=h.dot,c[28]=oe,c[29]=re):re=c[29],c[30]!==f.kind||c[31]!==h.jobKind?(ne=(0,u.jsx)(s.default,{style:h.jobKind,children:f.kind}),c[30]=f.kind,c[31]=h.jobKind,c[32]=ne):ne=c[32],c[33]!==v?(se={color:v},c[33]=v,c[34]=se):se=c[34],c[35]!==h.statusBadge||c[36]!==se?(ae=[h.statusBadge,se],c[35]=h.statusBadge,c[36]=se,c[37]=ae):ae=c[37],c[38]!==f.status||c[39]!==ae?(le=(0,u.jsx)(s.default,{style:ae,children:f.status}),c[38]=f.status,c[39]=ae,c[40]=le):le=c[40],c[41]!==f.workerId||c[42]!==h.workerId?(ie=f.workerId?(0,u.jsxs)(s.default,{style:h.workerId,children:["@",f.workerId]}):null,c[41]=f.workerId,c[42]=h.workerId,c[43]=ie):ie=c[43],c[44]!==h.logCount||c[45]!==Y||c[46]!==X.length?(de=X.length>0||Y>0?(0,u.jsxs)(s.default,{style:h.logCount,children:[X.length," trace / ",Y," raw"]}):null,c[44]=h.logCount,c[45]=Y,c[46]=X.length,c[47]=de):de=c[47];const ce=T?"v":">";let ue,fe,ge,me;return c[48]!==h.chevron||c[49]!==ce?(ue=(0,u.jsx)(s.default,{style:h.chevron,children:ce}),c[48]=h.chevron,c[49]=ce,c[50]=ue):ue=c[50],c[51]!==h.jobHeader||c[52]!==te||c[53]!==re||c[54]!==ne||c[55]!==le||c[56]!==ie||c[57]!==de||c[58]!==ue?(fe=(0,u.jsxs)(a.default,{onPress:te,style:h.jobHeader,children:[re,ne,le,ie,de,ue]}),c[51]=h.jobHeader,c[52]=te,c[53]=re,c[54]=ne,c[55]=le,c[56]=ie,c[57]=de,c[58]=ue,c[59]=fe):fe=c[59],c[60]!==E||c[61]!==T||c[62]!==O||c[63]!==f.detail||c[64]!==f.jobId||c[65]!==f.message||c[66]!==f.summary||c[67]!==f.workerId||c[68]!==C||c[69]!==G||c[70]!==U||c[71]!==h||c[72]!==Y||c[73]!==X?(ge=T&&(0,u.jsxs)(n.default,{style:h.jobBody,children:[f.summary?(0,u.jsx)(s.default,{style:h.jobSummary,children:f.summary}):null,(0,u.jsxs)(n.default,{style:h.identifierSection,children:[(0,u.jsx)(s.default,{style:h.streamLabel,children:"Identifiers"}),(0,u.jsxs)(n.default,{style:h.identifierRow,children:[(0,u.jsxs)(s.default,{style:h.identifierText,selectable:!0,children:["jobId=",f.jobId]}),f.workerId?(0,u.jsxs)(s.default,{style:h.identifierText,selectable:!0,children:["workerId=",f.workerId]}):(0,u.jsx)(s.default,{style:h.identifierText,children:"workerId=--"})]}),(0,u.jsx)(a.default,{style:h.copyIdsButton,onPress:O,children:(0,u.jsx)(s.default,{style:h.copyIdsButtonText,children:"copied"===E?"Copied IDs":"unavailable"===E?"Select text to copy":"Copy IDs"})})]}),f.message?(0,u.jsx)(s.default,{style:h.jobError,children:f.message}):null,f.detail?(0,u.jsx)(s.default,{style:h.jobErrorDetail,children:f.detail}):null,X.length>0?(0,u.jsxs)(n.default,{style:h.traceSection,children:[(0,u.jsx)(s.default,{style:h.streamLabel,children:"Trace"}),(0,u.jsx)(l.default,{style:h.traceScroll,nestedScrollEnabled:!0,children:X.map(e=>(0,u.jsxs)(s.default,{style:[h.traceLine,A(e.tone,h)],selectable:!0,children:[e.ts?`${B(e.ts)} `:"","[",e.source,"]"," ",e.line]},e.key))})]}):(0,u.jsx)(s.default,{style:h.muted,children:"No trace output captured for this job."}),Y>0?(0,u.jsx)(a.default,{style:h.rawToggle,onPress:()=>w(!C),children:(0,u.jsx)(s.default,{style:h.rawToggleText,children:C?"Hide raw logs":`Show raw logs (${Y})`})}):null,C&&Y>0?(0,u.jsxs)(n.default,{style:h.logSections,children:[U.length>0?(0,u.jsxs)(n.default,{children:[(0,u.jsx)(s.default,{style:h.streamLabel,children:"STDOUT"}),(0,u.jsx)(l.default,{style:h.logScroll,nestedScrollEnabled:!0,children:U.map(e=>(0,u.jsxs)(s.default,{style:[h.logLine,h.logStdout],selectable:!0,children:[e.ts?`${B(e.ts)} `:"",e.line]},`stdout-${e.seq}`))})]}):null,G.length>0?(0,u.jsxs)(n.default,{children:[(0,u.jsx)(s.default,{style:h.streamLabel,children:"STDERR"}),(0,u.jsx)(l.default,{style:h.logScroll,nestedScrollEnabled:!0,children:G.map(e=>(0,u.jsxs)(s.default,{style:[h.logLine,h.logStderr],selectable:!0,children:[e.ts?`${B(e.ts)} `:"",e.line]},`stderr-${e.seq}`))})]}):null]}):null]}),c[60]=E,c[61]=T,c[62]=O,c[63]=f.detail,c[64]=f.jobId,c[65]=f.message,c[66]=f.summary,c[67]=f.workerId,c[68]=C,c[69]=G,c[70]=U,c[71]=h,c[72]=Y,c[73]=X,c[74]=ge):ge=c[74],c[75]!==ee||c[76]!==fe||c[77]!==ge?(me=(0,u.jsxs)(n.default,{style:ee,children:[fe,ge]}),c[75]=ee,c[76]=fe,c[77]=ge,c[78]=me):me=c[78],me}function L(e,t){return e.seq-t.seq}function $(e){return"stderr"===e.stream}function W(e,t){return e.seq-t.seq}function M(e){return"stdout"===e.stream}function R(e){const o=(0,t.c)(15),{jobs:a,logs:l,taskJobIds:c,focusJobId:f,styles:b,palette:p}=e;let y,h;if(o[0]!==f||o[1]!==a||o[2]!==l||o[3]!==p||o[4]!==b||o[5]!==c){h=Symbol.for("react.early_return_sentinel");e:{const e=Array.from(a.values()).filter(e=>!c.has(e.jobId)).sort(P);if(0===e.length){h=null;break e}let t,x;o[8]!==b.sectionTitle?(t=(0,u.jsx)(s.default,{style:b.sectionTitle,children:"Standalone Jobs"}),o[8]=b.sectionTitle,o[9]=t):t=o[9],o[10]!==f||o[11]!==l||o[12]!==p||o[13]!==b?(x=e=>(0,u.jsx)(v,{job:e,logs:l.get(e.jobId)??[],forceExpanded:f===e.jobId,focused:f===e.jobId,styles:b,palette:p},e.jobId),o[10]=f,o[11]=l,o[12]=p,o[13]=b,o[14]=x):x=o[14],y=(0,u.jsxs)(n.default,{style:b.section,children:[t,e.map(x)]})}o[0]=f,o[1]=a,o[2]=l,o[3]=p,o[4]=b,o[5]=c,o[6]=y,o[7]=h}else y=o[6],h=o[7];return h!==Symbol.for("react.early_return_sentinel")?h:y}function P(e,t){return t.ts.localeCompare(e.ts)}function J(e,t){return t.ts.localeCompare(e.ts)}},1019,[1134,21,310,123,404,317,136,114,2]);
|
|
1031
1031
|
__d(function(g,r,i,a,m,_e,d){"use strict";function t(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.DashboardHeader=function(t){const n=(0,e.c)(61),{theme:h,mode:p,repo:x,snapshotTs:y,formatRelativeTime:S,formatAbsoluteTime:M,onChangeMode:b}=t;let j;n[0]!==x?.remoteUrl?(j=x?.remoteUrl?.trim()||"unavailable",n[0]=x?.remoteUrl,n[1]=j):j=n[1];const L=j,w="github"===x?.provider?x.browserUrl:null;let v;n[2]!==M||n[3]!==S||n[4]!==y?(v=y?`${S(y)} (${M(y)})`:"waiting for /system/status",n[2]=M,n[3]=S,n[4]=y,n[5]=v):v=n[5];const z=v;let F;n[6]!==w?(F=async()=>{if(w)try{if(!await o.default.canOpenURL(w))return;await o.default.openURL(w)}catch(t){const e=t;console.error(`[DashboardHeader] Failed to open repo URL: ${w}`,e)}},n[6]=w,n[7]=F):F=n[7];const T=F;let U,C,H,_;n[8]!==h.fontSans||n[9]!==h.textMuted?(U=(0,u.jsx)(s.default,{style:[c.eyebrow,{color:h.textMuted,fontFamily:h.fontSans}],children:"pushpals operations console"}),n[8]=h.fontSans,n[9]=h.textMuted,n[10]=U):U=n[10];n[11]!==h.fontSans||n[12]!==h.text?(C=(0,u.jsx)(s.default,{style:[c.title,{color:h.text,fontFamily:h.fontSans}],children:"Mission Control"}),n[11]=h.fontSans,n[12]=h.text,n[13]=C):C=n[13];n[14]!==h.fontSans||n[15]!==h.textMuted?(H=(0,u.jsx)(s.default,{style:[c.subtitle,{color:h.textMuted,fontFamily:h.fontSans}],children:"Coordinate your edits with autonomous buddy execution across planning, jobs, and integration in one live board."}),n[14]=h.fontSans,n[15]=h.textMuted,n[16]=H):H=n[16];n[17]!==h.fontSans||n[18]!==h.textMuted?(_=[c.repoLine,{color:h.textMuted,fontFamily:h.fontSans}],n[17]=h.fontSans,n[18]=h.textMuted,n[19]=_):_=n[19];const R=w?h.accent:h.textMuted;let D;n[20]!==R||n[21]!==h.fontMono?(D={color:R,fontFamily:h.fontMono},n[20]=R,n[21]=h.fontMono,n[22]=D):D=n[22];const V=w?c.repoLink:null;let B,$,k,O;n[23]!==V||n[24]!==D?(B=[c.repoValue,D,V],n[23]=V,n[24]=D,n[25]=B):B=n[25];n[26]!==T||n[27]!==w?($=w?()=>{T()}:void 0,n[26]=T,n[27]=w,n[28]=$):$=n[28];n[29]!==L||n[30]!==B||n[31]!==$?(k=(0,u.jsx)(s.default,{style:B,onPress:$,children:L}),n[29]=L,n[30]=B,n[31]=$,n[32]=k):k=n[32];n[33]!==k||n[34]!==_?(O=(0,u.jsxs)(s.default,{style:_,children:["Current repo:"," ",k]}),n[33]=k,n[34]=_,n[35]=O):O=n[35];const P=y?h.accent:h.textMuted;let W,A,I,q,E,G,J;n[36]!==P||n[37]!==h.fontSans?(W=[c.snapshotLine,{color:P,fontFamily:h.fontSans}],n[36]=P,n[37]=h.fontSans,n[38]=W):W=n[38];n[39]!==h.fontMono||n[40]!==h.text?(A=[c.snapshotValue,{color:h.text,fontFamily:h.fontMono}],n[39]=h.fontMono,n[40]=h.text,n[41]=A):A=n[41];n[42]!==z||n[43]!==A?(I=(0,u.jsx)(s.default,{style:A,children:z}),n[42]=z,n[43]=A,n[44]=I):I=n[44];n[45]!==W||n[46]!==I?(q=(0,u.jsxs)(s.default,{style:W,children:["Snapshot:"," ",I]}),n[45]=W,n[46]=I,n[47]=q):q=n[47];n[48]!==O||n[49]!==q||n[50]!==U||n[51]!==C||n[52]!==H?(E=(0,u.jsxs)(l.default,{style:c.headerLeft,children:[U,C,H,O,q]}),n[48]=O,n[49]=q,n[50]=U,n[51]=C,n[52]=H,n[53]=E):E=n[53];n[54]!==p||n[55]!==b||n[56]!==h?(G=(0,u.jsx)(f.ModeSwitcher,{mode:p,onChange:b,theme:h}),n[54]=p,n[55]=b,n[56]=h,n[57]=G):G=n[57];n[58]!==E||n[59]!==G?(J=(0,u.jsxs)(l.default,{style:c.header,children:[E,G]}),n[58]=E,n[59]=G,n[60]=J):J=n[60];return J};var e=r(d[0]);r(d[1]);var o=t(r(d[2])),n=t(r(d[3])),s=t(r(d[4])),l=t(r(d[5])),f=r(d[6]),u=r(d[7]);const c=n.default.create({header:{flexDirection:"row",justifyContent:"space-between",alignItems:"flex-start",paddingHorizontal:20,paddingTop:18,paddingBottom:12},headerLeft:{flex:1,paddingRight:12},eyebrow:{fontSize:11,letterSpacing:1.3,textTransform:"uppercase",marginBottom:4},title:{fontSize:30,fontWeight:"700",marginBottom:2},subtitle:{fontSize:13,lineHeight:19,maxWidth:640},repoLine:{marginTop:6,fontSize:12,lineHeight:17},repoValue:{fontSize:12},repoLink:{textDecorationLine:"underline"},snapshotLine:{marginTop:4,fontSize:12,lineHeight:17},snapshotValue:{fontSize:12}})},1020,[1134,21,396,136,123,310,1021,2]);
|
|
1032
1032
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.ModeSwitcher=function(e){const n=(0,t.c)(14),{mode:u,onChange:b,theme:x}=e;let h;n[0]===Symbol.for("react.memo_cache_sentinel")?(h=["auto","light","dark"],n[0]=h):h=n[0];const S=h;let p,y,_;n[1]!==x.border||n[2]!==x.panelAlt?(p=[f.modeWrap,{borderColor:x.border,backgroundColor:x.panelAlt}],n[1]=x.border,n[2]=x.panelAlt,n[3]=p):p=n[3];n[4]!==u||n[5]!==b||n[6]!==x.accentSoft||n[7]!==x.accentText||n[8]!==x.fontSans||n[9]!==x.textMuted?(y=S.map(e=>{const t=u===e;return(0,s.jsx)(o.default,{style:[f.modeBtn,t&&{backgroundColor:x.accentSoft}],onPress:()=>b(e),accessibilityRole:"button",accessibilityLabel:`Set theme mode to ${e}`,accessibilityState:{selected:t},children:(0,s.jsx)(l.default,{style:[f.modeText,{color:t?x.accentText:x.textMuted,fontFamily:x.fontSans}],children:e})},e)}),n[4]=u,n[5]=b,n[6]=x.accentSoft,n[7]=x.accentText,n[8]=x.fontSans,n[9]=x.textMuted,n[10]=y):y=n[10];n[11]!==p||n[12]!==y?(_=(0,s.jsx)(c.default,{style:p,children:y}),n[11]=p,n[12]=y,n[13]=_):_=n[13];return _};var t=r(d[0]);r(d[1]);var o=e(r(d[2])),n=e(r(d[3])),l=e(r(d[4])),c=e(r(d[5])),s=r(d[6]);const f=n.default.create({modeWrap:{flexDirection:"row",borderWidth:1,borderRadius:12,overflow:"hidden",alignSelf:"flex-start"},modeBtn:{paddingHorizontal:10,paddingVertical:7},modeText:{fontSize:12,fontWeight:"600",textTransform:"capitalize"}})},1021,[1134,21,417,136,123,310,2]);
|
package/monitor-ui/_sitemap.html
CHANGED
|
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
435
435
|
@keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
|
|
436
436
|
@keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
|
|
437
437
|
@keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
|
|
438
|
-
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-
|
|
438
|
+
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-d69cc703f72afa383e4108efd6e0f726.js" defer></script>
|
|
439
439
|
</body></html>
|
package/monitor-ui/index.html
CHANGED
|
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
435
435
|
@keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
|
|
436
436
|
@keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
|
|
437
437
|
@keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
|
|
438
|
-
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"><!--$--><div style="position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;visibility:hidden"></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0 r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af" style="background-color:rgba(242,242,242,1.00);display:flex"><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0"><!--$--><div class="css-g5y9jx r-13awgt0" style="background-color:rgba(236,242,245,1.00)"><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-15zx4ds r-a4e7m4 r-j33s3c r-1ovo9ad" style="background-color:rgba(0,126,119,0.13)"></div><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-5fjp4n r-9s5a0n r-1hy2ut r-9dcw1g" style="background-color:rgba(199,133,30,0.09)"></div><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-1iuttuq r-pbsvq8 r-1b0pg27 r-1sxiqef" style="background-color:rgba(22,154,88,0.09)"></div><div class="css-g5y9jx r-150rngu r-eqz5dr r-16y2uox r-1wbh5a2 r-11yh6sk r-1rnoaur r-agouwx r-13awgt0"><div class="css-g5y9jx r-16y2uox r-2llsf r-kzbkwu"><div class="css-g5y9jx r-16uyjmq r-rs99b7 r-13awgt0 r-hv52eu r-ifefl9 r-1udh08x" style="background-color:rgba(247,250,252,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);opacity:0;transform:translateY(18px)"><div class="css-g5y9jx r-1habvwh r-18u37iz r-1wtj0ep r-kzbkwu r-u9wvl5 r-131miar"><div class="css-g5y9jx r-13awgt0 r-j2kj52"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1q67n59 r-15zivkp r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">pushpals operations console</div><div dir="auto" class="css-146c3p1 r-1ra0lkn r-b88u0q r-zl2h9q" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Mission Control</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo r-1cmskyw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Coordinate your edits with autonomous buddy execution across planning, jobs, and integration in one live board.</div><div dir="auto" class="css-146c3p1 r-1enofrn r-5fcqz0 r-kc8jnq" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Current repo:<!-- --> <span class="css-1jxf684 r-1enofrn" style="color:rgba(84,112,134,1.00);font-family:'IBM Plex Mono', 'JetBrains Mono', monospace">unavailable</span></div><div dir="auto" class="css-146c3p1 r-1enofrn r-5fcqz0 r-14gqq1x" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Snapshot:<!-- --> <span class="css-1jxf684 r-1enofrn" style="color:rgba(17,34,48,1.00);font-family:'IBM Plex Mono', 'JetBrains Mono', monospace">waiting for /system/status</span></div></div><div class="css-g5y9jx r-k200y r-1q9bdsx r-rs99b7 r-18u37iz r-1udh08x" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><button aria-label="Set theme mode to auto" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" style="background-color:rgba(217,244,241,1.00)" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(2,92,86,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">auto</div></button><button aria-label="Set theme mode to light" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">light</div></button><button aria-label="Set theme mode to dark" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">dark</div></button></div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-15d164r r-bhtmuz r-ytbthy r-1ubuhtd" style="background-color:rgba(244,248,251,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00)"><div class="css-g5y9jx r-150rngu r-18u37iz r-16y2uox r-1wbh5a2 r-lltvgl r-buy8e9 r-agouwx r-2eszeu"><div class="css-g5y9jx r-18u37iz"><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(199,133,30,0.40);border-right-color:rgba(199,133,30,0.40);border-bottom-color:rgba(199,133,30,0.40);border-left-color:rgba(199,133,30,0.40);background-color:rgba(199,133,30,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(199,133,30,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">1. You</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Awaiting input</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(0,126,119,0.40);border-right-color:rgba(0,126,119,0.40);border-bottom-color:rgba(0,126,119,0.40);border-left-color:rgba(0,126,119,0.40);background-color:rgba(0,126,119,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">2. Session</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Ready</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(22,154,88,0.40);border-right-color:rgba(22,154,88,0.40);border-bottom-color:rgba(22,154,88,0.40);border-left-color:rgba(22,154,88,0.40);background-color:rgba(22,154,88,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">3. RemoteBuddy</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 pending, 0 claimed</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(22,154,88,0.40);border-right-color:rgba(22,154,88,0.40);border-bottom-color:rgba(22,154,88,0.40);border-left-color:rgba(22,154,88,0.40);background-color:rgba(22,154,88,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">4. WorkerPals</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 online, 0 busy, 0 queued</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(0,126,119,0.40);border-right-color:rgba(0,126,119,0.40);border-bottom-color:rgba(0,126,119,0.40);border-left-color:rgba(0,126,119,0.40);background-color:rgba(0,126,119,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">5. SCM</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 ready, 0 pending</div></div></div></div></div></div><div class="css-g5y9jx r-18u37iz r-1w6e6rj r-1mi0q7o r-u9wvl5"><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Connection</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(214,69,83,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Disconnected</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 events</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Pending Work</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 requests | 0 jobs</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Active Workers</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 busy</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Last Sync</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">--</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">waiting</div></div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-18u37iz r-15d164r r-bhtmuz r-146eth8" style="background-color:rgba(244,248,251,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00)"><button aria-label="Coordination tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" style="background-color:rgba(0,126,119,1.00);border-top-color:rgba(0,126,119,1.00);border-right-color:rgba(0,126,119,1.00);border-bottom-color:rgba(0,126,119,1.00);border-left-color:rgba(0,126,119,1.00)" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(255,255,255,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Coordination<!-- --> (0)</div></button><button aria-label="Chat tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Chat<!-- --> (0)</div></button><button aria-label="Requests tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Requests<!-- --> (0)</div></button><button aria-label="Jobs & Traces tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Jobs & Traces<!-- --> (0)</div></button><button aria-label="System tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">System<!-- --> (0)</div></button><button aria-label="Config tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Config</div></button></div><div class="css-g5y9jx r-13awgt0 r-ifefl9" style="opacity:1;transform:translateY(0px)"><div class="css-g5y9jx r-150rngu r-eqz5dr r-16y2uox r-1wbh5a2 r-11yh6sk r-1rnoaur r-agouwx r-13awgt0"><div class="css-g5y9jx r-1t2hasf r-u9wvl5"><div class="css-g5y9jx r-18u37iz r-1w6e6rj r-1mi0q7o"><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Ready For Review</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 processed completions</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Active Handoffs</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 running jobs</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Awaiting Remote</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 pending requests</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Blocked</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 failed jobs</div></div></div><div class="css-g5y9jx r-eqz5dr"><div class="css-g5y9jx r-1867qdf r-rs99b7 r-k3250r r-15d164r r-xyw6el" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(255,255,255,1.00)"><div class="css-g5y9jx r-1awozwy r-18u37iz r-1wtj0ep"><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Change Coordination Board</div><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1g94qm0" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0<!-- --> latest requests</div></div><div class="css-g5y9jx r-1habvwh r-1867qdf r-nsbfu8"><div dir="auto" class="css-146c3p1 r-1i10wst r-b88u0q r-15zivkp" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Nothing to coordinate yet</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Send a task from chat and this board will trace the full handoff from request to integration.</div></div></div><div class="css-g5y9jx r-1867qdf r-rs99b7 r-jprt8p r-15d164r r-11wrixw r-xyw6el" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(255,255,255,1.00)"><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Review Queue</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">No processed completions yet.</div><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif;margin-top:14px">Needs Attention</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">No failed coordination chains.</div></div></div></div></div></div></div></div></div></div></div><!--/$--></div></div></div></div><!--/$--></div></div><script src="/_expo/static/js/web/entry-5fe4b1b2c73e657048674b0a7f392de9.js" defer></script>
|
|
438
|
+
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"><!--$--><div style="position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;visibility:hidden"></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0 r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af" style="background-color:rgba(242,242,242,1.00);display:flex"><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0"><!--$--><div class="css-g5y9jx r-13awgt0" style="background-color:rgba(236,242,245,1.00)"><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-15zx4ds r-a4e7m4 r-j33s3c r-1ovo9ad" style="background-color:rgba(0,126,119,0.13)"></div><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-5fjp4n r-9s5a0n r-1hy2ut r-9dcw1g" style="background-color:rgba(199,133,30,0.09)"></div><div class="css-g5y9jx r-cpet4d r-u8s1d r-g7s1ez r-1iuttuq r-pbsvq8 r-1b0pg27 r-1sxiqef" style="background-color:rgba(22,154,88,0.09)"></div><div class="css-g5y9jx r-150rngu r-eqz5dr r-16y2uox r-1wbh5a2 r-11yh6sk r-1rnoaur r-agouwx r-13awgt0"><div class="css-g5y9jx r-16y2uox r-2llsf r-kzbkwu"><div class="css-g5y9jx r-16uyjmq r-rs99b7 r-13awgt0 r-hv52eu r-ifefl9 r-1udh08x" style="background-color:rgba(247,250,252,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);opacity:0;transform:translateY(18px)"><div class="css-g5y9jx r-1habvwh r-18u37iz r-1wtj0ep r-kzbkwu r-u9wvl5 r-131miar"><div class="css-g5y9jx r-13awgt0 r-j2kj52"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1q67n59 r-15zivkp r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">pushpals operations console</div><div dir="auto" class="css-146c3p1 r-1ra0lkn r-b88u0q r-zl2h9q" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Mission Control</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo r-1cmskyw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Coordinate your edits with autonomous buddy execution across planning, jobs, and integration in one live board.</div><div dir="auto" class="css-146c3p1 r-1enofrn r-5fcqz0 r-kc8jnq" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Current repo:<!-- --> <span class="css-1jxf684 r-1enofrn" style="color:rgba(84,112,134,1.00);font-family:'IBM Plex Mono', 'JetBrains Mono', monospace">unavailable</span></div><div dir="auto" class="css-146c3p1 r-1enofrn r-5fcqz0 r-14gqq1x" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Snapshot:<!-- --> <span class="css-1jxf684 r-1enofrn" style="color:rgba(17,34,48,1.00);font-family:'IBM Plex Mono', 'JetBrains Mono', monospace">waiting for /system/status</span></div></div><div class="css-g5y9jx r-k200y r-1q9bdsx r-rs99b7 r-18u37iz r-1udh08x" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><button aria-label="Set theme mode to auto" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" style="background-color:rgba(217,244,241,1.00)" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(2,92,86,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">auto</div></button><button aria-label="Set theme mode to light" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">light</div></button><button aria-label="Set theme mode to dark" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1yd117h r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-1enofrn r-1kfrs79 r-1ozqkpa" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">dark</div></button></div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-15d164r r-bhtmuz r-ytbthy r-1ubuhtd" style="background-color:rgba(244,248,251,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00)"><div class="css-g5y9jx r-150rngu r-18u37iz r-16y2uox r-1wbh5a2 r-lltvgl r-buy8e9 r-agouwx r-2eszeu"><div class="css-g5y9jx r-18u37iz"><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(199,133,30,0.40);border-right-color:rgba(199,133,30,0.40);border-bottom-color:rgba(199,133,30,0.40);border-left-color:rgba(199,133,30,0.40);background-color:rgba(199,133,30,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(199,133,30,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">1. You</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Awaiting input</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(0,126,119,0.40);border-right-color:rgba(0,126,119,0.40);border-bottom-color:rgba(0,126,119,0.40);border-left-color:rgba(0,126,119,0.40);background-color:rgba(0,126,119,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">2. Session</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Ready</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(22,154,88,0.40);border-right-color:rgba(22,154,88,0.40);border-bottom-color:rgba(22,154,88,0.40);border-left-color:rgba(22,154,88,0.40);background-color:rgba(22,154,88,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">3. RemoteBuddy</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 pending, 0 claimed</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(22,154,88,0.40);border-right-color:rgba(22,154,88,0.40);border-bottom-color:rgba(22,154,88,0.40);border-left-color:rgba(22,154,88,0.40);background-color:rgba(22,154,88,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">4. WorkerPals</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 online, 0 busy, 0 queued</div></div><div class="css-g5y9jx r-109y4c4 r-8dgmk1 r-12ym1je" style="background-color:rgba(207,218,226,0.80)"></div></div><div class="css-g5y9jx r-1awozwy r-18u37iz"><div class="css-g5y9jx r-1q9bdsx r-rs99b7 r-1s5swlz r-1ubuhtd r-13i4ljo" style="border-top-color:rgba(0,126,119,0.40);border-right-color:rgba(0,126,119,0.40);border-bottom-color:rgba(0,126,119,0.40);border-left-color:rgba(0,126,119,0.40);background-color:rgba(0,126,119,0.09)"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1gkfh8e r-b88u0q r-1dpkw9 r-tsynxw" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">5. SCM</div><div dir="auto" class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1qsk4np r-1udbk01 r-1enofrn r-1cwl3u0 r-14gqq1x" style="-webkit-line-clamp:2;color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 ready, 0 pending</div></div></div></div></div></div><div class="css-g5y9jx r-18u37iz r-1w6e6rj r-1mi0q7o r-u9wvl5"><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Connection</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(214,69,83,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Disconnected</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 events</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Pending Work</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 requests | 0 jobs</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Active Workers</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 busy</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Last Sync</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">--</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">waiting</div></div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-18u37iz r-15d164r r-bhtmuz r-146eth8" style="background-color:rgba(244,248,251,1.00);border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00)"><button aria-label="Coordination tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" style="background-color:rgba(0,126,119,1.00);border-top-color:rgba(0,126,119,1.00);border-right-color:rgba(0,126,119,1.00);border-bottom-color:rgba(0,126,119,1.00);border-left-color:rgba(0,126,119,1.00)" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(255,255,255,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Coordination<!-- --> (0)</div></button><button aria-label="Chat tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Chat<!-- --> (0)</div></button><button aria-label="Requests tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Requests<!-- --> (0)</div></button><button aria-label="Jobs & Traces tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Jobs & Traces<!-- --> (0)</div></button><button aria-label="System tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">System<!-- --> (0)</div></button><button aria-label="Config tab" role="button" tabindex="0" class="css-g5y9jx r-1loqt21 r-1otgn73 r-1awozwy r-42olwf r-1dzdj1l r-rs99b7 r-13awgt0 r-1777fci r-11f147o r-1ubuhtd" type="button"><div dir="auto" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1enofrn r-b88u0q" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Config</div></button></div><div class="css-g5y9jx r-13awgt0 r-ifefl9" style="opacity:1;transform:translateY(0px)"><div class="css-g5y9jx r-150rngu r-eqz5dr r-16y2uox r-1wbh5a2 r-11yh6sk r-1rnoaur r-agouwx r-13awgt0"><div class="css-g5y9jx r-1t2hasf r-u9wvl5"><div class="css-g5y9jx r-18u37iz r-1w6e6rj r-1mi0q7o"><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Ready For Review</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 processed completions</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Active Handoffs</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(0,126,119,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 running jobs</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Awaiting Remote</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 pending requests</div></div><div class="css-g5y9jx r-t23y2h r-rs99b7 r-16y2uox r-5oul0u r-1kb76zh r-bgnin r-ytbthy r-3o4zer" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(244,248,251,1.00)"><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1cm7zt9 r-tsynxw" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Blocked</div><div dir="auto" class="css-146c3p1 r-evnaw r-b88u0q r-19qrga8" style="color:rgba(22,154,88,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0</div><div dir="auto" class="css-146c3p1 r-1enofrn r-19qrga8" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0 failed jobs</div></div></div><div class="css-g5y9jx r-eqz5dr"><div class="css-g5y9jx r-1867qdf r-rs99b7 r-k3250r r-15d164r r-xyw6el" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(255,255,255,1.00)"><div class="css-g5y9jx r-1awozwy r-18u37iz r-1wtj0ep"><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Change Coordination Board</div><div dir="auto" class="css-146c3p1 r-1gkfh8e r-1g94qm0" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">0<!-- --> latest requests</div></div><div class="css-g5y9jx r-1habvwh r-1867qdf r-nsbfu8"><div dir="auto" class="css-146c3p1 r-1i10wst r-b88u0q r-15zivkp" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Nothing to coordinate yet</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Send a task from chat and this board will trace the full handoff from request to integration.</div></div></div><div class="css-g5y9jx r-1867qdf r-rs99b7 r-jprt8p r-15d164r r-11wrixw r-xyw6el" style="border-top-color:rgba(207,218,226,1.00);border-right-color:rgba(207,218,226,1.00);border-bottom-color:rgba(207,218,226,1.00);border-left-color:rgba(207,218,226,1.00);background-color:rgba(255,255,255,1.00)"><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">Review Queue</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">No processed completions yet.</div><div dir="auto" class="css-146c3p1 r-ubezar r-b88u0q r-5oul0u" style="color:rgba(17,34,48,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif;margin-top:14px">Needs Attention</div><div dir="auto" class="css-146c3p1 r-n6v787 r-hjklzo" style="color:rgba(84,112,134,1.00);font-family:'Space Grotesk', 'Avenir Next', 'Trebuchet MS', sans-serif">No failed coordination chains.</div></div></div></div></div></div></div></div></div></div></div><!--/$--></div></div></div></div><!--/$--></div></div><script src="/_expo/static/js/web/entry-d69cc703f72afa383e4108efd6e0f726.js" defer></script>
|
|
439
439
|
</body></html>
|
package/monitor-ui/modal.html
CHANGED
|
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
435
435
|
@keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
|
|
436
436
|
@keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
|
|
437
437
|
@keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
|
|
438
|
-
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"><!--$--><div style="position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;visibility:hidden"></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0 r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af" style="background-color:rgba(242,242,242,1.00);display:flex"><div class="css-g5y9jx r-184en5c r-12vffkv"><div class="css-g5y9jx r-12vffkv" style="height:64px"><div class="css-g5y9jx r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-12vffkv"><div class="css-g5y9jx r-qklmqi r-13awgt0 r-105ug2t" style="background-color:rgba(255,255,255,1.00);border-bottom-color:rgba(216,216,216,1.00)"></div></div><div class="css-g5y9jx r-633pao" style="height:0px"></div><div class="css-g5y9jx r-1oszu61 r-13awgt0 r-18u37iz r-12vffkv"><div class="css-g5y9jx r-1awozwy r-18u37iz r-1h0z5md r-12vffkv" style="margin-left:0px"></div><div class="css-g5y9jx r-1777fci r-12vffkv" style="max-width:-32px;margin-right:16px;margin-left:16px"><h1 dir="auto" aria-level="1" role="heading" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1i10wst" style="color:rgba(28,28,30,1.00);font-family:system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-weight:500">Modal</h1></div><div class="css-g5y9jx r-1awozwy r-18u37iz r-17s6mgv r-1iusvr4 r-16y2uox r-12vffkv" style="margin-right:0px"></div></div></div></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0"><!--$--><div class="css-g5y9jx r-1awozwy r-13awgt0 r-1777fci r-1pcd2l5" style="background-color:rgba(255,255,255,1.00)"><div dir="auto" class="css-146c3p1 r-1ui5ee8 r-vw2c0b r-37tt59" style="color:rgba(17,24,28,1.00)">This is a modal</div><a href="/" dir="auto" role="link" class="css-146c3p1 r-19h5ruw r-1d7mnkm r-1loqt21"><span class="css-1jxf684 r-1v78gzs r-ubezar r-17rnw9f">Go to home screen</span></a></div><!--/$--></div></div></div></div><!--/$--></div></div><script src="/_expo/static/js/web/entry-
|
|
438
|
+
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"><!--$--><div style="position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;visibility:hidden"></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0 r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af" style="background-color:rgba(242,242,242,1.00);display:flex"><div class="css-g5y9jx r-184en5c r-12vffkv"><div class="css-g5y9jx r-12vffkv" style="height:64px"><div class="css-g5y9jx r-1p0dtai r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-12vffkv"><div class="css-g5y9jx r-qklmqi r-13awgt0 r-105ug2t" style="background-color:rgba(255,255,255,1.00);border-bottom-color:rgba(216,216,216,1.00)"></div></div><div class="css-g5y9jx r-633pao" style="height:0px"></div><div class="css-g5y9jx r-1oszu61 r-13awgt0 r-18u37iz r-12vffkv"><div class="css-g5y9jx r-1awozwy r-18u37iz r-1h0z5md r-12vffkv" style="margin-left:0px"></div><div class="css-g5y9jx r-1777fci r-12vffkv" style="max-width:-32px;margin-right:16px;margin-left:16px"><h1 dir="auto" aria-level="1" role="heading" class="css-146c3p1 r-dnmrzs r-1udh08x r-1udbk01 r-3s2u2q r-1iln25a r-1i10wst" style="color:rgba(28,28,30,1.00);font-family:system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-weight:500">Modal</h1></div><div class="css-g5y9jx r-1awozwy r-18u37iz r-17s6mgv r-1iusvr4 r-16y2uox r-12vffkv" style="margin-right:0px"></div></div></div></div><div class="css-g5y9jx r-13awgt0"><div class="css-g5y9jx r-13awgt0"><!--$--><div class="css-g5y9jx r-1awozwy r-13awgt0 r-1777fci r-1pcd2l5" style="background-color:rgba(255,255,255,1.00)"><div dir="auto" class="css-146c3p1 r-1ui5ee8 r-vw2c0b r-37tt59" style="color:rgba(17,24,28,1.00)">This is a modal</div><a href="/" dir="auto" role="link" class="css-146c3p1 r-19h5ruw r-1d7mnkm r-1loqt21"><span class="css-1jxf684 r-1v78gzs r-ubezar r-17rnw9f">Go to home screen</span></a></div><!--/$--></div></div></div></div><!--/$--></div></div><script src="/_expo/static/js/web/entry-d69cc703f72afa383e4108efd6e0f726.js" defer></script>
|
|
439
439
|
</body></html>
|
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## Base Guidance
|
|
2
|
+
Command-router policy: shell commands are allowed, but invoke the actual command directly instead of wrapping it with `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, or `pwsh -Command`. If a wrapper command is rejected, rerun its inner command directly through the command tool.
|
|
3
|
+
|
|
4
|
+
## Recovery Guidance
|
|
5
|
+
Command-router recovery: the previous attempt retried disallowed shell wrappers.
|
|
6
|
+
Retry once using shell commands normally, but invoke the inner command directly instead of wrapping it in `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, or `pwsh -Command`.
|
|
7
|
+
You are not limited to a fixed allowlist of commands. The constraint is only that command execution must target the actual program/argv directly rather than a wrapper shell.
|
|
8
|
+
|
|
9
|
+
## Rejection Detail
|
|
10
|
+
Codex repeatedly attempted disallowed shell-wrapper commands that the command router rejected. Shell commands are allowed, but wrapper shells are not; invoke the inner command directly and avoid wrapper retries.
|
|
@@ -55,6 +55,7 @@ _DEFAULT_TASK_SYSTEM_PROMPT_PATH = "workerpals/openai_codex_default_system_promp
|
|
|
55
55
|
_MANDATORY_RUNTIME_POLICY_APPENDIX_PATH = "workerpals/openai_codex_runtime_policy_appendix.md"
|
|
56
56
|
_INSTRUCTION_WRAPPER_PROMPT_PATH = "workerpals/openai_codex_instruction_wrapper.md"
|
|
57
57
|
_SUPPLEMENTAL_GUIDANCE_SECTION_PATH = "workerpals/openai_codex_supplemental_guidance_section.md"
|
|
58
|
+
_COMMAND_ROUTER_POLICY_PATH = "workerpals/openai_codex_command_router_policy.md"
|
|
58
59
|
_CODEX_WORKAROUND_PATTERNS = (
|
|
59
60
|
re.compile(
|
|
60
61
|
r"\bcodex cli\b.{0,120}\b(isn't|is not|not)\b.{0,120}\bavailable\b.{0,120}\b(so|therefore|instead|fallback|workaround|without|using)\b",
|
|
@@ -94,12 +95,6 @@ _VALID_SANDBOX_POLICIES = {"read-only", "workspace-write", "danger-full-access"}
|
|
|
94
95
|
_VALID_COLORS = {"always", "never", "auto"}
|
|
95
96
|
_VALID_AUTH_MODES = {"auto", "api_key", "chatgpt"}
|
|
96
97
|
_VALID_REASONING_EFFORTS = {"low", "medium", "high", "xhigh"}
|
|
97
|
-
_DIRECT_COMMAND_POLICY_GUIDANCE = (
|
|
98
|
-
"Command-router policy: use direct commands only. Do not invoke `/bin/bash -lc`, `bash -c`, "
|
|
99
|
-
"`sh -lc`, `cmd /c`, `powershell -Command`, or `pwsh -Command`. Run the direct command "
|
|
100
|
-
"instead, such as `pwd`, `git status --porcelain`, `git diff -- path`, `ls dir`, "
|
|
101
|
-
"`cat file`, `sed -n '1,160p' file`, or `bun test <path>`."
|
|
102
|
-
)
|
|
103
98
|
|
|
104
99
|
|
|
105
100
|
def _model_supports_xhigh_reasoning(model: str) -> bool:
|
|
@@ -254,6 +249,64 @@ def _load_prompt_template(
|
|
|
254
249
|
return _PROMPT_TOKEN_REGEX.sub(_replace, template)
|
|
255
250
|
|
|
256
251
|
|
|
252
|
+
def _load_markdown_h2_section(relative_path: str, heading: str) -> str:
|
|
253
|
+
document = _load_prompt_template(relative_path)
|
|
254
|
+
if not document:
|
|
255
|
+
return ""
|
|
256
|
+
lines = document.splitlines()
|
|
257
|
+
needle = f"## {heading}".strip().lower()
|
|
258
|
+
start: Optional[int] = None
|
|
259
|
+
for idx, line in enumerate(lines):
|
|
260
|
+
if line.strip().lower() == needle:
|
|
261
|
+
start = idx + 1
|
|
262
|
+
break
|
|
263
|
+
if start is None:
|
|
264
|
+
return ""
|
|
265
|
+
collected: List[str] = []
|
|
266
|
+
for line in lines[start:]:
|
|
267
|
+
if line.startswith("## "):
|
|
268
|
+
break
|
|
269
|
+
collected.append(line)
|
|
270
|
+
return "\n".join(collected).strip()
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def _command_router_policy_guidance() -> str:
|
|
274
|
+
guidance = _load_markdown_h2_section(_COMMAND_ROUTER_POLICY_PATH, "Base Guidance")
|
|
275
|
+
if guidance:
|
|
276
|
+
return guidance
|
|
277
|
+
return (
|
|
278
|
+
"Command-router policy: shell commands are allowed, but invoke the actual command directly "
|
|
279
|
+
"instead of wrapping it with `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, "
|
|
280
|
+
"`powershell -Command`, or `pwsh -Command`. If a wrapper command is rejected, rerun its "
|
|
281
|
+
"inner command directly through the command tool."
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def _command_router_recovery_guidance() -> str:
|
|
286
|
+
guidance = _load_markdown_h2_section(_COMMAND_ROUTER_POLICY_PATH, "Recovery Guidance")
|
|
287
|
+
if guidance:
|
|
288
|
+
return guidance
|
|
289
|
+
return (
|
|
290
|
+
"Command-router recovery: the previous attempt retried disallowed shell wrappers.\n"
|
|
291
|
+
"Retry once using shell commands normally, but invoke the inner command directly instead of "
|
|
292
|
+
"wrapping it in `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, or "
|
|
293
|
+
"`pwsh -Command`.\n"
|
|
294
|
+
"You are not limited to a fixed allowlist of commands. The constraint is only that command "
|
|
295
|
+
"execution must target the actual program/argv directly rather than a wrapper shell."
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _command_router_rejection_detail_intro() -> str:
|
|
300
|
+
guidance = _load_markdown_h2_section(_COMMAND_ROUTER_POLICY_PATH, "Rejection Detail")
|
|
301
|
+
if guidance:
|
|
302
|
+
return guidance
|
|
303
|
+
return (
|
|
304
|
+
"Codex repeatedly attempted disallowed shell-wrapper commands that the command router "
|
|
305
|
+
"rejected. Shell commands are allowed, but wrapper shells are not; invoke the inner "
|
|
306
|
+
"command directly and avoid wrapper retries."
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
|
|
257
310
|
def _to_positive_int(raw: str) -> Optional[int]:
|
|
258
311
|
try:
|
|
259
312
|
parsed = int(raw)
|
|
@@ -1023,11 +1076,7 @@ def _build_wrapper_recovery_guidance(rejected_commands: List[str]) -> str:
|
|
|
1023
1076
|
continue
|
|
1024
1077
|
seen.add(lowered)
|
|
1025
1078
|
direct_equivalents.append(f"- `{command}` -> `{direct}`")
|
|
1026
|
-
guidance_lines = [
|
|
1027
|
-
"Command-router recovery: the previous attempt retried disallowed shell wrappers.",
|
|
1028
|
-
"Retry once using direct commands only. Do not use `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, `pwsh -Command`, pipelines, or chained shell snippets.",
|
|
1029
|
-
"If you need to inspect files or git state, run the direct command itself (for example `git diff --name-only`, `git status --porcelain`, `ls path`, `cat file`, or `sed -n '1,120p' file`).",
|
|
1030
|
-
]
|
|
1079
|
+
guidance_lines = [_command_router_recovery_guidance()]
|
|
1031
1080
|
if direct_equivalents:
|
|
1032
1081
|
guidance_lines.append("Use these direct replacements for the rejected commands:")
|
|
1033
1082
|
guidance_lines.extend(direct_equivalents[:6])
|
|
@@ -1064,7 +1113,7 @@ def _augment_supplemental_guidance(supplemental_guidance: List[str]) -> List[str
|
|
|
1064
1113
|
joined = "\n".join(normalized).lower()
|
|
1065
1114
|
if "direct commands only" in joined or "shell-wrapper" in joined or "/bin/bash -lc" in joined:
|
|
1066
1115
|
return normalized
|
|
1067
|
-
return [
|
|
1116
|
+
return [_command_router_policy_guidance(), *normalized]
|
|
1068
1117
|
|
|
1069
1118
|
|
|
1070
1119
|
def _read_text_if_exists(path: Path) -> str:
|
|
@@ -1503,8 +1552,7 @@ def _run_codex_task(
|
|
|
1503
1552
|
else "- (no command details captured)"
|
|
1504
1553
|
)
|
|
1505
1554
|
detail = (
|
|
1506
|
-
"
|
|
1507
|
-
"router rejected. Switch to direct commands only and avoid wrapper retries.\n"
|
|
1555
|
+
f"{_command_router_rejection_detail_intro()}\n"
|
|
1508
1556
|
f"Rejected commands:\n{command_lines}"
|
|
1509
1557
|
)
|
|
1510
1558
|
if last_message:
|
|
@@ -21,6 +21,7 @@ from executor_base import (
|
|
|
21
21
|
from openai_codex_executor import (
|
|
22
22
|
OpenAICodexRuntimeConfig,
|
|
23
23
|
_augment_supplemental_guidance,
|
|
24
|
+
_build_wrapper_recovery_guidance,
|
|
24
25
|
_resolve_reasoning_effort,
|
|
25
26
|
_build_instruction,
|
|
26
27
|
_collect_disallowed_shell_wrapper_rejections,
|
|
@@ -266,10 +267,19 @@ class OpenAICodexRuntimeConfigTests(unittest.TestCase):
|
|
|
266
267
|
def test_augments_guidance_with_direct_command_policy_once(self) -> None:
|
|
267
268
|
guidance = _augment_supplemental_guidance(["Run bun test tests/example.test.ts"])
|
|
268
269
|
self.assertGreaterEqual(len(guidance), 2)
|
|
269
|
-
self.assertIn("
|
|
270
|
+
self.assertIn("shell commands are allowed", guidance[0].lower())
|
|
270
271
|
guidance_again = _augment_supplemental_guidance(guidance)
|
|
271
272
|
self.assertEqual(guidance_again, guidance)
|
|
272
273
|
|
|
274
|
+
def test_wrapper_recovery_guidance_allows_arbitrary_shell_commands_without_wrappers(self) -> None:
|
|
275
|
+
guidance = _build_wrapper_recovery_guidance(
|
|
276
|
+
["/bin/bash -lc 'git status --porcelain'", "/bin/bash -lc pwd"]
|
|
277
|
+
)
|
|
278
|
+
lowered = guidance.lower()
|
|
279
|
+
self.assertIn("shell commands normally", lowered)
|
|
280
|
+
self.assertIn("not limited to a fixed allowlist", lowered)
|
|
281
|
+
self.assertIn("`/bin/bash -lc 'git status --porcelain'` -> `git status --porcelain`", guidance)
|
|
282
|
+
|
|
273
283
|
def test_usage_falls_back_to_estimate_when_trace_has_no_usage(self) -> None:
|
|
274
284
|
usage = _usage_from_trace_or_estimate({}, "abc" * 30, "done", model="gpt-5.4")
|
|
275
285
|
self.assertTrue(usage["estimated"])
|
|
@@ -9,6 +9,15 @@ export interface JobTokenUsage {
|
|
|
9
9
|
modelId?: string;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
export interface JobPublishBlockedInfo {
|
|
13
|
+
summary: string;
|
|
14
|
+
detail: string;
|
|
15
|
+
publicBranch: string;
|
|
16
|
+
localRef: string;
|
|
17
|
+
sha: string;
|
|
18
|
+
stage: "sync" | "push";
|
|
19
|
+
}
|
|
20
|
+
|
|
12
21
|
export interface JobResult {
|
|
13
22
|
ok: boolean;
|
|
14
23
|
summary: string;
|
|
@@ -16,4 +25,5 @@ export interface JobResult {
|
|
|
16
25
|
stderr?: string;
|
|
17
26
|
exitCode?: number;
|
|
18
27
|
usage?: JobTokenUsage;
|
|
28
|
+
publishBlocked?: JobPublishBlockedInfo;
|
|
19
29
|
}
|
|
@@ -215,6 +215,14 @@ export interface DockerJobResult {
|
|
|
215
215
|
stderr?: string;
|
|
216
216
|
exitCode?: number;
|
|
217
217
|
cooldownMs?: number;
|
|
218
|
+
publishBlocked?: {
|
|
219
|
+
summary: string;
|
|
220
|
+
detail: string;
|
|
221
|
+
publicBranch: string;
|
|
222
|
+
localRef: string;
|
|
223
|
+
sha: string;
|
|
224
|
+
stage: "sync" | "push";
|
|
225
|
+
};
|
|
218
226
|
commit?: {
|
|
219
227
|
branch: string;
|
|
220
228
|
sha: string;
|
|
@@ -749,11 +757,17 @@ export class DockerExecutor {
|
|
|
749
757
|
if (backend !== "openai_codex") return [];
|
|
750
758
|
|
|
751
759
|
const hostCodexHomeRaw = (process.env.PUSHPALS_OPENAI_CODEX_HOST_CODEX_HOME || "").trim();
|
|
760
|
+
if (hostCodexHomeRaw && !isAbsolute(hostCodexHomeRaw)) {
|
|
761
|
+
console.warn(
|
|
762
|
+
`[DockerExecutor] Ignoring relative PUSHPALS_OPENAI_CODEX_HOST_CODEX_HOME=${hostCodexHomeRaw}; using ${resolve(
|
|
763
|
+
homedir(),
|
|
764
|
+
".codex",
|
|
765
|
+
)} so Codex state stays outside the repo worktree.`,
|
|
766
|
+
);
|
|
767
|
+
}
|
|
752
768
|
const hostCodexHome = (
|
|
753
|
-
hostCodexHomeRaw
|
|
754
|
-
?
|
|
755
|
-
? hostCodexHomeRaw
|
|
756
|
-
: resolve(this.options.repo, hostCodexHomeRaw)
|
|
769
|
+
hostCodexHomeRaw && isAbsolute(hostCodexHomeRaw)
|
|
770
|
+
? hostCodexHomeRaw
|
|
757
771
|
: resolve(homedir(), ".codex")
|
|
758
772
|
).trim();
|
|
759
773
|
if (!hostCodexHome) return [];
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Used by both the host Worker (direct mode) and the Docker job runner.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
6
|
+
import { existsSync, readFileSync, rmSync, unlinkSync } from "fs";
|
|
7
7
|
import { resolve } from "path";
|
|
8
8
|
import {
|
|
9
9
|
deriveAutonomyComponentArea,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
type AutonomyComponentArea,
|
|
17
17
|
} from "shared";
|
|
18
18
|
import { resolveExecutor, type WorkerpalsRuntimeConfig } from "./common/executor_backend.js";
|
|
19
|
-
import type { JobResult } from "./common/types.js";
|
|
19
|
+
import type { JobPublishBlockedInfo, JobResult } from "./common/types.js";
|
|
20
20
|
import {
|
|
21
21
|
compactJobOutput,
|
|
22
22
|
truncate,
|
|
@@ -1425,6 +1425,38 @@ export async function git(
|
|
|
1425
1425
|
// ─── Git commit creation ─────────────────────────────────────────────────────
|
|
1426
1426
|
|
|
1427
1427
|
/** Create commit for job result and return commit info */
|
|
1428
|
+
export interface CreateJobCommitResult {
|
|
1429
|
+
ok: boolean;
|
|
1430
|
+
branch?: string;
|
|
1431
|
+
sha?: string;
|
|
1432
|
+
error?: string;
|
|
1433
|
+
publishBlocked?: JobPublishBlockedInfo;
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
function buildPublishBlockedCommitResult(options: {
|
|
1437
|
+
summary: string;
|
|
1438
|
+
detail: string;
|
|
1439
|
+
publicBranch: string;
|
|
1440
|
+
localRef: string;
|
|
1441
|
+
sha: string;
|
|
1442
|
+
stage: "sync" | "push";
|
|
1443
|
+
}): CreateJobCommitResult {
|
|
1444
|
+
return {
|
|
1445
|
+
ok: false,
|
|
1446
|
+
branch: options.localRef,
|
|
1447
|
+
sha: options.sha,
|
|
1448
|
+
error: options.detail,
|
|
1449
|
+
publishBlocked: {
|
|
1450
|
+
summary: options.summary,
|
|
1451
|
+
detail: options.detail,
|
|
1452
|
+
publicBranch: options.publicBranch,
|
|
1453
|
+
localRef: options.localRef,
|
|
1454
|
+
sha: options.sha,
|
|
1455
|
+
stage: options.stage,
|
|
1456
|
+
},
|
|
1457
|
+
};
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1428
1460
|
export async function createJobCommit(
|
|
1429
1461
|
repo: string,
|
|
1430
1462
|
workerId: string,
|
|
@@ -1437,7 +1469,7 @@ export async function createJobCommit(
|
|
|
1437
1469
|
context?: "host" | "docker";
|
|
1438
1470
|
},
|
|
1439
1471
|
runtimeConfig: WorkerpalsRuntimeConfig = DEFAULT_CONFIG,
|
|
1440
|
-
): Promise<
|
|
1472
|
+
): Promise<CreateJobCommitResult> {
|
|
1441
1473
|
const defaultPublicBranchName = `agent/${workerId}/${job.id}`;
|
|
1442
1474
|
const reviewAgentHeadRef =
|
|
1443
1475
|
job.params?.reviewAgent &&
|
|
@@ -1569,7 +1601,14 @@ export async function createJobCommit(
|
|
|
1569
1601
|
);
|
|
1570
1602
|
if (!sync.ok) {
|
|
1571
1603
|
pushError = `Failed to sync branch before push: ${redactSensitiveText(sync.error)}`;
|
|
1572
|
-
|
|
1604
|
+
return buildPublishBlockedCommitResult({
|
|
1605
|
+
summary: `Failed to sync and push ${job.kind} commit`,
|
|
1606
|
+
detail: pushError,
|
|
1607
|
+
publicBranch: publicBranchName,
|
|
1608
|
+
localRef: hiddenCommitRef,
|
|
1609
|
+
sha,
|
|
1610
|
+
stage: "sync",
|
|
1611
|
+
});
|
|
1573
1612
|
}
|
|
1574
1613
|
sha = sync.sha;
|
|
1575
1614
|
|
|
@@ -1596,10 +1635,14 @@ export async function createJobCommit(
|
|
|
1596
1635
|
|
|
1597
1636
|
if (!pushed) {
|
|
1598
1637
|
if (requirePush) {
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1638
|
+
return buildPublishBlockedCommitResult({
|
|
1639
|
+
summary: `Failed to sync and push ${job.kind} commit`,
|
|
1640
|
+
detail: pushError || `Failed to push ${publicBranchName}`,
|
|
1641
|
+
publicBranch: publicBranchName,
|
|
1642
|
+
localRef: hiddenCommitRef,
|
|
1643
|
+
sha,
|
|
1644
|
+
stage: "push",
|
|
1645
|
+
});
|
|
1603
1646
|
}
|
|
1604
1647
|
console.warn(
|
|
1605
1648
|
`[WorkerPals] ${pushError}. Continuing with local commit ref only (set WORKERPALS_REQUIRE_PUSH=1 to enforce push).`,
|
|
@@ -2501,15 +2544,19 @@ async function autoResolveRebaseConflicts(
|
|
|
2501
2544
|
if (!checkout.ok) {
|
|
2502
2545
|
checkout = await git(repo, ["checkout", "--ours", "--", path]);
|
|
2503
2546
|
if (!checkout.ok) {
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2547
|
+
const rm = await git(repo, ["rm", "--force", "--", path]);
|
|
2548
|
+
if (!rm.ok) {
|
|
2549
|
+
return {
|
|
2550
|
+
ok: false,
|
|
2551
|
+
error: `Failed to resolve rebase conflict for ${path}: ${combinedGitOutput(checkout)}`,
|
|
2552
|
+
};
|
|
2553
|
+
}
|
|
2508
2554
|
}
|
|
2509
2555
|
}
|
|
2510
2556
|
}
|
|
2511
|
-
// Stage
|
|
2512
|
-
|
|
2557
|
+
// Stage only the conflicted paths so worker-side resolution can include add/add files
|
|
2558
|
+
// without accidentally sweeping unrelated untracked artifacts into the replayed commit.
|
|
2559
|
+
const addAll = await git(repo, ["add", "-A", "--", ...unresolvedPaths]);
|
|
2513
2560
|
if (!addAll.ok) {
|
|
2514
2561
|
return {
|
|
2515
2562
|
ok: false,
|
|
@@ -2559,6 +2606,41 @@ export async function syncHiddenRefWithRemoteBranchByRebase(
|
|
|
2559
2606
|
publicBranchName: string,
|
|
2560
2607
|
jobId: string,
|
|
2561
2608
|
): Promise<{ ok: true; sha: string } | { ok: false; error: string }> {
|
|
2609
|
+
const scrubKnownPreSyncArtifacts = async (): Promise<
|
|
2610
|
+
{ ok: true } | { ok: false; error: string }
|
|
2611
|
+
> => {
|
|
2612
|
+
const codexPath = resolve(repo, ".codex");
|
|
2613
|
+
if (!existsSync(codexPath)) return { ok: true };
|
|
2614
|
+
|
|
2615
|
+
const trackedCodex = await git(repo, ["ls-files", "--error-unmatch", "--", ".codex"]);
|
|
2616
|
+
if (trackedCodex.ok) {
|
|
2617
|
+
return {
|
|
2618
|
+
ok: false,
|
|
2619
|
+
error:
|
|
2620
|
+
"Tracked .codex path blocks branch sync. Move Codex state outside the repo worktree before retrying.",
|
|
2621
|
+
};
|
|
2622
|
+
}
|
|
2623
|
+
|
|
2624
|
+
try {
|
|
2625
|
+
rmSync(codexPath, { recursive: true, force: true });
|
|
2626
|
+
} catch (error) {
|
|
2627
|
+
return {
|
|
2628
|
+
ok: false,
|
|
2629
|
+
error: `Failed to scrub transient .codex artifact before branch sync: ${String(error)}`,
|
|
2630
|
+
};
|
|
2631
|
+
}
|
|
2632
|
+
|
|
2633
|
+
if (existsSync(codexPath)) {
|
|
2634
|
+
return {
|
|
2635
|
+
ok: false,
|
|
2636
|
+
error: "Failed to scrub transient .codex artifact before branch sync: path still exists.",
|
|
2637
|
+
};
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
console.warn("[WorkerPals] Removed transient .codex artifact before branch sync.");
|
|
2641
|
+
return { ok: true };
|
|
2642
|
+
};
|
|
2643
|
+
|
|
2562
2644
|
const pullRebaseNonInteractive = () =>
|
|
2563
2645
|
git(repo, [
|
|
2564
2646
|
"-c",
|
|
@@ -2605,6 +2687,10 @@ export async function syncHiddenRefWithRemoteBranchByRebase(
|
|
|
2605
2687
|
const maxPullRebaseAttempts = 5;
|
|
2606
2688
|
let syncedWithRemote = false;
|
|
2607
2689
|
for (let attempt = 1; attempt <= maxPullRebaseAttempts; attempt++) {
|
|
2690
|
+
const preSyncGuard = await scrubKnownPreSyncArtifacts();
|
|
2691
|
+
if (!preSyncGuard.ok) {
|
|
2692
|
+
return { ok: false, error: preSyncGuard.error };
|
|
2693
|
+
}
|
|
2608
2694
|
let pullRebase = await pullRebaseNonInteractive();
|
|
2609
2695
|
if (!pullRebase.ok && isPullRebaseDirtyWorkingTreeOutput(combinedGitOutput(pullRebase))) {
|
|
2610
2696
|
// Recover from dirty index/worktree left by previous attempts and retry non-interactively.
|
|
@@ -2632,10 +2718,16 @@ export async function syncHiddenRefWithRemoteBranchByRebase(
|
|
|
2632
2718
|
}
|
|
2633
2719
|
const resolved = await autoResolveRebaseConflicts(repo);
|
|
2634
2720
|
if (!resolved.ok) {
|
|
2721
|
+
const unresolved = await git(repo, ["diff", "--name-only", "--diff-filter=U"]);
|
|
2722
|
+
const unresolvedPaths = unresolved.ok
|
|
2723
|
+
? parseChangedPathsFromNameOnlyOutput(unresolved.stdout).join(", ")
|
|
2724
|
+
: "";
|
|
2635
2725
|
await git(repo, ["rebase", "--abort"]);
|
|
2636
2726
|
return {
|
|
2637
2727
|
ok: false,
|
|
2638
|
-
error: `Rebase conflict resolution failed for ${publicBranchName}: ${resolved.error}
|
|
2728
|
+
error: `Rebase conflict resolution failed for ${publicBranchName}: ${resolved.error}${
|
|
2729
|
+
unresolvedPaths ? ` | unresolved=${unresolvedPaths}` : ""
|
|
2730
|
+
}`,
|
|
2639
2731
|
};
|
|
2640
2732
|
}
|
|
2641
2733
|
if (attempt < maxPullRebaseAttempts) {
|
|
@@ -46,6 +46,14 @@ interface JobResult {
|
|
|
46
46
|
branch: string;
|
|
47
47
|
sha: string;
|
|
48
48
|
};
|
|
49
|
+
publishBlocked?: {
|
|
50
|
+
summary: string;
|
|
51
|
+
detail: string;
|
|
52
|
+
publicBranch: string;
|
|
53
|
+
localRef: string;
|
|
54
|
+
sha: string;
|
|
55
|
+
stage: "sync" | "push";
|
|
56
|
+
};
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
// ─── Logging helpers ────────────────────────────────────────────────────────
|
|
@@ -198,10 +206,19 @@ async function main(): Promise<void> {
|
|
|
198
206
|
commitResult.error ??
|
|
199
207
|
`Commit metadata missing for ${spec.kind} (${spec.jobId}) while running in Docker mode`;
|
|
200
208
|
jobResult.ok = false;
|
|
201
|
-
jobResult.summary =
|
|
209
|
+
jobResult.summary =
|
|
210
|
+
commitResult.publishBlocked?.summary ?? `Failed to create commit for ${spec.kind}`;
|
|
202
211
|
jobResult.stderr = [jobResult.stderr, commitError].filter(Boolean).join("\n");
|
|
212
|
+
if (commitResult.publishBlocked) {
|
|
213
|
+
jobResult.publishBlocked = commitResult.publishBlocked;
|
|
214
|
+
}
|
|
203
215
|
jobResult.exitCode = jobResult.exitCode && jobResult.exitCode !== 0 ? jobResult.exitCode : 1;
|
|
204
|
-
log(
|
|
216
|
+
log(
|
|
217
|
+
"stderr",
|
|
218
|
+
commitResult.publishBlocked
|
|
219
|
+
? `[JobRunner] Publish blocked: ${commitError}`
|
|
220
|
+
: `[JobRunner] Failed to create commit: ${commitError}`,
|
|
221
|
+
);
|
|
205
222
|
}
|
|
206
223
|
}
|
|
207
224
|
|
|
@@ -450,6 +450,7 @@ async function runJob(
|
|
|
450
450
|
stdout: result.stdout,
|
|
451
451
|
stderr: result.stderr,
|
|
452
452
|
exitCode: result.exitCode,
|
|
453
|
+
publishBlocked: result.publishBlocked,
|
|
453
454
|
commit: result.commit,
|
|
454
455
|
};
|
|
455
456
|
}
|
|
@@ -1361,6 +1362,15 @@ async function workerLoop(
|
|
|
1361
1362
|
);
|
|
1362
1363
|
result = failNoChangeReviewFixJob(job.id, result);
|
|
1363
1364
|
}
|
|
1365
|
+
} else if (commitResult.publishBlocked) {
|
|
1366
|
+
result = {
|
|
1367
|
+
...result,
|
|
1368
|
+
ok: false,
|
|
1369
|
+
summary: commitResult.publishBlocked.summary,
|
|
1370
|
+
stderr: [result.stderr, commitResult.error].filter(Boolean).join("\n"),
|
|
1371
|
+
publishBlocked: commitResult.publishBlocked,
|
|
1372
|
+
};
|
|
1373
|
+
console.error(`[WorkerPals] Publish blocked: ${commitResult.error}`);
|
|
1364
1374
|
} else if (commitResult.error) {
|
|
1365
1375
|
console.error(`[WorkerPals] Failed to create commit: ${commitResult.error}`);
|
|
1366
1376
|
}
|
|
@@ -1400,7 +1410,22 @@ async function workerLoop(
|
|
|
1400
1410
|
}
|
|
1401
1411
|
|
|
1402
1412
|
let statusPersistedToServer = false;
|
|
1403
|
-
if (result.
|
|
1413
|
+
if (result.publishBlocked) {
|
|
1414
|
+
const response = await postJsonWithTimeout(
|
|
1415
|
+
`${opts.server}/jobs/${job.id}/publish-blocked`,
|
|
1416
|
+
headers,
|
|
1417
|
+
{
|
|
1418
|
+
message: result.summary,
|
|
1419
|
+
detail: redactSensitiveText(result.stderr ?? ""),
|
|
1420
|
+
publishBlocked: result.publishBlocked,
|
|
1421
|
+
durationMs: jobDurationMs,
|
|
1422
|
+
},
|
|
1423
|
+
);
|
|
1424
|
+
statusPersistedToServer = response.ok;
|
|
1425
|
+
console.log(
|
|
1426
|
+
`[WorkerPals] Job ${job.id} publish-blocked in ${formatDurationMs(jobDurationMs)}: ${result.summary}`,
|
|
1427
|
+
);
|
|
1428
|
+
} else if (result.ok) {
|
|
1404
1429
|
const reviewAgent =
|
|
1405
1430
|
parsedParams.reviewAgent && typeof parsedParams.reviewAgent === "object"
|
|
1406
1431
|
? (parsedParams.reviewAgent as Record<string, unknown>)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## Base Guidance
|
|
2
|
+
Command-router policy: shell commands are allowed, but invoke the actual command directly instead of wrapping it with `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, or `pwsh -Command`. If a wrapper command is rejected, rerun its inner command directly through the command tool.
|
|
3
|
+
|
|
4
|
+
## Recovery Guidance
|
|
5
|
+
Command-router recovery: the previous attempt retried disallowed shell wrappers.
|
|
6
|
+
Retry once using shell commands normally, but invoke the inner command directly instead of wrapping it in `/bin/bash -lc`, `bash -c`, `sh -lc`, `cmd /c`, `powershell -Command`, or `pwsh -Command`.
|
|
7
|
+
You are not limited to a fixed allowlist of commands. The constraint is only that command execution must target the actual program/argv directly rather than a wrapper shell.
|
|
8
|
+
|
|
9
|
+
## Rejection Detail
|
|
10
|
+
Codex repeatedly attempted disallowed shell-wrapper commands that the command router rejected. Shell commands are allowed, but wrapper shells are not; invoke the inner command directly and avoid wrapper retries.
|