@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.
- package/dist/assets/{AgentRosterView-xv5VajRi.js → AgentRosterView-C46rL23K.js} +1 -1
- package/dist/assets/{AnalyticsDashboard-D7D5_bvf.js → AnalyticsDashboard-B8r_8kNv.js} +1 -1
- package/dist/assets/{AudienceMemoryPanel-Cpg91ZrC.js → AudienceMemoryPanel-Ciybycpn.js} +1 -1
- package/dist/assets/{ChangesView-4CP-bLYD.js → ChangesView-BREfCsEq.js} +1 -1
- package/dist/assets/{ChimeraReviewsView-DZjw-bOC.js → ChimeraReviewsView-aSYmQ8tC.js} +1 -1
- package/dist/assets/{ChronicleDashboard-BnNxX8Hc.js → ChronicleDashboard-bo2jv52s.js} +1 -1
- package/dist/assets/{CodeEditor-FNYzhDcO.js → CodeEditor-C_KzNkIb.js} +1 -1
- package/dist/assets/{CronJobsPanel-BXqObet6.js → CronJobsPanel-D-43oYQ-.js} +1 -1
- package/dist/assets/{DebugDashboard-Hwt0OxYX.js → DebugDashboard-DNDadwro.js} +1 -1
- package/dist/assets/{DesignGalleryView-Ce2H_zeu.js → DesignGalleryView-B9ZMJPOQ.js} +1 -1
- package/dist/assets/{GoalView-DlS73sGV.js → GoalView-BkoCNN8l.js} +1 -1
- package/dist/assets/{KanbanView-Cd77gXMT.js → KanbanView-nql6LkaS.js} +1 -1
- package/dist/assets/{MailboxDetailView-B4hFbVk5.js → MailboxDetailView-CdHRfnNq.js} +1 -1
- package/dist/assets/{MemoryDrawer-CnpnSW42.js → MemoryDrawer-CfukdhlF.js} +1 -1
- package/dist/assets/{MemoryManager-DqJfeD_d.js → MemoryManager-BD_VnFAu.js} +1 -1
- package/dist/assets/{ModelPicker-R1UwpDyl.js → ModelPicker-C3r7IFfh.js} +1 -1
- package/dist/assets/{OfficeMapPanel-zAuziIkn.js → OfficeMapPanel-B47jfEHf.js} +1 -1
- package/dist/assets/{ProcessMonitor-Baj9b1_B.js → ProcessMonitor-CvHdN8Bn.js} +1 -1
- package/dist/assets/{RequirementIntakeView-B5JjTm9k.js → RequirementIntakeView-CFgVx_0T.js} +1 -1
- package/dist/assets/{SageTabs-Co-5UcaG.js → SageTabs-BRJG0fhZ.js} +2 -2
- package/dist/assets/{SddHub-DYAjEaqD.js → SddHub-Br1vyCgq.js} +1 -1
- package/dist/assets/{SessionInspectView-DVeF-pUQ.js → SessionInspectView-BSRjWErA.js} +1 -1
- package/dist/assets/{SessionList-BvVLmIsL.js → SessionList-BkaI91oW.js} +1 -1
- package/dist/assets/{SessionsDashboard-wPcCBDIK.js → SessionsDashboard-BEQs4Div.js} +1 -1
- package/dist/assets/{SetupScreen-uhBHDZqD.js → SetupScreen-zY4541lT.js} +1 -1
- package/dist/assets/{SkillDetailView-DPqT3npD.js → SkillDetailView-DqxkOnb8.js} +1 -1
- package/dist/assets/{SpecsView-BEITfh6o.js → SpecsView-COS0-sxq.js} +1 -1
- package/dist/assets/{TechStackView-DLEi7aSX.js → TechStackView-Dr8vI0hK.js} +1 -1
- package/dist/assets/{index-b_i-YcNT.js → index-DbprKWmG.js} +5 -5
- package/dist/assets/{useWebSocket-B4er0zlV.js → useWebSocket-VIItbvVK.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/index.js +3 -1
- package/dist/stores/file-store.d.ts +9 -0
- 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
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|
|
61
|
-
"@wrongstack/kanban": "0.
|
|
62
|
-
"@wrongstack/plugins": "0.
|
|
63
|
-
"@wrongstack/providers": "0.
|
|
64
|
-
"@wrongstack/tools": "0.
|
|
65
|
-
"@wrongstack/webui-protocol": "0.
|
|
66
|
-
"@wrongstack/webui-server": "0.
|
|
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.
|
|
102
|
+
"@wrongstack/sdd": "0.318.0",
|
|
103
103
|
"jsdom": "^30.0.1",
|
|
104
104
|
"tailwindcss": "^4.3.3",
|
|
105
105
|
"typescript": "^7.0.2",
|