@wrongstack/webui 0.317.2 → 0.318.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/assets/{AgentRosterView-xv5VajRi.js → AgentRosterView-C46rL23K.js} +1 -1
  2. package/dist/assets/{AnalyticsDashboard-D7D5_bvf.js → AnalyticsDashboard-B8r_8kNv.js} +1 -1
  3. package/dist/assets/{AudienceMemoryPanel-Cpg91ZrC.js → AudienceMemoryPanel-Ciybycpn.js} +1 -1
  4. package/dist/assets/{ChangesView-4CP-bLYD.js → ChangesView-BREfCsEq.js} +1 -1
  5. package/dist/assets/{ChimeraReviewsView-DZjw-bOC.js → ChimeraReviewsView-aSYmQ8tC.js} +1 -1
  6. package/dist/assets/{ChronicleDashboard-BnNxX8Hc.js → ChronicleDashboard-bo2jv52s.js} +1 -1
  7. package/dist/assets/{CodeEditor-FNYzhDcO.js → CodeEditor-C_KzNkIb.js} +1 -1
  8. package/dist/assets/{CronJobsPanel-BXqObet6.js → CronJobsPanel-D-43oYQ-.js} +1 -1
  9. package/dist/assets/{DebugDashboard-Hwt0OxYX.js → DebugDashboard-DNDadwro.js} +1 -1
  10. package/dist/assets/{DesignGalleryView-Ce2H_zeu.js → DesignGalleryView-B9ZMJPOQ.js} +1 -1
  11. package/dist/assets/{GoalView-DlS73sGV.js → GoalView-BkoCNN8l.js} +1 -1
  12. package/dist/assets/{KanbanView-Cd77gXMT.js → KanbanView-nql6LkaS.js} +1 -1
  13. package/dist/assets/{MailboxDetailView-B4hFbVk5.js → MailboxDetailView-CdHRfnNq.js} +1 -1
  14. package/dist/assets/{MemoryDrawer-CnpnSW42.js → MemoryDrawer-CfukdhlF.js} +1 -1
  15. package/dist/assets/{MemoryManager-DqJfeD_d.js → MemoryManager-BD_VnFAu.js} +1 -1
  16. package/dist/assets/{ModelPicker-R1UwpDyl.js → ModelPicker-C3r7IFfh.js} +1 -1
  17. package/dist/assets/{OfficeMapPanel-zAuziIkn.js → OfficeMapPanel-B47jfEHf.js} +1 -1
  18. package/dist/assets/{ProcessMonitor-Baj9b1_B.js → ProcessMonitor-CvHdN8Bn.js} +1 -1
  19. package/dist/assets/{RequirementIntakeView-B5JjTm9k.js → RequirementIntakeView-CFgVx_0T.js} +1 -1
  20. package/dist/assets/{SageTabs-Co-5UcaG.js → SageTabs-BRJG0fhZ.js} +2 -2
  21. package/dist/assets/{SddHub-DYAjEaqD.js → SddHub-Br1vyCgq.js} +1 -1
  22. package/dist/assets/{SessionInspectView-DVeF-pUQ.js → SessionInspectView-BSRjWErA.js} +1 -1
  23. package/dist/assets/{SessionList-BvVLmIsL.js → SessionList-BkaI91oW.js} +1 -1
  24. package/dist/assets/{SessionsDashboard-wPcCBDIK.js → SessionsDashboard-BEQs4Div.js} +1 -1
  25. package/dist/assets/{SetupScreen-uhBHDZqD.js → SetupScreen-zY4541lT.js} +1 -1
  26. package/dist/assets/{SkillDetailView-DPqT3npD.js → SkillDetailView-DqxkOnb8.js} +1 -1
  27. package/dist/assets/{SpecsView-BEITfh6o.js → SpecsView-COS0-sxq.js} +1 -1
  28. package/dist/assets/{TechStackView-DLEi7aSX.js → TechStackView-Dr8vI0hK.js} +1 -1
  29. package/dist/assets/{index-b_i-YcNT.js → index-DbprKWmG.js} +5 -5
  30. package/dist/assets/{useWebSocket-B4er0zlV.js → useWebSocket-VIItbvVK.js} +1 -1
  31. package/dist/index.html +3 -3
  32. package/dist/index.js +3 -1
  33. package/dist/stores/file-store.d.ts +9 -0
  34. package/package.json +9 -9
@@ -11,7 +11,7 @@ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,At as n,Bt as r
11
11
 
12
12
  `),brainDecision:i}),n.intervened&&f.info(`Brain intervened: agent steered`)}else if(n.event===`brain.decision_denied`){let e=n.decision?.reason??n.request?.question??`request`,r={id:n.requestId??n.request?.id,kind:`denied`,question:n.request?.question,source:n.request?.source,risk:n.request?.risk,decisionType:`deny`,reason:e,rationale:n.decision?.rationale,at:Date.now()};t.addMessage({role:`assistant`,content:`🧠 Denied: ${e}`,brainDecision:r}),f.warn(`Brain denied: ${e}`)}else if(n.event===`brain.decision_answered`){let e=n.decision?.text??n.decision?.optionId??``,r=n.decision?.rationale??``,i={id:n.requestId??n.request?.id,kind:`answered`,question:n.request?.question,source:n.request?.source,risk:n.request?.risk,decisionType:n.decision?.type??`answer`,optionId:n.decision?.optionId,text:e,rationale:r,reason:n.decision?.reason,at:Date.now()};t.addMessage({role:`assistant`,content:`🧠 ${e}${r?`\n\n_${r}_`:``}`,brainDecision:i})}else if(n.event===`brain.decision_ask_human`){let e={id:n.requestId??n.request?.id,kind:`ask_human`,question:n.request?.question,source:n.request?.source,risk:n.request?.risk,decisionType:`ask_human`,rationale:n.decision?.rationale,reason:n.decision?.reason,at:Date.now()};t.addMessage({role:`assistant`,content:`🧠 The Brain escalated this question back to you — it needs human judgement.`,brainDecision:e})}}function Kn(e){let t=En.for(A(e)),n=jn.for(A(e)),r=e.payload;P.getState().pushEvent({id:`memory_${Date.now()}_${Math.random().toString(36).slice(2,7)}`,kind:`memory:event`,timestamp:Date.now(),source:`sage`,target:`leader`,label:r.event.replace(/^memory\./,``),data:r,color:`#a78bfa`,flowGroup:`memory`}),r.event===`memory.injector_run`&&t.getState().pushTrace(r),r.event===`memory.context_snapshot`&&t.getState().applyContextSnapshot(r),n.getState().pushEvent(r),r.event===`memory.staled`?f.warn(`Memory became stale: ${String(r.memoryId??``)}`):r.event===`memory.contradicted`?f.warn(`Memory contradicted: ${String(r.memoryId??``)}`):r.event===`memory.hygiene_completed`&&f.info(`SAGE hygiene completed`)}function qn(e){let t=e.payload,n=typeof t.kind==`string`?t.kind:typeof t.event==`string`?t.event:`collab.event`;P.getState().pushEvent({id:`collab_${Date.now()}_${Math.random().toString(36).slice(2,7)}`,kind:`collab:event`,timestamp:Date.now(),source:`collab`,target:typeof t.sessionId==`string`?t.sessionId:`session`,label:n,magnitude:1,data:t,raw:e.payload,color:`hsl(200, 70%, 55%)`,flowGroup:`collab`}),P.getState().setActive(!0)}function Jn(e){qn(e);let t=e.payload;t?.phase===`consumed`?f.success(`Tool injection applied${t.toolName?` to ${t.toolName}`:``}`):f.info(`Collab tool injection queued`)}function Yn(e){let t=e.payload?.entry;if(!t)return;let n=typeof t.iteration==`number`?t.iteration:0,r=typeof t.task==`string`?t.task:void 0,i=typeof t.status==`string`?t.status:void 0,a=typeof t.at==`string`?t.at:new Date().toISOString();De.getState().appendJournalEntry({iteration:n,task:r,status:i,timestamp:a}),P.getState().pushEvent({id:`eternal_${Date.now()}_${n}`,kind:`eternal:iteration`,timestamp:Date.now(),source:`eternal`,target:`goal`,label:r?`L${n}: ${r}`:`Eternal iteration ${n}`,magnitude:typeof t.costUsd==`number`?t.costUsd:1,data:t,raw:e.payload,color:i===`failure`?`hsl(0, 80%, 55%)`:`hsl(220, 80%, 60%)`,flowGroup:`eternal`}),P.getState().setActive(!0)}function Xn(e){let t=e.payload,n=A(e);x.getState().setEnv({cwd:t.cwd,projectRoot:t.projectRoot,projectName:t.projectRoot.split(/[/\\]/).pop()||t.projectRoot}),g.getState().setTreeLoading(!0,n),Rt(t.projectRoot,n),N().send({type:`files.tree`,payload:n?{path:t.cwd,sessionId:n}:{path:t.cwd}})}function Zn(e){let t=e.payload,n=z.getState().refinePanel,r=A(e)??n?.sessionId??null,i=j(e)??(r?fe(r):null),a=i?.pendingRefinement??null;if(n?.sessionId&&r&&n.sessionId!==r||n?.sessionId&&!i)return;if(!n&&a&&i){i.setRefining(!1);let e=a.text,n=a.images?.length?a.images.map((e,t)=>({id:`pr_${Date.now()}_${t}`,dataUrl:`data:${e.mime};base64,${e.data}`,mediaType:e.mime,bytes:Math.round(e.data.length*3/4)})):void 0,r=n&&n.length>0&&a.mode===`btw`?`queue`:a.mode??`queue`;if(t.error){i.setPendingRefinement(null),i.enqueue(e,r,n);return}let o=t.refined??``;if(!o||bn(o,e)){i.setPendingRefinement(null),i.enqueue(e,r,n);return}i.setPendingRefinement(null),z.getState().setRefinePanel({original:e,refined:o,english:t.english||o,status:`ready`,mode:n&&n.length>0&&a.mode===`btw`?`queue`:a.mode,images:n,...t.refinedWith?{provider:t.refinedWith.provider,model:t.refinedWith.model}:{},error:void 0,errorKind:void 0,sessionId:i.sessionId,resolve:()=>{}});return}if(!n)return;if(t.error){if(t.errorKind===`timeout`&&!n.retried&&t.retryTimeoutMs){z.getState().setRefinePanel({...n,status:`refining`,retried:!0}),N().refineModel(n.original,{timeoutMs:t.retryTimeoutMs});return}z.getState().setRefinePanel({...n,status:`failed`,error:t.error,errorKind:t.errorKind,fallbackRef:t.fallbackRef});return}let o=n.original;if(bn(t.refined,o)){z.getState().setRefinePanel(null);let e=i??I();e.addMessage({role:`user`,content:o}),e.setLoading(!0);let t=e.sessionId===`__unbound__`?void 0:e.sessionId;N().sendMessage(o,void 0,!1,t);return}z.getState().setRefinePanel({...n,status:`ready`,refined:t.refined,english:t.english,...t.refinedWith?{provider:t.refinedWith.provider,model:t.refinedWith.model}:{},error:void 0,errorKind:void 0})}function Qn(e){let t=e.payload;Ce.getState().setInfo({...t,fetchedAt:Date.now()})}function $n(e){let t=e.payload;S.getState().setFiles(t.files??[],t.error??null,t.repoPrefix??``,t.dirs??{})}function er(e){let t=e.payload;S.getState().selectedPath===t.path&&S.getState().setDiff({path:t.path,oldText:t.oldText??``,newText:t.newText??``,binary:t.binary,tooLarge:t.tooLarge,error:t.error})}function tr(e){let t=e.payload;if(!t.ok){f.error(t.error??`Git ${t.action} failed`);return}let n=N();n.getGitChanges(),n.getGitInfo()}function nr(e){let t=e.payload;Me.getState().setSnapshot({count:t.count,maxConcurrent:t.maxConcurrent,jobs:t.jobs??[]})}function rr(e){let t=e.payload;Me.getState().recordFired(t.name,t.ts)}function ir(e){let t=e.payload;f.info(t.message??`🦂 Chimera report ready. No follow-up started; open the mailbox to inspect it.`,8e3);let n=A(e);!t.reportId||!n||!c.getState().recordReport({reportId:t.reportId,sessionId:n,message:t.message??``,findingCount:t.findingCount??0,fileCount:t.fileCount??0,hasActionableFindings:t.hasActionableFindings===!0,receivedAt:Date.now(),actionedAt:null,source:`event`})||t.hasActionableFindings!==!0||j(e)?.addMessage({role:`system`,content:t.message??`🦂 Chimera report ${t.reportId} is ready — findings await review.`,chimeraReport:{reportId:t.reportId,actionable:!0,actionedAt:null}})}function ar(e){let t=A(e);if(!t)return;let n=e.payload.reports??[];c.getState().hydrateReports(t,n.filter(e=>e.reportId&&e.totalFindings>0&&e.lifecycleStatus!==`completed`&&e.lifecycleStatus!==`skipped`).map(e=>{let n=Date.parse(e.reviewedAt);return{reportId:e.reportId,sessionId:t,message:`🦂 Chimera report ready — ${e.totalFindings} finding(s) recorded for this session.`,findingCount:e.totalFindings,fileCount:0,hasActionableFindings:e.hasActionableFindings===!0,receivedAt:Number.isFinite(n)?n:Date.now(),actionedAt:null,source:`hydrate`}}))}var or={"goal-state.updated":Vn,"prefs.updated":Hn,"system_prompt.info":Un,"goal.state":Rn,"goal.progress":zn,"goal.paused":X,"goal.resumed":X,"goal.stopped":X,"goal.cleared":X,"goal.reverted":X,"goal.saved":X,"goal.completed":X,"goal.failed":X,"goal.error":X,"goal.list":Bn,"brain.answer":Wn,"brain.event":Gn,"memory.event":Kn,"collab.event":qn,"collab.injection.granted":Jn,"eternal.iteration":Yn,"working_dir.changed":Xn,"model.refine_result":Zn,"git.info":Qn,"git.changes":$n,"git.diff":er,"git.action_result":tr,"cron.snapshot":nr,"cron.job_fired":rr,"chimera.report_available":ir,"chimera.reports":ar},sr=new Map;function cr(e){let t=e??`__unbound__`,n=sr.get(t);if(n)return n;let r=new Set;return sr.set(t,r),r}function lr(e=I()){b.flush(`__thinking__:${e.sessionId}`);let t=ae(e.sessionId).iteration;e.flushThinkingLog(Math.max(1,t?.index??1)),e.clearThinking()}function ur(e){let t=j(e);if(!t)return;let n=e.payload,r=e=>e.toLocaleString(),i=[...n.tools.breakdown].sort((e,t)=>t.tokens-e.tokens).slice(0,8),a=[...n.messages.breakdown].sort((e,t)=>t.tokens-e.tokens).slice(0,8);t.addMessage({role:`assistant`,content:[`📊 **Context breakdown** (heuristic — 4 chars/token)`,``,`**Total estimate:** ${r(n.total)} tokens`,`• System prompt: ${r(n.systemPrompt)}`,`• Tool schemas: ${r(n.tools.total)} (${n.tools.count} tools)`,`• Messages: ${r(n.messages.total)} (${n.messages.count} messages)`,``,`**Top tool schemas:**`,...i.map(e=>` · ${e.name}: ${r(e.tokens)}`),``,`**Top messages:**`,...a.map(e=>` · #${e.index} ${e.role}: ${r(e.tokens)} — ${e.preview||`(empty)`}`)].join(`
13
13
  `)})}function dr(e){let n=e.payload;!n||typeof n.message!=`string`||n.message.startsWith(`Resumed session`)||n.message.includes(`Session is already active`)||n.message.startsWith(`Swapped session`)||(n.success?f.success(n.message):f.error(n.message),N(t.getState().wsUrl).listSavedProviders())}function fr(e){let n=e.payload;if(!n.success||!n.provider||!n.model)return;let r=j(e),i=O(e);if(!r||!i)return;let a=i.data.session;i.setSession({id:a?.id??r.sessionId,startedAt:a?.startedAt??Date.now(),provider:n.provider,model:n.model,...a?.title?{title:a.title}:{}}),r.sessionId===v()&&(t.getState().setProvider(n.provider),t.getState().setModel(n.model));let o=n.previousProvider&&n.previousModel?`${n.previousProvider} / ${n.previousModel}`:pe.t(`settings:toast.previousModel`),s=`${n.provider} / ${n.model}`;r.addMessage({role:`system`,content:pe.t(n.runActive?`settings:toast.modelSwitchedRunActive`:`settings:toast.modelSwitchedNextRequest`,{from:o,to:s})})}function pr(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r=n.reductions.length?n.reductions.map(e=>`${e.phase}: ${e.saved}`).join(`, `):`no-op`;n.repaired&&(r+=`; repaired ${n.repaired.removedToolUses?.length??0} tool_use, ${n.repaired.removedToolResults?.length??0} tool_result, ${n.repaired.removedMessages} empty messages`),t.addMessage({role:`system`,content:`🗜️ Context compacted: ${n.before} → ${n.after} tokens (saved ~${n.saved}). ${r}`}),O(e)?.patch({lastInputTokens:n.after})}function mr(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r,i;n.budget&&n.budget.availableInputTokens>0?(r=Math.min(100,Math.max(0,Math.round(n.budget.load*100))),i=`input budget`):(r=n.maxContext>0?Math.min(100,Math.max(0,Math.round(n.tokens/n.maxContext*100))):0,i=`context`),t.addMessage({role:`assistant`,content:`Compaction failed at ${n.level} (${r}% ${i}): ${n.message}`,isError:n.fatal}),t.sessionId===v()&&f.error(`Compaction failed: ${n.message}`)}function hr(e){if(!C(e))return;let t=e.payload,n=`${t.tool}: ${t.pattern}`;t.decision===`always`?f.success(`Always allowed ${n}`):f.warn(`Denied ${n}`)}function gr(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r=n.removedToolUses.length+n.removedToolResults.length+n.removedMessages,i=n.beforeMessages!==void 0&&n.afterMessages!==void 0?` Messages: ${n.beforeMessages} -> ${n.afterMessages}.`:``;t.addMessage({role:`assistant`,content:`Context repaired: removed ${r} orphan protocol item(s).${i} tool_use ${n.removedToolUses.length}, tool_result ${n.removedToolResults.length}.`})}function _r(e){let t=O(e);if(!t)return;M(e);let n=e.payload;t.setContextUsage(n.tokens,n.maxContext)}function vr(e){let t=O(e);if(!t)return;let n=e.payload;t.setEnvRates({maxContext:n.maxContext});let r=t.data;n.source===`provider`&&n.decreased===!0&&typeof n.previousMaxContext==`number`&&n.previousMaxContext>n.maxContext?t.setContextLimitWarning({previousMaxContext:n.previousMaxContext,maxContext:n.maxContext,providerId:n.providerId??r.session?.provider??`provider`,modelId:n.modelId??r.session?.model??`model`}):(n.decreased===!1||n.source===`configured`)&&t.setContextLimitWarning(null)}function yr(e){let t=O(e);if(!t)return;let n=e.payload;t.setContextUsage(n.used,n.limit);let r=n.limit>0?Math.round(n.used/n.limit*100):0;t.sessionId===v()&&f.warn(`Token threshold reached (${r}%)`)}function br(e){let t=A(e),n=e.payload.model||`<unknown>`,r=cr(t);r.has(n)||(r.add(n),(!t||t===v())&&f.warn(`Cost estimate unavailable for ${n}`))}function xr(e){let t=e.payload;oe({contextModes:t.modes.map(e=>({id:e.id,name:e.name,description:e.description,thresholds:e.thresholds,preserveK:e.preserveK,eliseThreshold:e.eliseThreshold,custom:e.custom}))}),(O(e)??null)?.setEnvRates({contextMode:t.activeId})}function Sr(e){let t=O(e);if(!t)return;let n=e.payload;t.setEnvRates({contextMode:n.id})}function Cr(e){let t=e.payload;typeof t.sessionId==`string`&&t.sessionId.length!==0&&ee.getState().update(t.sessionId,{stage:typeof t.stage==`string`?t.stage:`open_journal`,loadedBytes:typeof t.loadedBytes==`number`?t.loadedBytes:0,totalBytes:typeof t.totalBytes==`number`?t.totalBytes:0})}function wr(e){let t=e.payload;if(t.phase===`session.resume`||t.phase===`session.focus`){let n=typeof t.requestedSessionId==`string`?t.requestedSessionId:A(e);n&&ee.getState().end(n)}if(t.phase===`todos.get`||typeof t.requestedSessionId==`string`)return;if(t.code===`session_not_ready`){let n=A(e),r=typeof t.content==`string`?t.content:``;if(n&&r){let i=Array.isArray(t.images)?t.images:void 0,a=N();if(a.armNotReadyResend(n,{content:r,freshContext:t.freshContext===!0,...i?{images:i}:{}})){a.resumeSession(n);let t=j(e);t?.addMessage({role:`assistant`,content:`ℹ️ Session is reopening — your message will be resent automatically.`}),t?.setLoading(!1);return}}}let n=j(e)??I();lr(n),n.addMessage({role:`assistant`,content:`[${t.phase}] ${t.message}`,isError:!0}),n.setLoading(!1)}function Tr(e,t=180){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}var Er=640;function Dr(){let[e,t]=(0,G.useState)({isMobile:!1,isSmall:!1,width:0});return(0,G.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: 768px)`),n=window.matchMedia(`(max-width: ${Er}px)`),r=()=>{t({isMobile:e.matches,isSmall:n.matches,width:window.innerWidth})};return r(),e.addEventListener(`change`,r),n.addEventListener(`change`,r),()=>{e.removeEventListener(`change`,r),n.removeEventListener(`change`,r)}},[]),e}function Or(){return typeof window>`u`?!1:window.matchMedia(`(max-width: 768px)`).matches}var kr=`<!-- wrongstack-bug-hunt`,Ar=/^<!-- wrongstack-bug-hunt scope="([^"]*)" max-bugs="([123])" -->\n/;function jr(e,t){return`${kr} scope="${encodeURIComponent(t.scope)}" max-bugs="${t.maxBugs}" -->\n${e}`}function Mr(e){let t=Ar.exec(e);if(t)try{return{scope:decodeURIComponent(t[1]??``),maxBugs:Number(t[2])}}catch{return}}function Nr(e){if(typeof e!=`string`)return Date.now();let t=Date.parse(e);return Number.isFinite(t)?t:Date.now()}function Pr(e){return`replay_${Date.now()}_${e}`}function Fr(){return typeof window>`u`?!1:window.location.pathname===`/debug`||window.location.pathname===`/analytics`||window.location.pathname===`/refresh-debug`}function Ir(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`&&e.type===`text`&&typeof e.text==`string`).map(e=>e.text).join(`
14
- `):``}function Lr(e){if(typeof e==`string`)return e.trim();if(!e||typeof e!=`object`||Array.isArray(e))return``;let t=e;for(let e of[`id`,`name`,`type`]){let n=t[e];if(typeof n==`string`&&n.trim())return n.trim()}return``}function Rr(e,t=[],n=[]){let r=Ye({messages:(Array.isArray(e)?e:[]).filter(e=>!!(e&&typeof e==`object`&&typeof e.role==`string`&&(e.role===`user`||e.role===`assistant`||e.role===`system`))),markers:t.filter(e=>!Br(e.source)),toolMeta:n,thinkingPlacement:`merged-after`}),i=[];for(let e of r){let t=Nr(e.ts),n=Pr(i.length);switch(e.kind){case`user`:let r=Mr(e.text);i.push({id:n,role:`user`,content:e.text,timestamp:t,...r?{bugHunt:r}:{},...e.images?{attachments:Vr(e.images,n)}:{}});break;case`assistant`:i.push({id:n,role:`assistant`,content:e.text,timestamp:t});break;case`system`:i.push({id:n,role:`system`,content:e.text,timestamp:t});break;case`thinking`:i.push({id:n,role:`system`,content:``,timestamp:t,thinkingLog:{iteration:e.index,text:e.text,startedAt:t,durationMs:0,replayed:!0}});break;case`tool`:i.push({id:n,role:`tool`,content:``,toolName:e.name,toolInput:e.input,toolUseId:e.toolUseId,timestamp:t,...e.output===void 0?{}:{toolResult:e.output},...e.ok===void 0?{}:{isError:!e.ok},...e.durationMs===void 0?{}:{toolDurationMs:e.durationMs}});break;case`marker`:i.push({id:n,role:`system`,content:e.text,timestamp:t,isError:e.level===`error`||void 0})}}return i}var zr=new Set([`agent_spawned`,`agent_session_linked`,`agent_stopped`,`agent_error`,`delegate_started`,`delegate_completed`]);function Br(e){return zr.has(e)}function Vr(e,t){return e.map((e,n)=>{let r=e.mediaType??`image/png`,i=e.data?`data:${r};base64,${e.data}`:e.url;return{id:`${t}_img_${n}`,kind:`image`,mediaType:r,bytes:e.data?Math.floor(e.data.length*3/4):0,...i?{dataUrl:i}:{}}})}function Hr(e){let n=re(`session.start`,e.payload);n&&(P.getState().pushEvent(n),P.getState().setActive(!0));let r=e?.payload&&typeof e.payload==`object`?e.payload:{},a=r.sessionId;if(!a)return;ee.getState().end(a),`openSessionIds`in r&&se(Array.isArray(r.openSessionIds)?r.openSessionIds.filter(e=>typeof e==`string`):[]),(r.appVersion||r.latestVersion)&&oe({appVersion:String(r.appVersion??``),latestVersion:String(r.latestVersion??``),updateAvailable:!!r.updateAvailable}),Array.isArray(r.providerStatuses)&&ke.getState().hydrate(r.providerStatuses.map(e=>({providerId:e.providerId,model:e.model,state:e.state,reason:e.lastErrorKind??e.state,updatedAt:e.lastFailureAt??Date.now(),stateExpiresAt:e.stateExpiresAt??void 0}))),r.needsSetup&&Pe(`setup`);let s={};r.projectRoot!==void 0&&(s.projectRoot=r.projectRoot),r.projectName!==void 0&&(s.projectName=r.projectName),r.cwd!==void 0&&(s.cwd=r.cwd),Object.keys(s).length>0&&oe(s);let c=!o(a);i(a),de(a),te(a),ie(a);let l=fe(a),u=ue(a),f=t.getState(),p=u.data.session,h=Lr(r.provider),_=Lr(r.model),y=h||p?.provider||f.provider||``,b=_||p?.model||f.model||``,S=typeof r.startedAt==`string`?Date.parse(r.startedAt):NaN,C=Number.isFinite(S)?S:Date.now(),w=!!r.isRunning,ne=Ur(a),ae=r.replayReason===`focus`,le=!c&&(ae||v()!==a),D=c||r.reset===!0&&!le;D?(u.startSession({id:a,startedAt:C,model:b,provider:y}),En.for(a).getState().clear()):u.setSession({id:a,startedAt:p?.startedAt??C,model:b,provider:y,...p?.title?{title:p.title}:{}}),u.setEnvRates({maxContext:r.maxContext,mode:r.mode,contextMode:r.contextMode,inputCost:r.inputCost,outputCost:r.outputCost,cacheReadCost:r.cacheReadCost,reasoningEffortLevels:r.reasoningEffortLevels,hasReasoningEffortKey:`reasoningEffortLevels`in r,effortSupported:r.effortSupported===!0||r.effortSupported===!1?r.effortSupported:void 0,hasEffortSupportedKey:`effortSupported`in r,projectReasoningEffort:typeof r.projectReasoningEffort==`string`?r.projectReasoningEffort:void 0,hasProjectEffortKey:`projectReasoningEffort`in r});let O=r.replayMessages,k=Array.isArray(O)&&O.length>0,A=k?Rr(O,r.replayMarkers??[],r.replayToolMeta??[]):[],j=l.messages.length>0,M=j&&(w||le&&!ne);if(r.replayReason===`redisplay`&&j&&A.length>0){let e=l.messages[0]?.timestamp??0,t=A.filter(t=>t.timestamp<e);t.length>0&&l.setMessages([...t,...l.messages])}else A.length>0&&!M?l.setMessages(A):D&&r.reset===!0&&A.length===0&&!w&&l.clearMessages();w||l.clearThinking(),l.setLoading(w);let F=r.replayUsage;if(O&&F){let e=u.data,t=F.input??0,n=F.output??0,r=F.cacheRead??0,i=F.cacheWrite??0;u.patch({totalTokens:{input:t,output:n,cacheRead:r,cacheWrite:i},cost:((t+i)*e.inputCost+n*e.outputCost+r*e.cacheReadCost)/1e6})}let I=r.lastInputTokens;typeof I==`number`&&I>0&&u.patch({lastInputTokens:I});let L=r.clearedSessionId;if(L){let e=new Map;for(let[t,n]of E.getState().agents)n.sessionId!==L&&e.set(t,n);E.setState({agents:e})}Array.isArray(r.agentSessions)&&r.agentSessions.length>0&&E.getState().hydrateAgentSessions(r.agentSessions,a);let R=v(),pe=R===`__unbound__`||!o(R),me=T.getState(),he=D&&!k&&!r.needsSetup&&!Re()&&!Fr()?{currentView:z.getState().currentView,activeActivity:z.getState().activeActivity,sidebarOpen:z.getState().sidebarOpen}:null;!ne&&!pe&&R!==a||(me.openTabIds.includes(a)?(m(a),ce(a),d(a),me.markSeen(a)):me.openTab(a,{}),y&&b?t.getState().setConfig({provider:y,model:b}):y&&t.getState().setConfig({provider:y}),K(w?`running`:`ready`),D&&(!r.needsSetup&&Re()&&!Fr()&&ve({sidebarOpen:!1}),z.getState().setSearchActiveMessageId(null),g.getState().setTreeLoading(!0,a),Rt(x.getState().projectRoot,a),N().send({type:`files.tree`,payload:{path:x.getState().cwd,sessionId:a}})),he&&z.setState(he),k&&!r.needsSetup&&!Fr()&&(Re()?ve({sidebarOpen:!1}):z.getState().currentView!==`chat`&&Fe(`chat`)),k&&Or()&&z.getState().setSidebarOpen(!1))}function Ur(e){try{return N().consumeRequestedSwitch(e)}catch{return!1}}function Z(e,t){e.sessionId===v()&&t()}function Wr(e){let t=j(e),n=O(e);if(!t||!n)return;M(e);let r=e.payload&&typeof e.payload==`object`?e.payload:{},i=Ir(r.content),a=r.usage,o=(a?.input??0)+(a?.cacheRead??0)+(a?.cacheWrite??0);if(o>0&&n.patch({lastInputTokens:o}),r.usage){n.updateUsage(r.usage,r.provider);let{inputCost:e,outputCost:t,cacheReadCost:i}=n.data,a=((r.usage.input??0)*e+(r.usage.cacheWrite??0)*e+(r.usage.output??0)*t+(r.usage.cacheRead??0)*i)/1e6;a>0&&n.addCost(a)}let c=s(r.stopReason);c&&t.setLoading(!1);let l=t.currentAssistantMessageId;if(l){b.flush(l);let e=t.messages.find(e=>e.id===l)?.content??``;i.trim()&&(e.trim()?i.startsWith(e)&&i.length>e.length&&t.updateMessage(l,{content:i}):t.updateMessage(l,{content:i})),t.finalizeMessage(l,{final:c}),r.usage&&(r.usage.output??0)>0&&t.updateMessage(l,{usage:r.usage})}else if(i.trim()){let e=t.addMessage({role:`assistant`,content:i,usage:r.usage&&(r.usage.output??0)>0?r.usage:void 0});t.finalizeMessage(e,{final:c})}t.setCurrentAssistantMessage(null),b.flush(`__thinking__:${t.sessionId}`),t.clearThinking()}function Gr(e){let t=j(e);if(!t)return;M(e);let n=e.payload;b.flush(`__thinking__:${t.sessionId}`),t.flushThinkingLog(n.index),t.clearThinking();let r=O(e),i=r?.data.iteration;r&&i&&r.setIteration({index:n.index,max:i.max})}function Kr(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:`Iteration limit reached: ${n.currentIterations}/${n.currentLimit}.`,isError:!0}),Z(t,()=>f.warn(`Iteration limit reached (${n.currentIterations}/${n.currentLimit})`))}function qr(e){let t=j(e);if(!t)return;let n=e.payload,r=Math.max(0,Math.round(n.delayMs/100)/10);Z(t,()=>f.warn(`${n.providerId} retry ${n.attempt} after ${r}s (${n.status})`))}function Jr(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:[`Provider error from \`${n.providerId}\` (${n.status}).`,n.description,n.retryable?`_Retryable; WrongStack may recover automatically._`:``].filter(Boolean).join(`
14
+ `):``}function Lr(e){if(typeof e==`string`)return e.trim();if(!e||typeof e!=`object`||Array.isArray(e))return``;let t=e;for(let e of[`id`,`name`,`type`]){let n=t[e];if(typeof n==`string`&&n.trim())return n.trim()}return``}function Rr(e,t=[],n=[]){let r=Ye({messages:(Array.isArray(e)?e:[]).filter(e=>!!(e&&typeof e==`object`&&typeof e.role==`string`&&(e.role===`user`||e.role===`assistant`||e.role===`system`))),markers:t.filter(e=>!Br(e.source)),toolMeta:n,thinkingPlacement:`merged-after`}),i=[];for(let e of r){let t=Nr(e.ts),n=Pr(i.length);switch(e.kind){case`user`:{let r=Mr(e.text);i.push({id:n,role:`user`,content:e.text,timestamp:t,...r?{bugHunt:r}:{},...e.images?{attachments:Vr(e.images,n)}:{}});break}case`assistant`:i.push({id:n,role:`assistant`,content:e.text,timestamp:t});break;case`system`:i.push({id:n,role:`system`,content:e.text,timestamp:t});break;case`thinking`:i.push({id:n,role:`system`,content:``,timestamp:t,thinkingLog:{iteration:e.index,text:e.text,startedAt:t,durationMs:0,replayed:!0}});break;case`tool`:i.push({id:n,role:`tool`,content:``,toolName:e.name,toolInput:e.input,toolUseId:e.toolUseId,timestamp:t,...e.output===void 0?{}:{toolResult:e.output},...e.ok===void 0?{}:{isError:!e.ok},...e.durationMs===void 0?{}:{toolDurationMs:e.durationMs}});break;case`marker`:i.push({id:n,role:`system`,content:e.text,timestamp:t,isError:e.level===`error`||void 0})}}return i}var zr=new Set([`agent_spawned`,`agent_session_linked`,`agent_stopped`,`agent_error`,`delegate_started`,`delegate_completed`]);function Br(e){return zr.has(e)}function Vr(e,t){return e.map((e,n)=>{let r=e.mediaType??`image/png`,i=e.data?`data:${r};base64,${e.data}`:e.url;return{id:`${t}_img_${n}`,kind:`image`,mediaType:r,bytes:e.data?Math.floor(e.data.length*3/4):0,...i?{dataUrl:i}:{}}})}function Hr(e){let n=re(`session.start`,e.payload);n&&(P.getState().pushEvent(n),P.getState().setActive(!0));let r=e?.payload&&typeof e.payload==`object`?e.payload:{},a=r.sessionId;if(!a)return;ee.getState().end(a),`openSessionIds`in r&&se(Array.isArray(r.openSessionIds)?r.openSessionIds.filter(e=>typeof e==`string`):[]),(r.appVersion||r.latestVersion)&&oe({appVersion:String(r.appVersion??``),latestVersion:String(r.latestVersion??``),updateAvailable:!!r.updateAvailable}),Array.isArray(r.providerStatuses)&&ke.getState().hydrate(r.providerStatuses.map(e=>({providerId:e.providerId,model:e.model,state:e.state,reason:e.lastErrorKind??e.state,updatedAt:e.lastFailureAt??Date.now(),stateExpiresAt:e.stateExpiresAt??void 0}))),r.needsSetup&&Pe(`setup`);let s={};r.projectRoot!==void 0&&(s.projectRoot=r.projectRoot),r.projectName!==void 0&&(s.projectName=r.projectName),r.cwd!==void 0&&(s.cwd=r.cwd),Object.keys(s).length>0&&oe(s);let c=!o(a);i(a),de(a),te(a),ie(a);let l=fe(a),u=ue(a),f=t.getState(),p=u.data.session,h=Lr(r.provider),_=Lr(r.model),y=h||p?.provider||f.provider||``,b=_||p?.model||f.model||``,S=typeof r.startedAt==`string`?Date.parse(r.startedAt):NaN,C=Number.isFinite(S)?S:Date.now(),w=!!r.isRunning,ne=Ur(a),ae=r.replayReason===`focus`,le=!c&&(ae||v()!==a),D=c||r.reset===!0&&!le;D?(u.startSession({id:a,startedAt:C,model:b,provider:y}),En.for(a).getState().clear()):u.setSession({id:a,startedAt:p?.startedAt??C,model:b,provider:y,...p?.title?{title:p.title}:{}}),u.setEnvRates({maxContext:r.maxContext,mode:r.mode,contextMode:r.contextMode,inputCost:r.inputCost,outputCost:r.outputCost,cacheReadCost:r.cacheReadCost,reasoningEffortLevels:r.reasoningEffortLevels,hasReasoningEffortKey:`reasoningEffortLevels`in r,effortSupported:r.effortSupported===!0||r.effortSupported===!1?r.effortSupported:void 0,hasEffortSupportedKey:`effortSupported`in r,projectReasoningEffort:typeof r.projectReasoningEffort==`string`?r.projectReasoningEffort:void 0,hasProjectEffortKey:`projectReasoningEffort`in r});let O=r.replayMessages,k=Array.isArray(O)&&O.length>0,A=k?Rr(O,r.replayMarkers??[],r.replayToolMeta??[]):[],j=l.messages.length>0,M=j&&(w||le&&!ne);if(r.replayReason===`redisplay`&&j&&A.length>0){let e=l.messages[0]?.timestamp??0,t=A.filter(t=>t.timestamp<e);t.length>0&&l.setMessages([...t,...l.messages])}else A.length>0&&!M?l.setMessages(A):D&&r.reset===!0&&A.length===0&&!w&&l.clearMessages();w||l.clearThinking(),l.setLoading(w);let F=r.replayUsage;if(O&&F){let e=u.data,t=F.input??0,n=F.output??0,r=F.cacheRead??0,i=F.cacheWrite??0;u.patch({totalTokens:{input:t,output:n,cacheRead:r,cacheWrite:i},cost:((t+i)*e.inputCost+n*e.outputCost+r*e.cacheReadCost)/1e6})}let I=r.lastInputTokens;typeof I==`number`&&I>0&&u.patch({lastInputTokens:I});let L=r.clearedSessionId;if(L){let e=new Map;for(let[t,n]of E.getState().agents)n.sessionId!==L&&e.set(t,n);E.setState({agents:e})}Array.isArray(r.agentSessions)&&r.agentSessions.length>0&&E.getState().hydrateAgentSessions(r.agentSessions,a);let R=v(),pe=R===`__unbound__`||!o(R),me=T.getState(),he=D&&!k&&!r.needsSetup&&!Re()&&!Fr()?{currentView:z.getState().currentView,activeActivity:z.getState().activeActivity,sidebarOpen:z.getState().sidebarOpen}:null;!ne&&!pe&&R!==a||(me.openTabIds.includes(a)?(m(a),ce(a),d(a),me.markSeen(a)):me.openTab(a,{}),y&&b?t.getState().setConfig({provider:y,model:b}):y&&t.getState().setConfig({provider:y}),K(w?`running`:`ready`),D&&(!r.needsSetup&&Re()&&!Fr()&&ve({sidebarOpen:!1}),z.getState().setSearchActiveMessageId(null),g.getState().setTreeLoading(!0,a),Rt(x.getState().projectRoot,a),N().send({type:`files.tree`,payload:{path:x.getState().cwd,sessionId:a}})),he&&z.setState(he),k&&!r.needsSetup&&!Fr()&&(Re()?ve({sidebarOpen:!1}):z.getState().currentView!==`chat`&&Fe(`chat`)),k&&Or()&&z.getState().setSidebarOpen(!1))}function Ur(e){try{return N().consumeRequestedSwitch(e)}catch{return!1}}function Z(e,t){e.sessionId===v()&&t()}function Wr(e){let t=j(e),n=O(e);if(!t||!n)return;M(e);let r=e.payload&&typeof e.payload==`object`?e.payload:{},i=Ir(r.content),a=r.usage,o=(a?.input??0)+(a?.cacheRead??0)+(a?.cacheWrite??0);if(o>0&&n.patch({lastInputTokens:o}),r.usage){n.updateUsage(r.usage,r.provider);let{inputCost:e,outputCost:t,cacheReadCost:i}=n.data,a=((r.usage.input??0)*e+(r.usage.cacheWrite??0)*e+(r.usage.output??0)*t+(r.usage.cacheRead??0)*i)/1e6;a>0&&n.addCost(a)}let c=s(r.stopReason);c&&t.setLoading(!1);let l=t.currentAssistantMessageId;if(l){b.flush(l);let e=t.messages.find(e=>e.id===l)?.content??``;i.trim()&&(e.trim()?i.startsWith(e)&&i.length>e.length&&t.updateMessage(l,{content:i}):t.updateMessage(l,{content:i})),t.finalizeMessage(l,{final:c}),r.usage&&(r.usage.output??0)>0&&t.updateMessage(l,{usage:r.usage})}else if(i.trim()){let e=t.addMessage({role:`assistant`,content:i,usage:r.usage&&(r.usage.output??0)>0?r.usage:void 0});t.finalizeMessage(e,{final:c})}t.setCurrentAssistantMessage(null),b.flush(`__thinking__:${t.sessionId}`),t.clearThinking()}function Gr(e){let t=j(e);if(!t)return;M(e);let n=e.payload;b.flush(`__thinking__:${t.sessionId}`),t.flushThinkingLog(n.index),t.clearThinking();let r=O(e),i=r?.data.iteration;r&&i&&r.setIteration({index:n.index,max:i.max})}function Kr(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:`Iteration limit reached: ${n.currentIterations}/${n.currentLimit}.`,isError:!0}),Z(t,()=>f.warn(`Iteration limit reached (${n.currentIterations}/${n.currentLimit})`))}function qr(e){let t=j(e);if(!t)return;let n=e.payload,r=Math.max(0,Math.round(n.delayMs/100)/10);Z(t,()=>f.warn(`${n.providerId} retry ${n.attempt} after ${r}s (${n.status})`))}function Jr(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:[`Provider error from \`${n.providerId}\` (${n.status}).`,n.description,n.retryable?`_Retryable; WrongStack may recover automatically._`:``].filter(Boolean).join(`
15
15
 
16
16
  `),isError:!0}),Z(t,()=>f.error(`${n.providerId} provider error (${n.status})`))}function Yr(e,n,r){let i=O(n),a=i?.data.session;i&&a&&i.setSession({...a,provider:r.providerId,model:r.model}),e.sessionId===v()&&t.getState().setConfig({provider:r.providerId,model:r.model})}function Xr(e){let t=j(e);if(!t)return;let r=e.payload,i=`${r.from.providerId}/${r.from.model}`,a=`${r.to.providerId}/${r.to.model}`;Yr(t,e,r.to),t.addMessage({role:`assistant`,content:`Provider fallback: \`${i}\` returned ${r.status}; switching to \`${a}\`${r.providerSwitched?` with provider change`:``}.`}),Z(t,()=>f.warn(`Fallback to ${a}`)),n(t.sessionId).pendingFallback&&t.setPendingFallback(null);let o=y.getState().pending;o&&t.sessionId===v()&&o.from.providerId===r.from.providerId&&o.from.model===r.from.model&&(typeof r.requestId==`string`&&r.requestId.length>0&&o.requestId!==r.requestId||y.getState().clear())}function Zr(e){let t=j(e);if(!t)return;let n=e.payload,r=`${n.to.providerId}/${n.to.model}`,i=n.from?`${n.from.providerId}/${n.from.model}`:``;Yr(t,e,n.to),t.addMessage({role:`assistant`,content:i?`Model switched: \`${i}\` → \`${r}\``:`Model switched to \`${r}\``}),Z(t,()=>f.info(`Model: ${r}`))}function Qr(e){let t=j(e);if(!t)return;let n=e.payload,r={requestId:n.requestId,from:n.from,status:n.status,candidates:n.candidates,autoSwitchSeconds:n.autoSwitchSeconds,timestamp:Date.now()};if(t.setPendingFallback(r),t.sessionId===v()){y.getState().setPending(r);return}T.getState().setAttention(t.sessionId,!0)}function $r(e){let t=e.payload;ke.getState().update({providerId:t.providerId,model:t.model,state:t.newState,reason:t.reason,updatedAt:t.timestamp,stateExpiresAt:t.stateExpiresAt,lastErrorKind:t.lastErrorKind,lastErrorStatus:t.lastErrorStatus??void 0,lastErrorMessage:t.lastErrorMessage??void 0,lastSessionId:t.lastSessionId??void 0,lastAgentId:t.lastAgentId??void 0});let n=`${t.providerId}/${t.model}`;t.newState===`blocked`&&t.oldState!==`blocked`?f.warn(`${n} entered the limit-reset waiting room`):t.newState===`healthy`&&t.oldState!==`healthy`&&f.success(`${n} recovered and rejoined model routing`)}function ei(e){let t=e.payload;if(t&&typeof t==`object`&&`error`in t){ke.getState().setError(`Provider status tracking not available`);return}ke.getState().applySnapshot(t)}function ti(e){let t=e.payload,n=Array.isArray(t?.lines)?t.lines:[],r=[];for(let e of n){if(!e||typeof e!=`object`)continue;let t=e,n=typeof t.providerId==`string`?t.providerId:``,i=typeof t.model==`string`?t.model:``,a=t.from,o=t.to;if(!n||!i||a!==`healthy`&&a!==`degraded`&&a!==`blocked`||o!==`healthy`&&o!==`degraded`&&o!==`blocked`)continue;let s=t.error??null;r.push({ts:typeof t.ts==`number`?t.ts:0,providerId:n,model:i,from:a,to:o,reason:typeof t.reason==`string`?t.reason:``,expiresAt:typeof t.expiresAt==`number`?t.expiresAt:null,error:s})}ke.getState().setAudit(r)}function ni(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:`Waiting room skipped \`${n.providerId}/${n.model}\`. ${n.lastError}`})}function ri(e){let t=j(e);if(!t)return;M(e);let n=e.payload;Z(t,()=>f.warn(`Provider stream event skipped: ${n.eventType}`)),t.addMessage({role:`assistant`,content:`Provider stream warning (${n.eventType}): ${n.message}`,isError:!0})}function ii(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r=n.tools||n.kind||`assistant response`;if(n.action===`steer`){Z(t,()=>f.info(`Possible repetition noticed for ${r}; changing approach.`));return}t.addMessage({role:`assistant`,content:`Loop guard stopped the turn: ${r} made no progress ${n.repeatCount} time(s) (iteration ${n.iteration+1}).`,isError:!0}),Z(t,()=>f.warn(`Loop guard stopped the turn`))}function ai(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r=Tr(n.task),i=n.subagentId??n.target,a=E.getState();a.applyEvent({kind:`spawned`,subagentId:i,name:n.target,description:r,sessionId:t.sessionId}),L.getState().recordDelegateStarted(t.sessionId,{target:n.target}),a.applyEvent({kind:`task_started`,subagentId:i,name:n.target,description:r,sessionId:t.sessionId}),a.pushAgentTimelineEntry({subagentId:i,agentName:n.target,content:r,kind:`status`,iteration:0,ts:new Date().toISOString(),status:`delegating`,sessionId:t.sessionId})}function oi(e){let t=j(e);if(!t)return;M(e);let n=e.payload,r=E.getState(),i=n.subagentId??n.target;r.applyEvent({kind:`task_completed`,subagentId:i,name:n.target,sessionId:t.sessionId,status:n.ok?`success`:n.status===`timeout`||n.status===`host_timeout`?`timeout`:`failed`,iterations:n.iterations,toolCalls:n.toolCalls,finalText:n.summary,...n.ok?{}:{failureReason:n.status??`failed`}}),L.getState().recordDelegateCompleted(t.sessionId,{target:n.target,ok:n.ok,toolCalls:n.toolCalls}),r.pushAgentTimelineEntry({subagentId:i,agentName:n.target,content:n.summary,kind:n.ok?`status`:`error`,iteration:n.iterations,ts:new Date().toISOString(),status:n.status??(n.ok?`completed`:`failed`),sessionId:t.sessionId}),n.ok||Z(t,()=>f.warn(`Delegate failed: ${n.target}`))}function si(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:`Session ${n.sessionId} is damaged: ${n.detail}`,isError:!0}),Z(t,()=>f.error(`Session damage detected`))}function ci(e){let t=j(e);if(!t)return;let n=e.payload;t.addMessage({role:`assistant`,content:`Session rewound to prompt #${n.toPromptIndex}. Removed ${n.removedEvents} event(s); reverted ${n.revertedFiles.length} file(s).`}),Z(t,()=>f.info(`Session rewound`))}function li(e){let t=j(e);if(!t)return;let n=e.payload;Z(t,()=>f.success(`Checkpoint #${n.promptIndex} written (${n.fileCount} file(s))`))}function ui(e){if(!C(e))return;let t=e.payload;P.getState().pushEvent({id:`inflight_${Date.now()}`,kind:`session:start`,timestamp:Date.now(),source:`session`,target:`leader`,label:`In-flight: ${t.context}`,magnitude:1,data:t,raw:e.payload,flowGroup:`session`})}function di(e){C(e)&&e.payload.reason===`recovered`&&f.info(`Recovered previous in-flight operation`)}function fi(){typeof document<`u`&&document.dispatchEvent(new CustomEvent(`chat:session-end`))}function pi(e){let t=e.payload,n=k(),r=n&&n!==`__unbound__`?n:null,i=(t.sessions??[]).map(e=>({...e,isCurrent:r?e.id===r:e.isCurrent}));a.getState().setEntries(i,t.error??null)}var mi={"context.debug":ur,"key.operation_result":dr,"model.switch_result":fr,"context.compacted":pr,"compaction.failed":mr,"provider.response":Wr,"iteration.completed":Gr,"iteration.limit_reached":Kr,"provider.retry":qr,"provider.error":Jr,"provider.fallback":Xr,"provider.fallback_pending":Qr,"provider.model_switched":Zr,"provider.status_changed":$r,"provider.active_blocked":ni,"provider.stream_error":ri,"tool.loop_detected":ii,"delegate.started":ai,"delegate.completed":oi,"trust.persisted":hr,"context.repaired":gr,"ctx.pct":_r,"ctx.max_context":vr,"token.threshold":yr,"token.cost_estimate_unavailable":br,"session.end":fi,"session.resume_progress":Cr,"session.damaged":si,"session.rewound":ci,"checkpoint.written":li,"in_flight.started":ui,"in_flight.ended":di,"context.modes.list":xr,"context.mode.changed":Sr,"sessions.list":pi,"provider.status.snapshot":ei,"provider.audit.history":ti,error:wr};function hi(e){let t=e.payload;!t.jobId||!t.kind||U.getState().jobStarted(t.jobId,t.kind)}function gi(e){let t=e.payload;!t.jobId||!t.phase||!Number.isFinite(t.completed)||!Number.isFinite(t.total)||U.getState().jobProgress(t.jobId,{phase:t.phase,completed:t.completed??0,total:t.total??0})}function _i(e){let t=e.payload;t.workspaceId&&U.getState().workspaceCompleted(t.workspaceId)}function vi(e){let t=e.payload;t.snapshot&&U.getState().setSnapshot(t.snapshot,t.stale??!1)}function yi(e){let t=e.payload;t.reportId&&U.getState().reportReady(t.reportId)}function bi(e){let t=e.payload;t.jobId&&U.getState().jobFailed(t.jobId,t.error??`TechStack job failed`)}function xi(e){let t=e.payload;t.jobId&&U.getState().jobCancelled(t.jobId)}var Si={"techstack.job.started":hi,"techstack.job.progress":gi,"techstack.workspace.completed":_i,"techstack.snapshot.updated":vi,"techstack.report.ready":yi,"techstack.job.failed":bi,"techstack.job.cancelled":xi};function Q(e){return j(e)??I()}function Ci(e){return O(e)??ne()}function wi(e){let t=e.payload;Q(e).addMessage({role:`assistant`,content:[`🛠️ **Registered tools** (${t.tools.length})`,``,...t.tools.map(e=>`• \`${e.name}\`${e.params.length?` (${e.params.join(`, `)})`:``} — ${e.description||`_no description_`}`)].join(`
17
17
  `)})}function Ti(e){let t=e.payload,n=t.text?.trim();Q(e).addMessage({role:`assistant`,content:t.error?`Memory read failed: ${t.error}`:n?`🧠 **Memory** \n\n${n}`:`🧠 **Memory**
package/dist/index.html CHANGED
@@ -11,7 +11,7 @@
11
11
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
12
12
  <meta name="apple-mobile-web-app-title" content="WrongStack" />
13
13
  <title>WrongStack WebUI</title>
14
- <script type="module" crossorigin src="/assets/index-b_i-YcNT.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-DbprKWmG.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/monaco-BCqJp2xW.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/markdown-Kp5uSgOw.js">
@@ -33,12 +33,12 @@
33
33
  <link rel="modulepreload" crossorigin href="/assets/stores-CNuMLG8X.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/view-navigation-DPOY0lyt.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/codemap-index-store-tSmlp7Uz.js">
36
- <link rel="modulepreload" crossorigin href="/assets/useWebSocket-B4er0zlV.js">
36
+ <link rel="modulepreload" crossorigin href="/assets/useWebSocket-VIItbvVK.js">
37
37
  <link rel="modulepreload" crossorigin href="/assets/dialog-BTHxOi5z.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/button-DNyYztcH.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/input-CTGeYzNe.js">
40
40
  <link rel="modulepreload" crossorigin href="/assets/ConfirmModal-gukSikBD.js">
41
- <link rel="modulepreload" crossorigin href="/assets/ModelPicker-R1UwpDyl.js">
41
+ <link rel="modulepreload" crossorigin href="/assets/ModelPicker-C3r7IFfh.js">
42
42
  <link rel="stylesheet" crossorigin href="/assets/monaco-Bowa0-zp.css">
43
43
  <link rel="stylesheet" crossorigin href="/assets/vendor-BMdWcCR4.css">
44
44
  <link rel="stylesheet" crossorigin href="/assets/index-DSyVpLgL.css">
package/dist/index.js CHANGED
@@ -48848,7 +48848,7 @@ function hydrateReplayMessages(replay, markers = [], toolMeta = []) {
48848
48848
  const timestamp2 = replayTimestamp(item.ts);
48849
48849
  const id = replayMessageId(messages.length);
48850
48850
  switch (item.kind) {
48851
- case "user":
48851
+ case "user": {
48852
48852
  const bugHunt = parseBugHuntMessage(item.text);
48853
48853
  messages.push({
48854
48854
  id,
@@ -48859,6 +48859,7 @@ function hydrateReplayMessages(replay, markers = [], toolMeta = []) {
48859
48859
  ...item.images ? { attachments: replayAttachments(item.images, id) } : {}
48860
48860
  });
48861
48861
  break;
48862
+ }
48862
48863
  case "assistant":
48863
48864
  messages.push({ id, role: "assistant", content: item.text, timestamp: timestamp2 });
48864
48865
  break;
@@ -112031,6 +112032,7 @@ function directoryPaths(tree) {
112031
112032
  const visit = (nodes) => {
112032
112033
  for (const node of nodes) {
112033
112034
  if (node.type !== "directory") continue;
112035
+ if (node.ignored) continue;
112034
112036
  paths.push(node.path);
112035
112037
  if (node.children) visit(node.children);
112036
112038
  }
@@ -7,6 +7,15 @@ export interface TreeNode {
7
7
  size?: number;
8
8
  /** Last-modified timestamp in milliseconds since epoch. */
9
9
  lastModified?: number;
10
+ /**
11
+ * True when the project-root `.gitignore` matches this entry. The server
12
+ * already filters these out of `files.tree`, so this flag is normally
13
+ * absent — it is declared so the WebUI can defensively ignore any
14
+ * `ignored: true` node that slips through (e.g. if a future server
15
+ * version stops pruning), keeping features like the Bug Hunter scope
16
+ * dropdown from re-listing hidden directories.
17
+ */
18
+ ignored?: boolean;
10
19
  }
11
20
  export interface OpenFile {
12
21
  path: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/webui",
3
- "version": "0.317.2",
3
+ "version": "0.318.0",
4
4
  "license": "MIT",
5
5
  "description": "Browser-based WebUI for WrongStack — React + Vite frontend. The WebSocket backend lives in the separate @wrongstack/webui-server package (extracted in PR #018b to remove the CLI -> @wrongstack/webui/server cross-package edge).",
6
6
  "keywords": [
@@ -57,13 +57,13 @@
57
57
  "@radix-ui/react-tabs": "^1.1.21",
58
58
  "@tanstack/react-virtual": "^3.14.10",
59
59
  "@uiw/react-textarea-code-editor": "^3.1.1",
60
- "@wrongstack/core": "0.317.2",
61
- "@wrongstack/kanban": "0.317.2",
62
- "@wrongstack/plugins": "0.317.2",
63
- "@wrongstack/providers": "0.317.2",
64
- "@wrongstack/tools": "0.317.2",
65
- "@wrongstack/webui-protocol": "0.317.2",
66
- "@wrongstack/webui-server": "0.317.2",
60
+ "@wrongstack/core": "0.318.0",
61
+ "@wrongstack/kanban": "0.318.0",
62
+ "@wrongstack/plugins": "0.318.0",
63
+ "@wrongstack/providers": "0.318.0",
64
+ "@wrongstack/tools": "0.318.0",
65
+ "@wrongstack/webui-protocol": "0.318.0",
66
+ "@wrongstack/webui-server": "0.318.0",
67
67
  "@xterm/addon-fit": "^0.11.0",
68
68
  "@xterm/xterm": "^6.0.0",
69
69
  "@xyflow/react": "^12.11.3",
@@ -99,7 +99,7 @@
99
99
  "@types/ws": "^8.18.1",
100
100
  "@vitejs/plugin-react": "^6.1.0",
101
101
  "@vitest/coverage-v8": "^4.1.11",
102
- "@wrongstack/sdd": "0.317.2",
102
+ "@wrongstack/sdd": "0.318.0",
103
103
  "jsdom": "^30.0.1",
104
104
  "tailwindcss": "^4.3.3",
105
105
  "typescript": "^7.0.2",