@seqyuan/annovibe 0.8.118 → 0.8.119

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 (155) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +10 -9
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +27 -3
  5. package/.next/react-loadable-manifest.json +4 -4
  6. package/.next/required-server-files.js +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +6 -0
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/.next/server/app/api/agent/[id]/events/route.js +4 -3
  30. package/.next/server/app/api/agent/[id]/prepare/route.js +1 -1
  31. package/.next/server/app/api/agent/[id]/route.js +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/running/events/route.js +2 -2
  34. package/.next/server/app/api/agent/runtime/route.js +1 -1
  35. package/.next/server/app/api/apps/[id]/[[...path]]/route.js +1 -1
  36. package/.next/server/app/api/apps/route.js +2 -2
  37. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  38. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  39. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  40. package/.next/server/app/api/auth/login/route.js +1 -1
  41. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/providers/route.js +1 -1
  43. package/.next/server/app/api/auth/status/route.js +1 -1
  44. package/.next/server/app/api/auth/totp/route.js +1 -1
  45. package/.next/server/app/api/debug-models/route.js +1 -1
  46. package/.next/server/app/api/default-cwd/route.js +1 -1
  47. package/.next/server/app/api/file-tree/delete/route.js +1 -1
  48. package/.next/server/app/api/file-tree/mkdir/route.js +1 -1
  49. package/.next/server/app/api/file-tree/rename/route.js +1 -1
  50. package/.next/server/app/api/file-tree/reveal/route.js +1 -1
  51. package/.next/server/app/api/file-tree/write/route.js +1 -1
  52. package/.next/server/app/api/file-watch/route.js +2 -2
  53. package/.next/server/app/api/files/[...path]/route.js +1 -1
  54. package/.next/server/app/api/harness/route.js +1 -1
  55. package/.next/server/app/api/home/route.js +1 -1
  56. package/.next/server/app/api/im/cancel/route.js +1 -1
  57. package/.next/server/app/api/im/gateway-status/route.js +1 -1
  58. package/.next/server/app/api/im/gateway-token/route.js +1 -1
  59. package/.next/server/app/api/im/project/route.js +1 -1
  60. package/.next/server/app/api/im/projects/route.js +1 -1
  61. package/.next/server/app/api/im/session-ids/route.js +1 -1
  62. package/.next/server/app/api/im/turn/route.js +2 -2
  63. package/.next/server/app/api/images/upload/route.js +1 -1
  64. package/.next/server/app/api/internal/runtime/route.js +1 -1
  65. package/.next/server/app/api/memory/dismiss/route.js +2 -2
  66. package/.next/server/app/api/memory/promote/route.js +2 -2
  67. package/.next/server/app/api/models/route.js +1 -1
  68. package/.next/server/app/api/models-config/discover/route.js +1 -1
  69. package/.next/server/app/api/models-config/route.js +1 -1
  70. package/.next/server/app/api/models-config/test/route.js +1 -1
  71. package/.next/server/app/api/plot-kernels/route.js +1 -1
  72. package/.next/server/app/api/plot-kernels/save/route.js +1 -1
  73. package/.next/server/app/api/plot-kernels/status/route.js +1 -1
  74. package/.next/server/app/api/plot-kernels/stop/route.js +1 -1
  75. package/.next/server/app/api/projects/browse/route.js +1 -1
  76. package/.next/server/app/api/projects/route.js +1 -1
  77. package/.next/server/app/api/search/route.js +1 -1
  78. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  79. package/.next/server/app/api/sessions/[id]/kernel-state/route.js +1 -1
  80. package/.next/server/app/api/sessions/[id]/plan/route.js +1 -1
  81. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  82. package/.next/server/app/api/sessions/[id]/workbench-artifact/route.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/workbench-review/route.js +1 -1
  84. package/.next/server/app/api/sessions/new/route.js +1 -1
  85. package/.next/server/app/api/sessions/route.js +1 -1
  86. package/.next/server/app/api/settings/route.js +1 -1
  87. package/.next/server/app/api/skills/install/route.js +2 -2
  88. package/.next/server/app/api/skills/route.js +2 -2
  89. package/.next/server/app/api/skills/search/route.js +1 -1
  90. package/.next/server/app/api/soul/route.js +1 -1
  91. package/.next/server/app/api/subagents/status/route.js +1 -1
  92. package/.next/server/app/api/version/route.js +1 -1
  93. package/.next/server/app/favicon.ico/route.js +1 -1
  94. package/.next/server/app/icon.svg/route.js +1 -1
  95. package/.next/server/app/index.html +1 -1
  96. package/.next/server/app/index.rsc +2 -2
  97. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  98. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  99. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  100. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  101. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  102. package/.next/server/app/login/page.js +2 -2
  103. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/login.html +1 -1
  105. package/.next/server/app/login.rsc +1 -1
  106. package/.next/server/app/login.segments/_full.segment.rsc +1 -1
  107. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  112. package/.next/server/app/page.js +25 -46
  113. package/.next/server/app/page_client-reference-manifest.js +1 -1
  114. package/.next/server/app/smoke/page.js +3 -3
  115. package/.next/server/app/smoke/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/smoke/session-stream/page.js +2 -0
  117. package/.next/server/app/smoke/session-stream/page_client-reference-manifest.js +1 -0
  118. package/.next/server/app/smoke/session-stream.html +1 -0
  119. package/.next/server/app/smoke/session-stream.meta +16 -0
  120. package/.next/server/app/smoke/session-stream.rsc +24 -0
  121. package/.next/server/app/smoke/session-stream.segments/_full.segment.rsc +24 -0
  122. package/.next/server/app/smoke/session-stream.segments/_head.segment.rsc +6 -0
  123. package/.next/server/app/smoke/session-stream.segments/_index.segment.rsc +7 -0
  124. package/.next/server/app/smoke/session-stream.segments/_tree.segment.rsc +5 -0
  125. package/.next/server/app/smoke/session-stream.segments/smoke/session-stream/__PAGE__.segment.rsc +9 -0
  126. package/.next/server/app/smoke/session-stream.segments/smoke/session-stream.segment.rsc +5 -0
  127. package/.next/server/app/smoke/session-stream.segments/smoke.segment.rsc +5 -0
  128. package/.next/server/app/smoke.html +2 -2
  129. package/.next/server/app/smoke.rsc +1 -1
  130. package/.next/server/app/smoke.segments/_full.segment.rsc +1 -1
  131. package/.next/server/app/smoke.segments/_head.segment.rsc +1 -1
  132. package/.next/server/app/smoke.segments/_index.segment.rsc +1 -1
  133. package/.next/server/app/smoke.segments/_tree.segment.rsc +1 -1
  134. package/.next/server/app/smoke.segments/smoke/__PAGE__.segment.rsc +1 -1
  135. package/.next/server/app/smoke.segments/smoke.segment.rsc +1 -1
  136. package/.next/server/app-paths-manifest.json +10 -9
  137. package/.next/server/chunks/6195.js +22 -0
  138. package/.next/server/chunks/6429.js +4 -4
  139. package/.next/server/middleware-build-manifest.js +1 -1
  140. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  141. package/.next/server/middleware.js +3 -3
  142. package/.next/server/pages/404.html +1 -1
  143. package/.next/server/pages/500.html +1 -1
  144. package/.next/server/server-reference-manifest.json +1 -1
  145. package/.next/static/chunks/{2170a4aa.4213bb2183c9cdf9.js → 2170a4aa.d07a50e84fe80b17.js} +1 -1
  146. package/.next/static/chunks/{8436.cab94b59cca0a8ff.js → 8436.9907b3b603222d78.js} +1 -1
  147. package/.next/static/chunks/9165-0ef91ee28d0cb634.js +22 -0
  148. package/.next/static/chunks/app/page-61270b5b6e8b536e.js +46 -0
  149. package/.next/static/chunks/app/smoke/session-stream/page-2ac078e0b43f898b.js +6 -0
  150. package/.next/static/chunks/{webpack-b13282f72690ef5e.js → webpack-961560b05f7e7346.js} +1 -1
  151. package/.next/static/tobhDGatjzn_cJ3Pv_lo5/_buildManifest.js +1 -0
  152. package/package.json +1 -1
  153. package/.next/static/1B01EFTy_VE5f-wDbv0NA/_buildManifest.js +0 -1
  154. package/.next/static/chunks/app/page-9f3943bb144fd4e3.js +0 -67
  155. /package/.next/static/{1B01EFTy_VE5f-wDbv0NA → tobhDGatjzn_cJ3Pv_lo5}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8436],{32383:()=>{},83686:()=>{}}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8436],{54764:()=>{},83686:()=>{}}]);
@@ -0,0 +1,22 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9165],{14755:(e,t,n)=>{n.d(t,{ES:()=>p,IB:()=>m,SN:()=>a,tE:()=>f,xG:()=>d});let r="subagent",a=["retain","recall","reflect"],s=[],o=["read","bash","edit","write"],l=["bash","read","edit","write","grep","find","ls"],i=[...l,"kernel_plot_run","kernel_plot_render","kernel_plot_inspect","kernel_plot_stop","kernel_plot_artifacts"],u=[...l,r];function c(e){return[...e].sort().join(",")}function d(e){switch(e){case"none":return s;case"default":return o;case"workbench":return i;case"agent":return u;default:return l}}function p(e){let t=e.filter(e=>e.active).map(e=>e.name),n=t.filter(e=>!a.includes(e)),s=c(t),d=c(n);return""===s?"none":s===c(o)?"default":s===c(l)?"full":s===c(i)?"workbench":s===c(u)?"agent":""===d?"none":d===c(o)?"default":d===c(l)?"full":d===c(i)?"workbench":d===c(u)||t.includes(r)?"agent":"default"}function m(e){return a.filter(t=>e.some(e=>e.active&&e.name===t))}function f(e,t){return[...new Set([...d(e),...t])]}},19165:(e,t,n)=>{n.d(t,{T:()=>O});var r=n(12115);function a(e){if("assistant"!==e.role)return e;let t=e.content;if(!Array.isArray(t))return e;let n=t.map(e=>("object"!=typeof e||null===e||Array.isArray(e)||"toolCall"!==e.type?null:{type:"toolCall",toolCallId:"string"==typeof e.toolCallId?e.toolCallId:"string"==typeof e.id?e.id:"",toolName:"string"==typeof e.toolName?e.toolName:"string"==typeof e.name?e.name:"",input:"object"!=typeof e.input||null===e.input||Array.isArray(e.input)?"object"!=typeof e.arguments||null===e.arguments||Array.isArray(e.arguments)?{}:e.arguments:e.input})??e);return{...e,content:n}}var s=n(32383),o=n(28999);async function l(e,t){if(!t.length)return[];let n=await fetch("/api/images/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:e,images:t.map(e=>({data:e.data,mimeType:e.mimeType,name:e.name}))})}),r=await n.json().catch(()=>({}));if(!n.ok||r.error)throw Error(r.error??`Upload failed (HTTP ${n.status})`);return(r.uploaded??[]).map((e,n)=>({...e,previewUrl:t[n]?.previewUrl}))}async function i(e,t,n){let r,a=new TextDecoder,s="",o=e=>{if(e.startsWith("id: ")){r=e.slice(4);return}if(!e.startsWith("data: "))return;let n=e.slice(6);if("[DONE]"!==n)try{t(n,r)}catch{}finally{r=void 0}},l=new Promise(e=>{n?.aborted?e():n?.addEventListener("abort",()=>e(),{once:!0})});for(;;){let t=await Promise.race([e.read(),l.then(()=>({done:!0,value:void 0}))]);if(t.done)break;let n=(s+=a.decode(t.value,{stream:!0})).split("\n");for(let e of(s=n.pop()||"",n))o(e)}if(s.trim())for(let e of s.split("\n"))o(e)}let u="__annovibeStreamSessions__",c="__annovibeStreamListeners__",d="__annovibeStreamErrorCallbacks__";function p(){let e=globalThis;return e[u]||(e[u]=new Map),e[u]}function m(){let e=globalThis;return e[d]||(e[d]=new Map),e[d]}function f(e){return{sessionId:e,phase:"idle",startedAt:null,lastEventAt:null,lastHeartbeatAt:null,reconnectCount:0,lastSyncReason:null,accumulatedText:"",toolCalls:[],toolResults:[],statusText:null,streamingMessage:null,isStreaming:!1,error:null}}function g(e,t){let n;for(let r of(!(n=globalThis)[c]&&(n[c]=new Map),n[c]).get(e)??[])try{r(t)}catch{}}function h(e){e.textThrottleTimer&&(clearTimeout(e.textThrottleTimer),e.textThrottleTimer=null),e.textDirty&&(e.textDirty=!1,w(e))}function y(e,t=!1){let n=Date.now();if(e.snapshot.lastEventAt=n,!t){e.textDirty=!0,e.textThrottleTimer||(e.textThrottleTimer=setTimeout(()=>{e.textThrottleTimer=null,e.textDirty&&(e.textDirty=!1,w(e))},100));return}h(e),w(e)}function w(e,t){let n=Date.now(),r=function(e){let t=[];for(let n of e.toolCalls.values())t.push({type:"toolCall",toolCallId:n.toolCallId,toolName:n.toolName,input:n.input??{}});let n=e.accumulatedText.trim();return n&&t.push({type:"text",text:n}),t}(e),a=(t??e.snapshot.phase)==="active";e.snapshot={...e.snapshot,phase:t??e.snapshot.phase,lastEventAt:n,accumulatedText:e.accumulatedText,toolCalls:[...e.toolCalls.values()],toolResults:[...e.toolResults.values()],statusText:a?function(e){if(e.activeToolId){let t=e.toolCalls.get(e.activeToolId);if(t){let e=Math.max(0,Math.floor((Date.now()-t.startedAt)/1e3));return`Running ${t.toolName||"tool"}… (${e}s)`}}return e.accumulatedText.trim()?"Generating response…":e.toolCalls.size>0?"Finishing tool results…":null}(e):e.snapshot.statusText,streamingMessage:a&&r.length>0?{role:"assistant",content:r}:null,isStreaming:a},g(e.snapshot.sessionId,{type:"snapshot-updated",snapshot:e.snapshot})}function v(e){C(e),e.idleCheckTimer=setInterval(()=>{if("connected"!==e.connectionState)return;let t=Math.max(e.snapshot.lastEventAt??0,e.snapshot.lastHeartbeatAt??0);if(Date.now()-t>=18e4){T(e),h(e);let t="Stream idle timeout — no activity for 180s.";e.snapshot={...e.snapshot,phase:"error",isStreaming:!1,streamingMessage:null,statusText:null,error:t},C(e),g(e.snapshot.sessionId,{type:"error",snapshot:e.snapshot});let n=m().get(e.snapshot.sessionId);if(n)try{n(e.snapshot.sessionId,t)}catch{}}},1e4)}function C(e){e.idleCheckTimer&&(clearInterval(e.idleCheckTimer),e.idleCheckTimer=null)}function T(e){e.toolProgressTimer&&(clearInterval(e.toolProgressTimer),e.toolProgressTimer=null)}function b(e){let t=p(),n=t.get(e);return n||(n={snapshot:f(e),accumulatedText:"",toolCalls:new Map,toolResults:new Map,toolProgressTimer:null,activeToolId:null,textThrottleTimer:null,textDirty:!1,connectionState:"idle",idleCheckTimer:null},t.set(e,n)),n}function k(e,t){let n=m();return n.set(e,t),()=>{n.get(e)===t&&n.delete(e)}}function I(e){let t=p(),n=t.get(e);n&&(T(n),C(n),h(n)),t.delete(e)}function x(e){let t=p().get(e);t&&(t.snapshot={...t.snapshot,reconnectCount:t.snapshot.reconnectCount+1,lastSyncReason:"sse-reconnect",lastEventAt:Date.now()},y(t,!0))}let _="__annovibeSessionMessageCache__";function S(){let e=globalThis;if(!e[_]){var t;let n={entries:new Map,cleanupTimer:null};e[_]=n,(t=n).cleanupTimer||(t.cleanupTimer=setInterval(()=>{let e=Date.now();for(let[n,r]of t.entries)e-r.loadedAt>72e5&&t.entries.delete(n)},6e4))}return e[_]}function M(e){let t=S(),n=t.entries.get(e);return n?Date.now()-n.loadedAt>72e5?(t.entries.delete(e),null):(n.loadedAt=Date.now(),{...n,messages:[...n.messages],entryIds:[...n.entryIds]}):null}function $(e,t,n,r,a){let s=S(),o=s.entries.get(e);if(!o)return;let l=new Set(o.entryIds),i=[],u=[];for(let e=0;e<t.length;e++){let r=n[e];r&&!l.has(r)&&(i.push(t[e]),u.push(r))}0!==i.length&&s.entries.set(e,{...o,messages:[...i,...o.messages],entryIds:[...u,...o.entryIds],hasMore:r,loadedMessagesCount:a,loadedAt:Date.now()})}function A(e){S().entries.delete(e)}var E=n(14755);function R(e,t){switch(t.type){case"start":return{isStreaming:!0,streamingMessage:null};case"update":return{isStreaming:!0,streamingMessage:t.message};case"end":case"reset":return{isStreaming:!1,streamingMessage:null};default:return e}}function D(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}-${Math.random().toString(36).slice(2,11)}`}let L=["read","bash","grep","find","ls"];function N(e,t){return e.trim()||0!==t?`text:${e}|images:${t}`:null}function P(e){return"string"==typeof e?N(e,0):Array.isArray(e)?N(e.filter(e=>!!e&&"object"==typeof e&&"text"===e.type&&"string"==typeof e.text).map(e=>e.text).join("\n"),e.filter(e=>!!e&&"object"==typeof e&&"image"===e.type).length):null}function U(e){let t=new Map;for(let n of e){let e="user"!==n.role?null:P(n.content);e&&t.set(e,(t.get(e)??0)+1)}return t}function j(e,t,n){return e.sessionId===t&&(!e.leafId||n.includes(e.leafId))}function O(e){let{session:t,newSessionCwd:n,planMode:u=!1,onAgentEnd:c,onSessionCreated:d,onSessionForked:m,modelsRefreshKey:w,onBranchDataChange:_,onPlanModeState:O}=e,F=null===t&&null!==n,[H,J]=(0,r.useState)(null),[K,W]=(0,r.useState)(!F),[B,q]=(0,r.useState)(null),[G,z]=(0,r.useState)(null),[V,Q]=(0,r.useState)([]),[X,Y]=(0,r.useState)([]),[Z,ee]=(0,r.useState)(0),[et,en]=(0,r.useState)(!1),[er,ea]=(0,r.useState)(0),[es,eo]=(0,r.useReducer)(R,{isStreaming:!1,streamingMessage:null}),[el,ei]=(0,r.useState)(!1),[eu,ec]=(0,r.useState)({}),[ed,ep]=(0,r.useState)([]),[em,ef]=(0,r.useState)({}),[eg,eh]=(0,r.useState)({}),[ey,ew]=(0,r.useState)(null),[ev,eC]=(0,r.useState)("full"),[eT,eb]=(0,r.useState)([...E.SN]),[ek,eI]=(0,r.useState)("auto"),[ex,e_]=(0,r.useState)(null),[eS,eM]=(0,r.useState)(null),[e$,eA]=(0,r.useState)(null),[eE,eR]=(0,r.useState)(null),[eD,eL]=(0,r.useState)(null),[eN,eP]=(0,r.useState)(null),[eU,ej]=(0,r.useState)(!1),[eO,eF]=(0,r.useState)(null),[eH,eJ]=(0,r.useState)(null),[eK,eW]=(0,r.useState)(null),eB=(0,r.useRef)(null),eq=(0,r.useRef)(t?.id??null),eG=(0,r.useRef)(!1),ez=(0,r.useRef)(null),eV=(0,r.useRef)(null),eQ=(0,r.useRef)(null),eX=(0,r.useRef)(!1),eY=(0,r.useRef)(null),eZ=(0,r.useRef)(!1),e0=(0,r.useRef)(null),e1=(0,r.useRef)(null),e3=(0,r.useRef)(new Map),e4=(0,r.useRef)(new Map),e5=(0,r.useRef)(null),e2=(0,r.useRef)([]),e6=(0,r.useRef)(null),e8=(0,r.useRef)(0),e9=(0,r.useRef)(!1),e7=(0,r.useRef)(0),te=(0,r.useRef)(!1),tt=(0,r.useRef)(!1),tn=(0,r.useRef)(0),tr=(0,r.useRef)(null);(0,r.useEffect)(()=>{e5.current=G},[G]);let ta=e.setNewSessionModel??ew,ts=e.setToolPreset??eC,to=e.setMemoryTools??eb,tl=eD??H?.context.model??eN??null,ti=F?ey:tl,tu=(0,r.useCallback)(()=>u?L:(0,E.tE)(ev,eT),[eT,u,ev]),tc=(0,r.useCallback)(e=>e?.length?e.map((e,t)=>{let n=`Attachment ${t+1}: ${e.fileName} (${e.mimeType||"application/octet-stream"}, ${e.size} bytes)`;if(e.extractedText){let t=e.truncated?"\n[The extracted text was truncated before sending.]":"";return`${n}
2
+ ${t}
3
+ ${e.extractedText}`.trim()}return`${n}
4
+ [Text extraction unavailable: ${e.extractionError??"unsupported file type"}]`}).join("\n\n---\n\n"):"",[]),td=(0,r.useCallback)(async e=>{let t=await fetch(`/api/agent/${encodeURIComponent(e)}/prepare`,{method:"POST"});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error??`Failed to prepare session (HTTP ${t.status})`)},[]),tp=(()=>{let e={input:0,output:0,cacheRead:0,cacheWrite:0},t=0;for(let n of V){if("assistant"!==n.role)continue;let r=n.usage;r&&(e.input+=r.input??0,e.output+=r.output??0,e.cacheRead+=r.cacheRead??0,e.cacheWrite+=r.cacheWrite??0,t+=r.cost?.total??0)}return e.input+e.output+e.cacheRead+e.cacheWrite>0?{tokens:e,cost:t}:null})(),tm=(0,r.useRef)(!1),tf=(0,r.useCallback)(async()=>{let e=eq.current;if(!e||tm.current||te.current)return;tm.current=!0,e9.current=!0;let t=0,n=M(e);t=n?n.loadedMessagesCount:50;try{for(;;)try{let n=await fetch(`/api/sessions/${encodeURIComponent(e)}?limit=100&offset=${t}`);if(!n.ok)break;let r=await n.json();if(eq.current!==e)break;let a=r.context.messages,s=r.context.entryIds??[];if(0===a.length)break;Q(e=>[...a,...e]),Y(e=>{let t=[...s,...e];return e2.current=t,t});let o=t+a.length;if(ea(o),e7.current=o,en(r.hasMore??!1),$(e,a,s,r.hasMore??!1,o),t=o,!r.hasMore)break;await new Promise(e=>setTimeout(e,800))}catch{break}}finally{tm.current=!1,te.current=!0,e9.current=!1}},[]),tg=(0,r.useCallback)(async(e,t=!1,n=!1,r=!1)=>{try{if(t&&W(!0),!n&&!eG.current&&!r){let n=M(e);if(n)return ee(n.totalMessages),en(n.hasMore),ea(n.loadedMessagesCount),Q(n.messages),e2.current=n.entryIds,Y(n.entryIds),z(n.leafId),e7.current=n.loadedMessagesCount,t&&W(!1),n.hasMore&&!te.current&&setTimeout(()=>{tf()},1500),null}let s=n?`/api/sessions/${encodeURIComponent(e)}?includeState`:`/api/sessions/${encodeURIComponent(e)}?limit=50&offset=0`,o=new AbortController,l=setTimeout(()=>o.abort(),3e4),i=await fetch(s,{signal:o.signal}).finally(()=>clearTimeout(l));if(eq.current&&eq.current!==e)return null;if(404===i.status)return t&&(J(null),z(null),Q([]),q(null)),null;if(!i.ok)throw Error(`HTTP ${i.status}`);let u=await i.json();n?(ee(u.totalMessages??u.context.messages.length),en(!1)):(ee(u.totalMessages??u.context.messages.length),en(u.hasMore??!1)),ea(u.context.messages.length),J(u),z(u.leafId);let c=u.context.messages,d=U(c),p=new Map,m=Date.now();for(let[t,n]of e3.current)if(n.sessionId===e){if(m-n.createdAt>12e4){e3.current.delete(t);continue}if(n.confirmKey){let e=d.get(n.confirmKey)??0,r=p.get(n.confirmKey)??0;e-r>n.confirmCountAtCreate&&(e3.current.delete(t),p.set(n.confirmKey,r+1))}}e4.current=d;let f=u.context.entryIds??[],g=[...e3.current.values()].filter(t=>j(t,e,f)).map(e=>e.message),h=g.length>0?[...c,...g]:c,y=h.length;if(!n&&e7.current>y)ee(u.totalMessages??u.context.messages.length),en(u.hasMore??!1);else{var a;Q(h),e2.current=f,Y(f),n?e7.current=y:e7.current=Math.max(e7.current,y),a={sessionId:e,leafId:u.leafId,messages:h,entryIds:f,totalMessages:u.totalMessages??u.context.messages.length,hasMore:!n&&(u.hasMore??!1),loadedMessagesCount:u.context.messages.length},S().entries.set(e,{...a,loadedAt:Date.now()})}return eL(e=>{if(!e)return null;let t=u.context.model;return t?.provider===e.provider&&t.modelId===e.modelId?null:e}),q(null),!u.agentState?.state?.thinkingLevel&&u.context.thinkingLevel&&"off"!==u.context.thinkingLevel&&eI(u.context.thinkingLevel),u.agentState?.state?.planMode&&O?.(u.agentState.state.planMode),u.agentState??null}catch(e){return q(String(e)),null}finally{t&&W(!1)}},[O,tf]),th=(0,r.useRef)(!1),ty=(0,r.useCallback)(async()=>{if(th.current)return;th.current=!0;let e=eq.current;if(!e){th.current=!1;return}try{let t=await fetch(`/api/sessions/${encodeURIComponent(e)}?limit=50&offset=${er}`);if(!t.ok)return;let n=await t.json(),r=n.context.messages,a=n.context.entryIds??[];Q(e=>[...r,...e]),Y(e=>{let t=[...a,...e];return e2.current=t,t}),ea(e=>e+r.length),en(n.hasMore??!1),$(e,r,a,n.hasMore??!1,er+r.length)}catch{}finally{th.current=!1}},[er]),tw=(0,r.useCallback)(async(e,t)=>{try{let n=t?`/api/sessions/${encodeURIComponent(e)}/context?leafId=${encodeURIComponent(t)}`:`/api/sessions/${encodeURIComponent(e)}/context`,r=await fetch(n);if(!r.ok)throw Error(`HTTP ${r.status}`);let a=await r.json(),s=a.context.messages,o=a.context.entryIds??[],l=U(s),i=new Map,u=Date.now();for(let[t,n]of e3.current)if(n.sessionId===e){if(u-n.createdAt>12e4){e3.current.delete(t);continue}if(n.confirmKey){let e=l.get(n.confirmKey)??0,r=i.get(n.confirmKey)??0;e-r>n.confirmCountAtCreate&&(e3.current.delete(t),i.set(n.confirmKey,r+1))}}e4.current=l;let c=[...e3.current.values()].filter(t=>j(t,e,o)).map(e=>e.message);Q(c.length>0?[...s,...c]:s),e2.current=o,Y(o)}catch(e){console.error("Failed to load context:",e)}},[]),tv=(0,r.useCallback)(async e=>{try{let t=await (0,s.$)(e,{type:"get_tools"});t&&(ts((0,E.ES)(t)),to((0,E.IB)(t)))}catch(e){console.error("Failed to load tools:",e)}},[to,ts]),tC=(0,r.useCallback)((e,t={})=>{eB.current?.close(),eB.current=null;let n=`/api/agent/${encodeURIComponent(e)}/events${t.replay?"?replay=1":""}`;return!function(e){let t=b(e);if("active"===t.snapshot.phase)return y(t,!0),v(t),t.snapshot;let n=Date.now();t.snapshot={...f(e),phase:"active",startedAt:n,lastEventAt:n,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},v(t),y(t,!0),t.snapshot}(e),new Promise((r,a)=>{let s=!1,o=!1,l=null,u=e=>{if(!s){if(s=!0,clearTimeout(c),e){l?.close(),eB.current===l&&(eB.current=null),a(e);return}r()}},c=setTimeout(()=>{t.requireConnected?u(Error("Timed out waiting for event stream connection")):u()},t.timeoutMs??3e4);eB.current=l=function(e){let{url:t,onEvent:n,onStateChange:r,onFatalError:a,maxReconnectAttempts:s=1/0,reconnectBaseMs:o=1e3,reconnectMaxMs:l=3e4,autoReconnect:u=!0}=e,c="idle",d=new AbortController,p=0,m=null,f=null,g=!1,h=(e,t)=>{t&&(f=t),n(e,t)},y=e=>{c!==e&&(c=e,r?.(e))},w=()=>{null!==m&&(clearTimeout(m),m=null)},v=()=>{if(g)return;if(!u)return void y("error");if(p>=s){y("error"),a?.(Error(`Max reconnect attempts (${s}) reached`));return}let e=Math.min(l,o*2**p);p+=1,y("connecting"),m=setTimeout(()=>{m=null,C()},e)},C=async()=>{if(!g){w(),d=new AbortController,y("connecting");try{let e=await fetch(t,{signal:d.signal,headers:{Accept:"text/event-stream","Cache-Control":"no-cache",...f?{"Last-Event-ID":f}:{}}});if(!e.ok)throw Error(`HTTP ${e.status}: ${e.statusText}`);let n=e.body;if(!n)throw Error("Response has no readable body");let r=n.getReader();y("connected"),p=0,await i(r,h,d.signal),r.releaseLock(),y("closed"),!g&&u&&v()}catch(e){if(g||e instanceof DOMException&&"AbortError"===e.name)return void y("closed");y("error"),u&&v()}}};return{get state(){return c},connect:()=>{g=!1,p=0,w(),C()},close:()=>{g=!0,w(),d.abort(),y("closed")},get abortController(){return d}}}({url:n,onEvent:t=>{try{let n=JSON.parse(t);if("connected"===n.type&&u(),eq.current!==e)return;ez.current?.(n)}catch{}},onStateChange:t=>{!function(e,t){let n=p().get(e);if(!n)return;let r=n.connectionState;n.connectionState=t,"connected"===t&&"connected"!==r&&(n.snapshot={...n.snapshot,lastEventAt:Date.now(),lastHeartbeatAt:Date.now()},v(n)),"connected"!==t&&"connected"===r&&C(n)}(e,t),"connected"===t&&(o&&(x(e),eV.current?.(e,"sse_reconnected")),o=!0)},reconnectBaseMs:1e3,reconnectMaxMs:3e4}),l.connect()})},[]),tT=(0,r.useCallback)(async(e,t="manual")=>{if(!e||eq.current!==e)return;let n=e8.current;try{let t=await fetch(`/api/agent/${encodeURIComponent(e)}`),r=await t.json().catch(()=>({}));if(eq.current!==e||e8.current!==n)return;r.running?(eG.current=!0,ei(!0),eJ(e=>e??{kind:"waiting_model"}),eB.current&&"closed"!==eB.current.state&&"error"!==eB.current.state||(x(e),tC(e,{replay:!0}))):(eG.current=!1,eB.current?.close(),eB.current=null,I(e),ei(!1),eJ(null),e_(null),eo({type:"end"}),A(e),await tg(e,!1,!1,!0)),r.state?.contextUsage!==void 0&&eM(r.state.contextUsage??null),r.state?.systemPrompt!==void 0&&eA(r.state.systemPrompt??null),r.state?.isCompacting!==void 0&&ej(r.state.isCompacting),r.state?.thinkingLevel!==void 0&&eI(r.state.thinkingLevel??"auto"),r.state?.planMode!==void 0&&O?.(r.state.planMode)}catch{}},[tC,tg,O]);(0,r.useEffect)(()=>{eV.current=tT},[tT]),(0,r.useEffect)(()=>{eG.current=el},[el]),ez.current=(0,r.useCallback)(e=>{let t=eq.current;switch(t&&function(e,t){let n=b(e),r=Date.now();switch(t.type){case"agent_start":if("active"===n.snapshot.phase)return y(n,!0),n.snapshot;return T(n),n.accumulatedText="",n.toolCalls.clear(),n.toolResults.clear(),n.activeToolId=null,n.snapshot={...f(e),phase:"active",startedAt:r,lastEventAt:r,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},v(n),y(n,!0),n.snapshot;case"message_update":{let e=t.message;if(!e||"assistant"!==e.role)return n.snapshot;let a=e.content;for(let e of Array.isArray(a)?a:[])"object"==typeof e&&null!==e&&"type"in e&&("text"===e.type?n.accumulatedText=e.text??"":"toolCall"===e.type&&e.toolCallId&&!n.toolCalls.has(e.toolCallId)&&n.toolCalls.set(e.toolCallId,{...e,startedAt:r}));return y(n,!1),n.snapshot}case"tool_execution_start":{let e="string"==typeof t.toolCallId?t.toolCallId:"",a="string"==typeof t.toolName?t.toolName:"tool",s=t.input??{};if(!e)return n.snapshot;let o=n.toolCalls.get(e);return n.toolCalls.set(e,{type:"toolCall",toolCallId:e,toolName:a,input:o?.input??s,startedAt:o?.startedAt??r}),n.activeToolId=e,T(n),n.activeToolId&&(n.toolProgressTimer=setInterval(()=>y(n,!0),1e3)),y(n,!0),n.snapshot}case"tool_execution_end":{let e="string"==typeof t.toolCallId?t.toolCallId:"",a="string"==typeof t.toolName?t.toolName:"tool",s="string"==typeof t.result?t.result:JSON.stringify(t.result??"");if(e){let o=n.toolCalls.get(e);o&&n.toolCalls.set(e,{...o,endedAt:r}),n.toolResults.set(e,{role:"toolResult",toolCallId:e,toolName:a,content:[{type:"text",text:s}],isError:!!t.isError,timestamp:r}),n.activeToolId===e&&(n.activeToolId=null,T(n))}return y(n,!0),n.snapshot}case"message_end":return h(n),y(n,!0),n.snapshot;case"agent_end":{h(n),T(n),C(n);let r="string"==typeof t.error?t.error:null;return n.activeToolId=null,n.snapshot={...n.snapshot,phase:r?"error":"completed",isStreaming:!1,streamingMessage:null,statusText:null,error:r},g(e,r?{type:"error",snapshot:n.snapshot}:{type:"completed",snapshot:n.snapshot}),n.snapshot}case"heartbeat":return n.snapshot={...n.snapshot,lastHeartbeatAt:r},n.snapshot;default:return n.snapshot}}(t,e),e.type){case"agent_start":eW(null),eG.current=!0,ei(!0),eJ({kind:"waiting_model"}),eo({type:"start"});break;case"agent_end":eG.current=!1,eB.current?.close(),eB.current=null,ei(!1),eJ(null),e_(null),eo({type:"end"}),t&&(A(t),tg(t,!1,!1,!0),tr.current&&clearTimeout(tr.current),tr.current=setTimeout(()=>{eq.current!==t||eG.current||(A(t),tg(t,!1,!1,!0))},500),fetch(`/api/agent/${encodeURIComponent(t)}`).then(e=>e.json()).then(e=>{e.state?.contextUsage!==void 0&&eM(e.state.contextUsage??null),e.state?.systemPrompt!==void 0&&eA(e.state.systemPrompt??null),e.state?.isCompacting!==void 0&&ej(e.state.isCompacting)}).catch(()=>{})),c?.();break;case"message_start":case"message_update":{if(!eG.current)break;let t=e.message;if(t?.role==="user")break;t&&eo({type:"update",message:a(t)}),eJ(null);break}case"message_end":{if(!eG.current)break;let t=e.message,n="string"==typeof e.__entryId?e.__entryId:null;if(t&&"user"!==t.role){let e=a(t);!(n&&e2.current.includes(n))&&(Q(t=>t.some(t=>(function(e,t){let n=e.timestamp,r=t.timestamp;if("number"!=typeof n||"number"!=typeof r||n!==r||e.role!==t.role)return!1;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}})(t,e))?t:[...t,e]),n&&Y(e=>{if(e.includes(n))return e;let t=[...e,n];return e2.current=t,t}))}eo({type:"reset"}),eJ({kind:"waiting_model"});break}case"replay_gap":t&&(A(t),tg(t,!1,!1,!0));break;case"prompt_done":if(!eG.current)break;tT(eq.current??"","prompt_done");break;case"tool_execution_start":{let t=e.toolCallId,n=e.toolName,r=e.args,a="bash"===n&&"string"==typeof r?.command?r.command:void 0;eJ(e=>{let r=e?.kind==="running_tools"?[...e.tools]:[];return r.some(e=>e.id===t)||r.push({id:t,name:n,args:a}),{kind:"running_tools",tools:r}});break}case"tool_execution_end":{let t=e.toolCallId;eJ(e=>{if(e?.kind!=="running_tools")return e;let n=e.tools.filter(e=>e.id!==t);return 0===n.length?{kind:"waiting_model"}:{kind:"running_tools",tools:n}});break}case"auto_retry_start":e_({attempt:e.attempt,maxAttempts:e.maxAttempts,errorMessage:e.errorMessage});break;case"auto_retry_end":e_(null);break;case"auto_compaction_start":case"compaction_start":ej(!0),eF(null);break;case"auto_compaction_end":case"compaction_end":ej(!1),e.errorMessage?eF(e.errorMessage):!e.aborted&&eq.current&&tg(eq.current)}},[tg,c,tT]);let tb=(0,r.useCallback)(async(e,r,a,i)=>{if(!e.trim()&&!r?.length&&!a?.length||el)return;e8.current+=1;let c=tc(a),p=e.trim()?c?`${e}
5
+
6
+ Attached document text:
7
+
8
+ ${c}`:e:c?`Attached document text:
9
+
10
+ ${c}`:"",m=[],f=F?n:t?.cwd??H?.info?.cwd;if(r?.length&&f)try{m=await l(f,r)}catch(e){eW(e instanceof Error?e.message:String(e));return}let g=m.length?m.map(e=>{var t;return{type:"image",path:e.path,mimeType:e.mimeType,name:e.name,source:{type:"url",url:(t=e.path,`/api/files/${(0,o.HG)(t)}?type=read`),media_type:e.mimeType}}}):r?.map(e=>({type:"image",source:{type:"base64",media_type:e.mimeType,data:e.data}})),h={role:"user",content:g?.length?[...p.trim()?[{type:"text",text:p}]:[],...g]:p,timestamp:Date.now()},y=D(),w=F?null:t?.id??null;w&&A(w);let v=e5.current,C=P(h.content);e3.current.set(y,{localId:y,sessionId:w??"__new__",leafId:v,message:h,createdAt:Date.now(),kind:"prompt",confirmKey:C,confirmCountAtCreate:F?0:C?e4.current.get(C)??0:0}),Q(e=>[...e,h]),eW(null),eG.current=!0,ei(!0),eJ({kind:"waiting_model"}),eo({type:"start"}),eZ.current=!0;let T=ed.find(e=>e.provider===tl?.provider&&e.id===tl?.modelId)?.input,b=!T||0===T.length||T.includes("image")?r?.map(e=>({type:"image",data:e.data,mimeType:e.mimeType})):void 0;try{if(F&&n){ey&&eP(ey);let t=i??tu(),r=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:n,type:"prompt",message:p,toolNames:t,planMode:u,deferPrompt:!0,...b?.length?{images:b}:{},...ey?{provider:ey.provider,modelId:ey.modelId}:{},..."auto"!==ek?{thinkingLevel:ek}:{}})}),a=await r.json().catch(()=>({}));if(!r.ok||a.error||!a.sessionId)throw Error(a.error??`HTTP ${r.status}`);let o=a.sessionId;eq.current=o;let l=e3.current.get(y);l&&(l.sessionId=o),eQ.current?.(),eQ.current=k(o,()=>{eq.current===o&&(ei(!1),eJ(null))}),e6.current=o,await tC(o,{requireConnected:!0,timeoutMs:1e4}),await (0,s.$)(o,{type:"prompt",message:p,toolNames:t,planMode:u,...b?.length?{images:b}:{}}),d?.({id:o,path:"",cwd:n,name:void 0,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:e})}else if(t){let e=i??tu();await td(t.id),eQ.current?.(),eQ.current=k(t.id,()=>{eq.current===t.id&&(ei(!1),eJ(null))}),await tC(t.id,{requireConnected:!0,timeoutMs:1e4}),await (0,s.$)(t.id,{type:"prompt",message:p,toolNames:e,planMode:u,...b?.length?{images:b}:{}})}}catch(t){let e=eq.current;if(e3.current.delete(y),Q(e=>e[e.length-1]===h?e.slice(0,-1):e),console.error("Failed to send message:",t),F&&eq.current){let e=eq.current;eq.current=null,e6.current=null,fetch(`/api/sessions/${encodeURIComponent(e)}`,{method:"DELETE"}).catch(()=>{})}eW(t instanceof Error?t.message:String(t)),eB.current?.close(),eB.current=null,e&&I(e),eG.current=!1,ei(!1),eJ(null),eo({type:"end"})}},[F,n,ey,tu,ek,t,H?.info?.cwd,el,tC,d,tc,u,ed,tl,td]),tk=(0,r.useCallback)(async()=>{let e=eq.current;if(e){eG.current=!1,eW(null),ei(!1),eJ(null),eo({type:"end"}),eB.current?.close(),eB.current=null,I(e),A(e);try{await (0,s.$)(e,{type:"abort"}),await tg(e,!1,!1,!0)}catch(t){console.error("Failed to abort:",t),await tg(e,!1,!1,!0)}}},[tg]),tI=(0,r.useCallback)(async e=>{let t=eq.current;if(t){eR(e);try{let{cancelled:n,newSessionId:r}=await (0,s.$)(t,{type:"fork",entryId:e})??{};!n&&r&&m?.(r)}catch(e){console.error("Fork failed:",e)}finally{eR(null)}}},[m]),tx=(0,r.useCallback)(async e=>{let t=eq.current;t&&(A(t),(0,s.$)(t,{type:"navigate_tree",targetId:e}).catch(()=>{}),z(e),await tw(t,e))},[tw]),t_=(0,r.useCallback)(async e=>{z(e);let t=eq.current;t&&(A(t),await tw(t,e),e&&(0,s.$)(t,{type:"navigate_tree",targetId:e}).catch(()=>{}))},[tw]),tS=(0,r.useCallback)(async(e,t)=>{if(F)return void ta({provider:e,modelId:t});let n=eq.current;if(n)try{var r;eW(null);let a=await (0,s.$)(n,{type:"set_model",provider:e,modelId:t}),o={provider:a.provider,modelId:a.id};a.thinkingLevel&&(r=a.thinkingLevel,"auto"===r||"off"===r||"minimal"===r||"low"===r||"medium"===r||"high"===r||"xhigh"===r)&&eI(a.thinkingLevel),eL(o),J(e=>e?{...e,context:{...e.context,model:o}}:e)}catch(t){let e=t instanceof Error?t.message:String(t);console.error("Failed to set model:",t),eW(e)}},[F,ta]),tM=(0,r.useCallback)(async()=>{let e=eq.current;if(e&&!eU){ej(!0),eF(null);try{await (0,s.$)(e,{type:"compact"}),await tg(e,!0)}catch(e){eF(e instanceof Error?e.message:String(e))}finally{ej(!1)}}},[eU,tg]),t$=(0,r.useCallback)(async(e,t,n)=>{let r=eq.current;if(!r)return;A(r);let a=tc(n),o=e.trim()?a?`${e}
11
+
12
+ Attached document text:
13
+
14
+ ${a}`:e:a?`Attached document text:
15
+
16
+ ${a}`:"",l=ed.find(e=>e.provider===tl?.provider&&e.id===tl?.modelId)?.input,i=!l||0===l.length||l.includes("image")?t?.map(e=>({type:"image",data:e.data,mimeType:e.mimeType})):void 0,u={role:"user",content:`[steer] ${o}`,timestamp:Date.now()},c=D(),d=N(o,i?.length??0);e3.current.set(c,{localId:c,sessionId:r,leafId:e5.current,message:u,createdAt:Date.now(),kind:"steer",confirmKey:d,confirmCountAtCreate:d?e4.current.get(d)??0:0}),Q(e=>[...e,u]);try{await (0,s.$)(r,{type:"steer",message:o,...i?.length?{images:i}:{}})}catch(e){e3.current.delete(c),console.error("Failed to steer:",e)}},[tc,ed,tl]),tA=(0,r.useCallback)(async(e,t,n)=>{let r=eq.current;if(!r)return;A(r);let a=tc(n),o=e.trim()?a?`${e}
17
+
18
+ Attached document text:
19
+
20
+ ${a}`:e:a?`Attached document text:
21
+
22
+ ${a}`:"",l=ed.find(e=>e.provider===tl?.provider&&e.id===tl?.modelId)?.input,i=!l||0===l.length||l.includes("image")?t?.map(e=>({type:"image",data:e.data,mimeType:e.mimeType})):void 0,u={role:"user",content:o,timestamp:Date.now()},c=D(),d=N(o,i?.length??0);e3.current.set(c,{localId:c,sessionId:r,leafId:e5.current,message:u,createdAt:Date.now(),kind:"follow_up",confirmKey:d,confirmCountAtCreate:d?e4.current.get(d)??0:0}),Q(e=>[...e,u]);try{await (0,s.$)(r,{type:"follow_up",message:o,...i?.length?{images:i}:{}})}catch(e){e3.current.delete(c),console.error("Failed to follow up:",e)}},[tc,ed,tl]),tE=(0,r.useCallback)(async()=>{let e=eq.current;if(e)try{await (0,s.$)(e,{type:"abort_compaction"})}catch(e){console.error("Failed to abort compaction:",e)}},[]),tR=(0,r.useCallback)(async e=>{if(eI(e),"auto"===e)return;let t=eq.current;if(t)try{await (0,s.$)(t,{type:"set_thinking_level",level:e})}catch(e){console.error("Failed to set thinking level:",e)}},[]),tD=(0,r.useCallback)(async e=>{ts(e);let t=(0,E.tE)(e,eT),n=eq.current;if(n)try{await (0,s.$)(n,{type:"set_tools",toolNames:t})}catch(e){console.error("Failed to set tools:",e)}},[eT,ts]),tL=(0,r.useCallback)(async e=>{to(e);let t=(0,E.tE)(ev,e),n=eq.current;if(n)try{await (0,s.$)(n,{type:"set_tools",toolNames:t})}catch(e){console.error("Failed to set memory tools:",e)}},[to,ev]),tN=(0,r.useCallback)((e="smooth")=>{e0.current?.scrollIntoView({behavior:e})},[]),tP=(0,r.useCallback)(()=>{let e=e1.current,t=eY.current;if(!e||!t)return;let n=t.getBoundingClientRect().top-e.getBoundingClientRect().top+e.scrollTop;e.scrollTo({top:n-16,behavior:"smooth"})},[]);return(0,r.useEffect)(()=>{if(t){var e;let n;if(eq.current=t.id,t.id===e6.current)return e6.current=null,()=>{tr.current&&clearTimeout(tr.current),tr.current=null,eB.current?.close(),eB.current=null,eQ.current?.(),eQ.current=null};te.current=!1,e7.current=0;let r=(e=t.id,(n=p().get(e))&&"idle"!==n.snapshot.phase?n.snapshot:null);r?.phase==="active"&&(eG.current=!0,ei(!0),eJ({kind:"waiting_model"}),eo({type:"start"})),(async()=>{let e=await tg(t.id,!0,!0,!0);eq.current===t.id&&(await tv(t.id),e?.running?(eG.current=!0,ei(!0),eJ({kind:"waiting_model"}),eo({type:"start"}),tC(t.id,{replay:!0}),eQ.current?.(),eQ.current=k(t.id,()=>{eq.current===t.id&&eV.current?.(t.id,"stream_watchdog")})):r?.phase==="active"&&(eG.current=!1,ei(!1),eJ(null),eo({type:"end"}),I(t.id)),e?.state&&(void 0!==e.state.isCompacting&&ej(e.state.isCompacting),void 0!==e.state.contextUsage&&eM(e.state.contextUsage??null),void 0!==e.state.systemPrompt&&eA(e.state.systemPrompt??null),void 0!==e.state.thinkingLevel&&eI(e.state.thinkingLevel??"auto"),void 0!==e.state.planMode&&O?.(e.state.planMode)))})()}return()=>{e6.current&&eq.current===e6.current||(tr.current&&clearTimeout(tr.current),tr.current=null,eB.current?.close(),eB.current=null,eQ.current?.(),eQ.current=null)}},[tC,tg,tv,_,O,t]),(0,r.useEffect)(()=>{let e=()=>{let e=eq.current;e&&tT(e,"foreground")},t=()=>{"visible"===document.visibilityState&&e()};return document.addEventListener("visibilitychange",t),window.addEventListener("focus",e),window.addEventListener("online",e),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("focus",e),window.removeEventListener("online",e)}},[tT]),(0,r.useEffect)(()=>{let e=eq.current;if(!e)return;tt.current=!1;let t=new EventSource("/api/agent/running/events");return t.onmessage=t=>{try{let n=JSON.parse(t.data);if("running"!==n.type)return;let r=(n.runningSessionIds??[]).includes(e),a=tt.current;tt.current=r,r&&!eG.current?(A(e),tT(e,"running_feed_start")):r||!a||eG.current||(A(e),tg(e,!1,!1,!0))}catch{}},()=>t.close()},[tg,tT,t?.id]),(0,r.useEffect)(()=>{let e=window.setInterval(()=>{let e=eq.current;e&&(eG.current?tT(e,"interval"):Date.now()-tn.current>=3e4?(tn.current=Date.now(),A(e),tg(e,!1,!1,!0)):tg(e))},15e3);return()=>window.clearInterval(e)},[tg,tT]),(0,r.useEffect)(()=>{_&&_(H?.tree??[],G,t_)},[H?.tree,G,t_,_]),(0,r.useEffect)(()=>{V.length>0&&!e9.current&&(eZ.current?(eZ.current=!1,eX.current=!0,tP()):eX.current?eG.current||tN("smooth"):(eX.current=!0,tN("instant")))},[V.length,el,tN,tP]),(0,r.useEffect)(()=>{fetch("/api/models").then(e=>e.json()).then(e=>{if(ec(e.models),e.thinkingLevels&&ef(e.thinkingLevels),e.thinkingLevelMaps&&eh(e.thinkingLevelMaps),e.modelList&&(ep(e.modelList),F&&e.modelList.length>0)){let t=e.defaultModel,n=t&&e.modelList.find(e=>e.id===t.modelId&&e.provider===t.provider);ta(n?{provider:n.provider,modelId:n.id}:{provider:e.modelList[0].provider,modelId:e.modelList[0].id})}}).catch(()=>{})},[F,w,ta]),(0,r.useEffect)(()=>{if(!eO)return;let e=setTimeout(()=>eF(null),3e3);return()=>clearTimeout(e)},[eO]),{data:H,loading:K,error:B,activeLeafId:G,messages:V,entryIds:X,streamState:es,agentRunning:el,modelNames:eu,modelList:ed,modelThinkingLevels:em,modelThinkingLevelMaps:eg,newSessionModel:ey,toolPreset:ev,memoryTools:eT,thinkingLevel:ek,retryInfo:ex,contextUsage:eS,systemPrompt:e$,forkingEntryId:eE,isCompacting:eU,compactError:eO,currentModel:tl,displayModel:ti,sessionStats:tp,agentPhase:eH,agentError:eK,isNew:F,sessionIdRef:eq,sseReaderRef:eB,messagesEndRef:e0,scrollContainerRef:e1,lastUserMsgRef:eY,pendingScrollToUserRef:eZ,initialScrollDoneRef:eX,handleSend:tb,handleAbort:tk,handleFork:tI,handleNavigate:tx,handleModelChange:tS,handleCompact:tM,handleSteer:t$,handleFollowUp:tA,handleAbortCompaction:tE,handleToolPresetChange:tD,handleMemoryToolsChange:tL,handleThinkingLevelChange:tR,loadTools:tv,setActiveLeafId:z,setData:J,setMessages:Q,dispatch:eo,setAgentRunning:ei,setForkingEntryId:eR,loadMoreMessages:ty,hasMoreMessages:et,totalMessages:Z,loadedMessagesCount:er,handleAgentEventRef:ez}}},32383:(e,t,n)=>{n.d(t,{$:()=>r});async function r(e,t){let n=await fetch(`/api/agent/${encodeURIComponent(e)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok||r.error)throw Error(r.error??`HTTP ${n.status}`);return r.data}}}]);