@wrongstack/webui 0.299.0 → 0.301.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-BV6ysoGs.js +9 -0
- package/dist/assets/{AnalyticsDashboard-D58kSekC.js → AnalyticsDashboard-UWNP8zjE.js} +1 -1
- package/dist/assets/AudienceMemoryPanel-DwDKbvSA.js +3 -0
- package/dist/assets/ChangesView-DuVlGWkD.js +1 -0
- package/dist/assets/ChronicleDashboard-cs16n708.js +1 -0
- package/dist/assets/CodeEditor-sr50ljZN.js +1 -0
- package/dist/assets/CodeMap-CtK-C8gK.js +1 -0
- package/dist/assets/ConfirmModal-ndS17YwF.js +1 -0
- package/dist/assets/CronJobsPanel-Dovomns5.js +1 -0
- package/dist/assets/DeadCodeScanPanel-DjR4LLMs.js +2 -0
- package/dist/assets/DebugDashboard-jK1yp3qS.js +1 -0
- package/dist/assets/DesignGalleryView-CqXlEUzE.js +1 -0
- package/dist/assets/GoalView-CGNLrnA4.js +1 -0
- package/dist/assets/KanbanView--tAf_K7N.js +3 -0
- package/dist/assets/{MailboxDetailView-ZcKcOEAe.js → MailboxDetailView-0TBzZTdN.js} +1 -1
- package/dist/assets/MemoryManager-CDK_MO8A.js +1 -0
- package/dist/assets/{ModelPicker-DvNLZzkm.js → ModelPicker-BbBZuQwR.js} +1 -1
- package/dist/assets/OfficeMapPanel-68sVzHRD.js +4 -0
- package/dist/assets/OfficeMapPanel-D6yTfGIT.css +1 -0
- package/dist/assets/{ProcessMonitor-2nSk6sXA.js → ProcessMonitor-gFwiF8gX.js} +1 -1
- package/dist/assets/{QueuePanel-4KBBWFxj.js → QueuePanel-Cx-isRGl.js} +1 -1
- package/dist/assets/{RefreshDebugView-D3XnE53y.js → RefreshDebugView-C9tdu6Ld.js} +1 -1
- package/dist/assets/RequirementIntakeView-cPEw-RpV.js +1 -0
- package/dist/assets/SageTabs-BbK6VFO0.js +2 -0
- package/dist/assets/SddHub-NKvDRECi.js +2 -0
- package/dist/assets/SessionInspectView-DPG5qWhj.js +1 -0
- package/dist/assets/SessionList-ncl-20X_.js +1 -0
- package/dist/assets/SessionsDashboard-D23UVLr4.js +1 -0
- package/dist/assets/SetupScreen-D3XQ8MGk.js +1 -0
- package/dist/assets/{SkillDetailView-D7EQ2XtV.js → SkillDetailView-DDPhVFet.js} +1 -1
- package/dist/assets/SpecsView-afIS0QpX.js +1 -0
- package/dist/assets/TechStackView-kQ2OGxxw.js +1 -0
- package/dist/assets/{TerminalPanel-BL9ZPGJt.js → TerminalPanel-GcJWeldW.js} +1 -1
- package/dist/assets/{Toaster-CJI70aa-.js → Toaster-CgQA9256.js} +1 -1
- package/dist/assets/activity-B-cvKIfT.js +9 -0
- package/dist/assets/activity-Ba3aMzvo.js +9 -0
- package/dist/assets/activity-CRTVZ5A4.js +9 -0
- package/dist/assets/activity-DsSuflRW.js +9 -0
- package/dist/assets/activity-DxDRJ8kN.js +9 -0
- package/dist/assets/activity-VI776bUZ.js +9 -0
- package/dist/assets/activity-nVmsmqAI.js +9 -0
- package/dist/assets/chat-BPuAsrkF.js +1 -0
- package/dist/assets/chat-BfQBSiII.js +1 -0
- package/dist/assets/chat-BnkVCZ3Q.js +1 -0
- package/dist/assets/chat-CR2B97dj.js +1 -0
- package/dist/assets/chat-CdiY7G6Z.js +1 -0
- package/dist/assets/chat-DResBrkV.js +1 -0
- package/dist/assets/chat-Di8o0wDz.js +1 -0
- package/dist/assets/chat-store-DbxFVDwi.js +17 -0
- package/dist/assets/{common-DMM-xyW3.js → common-BXJbu5Y-.js} +1 -1
- package/dist/assets/{common-C9ikgX7d.js → common-BiNu_WzQ.js} +1 -1
- package/dist/assets/common-COVxQ0FV.js +1 -0
- package/dist/assets/{common-D29Zdkxb.js → common-Ch7JihXD.js} +1 -1
- package/dist/assets/{common-DoUBSHRY.js → common-DPaTeTls.js} +1 -1
- package/dist/assets/{common-vdwxzODB.js → common-DdGpRh8j.js} +1 -1
- package/dist/assets/{common-C5hY-d_0.js → common-pI6fYZW3.js} +1 -1
- package/dist/assets/i18n-COgumVF5.js +2 -0
- package/dist/assets/index-CtpViiZy.js +132 -0
- package/dist/assets/index-fIsq43fR.css +1 -0
- package/dist/assets/mailbox-store-C1mzoSqJ.js +1 -0
- package/dist/assets/{progress-ring-61A-xUEl.js → progress-ring-D_48qsBl.js} +1 -1
- package/dist/assets/{roster-ws-Dfg_187V.js → roster-ws-Da57e_sI.js} +1 -1
- package/dist/assets/session-store-Df7_hhe9.js +1 -0
- package/dist/assets/settings-Bb7_utQE.js +1 -0
- package/dist/assets/settings-Bd8zMwvC.js +1 -0
- package/dist/assets/settings-DdFgBMAw.js +1 -0
- package/dist/assets/settings-De6sXIFO.js +1 -0
- package/dist/assets/settings-E8SKMLxq.js +1 -0
- package/dist/assets/settings-zIY9-ivF.js +1 -0
- package/dist/assets/settings-zKBcRjqE.js +1 -0
- package/dist/assets/stores-ChEnUmic.js +7 -0
- package/dist/assets/ui-store-CE4-TlwB.js +1 -0
- package/dist/assets/useWebSocket-_gk4MRJz.js +29 -0
- package/dist/assets/{view-navigation-DxfiZrXS.js → view-navigation-DIDEcp4V.js} +1 -1
- package/dist/assets/ws-client-TTMa0XaT.js +1 -0
- package/dist/components/AgentCard.d.ts +21 -0
- package/dist/components/AgentsPage.d.ts +0 -3
- package/dist/components/AutonomyPicker.d.ts +1 -1
- package/dist/components/ChatInput/refine-panel-host.d.ts +2 -2
- package/dist/components/ChatView/auto-collapse.d.ts +42 -0
- package/dist/components/ConfirmModal.d.ts +7 -2
- package/dist/components/FallbackModal.d.ts +2 -0
- package/dist/components/KanbanBoardState.d.ts +1 -1
- package/dist/components/KanbanVerificationDashboard.d.ts +0 -6
- package/dist/components/SettingsPanel/PluginToggleList.d.ts +11 -3
- package/dist/components/SettingsPanel/ShadowSection.d.ts +18 -1
- package/dist/components/SettingsPanel/brain-section-options.d.ts +27 -55
- package/dist/components/TaskCard.d.ts +0 -1
- package/dist/components/TaskRiskPanel.d.ts +10 -3
- package/dist/components/TechStackView/shared.d.ts +11 -6
- package/dist/components/ThemeProvider.d.ts +6 -1
- package/dist/components/agent-roster-data.d.ts +2 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/hooks/useWebSocket.d.ts +10 -2
- package/dist/hooks/ws-handlers/files-mailbox-handlers.d.ts +1 -0
- package/dist/hooks/ws-handlers/misc-handlers.d.ts +13 -0
- package/dist/hooks/ws-handlers/session-handlers.d.ts +1 -0
- package/dist/index.css +62 -0
- package/dist/index.html +18 -17
- package/dist/index.js +26640 -12728
- package/dist/lib/file-icons.d.ts +3 -3
- package/dist/lib/kanban-board-active.d.ts +19 -0
- package/dist/lib/palettes.d.ts +37 -0
- package/dist/lib/plugin-enablement.d.ts +1 -1
- package/dist/lib/ws-client.d.ts +24 -4
- package/dist/providers.json +7 -7
- package/dist/stores/config-store.d.ts +9 -1
- package/dist/stores/context-editor-store.d.ts +9 -1
- package/dist/stores/fallback-store.d.ts +30 -0
- package/dist/stores/fleet-store.d.ts +14 -1
- package/dist/stores/index.d.ts +2 -0
- package/dist/stores/local-prefs.d.ts +13 -0
- package/dist/stores/mailbox-store.d.ts +2 -0
- package/dist/stores/session-store.d.ts +9 -1
- package/dist/stores/ui-store.d.ts +2 -0
- package/dist/types/brain.d.ts +2 -0
- package/dist/types/client-message.d.ts +19 -2
- package/dist/types/protocol-core.d.ts +21 -0
- package/dist/types/runtime.d.ts +22 -0
- package/dist/types/server-message.d.ts +15 -4
- package/package.json +9 -9
- package/dist/assets/AgentRosterView-BqojERFR.js +0 -11
- package/dist/assets/AudienceMemoryPanel-Cc1UkbDl.js +0 -3
- package/dist/assets/ChangesView-BKU80ANq.js +0 -1
- package/dist/assets/ChronicleDashboard-CvCS1Dj1.js +0 -1
- package/dist/assets/CodeEditor-BHZQhx_8.js +0 -1
- package/dist/assets/CodeMap-qllGEFLB.js +0 -1
- package/dist/assets/CronJobsPanel-DD5mhZ4Q.js +0 -1
- package/dist/assets/DeadCodeScanPanel-PB-c8et_.js +0 -2
- package/dist/assets/DebugDashboard-Q8QiVflQ.js +0 -1
- package/dist/assets/DesignGalleryView-CGOtWO7s.js +0 -1
- package/dist/assets/GoalView-Dlk42vW7.js +0 -1
- package/dist/assets/KanbanView-DIP6kKmU.js +0 -3
- package/dist/assets/MemoryManager-B7620q_K.js +0 -1
- package/dist/assets/OfficeMapPanel-BFIF-EMt.css +0 -1
- package/dist/assets/OfficeMapPanel-DKJNTtOZ.js +0 -4
- package/dist/assets/RequirementIntakeView-BMxlf8bt.js +0 -1
- package/dist/assets/SageTabs-g1hO2hJ0.js +0 -2
- package/dist/assets/SddHub-Kv_TbTgT.js +0 -2
- package/dist/assets/SessionInspectView-PnKTvyvP.js +0 -1
- package/dist/assets/SessionList-BeinIC-h.js +0 -1
- package/dist/assets/SessionsDashboard-DEG_BylE.js +0 -1
- package/dist/assets/SetupScreen-DxJwZ1OZ.js +0 -1
- package/dist/assets/SpecsView-Fm7pYYcj.js +0 -1
- package/dist/assets/TechStackView-Bo_UenRF.js +0 -1
- package/dist/assets/activity-BCgOEWgR.js +0 -5
- package/dist/assets/activity-BQ0zqkw2.js +0 -5
- package/dist/assets/activity-CAovbq3e.js +0 -5
- package/dist/assets/activity-CFQyCvgu.js +0 -5
- package/dist/assets/activity-CdQf7zRK.js +0 -5
- package/dist/assets/activity-DACvyn2-.js +0 -5
- package/dist/assets/activity-DOwYydU-.js +0 -5
- package/dist/assets/chat-CRmMDzCb.js +0 -1
- package/dist/assets/chat-CwnuX7tG.js +0 -1
- package/dist/assets/chat-DLn1hY01.js +0 -1
- package/dist/assets/chat-DSEq1Bdz.js +0 -1
- package/dist/assets/chat-DxLD17ER.js +0 -1
- package/dist/assets/chat-DzPxYALH.js +0 -1
- package/dist/assets/chat-OunddzYy.js +0 -1
- package/dist/assets/chat-store-CtOyUCdF.js +0 -17
- package/dist/assets/common-BfVFjVhf.js +0 -1
- package/dist/assets/i18n-B0hsnanh.js +0 -2
- package/dist/assets/index-DHdO0CRE.js +0 -132
- package/dist/assets/index-DKrFQ76m.css +0 -1
- package/dist/assets/mailbox-store-D8TvJsuk.js +0 -1
- package/dist/assets/session-store-b2KGFwkX.js +0 -1
- package/dist/assets/settings-B5xal2R3.js +0 -1
- package/dist/assets/settings-BHtFy8EG.js +0 -1
- package/dist/assets/settings-Bss5hBla.js +0 -1
- package/dist/assets/settings-BzrLCVRP.js +0 -1
- package/dist/assets/settings-C7RdvmLZ.js +0 -1
- package/dist/assets/settings-Dd94HoV6.js +0 -1
- package/dist/assets/settings-Dm9THFe8.js +0 -1
- package/dist/assets/stores-BptlyD_v.js +0 -7
- package/dist/assets/ui-store-BsBnjO3w.js +0 -1
- package/dist/assets/useWebSocket-Bc4S0N4r.js +0 -29
- package/dist/assets/ws-client-DqFoX4jJ.js +0 -1
- package/dist/components/AgentsMonitor.d.ts +0 -26
- package/dist/components/FleetMonitor.d.ts +0 -21
- package/dist/lib/accent-colors.d.ts +0 -136
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,n,r,t as i}from"./chat-store-DbxFVDwi.js";import{La as a,Na as o,za as s}from"./vendor-BuarzSSb.js";import{t as c}from"./i18n-COgumVF5.js";import{a as l,c as u,i as d,l as f,o as p,s as m,t as h}from"./ws-client-TTMa0XaT.js";import{t as g}from"./session-store-Df7_hhe9.js";import{i as _,n as v}from"./codemap-activity-store-DQfjo7-j.js";import{F as y,I as b,P as ee,T as x,_ as S,a as te,b as ne,c as re,f as ie,g as ae,h as oe,i as C,j as w,l as T,o as se,p as ce,r as E,s as D,t as O,u as k,v as le,y as ue}from"./stores-ChEnUmic.js";import{r as A}from"./mailbox-store-C1mzoSqJ.js";import{n as j,t as de}from"./ui-store-CE4-TlwB.js";import{n as fe,o as pe}from"./view-navigation-DIDEcp4V.js";import{t as me}from"./codemap-index-store-COStDU-8.js";import{n as M}from"./Toaster-CgQA9256.js";var N=e(s(),1);function he(e,t){if(t)return!0;try{return new URLSearchParams(e).get(`shell`)===`desktop`}catch{return!1}}function P(){return typeof window>`u`?!1:he(window.location.search,!!window.wrongstackDesktopHost)}function F(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function I(e,t=``){return typeof e==`string`?e:t}function L(e,t=0){return typeof e==`number`&&Number.isFinite(e)?e:t}function ge(e){let t=F(e.payload);if(!t)return null;switch(e.type){case`provider.thinking_delta`:{let e=I(t.text);return e?{kind:`thinking-delta`,text:e}:null}case`provider.text_delta`:{let e=I(t.text);return e?{kind:`text-delta`,text:e,messageId:I(t.messageId)}:null}case`provider.response`:return{kind:`response`,content:t.content,stopReason:I(t.stopReason)};case`run.result`:return{kind:`run-result`,status:I(t.status),iterations:L(t.iterations,1),...typeof t.finalText==`string`?{finalText:t.finalText}:{}};case`error`:return{kind:`error`,message:I(t.message,`Run failed`)};default:return null}}function R(e){let t=F(e.payload);if(!t)return null;if(e.type===`tool.started`){let e=I(t.name,`tool`);return{kind:`started`,id:I(t.id,e),name:e,input:t.input,messageId:I(t.messageId)}}if(e.type===`tool.progress`){let e=F(t.event);return{kind:`progress`,id:I(t.id),name:I(t.name,`tool`),eventType:I(e?.type),text:I(e?.text).trim()}}return e.type===`tool.executed`?{kind:`executed`,id:I(t.id),name:I(t.name),ok:t.ok!==!1,durationMs:L(t.durationMs),...typeof t.output==`string`?{output:t.output}:{},...Array.isArray(t.sage)?{sage:t.sage.filter(e=>typeof e==`string`)}:{}}:null}function z(e){if(!(typeof e!=`number`||!Number.isFinite(e)))return e}function _e(e){return typeof e==`string`&&e.length>0?e:void 0}function ve(e){let t=F(e.payload);if(!t)return null;switch(e.type){case`fleet.concurrency_update`:return{kind:`concurrency`,active:L(t.fleetConcurrency),maximum:L(t.fleetConcurrencyMax),maxSpawns:z(t.maxSpawns),usedSpawns:z(t.usedSpawns),remainingSpawns:z(t.remainingSpawns),maxSpawnsSource:_e(t.maxSpawnsSource),maxConcurrentSource:_e(t.maxConcurrentSource),effectiveSource:_e(t.effectiveSource),checkpointMaxSpawns:z(t.checkpointMaxSpawns),ceilingMismatch:t.ceilingMismatch===!0||void 0};case`client.status_update`:return{kind:`client-status`,status:t};case`sessions.status_update`:return{kind:`sessions`,sessions:Array.isArray(t.sessions)?t.sessions:[]};case`coordinator.stats`:return{kind:`coordinator`,agents:Array.isArray(t.subagentStatuses)?t.subagentStatuses.filter(e=>F(e)!==null):[]};default:return null}}function ye(e){return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
+
<rect width="64" height="64" fill="#121210" />
|
|
3
|
+
<path fill="#FD9F02" d="M5 27h10v10H5zM27 27h10v10H27zM38 27h10v10H38zM49 27h10v10H49z" />
|
|
4
|
+
<path fill="#FE2E5F" d="M16 32h10v10H16z" />
|
|
5
|
+
${e===`ready`?`<circle cx="50" cy="14" r="14" fill="#22c55e" stroke="#fff" stroke-width="3" />`:e===`error`?`<circle cx="50" cy="14" r="14" fill="#ef4444" stroke="#fff" stroke-width="3" />`:e===`running`?`<circle cx="50" cy="14" r="14" fill="#f59e0b" stroke="#fff" stroke-width="3" />`:e===`attention`?`<circle cx="50" cy="14" r="14" fill="#eab308" stroke="#fff" stroke-width="3"><animate attributeName="opacity" values="1;0.3;1" dur="1s" repeatCount="indefinite"/></circle>`:``}
|
|
6
|
+
</svg>`}function be(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}function xe(){if(typeof document>`u`)return null;let e=document.querySelector(`link[rel="icon"]`);return e||(e=document.createElement(`link`),e.rel=`icon`,e.type=`image/svg+xml`,document.head.appendChild(e)),e}var B=`idle`;function V(e){B=e;let t=xe();t&&(t.href=be(ye(e)))}var Se=!1;function Ce(){Se||typeof document>`u`||(Se=!0,document.addEventListener(`visibilitychange`,()=>{!document.hidden&&(B===`ready`||B===`error`||B===`attention`)&&V(`idle`)}))}var we=2048,Te=2*1024*1024,Ee=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),H=class extends Error{reason;constructor(e,t){super(e),this.reason=t,this.name=`ImageAttachmentError`}};function De(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function Oe(e){let t=e.indexOf(`,`),n=t>=0?e.length-t-1:e.length;return Math.floor(n*3/4)}function ke(e){return/^data:([^;,]+)/.exec(e)?.[1]??`image/png`}async function Ae(e){try{return await createImageBitmap(e)}catch{let t=URL.createObjectURL(e);try{return await new Promise((e,n)=>{let r=new Image;r.onload=()=>e(r),r.onerror=()=>n(Error(`image decode failed`)),r.src=t})}finally{URL.revokeObjectURL(t)}}}function je(e,t,n,r,i){let a=document.createElement(`canvas`);a.width=t,a.height=n;let o=a.getContext(`2d`);if(!o)throw new H(`canvas 2d context unavailable`,`decode_failed`);o.drawImage(e,0,0,t,n);let s=a.toDataURL(`image/webp`,i);return s.startsWith(`data:image/webp`)?s:r?a.toDataURL(`image/png`):a.toDataURL(`image/jpeg`,i)}var Me=0;function Ne(){return Me+=1,`img_${Date.now()}_${Me}`}async function Pe(e){let t=Ee.has(e.type),n;try{n=await Ae(e)}catch{throw new H(`Could not decode image "${e.name}"`,`decode_failed`)}let r=n.width,i=n.height,a=Math.max(r,i);if(!(!t||a>we||e.size>Te)){let t=await De(e);return{id:Ne(),dataUrl:t,mediaType:e.type,bytes:Oe(t),name:e.name||void 0,width:r,height:i}}let o=e.type!==`image/jpeg`,s=Math.min(1,we/a),c=.85,l=je(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c);Oe(l)>4194304&&(s=Math.min(s,1280/a),c=.7,l=je(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c)),`close`in n&&n.close();let u=Oe(l);if(u>4194304)throw new H(`Image "${e.name}" is too large after compression`,`too_large`);return{id:Ne(),dataUrl:l,mediaType:ke(l),bytes:u,name:e.name||void 0,width:Math.max(1,Math.round(r*s)),height:Math.max(1,Math.round(i*s))}}function Fe(e){return e.map(e=>{let t=e.dataUrl.indexOf(`,`);return{data:t>=0?e.dataUrl.slice(t+1):e.dataUrl,mediaType:e.mediaType,...e.name?{name:e.name}:{}}})}var U=null;function Ie(){if(typeof window>`u`)return null;if(U)return U;let e=window.AudioContext||window.webkitAudioContext;if(!e)return null;try{U=new e}catch{return null}return U}function W(e,t,n){let r=Ie();if(!r)return;let i=r.currentTime+t,a=r.createOscillator(),o=r.createGain();a.type=`sine`,a.frequency.value=e,o.gain.setValueAtTime(0,i),o.gain.linearRampToValueAtTime(.18,i+.01),o.gain.exponentialRampToValueAtTime(1e-4,i+n),a.connect(o).connect(r.destination),a.start(i),a.stop(i+n+.02)}function Le(){W(659.25,0,.18),W(880,.12,.24)}function Re(){W(523.25,0,.15),W(659.25,.1,.15),W(783.99,.2,.25)}var G=`default`;G=typeof window<`u`&&`Notification`in window?Notification.permission:`unsupported`;async function ze(){if(G===`unsupported`||G===`granted`||G===`denied`)return G;try{let e=await Notification.requestPermission();return G=e,e}catch{return`denied`}}function Be(e,t,n){if(!(typeof document>`u`||!document.hidden)&&G===`granted`)try{let r=new Notification(e,{body:t,icon:`/wrongstack.svg`,tag:n??`wrongstack-run`,requireInteraction:n===`wrongstack-confirm`});r.onclick=()=>{window.focus(),r.close()}}catch{}}var Ve={"iteration.started":He,"provider.text_delta":Ue,"provider.thinking_delta":We,"tool.started":Ge,"tool.progress":Ke,"tool.executed":qe,"tool.confirm_needed":Je,"run.result":Ye};function He(e){if(!d(e))return;l(e);let t=e.payload;g.getState().setIteration({index:t.index,max:t.maxIterations??0}),i.getState().setLoading(!0),typeof document<`u`&&document.hidden&&V(`running`),i.getState().runStart===null&&i.getState().setRunStart({at:Date.now(),cost:g.getState().cost}),i.getState().setCurrentAssistantMessage(null)}function Ue(e){if(!d(e))return;let t=ge(e);if(t?.kind!==`text-delta`)return;f.flush(`__thinking__`),i.getState().clearThinking();let n=i.getState().currentAssistantMessageId;n||(n=i.getState().addMessage({role:`assistant`,content:``,streaming:!0}),i.getState().setCurrentAssistantMessage(n)),f.push(n,t.text,(e,t)=>i.getState().appendToMessage(e,t))}function We(e){if(!d(e))return;let t=ge(e);t?.kind===`thinking-delta`&&f.push(`__thinking__`,t.text,(e,t)=>i.getState().appendThinking(t))}function Ge(e){if(!d(e))return;l(e);let t=R(e);if(t?.kind!==`started`)return;let n=i.getState().getToolMessageId(t.id);if(n){i.getState().setCurrentToolId(n);return}f.flushAll(),i.getState().clearThinking();let r=i.getState().currentAssistantMessageId;r&&i.getState().finalizeMessage(r,{final:!1}),i.getState().setCurrentAssistantMessage(null);let a=i.getState().addMessage({role:`tool`,content:``,toolName:t.name,toolInput:t.input,toolUseId:t.id});i.getState().setCurrentToolId(a),i.getState().addExecution({id:t.id,name:t.name,input:t.input,ok:!0,startedAt:Date.now()})}function Ke(e){if(!d(e))return;let t=R(e);if(t?.kind!==`progress`)return;let n=t.text;if(!n)return;let r=i.getState().getToolMessageId(t.id);if(!r)return;let a=t.eventType===`warning`?`⚠ `:``;f.push(r,`${a}${n}\n`,(e,n)=>i.getState().appendToolProgressLinesByUseId(t.id,n.split(`
|
|
7
|
+
`).filter(e=>e.length>0)))}function qe(e){if(!d(e))return;l(e);let t=R(e);if(t?.kind!==`executed`)return;let{currentToolId:n}=i.getState(),r=t.id?i.getState().getToolMessageId(t.id):n;r&&(f.drop(r),t.id?i.getState().setToolResultByUseId(t.id,t.output??``,t.ok):i.getState().setToolResult(r,t.output??``,t.ok),i.getState().updateMessage(r,{toolDurationMs:t.durationMs,...t.sage&&t.sage.length>0?{sageLines:t.sage}:{}})),t.id&&i.getState().updateExecution(t.id,{completedAt:Date.now(),durationMs:t.durationMs,output:t.output,ok:t.ok}),n&&r===n&&i.getState().setCurrentToolId(null)}function Je(e){if(!d(e))return;let t=e.payload;if(c.getState().yolo===!0&&!t.boundaryReason){h(b.getState().wsUrl).sendConfirm(t.id,`yes`),j.getState().hideConfirm();return}j.getState().showConfirm({id:t.id,toolName:t.toolName,input:t.input,suggestedPattern:t.suggestedPattern,decisionSource:t.decisionSource,riskTier:t.riskTier,boundaryReason:t.boundaryReason});try{Re()}catch{}ze(),Be(`${g.getState().projectName||`Agent`} needs approval`,`Tool "${t.toolName}" is waiting for your decision.`,`agent-confirm`),typeof document<`u`&&document.hidden&&V(`attention`)}function Ye(e){if(!d(e))return;let n=p(e,{status:`string`},{iterations:`number`,finalText:`string`,error:`object`});if(!n)return;let a=n.iterations??1;f.flushAll(),i.getState().flushThinkingLog(Math.max(1,a)),g.getState().setIteration(null),i.getState().setLoading(!1);let o=i.getState().currentAssistantMessageId,s=n.status===`done`?n.finalText?.trim():void 0;if(o){let e=i.getState().messages.find(e=>e.id===o);i.getState().updateMessage(o,{content:e?.content?.trim()?e.content:s??e?.content??``}),i.getState().finalizeMessage(o,{final:!0})}else if(s){let e=i.getState().runStart,t=r(s).stripped.trim(),n=i.getState().messages,a;for(let t=n.length-1;t>=0;t--){let r=n[t];if(r?.role===`assistant`&&(!e||r.timestamp>=e.at)){a=r;break}}let o=a?.content.trim();if(!(o!==void 0&&(o===s||o===t))){let e=i.getState().addMessage({role:`assistant`,content:s});i.getState().finalizeMessage(e,{final:!0})}}i.getState().setCurrentAssistantMessage(null),i.getState().clearThinking();let c=i.getState().runStart;if(c&&n.status===`done`){let e=i.getState().messages,n=-1,r=0;for(let i=e.length-1;i>=0;i--){let a=t(e[i]);if(a.role===`assistant`&&n===-1&&a.content&&(n=i),a.role===`tool`&&a.timestamp>=c.at&&(r+=1),a.role===`user`&&a.timestamp<=c.at)break}if(n!==-1){let t=g.getState().cost;i.getState().updateMessage(e[n]?.id,{runSummary:{iterations:a,tools:r,durationMs:Date.now()-c.at,costDelta:Math.max(0,t-c.cost)}})}}if(i.getState().setRunStart(null),n.status!==`done`&&n.error)i.getState().addMessage({role:`assistant`,content:`Error: ${n.error.message}`,isError:!0}),M.error(`Run ended: ${n.error.message}`),Be(`${g.getState().projectName||`Agent`} run failed`,n.error.message),typeof document<`u`&&document.hidden&&V(`error`);else if(n.status===`done`){if(typeof document<`u`&&document.hidden&&(M.success(`Run completed in ${a} iteration${a===1?``:`s`}`),Be(`${g.getState().projectName||`Agent`} run finished`,`Completed in ${a} iteration${a===1?``:`s`}.`),V(`ready`)),ze(),b.getState().soundOnComplete)try{Le()}catch{}typeof document<`u`&&document.dispatchEvent(new CustomEvent(`chat:next-step-countdown`))}let l=i.getState(),u=l.queue[0];if(!u)return;if(u.alreadyDispatched===!0){Xe(u);let e=l.dequeueDrainable();return e?Ze(e):void 0}let m=l.dequeue();if(m)return Ze(m)}function Xe(e){if(e.bubbleAdded===!0)return;let t=e.images??[];i.getState().addMessage({role:`user`,content:e.text,...t.length>0?{attachments:t.map(e=>({id:e.id,kind:`image`,dataUrl:e.dataUrl,mediaType:e.mediaType,bytes:e.bytes,name:e.name}))}:{}}),e.bubbleAdded=!0}function Ze(e){let t=h(b.getState().wsUrl),n=e.images??[];if(i.getState().addMessage({role:`user`,content:e.text,...n.length>0?{attachments:n.map(e=>({id:e.id,kind:`image`,dataUrl:e.dataUrl,mediaType:e.mediaType,bytes:e.bytes,name:e.name}))}:{}}),e.mode===`btw`){e.alreadyDispatched!==!0&&t.sendMailboxMessage({type:`btw`,to:`leader`,subject:`btw from WebUI`,body:e.text,priority:`normal`,audience:`all`});return}i.getState().setLoading(!0),t.sendMessage(e.text,n.length>0?Fe(n):void 0)}var Qe={"coordinator.status":e=>{let t=e.payload;y.getState().setCoordinatorStatus(t.status,t.mode),t.taskQueue&&y.getState().updateCoordinatorStats({total:t.subagentCount??0,running:0,idle:0,stopped:0,inFlight:t.taskQueue.running,pending:t.taskQueue.pending,completed:t.taskQueue.completed})},"coordinator.stats":e=>{let t=e.payload;y.getState().updateCoordinatorStats(t)},"budget.threshold_reached":e=>{let t=e.payload;y.getState().pushEvent(`budget.threshold_reached`,t,t.ts??Date.now(),t.subagentId,t.taskId),t.limit>0&&t.used/t.limit*100>=85&&y.getState().recordBudgetAlert(t.subagentId,t.kind,t.used,t.limit),y.getState().updateSubagentBudget(t.subagentId,{budgetUsage:{iterations:0,toolCalls:0,tokens:0,costUsd:0,elapsedMs:t.used??0}})},"budget.decision":e=>{let t=e.payload,n=t.extended?.timeoutMs??t.extended?.maxIterations??t.extended?.maxToolCalls;y.getState().recordBudgetDecision(t.subagentId,t.kind,t.decision,n),y.getState().pushEvent(`budget.decision`,{subagentId:t.subagentId,kind:t.kind,decision:t.decision,newLimit:n},Date.now(),t.subagentId)},"subagent.budget_extended":e=>{let t=e.payload;y.getState().recordBudgetExtended(t.subagentId,t.kind,t.extendedTo),y.getState().pushEvent(`subagent.budget_extended`,t,Date.now(),t.subagentId)},"consensus.vote_initiated":e=>{let t=e.payload;y.getState().pushConsensusVote(t.changeId,t.title,t.eligible),y.getState().pushEvent(`consensus.vote_initiated`,t,Date.now()),M.info(`Vote started: `+t.title)},"consensus.vote_cast":e=>{let t=e.payload,n=y.getState().consensusVotes.get(t.changeId)?.eligible.find(e=>e.agentId===t.voterId);y.getState().recordConsensusVote(t.changeId,t.voterId,n?.agentName??t.voterId,t.value),y.getState().pushEvent(`consensus.vote_cast`,t,Date.now(),t.voterId)},"consensus.vote_resolved":e=>{let t=e.payload;y.getState().resolveConsensusVote(t.changeId,t.result,t.approveCount,t.rejectCount),y.getState().pushEvent(`consensus.vote_resolved`,t,Date.now()),M.info(`Vote resolved: `+t.result+` (y`+t.approveCount+` n`+t.rejectCount+`)`)},"task.pending":e=>{let t=e.payload;y.getState().pushTaskPending(t.taskId,t.description,t.priority),y.getState().pushEvent(`task.pending`,t,Date.now())},"task.started":e=>{let t=e.payload;y.getState().startTask(t.taskId,t.subagentId),y.getState().pushEvent(`task.started`,t,Date.now(),t.subagentId)},"task.completed":e=>{let t=e.payload;y.getState().completeTask(t.taskId,t.status,t.durationMs),y.getState().pushEvent(`task.completed`,t,Date.now(),t.subagentId)},"task.failed":e=>{let t=e.payload;y.getState().failTask(t.taskId,t.error),y.getState().pushEvent(`task.failed`,{taskId:t.taskId,subagentId:t.subagentId,error:String(t.error).slice(0,120)},Date.now(),t.subagentId),M.error(`Task failed: `+String(t.error).slice(0,80))}};function K(){let e=h();e?.send?.({type:`mailbox.messages`,payload:{limit:30,incompleteOnly:!0}}),e?.send?.({type:`mailbox.agents`,payload:{}})}var q=null;function J(){q!==null&&clearTimeout(q),q=setTimeout(()=>{q=null,K()},300)}function $e(e){let t=e.payload;if(t.error){w.getState().setError(t.error);return}w.getState().setTree(t.root,t.tree)}function et(e){let t=e.payload;if(t.error){w.getState().setError(t.error);return}w.getState().openFile(t.filePath,t.content)}function tt(e){let t=e.payload;t.success?w.getState().markSaved(t.filePath):t.error&&w.getState().setError(`Save failed: ${t.error}`)}function nt(e){let t=u(`mailbox.event`,e.payload);t&&(m.getState().pushEvent(t),m.getState().setActive(!0)),J()}function rt(e){let t=e.payload;t?.messages&&A.getState().setMessages(t.messages)}function it(e){let t=e.payload;t?.agents&&A.getState().setAgents(t.agents)}function at(e){let t=u(`mailbox.received`,e.payload);t&&(m.getState().pushEvent(t),m.getState().setActive(!0)),J()}function ot(e){J()}function st(e){let t=e.payload;t?.agentId&&A.getState().removeAgent(t.agentId)}function ct(e){A.getState().setMessages([]),K()}function lt(e){J()}function ut(e){let t=e.payload;t&&typeof t.totalRemoved==`number`&&A.getState().setLastCompaction({readByAllRemoved:t.readByAllRemoved??0,expiredRemoved:t.expiredRemoved??0,stalePurged:t.stalePurged??0,totalRemoved:t.totalRemoved,remaining:t.remaining??0}),J()}function dt(e){let t=e.payload;if(t?.success){J();return}M.error(`Mailbox action failed: ${t?.error??`unknown error`}`)}var ft={"files.tree":$e,"files.read":et,"files.written":tt,"mailbox.event":nt,"mailbox.messages":rt,"mailbox.agents":it,"mailbox.received":at,"mailbox.agent_registered":ot,"mailbox.agent_deregistered":st,"mailbox.cleared":ct,"mailbox.purged":lt,"mailbox.compacted":ut,"mailbox.action_result":dt};function pt(e){let t=e.payload;O.getState().setSnapshot(t.worktrees??[],t.baseBranch??``)}function mt(e){let t=e.payload;O.getState().pushEvent(t)}function ht(e){let t=e.payload;O.getState().setOrphans(t.orphans??[],t.canClean??!1,t.reason)}function gt(e){let t=e.payload;O.getState().setCleanResult({...t,at:Date.now()})}function _t(e){let t=e.payload;O.getState().setMergeResult({...t,at:Date.now()})}function vt(e){let t=e.payload;O.getState().setDiff(t.dir,t.summary)}function yt(e){x.getState().applyEvent(e.payload);let t=u(`subagent.event`,e.payload);t&&(m.getState().pushEvent(t),m.getState().setActive(!0))}function bt(e){let t=ve(e);t?.kind===`concurrency`&&x.setState({fleetConcurrency:t.active,fleetConcurrencyMax:t.maximum,...t.maxSpawns===void 0?{}:{fleetMaxSpawns:t.maxSpawns},...t.usedSpawns===void 0?{}:{fleetUsedSpawns:t.usedSpawns},...t.remainingSpawns===void 0?{}:{fleetRemainingSpawns:t.remainingSpawns},...t.effectiveSource===void 0?{}:{fleetBudgetSource:t.effectiveSource},...t.checkpointMaxSpawns===void 0?{}:{fleetCheckpointMaxSpawns:t.checkpointMaxSpawns},...t.ceilingMismatch===void 0?{}:{fleetCeilingMismatch:t.ceilingMismatch}})}function xt(e){let t=ve(e);if(t?.kind!==`client-status`)return;let n=t.status;ie.getState().setCurrentSession({clientType:n.clientType,clientId:n.clientId,agentCount:n.agentCount,model:n.model,mode:n.mode,toolCalls:n.toolCalls,inputTokens:n.inputTokens,outputTokens:n.outputTokens,cacheTokens:n.cacheTokens,costUsd:n.costUsd,timestamp:n.timestamp})}function St(e){let t=ve(e);if(t?.kind!==`sessions`)return;ie.getState().setLiveSessions(t.sessions);let n=Date.now();if(n-wt>=5e3&&(wt=n,K()),n-Ct<1e3)return;Ct=n;let r=u(`sessions.status_update`,e.payload);r&&(m.getState().pushEvent(r),m.getState().setActive(!0))}var Ct=0,wt=0,Tt={"worktree.state":pt,"worktree.event":mt,"worktree.orphans":ht,"worktree.cleanup_result":gt,"worktree.merge_result":_t,"worktree.diff_result":vt,"subagent.event":yt,"fleet.concurrency_update":bt,"client.status_update":xt,"sessions.status_update":St};function Et(e,t){let n=e=>e.trim().replace(/\s+/g,` `).toLowerCase();return n(e)===n(t)}var Dt=50,Ot=200;function kt(e){return e.length<=300?e:`${e.slice(0,299)}…`}function At(e){return{...e,text:kt(e.text)}}function jt(e){let t=[];for(let n of Object.values(e))n.state===`exited`&&t.push(n);if(t.length<=Ot)return e;t.sort((e,t)=>(t.exitedAt??t.lastSeenAt).localeCompare(e.exitedAt??e.lastSeenAt));let n={...e};for(let e of t.slice(Ot))delete n[e.id];return n}var Y=o()(e=>({traces:[],contextMemories:{},transitions:[],pushTrace:t=>e(e=>{let n={...e.contextMemories},r=[...e.transitions],i=t.injected.map(At),a=t.activated.map(At);for(let e of i){let i=n[e.id];n[e.id]={...e,state:i?.state===`active`?`active`:`injected`,trigger:t.trigger,enteredAt:i?.enteredAt??t.at,lastSeenAt:t.at};let a=`${t.at}_injected_${e.id}`;r.some(e=>e.id===a)||r.unshift({id:a,at:t.at,memoryId:e.id,action:`injected`,reason:`${t.trigger} · score ${e.score.toFixed(2)}`})}return{traces:[{...t,activated:a,injected:i},...e.traces.filter(e=>e.runId!==t.runId)].slice(0,Dt),contextMemories:jt(n),transitions:r.slice(0,100)}}),applyContextSnapshot:t=>e(e=>{let n={...e.contextMemories},r=[...e.transitions],i=new Set(t.activeMemoryIds);for(let e of t.activeMemoryIds){let r=n[e];n[e]=r?{...r,state:`active`,lastSeenAt:t.at,exitedAt:void 0}:Mt(e,t.at,`active`)}for(let e of t.enteredMemoryIds){let n=`${t.at}_entered_${e}`;r.some(e=>e.id===n)||r.unshift({id:n,at:t.at,memoryId:e,action:`entered`,reason:`present in provider request`})}for(let e of t.exitedMemoryIds){let i=n[e];i&&(n[e]={...i,state:`exited`,exitedAt:t.at});let a=`${t.at}_exited_${e}`;r.some(e=>e.id===a)||r.unshift({id:a,at:t.at,memoryId:e,action:`exited`,reason:`absent from provider request`})}for(let[e,a]of Object.entries(n))if((a.state===`injected`||a.state===`active`)&&!i.has(e)&&(n[e]={...a,state:`exited`,exitedAt:t.at},!t.exitedMemoryIds.includes(e))){let n=`${t.at}_exited_before_provider_${e}`;r.some(e=>e.id===n)||r.unshift({id:n,at:t.at,memoryId:e,action:`exited`,reason:a.state===`injected`?`removed before provider request`:`absent from provider context snapshot`})}return{contextMemories:jt(n),transitions:r.slice(0,100)}}),resetContext:()=>e({contextMemories:{},transitions:[]}),clear:()=>e({traces:[],contextMemories:{},transitions:[]})}));function Mt(e,t,n){return{id:e,kind:`unknown`,text:`Memory details were not present in this UI process.`,score:0,relationStrength:0,anchors:[],tags:[],activationReasons:[],importance:0,confidence:0,freshness:0,persistence:`unknown`,state:n,trigger:`context snapshot`,enteredAt:t,lastSeenAt:t,isPlaceholder:!0}}var Nt=100,Pt=new Set([`exited`,`superseded`,`archived`,`staled`,`contradicted`]);function Ft(e,t=new Date){let n=e.event,r=X(e.memoryId),i=X(e.at)??t.toISOString(),a={id:`${n}_${t.getTime()}_${Math.random().toString(36).slice(2,7)}`,at:i,event:n};if(n===`memory.accepted`&&r)return{...a,action:`entered`,memoryId:r,label:`${r} entered memory`,detail:Lt(e)};if(n===`memory.merged`&&r){let t=Array.isArray(e.mergedIds)?e.mergedIds.length:0;return{...a,action:`merged`,memoryId:r,label:`${r} merged`,detail:t>0?`${t} records folded in`:void 0}}if(n===`memory.recovered`&&r)return{...a,action:`recovered`,memoryId:r,label:`${r} recovered`,detail:X(e.reason)};if(n===`memory.deleted`&&r)return{...a,action:`exited`,memoryId:r,label:`${r} exited memory`,detail:Rt(e)};if(n===`memory.updated`&&r){let t=X(e.status)??`updated`;return{...a,action:t===`deleted`?`exited`:`updated`,memoryId:r,label:t===`deleted`?`${r} exited memory`:`${r} updated → ${t}`,detail:Lt(e)}}if(n===`memory.graph_edge_added`){let t=X(e.from),n=X(e.to);if(!t?.startsWith(`mem:`)||!n?.startsWith(`mem:`))return null;let r=X(e.relation)??`related_to`,i=Z(e.weight),o=Array.isArray(e.evidence)?e.evidence.filter(e=>typeof e==`string`):[];return{...a,action:`related`,memoryId:t.startsWith(`mem:`)?t.slice(4):void 0,label:`${zt(t)} ↔ ${zt(n)}`,detail:[r,i===void 0?void 0:`weight ${i.toFixed(2)}`,o.length>0?`why: ${o.join(`, `)}`:void 0].filter(Boolean).join(` · `)}}return n===`memory.relationships_rebuilt`?{...a,action:`related`,label:`Memory relationships rebuilt`,detail:`${Z(e.added)??0} added / ${Z(e.proposed)??0} proposed`}:n===`memory.superseded`&&r?{...a,action:`superseded`,memoryId:r,label:`${r} → superseded`,detail:X(e.reason)??Lt(e)}:n===`memory.archived`&&r?{...a,action:`archived`,memoryId:r,label:`${r} → archived`,detail:X(e.reason)}:n===`memory.staled`&&r?{...a,action:`staled`,memoryId:r,label:`${r} → staled`,detail:X(e.reason)??`anchor drift detected`}:n===`memory.contradicted`&&r?{...a,action:`contradicted`,memoryId:r,label:`${r} → contradicted`,detail:X(e.reason)??`conflicting evidence`}:null}var It=o()(e=>({items:[],pushEvent:t=>e(e=>{let n=Ft(t);return n?{items:[n,...Pt.has(n.action)?e.items.filter(e=>!(Pt.has(e.action)&&e.memoryId===n.memoryId)):e.items].slice(0,Nt)}:e}),clear:()=>e({items:[]})}));function X(e){return typeof e==`string`&&e.length>0?e:void 0}function Z(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function Lt(e){let t=[X(e.kind),X(e.persistence)],n=Z(e.confidence),r=Z(e.freshness);return n!==void 0&&t.push(`confidence ${n.toFixed(2)}`),r!==void 0&&t.push(`freshness ${r.toFixed(2)}`),t.filter(Boolean).join(` · `)||void 0}function Rt(e){let t=X(e.reason),n=Z(e.removedEdges);return[t,n===void 0?void 0:`${n} edges removed`].filter(Boolean).join(` · `)||void 0}function zt(e){let t=e.replace(/^mem:/,``);return t.length>26?`${t.slice(0,23)}…`:t}function Bt(e){if(!e||e.length===0)return;let t=e.map(e=>e.status);return t.some(e=>e===`failed`)?`failed`:t.every(e=>e===`completed`||e===`skipped`)?`completed`:t.some(e=>e===`paused`)?`paused`:`running`}function Vt(e){let t=e.payload,n=Array.isArray(t.phases)?t.phases:void 0,r=Bt(n);S.getState().setState({phases:n,activePhaseId:typeof t.activePhaseId==`string`?t.activePhaseId:void 0,overallPercent:typeof t.overallPercent==`number`?t.overallPercent:void 0,autonomous:typeof t.autonomous==`boolean`?t.autonomous:void 0,title:typeof t.title==`string`?t.title:void 0,goal:typeof t.goal==`string`?t.goal:void 0,status:r,multiBoard:t.multiBoard===!0,lastError:r===`failed`?S.getState().lastError:null})}function Ht(e){let t=e.payload,n={totalPhases:typeof t.totalPhases==`number`?t.totalPhases:0,completed:typeof t.completed==`number`?t.completed:0,failed:typeof t.failed==`number`?t.failed:0,totalTasks:typeof t.totalTasks==`number`?t.totalTasks:0,completedTasks:typeof t.completedTasks==`number`?t.completedTasks:0,failedTasks:typeof t.failedTasks==`number`?t.failedTasks:0};S.getState().setState({progress:n,overallPercent:typeof t.percentComplete==`number`?Math.round(t.percentComplete):void 0,status:n.failed>0||n.failedTasks>0?`failed`:`running`,lastEvent:`progress`})}function Q(e){let t=e.payload,n=typeof t.title==`string`&&t.title?t.title:`Goal`,r=typeof t.error==`string`&&t.error?t.error:void 0;if(e.type===`goal.paused`){S.getState().setState({status:`paused`,autonomous:!1,lastEvent:`paused`}),M.info(`Goal paused`);return}if(e.type===`goal.resumed`){S.getState().setState({status:`running`,autonomous:!0,lastEvent:`resumed`}),M.info(`Goal resumed`);return}if(e.type===`goal.stopped`){S.getState().setState({status:`stopped`,autonomous:!1,lastEvent:`stopped`}),M.warn(`Goal stopped`);return}if(e.type===`goal.cleared`){S.getState().clear();return}if(e.type===`goal.reverted`){let e=t.ok===!0,n=typeof t.reverted==`number`?t.reverted:0,r=typeof t.reason==`string`?t.reason:void 0;e?M.success(n>0?`Reverted ${n} commit${n===1?``:`s`}`:`Nothing to revert`):M.error(`Revert failed: ${r??`unknown error`}`),S.getState().setState({lastEvent:`reverted`});return}if(e.type===`goal.saved`){S.getState().setState({lastEvent:`saved`}),M.success(`Goal graph saved`);return}if(e.type===`goal.completed`){S.getState().setState({status:`completed`,autonomous:!1,overallPercent:100,lastEvent:`completed`,lastError:null}),M.success(`${n} completed`);return}if(e.type===`goal.failed`||e.type===`goal.error`){let e=r??(typeof t.message==`string`?t.message:`${n} failed`);S.getState().setState({status:`failed`,autonomous:!1,lastEvent:`failed`,lastError:e}),M.error(e)}}function Ut(e){let t=e.payload;S.getState().setState({lastEvent:`list`,graphs:Array.isArray(t.graphs)?t.graphs:[]})}function Wt(e){let t=e.payload;ae.getState().setGoal(t)}function Gt(e){let t=e.payload;c.getState().set(t),t.yolo===!0&&j.getState().confirmInfo&&j.getState().hideConfirm()}function Kt(e){if(!d(e))return;let t=e.payload,n;if(t.decision.type===`answer`){let e=t.decision.rationale&&t.decision.rationale!==t.decision.text?`\n\n_${t.decision.rationale}_`:``;n=`🧠 ${t.decision.text??``}${e}`}else n=t.decision.type===`deny`?`🧠 Denied: ${t.decision.reason??``}`:`🧠 The Brain escalated this question back to you — it needs human judgement.`;i.getState().addMessage({role:`assistant`,content:n})}function qt(e){if(!d(e))return;let t=e.payload,n=t.requestId??t.request?.id;if(n&&t.request?.question&&E.getState().noteQuestion(n,t.request.question),t.event===`brain.council_vote`){E.getState().recordVote(t);let e=t.requestId??`unknown`;m.getState().pushEvent({id:`council_${e}_${t.seatId??`seat-${Date.now()}`}`,kind:`brain:council_vote`,timestamp:Date.now(),source:t.model??t.persona??`seat`,target:`brain`,label:`${t.persona??`voter`} → ${t.status===`valid`?t.optionId??`stance`:t.status??`failed`}`,data:t,color:`#38bdf8`,flowGroup:`brain`});return}if(t.event===`brain.council_resolved`){E.getState().recordResolution(t);let e=t.requestId??`unknown`,n=E.getState().panels.find(t=>t.requestId===e)?.seats??[],r=n.map(e=>`- **${e.persona}**${e.veto?` (veto)`:``} → ${e.status===`valid`?e.optionId??`stance`:e.status}${e.model?` · \`${e.model}\``:``}`),a=[`⚖️ **Council ${t.resolution??`resolved`}**`,`${t.validVoteCount??n.length}/${t.configuredSeatCount??n.length} seats`,`${t.distinctTargetCount??0} distinct target${t.distinctTargetCount===1?``:`s`}`,t.judgeUsed?`judge used`:void 0,t.usage?.totalTokens?`${t.usage.totalTokens} tok`:void 0].filter(Boolean).join(` · `);i.getState().addMessage({role:`assistant`,content:[a,...r,...(t.warnings??[]).map(e=>`> ⚠ ${e}`)].filter(Boolean).join(`
|
|
8
|
+
`)});for(let e of t.warnings??[])M.warn(e);return}if(t.event===`brain.intervention`){let e=t.decision?.rationale??t.decision?.text??``,n=t.intervened?`🧠 **Brain intervention** — corrective guidance was sent to the agent.`:`🧠 **Brain check** — a distress signal was reviewed; no action needed.`;i.getState().addMessage({role:`assistant`,content:[n,t.request?.question??``,e?`_${e}_`:``].filter(Boolean).join(`
|
|
9
|
+
|
|
10
|
+
`)}),t.intervened&&M.info(`Brain intervened: agent steered`)}else t.event===`brain.decision_denied`&&M.warn(`Brain denied: ${t.decision?.reason??t.request?.question??`request`}`)}function Jt(e){if(!d(e))return;let t=e.payload;m.getState().pushEvent({id:`memory_${Date.now()}_${Math.random().toString(36).slice(2,7)}`,kind:`memory:event`,timestamp:Date.now(),source:`sage`,target:`leader`,label:t.event.replace(/^memory\./,``),data:t,color:`#a78bfa`,flowGroup:`memory`}),t.event===`memory.injector_run`&&Y.getState().pushTrace(t),t.event===`memory.context_snapshot`&&Y.getState().applyContextSnapshot(t),It.getState().pushEvent(t),t.event===`memory.staled`?M.warn(`Memory became stale: ${String(t.memoryId??``)}`):t.event===`memory.contradicted`?M.warn(`Memory contradicted: ${String(t.memoryId??``)}`):t.event===`memory.hygiene_completed`&&M.info(`SAGE hygiene completed`)}function Yt(e){let t=e.payload,n=typeof t.kind==`string`?t.kind:typeof t.event==`string`?t.event:`collab.event`;m.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`}),m.getState().setActive(!0)}function Xt(e){Yt(e);let t=e.payload;t?.phase===`consumed`?M.success(`Tool injection applied${t.toolName?` to ${t.toolName}`:``}`):M.info(`Collab tool injection queued`)}function Zt(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();ae.getState().appendJournalEntry({iteration:n,task:r,status:i,timestamp:a}),m.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`}),m.getState().setActive(!0)}function Qt(e){let t=e.payload;g.getState().setEnv({cwd:t.cwd,projectRoot:t.projectRoot,projectName:t.projectRoot.split(/[/\\]/).pop()||t.projectRoot}),w.getState().setTreeLoading(!0),h().send({type:`files.tree`,payload:{path:t.cwd}})}function $t(e){let t=e.payload,n=j.getState().refinePanel,r=i.getState().pendingRefinement;if(!n&&r){i.getState().setRefining(!1);let e=r.text,n=r.images?.length?r.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,a=n&&n.length>0&&r.mode===`btw`?`queue`:r.mode??`queue`;if(t.error){i.getState().setPendingRefinement(null),i.getState().enqueue(e,a,n);return}let o=t.refined??``;if(!o||Et(o,e)){i.getState().setPendingRefinement(null),i.getState().enqueue(e,a,n);return}i.getState().setPendingRefinement(null),j.getState().setRefinePanel({original:e,refined:o,english:t.english||o,status:`ready`,mode:n&&n.length>0&&r.mode===`btw`?`queue`:r.mode,images:n,...t.refinedWith?{provider:t.refinedWith.provider,model:t.refinedWith.model}:{},error:void 0,errorKind:void 0,resolve:()=>{}});return}if(!n)return;if(t.error){if(t.errorKind===`timeout`&&!n.retried&&t.retryTimeoutMs){j.getState().setRefinePanel({...n,status:`refining`,retried:!0}),h().refineModel(n.original,{timeoutMs:t.retryTimeoutMs});return}j.getState().setRefinePanel({...n,status:`failed`,error:t.error,errorKind:t.errorKind,fallbackRef:t.fallbackRef});return}let a=n.original;if(Et(t.refined,a)){j.getState().setRefinePanel(null),i.getState().addMessage({role:`user`,content:a}),i.getState().setLoading(!0),h().sendMessage(a);return}j.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 en(e){let t=e.payload;ue.getState().setInfo({...t,fetchedAt:Date.now()})}function tn(e){let t=e.payload;ne.getState().setFiles(t.files??[],t.error??null)}function nn(e){let t=e.payload;ne.getState().selectedPath===t.path&&ne.getState().setDiff({path:t.path,oldText:t.oldText??``,newText:t.newText??``,binary:t.binary,tooLarge:t.tooLarge,error:t.error})}function rn(e){let t=e.payload;ee.getState().setSnapshot({count:t.count,maxConcurrent:t.maxConcurrent,jobs:t.jobs??[]})}function an(e){let t=e.payload;ee.getState().recordFired(t.name,t.ts)}function on(e){let t=e.payload;M.info(t.message??`🦂 Chimera report ready. No follow-up started; open the mailbox to inspect it.`,8e3)}var sn={"goal-state.updated":Wt,"prefs.updated":Gt,"goal.state":Vt,"goal.progress":Ht,"goal.paused":Q,"goal.resumed":Q,"goal.stopped":Q,"goal.cleared":Q,"goal.reverted":Q,"goal.saved":Q,"goal.completed":Q,"goal.failed":Q,"goal.error":Q,"goal.list":Ut,"brain.answer":Kt,"brain.event":qt,"memory.event":Jt,"collab.event":Yt,"collab.injection.granted":Xt,"eternal.iteration":Zt,"working_dir.changed":Qt,"model.refine_result":$t,"git.info":en,"git.changes":tn,"git.diff":nn,"cron.snapshot":rn,"cron.job_fired":an,"chimera.report_available":on};function cn(e){let t=e.payload;!t.jobId||!t.kind||C.getState().jobStarted(t.jobId,t.kind)}function ln(e){let t=e.payload;!t.jobId||!t.phase||!Number.isFinite(t.completed)||!Number.isFinite(t.total)||C.getState().jobProgress(t.jobId,{phase:t.phase,completed:t.completed??0,total:t.total??0})}function un(e){let t=e.payload;t.workspaceId&&C.getState().workspaceCompleted(t.workspaceId)}function dn(e){let t=e.payload;t.snapshot&&C.getState().setSnapshot(t.snapshot,t.stale??!1)}function fn(e){let t=e.payload;t.reportId&&C.getState().reportReady(t.reportId)}function pn(e){let t=e.payload;t.jobId&&C.getState().jobFailed(t.jobId,t.error??`TechStack job failed`)}function mn(e){let t=e.payload;t.jobId&&C.getState().jobCancelled(t.jobId)}var hn={"techstack.job.started":cn,"techstack.job.progress":ln,"techstack.workspace.completed":un,"techstack.snapshot.updated":dn,"techstack.report.ready":fn,"techstack.job.failed":pn,"techstack.job.cancelled":mn};function gn(){let[e,t]=(0,N.useState)({isMobile:!1,isSmall:!1,width:0});return(0,N.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: 768px)`),n=window.matchMedia(`(max-width: 640px)`),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 _n(){return typeof window>`u`?!1:window.matchMedia(`(max-width: 768px)`).matches}function vn(e){if(typeof e!=`string`)return Date.now();let t=Date.parse(e);return Number.isFinite(t)?t:Date.now()}function yn(e){return`replay_${Date.now()}_${e}`}function bn(){return typeof window>`u`?!1:window.location.pathname===`/debug`||window.location.pathname===`/analytics`||window.location.pathname===`/refresh-debug`}function xn(e){return typeof e==`string`?e:JSON.stringify(e)}function Sn(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(`
|
|
11
|
+
`):``}function Cn(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 wn(e,t=[]){let n=[],r=new Map,i=0,a=0,o=(e,t,r)=>{t&&n.push({id:yn(n.length),role:e,content:t,timestamp:r})},s=e=>{n.push({id:yn(n.length),role:`system`,content:e.text,timestamp:vn(e.ts),isError:e.level===`error`||void 0})},c=e=>{if(typeof e==`string`)for(;a<t.length&&t[a].ts<e;)s(t[a]),a+=1},l=(e,t)=>{let r=e.trim();r&&(i+=1,n.push({id:yn(n.length),role:`system`,content:``,timestamp:t,thinkingLog:{iteration:i,text:r,startedAt:t,durationMs:0,replayed:!0}}))};for(let t of e){if(c(t.ts),t.role!==`user`&&t.role!==`assistant`&&t.role!==`system`)continue;let e=t.role,i=vn(t.ts);if(typeof t.content==`string`){o(e,t.content,i);continue}if(!Array.isArray(t.content))continue;let a=``,s=[];for(let c of t.content){if(c.type===`thinking`&&typeof c.thinking==`string`){s.push(c.thinking);continue}if(c.type===`text`&&typeof c.text==`string`){a+=(a?`
|
|
12
|
+
`:``)+c.text;continue}if(c.type===`tool_use`){o(e,a,i),a=``;let t=String(c.id??``),s={id:yn(n.length),role:`tool`,content:``,toolName:String(c.name??`tool`),toolInput:c.input,toolUseId:t,timestamp:i};n.push(s),t&&r.set(t,s);continue}if(c.type===`tool_result`){let e=String(c.tool_use_id??``),t=r.get(e);t&&(t.toolResult=xn(c.content),t.isError=!!c.is_error)}}o(e,a,i),e===`assistant`&&s.length>0&&l(s.join(`
|
|
13
|
+
|
|
14
|
+
`),i)}for(;a<t.length;)s(t[a]),a+=1;return n}var Tn=new Set;function En(e,t=140){return e.length>t?`${e.slice(0,t-1)}…`:e}function Dn(){f.flush(`__thinking__`);let e=g.getState().iteration;i.getState().flushThinkingLog(Math.max(1,e?.index??1)),i.getState().clearThinking()}function On(e){let t=u(`session.start`,e.payload);t&&(m.getState().pushEvent(t),m.getState().setActive(!0));let n=e.payload,r=Cn(n.provider),a=Cn(n.model),o=g.getState().session?.id,s=!o||o!==n.sessionId||n.reset;if((n.appVersion||n.latestVersion)&&g.getState().setUpdateInfo({appVersion:String(n.appVersion??``),latestVersion:String(n.latestVersion??``),updateAvailable:!!n.updateAvailable}),Array.isArray(n.providerStatuses)&&k.getState().hydrate(n.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}))),n.needsSetup&&fe(`setup`),s?(Y.getState().clear(),g.getState().startSession({id:n.sessionId,startedAt:Date.now(),model:a,provider:r})):g.getState().setSession({id:n.sessionId,startedAt:g.getState().session?.startedAt??Date.now(),model:a,provider:r}),g.getState().setEnv({maxContext:n.maxContext,projectRoot:n.projectRoot??``,projectName:n.projectName,cwd:n.cwd,mode:n.mode,contextMode:n.contextMode,inputCost:n.inputCost,outputCost:n.outputCost,cacheReadCost:n.cacheReadCost}),b.getState().setConfig({provider:r,model:a}),s){!n.needsSetup&&P()&&!bn()&&de({sidebarOpen:!1}),f.dropAll(),i.getState().clearMessages(),i.getState().setBoundSessionId(n.sessionId),j.getState().setSearchActiveMessageId(null),i.getState().setLoading(!1),g.setState({todos:[]}),V(`ready`);let e=x.getState();if(n.clearedSessionId){let t=new Map;for(let[r,i]of e.agents)i.sessionId!==n.clearedSessionId&&t.set(r,i);x.setState({agents:t})}else e.clear();w.getState().setTreeLoading(!0),h().send({type:`files.tree`,payload:{path:g.getState().cwd}})}let c=n.replayMessages,l=n.replayMarkers??[];if(c&&c.length>0){let e=i.getState();(s||e.messages.length===0||e.boundSessionId!==n.sessionId||e.isLoading)&&(e.setMessages(wn(c,l)),e.setBoundSessionId(n.sessionId))}if(c){let e=n.replayUsage;if(e){let t=g.getState(),n=e.input??0,r=e.output??0,i=e.cacheRead??0,a=e.cacheWrite??0;g.setState({totalTokens:{input:n,output:r,cacheRead:i,cacheWrite:a},cost:(n*t.inputCost+r*t.outputCost+i*t.cacheReadCost)/1e6})}let t=n.lastInputTokens;typeof t==`number`&&t>0&&g.setState({lastInputTokens:t}),s&&!n.needsSetup&&(bn()||(P()?de({sidebarOpen:!1}):j.getState().currentView!==`chat`&&pe(`chat`))),_n()&&j.getState().setSidebarOpen(!1)}}function kn(e){if(!d(e))return;let t=e.payload,n=e=>e.toLocaleString(),r=[...t.tools.breakdown].sort((e,t)=>t.tokens-e.tokens).slice(0,8),a=[...t.messages.breakdown].sort((e,t)=>t.tokens-e.tokens).slice(0,8);i.getState().addMessage({role:`assistant`,content:[`📊 **Context breakdown** (heuristic — 4 chars/token)`,``,`**Total estimate:** ${n(t.total)} tokens`,`• System prompt: ${n(t.systemPrompt)}`,`• Tool schemas: ${n(t.tools.total)} (${t.tools.count} tools)`,`• Messages: ${n(t.messages.total)} (${t.messages.count} messages)`,``,`**Top tool schemas:**`,...r.map(e=>` · ${e.name}: ${n(e.tokens)}`),``,`**Top messages:**`,...a.map(e=>` · #${e.index} ${e.role}: ${n(e.tokens)} — ${e.preview||`(empty)`}`)].join(`
|
|
15
|
+
`)})}function An(e){let t=e.payload;t.success?M.success(t.message):M.error(t.message),h(b.getState().wsUrl).listSavedProviders()}function jn(e){let t=e.payload;if(!t.success||!t.provider||!t.model)return;b.getState().setProvider(t.provider),b.getState().setModel(t.model);let n=t.previousProvider&&t.previousModel?`${t.previousProvider} / ${t.previousModel}`:a.t(`settings:toast.previousModel`),r=`${t.provider} / ${t.model}`;i.getState().addMessage({role:`system`,content:a.t(t.runActive?`settings:toast.modelSwitchedRunActive`:`settings:toast.modelSwitchedNextRequest`,{from:n,to:r})})}function Mn(e){if(!d(e))return;l(e);let t=e.payload,n=t.reductions.length?t.reductions.map(e=>`${e.phase}: ${e.saved}`).join(`, `):`no-op`;t.repaired&&(n+=`; repaired ${t.repaired.removedToolUses?.length??0} tool_use, ${t.repaired.removedToolResults?.length??0} tool_result, ${t.repaired.removedMessages} empty messages`),i.getState().addMessage({role:`system`,content:`🗜️ Context compacted: ${t.before} → ${t.after} tokens (saved ~${t.saved}). ${n}`}),g.setState({lastInputTokens:t.after})}function Nn(e){if(!d(e))return;l(e);let t=e.payload,n,r;t.budget&&t.budget.availableInputTokens>0?(n=Math.min(100,Math.max(0,Math.round(t.budget.load*100))),r=`input budget`):(n=t.maxContext>0?Math.min(100,Math.max(0,Math.round(t.tokens/t.maxContext*100))):0,r=`context`),i.getState().addMessage({role:`assistant`,content:`Compaction failed at ${t.level} (${n}% ${r}): ${t.message}`,isError:t.fatal}),M.error(`Compaction failed: ${t.message}`)}function Pn(e){if(!d(e))return;l(e);let t=e.payload,r=Sn(t.content),a=t.usage,o=(a.input??0)+(a.cacheWrite??0)-(a.cacheRead??0);o>0&&g.setState({lastInputTokens:o}),g.getState().updateUsage(t.usage);let{inputCost:s,outputCost:c,cacheReadCost:u}=g.getState(),p=(t.usage.input*s+t.usage.output*c+(t.usage.cacheRead??0)*u)/1e6;p>0&&g.getState().addCost(p);let m=n(t.stopReason);m&&i.getState().setLoading(!1);let h=i.getState().currentAssistantMessageId;if(h){f.flush(h);let e=i.getState().messages.find(e=>e.id===h)?.content??``;r.trim()&&(e.trim()?r.startsWith(e)&&r.length>e.length&&i.getState().updateMessage(h,{content:r}):i.getState().updateMessage(h,{content:r})),i.getState().finalizeMessage(h,{final:m}),t.usage.output>0&&i.getState().updateMessage(h,{usage:t.usage})}else if(r.trim()){let e=i.getState().addMessage({role:`assistant`,content:r,usage:t.usage.output>0?t.usage:void 0});i.getState().finalizeMessage(e,{final:m})}i.getState().setCurrentAssistantMessage(null),f.flush(`__thinking__`),i.getState().clearThinking()}function Fn(e){if(!d(e))return;l(e);let t=e.payload;f.flush(`__thinking__`),i.getState().flushThinkingLog(t.index),i.getState().clearThinking();let n=g.getState().iteration;n&&g.getState().setIteration({index:t.index,max:n.max})}function In(e){if(!d(e))return;let t=e.payload;i.getState().addMessage({role:`assistant`,content:`Iteration limit reached: ${t.currentIterations}/${t.currentLimit}.`,isError:!0}),M.warn(`Iteration limit reached (${t.currentIterations}/${t.currentLimit})`)}function Ln(e){if(!d(e))return;let t=e.payload,n=Math.max(0,Math.round(t.delayMs/100)/10);M.warn(`${t.providerId} retry ${t.attempt} after ${n}s (${t.status})`)}function Rn(e){if(!d(e))return;let t=e.payload;i.getState().addMessage({role:`assistant`,content:[`Provider error from \`${t.providerId}\` (${t.status}).`,t.description,t.retryable?`_Retryable; WrongStack may recover automatically._`:``].filter(Boolean).join(`
|
|
16
|
+
|
|
17
|
+
`),isError:!0}),M.error(`${t.providerId} provider error (${t.status})`)}function zn(e){if(!d(e))return;let t=e.payload,n=`${t.from.providerId}/${t.from.model}`,r=`${t.to.providerId}/${t.to.model}`;i.getState().addMessage({role:`assistant`,content:`Provider fallback: \`${n}\` returned ${t.status}; switching to \`${r}\`${t.providerSwitched?` with provider change`:``}.`}),M.warn(`Fallback to ${r}`);let a=T.getState().pending;a&&a.from.providerId===t.from.providerId&&a.from.model===t.from.model&&(typeof t.requestId==`string`&&t.requestId.length>0&&a.requestId!==t.requestId||T.getState().clear())}function Bn(e){if(!d(e))return;let t=e.payload;T.getState().setPending({requestId:t.requestId,from:t.from,status:t.status,candidates:t.candidates,autoSwitchSeconds:t.autoSwitchSeconds,timestamp:Date.now()})}function Vn(e){let t=e.payload;k.getState().update({providerId:t.providerId,model:t.model,state:t.newState,reason:t.reason,updatedAt:t.timestamp,stateExpiresAt:t.stateExpiresAt});let n=`${t.providerId}/${t.model}`;t.newState===`blocked`&&t.oldState!==`blocked`?M.warn(`${n} entered the limit-reset waiting room`):t.newState===`healthy`&&t.oldState!==`healthy`&&M.success(`${n} recovered and rejoined model routing`)}function Hn(e){let t=e.payload;if(t&&typeof t==`object`&&`error`in t){k.getState().setError(`Provider status tracking not available`);return}k.getState().applySnapshot(t)}function Un(e){if(!d(e))return;let t=e.payload;i.getState().addMessage({role:`assistant`,content:`Waiting room skipped \`${t.providerId}/${t.model}\`. ${t.lastError}`})}function Wn(e){if(!d(e))return;l(e);let t=e.payload;M.warn(`Provider stream event skipped: ${t.eventType}`),i.getState().addMessage({role:`assistant`,content:`Provider stream warning (${t.eventType}): ${t.message}`,isError:!0})}function Gn(e){if(!d(e))return;l(e);let t=e.payload,n=t.tools||t.kind||`assistant response`;if(t.action===`steer`){M.info(`Possible repetition noticed for ${n}; changing approach.`);return}i.getState().addMessage({role:`assistant`,content:`Loop guard stopped the turn: ${n} made no progress ${t.repeatCount} time(s) (iteration ${t.iteration+1}).`,isError:!0}),M.warn(`Loop guard stopped the turn`)}function Kn(e){if(!d(e))return;l(e);let t=e.payload,n=En(t.task,180);i.getState().addMessage({role:`assistant`,content:`Delegating to \`${t.target}\`: ${n}`}),x.getState().pushAgentTimelineEntry({subagentId:t.target,agentName:t.target,content:n,kind:`status`,iteration:0,ts:new Date().toISOString(),status:`delegating`})}function qn(e){if(!d(e))return;l(e);let t=e.payload,n=Math.max(0,Math.round(t.durationMs/100)/10),r=typeof t.costUsd==`number`&&t.costUsd>0?` · $${t.costUsd.toFixed(4)}`:``,a=`${t.iterations} iteration(s), ${t.toolCalls} tool call(s), ${n}s${r}`;i.getState().addMessage({role:`assistant`,content:[`Delegate ${t.ok?`completed`:`failed`} for \`${t.target}\`${t.status?` (${t.status})`:``}.`,t.summary,a].join(`
|
|
18
|
+
`),isError:!t.ok}),x.getState().pushAgentTimelineEntry({subagentId:t.subagentId??t.target,agentName:t.target,content:t.summary,kind:t.ok?`status`:`error`,iteration:t.iterations,ts:new Date().toISOString(),status:t.status??(t.ok?`completed`:`failed`)}),t.ok||M.warn(`Delegate failed: ${t.target}`)}function Jn(e){if(!d(e))return;let t=e.payload,n=`${t.tool}: ${t.pattern}`;t.decision===`always`?M.success(`Always allowed ${n}`):M.warn(`Denied ${n}`)}function Yn(e){if(!d(e))return;l(e);let t=e.payload,n=t.removedToolUses.length+t.removedToolResults.length+t.removedMessages,r=t.beforeMessages!==void 0&&t.afterMessages!==void 0?` Messages: ${t.beforeMessages} -> ${t.afterMessages}.`:``;i.getState().addMessage({role:`assistant`,content:`Context repaired: removed ${n} orphan protocol item(s).${r} tool_use ${t.removedToolUses.length}, tool_result ${t.removedToolResults.length}.`})}function Xn(e){if(!d(e))return;l(e);let t=e.payload;g.getState().setContextUsage(t.tokens,t.maxContext)}function Zn(e){if(!d(e))return;let t=e.payload,n=g.getState();n.setEnv({maxContext:t.maxContext}),t.source===`provider`&&t.decreased===!0&&typeof t.previousMaxContext==`number`&&t.previousMaxContext>t.maxContext?n.setContextLimitWarning({previousMaxContext:t.previousMaxContext,maxContext:t.maxContext,providerId:t.providerId??n.session?.provider??`provider`,modelId:t.modelId??n.session?.model??`model`}):(t.decreased===!1||t.source===`configured`)&&n.setContextLimitWarning(null)}function Qn(e){if(!d(e))return;let t=e.payload;g.getState().setContextUsage(t.used,t.limit);let n=t.limit>0?Math.round(t.used/t.limit*100):0;M.warn(`Token threshold reached (${n}%)`)}function $n(e){if(!d(e))return;let t=e.payload.model||`<unknown>`;Tn.has(t)||(Tn.add(t),M.warn(`Cost estimate unavailable for ${t}`))}function er(e){if(!d(e))return;let t=e.payload;i.getState().addMessage({role:`assistant`,content:`Session ${t.sessionId} is damaged: ${t.detail}`,isError:!0}),M.error(`Session damage detected`)}function tr(e){if(!d(e))return;let t=e.payload;i.getState().addMessage({role:`assistant`,content:`Session rewound to prompt #${t.toPromptIndex}. Removed ${t.removedEvents} event(s); reverted ${t.revertedFiles.length} file(s).`}),M.info(`Session rewound`)}function nr(e){if(!d(e))return;let t=e.payload;M.success(`Checkpoint #${t.promptIndex} written (${t.fileCount} file(s))`)}function rr(e){if(!d(e))return;let t=e.payload;m.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 ir(e){d(e)&&e.payload.reason===`recovered`&&M.info(`Recovered previous in-flight operation`)}function ar(){typeof document<`u`&&document.dispatchEvent(new CustomEvent(`chat:session-end`))}function or(e){if(!d(e))return;let t=e.payload;g.getState().setContextModes(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}))),g.getState().setEnv({contextMode:t.activeId})}function sr(e){if(!d(e))return;let t=e.payload;g.getState().setEnv({contextMode:t.id})}function cr(e){let t=e.payload;oe.getState().setEntries(t.sessions??[],t.error??null)}function lr(e){if(!d(e))return;let t=e.payload;Dn(),i.getState().addMessage({role:`assistant`,content:`[${t.phase}] ${t.message}`,isError:!0}),i.getState().setLoading(!1)}var ur={"context.debug":kn,"key.operation_result":An,"model.switch_result":jn,"context.compacted":Mn,"compaction.failed":Nn,"provider.response":Pn,"iteration.completed":Fn,"iteration.limit_reached":In,"provider.retry":Ln,"provider.error":Rn,"provider.fallback":zn,"provider.fallback_pending":Bn,"provider.status_changed":Vn,"provider.active_blocked":Un,"provider.stream_error":Wn,"tool.loop_detected":Gn,"delegate.started":Kn,"delegate.completed":qn,"trust.persisted":Jn,"context.repaired":Yn,"ctx.pct":Xn,"ctx.max_context":Zn,"token.threshold":Qn,"token.cost_estimate_unavailable":$n,"session.end":ar,"session.damaged":er,"session.rewound":tr,"checkpoint.written":nr,"in_flight.started":rr,"in_flight.ended":ir,"context.modes.list":or,"context.mode.changed":sr,"sessions.list":cr,"provider.status.snapshot":Hn,error:lr};function dr(e){let t=e.payload;i.getState().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(`
|
|
19
|
+
`)})}function fr(e){let t=e.payload,n=t.text?.trim();i.getState().addMessage({role:`assistant`,content:t.error?`Memory read failed: ${t.error}`:n?`🧠 **Memory** \n\n${n}`:`🧠 **Memory**
|
|
20
|
+
|
|
21
|
+
_empty — nothing remembered yet_`})}function pr(e){let t=e.payload,n=i.getState();if(!t.success){n.addMessage({role:`assistant`,content:`❌ **Config Doctor failed**\n\n${t.error??`Unknown config error.`}`,isError:!0});return}if(!t.changed){n.addMessage({role:`assistant`,content:`✅ **Config Doctor** — active profile config is healthy.\n\n\`${t.configPath}\``});return}let r=t.changes.slice(0,40),a=[t.applied?`✅ **Config Doctor** — repaired ${t.changes.length} field(s).`:`🩺 **Config Doctor** — found ${t.changes.length} repairable field(s).`,``,...r.map(e=>`- \`${e.path}\` — ${e.action===`added`?`missing default`:`invalid shape; default required`}`)];t.changes.length>r.length&&a.push(`- _…and ${t.changes.length-r.length} more_`),a.push(``,`Config: \`${t.configPath}\``),t.applied&&t.backupPath&&a.push(`Backup: \`${t.backupPath}\``),t.applied||a.push(``,"Run `/doctor fix` to apply these repairs."),n.addMessage({role:`assistant`,content:a.join(`
|
|
22
|
+
`)})}function mr(e){let t=e.payload;if(t.error){i.getState().addMessage({role:`assistant`,content:`❌ ${t.error}`});return}let n=t.memories??[],r=t.stats,a=[`## 🧠 SAGE`];if(r){let e=r.byStatus.active??0,t=r.byStatus.stale??0,n=r.byStatus.archived??0;a.push(`**Total:** ${r.total} · Active: ${e} · Stale: ${t} · Archived: ${n} · Graph edges: ${r.edges}`);let i=Object.entries(r.byKind).filter(([,e])=>e>0).map(([e,t])=>`${e}=${t}`).join(`, `);i&&a.push(`**Kinds:** ${i}`),a.push(``)}if(n.length===0)a.push(`_No entries to display._`);else{for(let e of n.slice(0,20)){let t=e.text.length>80?`${e.text.slice(0,78)}…`:e.text,n=e.tags.length>0?e.tags.map(e=>`\`${e}\``).join(` `):``,r=e.createdAt.slice(0,10);a.push(`- \`${e.id.slice(0,12)}…\` [${e.kind}|${e.status}] ${r} — ${t}${n?` ${n}`:``}`)}n.length>20&&a.push(`_…and ${n.length-20} more_`)}a.push(``),a.push("*Use `/memory` in the TUI or build a Memory Manager panel for full editing.*"),i.getState().addMessage({role:`assistant`,content:a.join(`
|
|
23
|
+
`)})}function hr(e){let t=e.payload;if(t.error){i.getState().addMessage({role:`assistant`,content:`❌ ${t.error}`});return}if(!t.memory){i.getState().addMessage({role:`assistant`,content:`❌ Memory not found.`});return}let n=t.memory,r=n.tags.length>0?n.tags.map(e=>`\`${e}\``).join(` `):`—`,a=n.anchors.length>0?n.anchors.map(e=>e.path??e.type).join(`, `):`—`,o=[`## 🧠 Memory: \`${n.id}\``,``,`**Text:** ${n.text}`,`**Kind:** \`${n.kind}\` · **Status:** \`${n.status}\``,`**Created:** ${n.createdAt.slice(0,10)} · **Updated:** ${n.updatedAt.slice(0,10)}`,`**Importance:** ${n.importance} · **Confidence:** ${n.confidence}`,`**Tags:** ${r}`,`**Anchors:** ${a}`];i.getState().addMessage({role:`assistant`,content:o.join(`
|
|
24
|
+
`)})}function gr(e){let t=e.payload;if(t.error){i.getState().addMessage({role:`assistant`,content:`❌ Update failed: ${t.error}`});return}if(t.memory){let e=String(t.memory.id??``);i.getState().addMessage({role:`assistant`,content:`✅ Memory \`${e}\` updated.`})}}function _r(e){let t=e.payload;if(t.error){i.getState().addMessage({role:`assistant`,content:`❌ Failed to create memory: ${t.error}`});return}if(t.memory){let e=String(t.memory.id??``);i.getState().addMessage({role:`assistant`,content:`✅ Memory \`${e}\` created.`})}}function vr(e){let t=e.payload,n=i.getState();if(t.error){n.addMessage({role:`assistant`,content:`❌ Recover failed: ${t.error}`});return}if(!t.memory)return;let r=String(t.memory.id??``);if(t.noop){let e=t.activeId??r;n.addMessage({role:`assistant`,content:`ℹ️ Nothing to recover — \`${e}\` is already the active version.`});return}n.addMessage({role:`assistant`,content:`✅ Memory \`${r}\` recovered.`})}function yr(e){let t=e.payload,n=i.getState();if(t.error){n.addMessage({role:`assistant`,content:`❌ Candidate resolve failed: ${t.error}`});return}if(!t.candidate)return;let r=t.resolvedAction===`reject`?`rejected`:`accepted`;n.addMessage({role:`assistant`,content:`✅ Candidate \`${t.candidate.id}\` ${r}.`})}function br(e){let t=e.payload,n=i.getState();if(t.error){n.addMessage({role:`assistant`,content:`❌ Backfill failed: ${t.error}`});return}let r=`examined ${t.examined??0} · recoverable ${t.recoverable??0} · recovered ${t.recovered??0}`;n.addMessage({role:`assistant`,content:t.dryRun?`ℹ️ Backfill preview (dry-run) — ${r}. Re-run with apply to write.`:`✅ Backfill applied — ${r}.`})}function xr(e){let t=e.payload;if(!t.enabled){i.getState().addMessage({role:`assistant`,content:`🎯 **Skills**
|
|
25
|
+
|
|
26
|
+
_disabled (config.features.skills = false)_`});return}let n=[`🎯 **Skills** (${t.skills.length})`,``,...t.skills.length===0?[`_none registered_`]:t.skills.map(e=>`• \`${e.name}\`${e.version?` v${e.version}`:``} _(${e.source})_ — ${e.description||e.trigger||`_no description_`}`)];t.error&&n.push(``,`⚠ ${t.error}`),i.getState().addMessage({role:`assistant`,content:n.join(`
|
|
27
|
+
`)})}function Sr(e){if(!d(e))return;let t=e.payload;g.getState().setDroppedTools((t.maxTools??0)>0?t.droppedTools??0:0),i.getState().addMessage({role:`assistant`,content:[`🩺 **Runtime diagnostics**`,``,`**Provider:** \`${t.provider}\` / \`${t.model}\``,`**Mode:** \`${t.mode}\``,`**Session:** \`${t.sessionId}\``,`**CWD:** \`${t.cwd}\``,``,`**Tools:** ${t.tools.count}`,`**Messages:** ${t.messages} · **Todos:** ${t.todos}`,`**Usage:** ${t.usage.input.toLocaleString()} in · ${t.usage.output.toLocaleString()} out${t.usage.cacheRead?` · ${t.usage.cacheRead.toLocaleString()} cache`:``}`,``,`**Features:** memory=${t.features.memory?`✓`:`✗`} · skills=${t.features.skills?`✓`:`✗`} · modelsRegistry=${t.features.modelsRegistry?`✓`:`✗`}`].join(`
|
|
28
|
+
`)})}function Cr(e){if(!d(e))return;let t=e.payload,n=Math.floor(t.elapsedMs/1e3),r=n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${n%60}s`:`${Math.floor(n/3600)}h ${Math.floor(n%3600/60)}m`;i.getState().addMessage({role:`assistant`,content:[`📈 **Session stats**`,``,`**Session:** \`${t.sessionId}\``,`**Provider/Model:** \`${t.provider}\` / \`${t.model}\``,`**Elapsed:** ${r}`,``,`**Usage:** ${t.usage.input.toLocaleString()} in · ${t.usage.output.toLocaleString()} out`,...t.cache&&t.cache.readTokens>0?[`**Cache:** ${t.cache.readTokens.toLocaleString()} read · ${t.cache.writeTokens.toLocaleString()} write · hit ratio ${(t.cache.hitRatio*100).toFixed(1)}%`]:[],`**Cost:** ${t.cost.toFixed(4)}`,``,`**Messages:** ${t.messages} · **Files read:** ${t.readFiles} · **Tools available:** ${t.tools}`,...t.sideEffectCount?[`**Side effects:** ⚠ ${t.sideEffectCount}`]:[]].join(`
|
|
29
|
+
`)})}function wr(e){if(!d(e))return;let t=e.payload;g.getState().setTodos(t.todos??[])}function Tr(e){let t=e.payload;g.getState().setModes(t.modes.map(e=>({id:e.id,name:e.name,description:e.description}))),g.getState().setEnv({mode:t.activeId})}function $(e){ce.getState().handleResult(e.type,e.payload)}var Er={...Ve,...ur,...Tt,...ft,...sn,...Qe,...hn,"config.doctor.result":pr,"session.start":e=>{On(e),K()},"specs.list":e=>{let t=e.payload;te.getState().setSpecs(t.specs??[])},"specs.detail":e=>{te.getState().setDetail(e.payload)},"sdd.board.snapshot":e=>{re.getState().setSnapshot(e.payload)},"sdd.board.list":e=>{let t=e.payload;re.getState().setBoards(t.boards??[])},"sdd.board.lifecycle_result":e=>{let t=e.payload,n=re.getState();n.setLifecycleResult({...t,at:Date.now()}),n.setDestroying(!1),t.op===`destroy`&&t.ok&&D.getState().reset()},"sdd.spec.snapshot":e=>{D.getState().setSnapshot(e.payload)},"sdd.spec.agent_text":e=>{D.getState().setAgentText(e.payload.text??``)},"sdd.spec.error":e=>{D.getState().setError(e.payload.message??`Error`)},"sdd.run.started":e=>{D.getState().setStartedRunId(e.payload.runId??null)},"goal.assess.result":e=>{let t=e.payload;le.getState().setResult({realistic:t.realistic,durationClaimed:t.durationClaimed,explanation:t.explanation,recommendedDuration:t.recommendedDuration,concerns:t.concerns,parseFailed:t.parseFailed,parseError:t.parseError,reqSeq:t.reqSeq??0})},"kanban.list":$,"kanban.get":$,"kanban.health":$,"kanban.create":$,"kanban.duplicate":$,"kanban.update":$,"kanban.delete":$,"kanban.generate":$,"kanban.snapshot":$,"kanban.taskgraph.export":$,"kanban.taskgraph.sync":$,"kanban.task.ready":$,"kanban.task.add":$,"kanban.task.split":$,"kanban.task.merge":$,"kanban.task.update":$,"kanban.task.move":$,"kanban.task.copy":$,"kanban.task.transfer":$,"kanban.task.transition":$,"kanban.task.chain":$,"kanban.task.chain.get":$,"kanban.task.claim":$,"kanban.task.release":$,"kanban.task.metric.add":$,"kanban.task.metric.update":$,"kanban.task.check.add":$,"kanban.task.check.update":$,"kanban.task.note.add":$,"kanban.task.assign":$,"kanban.task.dispatch":$,"kanban.task.remove":$,"kanban.task.get":$,"kanban.column.add":$,"kanban.column.remove":$,"kanban.run.start":$,"kanban.supervisor.status":$,"kanban.supervisor.audit":$,"kanban.task.verify":$,"kanban.task.verification_started":$,"kanban.task.verification_completed":$,"kanban.decomposition.approve":$,"kanban.decomposition.reject":$,"kanban.decomposition.resolved":$,"kanban.decomposition.applied":$,"tools.list":dr,"memory.list":fr,"memory.sage.list":mr,"memory.sage.get":hr,"memory.sage.update":gr,"memory.sage.remember":_r,"memory.sage.recover":vr,"memory.sage.candidateResolve":yr,"memory.sage.backfillRecoverable":br,"skills.list":xr,"diag.get":Sr,"stats.get":Cr,side_effects:e=>{if(!d(e))return;let t=e.payload;se.getState().setSideEffects(t.sideEffects??[])},"todos.updated":wr,"todos.cleared":e=>{d(e)&&g.getState().setTodos([])},"agent.timeline.message":e=>{if(!d(e))return;let t=e.payload;x.getState().pushAgentTimelineEntry({subagentId:t.subagentId,agentName:t.agentName,content:t.content,kind:t.kind,iteration:t.iteration,ts:t.ts,toolName:t.toolName,toolOk:t.toolOk,costUsd:t.costUsd})},"agent.status_changed":e=>{if(!d(e))return;let t=e.payload;x.getState().pushAgentTimelineEntry({subagentId:t.subagentId,agentName:t.agentName,content:t.summary??t.status,kind:`status`,iteration:0,ts:t.ts,status:t.status})},"tasks.updated":e=>{},"plan.updated":e=>{},"modes.list":Tr,"session.checkpoints":e=>{},"process.list":e=>{},"projects.list":e=>{},"projects.added":e=>{},"projects.selected":e=>{},"tool.disabled":e=>{},"tool.enabled":e=>{},"provider.response":e=>{Pn(e)},"tool.progress":e=>{Ke(e);let t=v(e),n=_.getState();for(let e of t)n.recordFileEvent(e)},"tool.started":e=>{Ge(e);let t=v(e);t.length>0&&_.getState().startActivities(t)},"tool.executed":e=>{qe(e);let t=e.payload;t.id&&_.getState().finishTool(t.id,{durationMs:t.durationMs,ok:t.ok!==!1})},"codemap.tool_started":e=>{l(e);let t=v(e);t.length>0&&_.getState().startActivities(t)},"codemap.tool_executed":e=>{l(e);let t=e.payload;t.id&&_.getState().finishTool(t.id,{durationMs:t.durationMs,ok:t.ok!==!1})},"codemap.file_event":e=>{let t=v(e),n=_.getState();for(let e of t)n.recordFileEvent(e)},"codemap.index_updated":e=>{let t=e.payload;me.getState().notifyIndexUpdated(t?.at)},"file.saved":e=>{let t=v(e);if(t.length>0){let e=_.getState();for(let n of t)e.recordFileEvent(n)}},"memory.event":e=>{Jt(e);let t=v(e);if(t.length>0){let e=_.getState();for(let n of t)e.recordActivity(n)}}};function Dr(e){let t=[];for(let[n,r]of Object.entries(Er))r&&t.push(e.on(n,t=>{e.consumeSuppressedChatEcho(n)||r(t)}));return()=>{for(let e of t)e()}}function Or(){let{autoConnect:e,wsUrl:t}=b(),n=b(e=>e.setWsStatus);(0,N.useEffect)(()=>{if(!e)return;Ce();let r=h(t),i=!1,a=r.onStatus(e=>{i||n(e)});r.connect().then(()=>{i||r.getPrefs()}).catch(e=>{i||console.warn(JSON.stringify({level:`warn`,event:`webui.ws_connection_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))});let o=Dr(r);return()=>{i=!0,o(),a()}},[e,t,n])}function kr(){let{wsUrl:e}=b(),t=h(e),n=(0,N.useCallback)((e,n,r=!1)=>t.isConnected?r?t.sendMessage(e,n,!0):t.sendMessage(e,n):null,[t]),r=(0,N.useCallback)(()=>t.sendAbort(),[t]),i=(0,N.useCallback)(e=>t.adviseTopic(e),[t]),a=(0,N.useCallback)(e=>t.sendMailboxMessage(e),[t]),{hideConfirm:o}=j(),s=(0,N.useCallback)((e,n)=>{t.sendConfirm(e,n),o()},[t,o]),c=(0,N.useCallback)((e,n)=>t.switchModel(e,n),[t]),l=(0,N.useCallback)(()=>t.listProviders(),[t]),u=(0,N.useCallback)(e=>t.listProviderModels(e),[t]),d=(0,N.useCallback)(()=>t.listSavedProviders(),[t]),f=(0,N.useCallback)((e,n,r)=>t.addKey(e,n,r),[t]),p=(0,N.useCallback)((e,n,r)=>t.updateKey(e,n,r),[t]),m=(0,N.useCallback)((e,n)=>t.deleteKey(e,n),[t]),g=(0,N.useCallback)((e,n)=>t.setActiveKey(e,n),[t]),_=(0,N.useCallback)((e,n,r,i,a,o)=>t.addProvider(e,n,r,i,a,o),[t]),v=(0,N.useCallback)(e=>t.removeProvider(e),[t]),y=(0,N.useCallback)(e=>{oe.getState().setLoading(!0),t.listSessions(e)},[t]),ee=(0,N.useCallback)(e=>t.deleteSession(e),[t]),x=(0,N.useCallback)((e,n)=>{oe.getState().updateEntryName(e,n),t.renameSession(e,n)},[t]),S=(0,N.useCallback)(e=>t.resumeSessionById(e),[t]),te=(0,N.useCallback)(e=>t.inspectSession(e),[t]),ne=(0,N.useCallback)(()=>t.saveSession(),[t]),re=(0,N.useCallback)(e=>t.listTools(e),[t]),ie=(0,N.useCallback)(e=>t.listMemory(e),[t]),ae=(0,N.useCallback)(e=>t.listSageMemories(e),[t]),C=(0,N.useCallback)((e,n)=>t.listSageMemoriesPage(e,n),[t]),w=(0,N.useCallback)((e,n)=>t.getSage(e,n),[t]),T=(0,N.useCallback)((e,n,r)=>t.getSageGraph(e,n,r),[t]),se=(0,N.useCallback)((e,n,r)=>t.updateSage(e,n,r),[t]),ce=(0,N.useCallback)((e,n)=>t.deleteSage(e,n),[t]),E=(0,N.useCallback)((e,n)=>t.rememberSage(e,n),[t]),D=(0,N.useCallback)((e,n)=>t.findMemoriesForFile(e,n),[t]),O=(0,N.useCallback)((e,n)=>t.recoverSage(e,n),[t]),k=(0,N.useCallback)((e,n)=>t.resolveMemoryCandidate(e,n),[t]),le=(0,N.useCallback)((e,n)=>t.backfillRecoverable(e,n),[t]),ue=(0,N.useCallback)(e=>t.listSkills(e),[t]),A=(0,N.useCallback)(e=>t.getDiag(e),[t]),de=(0,N.useCallback)(e=>t.getStats(e),[t]),fe=(0,N.useCallback)(()=>t.getPlan(),[t]),pe=(0,N.useCallback)(()=>t.listModes(),[t]),me=(0,N.useCallback)(e=>t.switchMode(e),[t]),M=(0,N.useCallback)(()=>t.listContextModes(),[t]),he=(0,N.useCallback)(e=>t.switchContextMode(e),[t]),P=(0,N.useCallback)(e=>t.createContextMode(e),[t]),F=(0,N.useCallback)((e,n)=>t.updateContextMode(e,n),[t]),I=(0,N.useCallback)(e=>t.deleteContextMode(e),[t]),L=(0,N.useCallback)(()=>t.repairContext(),[t]),ge=(0,N.useCallback)((e,n)=>t.refineModel(e,n),[t]),R=(0,N.useCallback)(e=>t.switchAutonomy(e),[t]),z=(0,N.useCallback)(e=>t.updatePrefs(e),[t]);return{client:t,sendMessage:n,adviseTopic:i,sendAbort:r,sendMailboxMessage:a,sendConfirm:s,switchModel:c,listProviders:l,listProviderModels:u,listSavedProviders:d,addKey:f,updateKey:p,deleteKey:m,setActiveKey:g,addProvider:_,removeProvider:v,listSessions:y,deleteSession:ee,renameSession:x,resumeSession:S,inspectSession:te,saveSession:ne,listTools:re,listMemory:ie,listSageMemories:ae,listSageMemoriesPage:C,getSage:w,getSageGraph:T,updateSage:se,deleteSage:ce,rememberSage:E,findMemoriesForFile:D,recoverSage:O,resolveMemoryCandidate:k,backfillRecoverable:le,listSkills:ue,getDiag:A,getStats:de,getPlan:fe,listModes:pe,switchMode:me,listContextModes:M,switchContextMode:he,createContextMode:P,updateContextMode:F,deleteContextMode:I,repairContext:L,toggleGoalAutonomous:(0,N.useCallback)(e=>{t.send({type:`goal.toggleAutonomous`,payload:{autonomous:e}})},[t]),startGoal:(0,N.useCallback)((e,n,r=!0)=>{t.send({type:`goal.start`,payload:{title:e,phases:n,autonomous:r}})},[t]),pauseGoal:(0,N.useCallback)(()=>{t.send({type:`goal.pause`,payload:{}})},[t]),resumeGoal:(0,N.useCallback)(()=>{t.send({type:`goal.resume`,payload:{}})},[t]),stopGoal:(0,N.useCallback)(()=>{t.send({type:`goal.stop`,payload:{}})},[t]),selectGoal:(0,N.useCallback)(e=>{t.send({type:`goal.selectPhase`,payload:{phaseId:e}})},[t]),switchAutonomy:R,updatePrefs:z,refineModel:ge}}export{Y as a,Pe as c,It as i,Fe as l,Or as n,Le as o,gn as r,H as s,kr as t,P as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./ui-store-
|
|
1
|
+
import{n as e}from"./ui-store-CE4-TlwB.js";var t={chat:`chat`,agents:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skills:`skill`,worktrees:`chat`,design:`design-gallery`,officemap:`officemap`},n={chat:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skill:`skills`,officemap:`officemap`,"design-gallery":`design`},r={1:`chat`,2:`files`,3:`changes`,4:`mailbox`,5:`skills`,6:`officemap`,0:`design`},i={chat:`Ctrl+1`,agents:``,files:`Ctrl+2`,changes:`Ctrl+3`,mailbox:`Ctrl+4`,skills:`Ctrl+5`,worktrees:`Ctrl+Shift+W`,design:`Ctrl+0`,officemap:`Ctrl+6`};function a(e){return t[e]??`chat`}function o(e){return i[e]??``}function s(t){let n=e.getState();n.currentView!==t&&n.setCurrentView(t)}function c(t){let n=e.getState();n.setSidebarOpen(!0),n.selectActivity(t),s(a(t))}function l(t){let n=e.getState();if(!n.sidebarOpen)n.setSidebarOpen(!0),n.selectActivity(t);else if(n.activeActivity===t){n.setSidebarOpen(!1);return}else n.activeActivity===`agents`&&n.setSidebarOpen(!0),n.selectActivity(t);s(a(t))}function u(t){let n=e.getState();if(n.currentView===t){c(`chat`);return}n.setSidebarOpen(!1),s(t)}function d(t){let r=n[t];if(r){c(r);return}e.getState().setSidebarOpen(!1),s(t)}export{o as a,l as i,d as n,c as o,u as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{Na as t}from"./vendor-BuarzSSb.js";import{n}from"./utils-B-9lSDIn.js";import{t as r}from"./session-store-Df7_hhe9.js";function i(e){typeof requestAnimationFrame==`function`?requestAnimationFrame(e):queueMicrotask(e)}var a=new class{pending=new Map;scheduled=!1;push(e,t,n){if(!t)return;let r=this.pending.get(e);r?(r.buffer+=t,r.flush=n):this.pending.set(e,{buffer:t,flush:n}),this.schedule()}schedule(){this.scheduled||(this.scheduled=!0,i(()=>{this.scheduled=!1,this.drain()}))}drain(){if(this.pending.size===0)return;let e=Array.from(this.pending.entries());this.pending.clear();for(let[t,n]of e)n.buffer&&n.flush(t,n.buffer)}drop(e){this.pending.delete(e)}dropAll(){this.pending.clear()}flush(e){let t=this.pending.get(e);t&&(this.pending.delete(e),t.buffer&&t.flush(e,t.buffer))}flushAll(){this.drain()}},o={maxReconnectAttempts:10,initialBackoffMs:1e3,maxBackoffMs:3e4,backoffMultiplier:2,jitterRatio:0,queueLimit:1e3,heartbeatIntervalMs:0,heartbeatTimeoutMs:0};function s(){return{phase:`idle`,reconnectAttempt:0,lastActivityAt:null,stopped:!1}}function c(e){return e.stopped?e:{...e,phase:`connecting`}}function l(e,t=Date.now()){return{...e,phase:`open`,reconnectAttempt:0,lastActivityAt:t,stopped:!1}}function u(e,t=Date.now()){return{...e,lastActivityAt:t}}function d(e){return{...e,phase:`closed`,stopped:!0}}function f(e){return{...e,phase:`idle`,reconnectAttempt:0,stopped:!1}}function p(e,t,n=Date.now(),r=Math.random){if(e.stopped||e.reconnectAttempt>=t.maxReconnectAttempts)return{state:{...e,phase:`closed`},plan:null};let i=e.reconnectAttempt+1,a=Math.min(t.initialBackoffMs*t.backoffMultiplier**(i-1),t.maxBackoffMs),o=(r()*2-1)*t.jitterRatio,s=Math.max(0,Math.round(a*(1+o)));return{state:{...e,phase:`reconnecting`,reconnectAttempt:i},plan:{attempt:i,delayMs:s,retryAt:n+s}}}var m=`abort,ping,user_message,tool.confirm_result,topic.advice,completion.request,model.switch,model.refine,model.fallback_choice,autonomy.switch,context.clear,context.compact,context.debug,context.editor.open,context.editor.validate,context.editor.apply,context.mode.create,context.mode.delete,context.mode.switch,context.mode.update,context.modes.list,context.repair,mode.switch,modes.list,session.checkpoints,session.delete,session.inspect,session.new,session.rename,session.resume,session.rewind,session.save,sessions.list,side_effects.list,stats.get,todo.update,todos.clear,todos.get,todos.remove`.split(`,`),h=[`collab.join`,`collab.leave`,`collab.annotate`,`collab.resolve`,`collab.request_pause`,`collab.resume`,`collab.grant_control`,`collab.inject_tool`,`mailbox.action`,`mailbox.agents`,`mailbox.clear`,`mailbox.compact`,`mailbox.messages`,`mailbox.purge`,`mailbox.send`],g=`brain.ask,brain.config.get,brain.config.set,brain.risk,brain.status,chronicle.facet,chronicle.facets,chronicle.graph,chronicle.metrics,chronicle.query,chronicle.status,config.doctor,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.update`.split(`,`),_=`auth.oauth.cancel,auth.oauth.code,auth.oauth.start,mcp.add,mcp.disable,mcp.discover,mcp.enable,mcp.list,mcp.prompt.get,mcp.prompts,mcp.remove,mcp.resource.read,mcp.resources,mcp.restart,mcp.sleep,mcp.update,mcp.wake,prompts.content,prompts.create,prompts.favorite,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.create,skills.edit,skills.export,skills.install,skills.list,skills.uninstall,skills.update`.split(`,`),v=`goal-state.get,goal.addTask,goal.assess,goal.assignTask,goal.clear,goal.get,goal.list,goal.load,goal.moveTask,goal.pause,goal.resume,goal.retryTask,goal.revert,goal.runTask,goal.save,goal.selectPhase,goal.start,goal.state,goal.status,goal.stop,goal.taskStatus,goal.toggleAutonomous,plan.get,plan.item.update,plan.template_use,task.update,tasks.get`.split(`,`),ee=`sdd.board.cancel_task,sdd.board.cleanup_worktrees,sdd.board.delete_task,sdd.board.destroy,sdd.board.get,sdd.board.list,sdd.board.pause,sdd.board.reassign,sdd.board.resume,sdd.board.retry,sdd.board.retry_all_failed,sdd.board.rollback,sdd.board.set_task_fallbacks,sdd.board.set_task_model,sdd.board.set_task_verification,sdd.board.split_task,sdd.board.stop,sdd.run.from_graph,sdd.run.from_spec,sdd.run.start,sdd.spec.approve,sdd.spec.discard,sdd.spec.get,sdd.spec.message,sdd.spec.start,specs.get,specs.list,specs.taskStatus`.split(`,`),te=[`files.list`,`files.read`,`files.tree`,`files.write`,`git.changes`,`git.diff`,`git.info`,`projects.add`,`projects.list`,`projects.select`,`working_dir.set`,`worktree.cleanup`,`worktree.diff`,`worktree.merge`,`worktree.remove`,`worktree.scan`,`shell.open`,`process.kill`,`process.killAll`,`process.list`,`terminal.close`,`terminal.create`,`terminal.input`,`terminal.resize`],y=`codebase.index.server.shutdown,connections.health,connections.service_action,diag.get,key.add,key.delete,key.set_active,key.update,prefs.get,prefs.update,provider.add,provider.clear_models,provider.custom_models.remove,provider.custom_models.set,provider.models,provider.models.search,provider.probe,provider.remove,provider.status.clear,provider.status.get,provider.status.retry,provider.undo_clear,provider.update,providers.list,providers.saved,tool.disable,tool.enable,tools.list,webui.shutdown`.split(`,`),b=`error,log,pong,side_effects,agent.status_changed,agent.timeline.message,client.status_update,chimera.report_available,compaction.failed,completion.result,context.compacted,context.debug,context.editor.snapshot,context.editor.validation,context.editor.applied,context.mode.changed,context.modes.list,context.repaired,ctx.max_context,ctx.pct,delegate.completed,delegate.started,iteration.completed,iteration.limit_reached,iteration.started,model.refine_result,modes.list,provider.active_blocked,provider.error,provider.fallback,provider.fallback_pending,provider.response,provider.retry,provider.status_changed,provider.stream_error,provider.text_delta,provider.thinking_delta,run.result,session.checkpoints,session.damaged,session.end,session.inspect,session.rewound,session.start,session.stats,sessions.list,sessions.status_update,stats.get,token.cost_estimate_unavailable,token.threshold,tool.confirm_needed,tool.disabled,tool.enabled,tool.executed,tool.loop_detected,tool.progress,tool.started,topic.advice_result,tools.list,trust.persisted`.split(`,`),x=[`collab.annotation.added`,`collab.annotation.resolved`,`collab.event`,`collab.injection.granted`,`collab.participant.joined`,`collab.participant.left`,`collab.pause.granted`,`collab.pause.released`,`collab.state`,`mailbox.action_result`,`mailbox.agent_registered`,`mailbox.agent_deregistered`,`mailbox.agents`,`mailbox.cleared`,`mailbox.compacted`,`mailbox.event`,`mailbox.messages`,`mailbox.sent`,`mailbox.purged`,`mailbox.received`,`subagent.budget_extended`,`subagent.event`],S=`brain.answer,brain.config,brain.event,brain.status,chronicle.error,chronicle.facet_result,chronicle.facets_result,chronicle.graph_result,chronicle.metrics_result,chronicle.query_result,chronicle.status_result,config.doctor.result,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.event,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.update`.split(`,`),ne=`mcp.content.error,mcp.content.selected,mcp.list,mcp.operation_result,mcp.prompts,mcp.resources,mcp.server.added,mcp.server.connected,mcp.server.disconnected,mcp.server.discovered,mcp.server.error,mcp.server.reconnected,mcp.server.removed,mcp.server.sleeping,mcp.server.updated,mcp.server.waking,prompts.content,prompts.created,prompts.favorite,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.created,skills.edited,skills.exported,skills.installed,skills.list,skills.uninstalled,skills.updated`.split(`,`),re=`budget.decision,budget.threshold_reached,coordinator.stats,coordinator.status,eternal.iteration,fleet.concurrency_update,goal-state.updated,goal.assess.result,goal.list,goal.paused,goal.resumed,goal.saved,goal.error,goal.stopped,goal.failed,goal.completed,goal.cleared,goal.reverted,goal.progress,goal.state,in_flight.ended,in_flight.started,plan.updated,task.completed,task.failed,task.pending,task.started,tasks.updated,todos.cleared,todos.updated`.split(`,`),ie=[`kanban.task.activity`,`sdd.board.lifecycle_result`,`sdd.board.list`,`sdd.board.snapshot`,`sdd.run.started`,`sdd.spec.agent_text`,`sdd.spec.error`,`sdd.spec.snapshot`,`specs.detail`,`specs.list`],ae=[`consensus.vote_cast`,`consensus.vote_initiated`,`consensus.vote_resolved`,`cron.job_fired`,`cron.snapshot`,`techstack.job.cancelled`,`techstack.job.failed`,`techstack.job.progress`,`techstack.job.started`,`techstack.report.delivered`,`techstack.report.ready`,`techstack.snapshot.updated`,`techstack.workspace.completed`],oe=`checkpoint.written,codemap.file_event,codemap.index_updated,codemap.tool_executed,codemap.tool_started,file.saved,files.list,files.read,files.tree,files.written,git.changes,git.diff,git.info,process.list,projects.added,projects.list,projects.selected,terminal.exit,terminal.output,working_dir.changed,worktree.cleanup_result,worktree.diff_result,worktree.event,worktree.merge_result,worktree.orphans,worktree.state`.split(`,`),se=[`auth.oauth.status`,`codebase.index.server.shutdown_result`,`connections.health_error`,`connections.health_result`,`connections.service_action_result`,`diag.get`,`key.operation_result`,`model.switch_result`,`prefs.updated`,`provider.catalog`,`provider.models`,`provider.models.search_result`,`provider.probe`,`provider.status.snapshot`,`providers.saved`],ce=[...m,...h,...te,...y,...v,...ee,...g,..._],le=[...b,...x,...oe,...se,...re,...ie,...ae,...S,...ne],ue=new Set(ce),de=new Set(le);function fe(e,t){return(t===`client`?ue:de).has(e)||e.startsWith(`kanban.`)&&e.length>7||e.startsWith(`agent-roster.`)&&e.length>13}var pe=new Set([`__proto__`,`constructor`,`prototype`]),me=32;function C(e,t,n){if(n>me)return{code:`too_deep`,message:`Protocol payload exceeds the nesting limit`,path:t};if(typeof e!=`object`||!e)return null;for(let r of Object.keys(e)){let i=`${t}.${r}`;if(pe.has(r))return{code:`unsafe_key`,message:`Unsafe protocol key: ${r}`,path:i};let a=C(e[r],i,n+1);if(a)return a}return null}function w(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol message must be an object`}};let n=e;if(typeof n.type!=`string`||n.type.length===0)return{ok:!1,issue:{code:`invalid_type`,message:`Protocol message type must be a non-empty string`}};if(!fe(n.type,t))return{ok:!1,issue:{code:`unknown_type`,message:`Unknown ${t} message: ${n.type}`}};if(t===`server`&&!Object.hasOwn(n,`payload`))return{ok:!1,issue:{code:`invalid_envelope`,message:`Server protocol messages require a payload`}};let r=C(n,`$`,0);return r?{ok:!1,issue:r}:{ok:!0,message:e}}function he(e,t){try{return w(JSON.parse(e),t)}catch{return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol frame is not valid JSON`}}}}var ge=[`protocol.directional-decoder`,`protocol.recursive-key-safety`,`chronicle.query`,`chronicle.facet`,`chronicle.facets`,`chronicle.graph`,`chronicle.metrics`,`chronicle.status`,`connections.health`,`context.topic-boundary`,`sdd.interview.continuity`,`sdd.run.from_graph`];function _e(e){let t=e.protocolVersion,n=t===void 0,r=n?1:Math.min(t,1),i=n||Number.isInteger(t)&&t>=1,a=new Set(e.protocolCapabilities??[]);return{compatible:i,legacyPeer:n,version:r,capabilities:ge.filter(e=>a.has(e))}}var ve={listTools(e){this.send({type:`tools.list`},e)},listMemory(e){this.send({type:`memory.list`},e)},listSageMemories(e){this.send({type:`memory.sage.list`},e)},listSageMemoriesPage(e,t){this.send({type:`memory.sage.listPage`,payload:{...e}},t)},getSage(e,t){this.send({type:`memory.sage.get`,payload:{id:e}},t)},getSageGraph(e,t,n){this.send({type:`memory.sage.graph`,payload:{query:e,...t}},n)},updateSage(e,t,n){this.send({type:`memory.sage.update`,payload:{id:e,...t}},n)},deleteSage(e,t){this.send({type:`memory.sage.delete`,payload:{id:e,force:!0,...t===void 0?{}:{reason:t}}})},rememberSage(e,t){this.send({type:`memory.sage.remember`,payload:e},t)},findMemoriesForFile(e,t){this.send({type:`memory.sage.forFile`,payload:e},t)},recoverSage(e,t){this.send({type:`memory.sage.recover`,payload:e},t)},resolveMemoryCandidate(e,t){this.send({type:`memory.sage.candidateResolve`,payload:e},t)},backfillRecoverable(e,t){this.send({type:`memory.sage.backfillRecoverable`,payload:e},t)},listMcpServers(){this.send({type:`mcp.list`})},addMcpServer(e){this.send({type:`mcp.add`,payload:e})},removeMcpServer(e){this.send({type:`mcp.remove`,payload:{name:e}})},updateMcpServer(e){this.send({type:`mcp.update`,payload:e})},wakeMcpServer(e){this.send({type:`mcp.wake`,payload:{name:e}})},sleepMcpServer(e){this.send({type:`mcp.sleep`,payload:{name:e}})},discoverMcpServer(e){this.send({type:`mcp.discover`,payload:{name:e}})},listMcpResources(e,t=!1){this.send({type:`mcp.resources`,payload:{name:e,refresh:t}})},listMcpPrompts(e,t=!1){this.send({type:`mcp.prompts`,payload:{name:e,refresh:t}})},readMcpResource(e,t){this.send({type:`mcp.resource.read`,payload:{name:e,uri:t}})},getMcpPrompt(e,t,n){this.send({type:`mcp.prompt.get`,payload:{name:e,prompt:t,...n===void 0?{}:{arguments:n}}})},enableMcpServer(e){this.send({type:`mcp.enable`,payload:{name:e}})},disableMcpServer(e){this.send({type:`mcp.disable`,payload:{name:e}})},restartMcpServer(e){this.send({type:`mcp.restart`,payload:{name:e}})},listSkills(e){this.send({type:`skills.list`},e)},getSkillContent(e,t){this.send({type:`skills.content`,payload:{name:e,source:t}})},installSkill(e,t){this.send({type:`skills.install`,payload:{ref:e,global:t}})},uninstallSkill(e,t){this.send({type:`skills.uninstall`,payload:{name:e,global:t}})},checkForUpdates(e,t){this.send({type:`skills.update`,payload:{name:e,global:t}})},createSkill(e,t,n){this.send({type:`skills.create`,payload:{name:e,description:t,scope:n}})},editSkill(e,t){this.send({type:`skills.edit`,payload:{name:e,body:t}})},exportAllSkills(){this.send({type:`skills.export`})},getDiag(e){this.send({type:`diag.get`,payload:this.withSession({})},e)},getStats(e){this.send({type:`stats.get`,payload:this.withSession({})},e)},saveSession(){this.send({type:`session.save`,payload:this.withSession({})})},resumeSessionById(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},listModes(){this.send({type:`modes.list`})},switchMode(e){this.send({type:`mode.switch`,payload:{id:e}})},listFiles(e,t,n){this.send({type:`files.list`,payload:{query:e,limit:t,path:n}})},requestCompletion(e){this.send({type:`completion.request`,payload:e})},getTodos(){this.send({type:`todos.get`,payload:this.withSession({})})},clearTodos(){this.send({type:`todos.clear`,payload:this.withSession({})})},removeTodo(e){let t=typeof e==`number`?{index:e}:{id:e};this.send({type:`todos.remove`,payload:this.withSession(t)})},updateTodoStatus(e,t){this.send({type:`todo.update`,payload:this.withSession({id:e,status:t})})},getTasks(){this.send({type:`tasks.get`,payload:this.withSession({})})},updateTaskStatus(e,t){this.send({type:`task.update`,payload:this.withSession({id:e,status:t})})},getPlan(){this.send({type:`plan.get`,payload:this.withSession({})})},updatePlanItem(e,t){this.send({type:`plan.item.update`,payload:this.withSession({target:e,status:t})})},listSessions(e=50){this.send({type:`sessions.list`,payload:this.withSession({limit:e})})},deleteSession(e){this.send({type:`session.delete`,payload:{id:e}})},renameSession(e,t){this.send({type:`session.rename`,payload:{id:e,name:t}})},inspectSession(e){this.send({type:`session.inspect`,payload:{id:e}})},setWorkingDir(e){this.send({type:`working_dir.set`,payload:{path:e}})},resumeSession(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},ping(){this.send({type:`ping`})},refineModel(e,t){this.send({type:`model.refine`,payload:{text:e,...t?.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t?.provider===void 0?{}:{provider:t.provider},...t?.model===void 0?{}:{model:t.model},...t?.previousRefined===void 0?{}:{previousRefined:t.previousRefined},...t?.previousEnglish===void 0?{}:{previousEnglish:t.previousEnglish},...t?.retryFeedback===void 0?{}:{retryFeedback:t.retryFeedback}}})}};function ye(e){Object.assign(e.prototype,ve)}function T(e){return{type:`provider.clear_models`,payload:{providerId:e}}}function E(e,t){return{type:`provider.undo_clear`,payload:{providerId:e,previousModels:[...t]}}}function D(e){return{type:`provider.update`,payload:e}}function O(e){return Math.max(0,Math.min(100,Math.round((typeof e==`number`&&Number.isFinite(e)?e:0)*100)))}function k(e,t=!1){if(t&&e.target){if(e.kind===`agent:tool`||e.kind===`tool:executed`||e.kind===`tool:started`)return`tool`;if(e.source===`leader`||e.source===`coordinator`)return`coordinator`;if(e.kind.startsWith(`provider:`))return`provider`;if(e.kind.startsWith(`mailbox:`))return`mailbox`}switch(e.kind){case`provider:call`:case`provider:delta`:case`provider:response`:return`provider`;case`agent:spawned`:case`agent:tool`:case`agent:status`:case`agent:text`:case`agent:ctx`:case`budget:warning`:case`budget:extended`:return`agent`;case`tool:started`:case`tool:executed`:case`tool:progress`:return`tool`;case`mailbox:send`:case`mailbox:deliver`:return`mailbox`;case`collab:event`:return`system`;case`session:start`:case`session:end`:case`iteration:start`:case`iteration:end`:case`eternal:iteration`:case`fleet:snapshot`:return`session`;case`context:compacted`:case`context:repaired`:case`cost:update`:return`system`;case`error`:return`error`;default:return`system`}}var A=400,j=1200;function M(e,t,n){if(e.size<=t)return e;let r=[...e.entries()].sort((e,t)=>n(e[1])-n(t[1]));for(let[n]of r.slice(0,e.size-t))e.delete(n);return e}function N(e){switch(e){case`provider:call`:case`provider:delta`:case`agent:tool`:case`tool:started`:case`tool:progress`:case`iteration:start`:case`agent:text`:return`streaming`;case`agent:status`:case`iteration:end`:return`completed`;case`error`:return`error`;case`tool:executed`:return`completed`;case`session:end`:return`idle`;default:return`active`}}var P=0;function F(){return`viz_${Date.now()}_${++P}`}var be=250;function I(e,t){return t-e<be}function L(e,t){if(e===t)return!0;if(!e||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n){let n=e[r],i=t[r];if(n!==i){if(n==null||i==null||typeof n!=typeof i)return!1;if(typeof n==`object`){if(Array.isArray(n)||Array.isArray(i)||!L(n,i))return!1;continue}return!1}}return!0}var R={provider:`hsl(var(--info))`,agent:`hsl(var(--primary))`,tool:`hsl(var(--warning))`,mailbox:`hsl(var(--success))`,session:`hsl(var(--primary))`,system:`hsl(var(--muted-foreground))`,success:`hsl(var(--success))`,error:`hsl(var(--destructive))`},z={"provider:call":`hsl(var(--info))`,"provider:delta":`hsl(var(--primary))`,"agent:tool":`hsl(var(--warning))`,"mailbox:send":`hsl(var(--success))`,default:`hsl(var(--muted-foreground))`},B=t()((e,t)=>({events:[],toolEvents:[],nodes:new Map,edges:new Map,isActive:!1,maxEvents:2e3,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0},pushEvent:t=>e(e=>{let n={...t,id:t.id??F(),timestamp:t.timestamp||Date.now()},r=[n,...e.events];r.length>e.maxEvents&&(r.length=e.maxEvents);let i=t.kind===`agent:tool`||t.kind===`tool:started`||t.kind===`tool:progress`||t.kind===`tool:executed`?[n,...e.toolEvents].slice(0,600):e.toolEvents,a=Date.now(),o=t.source,s={id:o,kind:k(t),label:t.label,status:N(t.kind),activity:1,color:t.color??R[k(t)],lastSeenAt:a},c=e.nodes.get(o),l=c?{...c,...s}:s,u=!L(c,l);c&&u&&I(c.lastSeenAt,a)&&L({...c,activity:l.activity,lastSeenAt:l.lastSeenAt},l)&&(l=c,u=!1);let d,f=!1,p;if(t.target){p=t.target;let n={id:p,kind:k(t,!0),label:p,status:N(t.kind),activity:.8,color:t.color??R[k(t,!0)],lastSeenAt:a},r=e.nodes.get(p);d=r?{...r,...n}:n,f=!L(r,d),r&&f&&I(r.lastSeenAt,a)&&L({...r,activity:d.activity,lastSeenAt:d.lastSeenAt},d)&&(d=r,f=!1)}let m,h=!1,g;if(t.target&&o){g=`${o}->${t.target}`;let n=e.edges.get(g),r={id:g,source:o,target:t.target,kind:t.kind,label:t.label,intensity:n?Math.min(1,n.intensity+.3):.7,color:t.color??R[k(t)]??R.agent,lastActiveAt:a,totalMagnitude:(n?.totalMagnitude??0)+(t.magnitude??0)};m=n?{...n,...r}:r,h=!L(n,m),n&&h&&I(n.lastActiveAt,a)&&L({...n,lastActiveAt:m.lastActiveAt},m)&&(m=n,h=!1)}let _=e.nodes,v=e.edges;return(u||f)&&(_=new Map(e.nodes),u&&_.set(o,l),f&&d&&p&&_.set(p,d)),h&&m&&g&&(v=new Map(e.edges),v.set(g,m)),_!==e.nodes&&(_=M(_,A,e=>e.lastSeenAt)),v!==e.edges&&(v=M(v,j,e=>e.lastActiveAt)),{events:r,toolEvents:i,nodes:_,edges:v}}),upsertNode:t=>e(e=>{let n=new Map(e.nodes),r=n.get(t.id);return n.set(t.id,{...r,...t,lastSeenAt:t.lastSeenAt===void 0?Date.now():t.lastSeenAt}),{nodes:n}}),removeNode:t=>e(e=>{let n=new Map(e.nodes);n.delete(t);let r=new Map(e.edges);for(let[e,n]of r)(n.source===t||n.target===t)&&r.delete(e);return{nodes:n,edges:r}}),upsertEdge:t=>e(e=>{let n=new Map(e.edges),r=n.get(t.id);return n.set(t.id,{...r,...t,lastActiveAt:t.lastActiveAt===void 0?Date.now():t.lastActiveAt,intensity:t.intensity??r?.intensity??.5,color:t.color??z[t.kind]??z.default,totalMagnitude:(r?.totalMagnitude??0)+(t.totalMagnitude??0)}),{edges:n}}),removeEdge:t=>e(e=>{let n=new Map(e.edges);return n.delete(t),{edges:n}}),clear:()=>e({events:[],toolEvents:[],nodes:new Map,edges:new Map,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0}}),setActive:t=>e({isActive:t}),decayActivity:()=>e(e=>{let t=new Map(e.nodes);for(let[e,n]of t)if(n.activity>=.01){let r=n.activity*.92;t.set(e,{...n,activity:r<.01?0:r})}let n=new Map(e.edges);for(let[e,t]of n)if(t.intensity>=.01){let r=t.intensity*.9;n.set(e,{...t,intensity:r<.01?0:r})}return{nodes:t,edges:n}}),prunesStale:t=>e(e=>{let n=Date.now()-t,r=new Map(e.nodes);for(let[e,t]of r)t.lastSeenAt<n&&r.delete(e);let i=new Map(e.edges);for(let[e,t]of i)t.lastActiveAt<n&&i.delete(e);return{nodes:r,edges:i,events:e.events.filter(e=>e.timestamp>n)}})}));function V(e,t){switch(e){case`provider.text_delta`:{let e=t.text??``;return{id:F(),kind:`provider:delta`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,60),magnitude:e.length,data:{text:e},color:R.provider,flowGroup:`provider`}}case`provider.response`:{let e=t.usage,n=(e?.input??0)+(e?.output??0);return{id:F(),kind:`provider:response`,timestamp:Date.now(),source:`provider`,target:`leader`,label:`${(e?.input??0).toLocaleString(`en-US`)} in / ${(e?.output??0).toLocaleString(`en-US`)} out`,magnitude:n,data:t,color:R.provider,flowGroup:`provider`}}case`provider.stream_error`:{let e=t.message??`Provider stream error`;return{id:F(),kind:`error`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,80),magnitude:1,data:t,color:R.error,flowGroup:`provider`}}case`tool.started`:{let e=t.name??`tool`;return{id:F(),kind:`tool:started`,timestamp:Date.now(),source:e,target:`filesystem`,label:e,magnitude:1,data:t,color:R.tool,flowGroup:`tool:${e}`}}case`tool.executed`:{let e=t.name??`tool`,n=t.ok??!0;return{id:F(),kind:`tool:executed`,timestamp:Date.now(),source:e,target:`leader`,label:`${e} ${n?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:n?R.tool:R.error,flowGroup:`tool:${e}`}}case`tool.progress`:{let e=t.name??`tool`,n=t.event?.text??``;return{id:F(),kind:`tool:progress`,timestamp:Date.now(),source:e,target:`leader`,label:n.slice(0,60)||e,magnitude:n.length,data:t,color:R.tool,flowGroup:`tool:${e}`}}case`codemap.tool_started`:{let e=t.name??`tool`,n=t.agentId??`subagent`;return{id:F(),kind:`tool:started`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:1,data:t,color:R.tool,flowGroup:`agent:${n}`}}case`codemap.tool_executed`:{let e=t.name??`tool`,n=t.agentId??`subagent`,r=t.ok??!0;return{id:F(),kind:`tool:executed`,timestamp:Date.now(),source:n,target:e,label:`${e} ${r?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:r?R.tool:R.error,flowGroup:`agent:${n}`}}case`tool.loop_detected`:{let e=t.tools??``,n=t.kind??`loop`,r=t.action===`steer`;return{id:F(),kind:r?`agent:status`:`error`,timestamp:Date.now(),source:e||n,target:`leader`,label:`${n} loop x${t.repeatCount??0}`,magnitude:t.repeatCount??1,data:t,color:r?R.agent:R.error,flowGroup:`tool`}}case`delegate.started`:{let e=t.target??`delegate`,n=t.task??``;return{id:F(),kind:`agent:status`,timestamp:Date.now(),source:`leader`,target:e,label:n.slice(0,80)||`Delegating to ${e}`,magnitude:1,data:t,color:R.agent,flowGroup:`delegate:${e}`}}case`delegate.completed`:{let e=t.subagentId??t.target??`delegate`,n=t.ok??!1;return{id:F(),kind:n?`agent:status`:`error`,timestamp:Date.now(),source:e,target:`leader`,label:(t.summary??t.status??`delegate completed`).slice(0,80),magnitude:t.durationMs??1,data:t,color:n?R.agent:R.error,flowGroup:`delegate:${e}`}}case`subagent.event`:{let e=t.kind,n=t.subagentId??`unknown`,r=t.name??n;switch(e){case`spawned`:return{id:F(),kind:`agent:spawned`,timestamp:Date.now(),source:n,target:`session`,label:`${r} spawned`,magnitude:1,data:t,color:R.agent,flowGroup:`agent:${n}`};case`tool_executed`:{let e=t.toolName??`tool`,r=t.ok??!0;return{id:F(),kind:`agent:tool`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:t.durationMs??0,data:t,color:r?R.tool:R.error,flowGroup:`agent:${n}`}}case`task_completed`:{let e=t.status??`completed`;return{id:F(),kind:`agent:status`,timestamp:Date.now(),source:n,target:`session`,label:`${r} ${e}`,magnitude:1,data:t,color:e===`success`?R.success:R.error,flowGroup:`agent:${n}`}}case`ctx_pct`:return{id:F(),kind:`agent:ctx`,timestamp:Date.now(),source:n,target:`session`,label:`ctx ${O(t.load)}%`,magnitude:t.tokens??0,data:t,color:R.agent,flowGroup:`agent:${n}`};case`iteration_summary`:return{id:F(),kind:`agent:text`,timestamp:Date.now(),source:n,target:`session`,label:(t.partialText??``).slice(0,80)||`iter ${t.iteration??0}`,magnitude:t.costUsd??0,data:t,color:R.agent,flowGroup:`agent:${n}`};case`budget_extended`:return{id:F(),kind:`budget:extended`,timestamp:Date.now(),source:n,target:`session`,label:`${r} extended budget`,magnitude:t.totalExtensions??1,data:t,color:R.tool,flowGroup:`agent:${n}`};case`budget_warning`:return{id:F(),kind:`budget:warning`,timestamp:Date.now(),source:n,target:`session`,label:`${r} hit ${t.budgetKind??`budget`} ${t.used??0}/${t.limit??0}`,magnitude:t.used??1,data:t,color:R.error,flowGroup:`agent:${n}`}}return null}case`mailbox.event`:{let e=t.event,n=t.from??`?`,r=t.to??`?`,i=t.subject??``,a=e===`mailbox.sent`;return{id:F(),kind:a?`mailbox:send`:`mailbox:deliver`,timestamp:Date.now(),source:n,target:r,label:i||(a?`→ ${r}`:`← ${n}`),magnitude:1,data:t,color:R.mailbox,flowGroup:`mailbox`}}case`iteration.started`:{let e=t.index??0;return{id:F(),kind:`iteration:start`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e}`,magnitude:e,data:t,color:R.agent,flowGroup:`iteration`}}case`iteration.completed`:{let e=t.index??0;return{id:F(),kind:`iteration:end`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e} done`,magnitude:e,data:t,color:R.session,flowGroup:`iteration`}}case`ctx.pct`:{let e=t.tokens??0;return{id:F(),kind:`agent:ctx`,timestamp:Date.now(),source:`leader`,target:`session`,label:`ctx ${O(t.load)}%`,magnitude:e,data:t,color:R.agent,flowGroup:`leader`}}case`error`:{let e=t.message??`Error`;return{id:F(),kind:`error`,timestamp:Date.now(),source:t.phase??`system`,target:`session`,label:e,magnitude:1,data:t,color:R.error,flowGroup:`error`}}case`context.compacted`:return{id:F(),kind:`context:compacted`,timestamp:Date.now(),source:`system`,target:`session`,label:`Compacted: ${(t.saved??0).toLocaleString(`en-US`)} tokens`,magnitude:t.saved??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`compaction.failed`:{let e=t.message??`Compaction failed`;return{id:F(),kind:`error`,timestamp:Date.now(),source:`compactor`,target:`session`,label:e.slice(0,80),magnitude:t.tokens??1,data:t,color:R.error,flowGroup:`context`}}case`context.repaired`:return{id:F(),kind:`context:repaired`,timestamp:Date.now(),source:`system`,target:`session`,label:`Repaired: ${t.removedMessages??0} msgs`,magnitude:t.removedMessages??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`session.start`:{let e=t.sessionId??`?`,n=t.projectName??``;return{id:F(),kind:`session:start`,timestamp:Date.now(),source:`session`,target:`leader`,label:n||e.slice(0,12),magnitude:1,data:t,color:R.session,flowGroup:`session`}}case`sessions.status_update`:{let e=t.sessions??[];return{id:F(),kind:`fleet:snapshot`,timestamp:Date.now(),source:`system`,target:`session`,label:`${e.length} session(s)`,magnitude:e.length,data:t,color:R.system,flowGroup:`fleet`}}default:return null}}function xe(e){let t=e.payload?.sessionId,n=r.getState().session?.id;return!t||!n||t===n}function Se(e){let t=V(e.type,e.payload);t&&(B.getState().pushEvent(t),B.getState().setActive(!0))}function Ce(e,t,n){let r=e.payload??{};for(let[e,n]of Object.entries(t)){let t=r[e];if(!H(t,n))return null}if(n)for(let[e,t]of Object.entries(n)){let n=r[e];if(n!=null&&!H(n,t))return null}return r}function H(e,t){switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`;case`boolean`:return typeof e==`boolean`;case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);case`array`:return Array.isArray(e);default:return!1}}function we(e){try{return new URL(e).searchParams.get(`token`)}catch{return null}}function U(){if(typeof window>`u`||!window.location)return null;try{let e=window.location.search??``;return new URLSearchParams(e).get(`token`)}catch{return null}}function W(e){try{let t=new URL(e);return t.searchParams.delete(`token`),t.toString()}catch{return e}}function G(){if(!(typeof window>`u`||!window.location||!window.history?.replaceState))try{let e=window.location.href;if(!e)return;let t=new URL(e);if(!t.searchParams.has(`token`))return;t.searchParams.delete(`token`),window.history.replaceState(window.history.state,document.title,t.toString())}catch{}}function Te(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="wrongstack-ws-url"]`)?.getAttribute(`content`)?.trim();if(!e)return null;try{let t=new URL(e);if(t.protocol!==`ws:`&&t.protocol!==`wss:`)return null;let n=U();return n&&!t.searchParams.has(`token`)&&t.searchParams.set(`token`,n),t.toString()}catch{return null}}function K(){let e=Te();if(e)return e;if(typeof window>`u`||!window.location?.hostname)return`ws://127.0.0.1:3456`;let t=window.location.protocol===`https:`?`wss`:`ws`,n=window.location.hostname.toLowerCase(),r=window.location.port,i=U(),a=i?`?token=${encodeURIComponent(i)}`:``;return`${t}://${n===`localhost`||n===`127.0.0.1`||n===`[::1]`||n===`::1`?`127.0.0.1`:n}${r?`:${r}`:``}${a}`}function q(){if(typeof window>`u`||!window.location?.hostname)return`http://127.0.0.1:3456`;let e=window.location.protocol===`https:`?`https`:`http`,t=window.location.hostname.toLowerCase(),n=window.location.port?`:${window.location.port}`:``;return t===`localhost`||t===`127.0.0.1`||t===`[::1]`||t===`::1`?`${e}://127.0.0.1${n}`:`${e}://${window.location.hostname}${n}`}var Ee=e({WrongStackWebSocketClient:()=>Z,getWSClient:()=>$}),De={"context.debug":`context.debug`,"diag.get":`diag.get`,"memory.list":`memory.list`,"memory.sage.get":`memory.sage.get`,"memory.sage.graph":`memory.sage.graph`,"memory.sage.list":`memory.sage.list`,"memory.sage.listPage":`memory.sage.listPage`,"memory.sage.remember":`memory.sage.remember`,"memory.sage.update":`memory.sage.update`,"skills.list":`skills.list`,"stats.get":`stats.get`,"tools.list":`tools.list`},Oe=3e4,J=32;function Y(e){try{let t=new URL(e),n=new URL(q());return t.hostname===n.hostname}catch{return!0}}var X=class e{ws=null;url;handlers=new Map;maxReconnectAttempts=10;shouldReconnect=!0;reconnectTimer=null;connectPromise=null;socketGeneration=0;messageQueue=[];messageQueueChars=0;messageQueueWeights=new WeakMap;connectionState=s();static MAX_QUEUED_MESSAGES=1e3;static MAX_QUEUED_CHARS=16*1024*1024;pendingConfirms=new Map;sessionId=null;sessionSwapPending=!1;lastErrorText;statusListeners=new Set;currentStatus={state:`connecting`};suppressedChatEchoes=new Map;protocolCapabilities=new Set;protocolVersion=null;supportsCapability(e){return this.protocolCapabilities.has(e)}get negotiatedProtocolVersion(){return this.protocolVersion}onStatus(e){return this.statusListeners.add(e),e(this.currentStatus),()=>this.statusListeners.delete(e)}get status(){return this.currentStatus}setStatus(e){this.currentStatus=e;for(let t of this.statusListeners)try{t(e)}catch{}}constructor(e){this.url=e??K()}withSession(e){return this.sessionId?{...e,sessionId:this.sessionId}:e}async ensureAuthCookie(){if(typeof window>`u`)return;if(document.cookie.split(`;`).some(e=>e.trim().startsWith(`ws_token=`))){Y(this.url)&&(this.url=W(this.url)),G();return}let e=we(this.url)??U();if(!e)return;let t=q()+`/ws-auth?token=${encodeURIComponent(e)}`;try{let e=await fetch(t,{method:`GET`,credentials:`same-origin`,cache:`no-store`});e.ok?(Y(this.url)&&(this.url=W(this.url)),G()):console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_failed`,status:e.status,timestamp:new Date().toISOString()}))}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}}connect(){return this.ws?.readyState===WebSocket.OPEN?Promise.resolve():(this.connectPromise||=this.openSocket().finally(()=>{this.connectPromise=null}),this.connectPromise)}async openSocket(){return await this.ensureAuthCookie(),this.connectionState=c(this.connectionState),new Promise((e,t)=>{if(this.ws?.readyState===WebSocket.OPEN){e();return}this.setStatus({state:`connecting`});let n=++this.socketGeneration;try{let r=new WebSocket(this.url);this.ws=r,r.binaryType=`arraybuffer`;let i=setTimeout(()=>{if(this.ws===r){try{r.close()}catch{}this.ws===r&&(this.ws=null)}this.lastErrorText=`Connection timeout`,t(Error(`Connection timeout`)),s()},3e4),a=!1,o=!1,s=()=>{o||(o=!0,this.attemptReconnect())};r.onopen=()=>{this.socketGeneration===n&&(clearTimeout(i),a=!0,this.connectionState=l(this.connectionState),this.lastErrorText=void 0,this.setStatus({state:`open`}),this.flushMessageQueue(),e())},r.onmessage=e=>{if(this.socketGeneration!==n)return;this.connectionState=u(this.connectionState);let t=he(String(e.data),`server`);t.ok?this.handleMessage(t.message):console.error(JSON.stringify({level:`error`,event:`ws_client.message_rejected`,code:t.issue.code,message:t.issue.message,timestamp:new Date().toISOString()}))},r.onerror=e=>{this.socketGeneration===n&&(console.error(JSON.stringify({level:`error`,event:`ws_client.error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()})),this.lastErrorText=`Connection error (see browser devtools)`,a||(clearTimeout(i),t(Error(this.lastErrorText)),s()))},r.onclose=e=>{if(this.socketGeneration===n){if(this.sessionSwapPending=!1,!a){clearTimeout(i);let n=e.reason||`Closed with code ${e.code}`;this.lastErrorText=n,t(Error(n)),s();return}e.reason&&!this.lastErrorText?this.lastErrorText=`${e.reason} (code ${e.code})`:!this.lastErrorText&&e.code!==1e3&&(this.lastErrorText=`Closed with code ${e.code}`),this.attemptReconnect()}}}catch(e){if(this.socketGeneration!==n)return;this.lastErrorText=e instanceof Error?e.message:String(e),this.setStatus({state:`closed`,error:this.lastErrorText}),t(e)}})}attemptReconnect(){if(!this.shouldReconnect){this.connectionState=d(this.connectionState),this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}let t=p(this.connectionState,{...o,maxReconnectAttempts:this.maxReconnectAttempts,queueLimit:e.MAX_QUEUED_MESSAGES});if(this.connectionState=t.state,!t.plan){this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}this.setStatus({state:`reconnecting`,attempt:t.plan.attempt,nextRetryAt:t.plan.retryAt,lastError:this.lastErrorText}),this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.shouldReconnect)try{await this.connect()}catch(e){console.error(JSON.stringify({level:`error`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}},t.plan.delayMs)}retryNow(){this.currentStatus.state!==`open`&&(this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.connectionState=f(this.connectionState),this.connect().catch(e=>console.warn(JSON.stringify({level:`warn`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))))}flushMessageQueue(){let e=this.messageQueue.splice(0);this.messageQueueChars=0;for(let t of e)try{this.send(t)}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws.flush_failed`,message:e instanceof Error?e.message:String(e)}))}}handleMessage(e){if(e.type===`tool.confirm_needed`){let t=e.payload;this.pendingConfirms.set(t.id,{}),this.emit(e);return}if(e.type===`session.start`){let t=e.payload,n=_e(t);this.sessionId=t.sessionId,this.protocolVersion=n.version,this.protocolCapabilities=new Set(n.capabilities),this.sessionSwapPending=!1}else e.type===`error`&&(e.payload.phase===`session.new`||e.payload.phase===`session.resume`)&&(this.sessionSwapPending=!1);this.emit(e)}emit(e){let t=this.handlers.get(e.type);if(t)for(let n of t)try{n(e)}catch(t){console.error(JSON.stringify({level:`error`,event:`ws_client.handler_error`,messageType:e.type,message:t instanceof Error?t.message:String(t),timestamp:new Date().toISOString()}))}}send(e,t={}){let n=this.constructor,r=n.MAX_QUEUED_MESSAGES,i=n.MAX_QUEUED_CHARS,o=w(e,`client`);if(!o.ok)return console.error(JSON.stringify({level:`error`,event:`ws_client.outbound_message_rejected`,code:o.issue.code,message:o.issue.message,timestamp:new Date().toISOString()})),!1;let s=JSON.stringify(o.message),c=this.ws?.readyState===WebSocket.OPEN;if(!c&&s.length>i)return console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:e.type,reason:`message_too_large`,timestamp:new Date().toISOString()})),!1;let l=e.type===`session.new`||e.type===`session.resume`;if(l&&this.sessionSwapPending)return!1;if(l&&(this.sessionSwapPending=!0),t.echoToChat===!1){let t=De[e.type];if(t){let e=this.suppressedChatEchoes.get(t)??[];for(e.push(Date.now()+Oe);e.length>J;)e.shift();this.suppressedChatEchoes.set(t,e)}}if((e.type===`context.clear`||e.type===`session.new`||e.type===`session.resume`)&&a.dropAll(),c)return this.ws?.send(s),!0;{if(t.queueIfDisconnected===!1)return!1;let n;for(;this.messageQueue.length>0&&(this.messageQueue.length>=r||this.messageQueueChars+s.length>i);){let e=this.messageQueue.shift();if(!e)break;n??=e;let t=this.messageQueueWeights.get(e)??JSON.stringify(e).length;this.messageQueueChars=Math.max(0,this.messageQueueChars-t),this.messageQueueWeights.delete(e)}return n&&console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:n.type,timestamp:new Date().toISOString()})),this.messageQueue.push(e),this.messageQueueWeights.set(e,s.length),this.messageQueueChars+=s.length,!0}}consumeSuppressedChatEcho(e){let t=this.suppressedChatEchoes.get(e);if(!t)return!1;let n=Date.now();for(;t.length>0&&t[0]<=n;)t.shift();return t.length===0?(this.suppressedChatEchoes.delete(e),!1):(t.shift(),t.length===0&&this.suppressedChatEchoes.delete(e),!0)}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>n?.delete(t)}off(e,t){this.handlers.get(e)?.delete(t)}sendMessage(e,t,r=!1){let i=`msg_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`user_message`,payload:this.withSession({id:i,content:e,timestamp:Date.now(),...r?{freshContext:!0}:{},...t&&t.length>0?{images:t}:{}})}),i}adviseTopic(e,t=1e4){let r=n();return new Promise(n=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),o(),n(e))},o=this.on(`topic.advice_result`,e=>{e.payload.requestId===r&&a(e.payload)}),s=setTimeout(()=>{a({requestId:r,suggestNewContext:!1,confidence:0,reason:`Topic check timed out; continuing in the current context.`,source:`local`})},t);this.send({type:`topic.advice`,payload:this.withSession({requestId:r,prompt:e})})})}sendMailboxMessage(e){let t=`mbox_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`mailbox.send`,payload:{requestId:t,to:e.to,type:e.type,audience:e.audience??`all`,subject:e.subject,body:e.body,priority:e.priority??`normal`}}),t}sendAbort(){this.send({type:`abort`,payload:this.withSession({})})}getGitInfo(){this.send({type:`git.info`})}getGitChanges(){this.send({type:`git.changes`})}getGitDiff(e){this.send({type:`git.diff`,payload:{path:e}})}sendConfirm(e,t){this.pendingConfirms.has(e)&&this.pendingConfirms.delete(e),this.send({type:`tool.confirm_result`,payload:this.withSession({id:e,decision:t})})}switchModel(e,t,r=8e3){let i=n();return new Promise(n=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),s(),n(e))},s=this.on(`model.switch_result`,e=>{let t=e.payload;t.requestId===i&&o(t)}),c=setTimeout(()=>{o({requestId:i,success:!1,message:`Model switch timed out. Please try again.`,provider:e,model:t,runActive:!1})},r);this.send({type:`model.switch`,payload:{provider:e,model:t,requestId:i}})})}getProviderStatus(){this.send({type:`provider.status.get`})}retryProviderModel(e,t){this.send({type:`provider.status.retry`,payload:{providerId:e,model:t}})}clearProviderStatus(e,t){this.send({type:`provider.status.clear`,payload:{providerId:e,model:t}})}newSession(){this.send({type:`session.new`,payload:this.withSession({})})}shutdownCodebaseIndexServer(e=8e3){let t=n();return new Promise(n=>{let r=!1,i=e=>{r||(r=!0,clearTimeout(o),a(),n(e))},a=this.on(`codebase.index.server.shutdown_result`,e=>{e.payload.requestId&&e.payload.requestId!==t||i(e.payload)}),o=setTimeout(()=>{i({requestId:t,stopped:!1,reason:`Codebase index server shutdown timed out.`})},e);this.send({type:`codebase.index.server.shutdown`,payload:{requestId:t}},{queueIfDisconnected:!1})||i({requestId:t,stopped:!1,reason:`WebSocket is not connected.`})})}listProviders(){this.send({type:`providers.list`})}listProviderModels(e){this.send({type:`provider.models`,payload:{providerId:e}})}listSavedProviders(){this.send({type:`providers.saved`})}searchProviderModels(e,t){this.send({type:`provider.models.search`,payload:{query:e,...t===void 0?{}:{limit:t}}})}addKey(e,t,n){this.send({type:`key.add`,payload:{providerId:e,label:t,apiKey:n}})}updateKey(e,t,n){this.send({type:`key.update`,payload:{providerId:e,label:t,apiKey:n}})}deleteKey(e,t){this.send({type:`key.delete`,payload:{providerId:e,label:t}})}setActiveKey(e,t){this.send({type:`key.set_active`,payload:{providerId:e,label:t}})}addProvider(e,t,n,r,i,a){this.send({type:`provider.add`,payload:{id:e,family:t,baseUrl:n,apiKey:r,...i?{models:i}:{},...a?{customModels:a}:{}}})}removeProvider(e){this.send({type:`provider.remove`,payload:{providerId:e}})}startOAuth(e,t){this.send({type:`auth.oauth.start`,payload:t?{kind:e,providerId:t}:{kind:e}})}submitOAuthCode(e,t){this.send({type:`auth.oauth.code`,payload:{kind:e,input:t}})}cancelOAuth(e){this.send({type:`auth.oauth.cancel`,payload:{kind:e}})}probeProvider(e,t){this.send({type:`provider.probe`,payload:t===void 0?{providerId:e}:{providerId:e,timeoutMs:t}})}clearProviderModels(e){this.send(T(e))}undoProviderClear(e,t){this.send(E(e,t))}setCustomModel(e,t,n){this.send({type:`provider.custom_models.set`,payload:{providerId:e,modelId:t,customModel:n}})}removeCustomModel(e,t){this.send({type:`provider.custom_models.remove`,payload:{providerId:e,modelId:t}})}updateProvider(e){this.send(D(e))}clearContext(){this.send({type:`context.clear`,payload:this.withSession({})})}compactContext(e=!1){this.send({type:`context.compact`,payload:this.withSession({aggressive:e})})}repairContext(){this.send({type:`context.repair`,payload:this.withSession({})})}openContextEditor(){this.send({type:`context.editor.open`,payload:this.withSession({})})}validateContextEditor(e,t,n,r){this.send({type:`context.editor.validate`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})}applyContextEditor(e,t,n,r){this.send({type:`context.editor.apply`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})}debugContext(e){this.send({type:`context.debug`,payload:this.withSession({})},e)}listContextModes(){this.send({type:`context.modes.list`,payload:this.withSession({})})}switchContextMode(e){this.send({type:`context.mode.switch`,payload:this.withSession({id:e})})}createContextMode(e){this.send({type:`context.mode.create`,payload:this.withSession(e)})}updateContextMode(e,t){this.send({type:`context.mode.update`,payload:this.withSession({id:e,...t})})}deleteContextMode(e){this.send({type:`context.mode.delete`,payload:this.withSession({id:e})})}switchAutonomy(e){this.send({type:`autonomy.switch`,payload:{mode:e}})}updatePrefs(e){this.send({type:`prefs.update`,payload:e})}getPrefs(){this.send({type:`prefs.get`})}disconnect(){this.shouldReconnect=!1,this.connectionState=d(this.connectionState),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.messageQueue.length=0,this.messageQueueChars=0,this.sessionSwapPending=!1,this.ws?.close(),this.ws=null}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}get currentSessionId(){return this.sessionId}};ye(X);var Z=X,Q=null;function $(e){return Q||=new Z(e),Q}export{Se as a,V as c,xe as i,a as l,Ee as n,Ce as o,K as r,B as s,$ as t};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentCard — shared live-agent detail card used by the inspector drawer.
|
|
3
|
+
*
|
|
4
|
+
* Shows one agent with:
|
|
5
|
+
* - Activity sparkline
|
|
6
|
+
* - Context fill bar with token count
|
|
7
|
+
* - Budget warning indicators
|
|
8
|
+
* - Failure reasons
|
|
9
|
+
* - Streaming output tail (partialText)
|
|
10
|
+
* - Tool execution log
|
|
11
|
+
*
|
|
12
|
+
* The old full-screen `AgentsMonitor` overlay was removed; the fleet list,
|
|
13
|
+
* per-agent navigation and the Sheet shell now live in the global
|
|
14
|
+
* InspectorPanel, which reuses this card for the "Agents" tab.
|
|
15
|
+
*/
|
|
16
|
+
import type { SubagentView } from '@/stores';
|
|
17
|
+
export declare function AgentCard({ agent, isLeader }: {
|
|
18
|
+
agent: SubagentView;
|
|
19
|
+
isLeader: boolean;
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=AgentCard.d.ts.map
|
|
@@ -43,7 +43,4 @@ interface LeaderEntry {
|
|
|
43
43
|
type AgentView = SubagentView | LeaderEntry;
|
|
44
44
|
export declare function getLastEventAt(a: AgentView): number;
|
|
45
45
|
export declare function getIterations(a: AgentView): number;
|
|
46
|
-
export declare function AgentsPage({ className, }: {
|
|
47
|
-
className?: string | undefined;
|
|
48
|
-
}): React.ReactElement;
|
|
49
46
|
//# sourceMappingURL=AgentsPage.d.ts.map
|
|
@@ -2,8 +2,8 @@ export type AutonomyMode = 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-par
|
|
|
2
2
|
export interface AutonomyOption {
|
|
3
3
|
mode: AutonomyMode;
|
|
4
4
|
/** Display label — left verbatim (autonomy mode names are domain terms). */
|
|
5
|
-
label: string;
|
|
6
5
|
/** i18n key under activity:autonomy.* for the description. */
|
|
6
|
+
labelKey: string;
|
|
7
7
|
descKey: string;
|
|
8
8
|
icon: React.ReactNode;
|
|
9
9
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { QueuedItem, QueueMode } from '@/stores/chat-store';
|
|
3
3
|
export declare const REFINE_RETRY_FEEDBACK = "Make another pass that is sharper and more self-contained. Use the provided project memory, current session context, and recent conversation only to resolve references and preserve project vocabulary; keep the original scope unchanged.";
|
|
4
4
|
export interface ChatInputRefinePanelHostProps {
|
|
5
5
|
enhanceEnabled: boolean;
|
|
@@ -16,7 +16,7 @@ export interface ChatInputRefinePanelHostProps {
|
|
|
16
16
|
clientConnected: boolean;
|
|
17
17
|
addUserMessage: (content: string) => void;
|
|
18
18
|
setLoading: (loading: boolean) => void;
|
|
19
|
-
sendMessage: (text: string) => void;
|
|
19
|
+
sendMessage: (text: string, images?: undefined, freshContext?: boolean) => void;
|
|
20
20
|
/** True while a run is in flight. Used to tell the mid-run (pre-queue)
|
|
21
21
|
* refinement path — which carries a preserved submit mode — apart from the
|
|
22
22
|
* idle path that sends directly. */
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure decision logic for the chat-input auto-collapse state machine.
|
|
3
|
+
*
|
|
4
|
+
* ChatView keeps `inputCollapsed` (a thin bar hides the full input) and two
|
|
5
|
+
* transition refs: `prevHadMessages` (transcript presence on the last render)
|
|
6
|
+
* and `prevAutoCollapse` (the pref on the last render). This function decides
|
|
7
|
+
* whether the input should collapse given the CURRENT values and those
|
|
8
|
+
* previous values — it fires only on transitions, never on steady state:
|
|
9
|
+
*
|
|
10
|
+
* 1. 0→N transcript arrival while the pref is on — covers fresh connects
|
|
11
|
+
* where history lands via WS replay AFTER mount, so the mount-time
|
|
12
|
+
* initializer saw an empty transcript.
|
|
13
|
+
* 2. The pref flips false→true while history is already present — instant
|
|
14
|
+
* feedback for the opt-in toggle (mirrors the manual Collapse button).
|
|
15
|
+
* 3. A session switch (sessionId changed to a new non-null id) while the
|
|
16
|
+
* pref is on and the new transcript has messages — session resume
|
|
17
|
+
* replaces the transcript wholesale (N→M in one commit, never through
|
|
18
|
+
* 0), so the length transition alone would miss it.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately NOT a trigger: plain message growth after history exists
|
|
21
|
+
* (a manual expand stays sticky), and a pref flip while there is no history
|
|
22
|
+
* (nothing to collapse yet). The ChatView caller additionally gates the whole
|
|
23
|
+
* decision on `!isLoading` so a run in flight never collapses the input —
|
|
24
|
+
* the user's first send in a fresh session is itself a 0→N arrival.
|
|
25
|
+
*
|
|
26
|
+
* Extracted as a pure function so the decision matrix is unit-testable
|
|
27
|
+
* without mounting the heavy ChatView dependency graph.
|
|
28
|
+
*/
|
|
29
|
+
export interface AutoCollapseDecision {
|
|
30
|
+
/** Current transcript presence (messages.length > 0). */
|
|
31
|
+
hasMessages: boolean;
|
|
32
|
+
/** Current value of the autoCollapseInput pref. */
|
|
33
|
+
autoCollapseInput: boolean;
|
|
34
|
+
/** True when the active session id changed to a new non-null id. */
|
|
35
|
+
sessionChanged: boolean;
|
|
36
|
+
/** Transcript presence at the last render/effect run. */
|
|
37
|
+
prevHadMessages: boolean;
|
|
38
|
+
/** Pref value at the last render/effect run. */
|
|
39
|
+
prevAutoCollapse: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare function shouldAutoCollapse(decision: AutoCollapseDecision): boolean;
|
|
42
|
+
//# sourceMappingURL=auto-collapse.d.ts.map
|
|
@@ -20,19 +20,24 @@ export interface ConfirmModalOptions {
|
|
|
20
20
|
cancelLabel?: string | undefined;
|
|
21
21
|
/** Destructive styling for the confirm button (deletes etc.). */
|
|
22
22
|
danger?: boolean | undefined;
|
|
23
|
+
/** Which choice receives focus and Enter. Defaults to confirm for compatibility. */
|
|
24
|
+
defaultAction?: 'confirm' | 'cancel' | undefined;
|
|
23
25
|
}
|
|
24
26
|
interface ConfirmRequest extends ConfirmModalOptions {
|
|
25
|
-
resolve: (confirmed: boolean) => void;
|
|
27
|
+
resolve: (confirmed: boolean | null) => void;
|
|
26
28
|
}
|
|
27
29
|
interface ConfirmModalState {
|
|
28
30
|
request: ConfirmRequest | null;
|
|
29
31
|
open: (request: ConfirmRequest) => void;
|
|
30
|
-
settle: (confirmed: boolean) => void;
|
|
32
|
+
settle: (confirmed: boolean | null) => void;
|
|
31
33
|
}
|
|
32
34
|
/** Internal — used by ConfirmModalHost and tests. Call confirmModal() instead. */
|
|
33
35
|
export declare const useConfirmModalStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ConfirmModalState>>;
|
|
34
36
|
/** Ask the user to confirm. Resolves true on confirm, false otherwise. */
|
|
35
37
|
export declare function confirmModal(options: ConfirmModalOptions): Promise<boolean>;
|
|
38
|
+
export type ConfirmModalChoice = 'confirm' | 'cancel' | 'dismiss';
|
|
39
|
+
/** Three-way variant for workflows where dismissing must not equal either button. */
|
|
40
|
+
export declare function confirmModalChoice(options: ConfirmModalOptions): Promise<ConfirmModalChoice>;
|
|
36
41
|
export declare function ConfirmModalHost(): import("react").JSX.Element;
|
|
37
42
|
export interface PromptModalOptions {
|
|
38
43
|
title: string;
|
|
@@ -12,7 +12,7 @@ export declare function collectActiveSessionIds(input: {
|
|
|
12
12
|
registrySessionIds: readonly string[];
|
|
13
13
|
agents: Iterable<FleetAgentLike>;
|
|
14
14
|
}): string[];
|
|
15
|
-
export
|
|
15
|
+
export { isKanbanBoardActive } from '../lib/kanban-board-active.js';
|
|
16
16
|
export declare function runningBoardCostTotal(board: KanbanBoard | null): number;
|
|
17
17
|
/** A kanban board that mirrors a live Goal/SDD run, detected from its tags. */
|
|
18
18
|
export declare function parseRunLink(board: {
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* KanbanVerificationDashboard — board-wide Definition-of-Done quality view:
|
|
3
|
-
* verified/unverified/failed counts, failing checks, missing evidence, and
|
|
4
|
-
* atomicity debt (tasks needing decomposition, pending proposals).
|
|
5
|
-
* Every row clicks through to the task inspector.
|
|
6
|
-
*/
|
|
7
1
|
import type { KanbanBoard } from '@wrongstack/kanban';
|
|
8
2
|
export declare function KanbanVerificationDashboard({ board, onSelectTask, }: {
|
|
9
3
|
board: KanbanBoard;
|
|
@@ -4,9 +4,17 @@
|
|
|
4
4
|
* The list is driven by the shared audit catalog (`@wrongstack/plugins/
|
|
5
5
|
* plugin-audit-catalog`) — the same single source of truth the CLI plugin
|
|
6
6
|
* manager uses — so EVERY plugin the host knows about appears here, whether
|
|
7
|
-
* it is currently active or inactive.
|
|
8
|
-
*
|
|
9
|
-
* `
|
|
7
|
+
* it is currently active or inactive.
|
|
8
|
+
*
|
|
9
|
+
* `localPrefs.pluginsEnabled` is NOT just this browser's memory: on connect the
|
|
10
|
+
* server seeds it (context-meta.ts) with the EFFECTIVE state resolved through
|
|
11
|
+
* core's shared precedence, and the snapshot wins over localStorage. So a
|
|
12
|
+
* plugin the config decides shows what is actually running; only plugins the
|
|
13
|
+
* config says nothing about fall back to the catalog `defaultState` here.
|
|
14
|
+
*
|
|
15
|
+
* On write the server projects the toggle onto `extensions.<name>.enabled` AND
|
|
16
|
+
* any matching `config.plugins` entry (pref-helpers.ts) — the entry outranks
|
|
17
|
+
* the extension, so writing only the latter made this switch decorative.
|
|
10
18
|
* Plugins flagged `canDisable: false` render a locked, non-interactive switch.
|
|
11
19
|
*/
|
|
12
20
|
export declare function PluginToggleList(): import("react").JSX.Element;
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Shadow agent — informational only.
|
|
4
|
+
*
|
|
5
|
+
* This panel used to render Start / Stop buttons and a green "Running" badge
|
|
6
|
+
* driven entirely by local `useState`: `handleStart` set `running = true` and
|
|
7
|
+
* `shadowId = 'pending'` and did nothing else. No WS message was sent, no
|
|
8
|
+
* shadow agent existed, nothing monitored the fleet, and a page refresh
|
|
9
|
+
* silently reset the badge — a fabricated "Running" state in a security panel.
|
|
10
|
+
* (The file's own comment admitted it: "Since there's no WS message for shadow
|
|
11
|
+
* start, we'll use a simple approach".)
|
|
12
|
+
*
|
|
13
|
+
* There is genuinely no `shadow.*` message in the client protocol registry, so
|
|
14
|
+
* the panel cannot control it. Until one exists, point at the surface that
|
|
15
|
+
* can: the `/shadow` slash command. Adding the protocol surface is a real
|
|
16
|
+
* change — registry entry, server handler, and the pinned contract counts —
|
|
17
|
+
* not something to fake here.
|
|
18
|
+
*/
|
|
2
19
|
export declare function ShadowSection(): ReactElement;
|
|
3
20
|
//# sourceMappingURL=ShadowSection.d.ts.map
|
|
@@ -19,70 +19,42 @@ export interface CouncilPersonaOption {
|
|
|
19
19
|
}
|
|
20
20
|
/** Lens options for a config snapshot: server catalog first, fallback second. */
|
|
21
21
|
export declare function councilPersonaOptions(catalog: BrainConfigWire['personaCatalog']): CouncilPersonaOption[];
|
|
22
|
-
export declare const DECISION_TIMEOUTS:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}>;
|
|
26
|
-
export declare const HUMAN_TIMEOUTS: Array<{
|
|
27
|
-
value: string;
|
|
28
|
-
label: string;
|
|
29
|
-
}>;
|
|
30
|
-
export declare const FRACTIONS: Array<{
|
|
31
|
-
value: string;
|
|
32
|
-
label: string;
|
|
33
|
-
}>;
|
|
22
|
+
export declare const DECISION_TIMEOUTS: BrainOption[];
|
|
23
|
+
export declare const HUMAN_TIMEOUTS: BrainOption[];
|
|
24
|
+
export declare const FRACTIONS: BrainOption[];
|
|
34
25
|
/** Effective-valued numbers: the snapshot always carries a resolved number, so
|
|
35
26
|
* the default is a LABELLED concrete option rather than a `default` sentinel. */
|
|
36
|
-
export declare const LLM_MAX_TOKENS:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
export declare const
|
|
41
|
-
value: string;
|
|
42
|
-
label: string;
|
|
43
|
-
}>;
|
|
44
|
-
export declare const DECISION_LOG_SIZES: Array<{
|
|
45
|
-
value: string;
|
|
46
|
-
label: string;
|
|
47
|
-
}>;
|
|
48
|
-
export declare const CACHE_TTLS: Array<{
|
|
49
|
-
value: string;
|
|
50
|
-
label: string;
|
|
51
|
-
}>;
|
|
52
|
-
export declare const CACHE_MAX_ENTRIES: Array<{
|
|
53
|
-
value: string;
|
|
54
|
-
label: string;
|
|
55
|
-
}>;
|
|
27
|
+
export declare const LLM_MAX_TOKENS: BrainOption[];
|
|
28
|
+
export declare const MIN_CONFIDENCE: BrainOption[];
|
|
29
|
+
export declare const DECISION_LOG_SIZES: BrainOption[];
|
|
30
|
+
export declare const CACHE_TTLS: BrainOption[];
|
|
31
|
+
export declare const CACHE_MAX_ENTRIES: BrainOption[];
|
|
56
32
|
/** Optional-valued knobs: `default` clears the field back to core's default. */
|
|
57
|
-
export declare const COUNCIL_CALL_TIMEOUTS:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
export declare const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}>;
|
|
65
|
-
export declare const JUDGE_MAX_TOKENS: Array<{
|
|
66
|
-
value: string;
|
|
67
|
-
label: string;
|
|
68
|
-
}>;
|
|
69
|
-
export declare const LEDGER_MEMORY_ENTRIES: Array<{
|
|
70
|
-
value: string;
|
|
71
|
-
label: string;
|
|
72
|
-
}>;
|
|
73
|
-
export declare const INTERVENTION_WINDOWS: Array<{
|
|
74
|
-
value: string;
|
|
75
|
-
label: string;
|
|
76
|
-
}>;
|
|
33
|
+
export declare const COUNCIL_CALL_TIMEOUTS: BrainOption[];
|
|
34
|
+
export declare const COUNCIL_CONCURRENCY: BrainOption[];
|
|
35
|
+
/** Per-seat output budget. Default 2000 — reasoning models think from this budget. */
|
|
36
|
+
export declare const VOTER_MAX_TOKENS: BrainOption[];
|
|
37
|
+
export declare const JUDGE_MAX_TOKENS: BrainOption[];
|
|
38
|
+
export declare const LEDGER_MEMORY_ENTRIES: BrainOption[];
|
|
39
|
+
export declare const INTERVENTION_WINDOWS: BrainOption[];
|
|
77
40
|
/**
|
|
78
41
|
* Presets plus the live value when the config holds something off-menu — a
|
|
79
42
|
* hand-edited config must not render as an empty select (which would then
|
|
80
43
|
* write the first preset back on the next change).
|
|
81
44
|
*/
|
|
82
|
-
|
|
45
|
+
/**
|
|
46
|
+
* A select option. Numeric/unit choices ("5s", "800") carry a literal `label`;
|
|
47
|
+
* anything with words carries `labelKey` and is resolved at render time —
|
|
48
|
+
* this module is hook-free, so it cannot call `t()` itself.
|
|
49
|
+
*/
|
|
50
|
+
export interface BrainOption {
|
|
83
51
|
value: string;
|
|
84
|
-
label
|
|
85
|
-
|
|
52
|
+
label?: string;
|
|
53
|
+
labelKey?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function withCurrent(options: BrainOption[], current: string): BrainOption[];
|
|
56
|
+
/** Resolve `labelKey` options against the active catalog for rendering. */
|
|
57
|
+
export declare function localizeOptions(options: BrainOption[], t: (key: string) => string): Array<{
|
|
86
58
|
value: string;
|
|
87
59
|
label: string;
|
|
88
60
|
}>;
|