@seqyuan/annovibe 0.8.127 → 0.8.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +12 -12
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/agent/runtime/route.js +1 -1
- package/.next/server/app/api/internal/runtime/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +1 -1
- package/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/page.js +7 -7
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/smoke/page_client-reference-manifest.js +1 -1
- package/.next/server/app/smoke/session-stream/page.js +2 -2
- package/.next/server/app/smoke/session-stream/page_client-reference-manifest.js +1 -1
- package/.next/server/app/smoke/session-stream.html +1 -1
- package/.next/server/app/smoke/session-stream.rsc +2 -2
- package/.next/server/app/smoke/session-stream.segments/_full.segment.rsc +2 -2
- package/.next/server/app/smoke/session-stream.segments/_head.segment.rsc +1 -1
- package/.next/server/app/smoke/session-stream.segments/_index.segment.rsc +1 -1
- package/.next/server/app/smoke/session-stream.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/smoke/session-stream.segments/smoke/session-stream/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/smoke/session-stream.segments/smoke/session-stream.segment.rsc +1 -1
- package/.next/server/app/smoke/session-stream.segments/smoke.segment.rsc +1 -1
- package/.next/server/app/smoke.html +2 -2
- package/.next/server/app/smoke.rsc +2 -2
- package/.next/server/app/smoke.segments/_full.segment.rsc +2 -2
- package/.next/server/app/smoke.segments/_head.segment.rsc +1 -1
- package/.next/server/app/smoke.segments/_index.segment.rsc +1 -1
- package/.next/server/app/smoke.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/smoke.segments/smoke/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/smoke.segments/smoke.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +12 -12
- package/.next/server/chunks/4584.js +1 -1
- package/.next/server/chunks/6429.js +1 -1
- package/.next/server/chunks/9230.js +22 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{4456-544da31731420516.js → 4456-3e2863e213864ce5.js} +2 -2
- package/.next/static/chunks/9544-fc173153bf9a575d.js +22 -0
- package/.next/static/chunks/app/{page-47768d973404df4a.js → page-905f53fdfa9cbdec.js} +10 -10
- package/.next/static/chunks/app/smoke/session-stream/page-49b8cf27895b9187.js +6 -0
- package/package.json +1 -1
- package/.next/server/chunks/6021.js +0 -22
- package/.next/static/chunks/247-e7ca091442e14538.js +0 -22
- package/.next/static/chunks/app/smoke/session-stream/page-a23f9377f8e17097.js +0 -6
- /package/.next/static/{jahqJW2HnEM4LGyEqWETC → LF3LbyuiKcXfmy2RL4aAK}/_buildManifest.js +0 -0
- /package/.next/static/{jahqJW2HnEM4LGyEqWETC → LF3LbyuiKcXfmy2RL4aAK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8982],{18416:(e,t,n)=>{Promise.resolve().then(n.bind(n,77593))},77593:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>g});var s=n(95155),o=n(12115),r=n(9544),i=n(94456);let a="session-stream-smoke",d={role:"user",content:"baseline",timestamp:1},l={role:"assistant",content:[{type:"text",text:"remote completion"}],provider:"smoke",model:"smoke-model",timestamp:2},m={role:"assistant",content:[{type:"text",text:"remote progress before conflict"}],provider:"smoke",model:"smoke-model",timestamp:3},c={role:"assistant",content:[],provider:"smoke",model:"smoke-model",stopReason:"error",errorMessage:"stream_read_error",timestamp:2},u={id:a,path:"/tmp/session-stream-smoke.jsonl",cwd:"/tmp/annovibe-session-stream-smoke",created:new Date(0).toISOString(),modified:new Date(0).toISOString(),messageCount:1,firstMessage:"baseline"};function p(e,t=200){return new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":"application/json"}})}function h(){let e=(0,r.T)({session:u,newSessionCwd:null}),t=e.messages.filter(e=>"assistant"===e.role).length,n=(0,o.useRef)(0),[a,d]=(0,o.useState)(!1),l=e.messages.filter(e=>"user"===e.role&&"concurrent prompt"===e.content).length,m=e.agentPhase?.kind??"idle";return(0,o.useEffect)(()=>{t<n.current?d(!0):n.current=t},[t]),(0,s.jsxs)("main",{style:{padding:24,fontFamily:"sans-serif"},children:[(0,s.jsx)("h1",{children:"Session stream smoke"}),(0,s.jsx)("div",{"data-smoke-running":e.agentRunning?"true":"false",children:e.agentRunning?"running":"idle"}),(0,s.jsx)("div",{"data-smoke-message-count":e.messages.length,children:e.messages.length}),(0,s.jsx)("div",{"data-smoke-assistant-count":t,children:t}),(0,s.jsx)("div",{"data-smoke-assistant-regressed":a?"true":"false",children:a?"regressed":"stable"}),(0,s.jsx)("div",{"data-smoke-conflict-optimistic-count":l,children:l}),(0,s.jsx)("div",{"data-smoke-error":e.agentError??"none",children:e.agentError??"none"}),(0,s.jsx)("div",{"data-smoke-phase":m,children:m}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteStart(),children:"Remote start"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteToolStart(),children:"Remote tool start"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFinish(),children:"Remote finish"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFinishWithStaleRead(),children:"Remote finish with stale read"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFail(),children:"Remote fail"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remotePromptError(),children:"Prompt error"}),(0,s.jsx)("button",{type:"button",onClick:()=>{window.__sessionStreamSmoke?.prepareConcurrentPrompt(),e.handleSend("concurrent prompt")},children:"Concurrent prompt"}),(0,s.jsx)("section",{style:{marginTop:24,maxWidth:760},children:e.messages.map((e,t)=>(0,s.jsx)(i.D,{message:e},t))})]})}function g(){let[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!0);return(0,o.useEffect)(()=>{let e=window.fetch.bind(window),n=window.EventSource,s=!1,o=!1,r=null,i="idle",h=[],g=[d],S=["entry-user"],w=0,f=new Set,k=new Set,y=new TextEncoder;class _{static{this.CONNECTING=0}static{this.OPEN=1}static{this.CLOSED=2}static{this.instances=new Set}constructor(e){this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,this.withCredentials=!1,this.readyState=1,this.onopen=null,this.onmessage=null,this.onerror=null,this.url=String(e),_.instances.add(this),window.setTimeout(()=>{this.onopen?.call(this,new Event("open")),this.emitRunning()},0)}close(){this.readyState=2,_.instances.delete(this)}addEventListener(){}removeEventListener(){}dispatchEvent(){return!0}emitRunning(){1===this.readyState&&this.url.includes("/api/agent/running/events")&&this.onmessage?.call(this,new MessageEvent("message",{data:JSON.stringify({type:"running",runningSessionIds:s?[a]:[]})}))}}let b=()=>{let e=s?[a]:[];for(let t of f)t(e);for(let e of _.instances)e.emitRunning()},v=(e,t)=>{let n=y.encode(`id: ${e}
|
|
2
|
+
data: ${JSON.stringify(t)}
|
|
3
|
+
|
|
4
|
+
`);for(let e of k)e.enqueue(n)};return window.fetch=async(t,n)=>{let l="string"==typeof t?t:t instanceof URL?t.toString():t.url,c=n?.method??"GET";if(l.includes(`/api/agent/${a}/events`)){let e=null;return new Response(new ReadableStream({start(t){e=t,k.add(t),t.enqueue(y.encode(`data: ${JSON.stringify({type:"connected",sessionId:a})}
|
|
5
|
+
|
|
6
|
+
`))},cancel(){e&&k.delete(e),e=null}}),{headers:{"Content-Type":"text/event-stream"}})}if(l.includes(`/api/sessions/${a}`)){let e=w>0;e&&(w-=1);let t=e?[d]:g,n=e?["entry-user"]:S;return e&&await new Promise(e=>window.setTimeout(e,75)),p({sessionId:a,filePath:u.path,info:u,tree:[],leafId:n[n.length-1]??null,context:{messages:t,entryIds:n,thinkingLevel:"off",model:{provider:"smoke",modelId:"smoke-model"}},totalMessages:t.length,hasMore:!1,agentState:{running:s,state:{isStreaming:"streaming"===i,isCompacting:!1,phase:i,activeTools:h,thinkingLevel:"off",contextUsage:null}}})}if(l.endsWith(`/api/agent/${a}`)&&"GET"===c)return p({running:s,state:{isStreaming:"streaming"===i,isCompacting:!1,phase:i,activeTools:h,thinkingLevel:"off",contextUsage:null}});if(l.endsWith(`/api/agent/${a}/prepare`)&&"POST"===c)return p({ok:!0,sessionId:a});if(l.endsWith(`/api/agent/${a}`)&&"POST"===c){let e=JSON.parse(String(n?.body??"{}"));return("prompt"===e.type&&(r=e),"prompt"===e.type&&o)?(o=!1,g=[...g,m],S=[...S,"entry-assistant-conflict"],v("smoke-epoch:conflict",{type:"message_end",message:m,__entryId:"entry-assistant-conflict"}),p({error:"Session is already processing",code:"SESSION_BUSY"},409)):p({success:!0,data:"get_tools"===e.type?[]:null})}return"/api/models"===l||l.endsWith("/api/models")?p({models:{"smoke:smoke-model":"Smoke model"},modelList:[{id:"smoke-model",name:"Smoke model",provider:"smoke"}],defaultModel:{provider:"smoke",modelId:"smoke-model"}}):e(t,n)},Object.defineProperty(window,"EventSource",{configurable:!0,writable:!0,value:_}),window.__annovibeRunningSessionSubscribe=e=>(f.add(e),e(s?[a]:[]),()=>f.delete(e)),window.__sessionStreamSmoke={remoteStart(){s=!0,i="waiting_model",h=[],b()},remoteToolStart(){s=!0,i="running_tools",h=[{id:"tool-background",name:"bash"}],b()},remoteFinish(){g=[d,l],S=["entry-user","entry-assistant"],s=!1,i="idle",h=[],v("smoke-epoch:1",{type:"message_end",message:l,__entryId:"entry-assistant"}),v("smoke-epoch:2",{type:"agent_end"}),b()},remoteFinishWithStaleRead(){g=[d,l],S=["entry-user","entry-assistant"],w=1,s=!1,i="idle",h=[],v("smoke-epoch:stale:1",{type:"message_end",message:l,__entryId:"entry-assistant"}),v("smoke-epoch:stale:2",{type:"agent_end"}),b()},remoteFail(){g=[d,c],S=["entry-user","entry-assistant-error"],s=!1,i="idle",h=[],v("smoke-epoch:error:1",{type:"message_end",message:c,__entryId:"entry-assistant-error"}),v("smoke-epoch:error:2",{type:"agent_end"}),b()},remotePromptError(){s=!1,i="idle",h=[],v("smoke-epoch:prompt-error",{type:"prompt_error",error:"No API key configured for smoke provider"}),b()},prepareConcurrentPrompt(){s=!0,i="waiting_model",h=[],o=!0},streamCount:()=>k.size,lastPromptModel:()=>r?.provider&&r.modelId?`${r.provider}/${r.modelId}`:null},t(!0),()=>{for(let t of(delete window.__sessionStreamSmoke,delete window.__annovibeRunningSessionSubscribe,f.clear(),window.fetch=e,Object.defineProperty(window,"EventSource",{configurable:!0,writable:!0,value:n}),k))try{t.close()}catch{}k.clear()}},[]),e?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",onClick:()=>r(e=>!e),children:n?"Switch away":"Switch back"}),n?(0,s.jsx)(h,{}):(0,s.jsx)("div",{"data-smoke-switched-away":!0,children:"away"})]}):null}}},e=>{e.O(0,[7330,2941,2995,2693,4456,9544,8441,3794,7358],()=>e(e.s=18416)),_N_E=e.O()}]);
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=6021,exports.ids=[6021],exports.modules={29947:(a,b,c)=>{c.d(b,{ES:()=>m,IB:()=>n,SN:()=>e,tE:()=>o,xG:()=>l});let d="subagent",e=["retain","recall","reflect"],f=[],g=["read","bash","edit","write"],h=["bash","read","edit","write","grep","find","ls"],i=[...h,"kernel_plot_run","kernel_plot_render","kernel_plot_inspect","kernel_plot_stop","kernel_plot_artifacts"],j=[...h,d];function k(a){return[...a].sort().join(",")}function l(a){switch(a){case"none":return f;case"default":return g;case"workbench":return i;case"agent":return j;default:return h}}function m(a){let b=a.filter(a=>a.active).map(a=>a.name),c=b.filter(a=>!e.includes(a)),f=k(b),l=k(c);return""===f?"none":f===k(g)?"default":f===k(h)?"full":f===k(i)?"workbench":f===k(j)?"agent":""===l?"none":l===k(g)?"default":l===k(h)?"full":l===k(i)?"workbench":l===k(j)||b.includes(d)?"agent":"default"}function n(a){return e.filter(b=>a.some(a=>a.active&&a.name===b))}function o(a,b){return[...new Set([...l(a),...b])]}},81537:(a,b,c)=>{c.d(b,{O:()=>k});let d=new Set,e=null,f=null,g=null,h=null,i=null,j=!1;function k(a){return d.add(a),e&&a(e),()=>{if(d.delete(a),0===d.size&&j){if(j=!1,h&&clearTimeout(h),h=null,g&&(clearInterval(g),g=null),i?.(),i=null,f){try{f.port.postMessage({type:"disconnect"})}catch{}try{f.port.close()}catch{}}f=null,e=null}}}},86021:(a,b,c)=>{c.d(b,{T:()=>P});var d=c(67484);function e(a){if("assistant"!==a.role)return a;let b=a.content;if(!Array.isArray(b))return a;let c=b.map(a=>("object"!=typeof a||null===a||Array.isArray(a)||"toolCall"!==a.type?null:{type:"toolCall",toolCallId:"string"==typeof a.toolCallId?a.toolCallId:"string"==typeof a.id?a.id:"",toolName:"string"==typeof a.toolName?a.toolName:"string"==typeof a.name?a.name:"",input:"object"!=typeof a.input||null===a.input||Array.isArray(a.input)?"object"!=typeof a.arguments||null===a.arguments||Array.isArray(a.arguments)?{}:a.arguments:a.input})??a);return{...a,content:c}}class f extends Error{constructor(a,b,c){super(a),this.status=b,this.code=c,this.name="AgentCommandError"}}async function g(a,b){let c=await fetch(`/api/agent/${encodeURIComponent(a)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json().catch(()=>({}));if(!c.ok||d.error)throw new f(d.error??`HTTP ${c.status}`,c.status,d.code);return d.data}var h=c(31343);async function i(a,b){if(!b.length)return[];let c=await fetch("/api/images/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:a,images:b.map(a=>({data:a.data,mimeType:a.mimeType,name:a.name}))})}),d=await c.json().catch(()=>({}));if(!c.ok||d.error)throw Error(d.error??`Upload failed (HTTP ${c.status})`);return(d.uploaded??[]).map((a,c)=>({...a,previewUrl:b[c]?.previewUrl}))}async function j(a,b,c){let d,e=new TextDecoder,f="",g=a=>{if(a.startsWith("id: ")){d=a.slice(4);return}if(!a.startsWith("data: "))return;let c=a.slice(6);if("[DONE]"!==c)try{b(c,d)}catch{}finally{d=void 0}},h=new Promise(a=>{c?.aborted?a():c?.addEventListener("abort",()=>a(),{once:!0})});for(;;){let b=await Promise.race([a.read(),h.then(()=>({done:!0,value:void 0}))]);if(b.done)break;let c=(f+=e.decode(b.value,{stream:!0})).split("\n");for(let a of(f=c.pop()||"",c))g(a)}if(f.trim())for(let a of f.split("\n"))g(a)}c(81537);let k="__annovibeStreamSessions__",l="__annovibeStreamListeners__",m="__annovibeStreamErrorCallbacks__";function n(){let a=globalThis;return a[k]||(a[k]=new Map),a[k]}function o(){let a=globalThis;return a[m]||(a[m]=new Map),a[m]}function p(a){return{sessionId:a,phase:"idle",startedAt:null,lastEventAt:null,lastHeartbeatAt:null,reconnectCount:0,lastSyncReason:null,accumulatedText:"",toolCalls:[],toolResults:[],statusText:null,streamingMessage:null,isStreaming:!1,error:null}}function q(a,b){let c;for(let d of(!(c=globalThis)[l]&&(c[l]=new Map),c[l]).get(a)??[])try{d(b)}catch{}}function r(a){a.textThrottleTimer&&(clearTimeout(a.textThrottleTimer),a.textThrottleTimer=null),a.textDirty&&(a.textDirty=!1,t(a))}function s(a,b=!1){let c=Date.now();if(a.snapshot.lastEventAt=c,!b){a.textDirty=!0,a.textThrottleTimer||(a.textThrottleTimer=setTimeout(()=>{a.textThrottleTimer=null,a.textDirty&&(a.textDirty=!1,t(a))},100));return}r(a),t(a)}function t(a,b){let c=Date.now(),d=function(a){let b=[];for(let c of a.toolCalls.values())b.push({type:"toolCall",toolCallId:c.toolCallId,toolName:c.toolName,input:c.input??{}});let c=a.accumulatedText.trim();return c&&b.push({type:"text",text:c}),b}(a),e=(b??a.snapshot.phase)==="active";a.snapshot={...a.snapshot,phase:b??a.snapshot.phase,lastEventAt:c,accumulatedText:a.accumulatedText,toolCalls:[...a.toolCalls.values()],toolResults:[...a.toolResults.values()],statusText:e?function(a){if(a.activeToolId){let b=a.toolCalls.get(a.activeToolId);if(b){let a=Math.max(0,Math.floor((Date.now()-b.startedAt)/1e3));return`Running ${b.toolName||"tool"}… (${a}s)`}}return a.accumulatedText.trim()?"Generating response…":a.toolCalls.size>0?"Finishing tool results…":null}(a):a.snapshot.statusText,streamingMessage:e&&d.length>0?{role:"assistant",content:d}:null,isStreaming:e},q(a.snapshot.sessionId,{type:"snapshot-updated",snapshot:a.snapshot})}function u(a){v(a),a.idleCheckTimer=setInterval(()=>{if("connected"!==a.connectionState)return;let b=Math.max(a.snapshot.lastEventAt??0,a.snapshot.lastHeartbeatAt??0);if(Date.now()-b>=18e4){w(a),r(a);let b="Stream idle timeout — no activity for 180s.";a.snapshot={...a.snapshot,phase:"error",isStreaming:!1,streamingMessage:null,statusText:null,error:b},v(a),q(a.snapshot.sessionId,{type:"error",snapshot:a.snapshot});let c=o().get(a.snapshot.sessionId);if(c)try{c(a.snapshot.sessionId,b)}catch{}}},1e4)}function v(a){a.idleCheckTimer&&(clearInterval(a.idleCheckTimer),a.idleCheckTimer=null)}function w(a){a.toolProgressTimer&&(clearInterval(a.toolProgressTimer),a.toolProgressTimer=null)}function x(a){let b=n(),c=b.get(a);return c||(c={snapshot:p(a),accumulatedText:"",toolCalls:new Map,toolResults:new Map,toolProgressTimer:null,activeToolId:null,textThrottleTimer:null,textDirty:!1,connectionState:"idle",idleCheckTimer:null},b.set(a,c)),c}function y(a,b){let c=o();return c.set(a,b),()=>{c.get(a)===b&&c.delete(a)}}function z(a){let b=n(),c=b.get(a);c&&(w(c),v(c),r(c)),b.delete(a)}function A(a){let b=n().get(a);b&&(b.snapshot={...b.snapshot,reconnectCount:b.snapshot.reconnectCount+1,lastSyncReason:"sse-reconnect",lastEventAt:Date.now()},s(b,!0))}let B="__annovibeSessionMessageCache__";function C(){let a=globalThis;if(!a[B]){var b;let c={entries:new Map,cleanupTimer:null};a[B]=c,(b=c).cleanupTimer||(b.cleanupTimer=setInterval(()=>{let a=Date.now();for(let[c,d]of b.entries)a-d.loadedAt>72e5&&b.entries.delete(c)},6e4))}return a[B]}function D(a){let b=C(),c=b.entries.get(a);return c?Date.now()-c.loadedAt>72e5?(b.entries.delete(a),null):(c.loadedAt=Date.now(),{...c,messages:[...c.messages],entryIds:[...c.entryIds]}):null}function E(a,b,c,d,e){let f=C(),g=f.entries.get(a);if(!g)return;let h=new Set(g.entryIds),i=[],j=[];for(let a=0;a<b.length;a++){let d=c[a];d&&!h.has(d)&&(i.push(b[a]),j.push(d))}0!==i.length&&f.entries.set(a,{...g,messages:[...i,...g.messages],entryIds:[...j,...g.entryIds],hasMore:d,loadedMessagesCount:e,loadedAt:Date.now()})}function F(a){C().entries.delete(a)}var G=c(29947);function H(a,b){switch(b.type){case"start":return{isStreaming:!0,streamingMessage:null};case"update":return{isStreaming:!0,streamingMessage:b.message};case"end":case"reset":return{isStreaming:!1,streamingMessage:null};default:return a}}function I(a,b){return new DOMException(a,b)}function J(){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)}`}function K(a,b){return a.trim()||0!==b?`text:${a}|images:${b}`:null}function L(a){return"string"==typeof a?K(a,0):Array.isArray(a)?K(a.filter(a=>!!a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n"),a.filter(a=>!!a&&"object"==typeof a&&"image"===a.type).length):null}function M(a){let b=new Map;for(let c of a){let a="user"!==c.role?null:L(c.content);a&&b.set(a,(b.get(a)??0)+1)}return b}function N(a,b,c){return a.sessionId===b&&(!a.leafId||c.includes(a.leafId))}function O(a,b){let c=a.timestamp,d=b.timestamp;if("number"!=typeof c||"number"!=typeof d||c!==d||a.role!==b.role)return!1;try{return JSON.stringify(a)===JSON.stringify(b)}catch{return!1}}function P(a){let{session:b,newSessionCwd:c,onAgentEnd:k,onSessionCreated:l,onSessionForked:m,modelsRefreshKey:o,onBranchDataChange:t}=a,B=null===b&&null!==c,[P,Q]=(0,d.useState)(null),[R,S]=(0,d.useState)(!B),[T,U]=(0,d.useState)(null),[V,W]=(0,d.useState)(null),[X,Y]=(0,d.useState)([]),[Z,$]=(0,d.useState)([]),[_,aa]=(0,d.useState)(0),[ab,ac]=(0,d.useState)(!1),[ad,ae]=(0,d.useState)(0),[af,ag]=(0,d.useReducer)(H,{isStreaming:!1,streamingMessage:null}),[ah,ai]=(0,d.useState)(!1),[aj,ak]=(0,d.useState)({}),[al,am]=(0,d.useState)([]),[an,ao]=(0,d.useState)({}),[ap,aq]=(0,d.useState)({}),[ar,as]=(0,d.useState)(null),[at,au]=(0,d.useState)("full"),[av,aw]=(0,d.useState)([...G.SN]),[ax,ay]=(0,d.useState)("auto"),[az,aA]=(0,d.useState)(null),[aB,aC]=(0,d.useState)(null),[aD,aE]=(0,d.useState)(null),[aF,aG]=(0,d.useState)(null),[aH,aI]=(0,d.useState)(null),[aJ,aK]=(0,d.useState)(null),[aL,aM]=(0,d.useState)(!1),[aN,aO]=(0,d.useState)(null),[aP,aQ]=(0,d.useState)(null),[aR,aS]=(0,d.useState)(null),[aT,aU]=(0,d.useState)(null),aV=(0,d.useRef)(null),aW=(0,d.useRef)(b?.id??null),aX=(0,d.useRef)(!1),aY=(0,d.useRef)(null),aZ=(0,d.useRef)(null),a$=(0,d.useRef)(null),a_=(0,d.useRef)(!1),a0=(0,d.useRef)(null),a1=(0,d.useRef)(!1),a2=(0,d.useRef)(null),a3=(0,d.useRef)(null),a4=(0,d.useRef)(new Map),a5=(0,d.useRef)(new Map),a6=(0,d.useRef)(new Map),a7=(0,d.useRef)(null),a8=(0,d.useRef)([]),a9=(0,d.useRef)(null),ba=(0,d.useRef)(0),bb=(0,d.useRef)(!1),bc=(0,d.useRef)(0),bd=(0,d.useRef)(!1);(0,d.useRef)(!1),(0,d.useRef)(0);let be=(0,d.useRef)(null),bf=(0,d.useRef)(null),bg=(0,d.useRef)(0);(0,d.useRef)(!1);let bh=a.setNewSessionModel??as,bi=a.setToolPreset??au,bj=a.setMemoryTools??aw,bk=aH??P?.context.model??aJ??null,bl=B?ar:bk,bm=(0,d.useCallback)(()=>(0,G.tE)(at,av),[av,at]),bn=(0,d.useCallback)(a=>a?.length?a.map((a,b)=>{let c=`Attachment ${b+1}: ${a.fileName} (${a.mimeType||"application/octet-stream"}, ${a.size} bytes)`;if(a.extractedText){let b=a.truncated?"\n[The extracted text was truncated before sending.]":"";return`${c}
|
|
2
|
-
${b}
|
|
3
|
-
${a.extractedText}`.trim()}return`${c}
|
|
4
|
-
[Text extraction unavailable: ${a.extractionError??"unsupported file type"}]`}).join("\n\n---\n\n"):"",[]),bo=(0,d.useCallback)(async a=>{let b=await fetch(`/api/agent/${encodeURIComponent(a)}/prepare`,{method:"POST"});if(!b.ok)throw Error((await b.json().catch(()=>({}))).error??`Failed to prepare session (HTTP ${b.status})`)},[]),bp=(()=>{let a={input:0,output:0,cacheRead:0,cacheWrite:0},b=0;for(let c of X){if("assistant"!==c.role)continue;let d=c.usage;d&&(a.input+=d.input??0,a.output+=d.output??0,a.cacheRead+=d.cacheRead??0,a.cacheWrite+=d.cacheWrite??0,b+=d.cost?.total??0)}return a.input+a.output+a.cacheRead+a.cacheWrite>0?{tokens:a,cost:b}:null})(),bq=(0,d.useRef)(!1),br=(0,d.useCallback)(async()=>{let a=aW.current;if(!a||bq.current||bd.current)return;bq.current=!0,bb.current=!0;let b=0,c=D(a);b=c?c.loadedMessagesCount:50;try{for(;;)try{let c=await fetch(`/api/sessions/${encodeURIComponent(a)}?limit=100&offset=${b}`);if(!c.ok)break;let d=await c.json();if(aW.current!==a)break;let e=d.context.messages,f=d.context.entryIds??[];if(0===e.length)break;Y(a=>[...e,...a]),$(a=>{let b=[...f,...a];return a8.current=b,b});let g=b+e.length;if(ae(g),bc.current=g,ac(d.hasMore??!1),E(a,e,f,d.hasMore??!1,g),b=g,!d.hasMore)break;await new Promise(a=>setTimeout(a,800))}catch{break}}finally{bq.current=!1,bd.current=!0,bb.current=!1}},[]),bs=(0,d.useCallback)(async(a,b=!1,c=!1,d=!1)=>{var e;let f=null;try{if(b&&S(!0),!c&&!aX.current&&!d){let c=D(a);if(c)return aa(c.totalMessages),ac(c.hasMore),ae(c.loadedMessagesCount),Y(c.messages),a8.current=c.entryIds,$(c.entryIds),a7.current=c.leafId,W(c.leafId),bc.current=c.loadedMessagesCount,b&&S(!1),c.hasMore&&!bd.current&&setTimeout(()=>{br()},1500),null}let g=c?`/api/sessions/${encodeURIComponent(a)}?includeState`:`/api/sessions/${encodeURIComponent(a)}?limit=50&offset=0`,h=bf.current;if(h?.sid===a&&!b)return null;h?.controller.abort(I("Session load superseded","AbortError"));let i=new AbortController;f=i,bf.current={sid:a,controller:i};let j=setTimeout(()=>{i.abort(I("Session load timed out after 30 seconds","TimeoutError"))},3e4),k=await fetch(g,{signal:i.signal}).finally(()=>clearTimeout(j));if(aW.current&&aW.current!==a)return null;if(404===k.status)return b&&(Q(null),a7.current=null,W(null),Y([]),U(null)),null;if(!k.ok)throw Error(`HTTP ${k.status}`);let l=await k.json();c?(aa(l.totalMessages??l.context.messages.length),ac(!1)):(aa(l.totalMessages??l.context.messages.length),ac(l.hasMore??!1)),ae(l.context.messages.length),Q(l),a7.current=l.leafId,W(l.leafId);let m=l.context.messages,n=M(m),o=new Map,p=Date.now();for(let[b,c]of a4.current)if(c.sessionId===a){if(p-c.createdAt>12e4){a4.current.delete(b);continue}if(c.confirmKey){let a=n.get(c.confirmKey)??0,d=o.get(c.confirmKey)??0;a-d>c.confirmCountAtCreate&&(a4.current.delete(b),o.set(c.confirmKey,d+1))}}a5.current=n;let q=l.context.entryIds??[],r=[...a4.current.values()].filter(b=>N(b,a,q)).map(a=>a.message),s=r.length>0?[...m,...r]:m,t=a6.current.get(a);if(t){for(let[a,b]of t)p-b>12e4&&t.delete(a);0===t.size&&a6.current.delete(a)}let u=t?.size?t:null,v=u?new Set(q):null,w=!!u&&!!v&&[...u.keys()].some(a=>!v.has(a));u&&v&&!w&&a6.current.delete(a);let x=s.length;return!c&&(bc.current>x||w)?(aa(l.totalMessages??l.context.messages.length),ac(l.hasMore??!1)):(Y(a=>(function(a,b){if(a.length!==b.length)return b;let c=!1,d=b.map((b,d)=>O(a[d],b)?a[d]:(c=!0,b));return c?d:a})(a,s)),a8.current=q,$(q),c?bc.current=x:bc.current=Math.max(bc.current,x),e={sessionId:a,leafId:l.leafId,messages:s,entryIds:q,totalMessages:l.totalMessages??l.context.messages.length,hasMore:!c&&(l.hasMore??!1),loadedMessagesCount:l.context.messages.length},C().entries.set(a,{...e,loadedAt:Date.now()})),aI(a=>{if(!a)return null;let b=l.context.model;return b?.provider===a.provider&&b.modelId===a.modelId?null:a}),U(null),!l.agentState?.state?.thinkingLevel&&l.context.thinkingLevel&&"off"!==l.context.thinkingLevel&&ay(l.context.thinkingLevel),l.agentState??null}catch(a){if(a instanceof DOMException&&("AbortError"===a.name||"TimeoutError"===a.name)||a instanceof Error&&/aborted without reason|AbortError|Session load (?:timed out|superseded)/i.test(a.message))return null;return U(String(a)),null}finally{f&&bf.current?.controller===f&&(bf.current=null),b&&S(!1)}},[br]),bt=(0,d.useRef)(!1),bu=(0,d.useCallback)(async()=>{if(bt.current)return;bt.current=!0;let a=aW.current;if(!a){bt.current=!1;return}try{let b=await fetch(`/api/sessions/${encodeURIComponent(a)}?limit=50&offset=${ad}`);if(!b.ok)return;let c=await b.json(),d=c.context.messages,e=c.context.entryIds??[];Y(a=>[...d,...a]),$(a=>{let b=[...e,...a];return a8.current=b,b}),ae(a=>a+d.length),ac(c.hasMore??!1),E(a,d,e,c.hasMore??!1,ad+d.length)}catch{}finally{bt.current=!1}},[ad]),bv=(0,d.useCallback)(async a=>{let b=aW.current;if(!b)return[];let c=a7.current,d=c?`?leafId=${encodeURIComponent(c)}`:"";try{let c=await fetch(`/api/sessions/${encodeURIComponent(b)}/shadowed${d}`);if(!c.ok)return[];let e=await c.json(),f=e.groups?.find(b=>b.compactionEntryId===a);return f?.messages??[]}catch{return[]}},[]),bw=(0,d.useCallback)(async(a,b)=>{try{let c=b?`/api/sessions/${encodeURIComponent(a)}/context?leafId=${encodeURIComponent(b)}`:`/api/sessions/${encodeURIComponent(a)}/context`,d=await fetch(c);if(!d.ok)throw Error(`HTTP ${d.status}`);let e=await d.json(),f=e.context.messages,g=e.context.entryIds??[],h=M(f),i=new Map,j=Date.now();for(let[b,c]of a4.current)if(c.sessionId===a){if(j-c.createdAt>12e4){a4.current.delete(b);continue}if(c.confirmKey){let a=h.get(c.confirmKey)??0,d=i.get(c.confirmKey)??0;a-d>c.confirmCountAtCreate&&(a4.current.delete(b),i.set(c.confirmKey,d+1))}}a5.current=h;let k=[...a4.current.values()].filter(b=>N(b,a,g)).map(a=>a.message);Y(k.length>0?[...f,...k]:f),a8.current=g,$(g)}catch(a){console.error("Failed to load context:",a)}},[]),bx=(0,d.useCallback)(async a=>{try{let b=await g(a,{type:"get_tools"});b&&(bi((0,G.ES)(b)),bj((0,G.IB)(b)))}catch(a){console.error("Failed to load tools:",a)}},[bj,bi]),by=(0,d.useCallback)((a,b={})=>{aV.current?.close(),aV.current=null;let c=`/api/agent/${encodeURIComponent(a)}/events${b.replay?"?replay=1":""}`;return!function(a){let b=x(a);if("active"===b.snapshot.phase)return s(b,!0),u(b),b.snapshot;let c=Date.now();b.snapshot={...p(a),phase:"active",startedAt:c,lastEventAt:c,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},u(b),s(b,!0),b.snapshot}(a),new Promise((d,e)=>{let f=!1,g=!1,h=null,i=a=>{if(!f){if(f=!0,clearTimeout(k),a){h?.close(),aV.current===h&&(aV.current=null),e(a);return}d()}},k=setTimeout(()=>{b.requireConnected?i(Error("Timed out waiting for event stream connection")):i()},b.timeoutMs??3e4);aV.current=h=function(a){let{url:b,onEvent:c,onStateChange:d,onFatalError:e,maxReconnectAttempts:f=1/0,reconnectBaseMs:g=1e3,reconnectMaxMs:h=3e4,autoReconnect:i=!0}=a,k="idle",l=new AbortController,m=0,n=null,o=null,p=!1,q=(a,b)=>{b&&(o=b),c(a,b)},r=a=>{k!==a&&(k=a,d?.(a))},s=()=>{null!==n&&(clearTimeout(n),n=null)},t=()=>{if(p)return;if(!i)return void r("error");if(m>=f){r("error"),e?.(Error(`Max reconnect attempts (${f}) reached`));return}let a=Math.min(h,g*2**m);m+=1,r("connecting"),n=setTimeout(()=>{n=null,u()},a)},u=async()=>{if(!p){s(),l=new AbortController,r("connecting");try{let a=await fetch(b,{signal:l.signal,headers:{Accept:"text/event-stream","Cache-Control":"no-cache",...o?{"Last-Event-ID":o}:{}}});if(!a.ok)throw Error(`HTTP ${a.status}: ${a.statusText}`);let c=a.body;if(!c)throw Error("Response has no readable body");let d=c.getReader();if(r("connected"),m=0,await j(d,q,l.signal),l.signal.aborted)try{await d.cancel()}catch{}d.releaseLock(),r("closed"),!p&&i&&t()}catch(a){if(p||a instanceof DOMException&&"AbortError"===a.name)return void r("closed");r("error"),i&&t()}}};return{get state(){return k},connect:()=>{p=!1,m=0,s(),u()},close:()=>{p=!0,s(),l.abort(),r("closed")},get abortController(){return l}}}({url:c,onEvent:b=>{try{let c=JSON.parse(b);if("connected"===c.type&&i(),aW.current!==a)return;aY.current?.(c)}catch{}},onStateChange:b=>{!function(a,b){let c=n().get(a);if(!c)return;let d=c.connectionState;c.connectionState=b,"connected"===b&&"connected"!==d&&(c.snapshot={...c.snapshot,lastEventAt:Date.now(),lastHeartbeatAt:Date.now()},u(c)),"connected"!==b&&"connected"===d&&v(c)}(a,b),"connected"===b&&(g&&(A(a),aZ.current?.(a,"sse_reconnected")),g=!0)},reconnectBaseMs:1e3,reconnectMaxMs:3e4}),h.connect()})},[]),bz=(0,d.useCallback)(async(a,b="manual")=>{if(!a||aW.current!==a)return;let c=ba.current;try{let b=await fetch(`/api/agent/${encodeURIComponent(a)}`),e=await b.json().catch(()=>({}));if(aW.current!==a||ba.current!==c)return;if(e.running){var d;aX.current=!0,ai(!0),aS((d=e.state,d?.phase==="running_tools"?{kind:"running_tools",tools:(d.activeTools??[]).map(a=>({id:a.id,name:a.name}))}:d?.phase==="streaming"||d?.phase==="compacting"||d?.phase==="idle"?null:{kind:"waiting_model"})),aV.current&&"closed"!==aV.current.state&&"error"!==aV.current.state||(A(a),by(a,{replay:!0}))}else aX.current=!1,aV.current?.close(),aV.current=null,z(a),ai(!1),aS(null),aA(null),ag({type:"end"}),F(a),await bs(a,!1,!1,!0);e.state?.contextUsage!==void 0&&aC(e.state.contextUsage??null),e.state?.systemPrompt!==void 0&&aE(e.state.systemPrompt??null),e.state?.isCompacting!==void 0&&aM(e.state.isCompacting),e.state?.thinkingLevel!==void 0&&ay(e.state.thinkingLevel??"auto")}catch{}},[by,bs]);aY.current=(0,d.useCallback)(a=>{let b=aW.current;switch(b&&function(a,b){let c=x(a),d=Date.now();switch(b.type){case"agent_start":if("active"===c.snapshot.phase)return s(c,!0),c.snapshot;return w(c),c.accumulatedText="",c.toolCalls.clear(),c.toolResults.clear(),c.activeToolId=null,c.snapshot={...p(a),phase:"active",startedAt:d,lastEventAt:d,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},u(c),s(c,!0),c.snapshot;case"message_update":{let a=b.message;if(!a||"assistant"!==a.role)return c.snapshot;let e=a.content;for(let a of Array.isArray(e)?e:[])"object"==typeof a&&null!==a&&"type"in a&&("text"===a.type?c.accumulatedText=a.text??"":"toolCall"===a.type&&a.toolCallId&&!c.toolCalls.has(a.toolCallId)&&c.toolCalls.set(a.toolCallId,{...a,startedAt:d}));return s(c,!1),c.snapshot}case"tool_execution_start":{let a="string"==typeof b.toolCallId?b.toolCallId:"",e="string"==typeof b.toolName?b.toolName:"tool",f=b.input??{};if(!a)return c.snapshot;let g=c.toolCalls.get(a);return c.toolCalls.set(a,{type:"toolCall",toolCallId:a,toolName:e,input:g?.input??f,startedAt:g?.startedAt??d}),c.activeToolId=a,w(c),c.activeToolId&&(c.toolProgressTimer=setInterval(()=>s(c,!0),1e3)),s(c,!0),c.snapshot}case"tool_execution_end":{let a="string"==typeof b.toolCallId?b.toolCallId:"",e="string"==typeof b.toolName?b.toolName:"tool",f="string"==typeof b.result?b.result:JSON.stringify(b.result??"");if(a){let g=c.toolCalls.get(a);g&&c.toolCalls.set(a,{...g,endedAt:d}),c.toolResults.set(a,{role:"toolResult",toolCallId:a,toolName:e,content:[{type:"text",text:f}],isError:!!b.isError,timestamp:d}),c.activeToolId===a&&(c.activeToolId=null,w(c))}return s(c,!0),c.snapshot}case"message_end":return r(c),s(c,!0),c.snapshot;case"agent_end":{if(r(c),w(c),c.activeToolId=null,!0===b.willRetry)return c.accumulatedText="",c.toolCalls.clear(),c.toolResults.clear(),c.snapshot={...c.snapshot,phase:"active",lastEventAt:d,accumulatedText:"",toolCalls:[],toolResults:[],statusText:null,streamingMessage:null,isStreaming:!0,error:null},u(c),q(a,{type:"snapshot-updated",snapshot:c.snapshot}),c.snapshot;v(c);let e="string"==typeof b.error?b.error:null;return c.snapshot={...c.snapshot,phase:e?"error":"completed",isStreaming:!1,streamingMessage:null,statusText:null,error:e},q(a,e?{type:"error",snapshot:c.snapshot}:{type:"completed",snapshot:c.snapshot}),c.snapshot}case"heartbeat":return c.snapshot={...c.snapshot,lastHeartbeatAt:d},c.snapshot;default:return c.snapshot}}(b,a),"heartbeat"!==a.type&&(bg.current=Date.now()),a.type){case"prompt_admitted":case"agent_start":aU(null),aX.current=!0,ai(!0),aS({kind:"waiting_model"}),ag({type:"start"});break;case"agent_end":if(!0===a.willRetry){aX.current=!0,ai(!0),aS({kind:"waiting_model"});break}aX.current=!1,aV.current?.close(),aV.current=null,ai(!1),aS(null),aA(null),ag({type:"end"}),b&&(F(b),bs(b,!1,!1,!0),be.current&&clearTimeout(be.current),be.current=setTimeout(()=>{aW.current!==b||aX.current||(F(b),bs(b,!1,!1,!0))},500),fetch(`/api/agent/${encodeURIComponent(b)}`).then(a=>a.json()).then(a=>{a.state?.contextUsage!==void 0&&aC(a.state.contextUsage??null),a.state?.systemPrompt!==void 0&&aE(a.state.systemPrompt??null),a.state?.isCompacting!==void 0&&aM(a.state.isCompacting)}).catch(()=>{})),k?.();break;case"message_start":case"message_update":{let b=a.message;if(b?.role==="user")break;aX.current||(aX.current=!0,ai(!0),aS({kind:"waiting_model"})),b&&ag({type:"update",message:e(b)}),aS(null);break}case"message_end":{let c=a.message,d="string"==typeof a.__entryId?a.__entryId:null,f=aX.current;if(c&&"user"!==c.role){"assistant"===c.role&&"error"===c.stopReason&&c.errorMessage?.trim()&&aU(`Model response failed: ${c.errorMessage.trim()}`);let a=e(c);if(!(d&&a8.current.includes(d))){if(b&&d){let a=a6.current.get(b)??new Map;a.set(d,Date.now()),a6.current.set(b,a)}Y(b=>b.some(b=>O(b,a))?b:[...b,a]),d&&$(a=>{if(a.includes(d))return a;let b=[...a,d];return a8.current=b,b})}}f&&(ag({type:"reset"}),aS({kind:"waiting_model"}));break}case"replay_gap":b&&(F(b),bs(b,!1,!1,!0));break;case"prompt_done":if(!aX.current)break;bz(aW.current??"","prompt_done");break;case"prompt_error":{let c="string"==typeof a.error&&a.error.trim()?a.error.trim():"The model request failed before producing a response.";if(aX.current=!1,ai(!1),aS(null),aA(null),ag({type:"end"}),aV.current?.close(),aV.current=null,b){for(let[a,c]of(z(b),a4.current))c.sessionId===b&&"prompt"===c.kind&&a4.current.delete(a);F(b),bs(b,!1,!1,!0)}aU(`Model request failed: ${c}`),k?.();break}case"tool_execution_start":{let b=a.toolCallId,c=a.toolName,d=a.args,e="bash"===c&&"string"==typeof d?.command?d.command:void 0;aS(a=>{let d=a?.kind==="running_tools"?[...a.tools]:[];return d.some(a=>a.id===b)||d.push({id:b,name:c,args:e}),{kind:"running_tools",tools:d}});break}case"tool_execution_end":{let b=a.toolCallId;aS(a=>{if(a?.kind!=="running_tools")return a;let c=a.tools.filter(a=>a.id!==b);return 0===c.length?{kind:"waiting_model"}:{kind:"running_tools",tools:c}});break}case"auto_retry_start":aU(null),aX.current=!0,ai(!0),aS({kind:"waiting_model"}),aA({attempt:a.attempt,maxAttempts:a.maxAttempts,errorMessage:a.errorMessage});break;case"auto_retry_end":aA(null),!1===a.success&&"string"==typeof a.finalError&&a.finalError.trim()?aU(`Model response failed after retries: ${a.finalError.trim()}`):!0===a.success&&aU(null);break;case"auto_compaction_start":case"compaction_start":aM(!0),aO(null);break;case"auto_compaction_end":case"compaction_end":aM(!1),a.errorMessage?aO(a.errorMessage):!a.aborted&&aW.current&&bs(aW.current)}},[bs,k,bz]);let bA=(0,d.useCallback)(async(a,d,e,j)=>{if(!a.trim()&&!d?.length&&!e?.length||ah)return;ba.current+=1;let k=bn(e),m=a.trim()?k?`${a}
|
|
5
|
-
|
|
6
|
-
Attached document text:
|
|
7
|
-
|
|
8
|
-
${k}`:a:k?`Attached document text:
|
|
9
|
-
|
|
10
|
-
${k}`:"",n=[],o=B?c:b?.cwd??P?.info?.cwd;if(d?.length&&o)try{n=await i(o,d)}catch(a){aU(a instanceof Error?a.message:String(a));return}let p=n.length?n.map(a=>{var b;return{type:"image",path:a.path,mimeType:a.mimeType,name:a.name,source:{type:"url",url:(b=a.path,`/api/files/${(0,h.HG)(b)}?type=read`),media_type:a.mimeType}}}):d?.map(a=>({type:"image",source:{type:"base64",media_type:a.mimeType,data:a.data}})),q={role:"user",content:p?.length?[...m.trim()?[{type:"text",text:m}]:[],...p]:m,timestamp:Date.now()},r=J(),s=B?null:b?.id??null;s&&F(s);let t=a7.current,u=L(q.content);a4.current.set(r,{localId:r,sessionId:s??"__new__",leafId:t,message:q,createdAt:Date.now(),kind:"prompt",confirmKey:u,confirmCountAtCreate:B?0:u?a5.current.get(u)??0:0}),Y(a=>[...a,q]),aU(null),aX.current=!0,ai(!0),aS({kind:"waiting_model"}),ag({type:"start"}),a1.current=!0;let v=al.find(a=>a.provider===bk?.provider&&a.id===bk?.modelId)?.input,w=!v||0===v.length||v.includes("image")?d?.map(a=>({type:"image",data:a.data,mimeType:a.mimeType})):void 0;try{if(B&&c){ar&&aK(ar);let b=j??bm(),d=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:c,type:"prompt",message:m,toolNames:b,deferPrompt:!0,...w?.length?{images:w}:{},...ar?{provider:ar.provider,modelId:ar.modelId}:{},..."auto"!==ax?{thinkingLevel:ax}:{}})}),e=await d.json().catch(()=>({}));if(!d.ok||e.error||!e.sessionId)throw Error(e.error??`HTTP ${d.status}`);let f=e.sessionId;aW.current=f;let h=a4.current.get(r);h&&(h.sessionId=f),a$.current?.(),a$.current=y(f,()=>{aW.current===f&&(ai(!1),aS(null))}),a9.current=f,await by(f,{requireConnected:!0,timeoutMs:1e4}),await g(f,{type:"prompt",message:m,toolNames:b,...w?.length?{images:w}:{}}),l?.({id:f,path:"",cwd:c,name:void 0,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:a})}else if(b){let a=j??bm();await bo(b.id),a$.current?.(),a$.current=y(b.id,()=>{aW.current===b.id&&(ai(!1),aS(null))}),await by(b.id,{requireConnected:!0,timeoutMs:1e4}),await g(b.id,{type:"prompt",message:m,toolNames:a,leafId:t,...bk?{provider:bk.provider,modelId:bk.modelId}:{},..."auto"!==ax?{thinkingLevel:ax}:{},...w?.length?{images:w}:{}})}}catch(b){let a=aW.current;if(a4.current.delete(r),Y(a=>a.filter(a=>a!==q)),b instanceof f&&(409===b.status||"SESSION_BUSY"===b.code)){aU("This session is already running in another tab. Showing that active run instead."),aX.current=!0,ai(!0),aS({kind:"waiting_model"}),ag({type:"start"}),a&&(aV.current?.close(),aV.current=null,A(a),by(a,{replay:!0}),aZ.current?.(a,"prompt_conflict"));return}if(console.error("Failed to send message:",b),B&&aW.current){let a=aW.current;aW.current=null,a9.current=null,fetch(`/api/sessions/${encodeURIComponent(a)}`,{method:"DELETE"}).catch(()=>{})}aU(b instanceof Error?b.message:String(b)),aV.current?.close(),aV.current=null,a&&z(a),aX.current=!1,ai(!1),aS(null),ag({type:"end"})}},[B,c,ar,bm,ax,b,P?.info?.cwd,ah,by,l,bn,al,bk,bo]),bB=(0,d.useCallback)(async()=>{let a=aW.current;if(a){aX.current=!1,aU(null),ai(!1),aS(null),ag({type:"end"}),aV.current?.close(),aV.current=null,z(a),F(a);try{await g(a,{type:"abort"}),await bs(a,!1,!1,!0)}catch(b){console.error("Failed to abort:",b),await bs(a,!1,!1,!0)}}},[bs]),bC=(0,d.useCallback)(async a=>{let b=aW.current;if(b){aG(a);try{let{cancelled:c,newSessionId:d}=await g(b,{type:"fork",entryId:a})??{};!c&&d&&m?.(d)}catch(a){console.error("Fork failed:",a)}finally{aG(null)}}},[m]),bD=(0,d.useCallback)(async a=>{let d=aW.current,e=P?.info?.cwd??b?.cwd??c??null;if(!d||!e)return{ok:!1,error:"No active session to fork"};if(aX.current)return{ok:!1,error:"Agent is still running"};try{let b=bm(),c=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:e,type:"prompt",parentSessionId:d,deferPrompt:!0,toolNames:b,...bk?{provider:bk.provider,modelId:bk.modelId}:{},..."auto"!==ax?{thinkingLevel:ax}:{}})}),f=await c.json().catch(()=>({}));if(!c.ok||f.error||!f.sessionId)return{ok:!1,error:f.error??`HTTP ${c.status}`};let h=f.sessionId;try{await g(h,{type:"append_message",message:a,customType:"fork_handoff",display:!0})}catch{}return l?.({id:h,path:"",cwd:e,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:a.slice(0,120),parentSessionId:d}),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}},[P?.info?.cwd,b?.cwd,c,bk,ax,bm,l]),bE=(0,d.useCallback)(async a=>{let b=aW.current;b&&(a6.current.delete(b),F(b),a7.current=a,W(a),await bw(b,a))},[bw]);(0,d.useCallback)(async a=>{a7.current=a,W(a);let b=aW.current;b&&(a6.current.delete(b),F(b),await bw(b,a))},[bw]);let bF=(0,d.useCallback)(async(a,b)=>{if(B)return void bh({provider:a,modelId:b});let c=aW.current;if(c)try{var d;aU(null);let e=await g(c,{type:"set_model",provider:a,modelId:b}),f={provider:e.provider,modelId:e.id};e.thinkingLevel&&(d=e.thinkingLevel,"auto"===d||"off"===d||"minimal"===d||"low"===d||"medium"===d||"high"===d||"xhigh"===d)&&ay(e.thinkingLevel),aI(f),Q(a=>a?{...a,context:{...a.context,model:f}}:a)}catch(b){let a=b instanceof Error?b.message:String(b);console.error("Failed to set model:",b),aU(a)}},[B,bh]),bG=(0,d.useCallback)(async()=>{let a=aW.current;if(a&&!aL){aM(!0),aO(null),aQ(null);try{let b=await g(a,{type:"compact"});b?.reducedBy!=null&&aQ(`Compacted ~${b.tokensBefore??"?"} → ~${b.tokensAfter??"?"} tokens (−${b.reducedBy})`),await bs(a,!0)}catch(a){aO(a instanceof Error?a.message:String(a))}finally{aM(!1)}}},[aL,bs]),bH=(0,d.useCallback)(async(a,b,c)=>{let d=aW.current;if(!d)return;F(d);let e=bn(c),f=a.trim()?e?`${a}
|
|
11
|
-
|
|
12
|
-
Attached document text:
|
|
13
|
-
|
|
14
|
-
${e}`:a:e?`Attached document text:
|
|
15
|
-
|
|
16
|
-
${e}`:"",h=al.find(a=>a.provider===bk?.provider&&a.id===bk?.modelId)?.input,i=!h||0===h.length||h.includes("image")?b?.map(a=>({type:"image",data:a.data,mimeType:a.mimeType})):void 0,j={role:"user",content:`[steer] ${f}`,timestamp:Date.now()},k=J(),l=K(f,i?.length??0);a4.current.set(k,{localId:k,sessionId:d,leafId:a7.current,message:j,createdAt:Date.now(),kind:"steer",confirmKey:l,confirmCountAtCreate:l?a5.current.get(l)??0:0}),Y(a=>[...a,j]);try{await g(d,{type:"steer",message:f,...i?.length?{images:i}:{}})}catch(a){a4.current.delete(k),console.error("Failed to steer:",a)}},[bn,al,bk]),bI=(0,d.useCallback)(async(a,b,c)=>{let d=aW.current;if(!d)return;F(d);let e=bn(c),f=a.trim()?e?`${a}
|
|
17
|
-
|
|
18
|
-
Attached document text:
|
|
19
|
-
|
|
20
|
-
${e}`:a:e?`Attached document text:
|
|
21
|
-
|
|
22
|
-
${e}`:"",h=al.find(a=>a.provider===bk?.provider&&a.id===bk?.modelId)?.input,i=!h||0===h.length||h.includes("image")?b?.map(a=>({type:"image",data:a.data,mimeType:a.mimeType})):void 0,j={role:"user",content:f,timestamp:Date.now()},k=J(),l=K(f,i?.length??0);a4.current.set(k,{localId:k,sessionId:d,leafId:a7.current,message:j,createdAt:Date.now(),kind:"follow_up",confirmKey:l,confirmCountAtCreate:l?a5.current.get(l)??0:0}),Y(a=>[...a,j]);try{await g(d,{type:"follow_up",message:f,...i?.length?{images:i}:{}})}catch(a){a4.current.delete(k),console.error("Failed to follow up:",a)}},[bn,al,bk]),bJ=(0,d.useCallback)(async()=>{let a=aW.current;if(a)try{await g(a,{type:"abort_compaction"})}catch(a){console.error("Failed to abort compaction:",a)}},[]),bK=(0,d.useCallback)(async a=>{if(ay(a),"auto"===a)return;let b=aW.current;if(b)try{await g(b,{type:"set_thinking_level",level:a})}catch(a){console.error("Failed to set thinking level:",a)}},[]),bL=(0,d.useCallback)(async a=>{bi(a);let b=(0,G.tE)(a,av),c=aW.current;if(c)try{await g(c,{type:"set_tools",toolNames:b})}catch(a){console.error("Failed to set tools:",a)}},[av,bi]),bM=(0,d.useCallback)(async a=>{bj(a);let b=(0,G.tE)(at,a),c=aW.current;if(c)try{await g(c,{type:"set_tools",toolNames:b})}catch(a){console.error("Failed to set memory tools:",a)}},[bj,at]);return(0,d.useCallback)((a="smooth")=>{a2.current?.scrollIntoView({behavior:a})},[]),(0,d.useCallback)(()=>{let a=a3.current,b=a0.current;if(!a||!b)return;let c=b.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop;a.scrollTo({top:c-16,behavior:"smooth"})},[]),{data:P,loading:R,error:T,activeLeafId:V,messages:X,entryIds:Z,streamState:af,agentRunning:ah,modelNames:aj,modelList:al,modelThinkingLevels:an,modelThinkingLevelMaps:ap,newSessionModel:ar,toolPreset:at,memoryTools:av,thinkingLevel:ax,retryInfo:az,contextUsage:aB,systemPrompt:aD,forkingEntryId:aF,isCompacting:aL,compactError:aN,compactInfo:aP,currentModel:bk,displayModel:bl,sessionStats:bp,agentPhase:aR,agentError:aT,isNew:B,sessionIdRef:aW,sseReaderRef:aV,messagesEndRef:a2,scrollContainerRef:a3,lastUserMsgRef:a0,pendingScrollToUserRef:a1,initialScrollDoneRef:a_,handleSend:bA,handleAbort:bB,handleFork:bC,handleNavigate:bE,handleModelChange:bF,handleCompact:bG,handleSteer:bH,handleFollowUp:bI,handleAbortCompaction:bJ,handleToolPresetChange:bL,handleMemoryToolsChange:bM,handleThinkingLevelChange:bK,loadTools:bx,setActiveLeafId:W,setData:Q,setMessages:Y,dispatch:ag,setAgentRunning:ai,setForkingEntryId:aG,forkToNewSession:bD,loadMoreMessages:bu,hasMoreMessages:ab,totalMessages:_,loadedMessagesCount:ad,loadShadowedMessages:bv,handleAgentEventRef:aY}}}};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[247],{14755:(e,t,n)=>{n.d(t,{ES:()=>p,IB:()=>m,SN:()=>a,tE:()=>f,xG:()=>d});let r="subagent",a=["retain","recall","reflect"],o=[],s=["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 o;case"default":return s;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)),o=c(t),d=c(n);return""===o?"none":o===c(s)?"default":o===c(l)?"full":o===c(i)?"workbench":o===c(u)?"agent":""===d?"none":d===c(s)?"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])]}},16865:(e,t,n)=>{n.d(t,{O:()=>w});let r=new Set,a=null,o=null,s=null,l=null,i=null,u=!1,c=!1;function d(e){for(let t of(a=[...new Set(e.filter(e=>"string"==typeof e))],r))try{t(a)}catch{}}async function p(){try{let e=await fetch("/api/agent/running",{cache:"no-store"});if(!e.ok)return;let t=await e.json();Array.isArray(t.runningSessionIds)&&d(t.runningSessionIds)}catch{}}function m(){s||0===r.size||(p(),s=setInterval(()=>{p()},5e3))}function f(){s&&(clearInterval(s),s=null)}function g(){if(!u){if(u=!0,window.__annovibeRunningSessionSubscribe){i=window.__annovibeRunningSessionSubscribe(d);return}if("u"<typeof SharedWorker)return void m();try{(o=new SharedWorker("/running-session-worker.js?v=1",{name:"annovibe-running-sessions-v1",type:"classic"})).port.onmessage=e=>{let t=e.data;"transport"===t.type?m():"running"===t.type&&Array.isArray(t.runningSessionIds)&&(l&&clearTimeout(l),l=null,f(),d(t.runningSessionIds.filter(e=>"string"==typeof e)))},o.onerror=()=>m(),o.port.start(),o.port.postMessage({type:"subscribe"}),l=setTimeout(()=>m(),3e3)}catch{o=null,m()}}}function h(){if(u){if(u=!1,l&&clearTimeout(l),l=null,f(),i?.(),i=null,o){try{o.port.postMessage({type:"disconnect"})}catch{}try{o.port.close()}catch{}}o=null,a=null}}function y(){r.size>0&&g()}function w(e){return r.add(e),a&&e(a),c||(c=!0,window.addEventListener("pagehide",h),window.addEventListener("pageshow",y)),g(),()=>{r.delete(e),0===r.size&&(h(),c&&(c=!1,window.removeEventListener("pagehide",h),window.removeEventListener("pageshow",y)))}}},90247:(e,t,n)=>{n.d(t,{T:()=>J});var r=n(12115);function a(e){return e?.phase==="running_tools"?{kind:"running_tools",tools:(e.activeTools??[]).map(e=>({id:e.id,name:e.name}))}:e?.phase==="streaming"||e?.phase==="compacting"||e?.phase==="idle"?null:{kind:"waiting_model"}}function o(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}}class s extends Error{constructor(e,t,n){super(e),this.status=t,this.code=n,this.name="AgentCommandError"}}async function l(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 new s(r.error??`HTTP ${n.status}`,n.status,r.code);return r.data}var i=n(28999);async function u(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 c(e,t,n){let r,a=new TextDecoder,o="",s=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=(o+=a.decode(t.value,{stream:!0})).split("\n");for(let e of(o=n.pop()||"",n))s(e)}if(o.trim())for(let e of o.split("\n"))s(e)}var d=n(16865);let p="__annovibeStreamSessions__",m="__annovibeStreamListeners__",f="__annovibeStreamErrorCallbacks__";function g(){let e=globalThis;return e[p]||(e[p]=new Map),e[p]}function h(){let e=globalThis;return e[f]||(e[f]=new Map),e[f]}function y(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 w(e,t){let n;for(let r of(!(n=globalThis)[m]&&(n[m]=new Map),n[m]).get(e)??[])try{r(t)}catch{}}function v(e){e.textThrottleTimer&&(clearTimeout(e.textThrottleTimer),e.textThrottleTimer=null),e.textDirty&&(e.textDirty=!1,C(e))}function T(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,C(e))},100));return}v(e),C(e)}function C(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},w(e.snapshot.sessionId,{type:"snapshot-updated",snapshot:e.snapshot})}function k(e){b(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){I(e),v(e);let t="Stream idle timeout — no activity for 180s.";e.snapshot={...e.snapshot,phase:"error",isStreaming:!1,streamingMessage:null,statusText:null,error:t},b(e),w(e.snapshot.sessionId,{type:"error",snapshot:e.snapshot});let n=h().get(e.snapshot.sessionId);if(n)try{n(e.snapshot.sessionId,t)}catch{}}},1e4)}function b(e){e.idleCheckTimer&&(clearInterval(e.idleCheckTimer),e.idleCheckTimer=null)}function I(e){e.toolProgressTimer&&(clearInterval(e.toolProgressTimer),e.toolProgressTimer=null)}function S(e){let t=g(),n=t.get(e);return n||(n={snapshot:y(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 _(e,t){let n=h();return n.set(e,t),()=>{n.get(e)===t&&n.delete(e)}}function x(e){let t=g(),n=t.get(e);n&&(I(n),b(n),v(n)),t.delete(e)}function E(e){let t=g().get(e);t&&(t.snapshot={...t.snapshot,reconnectCount:t.snapshot.reconnectCount+1,lastSyncReason:"sse-reconnect",lastEventAt:Date.now()},T(t,!0))}let M="__annovibeSessionMessageCache__";function A(){let e=globalThis;if(!e[M]){var t;let n={entries:new Map,cleanupTimer:null};e[M]=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[M]}function R(e){let t=A(),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 o=A(),s=o.entries.get(e);if(!s)return;let l=new Set(s.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&&o.entries.set(e,{...s,messages:[...i,...s.messages],entryIds:[...u,...s.entryIds],hasMore:r,loadedMessagesCount:a,loadedAt:Date.now()})}function D(e){A().entries.delete(e)}var L=n(14755);function P(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 N(e,t){return new DOMException(e,t)}function U(){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)}`}function j(e,t){return e.trim()||0!==t?`text:${e}|images:${t}`:null}function O(e){return"string"==typeof e?j(e,0):Array.isArray(e)?j(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 F(e){let t=new Map;for(let n of e){let e="user"!==n.role?null:O(n.content);e&&t.set(e,(t.get(e)??0)+1)}return t}function H(e,t,n){return e.sessionId===t&&(!e.leafId||n.includes(e.leafId))}function B(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}}function J(e){let{session:t,newSessionCwd:n,onAgentEnd:p,onSessionCreated:m,onSessionForked:f,modelsRefreshKey:h,onBranchDataChange:C}=e,M=null===t&&null!==n,[J,K]=(0,r.useState)(null),[W,z]=(0,r.useState)(!M),[q,G]=(0,r.useState)(null),[V,Y]=(0,r.useState)(null),[Q,X]=(0,r.useState)([]),[Z,ee]=(0,r.useState)([]),[et,en]=(0,r.useState)(0),[er,ea]=(0,r.useState)(!1),[eo,es]=(0,r.useState)(0),[el,ei]=(0,r.useReducer)(P,{isStreaming:!1,streamingMessage:null}),[eu,ec]=(0,r.useState)(!1),[ed,ep]=(0,r.useState)({}),[em,ef]=(0,r.useState)([]),[eg,eh]=(0,r.useState)({}),[ey,ew]=(0,r.useState)({}),[ev,eT]=(0,r.useState)(null),[eC,ek]=(0,r.useState)("full"),[eb,eI]=(0,r.useState)([...L.SN]),[eS,e_]=(0,r.useState)("auto"),[ex,eE]=(0,r.useState)(null),[eM,eA]=(0,r.useState)(null),[eR,e$]=(0,r.useState)(null),[eD,eL]=(0,r.useState)(null),[eP,eN]=(0,r.useState)(null),[eU,ej]=(0,r.useState)(null),[eO,eF]=(0,r.useState)(!1),[eH,eB]=(0,r.useState)(null),[eJ,eK]=(0,r.useState)(null),[eW,ez]=(0,r.useState)(null),[eq,eG]=(0,r.useState)(null),eV=(0,r.useRef)(null),eY=(0,r.useRef)(t?.id??null),eQ=(0,r.useRef)(!1),eX=(0,r.useRef)(null),eZ=(0,r.useRef)(null),e0=(0,r.useRef)(null),e1=(0,r.useRef)(!1),e4=(0,r.useRef)(null),e3=(0,r.useRef)(!1),e5=(0,r.useRef)(null),e2=(0,r.useRef)(null),e6=(0,r.useRef)(new Map),e7=(0,r.useRef)(new Map),e8=(0,r.useRef)(new Map),e9=(0,r.useRef)(null),te=(0,r.useRef)([]),tt=(0,r.useRef)(null),tn=(0,r.useRef)(0),tr=(0,r.useRef)(!1),ta=(0,r.useRef)(0),to=(0,r.useRef)(!1),ts=(0,r.useRef)(!1),tl=(0,r.useRef)(0),ti=(0,r.useRef)(null),tu=(0,r.useRef)(null),tc=(0,r.useRef)(0),td=(0,r.useRef)(!1);(0,r.useEffect)(()=>{e9.current=V},[V]),(0,r.useEffect)(()=>{td.current=el.isStreaming},[el.isStreaming]);let tp=e.setNewSessionModel??eT,tm=e.setToolPreset??ek,tf=e.setMemoryTools??eI,tg=eP??J?.context.model??eU??null,th=M?ev:tg,ty=(0,r.useCallback)(()=>(0,L.tE)(eC,eb),[eb,eC]),tw=(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"):"",[]),tv=(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})`)},[]),tT=(()=>{let e={input:0,output:0,cacheRead:0,cacheWrite:0},t=0;for(let n of Q){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})(),tC=(0,r.useRef)(!1),tk=(0,r.useCallback)(async()=>{let e=eY.current;if(!e||tC.current||to.current)return;tC.current=!0,tr.current=!0;let t=0,n=R(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(eY.current!==e)break;let a=r.context.messages,o=r.context.entryIds??[];if(0===a.length)break;X(e=>[...a,...e]),ee(e=>{let t=[...o,...e];return te.current=t,t});let s=t+a.length;if(es(s),ta.current=s,ea(r.hasMore??!1),$(e,a,o,r.hasMore??!1,s),t=s,!r.hasMore)break;await new Promise(e=>setTimeout(e,800))}catch{break}}finally{tC.current=!1,to.current=!0,tr.current=!1}},[]),tb=(0,r.useCallback)(async(e,t=!1,n=!1,r=!1)=>{var a;let o=null;try{if(t&&z(!0),!n&&!eQ.current&&!r){let n=R(e);if(n)return en(n.totalMessages),ea(n.hasMore),es(n.loadedMessagesCount),X(n.messages),te.current=n.entryIds,ee(n.entryIds),e9.current=n.leafId,Y(n.leafId),ta.current=n.loadedMessagesCount,t&&z(!1),n.hasMore&&!to.current&&setTimeout(()=>{tk()},1500),null}let s=n?`/api/sessions/${encodeURIComponent(e)}?includeState`:`/api/sessions/${encodeURIComponent(e)}?limit=50&offset=0`,l=tu.current;if(l?.sid===e&&!t)return null;l?.controller.abort(N("Session load superseded","AbortError"));let i=new AbortController;o=i,tu.current={sid:e,controller:i};let u=setTimeout(()=>{i.abort(N("Session load timed out after 30 seconds","TimeoutError"))},3e4),c=await fetch(s,{signal:i.signal}).finally(()=>clearTimeout(u));if(eY.current&&eY.current!==e)return null;if(404===c.status)return t&&(K(null),e9.current=null,Y(null),X([]),G(null)),null;if(!c.ok)throw Error(`HTTP ${c.status}`);let d=await c.json();n?(en(d.totalMessages??d.context.messages.length),ea(!1)):(en(d.totalMessages??d.context.messages.length),ea(d.hasMore??!1)),es(d.context.messages.length),K(d),e9.current=d.leafId,Y(d.leafId);let p=d.context.messages,m=F(p),f=new Map,g=Date.now();for(let[t,n]of e6.current)if(n.sessionId===e){if(g-n.createdAt>12e4){e6.current.delete(t);continue}if(n.confirmKey){let e=m.get(n.confirmKey)??0,r=f.get(n.confirmKey)??0;e-r>n.confirmCountAtCreate&&(e6.current.delete(t),f.set(n.confirmKey,r+1))}}e7.current=m;let h=d.context.entryIds??[],y=[...e6.current.values()].filter(t=>H(t,e,h)).map(e=>e.message),w=y.length>0?[...p,...y]:p,v=e8.current.get(e);if(v){for(let[e,t]of v)g-t>12e4&&v.delete(e);0===v.size&&e8.current.delete(e)}let T=v?.size?v:null,C=T?new Set(h):null,k=!!T&&!!C&&[...T.keys()].some(e=>!C.has(e));T&&C&&!k&&e8.current.delete(e);let b=w.length;return!n&&(ta.current>b||k)?(en(d.totalMessages??d.context.messages.length),ea(d.hasMore??!1)):(X(e=>(function(e,t){if(e.length!==t.length)return t;let n=!1,r=t.map((t,r)=>B(e[r],t)?e[r]:(n=!0,t));return n?r:e})(e,w)),te.current=h,ee(h),n?ta.current=b:ta.current=Math.max(ta.current,b),a={sessionId:e,leafId:d.leafId,messages:w,entryIds:h,totalMessages:d.totalMessages??d.context.messages.length,hasMore:!n&&(d.hasMore??!1),loadedMessagesCount:d.context.messages.length},A().entries.set(e,{...a,loadedAt:Date.now()})),eN(e=>{if(!e)return null;let t=d.context.model;return t?.provider===e.provider&&t.modelId===e.modelId?null:e}),G(null),!d.agentState?.state?.thinkingLevel&&d.context.thinkingLevel&&"off"!==d.context.thinkingLevel&&e_(d.context.thinkingLevel),d.agentState??null}catch(e){if(e instanceof DOMException&&("AbortError"===e.name||"TimeoutError"===e.name)||e instanceof Error&&/aborted without reason|AbortError|Session load (?:timed out|superseded)/i.test(e.message))return null;return G(String(e)),null}finally{o&&tu.current?.controller===o&&(tu.current=null),t&&z(!1)}},[tk]),tI=(0,r.useRef)(!1),tS=(0,r.useCallback)(async()=>{if(tI.current)return;tI.current=!0;let e=eY.current;if(!e){tI.current=!1;return}try{let t=await fetch(`/api/sessions/${encodeURIComponent(e)}?limit=50&offset=${eo}`);if(!t.ok)return;let n=await t.json(),r=n.context.messages,a=n.context.entryIds??[];X(e=>[...r,...e]),ee(e=>{let t=[...a,...e];return te.current=t,t}),es(e=>e+r.length),ea(n.hasMore??!1),$(e,r,a,n.hasMore??!1,eo+r.length)}catch{}finally{tI.current=!1}},[eo]),t_=(0,r.useCallback)(async e=>{let t=eY.current;if(!t)return[];let n=e9.current,r=n?`?leafId=${encodeURIComponent(n)}`:"";try{let n=await fetch(`/api/sessions/${encodeURIComponent(t)}/shadowed${r}`);if(!n.ok)return[];let a=await n.json(),o=a.groups?.find(t=>t.compactionEntryId===e);return o?.messages??[]}catch{return[]}},[]),tx=(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(),o=a.context.messages,s=a.context.entryIds??[],l=F(o),i=new Map,u=Date.now();for(let[t,n]of e6.current)if(n.sessionId===e){if(u-n.createdAt>12e4){e6.current.delete(t);continue}if(n.confirmKey){let e=l.get(n.confirmKey)??0,r=i.get(n.confirmKey)??0;e-r>n.confirmCountAtCreate&&(e6.current.delete(t),i.set(n.confirmKey,r+1))}}e7.current=l;let c=[...e6.current.values()].filter(t=>H(t,e,s)).map(e=>e.message);X(c.length>0?[...o,...c]:o),te.current=s,ee(s)}catch(e){console.error("Failed to load context:",e)}},[]),tE=(0,r.useCallback)(async e=>{try{let t=await l(e,{type:"get_tools"});t&&(tm((0,L.ES)(t)),tf((0,L.IB)(t)))}catch(e){console.error("Failed to load tools:",e)}},[tf,tm]),tM=(0,r.useCallback)((e,t={})=>{eV.current?.close(),eV.current=null;let n=`/api/agent/${encodeURIComponent(e)}/events${t.replay?"?replay=1":""}`;return!function(e){let t=S(e);if("active"===t.snapshot.phase)return T(t,!0),k(t),t.snapshot;let n=Date.now();t.snapshot={...y(e),phase:"active",startedAt:n,lastEventAt:n,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},k(t),T(t,!0),t.snapshot}(e),new Promise((r,a)=>{let o=!1,s=!1,l=null,i=e=>{if(!o){if(o=!0,clearTimeout(u),e){l?.close(),eV.current===l&&(eV.current=null),a(e);return}r()}},u=setTimeout(()=>{t.requireConnected?i(Error("Timed out waiting for event stream connection")):i()},t.timeoutMs??3e4);eV.current=l=function(e){let{url:t,onEvent:n,onStateChange:r,onFatalError:a,maxReconnectAttempts:o=1/0,reconnectBaseMs:s=1e3,reconnectMaxMs:l=3e4,autoReconnect:i=!0}=e,u="idle",d=new AbortController,p=0,m=null,f=null,g=!1,h=(e,t)=>{t&&(f=t),n(e,t)},y=e=>{u!==e&&(u=e,r?.(e))},w=()=>{null!==m&&(clearTimeout(m),m=null)},v=()=>{if(g)return;if(!i)return void y("error");if(p>=o){y("error"),a?.(Error(`Max reconnect attempts (${o}) reached`));return}let e=Math.min(l,s*2**p);p+=1,y("connecting"),m=setTimeout(()=>{m=null,T()},e)},T=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();if(y("connected"),p=0,await c(r,h,d.signal),d.signal.aborted)try{await r.cancel()}catch{}r.releaseLock(),y("closed"),!g&&i&&v()}catch(e){if(g||e instanceof DOMException&&"AbortError"===e.name)return void y("closed");y("error"),i&&v()}}};return{get state(){return u},connect:()=>{g=!1,p=0,w(),T()},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&&i(),eY.current!==e)return;eX.current?.(n)}catch{}},onStateChange:t=>{!function(e,t){let n=g().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()},k(n)),"connected"!==t&&"connected"===r&&b(n)}(e,t),"connected"===t&&(s&&(E(e),eZ.current?.(e,"sse_reconnected")),s=!0)},reconnectBaseMs:1e3,reconnectMaxMs:3e4}),l.connect()})},[]),tA=(0,r.useCallback)(async(e,t="manual")=>{if(!e||eY.current!==e)return;let n=tn.current;try{let t=await fetch(`/api/agent/${encodeURIComponent(e)}`),r=await t.json().catch(()=>({}));if(eY.current!==e||tn.current!==n)return;r.running?(eQ.current=!0,ec(!0),ez(a(r.state)),eV.current&&"closed"!==eV.current.state&&"error"!==eV.current.state||(E(e),tM(e,{replay:!0}))):(eQ.current=!1,eV.current?.close(),eV.current=null,x(e),ec(!1),ez(null),eE(null),ei({type:"end"}),D(e),await tb(e,!1,!1,!0)),r.state?.contextUsage!==void 0&&eA(r.state.contextUsage??null),r.state?.systemPrompt!==void 0&&e$(r.state.systemPrompt??null),r.state?.isCompacting!==void 0&&eF(r.state.isCompacting),r.state?.thinkingLevel!==void 0&&e_(r.state.thinkingLevel??"auto")}catch{}},[tM,tb]);(0,r.useEffect)(()=>{eZ.current=tA},[tA]),(0,r.useEffect)(()=>{eQ.current=eu},[eu]),eX.current=(0,r.useCallback)(e=>{let t=eY.current;switch(t&&function(e,t){let n=S(e),r=Date.now();switch(t.type){case"agent_start":if("active"===n.snapshot.phase)return T(n,!0),n.snapshot;return I(n),n.accumulatedText="",n.toolCalls.clear(),n.toolResults.clear(),n.activeToolId=null,n.snapshot={...y(e),phase:"active",startedAt:r,lastEventAt:r,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},k(n),T(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 T(n,!1),n.snapshot}case"tool_execution_start":{let e="string"==typeof t.toolCallId?t.toolCallId:"",a="string"==typeof t.toolName?t.toolName:"tool",o=t.input??{};if(!e)return n.snapshot;let s=n.toolCalls.get(e);return n.toolCalls.set(e,{type:"toolCall",toolCallId:e,toolName:a,input:s?.input??o,startedAt:s?.startedAt??r}),n.activeToolId=e,I(n),n.activeToolId&&(n.toolProgressTimer=setInterval(()=>T(n,!0),1e3)),T(n,!0),n.snapshot}case"tool_execution_end":{let e="string"==typeof t.toolCallId?t.toolCallId:"",a="string"==typeof t.toolName?t.toolName:"tool",o="string"==typeof t.result?t.result:JSON.stringify(t.result??"");if(e){let s=n.toolCalls.get(e);s&&n.toolCalls.set(e,{...s,endedAt:r}),n.toolResults.set(e,{role:"toolResult",toolCallId:e,toolName:a,content:[{type:"text",text:o}],isError:!!t.isError,timestamp:r}),n.activeToolId===e&&(n.activeToolId=null,I(n))}return T(n,!0),n.snapshot}case"message_end":return v(n),T(n,!0),n.snapshot;case"agent_end":{if(v(n),I(n),n.activeToolId=null,!0===t.willRetry)return n.accumulatedText="",n.toolCalls.clear(),n.toolResults.clear(),n.snapshot={...n.snapshot,phase:"active",lastEventAt:r,accumulatedText:"",toolCalls:[],toolResults:[],statusText:null,streamingMessage:null,isStreaming:!0,error:null},k(n),w(e,{type:"snapshot-updated",snapshot:n.snapshot}),n.snapshot;b(n);let a="string"==typeof t.error?t.error:null;return n.snapshot={...n.snapshot,phase:a?"error":"completed",isStreaming:!1,streamingMessage:null,statusText:null,error:a},w(e,a?{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),"heartbeat"!==e.type&&(tc.current=Date.now()),e.type){case"prompt_admitted":case"agent_start":eG(null),eQ.current=!0,ec(!0),ez({kind:"waiting_model"}),ei({type:"start"});break;case"agent_end":if(!0===e.willRetry){eQ.current=!0,ec(!0),ez({kind:"waiting_model"});break}eQ.current=!1,eV.current?.close(),eV.current=null,ec(!1),ez(null),eE(null),ei({type:"end"}),t&&(D(t),tb(t,!1,!1,!0),ti.current&&clearTimeout(ti.current),ti.current=setTimeout(()=>{eY.current!==t||eQ.current||(D(t),tb(t,!1,!1,!0))},500),fetch(`/api/agent/${encodeURIComponent(t)}`).then(e=>e.json()).then(e=>{e.state?.contextUsage!==void 0&&eA(e.state.contextUsage??null),e.state?.systemPrompt!==void 0&&e$(e.state.systemPrompt??null),e.state?.isCompacting!==void 0&&eF(e.state.isCompacting)}).catch(()=>{})),p?.();break;case"message_start":case"message_update":{let t=e.message;if(t?.role==="user")break;eQ.current||(eQ.current=!0,ec(!0),ez({kind:"waiting_model"})),t&&ei({type:"update",message:o(t)}),ez(null);break}case"message_end":{let n=e.message,r="string"==typeof e.__entryId?e.__entryId:null,a=eQ.current;if(n&&"user"!==n.role){"assistant"===n.role&&"error"===n.stopReason&&n.errorMessage?.trim()&&eG(`Model response failed: ${n.errorMessage.trim()}`);let e=o(n);if(!(r&&te.current.includes(r))){if(t&&r){let e=e8.current.get(t)??new Map;e.set(r,Date.now()),e8.current.set(t,e)}X(t=>t.some(t=>B(t,e))?t:[...t,e]),r&&ee(e=>{if(e.includes(r))return e;let t=[...e,r];return te.current=t,t})}}a&&(ei({type:"reset"}),ez({kind:"waiting_model"}));break}case"replay_gap":t&&(D(t),tb(t,!1,!1,!0));break;case"prompt_done":if(!eQ.current)break;tA(eY.current??"","prompt_done");break;case"prompt_error":{let n="string"==typeof e.error&&e.error.trim()?e.error.trim():"The model request failed before producing a response.";if(eQ.current=!1,ec(!1),ez(null),eE(null),ei({type:"end"}),eV.current?.close(),eV.current=null,t){for(let[e,n]of(x(t),e6.current))n.sessionId===t&&"prompt"===n.kind&&e6.current.delete(e);D(t),tb(t,!1,!1,!0)}eG(`Model request failed: ${n}`),p?.();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;ez(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;ez(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":eG(null),eQ.current=!0,ec(!0),ez({kind:"waiting_model"}),eE({attempt:e.attempt,maxAttempts:e.maxAttempts,errorMessage:e.errorMessage});break;case"auto_retry_end":eE(null),!1===e.success&&"string"==typeof e.finalError&&e.finalError.trim()?eG(`Model response failed after retries: ${e.finalError.trim()}`):!0===e.success&&eG(null);break;case"auto_compaction_start":case"compaction_start":eF(!0),eB(null);break;case"auto_compaction_end":case"compaction_end":eF(!1),e.errorMessage?eB(e.errorMessage):!e.aborted&&eY.current&&tb(eY.current)}},[tb,p,tA]);let tR=(0,r.useCallback)(async(e,r,a,o)=>{if(!e.trim()&&!r?.length&&!a?.length||eu)return;tn.current+=1;let c=tw(a),d=e.trim()?c?`${e}
|
|
5
|
-
|
|
6
|
-
Attached document text:
|
|
7
|
-
|
|
8
|
-
${c}`:e:c?`Attached document text:
|
|
9
|
-
|
|
10
|
-
${c}`:"",p=[],f=M?n:t?.cwd??J?.info?.cwd;if(r?.length&&f)try{p=await u(f,r)}catch(e){eG(e instanceof Error?e.message:String(e));return}let g=p.length?p.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,i.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?[...d.trim()?[{type:"text",text:d}]:[],...g]:d,timestamp:Date.now()},y=U(),w=M?null:t?.id??null;w&&D(w);let v=e9.current,T=O(h.content);e6.current.set(y,{localId:y,sessionId:w??"__new__",leafId:v,message:h,createdAt:Date.now(),kind:"prompt",confirmKey:T,confirmCountAtCreate:M?0:T?e7.current.get(T)??0:0}),X(e=>[...e,h]),eG(null),eQ.current=!0,ec(!0),ez({kind:"waiting_model"}),ei({type:"start"}),e3.current=!0;let C=em.find(e=>e.provider===tg?.provider&&e.id===tg?.modelId)?.input,k=!C||0===C.length||C.includes("image")?r?.map(e=>({type:"image",data:e.data,mimeType:e.mimeType})):void 0;try{if(M&&n){ev&&ej(ev);let t=o??ty(),r=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:n,type:"prompt",message:d,toolNames:t,deferPrompt:!0,...k?.length?{images:k}:{},...ev?{provider:ev.provider,modelId:ev.modelId}:{},..."auto"!==eS?{thinkingLevel:eS}:{}})}),a=await r.json().catch(()=>({}));if(!r.ok||a.error||!a.sessionId)throw Error(a.error??`HTTP ${r.status}`);let s=a.sessionId;eY.current=s;let i=e6.current.get(y);i&&(i.sessionId=s),e0.current?.(),e0.current=_(s,()=>{eY.current===s&&(ec(!1),ez(null))}),tt.current=s,await tM(s,{requireConnected:!0,timeoutMs:1e4}),await l(s,{type:"prompt",message:d,toolNames:t,...k?.length?{images:k}:{}}),m?.({id:s,path:"",cwd:n,name:void 0,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:e})}else if(t){let e=o??ty();await tv(t.id),e0.current?.(),e0.current=_(t.id,()=>{eY.current===t.id&&(ec(!1),ez(null))}),await tM(t.id,{requireConnected:!0,timeoutMs:1e4}),await l(t.id,{type:"prompt",message:d,toolNames:e,leafId:v,...tg?{provider:tg.provider,modelId:tg.modelId}:{},..."auto"!==eS?{thinkingLevel:eS}:{},...k?.length?{images:k}:{}})}}catch(t){let e=eY.current;if(e6.current.delete(y),X(e=>e.filter(e=>e!==h)),t instanceof s&&(409===t.status||"SESSION_BUSY"===t.code)){eG("This session is already running in another tab. Showing that active run instead."),eQ.current=!0,ec(!0),ez({kind:"waiting_model"}),ei({type:"start"}),e&&(eV.current?.close(),eV.current=null,E(e),tM(e,{replay:!0}),eZ.current?.(e,"prompt_conflict"));return}if(console.error("Failed to send message:",t),M&&eY.current){let e=eY.current;eY.current=null,tt.current=null,fetch(`/api/sessions/${encodeURIComponent(e)}`,{method:"DELETE"}).catch(()=>{})}eG(t instanceof Error?t.message:String(t)),eV.current?.close(),eV.current=null,e&&x(e),eQ.current=!1,ec(!1),ez(null),ei({type:"end"})}},[M,n,ev,ty,eS,t,J?.info?.cwd,eu,tM,m,tw,em,tg,tv]),t$=(0,r.useCallback)(async()=>{let e=eY.current;if(e){eQ.current=!1,eG(null),ec(!1),ez(null),ei({type:"end"}),eV.current?.close(),eV.current=null,x(e),D(e);try{await l(e,{type:"abort"}),await tb(e,!1,!1,!0)}catch(t){console.error("Failed to abort:",t),await tb(e,!1,!1,!0)}}},[tb]),tD=(0,r.useCallback)(async e=>{let t=eY.current;if(t){eL(e);try{let{cancelled:n,newSessionId:r}=await l(t,{type:"fork",entryId:e})??{};!n&&r&&f?.(r)}catch(e){console.error("Fork failed:",e)}finally{eL(null)}}},[f]),tL=(0,r.useCallback)(async e=>{let r=eY.current,a=J?.info?.cwd??t?.cwd??n??null;if(!r||!a)return{ok:!1,error:"No active session to fork"};if(eQ.current)return{ok:!1,error:"Agent is still running"};try{let t=ty(),n=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:a,type:"prompt",parentSessionId:r,deferPrompt:!0,toolNames:t,...tg?{provider:tg.provider,modelId:tg.modelId}:{},..."auto"!==eS?{thinkingLevel:eS}:{}})}),o=await n.json().catch(()=>({}));if(!n.ok||o.error||!o.sessionId)return{ok:!1,error:o.error??`HTTP ${n.status}`};let s=o.sessionId;try{await l(s,{type:"append_message",message:e,customType:"fork_handoff",display:!0})}catch{}return m?.({id:s,path:"",cwd:a,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:e.slice(0,120),parentSessionId:r}),{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}},[J?.info?.cwd,t?.cwd,n,tg,eS,ty,m]),tP=(0,r.useCallback)(async e=>{let t=eY.current;t&&(e8.current.delete(t),D(t),e9.current=e,Y(e),await tx(t,e))},[tx]),tN=(0,r.useCallback)(async e=>{e9.current=e,Y(e);let t=eY.current;t&&(e8.current.delete(t),D(t),await tx(t,e))},[tx]),tU=(0,r.useCallback)(async(e,t)=>{if(M)return void tp({provider:e,modelId:t});let n=eY.current;if(n)try{var r;eG(null);let a=await l(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)&&e_(a.thinkingLevel),eN(o),K(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),eG(e)}},[M,tp]),tj=(0,r.useCallback)(async()=>{let e=eY.current;if(e&&!eO){eF(!0),eB(null),eK(null);try{let t=await l(e,{type:"compact"});t?.reducedBy!=null&&eK(`Compacted ~${t.tokensBefore??"?"} → ~${t.tokensAfter??"?"} tokens (−${t.reducedBy})`),await tb(e,!0)}catch(e){eB(e instanceof Error?e.message:String(e))}finally{eF(!1)}}},[eO,tb]),tO=(0,r.useCallback)(async(e,t,n)=>{let r=eY.current;if(!r)return;D(r);let a=tw(n),o=e.trim()?a?`${e}
|
|
11
|
-
|
|
12
|
-
Attached document text:
|
|
13
|
-
|
|
14
|
-
${a}`:e:a?`Attached document text:
|
|
15
|
-
|
|
16
|
-
${a}`:"",s=em.find(e=>e.provider===tg?.provider&&e.id===tg?.modelId)?.input,i=!s||0===s.length||s.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=U(),d=j(o,i?.length??0);e6.current.set(c,{localId:c,sessionId:r,leafId:e9.current,message:u,createdAt:Date.now(),kind:"steer",confirmKey:d,confirmCountAtCreate:d?e7.current.get(d)??0:0}),X(e=>[...e,u]);try{await l(r,{type:"steer",message:o,...i?.length?{images:i}:{}})}catch(e){e6.current.delete(c),console.error("Failed to steer:",e)}},[tw,em,tg]),tF=(0,r.useCallback)(async(e,t,n)=>{let r=eY.current;if(!r)return;D(r);let a=tw(n),o=e.trim()?a?`${e}
|
|
17
|
-
|
|
18
|
-
Attached document text:
|
|
19
|
-
|
|
20
|
-
${a}`:e:a?`Attached document text:
|
|
21
|
-
|
|
22
|
-
${a}`:"",s=em.find(e=>e.provider===tg?.provider&&e.id===tg?.modelId)?.input,i=!s||0===s.length||s.includes("image")?t?.map(e=>({type:"image",data:e.data,mimeType:e.mimeType})):void 0,u={role:"user",content:o,timestamp:Date.now()},c=U(),d=j(o,i?.length??0);e6.current.set(c,{localId:c,sessionId:r,leafId:e9.current,message:u,createdAt:Date.now(),kind:"follow_up",confirmKey:d,confirmCountAtCreate:d?e7.current.get(d)??0:0}),X(e=>[...e,u]);try{await l(r,{type:"follow_up",message:o,...i?.length?{images:i}:{}})}catch(e){e6.current.delete(c),console.error("Failed to follow up:",e)}},[tw,em,tg]),tH=(0,r.useCallback)(async()=>{let e=eY.current;if(e)try{await l(e,{type:"abort_compaction"})}catch(e){console.error("Failed to abort compaction:",e)}},[]),tB=(0,r.useCallback)(async e=>{if(e_(e),"auto"===e)return;let t=eY.current;if(t)try{await l(t,{type:"set_thinking_level",level:e})}catch(e){console.error("Failed to set thinking level:",e)}},[]),tJ=(0,r.useCallback)(async e=>{tm(e);let t=(0,L.tE)(e,eb),n=eY.current;if(n)try{await l(n,{type:"set_tools",toolNames:t})}catch(e){console.error("Failed to set tools:",e)}},[eb,tm]),tK=(0,r.useCallback)(async e=>{tf(e);let t=(0,L.tE)(eC,e),n=eY.current;if(n)try{await l(n,{type:"set_tools",toolNames:t})}catch(e){console.error("Failed to set memory tools:",e)}},[tf,eC]),tW=(0,r.useCallback)((e="smooth")=>{e5.current?.scrollIntoView({behavior:e})},[]),tz=(0,r.useCallback)(()=>{let e=e2.current,t=e4.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(eY.current=t.id,t.id===tt.current)return tt.current=null,()=>{ti.current&&clearTimeout(ti.current),ti.current=null,eV.current?.close(),eV.current=null,e0.current?.(),e0.current=null};to.current=!1,ta.current=0;let r=(e=t.id,(n=g().get(e))&&"idle"!==n.snapshot.phase?n.snapshot:null);r?.phase==="active"&&(eQ.current=!0,ec(!0),ez({kind:"waiting_model"}),ei({type:"start"})),(async()=>{let e=await tb(t.id,!0,!0,!0);eY.current===t.id&&(await tE(t.id),e?.running?(eQ.current=!0,ec(!0),ez(a(e.state)),ei({type:"start"}),tM(t.id,{replay:!0}),e0.current?.(),e0.current=_(t.id,()=>{eY.current===t.id&&eZ.current?.(t.id,"stream_watchdog")})):e&&r?.phase==="active"?(eQ.current=!1,ec(!1),ez(null),ei({type:"end"}),x(t.id)):e||r?.phase!=="active"||eZ.current?.(t.id,"mount_state_load_failed"),e?.state&&(void 0!==e.state.isCompacting&&eF(e.state.isCompacting),void 0!==e.state.contextUsage&&eA(e.state.contextUsage??null),void 0!==e.state.systemPrompt&&e$(e.state.systemPrompt??null),void 0!==e.state.thinkingLevel&&e_(e.state.thinkingLevel??"auto")),e&&!eQ.current&&e.state?.contextUsage===void 0&&eZ.current?.(t.id,"mount_context_usage"))})()}return()=>{tt.current&&eY.current===tt.current||(ti.current&&clearTimeout(ti.current),ti.current=null,tu.current?.controller.abort(N("Session changed","AbortError")),tu.current=null,eV.current?.close(),eV.current=null,e0.current?.(),e0.current=null)}},[tM,tb,tE,C,t]),(0,r.useEffect)(()=>{let e=()=>{let e=eY.current;e&&tA(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)}},[tA]),(0,r.useEffect)(()=>{let e=eY.current;if(e)return ts.current=!1,(0,d.O)(t=>{let n=t.includes(e),r=ts.current;ts.current=n,n&&!eQ.current?(D(e),tA(e,"running_feed_start")):!n&&r&&(D(e),eQ.current?tA(e,"running_feed_stop"):tb(e,!1,!1,!0))})},[tb,tA,t?.id]),(0,r.useEffect)(()=>{let e=window.setInterval(()=>{let e=eY.current;e&&(eQ.current?(tA(e,"interval"),td.current&&Date.now()-tc.current>25e3&&(tc.current=Date.now(),D(e),tb(e,!1,!1,!0))):Date.now()-tl.current>=3e4?(tl.current=Date.now(),D(e),tb(e,!1,!1,!0)):tb(e))},15e3);return()=>window.clearInterval(e)},[tb,tA]),(0,r.useEffect)(()=>{C&&C(J?.tree??[],V,tN)},[J?.tree,V,tN,C]),(0,r.useEffect)(()=>{Q.length>0&&!tr.current&&(e3.current?(e3.current=!1,e1.current=!0,tz()):e1.current?eQ.current||tW("smooth"):(e1.current=!0,tW("instant")))},[Q.length,eu,tW,tz]),(0,r.useEffect)(()=>{fetch("/api/models").then(e=>e.json()).then(e=>{if(ep(e.models),e.thinkingLevels&&eh(e.thinkingLevels),e.thinkingLevelMaps&&ew(e.thinkingLevelMaps),e.modelList&&(ef(e.modelList),M&&e.modelList.length>0)){let t=e.defaultModel,n=t&&e.modelList.find(e=>e.id===t.modelId&&e.provider===t.provider);tp(n?{provider:n.provider,modelId:n.id}:{provider:e.modelList[0].provider,modelId:e.modelList[0].id})}}).catch(()=>{})},[M,h,tp]),(0,r.useEffect)(()=>{if(!eH)return;let e=setTimeout(()=>eB(null),3e3);return()=>clearTimeout(e)},[eH]),(0,r.useEffect)(()=>{if(!eJ)return;let e=setTimeout(()=>eK(null),6e3);return()=>clearTimeout(e)},[eJ]),{data:J,loading:W,error:q,activeLeafId:V,messages:Q,entryIds:Z,streamState:el,agentRunning:eu,modelNames:ed,modelList:em,modelThinkingLevels:eg,modelThinkingLevelMaps:ey,newSessionModel:ev,toolPreset:eC,memoryTools:eb,thinkingLevel:eS,retryInfo:ex,contextUsage:eM,systemPrompt:eR,forkingEntryId:eD,isCompacting:eO,compactError:eH,compactInfo:eJ,currentModel:tg,displayModel:th,sessionStats:tT,agentPhase:eW,agentError:eq,isNew:M,sessionIdRef:eY,sseReaderRef:eV,messagesEndRef:e5,scrollContainerRef:e2,lastUserMsgRef:e4,pendingScrollToUserRef:e3,initialScrollDoneRef:e1,handleSend:tR,handleAbort:t$,handleFork:tD,handleNavigate:tP,handleModelChange:tU,handleCompact:tj,handleSteer:tO,handleFollowUp:tF,handleAbortCompaction:tH,handleToolPresetChange:tJ,handleMemoryToolsChange:tK,handleThinkingLevelChange:tB,loadTools:tE,setActiveLeafId:Y,setData:K,setMessages:X,dispatch:ei,setAgentRunning:ec,setForkingEntryId:eL,forkToNewSession:tL,loadMoreMessages:tS,hasMoreMessages:er,totalMessages:et,loadedMessagesCount:eo,loadShadowedMessages:t_,handleAgentEventRef:eX}}}}]);
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8982],{18416:(e,t,n)=>{Promise.resolve().then(n.bind(n,77593))},77593:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>g});var s=n(95155),o=n(12115),r=n(90247),i=n(94456);let a="session-stream-smoke",d={role:"user",content:"baseline",timestamp:1},l={role:"assistant",content:[{type:"text",text:"remote completion"}],provider:"smoke",model:"smoke-model",timestamp:2},m={role:"assistant",content:[{type:"text",text:"remote progress before conflict"}],provider:"smoke",model:"smoke-model",timestamp:3},c={role:"assistant",content:[],provider:"smoke",model:"smoke-model",stopReason:"error",errorMessage:"stream_read_error",timestamp:2},u={id:a,path:"/tmp/session-stream-smoke.jsonl",cwd:"/tmp/annovibe-session-stream-smoke",created:new Date(0).toISOString(),modified:new Date(0).toISOString(),messageCount:1,firstMessage:"baseline"};function p(e,t=200){return new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":"application/json"}})}function h(){let e=(0,r.T)({session:u,newSessionCwd:null}),t=e.messages.filter(e=>"assistant"===e.role).length,n=(0,o.useRef)(0),[a,d]=(0,o.useState)(!1),l=e.messages.filter(e=>"user"===e.role&&"concurrent prompt"===e.content).length,m=e.agentPhase?.kind??"idle";return(0,o.useEffect)(()=>{t<n.current?d(!0):n.current=t},[t]),(0,s.jsxs)("main",{style:{padding:24,fontFamily:"sans-serif"},children:[(0,s.jsx)("h1",{children:"Session stream smoke"}),(0,s.jsx)("div",{"data-smoke-running":e.agentRunning?"true":"false",children:e.agentRunning?"running":"idle"}),(0,s.jsx)("div",{"data-smoke-message-count":e.messages.length,children:e.messages.length}),(0,s.jsx)("div",{"data-smoke-assistant-count":t,children:t}),(0,s.jsx)("div",{"data-smoke-assistant-regressed":a?"true":"false",children:a?"regressed":"stable"}),(0,s.jsx)("div",{"data-smoke-conflict-optimistic-count":l,children:l}),(0,s.jsx)("div",{"data-smoke-error":e.agentError??"none",children:e.agentError??"none"}),(0,s.jsx)("div",{"data-smoke-phase":m,children:m}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteStart(),children:"Remote start"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteToolStart(),children:"Remote tool start"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFinish(),children:"Remote finish"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFinishWithStaleRead(),children:"Remote finish with stale read"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remoteFail(),children:"Remote fail"}),(0,s.jsx)("button",{type:"button",onClick:()=>window.__sessionStreamSmoke?.remotePromptError(),children:"Prompt error"}),(0,s.jsx)("button",{type:"button",onClick:()=>{window.__sessionStreamSmoke?.prepareConcurrentPrompt(),e.handleSend("concurrent prompt")},children:"Concurrent prompt"}),(0,s.jsx)("section",{style:{marginTop:24,maxWidth:760},children:e.messages.map((e,t)=>(0,s.jsx)(i.D,{message:e},t))})]})}function g(){let[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!0);return(0,o.useEffect)(()=>{let e=window.fetch.bind(window),n=window.EventSource,s=!1,o=!1,r=null,i="idle",h=[],g=[d],S=["entry-user"],w=0,f=new Set,k=new Set,y=new TextEncoder;class _{static{this.CONNECTING=0}static{this.OPEN=1}static{this.CLOSED=2}static{this.instances=new Set}constructor(e){this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,this.withCredentials=!1,this.readyState=1,this.onopen=null,this.onmessage=null,this.onerror=null,this.url=String(e),_.instances.add(this),window.setTimeout(()=>{this.onopen?.call(this,new Event("open")),this.emitRunning()},0)}close(){this.readyState=2,_.instances.delete(this)}addEventListener(){}removeEventListener(){}dispatchEvent(){return!0}emitRunning(){1===this.readyState&&this.url.includes("/api/agent/running/events")&&this.onmessage?.call(this,new MessageEvent("message",{data:JSON.stringify({type:"running",runningSessionIds:s?[a]:[]})}))}}let b=()=>{let e=s?[a]:[];for(let t of f)t(e);for(let e of _.instances)e.emitRunning()},v=(e,t)=>{let n=y.encode(`id: ${e}
|
|
2
|
-
data: ${JSON.stringify(t)}
|
|
3
|
-
|
|
4
|
-
`);for(let e of k)e.enqueue(n)};return window.fetch=async(t,n)=>{let l="string"==typeof t?t:t instanceof URL?t.toString():t.url,c=n?.method??"GET";if(l.includes(`/api/agent/${a}/events`)){let e=null;return new Response(new ReadableStream({start(t){e=t,k.add(t),t.enqueue(y.encode(`data: ${JSON.stringify({type:"connected",sessionId:a})}
|
|
5
|
-
|
|
6
|
-
`))},cancel(){e&&k.delete(e),e=null}}),{headers:{"Content-Type":"text/event-stream"}})}if(l.includes(`/api/sessions/${a}`)){let e=w>0;e&&(w-=1);let t=e?[d]:g,n=e?["entry-user"]:S;return e&&await new Promise(e=>window.setTimeout(e,75)),p({sessionId:a,filePath:u.path,info:u,tree:[],leafId:n[n.length-1]??null,context:{messages:t,entryIds:n,thinkingLevel:"off",model:{provider:"smoke",modelId:"smoke-model"}},totalMessages:t.length,hasMore:!1,agentState:{running:s,state:{isStreaming:"streaming"===i,isCompacting:!1,phase:i,activeTools:h,thinkingLevel:"off",contextUsage:null}}})}if(l.endsWith(`/api/agent/${a}`)&&"GET"===c)return p({running:s,state:{isStreaming:"streaming"===i,isCompacting:!1,phase:i,activeTools:h,thinkingLevel:"off",contextUsage:null}});if(l.endsWith(`/api/agent/${a}/prepare`)&&"POST"===c)return p({ok:!0,sessionId:a});if(l.endsWith(`/api/agent/${a}`)&&"POST"===c){let e=JSON.parse(String(n?.body??"{}"));return("prompt"===e.type&&(r=e),"prompt"===e.type&&o)?(o=!1,g=[...g,m],S=[...S,"entry-assistant-conflict"],v("smoke-epoch:conflict",{type:"message_end",message:m,__entryId:"entry-assistant-conflict"}),p({error:"Session is already processing",code:"SESSION_BUSY"},409)):p({success:!0,data:"get_tools"===e.type?[]:null})}return"/api/models"===l||l.endsWith("/api/models")?p({models:{"smoke:smoke-model":"Smoke model"},modelList:[{id:"smoke-model",name:"Smoke model",provider:"smoke"}],defaultModel:{provider:"smoke",modelId:"smoke-model"}}):e(t,n)},Object.defineProperty(window,"EventSource",{configurable:!0,writable:!0,value:_}),window.__annovibeRunningSessionSubscribe=e=>(f.add(e),e(s?[a]:[]),()=>f.delete(e)),window.__sessionStreamSmoke={remoteStart(){s=!0,i="waiting_model",h=[],b()},remoteToolStart(){s=!0,i="running_tools",h=[{id:"tool-background",name:"bash"}],b()},remoteFinish(){g=[d,l],S=["entry-user","entry-assistant"],s=!1,i="idle",h=[],v("smoke-epoch:1",{type:"message_end",message:l,__entryId:"entry-assistant"}),v("smoke-epoch:2",{type:"agent_end"}),b()},remoteFinishWithStaleRead(){g=[d,l],S=["entry-user","entry-assistant"],w=1,s=!1,i="idle",h=[],v("smoke-epoch:stale:1",{type:"message_end",message:l,__entryId:"entry-assistant"}),v("smoke-epoch:stale:2",{type:"agent_end"}),b()},remoteFail(){g=[d,c],S=["entry-user","entry-assistant-error"],s=!1,i="idle",h=[],v("smoke-epoch:error:1",{type:"message_end",message:c,__entryId:"entry-assistant-error"}),v("smoke-epoch:error:2",{type:"agent_end"}),b()},remotePromptError(){s=!1,i="idle",h=[],v("smoke-epoch:prompt-error",{type:"prompt_error",error:"No API key configured for smoke provider"}),b()},prepareConcurrentPrompt(){s=!0,i="waiting_model",h=[],o=!0},streamCount:()=>k.size,lastPromptModel:()=>r?.provider&&r.modelId?`${r.provider}/${r.modelId}`:null},t(!0),()=>{for(let t of(delete window.__sessionStreamSmoke,delete window.__annovibeRunningSessionSubscribe,f.clear(),window.fetch=e,Object.defineProperty(window,"EventSource",{configurable:!0,writable:!0,value:n}),k))try{t.close()}catch{}k.clear()}},[]),e?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",onClick:()=>r(e=>!e),children:n?"Switch away":"Switch back"}),n?(0,s.jsx)(h,{}):(0,s.jsx)("div",{"data-smoke-switched-away":!0,children:"away"})]}):null}}},e=>{e.O(0,[7330,2941,2995,2693,4456,247,8441,3794,7358],()=>e(e.s=18416)),_N_E=e.O()}]);
|
|
File without changes
|
|
File without changes
|