@wrongstack/webui 0.300.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.
Files changed (124) hide show
  1. package/dist/assets/AgentRosterView-BV6ysoGs.js +9 -0
  2. package/dist/assets/{AnalyticsDashboard-CIN35A_u.js → AnalyticsDashboard-UWNP8zjE.js} +1 -1
  3. package/dist/assets/{AudienceMemoryPanel-BAY2Bh8z.js → AudienceMemoryPanel-DwDKbvSA.js} +1 -1
  4. package/dist/assets/{ChangesView-CVWSTGmX.js → ChangesView-DuVlGWkD.js} +1 -1
  5. package/dist/assets/ChronicleDashboard-cs16n708.js +1 -0
  6. package/dist/assets/{CodeEditor-CWY_6cQD.js → CodeEditor-sr50ljZN.js} +1 -1
  7. package/dist/assets/{CodeMap-CjmKO0lB.js → CodeMap-CtK-C8gK.js} +1 -1
  8. package/dist/assets/ConfirmModal-ndS17YwF.js +1 -0
  9. package/dist/assets/{CronJobsPanel-BinzTWNs.js → CronJobsPanel-Dovomns5.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-C3CgaNVv.js → DeadCodeScanPanel-DjR4LLMs.js} +1 -1
  11. package/dist/assets/{DebugDashboard-BqUghn06.js → DebugDashboard-jK1yp3qS.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-CuWWQAlD.js → DesignGalleryView-CqXlEUzE.js} +1 -1
  13. package/dist/assets/GoalView-CGNLrnA4.js +1 -0
  14. package/dist/assets/KanbanView--tAf_K7N.js +3 -0
  15. package/dist/assets/{MailboxDetailView-aaHx9Nma.js → MailboxDetailView-0TBzZTdN.js} +1 -1
  16. package/dist/assets/{MemoryManager-BgcicCyg.js → MemoryManager-CDK_MO8A.js} +1 -1
  17. package/dist/assets/{ModelPicker-B3BqjJnT.js → ModelPicker-BbBZuQwR.js} +1 -1
  18. package/dist/assets/{OfficeMapPanel-Ck8NUOEs.js → OfficeMapPanel-68sVzHRD.js} +2 -2
  19. package/dist/assets/{OfficeMapPanel-CpexsBed.css → OfficeMapPanel-D6yTfGIT.css} +1 -1
  20. package/dist/assets/{ProcessMonitor-CoMYZcdS.js → ProcessMonitor-gFwiF8gX.js} +1 -1
  21. package/dist/assets/{QueuePanel-CA3CVCO_.js → QueuePanel-Cx-isRGl.js} +1 -1
  22. package/dist/assets/{RefreshDebugView-cqBtyNna.js → RefreshDebugView-C9tdu6Ld.js} +1 -1
  23. package/dist/assets/{RequirementIntakeView-BBtUk8mC.js → RequirementIntakeView-cPEw-RpV.js} +1 -1
  24. package/dist/assets/SageTabs-BbK6VFO0.js +2 -0
  25. package/dist/assets/SddHub-NKvDRECi.js +2 -0
  26. package/dist/assets/{SessionInspectView-DHC_xTzG.js → SessionInspectView-DPG5qWhj.js} +1 -1
  27. package/dist/assets/SessionList-ncl-20X_.js +1 -0
  28. package/dist/assets/SessionsDashboard-D23UVLr4.js +1 -0
  29. package/dist/assets/SetupScreen-D3XQ8MGk.js +1 -0
  30. package/dist/assets/{SkillDetailView-D7wSJWUX.js → SkillDetailView-DDPhVFet.js} +1 -1
  31. package/dist/assets/{SpecsView-BRWSI1iV.js → SpecsView-afIS0QpX.js} +1 -1
  32. package/dist/assets/{TechStackView-BOjkuJLe.js → TechStackView-kQ2OGxxw.js} +1 -1
  33. package/dist/assets/{TerminalPanel-Dg8WR5Un.js → TerminalPanel-GcJWeldW.js} +1 -1
  34. package/dist/assets/{Toaster-DSKFSuK3.js → Toaster-CgQA9256.js} +1 -1
  35. package/dist/assets/{activity-BWbV0byu.js → activity-B-cvKIfT.js} +4 -4
  36. package/dist/assets/{activity-DA9hmVZV.js → activity-Ba3aMzvo.js} +4 -4
  37. package/dist/assets/{activity-GdnS66AB.js → activity-CRTVZ5A4.js} +4 -4
  38. package/dist/assets/{activity-eawh_OWs.js → activity-DsSuflRW.js} +4 -4
  39. package/dist/assets/{activity-Bze6njDy.js → activity-DxDRJ8kN.js} +4 -4
  40. package/dist/assets/{activity-Bjb_mil3.js → activity-VI776bUZ.js} +4 -4
  41. package/dist/assets/{activity-Ciqcr7Ps.js → activity-nVmsmqAI.js} +4 -4
  42. package/dist/assets/chat-BPuAsrkF.js +1 -0
  43. package/dist/assets/chat-BfQBSiII.js +1 -0
  44. package/dist/assets/chat-BnkVCZ3Q.js +1 -0
  45. package/dist/assets/chat-CR2B97dj.js +1 -0
  46. package/dist/assets/chat-CdiY7G6Z.js +1 -0
  47. package/dist/assets/chat-DResBrkV.js +1 -0
  48. package/dist/assets/chat-Di8o0wDz.js +1 -0
  49. package/dist/assets/chat-store-DbxFVDwi.js +17 -0
  50. package/dist/assets/i18n-COgumVF5.js +2 -0
  51. package/dist/assets/index-CtpViiZy.js +132 -0
  52. package/dist/assets/index-fIsq43fR.css +1 -0
  53. package/dist/assets/mailbox-store-C1mzoSqJ.js +1 -0
  54. package/dist/assets/{progress-ring-D_d6hn_4.js → progress-ring-D_48qsBl.js} +1 -1
  55. package/dist/assets/{roster-ws-D6dGRfC5.js → roster-ws-Da57e_sI.js} +1 -1
  56. package/dist/assets/session-store-Df7_hhe9.js +1 -0
  57. package/dist/assets/settings-Bb7_utQE.js +1 -0
  58. package/dist/assets/settings-Bd8zMwvC.js +1 -0
  59. package/dist/assets/settings-DdFgBMAw.js +1 -0
  60. package/dist/assets/settings-De6sXIFO.js +1 -0
  61. package/dist/assets/settings-E8SKMLxq.js +1 -0
  62. package/dist/assets/settings-zIY9-ivF.js +1 -0
  63. package/dist/assets/settings-zKBcRjqE.js +1 -0
  64. package/dist/assets/stores-ChEnUmic.js +7 -0
  65. package/dist/assets/{useWebSocket-DuLtH2jI.js → useWebSocket-_gk4MRJz.js} +7 -7
  66. package/dist/assets/ws-client-TTMa0XaT.js +1 -0
  67. package/dist/components/AgentCard.d.ts +21 -0
  68. package/dist/components/AgentsPage.d.ts +0 -3
  69. package/dist/components/ChatInput/refine-panel-host.d.ts +2 -2
  70. package/dist/components/ConfirmModal.d.ts +7 -2
  71. package/dist/components/KanbanBoardState.d.ts +1 -1
  72. package/dist/components/SettingsPanel/ShadowSection.d.ts +18 -1
  73. package/dist/components/SettingsPanel/brain-section-options.d.ts +2 -0
  74. package/dist/components/index.d.ts +0 -1
  75. package/dist/hooks/useWebSocket.d.ts +10 -2
  76. package/dist/index.css +32 -0
  77. package/dist/index.html +15 -14
  78. package/dist/index.js +3480 -3168
  79. package/dist/lib/kanban-board-active.d.ts +19 -0
  80. package/dist/lib/plugin-enablement.d.ts +1 -1
  81. package/dist/lib/ws-client.d.ts +21 -1
  82. package/dist/stores/fleet-store.d.ts +1 -1
  83. package/dist/stores/local-prefs.d.ts +9 -0
  84. package/dist/stores/session-store.d.ts +9 -1
  85. package/dist/stores/ui-store.d.ts +2 -0
  86. package/dist/types/brain.d.ts +2 -0
  87. package/dist/types/client-message.d.ts +7 -1
  88. package/dist/types/protocol-core.d.ts +2 -0
  89. package/dist/types/runtime.d.ts +14 -0
  90. package/dist/types/server-message.d.ts +3 -3
  91. package/package.json +8 -8
  92. package/dist/assets/AgentRosterView-wkALMOGD.js +0 -9
  93. package/dist/assets/ChronicleDashboard-Bg3W7C9U.js +0 -1
  94. package/dist/assets/GoalView-2weuLiPM.js +0 -1
  95. package/dist/assets/KanbanView-DXYRrshJ.js +0 -3
  96. package/dist/assets/SageTabs-Di49i4Yu.js +0 -2
  97. package/dist/assets/SddHub-D8iV6l9A.js +0 -2
  98. package/dist/assets/SessionList-DH-ZsHmv.js +0 -1
  99. package/dist/assets/SessionsDashboard-Coi6htwg.js +0 -1
  100. package/dist/assets/SetupScreen-CD2Sx4n9.js +0 -1
  101. package/dist/assets/chat-4NEOESoU.js +0 -1
  102. package/dist/assets/chat-BSg62iwX.js +0 -1
  103. package/dist/assets/chat-Bb1TpPfJ.js +0 -1
  104. package/dist/assets/chat-COLKjtcx.js +0 -1
  105. package/dist/assets/chat-CfRKV9iX.js +0 -1
  106. package/dist/assets/chat-EbeT4kiS.js +0 -1
  107. package/dist/assets/chat-store-CtOyUCdF.js +0 -17
  108. package/dist/assets/chat-ux_gymOJ.js +0 -1
  109. package/dist/assets/i18n-C31PI0Up.js +0 -2
  110. package/dist/assets/index-5IWUhPO4.css +0 -1
  111. package/dist/assets/index-D1izXztg.js +0 -132
  112. package/dist/assets/mailbox-store-Bc9ER3Ph.js +0 -1
  113. package/dist/assets/session-store-b2KGFwkX.js +0 -1
  114. package/dist/assets/settings-BKuhxUSF.js +0 -1
  115. package/dist/assets/settings-CeK0doV7.js +0 -1
  116. package/dist/assets/settings-DZ-H89lu.js +0 -1
  117. package/dist/assets/settings-DvrdpSdA.js +0 -1
  118. package/dist/assets/settings-SBUqq0ll.js +0 -1
  119. package/dist/assets/settings-W8t1ZrxM.js +0 -1
  120. package/dist/assets/settings-tOqZkk9R.js +0 -1
  121. package/dist/assets/stores-OBoFiAKe.js +0 -7
  122. package/dist/assets/ws-client-Bw1ixxwI.js +0 -1
  123. package/dist/components/AgentsMonitor.d.ts +0 -26
  124. package/dist/components/FleetMonitor.d.ts +0 -21
@@ -1,21 +1,21 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,n,r,t as i}from"./chat-store-CtOyUCdF.js";import{La as a,Na as o,za as s}from"./vendor-BuarzSSb.js";import{t as c}from"./i18n-C31PI0Up.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-Bw1ixxwI.js";import{t as g}from"./session-store-b2KGFwkX.js";import{i as _,n as v}from"./codemap-activity-store-DQfjo7-j.js";import{A as y,F as b,N as ee,P as x,_ as te,a as ne,c as re,f as ie,g as S,h as ae,i as C,l as w,m as oe,o as se,p as ce,r as T,s as E,t as D,u as O,v as le,w as k,y as ue}from"./stores-OBoFiAKe.js";import{r as A}from"./mailbox-store-Bc9ER3Ph.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-DSKFSuK3.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">
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
2
  <rect width="64" height="64" fill="#121210" />
3
3
  <path fill="#FD9F02" d="M5 27h10v10H5zM27 27h10v10H27zM38 27h10v10H38zM49 27h10v10H49z" />
4
4
  <path fill="#FE2E5F" d="M16 32h10v10H16z" />
5
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
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;x.getState().setCoordinatorStatus(t.status,t.mode),t.taskQueue&&x.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;x.getState().updateCoordinatorStats(t)},"budget.threshold_reached":e=>{let t=e.payload;x.getState().pushEvent(`budget.threshold_reached`,t,t.ts??Date.now(),t.subagentId,t.taskId),t.limit>0&&t.used/t.limit*100>=85&&x.getState().recordBudgetAlert(t.subagentId,t.kind,t.used,t.limit),x.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;x.getState().recordBudgetDecision(t.subagentId,t.kind,t.decision,n),x.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;x.getState().recordBudgetExtended(t.subagentId,t.kind,t.extendedTo),x.getState().pushEvent(`subagent.budget_extended`,t,Date.now(),t.subagentId)},"consensus.vote_initiated":e=>{let t=e.payload;x.getState().pushConsensusVote(t.changeId,t.title,t.eligible),x.getState().pushEvent(`consensus.vote_initiated`,t,Date.now()),M.info(`Vote started: `+t.title)},"consensus.vote_cast":e=>{let t=e.payload,n=x.getState().consensusVotes.get(t.changeId)?.eligible.find(e=>e.agentId===t.voterId);x.getState().recordConsensusVote(t.changeId,t.voterId,n?.agentName??t.voterId,t.value),x.getState().pushEvent(`consensus.vote_cast`,t,Date.now(),t.voterId)},"consensus.vote_resolved":e=>{let t=e.payload;x.getState().resolveConsensusVote(t.changeId,t.result,t.approveCount,t.rejectCount),x.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;x.getState().pushTaskPending(t.taskId,t.description,t.priority),x.getState().pushEvent(`task.pending`,t,Date.now())},"task.started":e=>{let t=e.payload;x.getState().startTask(t.taskId,t.subagentId),x.getState().pushEvent(`task.started`,t,Date.now(),t.subagentId)},"task.completed":e=>{let t=e.payload;x.getState().completeTask(t.taskId,t.status,t.durationMs),x.getState().pushEvent(`task.completed`,t,Date.now(),t.subagentId)},"task.failed":e=>{let t=e.payload;x.getState().failTask(t.taskId,t.error),x.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){y.getState().setError(t.error);return}y.getState().setTree(t.root,t.tree)}function et(e){let t=e.payload;if(t.error){y.getState().setError(t.error);return}y.getState().openFile(t.filePath,t.content)}function tt(e){let t=e.payload;t.success?y.getState().markSaved(t.filePath):t.error&&y.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;D.getState().setSnapshot(t.worktrees??[],t.baseBranch??``)}function mt(e){let t=e.payload;D.getState().pushEvent(t)}function ht(e){let t=e.payload;D.getState().setOrphans(t.orphans??[],t.canClean??!1,t.reason)}function gt(e){let t=e.payload;D.getState().setCleanResult({...t,at:Date.now()})}function _t(e){let t=e.payload;D.getState().setMergeResult({...t,at:Date.now()})}function vt(e){let t=e.payload;D.getState().setDiff(t.dir,t.summary)}function yt(e){k.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`&&k.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&&T.getState().noteQuestion(n,t.request.question),t.event===`brain.council_vote`){T.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`){T.getState().recordResolution(t);let e=t.requestId??`unknown`,n=T.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(`
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
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
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}),y.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;le.getState().setInfo({...t,fetchedAt:Date.now()})}function tn(e){let t=e.payload;ue.getState().setFiles(t.files??[],t.error??null)}function nn(e){let t=e.payload;ue.getState().selectedPath===t.path&&ue.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(`
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
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
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
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)&&O.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=k.getState();if(n.clearedSessionId){let t=new Map;for(let[r,i]of e.agents)i.sessionId!==n.clearedSessionId&&t.set(r,i);k.setState({agents:t})}else e.clear();y.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(`
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
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
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=w.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||w.getState().clear())}function Bn(e){if(!d(e))return;let t=e.payload;w.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;O.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){O.getState().setError(`Provider status tracking not available`);return}O.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}`}),k.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}),k.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;g.getState().setEnv({maxContext:t.maxContext})}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(){b.getState().setWsConnected(!1),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(`
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
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
20
 
21
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(`
@@ -26,4 +26,4 @@ _empty — nothing remembered yet_`})}function pr(e){let t=e.payload,n=i.getStat
26
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
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
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;ne.getState().setSpecs(t.specs??[])},"specs.detail":e=>{ne.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&&E.getState().reset()},"sdd.spec.snapshot":e=>{E.getState().setSnapshot(e.payload)},"sdd.spec.agent_text":e=>{E.getState().setAgentText(e.payload.text??``)},"sdd.spec.error":e=>{E.getState().setError(e.payload.message??`Error`)},"sdd.run.started":e=>{E.getState().setStartedRunId(e.payload.runId??null)},"goal.assess.result":e=>{let t=e.payload;te.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;k.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;k.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)=>t.isConnected?t.sendMessage(e,n):null,[t]),r=(0,N.useCallback)(()=>t.sendAbort(),[t]),i=(0,N.useCallback)(e=>t.sendMailboxMessage(e),[t]),{hideConfirm:a}=j(),o=(0,N.useCallback)((e,n)=>{t.sendConfirm(e,n),a()},[t,a]),s=(0,N.useCallback)((e,n)=>t.switchModel(e,n),[t]),c=(0,N.useCallback)(()=>t.listProviders(),[t]),l=(0,N.useCallback)(e=>t.listProviderModels(e),[t]),u=(0,N.useCallback)(()=>t.listSavedProviders(),[t]),d=(0,N.useCallback)((e,n,r)=>t.addKey(e,n,r),[t]),f=(0,N.useCallback)((e,n,r)=>t.updateKey(e,n,r),[t]),p=(0,N.useCallback)((e,n)=>t.deleteKey(e,n),[t]),m=(0,N.useCallback)((e,n)=>t.setActiveKey(e,n),[t]),g=(0,N.useCallback)((e,n,r,i,a,o)=>t.addProvider(e,n,r,i,a,o),[t]),_=(0,N.useCallback)(e=>t.removeProvider(e),[t]),v=(0,N.useCallback)(e=>{oe.getState().setLoading(!0),t.listSessions(e)},[t]),y=(0,N.useCallback)(e=>t.deleteSession(e),[t]),ee=(0,N.useCallback)((e,n)=>{oe.getState().updateEntryName(e,n),t.renameSession(e,n)},[t]),x=(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]),S=(0,N.useCallback)(e=>t.listSageMemories(e),[t]),ae=(0,N.useCallback)((e,n)=>t.listSageMemoriesPage(e,n),[t]),C=(0,N.useCallback)((e,n)=>t.getSage(e,n),[t]),w=(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]),T=(0,N.useCallback)((e,n)=>t.rememberSage(e,n),[t]),E=(0,N.useCallback)((e,n)=>t.findMemoriesForFile(e,n),[t]),D=(0,N.useCallback)((e,n)=>t.recoverSage(e,n),[t]),O=(0,N.useCallback)((e,n)=>t.resolveMemoryCandidate(e,n),[t]),le=(0,N.useCallback)((e,n)=>t.backfillRecoverable(e,n),[t]),k=(0,N.useCallback)(e=>t.listSkills(e),[t]),ue=(0,N.useCallback)(e=>t.getDiag(e),[t]),A=(0,N.useCallback)(e=>t.getStats(e),[t]),de=(0,N.useCallback)(()=>t.getPlan(),[t]),fe=(0,N.useCallback)(()=>t.listModes(),[t]),pe=(0,N.useCallback)(e=>t.switchMode(e),[t]),me=(0,N.useCallback)(()=>t.listContextModes(),[t]),M=(0,N.useCallback)(e=>t.switchContextMode(e),[t]),he=(0,N.useCallback)(e=>t.createContextMode(e),[t]),P=(0,N.useCallback)((e,n)=>t.updateContextMode(e,n),[t]),F=(0,N.useCallback)(e=>t.deleteContextMode(e),[t]),I=(0,N.useCallback)(()=>t.repairContext(),[t]),L=(0,N.useCallback)((e,n)=>t.refineModel(e,n),[t]),ge=(0,N.useCallback)(e=>t.switchAutonomy(e),[t]),R=(0,N.useCallback)(e=>t.updatePrefs(e),[t]);return{client:t,sendMessage:n,sendAbort:r,sendMailboxMessage:i,sendConfirm:o,switchModel:s,listProviders:c,listProviderModels:l,listSavedProviders:u,addKey:d,updateKey:f,deleteKey:p,setActiveKey:m,addProvider:g,removeProvider:_,listSessions:v,deleteSession:y,renameSession:ee,resumeSession:x,inspectSession:te,saveSession:ne,listTools:re,listMemory:ie,listSageMemories:S,listSageMemoriesPage:ae,getSage:C,getSageGraph:w,updateSage:se,deleteSage:ce,rememberSage:T,findMemoriesForFile:E,recoverSage:D,resolveMemoryCandidate:O,backfillRecoverable:le,listSkills:k,getDiag:ue,getStats:A,getPlan:de,listModes:fe,switchMode:pe,listContextModes:me,switchContextMode:M,createContextMode:he,updateContextMode:P,deleteContextMode:F,repairContext:I,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:ge,updatePrefs:R,refineModel:L}}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};
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};
@@ -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
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- import type { QueueMode, QueuedItem } from '@/stores/chat-store';
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. */
@@ -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 declare function isKanbanBoardActive(board: Pick<KanbanBoard, 'presence' | 'tags'>, activeSessionIds: readonly string[]): boolean;
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,3 +1,20 @@
1
- import { type ReactElement } from 'react';
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
@@ -32,6 +32,8 @@ export declare const CACHE_MAX_ENTRIES: BrainOption[];
32
32
  /** Optional-valued knobs: `default` clears the field back to core's default. */
33
33
  export declare const COUNCIL_CALL_TIMEOUTS: BrainOption[];
34
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[];
35
37
  export declare const JUDGE_MAX_TOKENS: BrainOption[];
36
38
  export declare const LEDGER_MEMORY_ENTRIES: BrainOption[];
37
39
  export declare const INTERVENTION_WINDOWS: BrainOption[];
@@ -27,7 +27,6 @@ export { TaskBoard, type TaskItem } from './TaskBoard';
27
27
  export { ContextBar, ContextFillBar } from './ContextBar';
28
28
  export { ContextBreakdownModal } from './ContextBreakdownModal';
29
29
  export { ContextDashboard } from './ContextDashboard';
30
- export { AgentsPage } from './AgentsPage';
31
30
  export { SetupScreen } from './SetupScreen';
32
31
  export { RefinePanel } from './RefinePanel';
33
32
  export { QueuePanel } from './QueuePanel';
@@ -1,5 +1,5 @@
1
- import type { ProviderCustomModelWire } from '@/types';
2
1
  import type { WrongStackWebSocketClient, WSSendOptions } from '@/lib/ws-client';
2
+ import type { ProviderCustomModelWire } from '@/types';
3
3
  /**
4
4
  * Mounts the WebSocket connection and installs event handlers.
5
5
  * Call this from App.tsx (top of the tree) and nowhere else.
@@ -20,7 +20,15 @@ export declare function useWebSocketBootstrap(): void;
20
20
  */
21
21
  export declare function useWebSocket(): {
22
22
  client: WrongStackWebSocketClient;
23
- sendMessage: (content: string, images?: import('@/types').WSUserMessageImage[]) => string | null;
23
+ sendMessage: (content: string, images?: import('@/types').WSUserMessageImage[], freshContext?: boolean) => string | null;
24
+ adviseTopic: (prompt: string) => Promise<import("@/types").SessionScopedPayload & {
25
+ requestId: string;
26
+ suggestNewContext: boolean;
27
+ confidence: number;
28
+ reason: string;
29
+ nextTopic?: string | undefined;
30
+ source: 'explicit' | 'model' | 'cache' | 'local';
31
+ }>;
24
32
  sendAbort: () => void;
25
33
  sendMailboxMessage: (opts: Parameters<(opts: import("@/lib/ws-client").WSMailboxSendOptions) => string>[0]) => string;
26
34
  sendConfirm: (id: string, decision: 'yes' | 'no' | 'always' | 'deny') => void;