@seqyuan/annovibe 0.8.146 → 0.8.147

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +10 -10
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +4 -4
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/agent/runtime/route.js +1 -1
  20. package/.next/server/app/api/internal/runtime/route.js +1 -1
  21. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  22. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  23. package/.next/server/app/api/sessions/[id]/shadowed/route.js +1 -1
  24. package/.next/server/app/api/version/route.js +1 -1
  25. package/.next/server/app/index.html +1 -1
  26. package/.next/server/app/index.rsc +6 -6
  27. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  28. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  29. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  30. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/login.html +1 -1
  32. package/.next/server/app/login.rsc +2 -2
  33. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  34. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  35. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  36. package/.next/server/app/page.js +4 -4
  37. package/.next/server/app/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/smoke/page.js +2 -2
  39. package/.next/server/app/smoke/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/smoke/session-stream/page.js +1 -1
  41. package/.next/server/app/smoke/session-stream/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/smoke/session-stream.html +1 -1
  43. package/.next/server/app/smoke/session-stream.rsc +6 -6
  44. package/.next/server/app/smoke/session-stream.segments/_full.segment.rsc +6 -6
  45. package/.next/server/app/smoke/session-stream.segments/_tree.segment.rsc +2 -2
  46. package/.next/server/app/smoke/session-stream.segments/smoke/session-stream/__PAGE__.segment.rsc +6 -6
  47. package/.next/server/app/smoke.html +3 -51
  48. package/.next/server/app/smoke.rsc +5 -5
  49. package/.next/server/app/smoke.segments/_full.segment.rsc +5 -5
  50. package/.next/server/app/smoke.segments/_tree.segment.rsc +2 -2
  51. package/.next/server/app/smoke.segments/smoke/__PAGE__.segment.rsc +5 -5
  52. package/.next/server/app-paths-manifest.json +10 -10
  53. package/.next/server/chunks/3048.js +264 -0
  54. package/.next/server/chunks/7180.js +22 -0
  55. package/.next/server/middleware-build-manifest.js +1 -1
  56. package/.next/server/pages/404.html +1 -1
  57. package/.next/server/pages/500.html +1 -1
  58. package/.next/server/preview-props.json +3 -3
  59. package/.next/server/server-reference-manifest.json +1 -1
  60. package/.next/static/chunks/3449-773a78c2b25dadd5.js +260 -0
  61. package/.next/static/chunks/8477-e7cabb053e63e504.js +22 -0
  62. package/.next/static/chunks/app/{page-de91c8247d46a20b.js → page-1ea50af93da7d407.js} +4 -4
  63. package/.next/static/chunks/app/smoke/{page-7226fa31540df8a8.js → page-bad59997a18b33e8.js} +2 -2
  64. package/.next/static/chunks/app/smoke/session-stream/{page-ed9bc29486c9e75d.js → page-9f43d950df17f1d3.js} +2 -2
  65. package/.next/static/css/be5cdd302b05dc22.css +1 -0
  66. package/package.json +1 -1
  67. package/.next/server/chunks/4801.js +0 -22
  68. package/.next/server/chunks/8305.js +0 -264
  69. package/.next/static/chunks/6630-afa0ca63437a28c6.js +0 -22
  70. package/.next/static/chunks/9867-11130aa00dcc6aa8.js +0 -260
  71. package/.next/static/css/d68ecb6695873888.css +0 -1
  72. /package/.next/static/{MHc4xkUiwo0WjuBfXFXEz → 33lxcaITML1UfRwyCMnDs}/_buildManifest.js +0 -0
  73. /package/.next/static/{MHc4xkUiwo0WjuBfXFXEz → 33lxcaITML1UfRwyCMnDs}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2444],{54833:(e,t,o)=>{"use strict";o.r(t),o.d(t,{default:()=>Y});var i=o(95155),r=o(12115),s=o(25618),n=o(76577),a=o(8391),d=o(99867),l=o(99670),c=o(31775),m=o(56264),p=o(49006),x=o(18678),u=o(99947),g=o(28093),h=o(17689),f=o(63161),k=o(53308),v=o(6750),w=o(96793);let b="/tmp/annovibe-smoke",y=`${b}/README.smoke.md`,j="/Volumes/data/github/seqyuan/annovibe",D=`${j}/smoke/report.md`,S=Date.UTC(2026,5,6,6,26,0);function C(e=0){return S+6e4*e}let E="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22640%22%20height%3D%22360%22%20viewBox%3D%220%200%20640%20360%22%3E%3Crect%20width%3D%22640%22%20height%3D%22360%22%20rx%3D%2224%22%20fill%3D%22%23f3f4f6%22%2F%3E%3Crect%20x%3D%2232%22%20y%3D%2232%22%20width%3D%22576%22%20height%3D%22296%22%20rx%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23d1d5db%22%2F%3E%3Ccircle%20cx%3D%22132%22%20cy%3D%22140%22%20r%3D%2256%22%20fill%3D%22%2360a5fa%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%2296%22%20width%3D%22272%22%20height%3D%2220%22%20rx%3D%2210%22%20fill%3D%22%23111827%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22132%22%20width%3D%22208%22%20height%3D%2216%22%20rx%3D%228%22%20fill%3D%22%236b7280%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22162%22%20width%3D%22168%22%20height%3D%2216%22%20rx%3D%228%22%20fill%3D%22%239ca3af%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22214%22%20width%3D%22128%22%20height%3D%2236%22%20rx%3D%2210%22%20fill%3D%22%232563eb%22%2F%3E%3Ctext%20x%3D%22280%22%20y%3D%22237%22%20font-family%3D%22Arial%2C%20sans-serif%22%20font-size%3D%2216%22%20text-anchor%3D%22middle%22%20fill%3D%22%23ffffff%22%3EAlpha%3C%2Ftext%3E%3C%2Fsvg%3E",T=`
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2444],{54833:(e,t,o)=>{"use strict";o.r(t),o.d(t,{default:()=>Y});var i=o(95155),r=o(12115),s=o(25618),n=o(76577),a=o(8391),d=o(93449),l=o(99670),c=o(31775),m=o(56264),p=o(49006),x=o(18678),u=o(99947),g=o(28093),h=o(17689),f=o(63161),k=o(53308),v=o(6750),w=o(96793);let b="/tmp/annovibe-smoke",y=`${b}/README.smoke.md`,j="/Volumes/data/github/seqyuan/annovibe",D=`${j}/smoke/report.md`,S=Date.UTC(2026,5,6,6,26,0);function C(e=0){return S+6e4*e}let E="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22640%22%20height%3D%22360%22%20viewBox%3D%220%200%20640%20360%22%3E%3Crect%20width%3D%22640%22%20height%3D%22360%22%20rx%3D%2224%22%20fill%3D%22%23f3f4f6%22%2F%3E%3Crect%20x%3D%2232%22%20y%3D%2232%22%20width%3D%22576%22%20height%3D%22296%22%20rx%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23d1d5db%22%2F%3E%3Ccircle%20cx%3D%22132%22%20cy%3D%22140%22%20r%3D%2256%22%20fill%3D%22%2360a5fa%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%2296%22%20width%3D%22272%22%20height%3D%2220%22%20rx%3D%2210%22%20fill%3D%22%23111827%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22132%22%20width%3D%22208%22%20height%3D%2216%22%20rx%3D%228%22%20fill%3D%22%236b7280%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22162%22%20width%3D%22168%22%20height%3D%2216%22%20rx%3D%228%22%20fill%3D%22%239ca3af%22%2F%3E%3Crect%20x%3D%22216%22%20y%3D%22214%22%20width%3D%22128%22%20height%3D%2236%22%20rx%3D%2210%22%20fill%3D%22%232563eb%22%2F%3E%3Ctext%20x%3D%22280%22%20y%3D%22237%22%20font-family%3D%22Arial%2C%20sans-serif%22%20font-size%3D%2216%22%20text-anchor%3D%22middle%22%20fill%3D%22%23ffffff%22%3EAlpha%3C%2Ftext%3E%3C%2Fsvg%3E",T=`
2
2
  # Generative UI Smoke
3
3
 
4
4
  Inline code: \`const answer = 42\`
@@ -96,4 +96,4 @@ ${P}
96
96
  ${R}
97
97
  \`\`\``,renderer:"react-markdown"})}),(0,i.jsx)(ee,{title:"Short Code Block",dataSmoke:"short-code-block",children:(0,i.jsx)(a.T,{content:"```ts\nconst shortValue = 7;\nconsole.log(shortValue);\n```",renderer:"react-markdown"})}),(0,i.jsx)(ee,{title:"Shiki Cache",dataSmoke:"shiki-cache",children:(0,i.jsx)(K,{})}),(0,i.jsx)(ee,{title:"Shiki Async",dataSmoke:"shiki-async",children:(0,i.jsx)(Q,{})}),(0,i.jsx)(ee,{title:"Unknown Language Fallback",dataSmoke:"shiki-fallback",children:(0,i.jsx)(a.T,{content:'```mysterydsl\nfoo: alpha\nbar -> beta\nemit "plain text fallback"\n```\n',renderer:"react-markdown"})}),(0,i.jsx)(ee,{title:"Clipboard Mock",dataSmoke:"clipboard-mock",children:(0,i.jsx)(Z,{})}),(0,i.jsx)(ee,{title:"Local Paths",dataSmoke:"local-paths",children:(0,i.jsx)(X,{})}),(0,i.jsx)(ee,{title:"Local Preview Paths",dataSmoke:"local-preview-paths",children:(0,i.jsx)(d.D,{message:V,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:j})}),(0,i.jsx)(ee,{title:"SVG Visual Code",dataSmoke:"svg-visual-code",children:(0,i.jsx)(d.D,{message:B,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b,renderVisualCodeBlocks:!0})}),(0,i.jsx)(ee,{title:"Compound Components",dataSmoke:"compound-components",children:(0,i.jsx)(H,{})}),(0,i.jsx)(ee,{title:"Process Panel",dataSmoke:"process-panel",children:(0,i.jsx)(l.kD,{tools:g,results:h,thinkingBlocks:[{content:"Reviewing assistant markdown renderer and tool result layout.",duration:8}],isStreaming:o,cwd:b})}),(0,i.jsx)(ee,{title:"MessageView Integration",dataSmoke:"message-view",children:(0,i.jsx)(d.D,{message:O,isStreaming:!0,toolResults:f,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b,renderVisualCodeBlocks:!0})}),(0,i.jsx)(ee,{title:"User Image Message",dataSmoke:"user-image-message",children:(0,i.jsx)(d.D,{message:G,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b})}),(0,i.jsx)(ee,{title:"Custom MessageView",dataSmoke:"custom-message-view",children:(0,i.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[(0,i.jsx)(d.D,{message:U,showTimestamp:!0,modelNames:{"smoke:gpt-5":"Smoke GPT-5"}}),(0,i.jsx)(d.D,{message:z,showTimestamp:!0,modelNames:{"smoke:gpt-5":"Smoke GPT-5"}})]})}),(0,i.jsx)(ee,{title:"Widget Streaming Placeholder",dataSmoke:"widget-streaming",children:(0,i.jsx)(d.D,{message:I,isStreaming:!0,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b})}),(0,i.jsx)(ee,{title:"Non-CDN Widget",dataSmoke:"widget-no-shimmer",children:(0,i.jsx)(d.D,{message:W,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b})}),(0,i.jsx)(ee,{title:"Report Update Placeholder",dataSmoke:"report-update",children:(0,i.jsx)(d.D,{message:$,modelNames:{"smoke:gpt-5":"Smoke GPT-5"},cwd:b})}),(0,i.jsx)(ee,{title:"FileViewer Integration",dataSmoke:"file-viewer",children:(0,i.jsx)(q,{})}),(0,i.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(320px, 1fr))",gap:16},children:[(0,i.jsx)(ee,{title:"TerminalOutput ANSI",dataSmoke:"terminal-output",children:(0,i.jsx)(c.m,{text:`${L}
98
98
  ${R}`,background:"var(--bg-panel)"})}),(0,i.jsx)(ee,{title:"ToolResultPreview",dataSmoke:"tool-result-preview",children:(0,i.jsx)(m.qb,{text:`${L}
99
- ${R}`,isEmpty:!1,isError:!1,images:[],imagePaths:[]})})]})]})})}function ee({title:e,children:t,dataSmoke:o}){return(0,i.jsxs)("section",{"data-smoke":o,style:{border:"1px solid var(--border)",borderRadius:8,background:"var(--assistant-bg)",overflow:"hidden"},children:[(0,i.jsx)("div",{style:{padding:"10px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",fontSize:12,color:"var(--text-muted)",fontWeight:600},children:e}),(0,i.jsx)("div",{style:{padding:14},children:t})]})}function et({title:e,children:t,dataSmoke:o}){return(0,i.jsxs)("div",{"data-smoke":o,style:{border:"1px solid var(--border)",borderRadius:8,background:"var(--assistant-bg)",padding:12,display:"flex",flexDirection:"column",gap:10,minHeight:92},children:[(0,i.jsx)("div",{style:{fontSize:12,color:"var(--text-muted)",fontWeight:600},children:e}),(0,i.jsx)("div",{children:t})]})}},74e3:(e,t,o)=>{Promise.resolve().then(o.bind(o,54833))}},e=>{e.O(0,[7330,2941,2995,6079,2693,2254,9867,5618,8441,3794,7358],()=>e(e.s=74e3)),_N_E=e.O()}]);
99
+ ${R}`,isEmpty:!1,isError:!1,images:[],imagePaths:[]})})]})]})})}function ee({title:e,children:t,dataSmoke:o}){return(0,i.jsxs)("section",{"data-smoke":o,style:{border:"1px solid var(--border)",borderRadius:8,background:"var(--assistant-bg)",overflow:"hidden"},children:[(0,i.jsx)("div",{style:{padding:"10px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",fontSize:12,color:"var(--text-muted)",fontWeight:600},children:e}),(0,i.jsx)("div",{style:{padding:14},children:t})]})}function et({title:e,children:t,dataSmoke:o}){return(0,i.jsxs)("div",{"data-smoke":o,style:{border:"1px solid var(--border)",borderRadius:8,background:"var(--assistant-bg)",padding:12,display:"flex",flexDirection:"column",gap:10,minHeight:92},children:[(0,i.jsx)("div",{style:{fontSize:12,color:"var(--text-muted)",fontWeight:600},children:e}),(0,i.jsx)("div",{children:t})]})}},74e3:(e,t,o)=>{Promise.resolve().then(o.bind(o,54833))}},e=>{e.O(0,[7330,2941,2995,6079,2693,2254,3449,5618,8441,3794,7358],()=>e(e.s=74e3)),_N_E=e.O()}]);
@@ -1,6 +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(26630),i=n(99867);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}
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(68477),i=n(93449);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
2
  data: ${JSON.stringify(t)}
3
3
 
4
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
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,9867,6630,8441,3794,7358],()=>e(e.s=18416)),_N_E=e.O()}]);
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,3449,8477,8441,3794,7358],()=>e(e.s=18416)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-black:#000;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:var(--border);--color-text-muted:var(--text-muted)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-6{margin-block:calc(var(--spacing) * 6)}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-full{width:100%;height:100%}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-\[46px\]{height:46px}.h-\[720px\]{height:720px}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-\[140px\]{max-height:140px}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-\[200px\]{min-height:200px}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[820px\]{max-width:820px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-center{transform-origin:50%}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_infinite\]{animation:pulse 1.5s infinite}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.\[scrollbar-width\:none\]{scrollbar-width:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[7px\]{border-radius:7px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[rgba\(37\,99\,235\,0\.5\)\]{border-color:#2563eb80}.border-\[rgba\(248\,113\,113\,0\.35\)\]{border-color:#f8717159}.border-border{border-color:var(--color-border)}.border-current{border-color:currentColor}.bg-\[rgba\(37\,99\,235\,0\.06\)\]{background-color:#2563eb0f}.bg-\[rgba\(248\,113\,113\,0\.07\)\]{background-color:#f8717112}.bg-\[var\(--sdm-tbg\)\]{background-color:var(--sdm-tbg)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-0{padding-top:0}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.wrap-anywhere{overflow-wrap:anywhere}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--sdm-c\,inherit\)\]{color:var(--sdm-c,inherit)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-text-muted{color:var(--color-text-muted)}.text-transparent{color:#0000}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\]{--tw-drop-shadow-size:drop-shadow(0 6px 18px var(--tw-drop-shadow-color,#2563eb2e));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\],.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px)}.backdrop-blur-\[1px\],.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm))}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[counter-increment\:line_0\]{counter-increment:line 0}.\[counter-reset\:line\]{counter-reset:line}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.before\:mr-4:before{content:var(--tw-content);margin-right:calc(var(--spacing) * 4)}.before\:inline-block:before{content:var(--tw-content);display:inline-block}.before\:w-6:before{content:var(--tw-content);width:calc(var(--spacing) * 6)}.before\:text-right:before{content:var(--tw-content);text-align:right}.before\:font-mono:before{content:var(--tw-content);font-family:var(--font-mono)}.before\:text-\[13px\]:before{content:var(--tw-content);font-size:13px}.before\:content-\[counter\(line\)\]:before{--tw-content:counter(line);content:var(--tw-content)}.before\:select-none:before{content:var(--tw-content);-webkit-user-select:none;user-select:none}.before\:\[counter-increment\:line\]:before{content:var(--tw-content);counter-increment:line}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@supports ((-webkit-backdrop-filter:var(--tw )) or (backdrop-filter:var(--tw ))){.supports-\[backdrop-filter\]\:backdrop-blur{--tw-backdrop-blur:blur(8px)}.supports-\[backdrop-filter\]\:backdrop-blur,.supports-\[backdrop-filter\]\:backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.supports-\[backdrop-filter\]\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm))}}@media (prefers-color-scheme:dark){.dark\:bg-\[var\(--shiki-dark-bg\,var\(--sdm-tbg\)\)\]{background-color:var(--shiki-dark-bg,var(--sdm-tbg))}.dark\:\!text-\[var\(--shiki-dark\)\]{color:var(--shiki-dark)!important}.dark\:text-\[var\(--shiki-dark\,var\(--sdm-c\,inherit\)\)\]{color:var(--shiki-dark,var(--sdm-c,inherit))}}.\[\&_svg\]\:h-auto svg{height:auto}.\[\&_svg\]\:w-auto svg{width:auto}.\[\&_thead\]\:sticky thead{position:sticky}.\[\&_thead\]\:top-0 thead{top:0}.\[\&_thead\]\:z-10 thead{z-index:10}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&\>\*\:last-child\]\:after\:inline>:last-child:after{content:var(--tw-content);display:inline}.\[\&\>\*\:last-child\]\:after\:align-baseline>:last-child:after{content:var(--tw-content);vertical-align:baseline}.\[\&\>\*\:last-child\]\:after\:content-\[var\(--streamdown-caret\)\]>:last-child:after{--tw-content:var(--streamdown-caret);content:var(--tw-content)}.\[\&\>p\]\:inline>p{display:inline}li .\[li_\&\]\:pl-6{padding-left:calc(var(--spacing) * 6)}}:root{--bg:#fff;--bg-panel:#f5f5f5;--bg-hover:#eee;--bg-selected:#e8e8e8;--text:#1a1a1a;--text-muted:#6b7280;--text-dim:#9ca3af;--accent:#2563eb;--accent-hover:#1d4ed8;--user-bg:#eff6ff;--assistant-bg:#fff;--tool-bg:#f9fafb;--bg-subtle:#00000008;--background:var(--bg);--foreground:var(--text);--card:var(--bg-panel);--card-foreground:var(--text);--muted:var(--bg-hover);--muted-foreground:var(--text-muted);--border:#e0e0e0;--input:var(--border);--primary:var(--accent);--primary-foreground:#fff;--radius:.375rem}html.dark{--bg:#1a1a1a;--bg-panel:#242424;--bg-hover:#2e2e2e;--bg-selected:#383838;--border:#3a3a3a;--text:#e8e8e8;--text-muted:#9ca3af;--text-dim:#6b7280;--accent:#60a5fa;--accent-hover:#93c5fd;--user-bg:#1e293b;--assistant-bg:#1a1a1a;--tool-bg:#1f2937;--bg-subtle:#ffffff0a;--background:var(--bg);--foreground:var(--text);--card:var(--bg-panel);--card-foreground:var(--text);--muted:var(--bg-hover);--muted-foreground:var(--text-muted);--input:var(--border);--primary:var(--accent);--primary-foreground:#0f172a}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}body{height:100dvh}.resize-handle{background:0 0}.resize-handle:before{content:"";position:absolute;inset:0}.resize-handle-line{background:0 0;width:1px;height:100%;transition:background-color .15s}.resize-handle.resize-handle-dragging .resize-handle-line,.resize-handle:hover .resize-handle-line{background:var(--accent)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.7}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);margin:10px 0 4px;font-weight:600}.markdown-body h1{font-size:1.15em}.markdown-body h2{font-size:1.05em}.markdown-body h3{font-size:.95em}.markdown-body ol,.markdown-body ul{margin:4px 0 8px;padding-left:20px}.markdown-body li{margin:2px 0}.markdown-body a{color:var(--accent);text-decoration:underline}.markdown-body blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:4px 0;padding:2px 10px}.markdown-body table{border-collapse:collapse;width:100%;margin:8px 0;font-size:13px}.markdown-body td,.markdown-body th{border:1px solid var(--border);text-align:left;padding:5px 10px}.markdown-body th{background:var(--bg-panel);font-weight:600}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:10px 0}.mermaid-diagram{border:1px solid var(--border);background:var(--bg-panel);border-radius:6px;margin:12px 0;padding:12px;overflow-x:auto}.mermaid-diagram-canvas{min-width:min-content}.mermaid-diagram svg{max-width:100%;height:auto;margin:0 auto}.mermaid-diagram-error-title,.mermaid-diagram-loading{color:var(--text-muted);font-size:12px}.mermaid-diagram-error{border-color:#f8717173}.mermaid-diagram-error-message{color:#f87171;margin-top:4px;font-size:12px}.mermaid-diagram-error pre{background:var(--bg);color:var(--text-muted);border-radius:4px;margin:8px 0 0;padding:8px;overflow-x:auto}.widget-shimmer{background:linear-gradient(90deg,#0000,#8080801f 50%,#0000) 0 0/200% 100%;animation:widget-shimmer 1.5s ease-in-out infinite}@keyframes widget-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes text-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes surface-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.markdown-file-preview{min-height:100%}.markdown-file-preview h1,.markdown-file-preview h2,.markdown-file-preview h3,.markdown-file-preview h4,.markdown-file-preview h5,.markdown-file-preview h6{letter-spacing:0;line-height:1.25}.markdown-file-preview h1{border-bottom:1px solid var(--border);margin:0 0 18px;padding-bottom:10px;font-size:1.85em}.markdown-file-preview h2{border-bottom:1px solid var(--border);margin:28px 0 12px;padding-bottom:6px;font-size:1.42em}@supports (color:color-mix(in lab,red,red)){.markdown-file-preview h2{border-bottom:1px solid color-mix(in srgb,var(--border) 72%,transparent)}}.markdown-file-preview h3{margin:22px 0 10px;font-size:1.18em}.markdown-file-preview h4,.markdown-file-preview h5,.markdown-file-preview h6{margin:18px 0 8px}.markdown-file-preview p{margin:0 0 13px}.markdown-file-preview ol,.markdown-file-preview ul{margin:6px 0 14px}.markdown-file-preview li{margin:4px 0}.markdown-file-preview blockquote{background:var(--bg-panel);border-left-color:var(--accent);border-radius:0 6px 6px 0;margin:12px 0 16px;padding:8px 14px}.markdown-file-preview table{border-spacing:0;width:max-content;max-width:100%;display:block;overflow-x:auto}.markdown-file-preview td,.markdown-file-preview th{vertical-align:top;padding:7px 11px}.markdown-file-preview img{max-width:100%;height:auto;margin:14px auto;display:block}.markdown-file-preview img,.markdown-file-preview pre{border:1px solid var(--border);background:var(--bg-panel);border-radius:6px}.markdown-file-preview pre{font-family:var(--font-mono);margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code{font-family:var(--font-mono);background:var(--bg-panel);border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-file-preview .mermaid-diagram{margin:16px 0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes saved-pop{0%{transform:scale(1);box-shadow:0 0 #4ade808c}40%{transform:scale(1.08);box-shadow:0 0 0 6px #4ade8040}to{transform:scale(1);box-shadow:0 0 #4ade8000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}.models-config-shell{border-radius:12px!important;box-shadow:0 16px 40px #0000003d!important}.models-config-shell .models-config-tree{background:var(--bg-panel)!important;width:224px!important;padding:10px 8px 8px!important}.models-config-shell .models-config-detail{background:var(--bg)!important;padding:24px 28px!important}.models-config-shell .models-config-footer{background:var(--bg-panel)!important;padding:10px 20px!important}.models-config-shell input,.models-config-shell select{min-height:32px;background:var(--bg-panel)!important;border-color:var(--border)!important;border-radius:8px!important}.models-config-shell button{transition:background-color .12s,color .12s,border-color .12s}.models-config-shell .models-config-tree>div:first-child>div{border-radius:8px!important}.models-config-apikey-detail,.models-config-model-detail,.models-config-provider-detail,.models-config-subscription-detail{background:var(--bg-panel);border-radius:12px;max-width:720px;padding:14px 16px}.models-config-model-detail,.models-config-provider-detail{gap:14px!important}.models-config-shell .models-config-tree>div>div{border-radius:10px!important}.models-config-shell .models-config-tree button{min-height:36px;border-radius:14px!important}.models-config-shell .models-config-footer button{min-height:36px;border-radius:18px!important;padding-inline:14px!important}.models-config-shell .models-config-detail input,.models-config-shell .models-config-detail select{min-height:32px;border-radius:16px!important;padding-inline:12px!important}.models-config-shell .models-config-detail input[type=checkbox]{width:13px;min-height:13px;border-radius:3px!important;padding:0!important}.models-config-shell .models-config-detail>div{box-sizing:border-box}.models-config-model-detail>div:first-child,.models-config-provider-detail>div:first-child{border-bottom:1px solid var(--border);padding-bottom:10px}.models-config-model-detail input[type=checkbox]{accent-color:var(--accent)}.empty-start-surface{border:1px solid var(--border);background:var(--bg-panel);border-radius:12px;padding:14px 16px}.settings-dialog-backdrop{z-index:1000;background:#00000061;justify-content:center;align-items:center;padding:22px;display:flex;position:fixed;inset:0}.settings-dialog-shell{background:var(--bg);border:1px solid var(--border);border-radius:12px;flex-direction:column;width:min(1120px,100%);height:min(82vh,860px);min-height:560px;display:flex;overflow:hidden;box-shadow:0 16px 40px #0000003d}.settings-dialog-header{border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;height:50px;padding:0 14px 0 16px;display:flex}.settings-dialog-body{flex:1;min-height:0;display:flex;overflow:hidden}.settings-dialog-tabs{border-right:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;width:208px;padding:10px 8px;overflow-y:auto}.settings-dialog-tab{text-align:left;border:none;border-radius:9px;align-items:center;gap:9px;width:100%;margin:0 0 4px;padding:10px;transition:background .12s,color .12s;display:flex}.settings-dialog-panel{background:var(--bg);flex:1;min-width:0;min-height:0;overflow:hidden}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-closed{border-right:none!important;width:0!important;min-width:0!important}.sidebar-container>*{width:100%;min-width:260px}.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-back-button{display:none!important}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}}@media (max-width:640px){.app-topbar{flex-wrap:wrap;align-content:center;min-height:76px;align-items:center!important;gap:6px!important;height:auto!important;padding:6px 8px!important}.topbar-sidebar-toggle{order:1}.topbar-title-area{order:2;min-width:0;flex:1 1 0!important}.topbar-session-title{max-width:none!important}.topbar-project-crumb,.topbar-rename-button{display:none!important}.topbar-icon-button{order:3;width:30px!important;height:28px!important}.topbar-update-button{order:3}.topbar-right-panel-toggle{display:flex!important}.topbar-chat-tools{scrollbar-width:none;-webkit-overflow-scrolling:touch;order:4;min-width:0;overflow:auto hidden;flex:0 auto!important}.topbar-chat-tools::-webkit-scrollbar{display:none}.topbar-branches-control,.topbar-system-button{flex:none}.topbar-branches-button{justify-content:center;width:30px;gap:0!important;padding:0!important}.topbar-branches-icon{align-items:center;display:flex}.topbar-branches-label{display:none!important}.topbar-session-stats{scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:1 1 0;order:4;min-width:0;max-width:none;overflow-x:auto}.topbar-system-button{justify-content:center;width:30px;gap:0!important;padding:0!important}.topbar-system-label{display:none!important}.topbar-session-stats::-webkit-scrollbar{display:none}.chat-input-toolbar{flex-wrap:wrap;align-items:stretch!important;gap:4px 6px!important}.chat-input-toolbar-left,.chat-input-toolbar-right{min-width:0;overflow:visible}.chat-input-toolbar-left{flex:100%!important}.chat-input-toolbar-right{flex:100%!important;margin-left:0!important}.chat-input-toolbar-left>*,.chat-input-toolbar-right>*{flex-shrink:0}.chat-input-toolbar-spacer{display:none!important}.settings-dialog-backdrop{justify-content:stretch;align-items:stretch;padding:0}.settings-dialog-shell{border:none;border-radius:0;width:100%;height:100dvh;min-height:0}.settings-dialog-body{flex-direction:column}.settings-dialog-tabs{border-right:none;border-bottom:1px solid var(--border);gap:6px;width:100%;padding:7px;display:flex;overflow:auto hidden}.settings-dialog-tab{flex:0 0 132px;width:132px;margin:0;padding:8px}.settings-dialog-panel{flex:1}.chat-stats-center,.resize-handle{display:none!important}.sidebar-container{max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;width:min(280px,85vw)!important;min-width:0!important;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;pointer-events:none;transform:translate(-100%)}.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-back-button{display:flex!important}.right-panel-container.right-panel-open{width:100%!important;min-width:0!important}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}}.docx-preview-container .docx-preview{color:#333;padding:40px 48px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6}.docx-preview-container .docx-preview h1,.docx-preview-container .docx-preview h2,.docx-preview-container .docx-preview h3{color:#1a1a1a;margin-top:1em;margin-bottom:.5em}.docx-preview-container .docx-preview p{margin-bottom:.5em}.docx-preview-container .docx-preview table{border-collapse:collapse;width:100%;margin:8px 0}.docx-preview-container .docx-preview td,.docx-preview-container .docx-preview th{text-align:left;border:1px solid #ddd;padding:6px 10px}.docx-preview-container .docx-preview img{max-width:100%;height:auto}.xlsx-preview table{border-collapse:collapse;font-size:12px;font-family:var(--font-mono);background:#fff}.xlsx-preview td,.xlsx-preview th{border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;max-width:300px;padding:4px 8px;overflow:hidden}.xlsx-preview th{background:var(--bg-panel);color:var(--text);font-weight:600;position:sticky;top:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seqyuan/annovibe",
3
- "version": "0.8.146",
3
+ "version": "0.8.147",
4
4
  "description": "AI-native bioinformatics workspace by Annoroad",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -1,22 +0,0 @@
1
- "use strict";exports.id=4801,exports.ids=[4801],exports.modules={29947:(a,b,c)=>{c.d(b,{ES:()=>l,IB:()=>m,SN:()=>e,tE:()=>n});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_inspect","kernel_plot_stop","kernel_plot_artifacts"],j=[...h,d];function k(a){return[...a].sort().join(",")}function l(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 m(a){return e.filter(b=>a.some(a=>a.active&&a.name===b))}function n(a,b){return[...new Set([...function(a){switch(a){case"none":return f;case"default":return g;case"workbench":return i;case"agent":return j;default:return h}}(a),...b])]}},54801:(a,b,c)=>{c.d(b,{T:()=>$});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}}let f={isStreaming:!1,streamingMessage:null};function g(){return{role:"assistant",content:[],model:"",provider:"",timestamp:Date.now()}}function h(a,b,c){if(!Number.isInteger(b)||void 0===b||b<0)return a;let d=a.streamingMessage??g(),e=[...d.content],f=c(e[b]);return f?(e[b]=f,{isStreaming:!0,streamingMessage:{...d,content:e}}):a}function i(a){if(a.id||a.toolName)return{...a.id?{id:a.id}:{},...a.toolName?{toolName:a.toolName}:{}};let b=a.partial,c=a.contentIndex;if(!b||!Array.isArray(b.content)||void 0===c)return{};let d=b.content[c];return d&&"toolCall"===d.type?{..."string"==typeof d.id?{id:d.id}:"string"==typeof d.toolCallId?{id:d.toolCallId}:{},..."string"==typeof d.name?{toolName:d.name}:"string"==typeof d.toolName?{toolName:d.toolName}:{}}:{}}function j(a,b){switch(b.type){case"start":return{isStreaming:!0,streamingMessage:null};case"snapshot":return"assistant"===b.message.role?{isStreaming:!0,streamingMessage:b.message}:a;case"delta":var c=b.event;switch(c.type){case"start":return{isStreaming:!0,streamingMessage:a.streamingMessage??g()};case"text_start":return h(a,c.contentIndex,a=>a?.type==="text"?a:{type:"text",text:""});case"text_delta":return h(a,c.contentIndex,a=>({type:"text",text:(a?.type==="text"?a.text:"")+(c.delta??"")}));case"text_end":return h(a,c.contentIndex,a=>({type:"text",text:c.content??(a?.type==="text"?a.text:"")}));case"thinking_start":return h(a,c.contentIndex,a=>a?.type==="thinking"?a:{type:"thinking",thinking:""});case"thinking_delta":return h(a,c.contentIndex,a=>({type:"thinking",thinking:(a?.type==="thinking"?a.thinking:"")+(c.delta??"")}));case"thinking_end":return h(a,c.contentIndex,a=>({type:"thinking",thinking:c.content??(a?.type==="thinking"?a.thinking:"")}));case"toolcall_start":return h(a,c.contentIndex,a=>{let b=i(c);return a?.type==="toolCall"?{...a,...b.id?{toolCallId:b.id}:{},...b.toolName?{toolName:b.toolName}:{},rawInput:a.rawInput??""}:{type:"toolCall",toolCallId:b.id??"",toolName:b.toolName??"tool",input:{},rawInput:""}});case"toolcall_delta":return h(a,c.contentIndex,a=>{let b=i(c),d=a?.type==="toolCall"?a:{type:"toolCall",toolCallId:b.id??"",toolName:b.toolName??"tool",input:{}};return{...d,...b.id?{toolCallId:b.id}:{},...b.toolName?{toolName:b.toolName}:{},rawInput:(d.rawInput??"")+(c.delta??"")}});case"toolcall_end":return h(a,c.contentIndex,()=>({type:"toolCall",toolCallId:c.toolCall?.id??"",toolName:c.toolCall?.name??"tool",input:c.toolCall?.arguments??{}}));default:return a}case"end":case"reset":return f;default:return a}}function k(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function l(a){if("assistant"!==a.role)return null;let b=a.timestamp;return"number"!=typeof b?null:`assistant:${b}`}class m extends Error{constructor(a,b,c){super(a),this.status=b,this.code=c,this.name="AgentCommandError"}}async function n(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 m(d.error??`HTTP ${c.status}`,c.status,d.code);return d.data}async function o(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)}let p="__annovibeStreamSessions__",q="__annovibeStreamListeners__",r="__annovibeStreamErrorCallbacks__";function s(){let a=globalThis;return a[p]||(a[p]=new Map),a[p]}function t(){let a=globalThis;return a[r]||(a[r]=new Map),a[r]}function u(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 v(a,b){let c;for(let d of(!(c=globalThis)[q]&&(c[q]=new Map),c[q]).get(a)??[])try{d(b)}catch{}}function w(a){a.textThrottleTimer&&(clearTimeout(a.textThrottleTimer),a.textThrottleTimer=null),a.textDirty&&(a.textDirty=!1,y(a))}function x(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,y(a))},100));return}w(a),y(a)}function y(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},v(a.snapshot.sessionId,{type:"snapshot-updated",snapshot:a.snapshot})}function z(a){A(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){B(a),w(a);let b="Stream idle timeout — no activity for 180s.";a.snapshot={...a.snapshot,phase:"error",isStreaming:!1,streamingMessage:null,statusText:null,error:b},A(a),v(a.snapshot.sessionId,{type:"error",snapshot:a.snapshot});let c=t().get(a.snapshot.sessionId);if(c)try{c(a.snapshot.sessionId,b)}catch{}}},1e4)}function A(a){a.idleCheckTimer&&(clearInterval(a.idleCheckTimer),a.idleCheckTimer=null)}function B(a){a.toolProgressTimer&&(clearInterval(a.toolProgressTimer),a.toolProgressTimer=null)}function C(a){let b=s(),c=b.get(a);return c||(c={snapshot:u(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 D(a,b){let c=t();return c.set(a,b),()=>{c.get(a)===b&&c.delete(a)}}function E(a){let b=s(),c=b.get(a);c&&(B(c),A(c),w(c)),b.delete(a)}function F(a){let b=s().get(a);b&&(b.snapshot={...b.snapshot,reconnectCount:b.snapshot.reconnectCount+1,lastSyncReason:"sse-reconnect",lastEventAt:Date.now()},x(b,!0))}let G={runtime:"idle",phase:null,retry:null,isCompacting:!1,compactError:null,error:null,queued:{steering:[],followUp:[]}};function H(a){return{steering:Array.isArray(a?.steering)?a.steering:[],followUp:Array.isArray(a?.followUp)?a.followUp:[]}}let I={runtime:"running",phase:{kind:"waiting_model"}},J={runtime:"idle",phase:null};var K=c(31343);async function L(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}))}c(81537);let M="__annovibeSessionMessageCache__";function N(){let a=globalThis;if(!a[M]){var b;let c={entries:new Map,cleanupTimer:null};a[M]=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[M]}function O(a){let b=N(),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 P(a,b,c,d,e){let f=N(),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 Q(a){N().entries.delete(a)}var R=c(29947);let S=[500,1500,3e3];function T(a,b){return new DOMException(a,b)}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 V(a,b){return a.trim()||0!==b?`text:${a}|images:${b}`:null}function W(a){return"string"==typeof a?V(a,0):Array.isArray(a)?V(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 X(a){let b=new Map;for(let c of a){let a="user"!==c.role?null:W(c.content);a&&b.set(a,(b.get(a)??0)+1)}return b}function Y(a,b,c){return a.sessionId===b&&(!a.leafId||c.includes(a.leafId))}function Z(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 $(a){let{session:b,newSessionCwd:c,onAgentEnd:g,onSessionCreated:h,onSessionForked:i,modelsRefreshKey:p,onBranchDataChange:q,chatInputRef:r}=a,t=null===b&&null!==c,[y,M]=(0,d.useState)(null),[$,_]=(0,d.useState)(!t),[aa,ab]=(0,d.useState)(null),[ac,ad]=(0,d.useState)(null),[ae,af]=(0,d.useState)([]),[ag,ah]=(0,d.useState)([]),[ai,aj]=(0,d.useState)(0),[ak,al]=(0,d.useState)(!1),[am,an]=(0,d.useState)(0),[ao,ap]=(0,d.useReducer)(j,f),[aq,ar]=(0,d.useState)(!1),[as,at]=(0,d.useState)({}),[au,av]=(0,d.useState)([]),[aw,ax]=(0,d.useState)({}),[ay,az]=(0,d.useState)({}),[aA,aB]=(0,d.useState)(null),[aC,aD]=(0,d.useState)("full"),[aE,aF]=(0,d.useState)([...R.SN]),[aG,aH]=(0,d.useState)([]),[aI,aJ]=(0,d.useState)("auto"),[aK,aL]=(0,d.useState)(null),[aM,aN]=(0,d.useState)(null),[aO,aP]=(0,d.useState)(null),[aQ,aR]=(0,d.useState)(null),[aS,aT]=(0,d.useState)(null),[aU,aV]=(0,d.useState)(null),[aW,aX]=(0,d.useState)(!1),[aY,aZ]=(0,d.useState)(null),[a$,a_]=(0,d.useState)(null),[a0,a1]=(0,d.useState)(null),[a2,a3]=(0,d.useState)({steering:[],followUp:[]}),[a4,a5]=(0,d.useState)(null),a6=(0,d.useRef)(b?.id??null),a7=function({sessionIdRef:a,onEvent:b,onReconnect:c,reconnectBaseMs:e=1e3,reconnectMaxMs:f=3e4}){let g=(0,d.useRef)(null),h=(0,d.useRef)({onEvent:b,onReconnect:c});h.current={onEvent:b,onReconnect:c};let i=(0,d.useCallback)(()=>{g.current?.close(),g.current=null},[]),j=(0,d.useCallback)(()=>{let a=g.current;return!!a&&"closed"!==a.state&&"error"!==a.state},[]);return{connect:(0,d.useCallback)((b,c={})=>{g.current?.close(),g.current=null;let d=`/api/agent/${encodeURIComponent(b)}/events${c.replay?"?replay=1":""}`;return!function(a){let b=C(a);if("active"===b.snapshot.phase)return x(b,!0),z(b),b.snapshot;let c=Date.now();b.snapshot={...u(a),phase:"active",startedAt:c,lastEventAt:c,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},z(b),x(b,!0),b.snapshot}(b),new Promise((i,j)=>{let k=!1,l=!1,m=null,n=a=>{if(!k){if(k=!0,clearTimeout(p),a){m?.close(),g.current===m&&(g.current=null),j(a);return}i()}},p=setTimeout(()=>{c.requireConnected?n(Error("Timed out waiting for event stream connection")):n()},c.timeoutMs??3e4);g.current=m=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,j="idle",k=new AbortController,l=0,m=null,n=null,p=!1,q=(a,b)=>{b&&(n=b),c(a,b)},r=a=>{j!==a&&(j=a,d?.(a))},s=()=>{null!==m&&(clearTimeout(m),m=null)},t=()=>{if(p)return;if(!i)return void r("error");if(l>=f){r("error"),e?.(Error(`Max reconnect attempts (${f}) reached`));return}let a=Math.min(h,g*2**l);l+=1,r("connecting"),m=setTimeout(()=>{m=null,u()},a)},u=async()=>{if(!p){s(),k=new AbortController,r("connecting");try{let a=await fetch(b,{signal:k.signal,headers:{Accept:"text/event-stream","Cache-Control":"no-cache",...n?{"Last-Event-ID":n}:{}}});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"),l=0,await o(d,q,k.signal),k.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 j},connect:()=>{p=!1,l=0,s(),u()},close:()=>{p=!0,s(),k.abort(),r("closed")},get abortController(){return k}}}({url:d,onEvent:c=>{try{let d=JSON.parse(c);if("connected"===d.type&&n(),a.current!==b)return;h.current.onEvent(d)}catch{}},onStateChange:a=>{!function(a,b){let c=s().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()},z(c)),"connected"!==b&&"connected"===d&&A(c)}(b,a),"connected"===a&&(l&&(F(b),h.current.onReconnect?.(b)),l=!0)},reconnectBaseMs:e,reconnectMaxMs:f}),m.connect()})},[e,f,a]),disconnect:i,isActive:j,readerRef:g}}({sessionIdRef:a6,onEvent:a=>bq.current?.(a),onReconnect:a=>br.current?.(a,"sse_reconnected")}),{disconnect:a8,isActive:a9}=a7,ba=a7.readerRef,{statuses:bb,widgets:bc,dialog:bd,notices:be,applyFromState:bf,handleEvent:bg,respond:bh,dismissNotice:bi}=function({chatInputRef:a,sessionIdRef:b,onError:c,noticeTtlMs:e=8e3}){let[f,g]=(0,d.useState)([]),[h,i]=(0,d.useState)([]),[j,k]=(0,d.useState)(null),[l,m]=(0,d.useState)([]),o=(0,d.useRef)(new Set),p=(0,d.useCallback)(()=>{for(let a of o.current)clearTimeout(a);o.current.clear()},[]),q=(0,d.useCallback)((a,b)=>{let c={id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,message:a,type:b};m(a=>[...a,c].slice(-4));let d=setTimeout(()=>{o.current.delete(d),m(a=>a.filter(a=>a.id!==c.id))},e);o.current.add(d)},[e]),r=(0,d.useCallback)(a=>{a&&(Array.isArray(a.extensionStatuses)&&g(a.extensionStatuses),Array.isArray(a.extensionWidgets)&&i(a.extensionWidgets))},[]),s=(0,d.useCallback)(b=>{if("extension_error"===b.type)return q("string"==typeof b.error?b.error:"Extension command failed","error"),!0;if("extension_ui_request"!==b.type)return!1;let c="string"==typeof b.method?b.method:"";if("select"===c||"confirm"===c||"input"===c||"editor"===c)return k({id:String(b.id??""),method:c,title:"string"==typeof b.title?b.title:"",...Array.isArray(b.options)?{options:b.options}:{},..."string"==typeof b.message?{message:b.message}:{},..."string"==typeof b.placeholder?{placeholder:b.placeholder}:{},..."string"==typeof b.prefill?{prefill:b.prefill}:{}}),!0;if("notify"===c){let a="warning"===b.notifyType||"error"===b.notifyType?b.notifyType:"info";return q(String(b.message??""),a),!0}if("setStatus"===c){let a=String(b.statusKey??"");if(!a)return!0;let c="string"==typeof b.statusText?b.statusText:null;return g(b=>{let d=b.filter(b=>b.key!==a);return c?[...d,{key:a,text:c}]:d}),!0}if("setWidget"===c){let a=String(b.widgetKey??"");if(!a)return!0;let c=Array.isArray(b.widgetLines)?b.widgetLines.filter(a=>"string"==typeof a):null;return i(d=>{let e=d.filter(b=>b.key!==a);return c&&c.length>0?[...e,{key:a,lines:c,placement:"string"==typeof b.widgetPlacement?b.widgetPlacement:"aboveEditor"}]:e}),!0}return"dismiss"===c?k(a=>a?.id===b.id?null:a):"set_editor_text"===c&&"string"==typeof b.text?a?.current?.setText?.(b.text):"setTitle"===c&&"string"==typeof b.title&&(document.title=b.title),!0},[a,q]),t=(0,d.useCallback)(async(a,d)=>{let e=b.current;if(k(b=>b?.id===a?null:b),e)try{await n(e,{type:"extension_ui_response",id:a,...d})}catch(a){c(a instanceof Error?a.message:String(a))}},[c,b]);return{statuses:f,widgets:h,dialog:j,notices:l,applyFromState:r,handleEvent:s,respond:t,dismissNotice:(0,d.useCallback)(a=>{m(b=>b.filter(b=>b.id!==a))},[]),reset:(0,d.useCallback)(()=>{p(),g([]),i([]),k(null),m([])},[p])}}({chatInputRef:r,sessionIdRef:a6,onError:a5}),bj=(0,d.useRef)(!1),{live:bk,running:bl,isRunning:bm,begin:bn,finish:bo,handleEvent:bp}=function({onRunningChange:a,onDone:b,flushMs:c=60}={}){let[e,f]=(0,d.useState)(null),[g,h]=(0,d.useState)(!1),i=(0,d.useRef)(!1),j=(0,d.useRef)(""),k=(0,d.useRef)(null),l=(0,d.useRef)({onRunningChange:a,onDone:b});l.current={onRunningChange:a,onDone:b};let m=(0,d.useCallback)(()=>{k.current&&(clearTimeout(k.current),k.current=null)},[]),n=(0,d.useCallback)(a=>{m(),j.current="",i.current=!0,h(!0),f({command:a,output:""}),l.current.onRunningChange?.(!0,a)},[m]),o=(0,d.useCallback)(()=>{m(),j.current="",i.current=!1,h(!1),f(null),l.current.onRunningChange?.(!1)},[m]);return{live:e,running:g,isRunning:(0,d.useCallback)(()=>i.current,[]),begin:n,finish:o,handleEvent:(0,d.useCallback)(a=>{if("bash_execution_start"===a.type){let b=String(a.command??"");return m(),j.current="",i.current=!0,h(!0),f({command:b,output:""}),l.current.onRunningChange?.(!0,b),!0}if("bash_execution_update"===a.type){let b="string"==typeof a.chunk?a.chunk:"";return!b||(j.current+=b,k.current||(k.current=setTimeout(()=>{k.current=null;let a=j.current;j.current="",a&&f(b=>b?{...b,output:b.output+a}:b)},c)),!0)}return"bash_done"===a.type&&(m(),j.current="",i.current=!1,h(!1),f(null),l.current.onRunningChange?.(!1),l.current.onDone?.(),!0)},[m,c])}}({onRunningChange:(a,b)=>{bj.current=a,ar(a),a1(a?{kind:"running_tools",tools:[{id:"bash",name:"bash",args:b}]}:null)}}),bq=(0,d.useRef)(null),br=(0,d.useRef)(null),bs=(0,d.useRef)(null),bt=(0,d.useRef)(!1),bu=(0,d.useRef)(null),bv=(0,d.useRef)(!1),bw=(0,d.useRef)(null),bx=(0,d.useRef)(null),by=(0,d.useRef)(new Map),bz=(0,d.useRef)(new Map),bA=(0,d.useRef)(new Map),bB=(0,d.useRef)(new Map),bC=(0,d.useRef)(null),bD=(0,d.useRef)([]),bE=(0,d.useRef)(null),bF=(0,d.useRef)(0),bG=(0,d.useRef)(!1),bH=(0,d.useRef)(0),bI=(0,d.useRef)(!1);(0,d.useRef)(!1),(0,d.useRef)(0);let bJ=(0,d.useRef)(null),bK=(0,d.useRef)(null),bL=(0,d.useRef)(0);(0,d.useRef)(!1);let bM=a.setNewSessionModel??aB,bN=a.setToolPreset??aD,bO=a.setMemoryTools??aF,bP=aS??y?.context.model??aU??null,bQ=t?aA:bP,bR=(0,d.useCallback)(()=>(0,R.tE)(aC,aE),[aE,aC]),bS=(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"):"",[]),bT=(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})`)},[]),bU=(()=>{let a={input:0,output:0,cacheRead:0,cacheWrite:0};for(let b of ae){if("assistant"!==b.role)continue;let c=b.usage;c&&(a.input+=c.input??0,a.output+=c.output??0,a.cacheRead+=c.cacheRead??0,a.cacheWrite+=c.cacheWrite??0)}return a.input+a.output+a.cacheRead+a.cacheWrite>0?{tokens:a}:null})(),bV=(0,d.useRef)(!1),bW=(0,d.useCallback)(async()=>{let a=a6.current;if(!a||bV.current||bI.current)return;bV.current=!0,bG.current=!0;let b=0,c=O(a);b=c?c.loadedMessagesCount:50;try{for(;;)try{let c=await fetch(`/api/sessions/${encodeURIComponent(a)}?limit=100&offset=${b}&deferThinking=1&deferMedia=1`);if(!c.ok)break;let d=await c.json();if(a6.current!==a)break;let e=d.context.messages,f=d.context.entryIds??[];if(0===e.length)break;af(a=>[...e,...a]),ah(a=>{let b=[...f,...a];return bD.current=b,b});let g=b+e.length;if(an(g),bH.current=g,al(d.hasMore??!1),P(a,e,f,d.hasMore??!1,g),b=g,!d.hasMore)break;await new Promise(a=>setTimeout(a,800))}catch{break}}finally{bV.current=!1,bI.current=!0,bG.current=!1}},[]),bX=(0,d.useCallback)(async(a,b=!1,c=!1,d=!1)=>{var e;let f=null;try{if(b&&_(!0),!c&&!bj.current&&!d){let c=O(a);if(c)return aj(c.totalMessages),al(c.hasMore),an(c.loadedMessagesCount),af(c.messages),bD.current=c.entryIds,ah(c.entryIds),bC.current=c.leafId,ad(c.leafId),bH.current=c.loadedMessagesCount,b&&_(!1),c.hasMore&&!bI.current&&setTimeout(()=>{bW()},1500),null}let g=c?`/api/sessions/${encodeURIComponent(a)}?includeState&deferThinking=1&deferMedia=1`:`/api/sessions/${encodeURIComponent(a)}?limit=50&offset=0&deferThinking=1&deferMedia=1`,h=bK.current;if(h?.sid===a&&!b)return null;h?.controller.abort(T("Session load superseded","AbortError"));let i=new AbortController;f=i,bK.current={sid:a,controller:i};let j=setTimeout(()=>{i.abort(T("Session load timed out after 30 seconds","TimeoutError"))},3e4),k=await fetch(g,{signal:i.signal}).finally(()=>clearTimeout(j));if(a6.current&&a6.current!==a)return null;if(404===k.status)return b&&(M(null),bC.current=null,ad(null),af([]),ab(null)),null;if(!k.ok)throw Error(`HTTP ${k.status}`);let m=await k.json();c?(aj(m.totalMessages??m.context.messages.length),al(!1)):(aj(m.totalMessages??m.context.messages.length),al(m.hasMore??!1)),an(m.context.messages.length),M(m),bC.current=m.leafId,ad(m.leafId);let n=m.context.messages,o=X(n),p=new Map,q=Date.now();for(let[b,c]of by.current)if(c.sessionId===a){if(q-c.createdAt>12e4){by.current.delete(b);continue}if(c.confirmKey){let a=o.get(c.confirmKey)??0,d=p.get(c.confirmKey)??0;a-d>c.confirmCountAtCreate&&(by.current.delete(b),p.set(c.confirmKey,d+1))}}bz.current=o;let r=m.context.entryIds??[],s=[...by.current.values()].filter(b=>Y(b,a,r)).map(a=>a.message),t=s.length>0?[...n,...s]:n,u=function(a,b,c){if(0===b.size)return a;let d=!1,e=a.map(a=>{let e=l(a);if(!e)return a;let f=b.get(e);return f?c-f.observedAt>5e3||function(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}}(f.message,a)?(b.delete(e),a):(d=!0,f.message):a});return d?e:a}(t,bB.current,Date.now()),v=bA.current.get(a);if(v){for(let[a,b]of v)q-b>12e4&&v.delete(a);0===v.size&&bA.current.delete(a)}let w=v?.size?v:null,x=w?new Set(r):null,y=!!w&&!!x&&[...w.keys()].some(a=>!x.has(a));w&&x&&!y&&bA.current.delete(a);let z=u.length;return!c&&(bH.current>z||y)?(aj(m.totalMessages??m.context.messages.length),al(m.hasMore??!1)):(af(a=>(function(a,b){if(a.length!==b.length)return b;let c=!1,d=b.map((b,d)=>Z(a[d],b)?a[d]:(c=!0,b));return c?d:a})(a,u)),bD.current=r,ah(r),c?bH.current=z:bH.current=Math.max(bH.current,z),e={sessionId:a,leafId:m.leafId,messages:u,entryIds:r,totalMessages:m.totalMessages??m.context.messages.length,hasMore:!c&&(m.hasMore??!1),loadedMessagesCount:m.context.messages.length},N().entries.set(a,{...e,loadedAt:Date.now()})),aT(a=>{if(!a)return null;let b=m.context.model;return b?.provider===a.provider&&b.modelId===a.modelId?null:a}),ab(null),!m.agentState?.state?.thinkingLevel&&m.context.thinkingLevel&&"off"!==m.context.thinkingLevel&&aJ(m.context.thinkingLevel),m.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 ab(String(a)),null}finally{f&&bK.current?.controller===f&&(bK.current=null),b&&_(!1)}},[bW]),bY=(0,d.useRef)(!1),bZ=(0,d.useCallback)(async()=>{if(bY.current)return;bY.current=!0;let a=a6.current;if(!a){bY.current=!1;return}try{let b=await fetch(`/api/sessions/${encodeURIComponent(a)}?limit=50&offset=${am}&deferThinking=1&deferMedia=1`);if(!b.ok)return;let c=await b.json(),d=c.context.messages,e=c.context.entryIds??[];af(a=>[...d,...a]),ah(a=>{let b=[...e,...a];return bD.current=b,b}),an(a=>a+d.length),al(c.hasMore??!1),P(a,d,e,c.hasMore??!1,am+d.length)}catch{}finally{bY.current=!1}},[am]),b$=(0,d.useCallback)(async a=>{let b=a6.current;if(!b)return[];let c=bC.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[]}},[]),b_=(0,d.useCallback)(async(a,b)=>{try{let c=b?`/api/sessions/${encodeURIComponent(a)}/context?leafId=${encodeURIComponent(b)}&deferThinking=1&deferMedia=1`:`/api/sessions/${encodeURIComponent(a)}/context?deferThinking=1&deferMedia=1`,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=X(f),i=new Map,j=Date.now();for(let[b,c]of by.current)if(c.sessionId===a){if(j-c.createdAt>12e4){by.current.delete(b);continue}if(c.confirmKey){let a=h.get(c.confirmKey)??0,d=i.get(c.confirmKey)??0;a-d>c.confirmCountAtCreate&&(by.current.delete(b),i.set(c.confirmKey,d+1))}}bz.current=h;let k=[...by.current.values()].filter(b=>Y(b,a,g)).map(a=>a.message);af(k.length>0?[...f,...k]:f),bD.current=g,ah(g)}catch(a){console.error("Failed to load context:",a)}},[]),b0=(0,d.useCallback)(async a=>{try{let b=await n(a,{type:"get_tools"});b&&(bN((0,R.ES)(b)),bO((0,R.IB)(b)))}catch(a){console.error("Failed to load tools:",a)}},[bO,bN]),b1=(0,d.useCallback)(async a=>{try{let b=await n(a,{type:"get_commands"});aH(Array.isArray(b?.commands)?b.commands:[])}catch{aH([])}},[]),b2=a7.connect,b3=(0,d.useCallback)(async(a,b="manual")=>{if(!a||a6.current!==a)return;let c=bF.current;try{let b=await fetch(`/api/agent/${encodeURIComponent(a)}`),e=await b.json().catch(()=>({}));if(a6.current!==a||bF.current!==c)return;if(e.running){var d;bj.current=!0,ar(!0),a1((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"})),a9()||(F(a),b2(a,{replay:!0}))}else bj.current=!1,a8(),E(a),ar(!1),a1(null),aL(null),ap({type:"end"}),Q(a),await bX(a,!1,!1,!0);e.state?.contextUsage!==void 0&&aN(e.state.contextUsage??null),e.state?.systemPrompt!==void 0&&aP(e.state.systemPrompt??null),e.state?.isCompacting!==void 0&&aX(e.state.isCompacting),e.state?.thinkingLevel!==void 0&&aJ(e.state.thinkingLevel??"auto"),e.state?.queuedMessages!==void 0&&a3(H(e.state.queuedMessages)),bf(e.state),e.state?.isBashRunning&&bn("")}catch{}},[b2,bX,bf,bn,a8,a9]),b4=(0,d.useRef)(G);b4.current={runtime:aq?"running":"idle",phase:a0,retry:aK,isCompacting:aW,compactError:aY,error:a4,queued:a2};let b5=(0,d.useCallback)(a=>{if(void 0!==a.runtime){let b="running"===a.runtime;bj.current=b,ar(b)}void 0!==a.phase&&a1(a.phase),void 0!==a.retry&&aL(a.retry),void 0!==a.isCompacting&&aX(a.isCompacting),void 0!==a.compactError&&aZ(a.compactError),void 0!==a.error&&a5(a.error),void 0!==a.queued&&a3(a.queued)},[]),b6=(0,d.useCallback)(a=>{bJ.current&&clearTimeout(bJ.current);let b=bF.current,c=0,d=async()=>{if(a6.current!==a||bj.current||bF.current!==b)return;Q(a),await bX(a,!1,!1,!0);let e=S[c++];void 0===e||a6.current!==a||bj.current||bF.current!==b||(bJ.current=setTimeout(()=>{bJ.current=null,d()},e))};d()},[bX]),b7=(0,d.useCallback)(a=>{fetch(`/api/agent/${encodeURIComponent(a)}`).then(a=>a.json()).then(a=>{a.state?.contextUsage!==void 0&&aN(a.state.contextUsage??null),a.state?.systemPrompt!==void 0&&aP(a.state.systemPrompt??null),a.state?.isCompacting!==void 0&&aX(a.state.isCompacting)}).catch(()=>{})},[]),b8=(0,d.useCallback)(a=>{for(let[b,c]of by.current)c.sessionId===a&&"prompt"===c.kind&&by.current.delete(b)},[]),b9=(0,d.useCallback)((a,b,c)=>{"assistant"===b.role&&"error"===b.stopReason&&b.errorMessage?.trim()&&a5(`Model response failed: ${b.errorMessage.trim()}`);let d=e(b),f=l(d);if(f&&bB.current.set(f,{observedAt:Date.now(),message:d}),!(c&&bD.current.includes(c))){if(a&&c){let b=bA.current.get(a)??new Map;b.set(c,Date.now()),bA.current.set(a,b)}af(a=>a.some(a=>Z(a,d))?a:[...a,d]),c&&ah(a=>{if(a.includes(c))return a;let b=[...a,c];return bD.current=b,b})}},[]);bq.current=(0,d.useCallback)(a=>{let b=a6.current;b&&function(a,b){let c=C(a),d=Date.now();switch(b.type){case"agent_start":if("active"===c.snapshot.phase)return x(c,!0),c.snapshot;return B(c),c.accumulatedText="",c.toolCalls.clear(),c.toolResults.clear(),c.activeToolId=null,c.snapshot={...u(a),phase:"active",startedAt:d,lastEventAt:d,isStreaming:!0,streamingMessage:{role:"assistant",content:[]}},z(c),x(c,!0),c.snapshot;case"message_update":{let a=b.message;if(a?.role==="assistant"){let b=a.content;for(let a of Array.isArray(b)?b:[])"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}))}else{let a=b.assistantMessageEvent;a?.type==="text_delta"?c.accumulatedText+=a.delta??"":a?.type==="text_end"?c.accumulatedText=a.content??c.accumulatedText:(a?.type==="toolcall_start"||a?.type==="toolcall_delta")&&a.id&&!c.toolCalls.has(a.id)&&c.toolCalls.set(a.id,{type:"toolCall",toolCallId:a.id,toolName:a.toolName??"tool",input:{},startedAt:d})}return x(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&&Object.keys(g.input).length>0?g.input:f,startedAt:g?.startedAt??d}),c.activeToolId=a,B(c),c.activeToolId&&(c.toolProgressTimer=setInterval(()=>x(c,!0),1e3)),x(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,B(c))}return x(c,!0),c.snapshot}case"message_end":return w(c),x(c,!0),c.snapshot;case"agent_end":{if(w(c),B(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},z(c),v(a,{type:"snapshot-updated",snapshot:c.snapshot}),c.snapshot;A(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},v(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&&(bL.current=Date.now());let c=function(a,b,c){let d=c.sessionId;switch(b.type){case"prompt_admitted":case"agent_start":return{patch:{...I,error:null},streamAction:{type:"start"},effects:[]};case"agent_end":if(!0===b.willRetry)return{patch:I,effects:[]};return{patch:{...J,retry:null},streamAction:{type:"end"},effects:d?[{type:"completion-sync",sessionId:d},{type:"refresh-runtime",sessionId:d}]:[]};case"agent_settled":{let b={phase:null,retry:null};if("running"===a.runtime)return b.runtime="idle",{patch:b,streamAction:{type:"end"},effects:[]};return{patch:b,effects:[]}}case"message_start":case"message_update":{let c,d=b.message;if(d?.role==="user")return{patch:{},effects:[]};let e={};"idle"===a.runtime?(e.runtime="running",e.phase={kind:"waiting_model"}):e.phase=null;let f=b.assistantMessageEvent;return d?.role==="assistant"?c={type:"snapshot",message:d}:f&&(c={type:"delta",event:f}),{patch:e,streamAction:c,effects:[]}}case"message_end":{let c=b.message;if(!c||"user"===c.role)return{patch:{},effects:[]};let e=[{type:"completed-message",message:c,entryId:"string"==typeof b.__entryId?b.__entryId:null,sessionId:d}];if("running"===a.runtime)return{patch:{phase:{kind:"waiting_model"}},streamAction:{type:"reset"},effects:e};return{patch:{},effects:e}}case"replay_gap":return{patch:{},effects:d?[{type:"reload",sessionId:d,reason:"replay_gap"}]:[]};case"prompt_done":if("running"!==a.runtime||!d)return{patch:{},effects:[]};return{patch:{},effects:[{type:"reconcile",sessionId:d,reason:"prompt_done"}]};case"prompt_error":{let a="string"==typeof b.error&&b.error.trim()?b.error.trim():"The model request failed before producing a response.";return{patch:{...J,retry:null,error:`Model request failed: ${a}`},streamAction:{type:"end"},effects:d?[{type:"clear-stream",sessionId:d},{type:"reload",sessionId:d,reason:"prompt_error"}]:[]}}case"tool_execution_start":{let c="string"==typeof b.toolCallId?b.toolCallId:"",d="string"==typeof b.toolName?b.toolName:"tool",e=b.args,f="bash"===d&&"string"==typeof e?.command?e.command:void 0,g=a.phase?.kind==="running_tools"?[...a.phase.tools]:[];return c&&!g.some(a=>a.id===c)&&g.push({id:c,name:d,args:f}),{patch:{phase:{kind:"running_tools",tools:g}},effects:[]}}case"tool_execution_update":{let d="string"==typeof b.toolCallId?b.toolCallId:"";if(!d)return{patch:{},effects:[]};let e="string"==typeof b.toolName?b.toolName:"",f=c.toolProgress?.(b.partialResult),g=a.phase?.kind==="running_tools"?[...a.phase.tools]:[],h=g.find(a=>a.id===d),i={id:d,name:e||h?.name||"tool",args:h?.args,progress:f??h?.progress};return{patch:{phase:{kind:"running_tools",tools:[...g.filter(a=>a.id!==d),i]}},effects:[]}}case"tool_execution_end":{let c="string"==typeof b.toolCallId?b.toolCallId:"";if(a.phase?.kind!=="running_tools")return{patch:{},effects:[]};let d=a.phase.tools.filter(a=>a.id!==c);return{patch:{phase:0===d.length?{kind:"waiting_model"}:{kind:"running_tools",tools:d}},effects:[]}}case"extension_ui_request":case"extension_error":return{patch:{},effects:[{type:"delegate-extension",event:b}]};case"bash_execution_start":case"bash_execution_update":return{patch:{},effects:[{type:"delegate-bash",event:b}]};case"bash_done":return{patch:{},effects:[{type:"delegate-bash",event:b},...d?[{type:"reload",sessionId:d,reason:"bash_done"}]:[]]};case"queue_update":return{patch:{queued:H({steering:Array.isArray(b.steering)?b.steering:[],followUp:Array.isArray(b.followUp)?b.followUp:[]})},effects:[]};case"auto_retry_start":return{patch:{...I,error:null,retry:{attempt:b.attempt,maxAttempts:b.maxAttempts,errorMessage:b.errorMessage}},effects:[]};case"auto_retry_end":if(!1===b.success&&"string"==typeof b.finalError&&b.finalError.trim())return{patch:{retry:null,error:`Model response failed after retries: ${b.finalError.trim()}`},effects:[]};return{patch:!0===b.success?{retry:null,error:null}:{retry:null},effects:[]};case"auto_compaction_start":case"compaction_start":return{patch:{isCompacting:!0,compactError:null},effects:[]};case"auto_compaction_end":case"compaction_end":{let a="string"==typeof b.errorMessage&&b.errorMessage.trim()?b.errorMessage:null,c=[];return!a&&!0!==b.aborted&&d&&c.push({type:"reload",sessionId:d,reason:"compaction_end"}),{patch:{isCompacting:!1,...a?{compactError:a}:{}},effects:c}}default:return{patch:{},effects:[]}}}(b4.current,a,{sessionId:b,toolProgress:a=>(function(a){if(!k(a))return null;let b=a.content;if(!Array.isArray(b))return null;let c=b.filter(a=>k(a)&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n").split(/\r?\n/),d="";for(let a=c.length-1;a>=0&&!(d=c[a].trim());a-=1);if(!d)return null;let e=d.replace(/\s+/g," ");return e.length<=500?e:`...${e.slice(-497)}`})(a)??void 0});switch(b5(c.patch),c.streamAction?.type){case"start":ap({type:"start"});break;case"end":ap({type:"end"});break;case"reset":ap({type:"reset"});break;case"delta":ap({type:"delta",event:c.streamAction.event});break;case"snapshot":ap({type:"snapshot",message:e(c.streamAction.message)})}for(let a of c.effects)switch(a.type){case"completion-sync":b6(a.sessionId);break;case"refresh-runtime":b7(a.sessionId);break;case"reload":Q(a.sessionId),bX(a.sessionId,!1,!1,!0);break;case"clear-stream":a8(),E(a.sessionId),b8(a.sessionId);break;case"reconcile":b3(a.sessionId,a.reason);break;case"delegate-extension":bg(a.event);break;case"delegate-bash":bp(a.event);break;case"completed-message":b9(a.sessionId,a.message,a.entryId)}c.effects.some(a=>"completion-sync"===a.type||"clear-stream"===a.type)&&g?.()},[bX,g,b3,bg,bp,a8,b5,b6,b7,b9,b8]);let ca=(0,d.useCallback)(async(a,d,e,f)=>{if(!a.trim()&&!d?.length&&!e?.length||aq)return;bF.current+=1;let g=bS(e),i=a.trim()?g?`${a}
5
-
6
- Attached document text:
7
-
8
- ${g}`:a:g?`Attached document text:
9
-
10
- ${g}`:"",j=[],k=t?c:b?.cwd??y?.info?.cwd;if(d?.length&&k)try{j=await L(k,d)}catch(a){a5(a instanceof Error?a.message:String(a));return}let l=j.length?j.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,K.HG)(b)}?type=read`),media_type:a.mimeType}}}):d?.map(a=>({type:"image",source:{type:"base64",media_type:a.mimeType,data:a.data}})),o={role:"user",content:l?.length?[...i.trim()?[{type:"text",text:i}]:[],...l]:i,timestamp:Date.now()},p=U(),q=t?null:b?.id??null;q&&Q(q);let s=bC.current,u=W(o.content);by.current.set(p,{localId:p,sessionId:q??"__new__",leafId:s,message:o,createdAt:Date.now(),kind:"prompt",confirmKey:u,confirmCountAtCreate:t?0:u?bz.current.get(u)??0:0}),af(a=>[...a,o]),a5(null),bj.current=!0,ar(!0),a1({kind:"waiting_model"}),ap({type:"start"}),bv.current=!0;let v=au.find(a=>a.provider===bP?.provider&&a.id===bP?.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(t&&c){aA&&aV(aA);let b=f??bR(),d=await fetch("/api/agent/new",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:c,type:"prompt",message:i,toolNames:b,deferPrompt:!0,...w?.length?{images:w}:{},...aA?{provider:aA.provider,modelId:aA.modelId}:{},..."auto"!==aI?{thinkingLevel:aI}:{}})}),e=await d.json().catch(()=>({}));if(!d.ok||e.error||!e.sessionId)throw Error(e.error??`HTTP ${d.status}`);let g=e.sessionId;a6.current=g;let j=by.current.get(p);j&&(j.sessionId=g),bs.current?.(),bs.current=D(g,()=>{a6.current===g&&(ar(!1),a1(null))}),bE.current=g,await b2(g,{requireConnected:!0,timeoutMs:1e4}),await n(g,{type:"prompt",message:i,toolNames:b,...w?.length?{images:w}:{}}),h?.({id:g,path:"",cwd:c,name:void 0,created:new Date().toISOString(),modified:new Date().toISOString(),messageCount:1,firstMessage:a})}else if(b){let a=f??bR();await bT(b.id),bs.current?.(),bs.current=D(b.id,()=>{a6.current===b.id&&(ar(!1),a1(null))}),await b2(b.id,{requireConnected:!0,timeoutMs:1e4}),await n(b.id,{type:"prompt",message:i,toolNames:a,leafId:s,...bP?{provider:bP.provider,modelId:bP.modelId}:{},..."auto"!==aI?{thinkingLevel:aI}:{},...w?.length?{images:w}:{}})}}catch(c){let b=a6.current;if(by.current.delete(p),af(a=>a.filter(a=>a!==o)),c instanceof m&&(409===c.status||"SESSION_BUSY"===c.code)){a5("This session is already running in another tab. Showing that active run instead."),bj.current=!0,ar(!0),a1({kind:"waiting_model"}),ap({type:"start"}),b&&(a8(),F(b),b2(b,{replay:!0}),br.current?.(b,"prompt_conflict"));return}if(console.error("Failed to send message:",c),t&&a6.current){let a=a6.current;a6.current=null,bE.current=null,fetch(`/api/sessions/${encodeURIComponent(a)}`,{method:"DELETE"}).catch(()=>{})}r?.current&&a.trim()&&r.current.insertIfEmpty(a),r?.current&&d?.length&&r.current.addBase64Images?.(d.map(({data:a,mimeType:b})=>({data:a,mimeType:b}))),a5(c instanceof Error?c.message:String(c)),a8(),b&&E(b),bj.current=!1,ar(!1),a1(null),ap({type:"end"})}},[t,c,aA,bR,aI,b,y?.info?.cwd,aq,b2,h,bS,au,bP,bT,r,a8]),cb=(0,d.useCallback)(async()=>{let a=a6.current;if(!a)return;let b=bm();bj.current=!1,bo(),a5(null),ar(!1),a1(null),ap({type:"end"}),a8(),E(a),Q(a);try{await n(a,{type:b?"abort_bash":"abort"}),await bX(a,!1,!1,!0)}catch(b){console.error("Failed to abort:",b),await bX(a,!1,!1,!0)}finally{b&&bo()}},[bo,bm,bX,a8]),cc=(0,d.useCallback)(async(a,b)=>{let c=a6.current,d=a.trim();if(c&&d){a5(null),bn(d);try{await n(c,{type:"bash",command:d,excludeFromContext:b})}catch(a){a5(a instanceof Error?a.message:String(a))}finally{bo(),Q(c),await bX(c,!1,!1,!0)}}},[bn,bo,bX]),cd=(0,d.useCallback)(async a=>{let b=a6.current;if(b){aR(a);try{let{cancelled:c,newSessionId:d}=await n(b,{type:"fork",entryId:a})??{};!c&&d&&i?.(d)}catch(a){console.error("Fork failed:",a)}finally{aR(null)}}},[i]),ce=(0,d.useCallback)(async a=>{let d=a6.current,e=y?.info?.cwd??b?.cwd??c??null;if(!d||!e)return{ok:!1,error:"No active session to fork"};if(bj.current)return{ok:!1,error:"Agent is still running"};try{let b=bR(),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,...bP?{provider:bP.provider,modelId:bP.modelId}:{},..."auto"!==aI?{thinkingLevel:aI}:{}})}),f=await c.json().catch(()=>({}));if(!c.ok||f.error||!f.sessionId)return{ok:!1,error:f.error??`HTTP ${c.status}`};let g=f.sessionId;try{await n(g,{type:"append_message",message:a,customType:"fork_handoff",display:!0})}catch{}return h?.({id:g,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)}}},[y?.info?.cwd,b?.cwd,c,bP,aI,bR,h]),cf=(0,d.useCallback)(async a=>{let b=a6.current;b&&(bA.current.delete(b),Q(b),bC.current=a,ad(a),await b_(b,a))},[b_]);(0,d.useCallback)(async a=>{bC.current=a,ad(a);let b=a6.current;b&&(bA.current.delete(b),Q(b),await b_(b,a))},[b_]);let cg=(0,d.useCallback)(async(a,b)=>{if(t)return void bM({provider:a,modelId:b});let c=a6.current;if(c)try{var d;a5(null);let e=await n(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)&&aJ(e.thinkingLevel),aT(f),M(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),a5(a)}},[t,bM]),ch=(0,d.useCallback)(async()=>{let a=a6.current;if(a&&!aW){aX(!0),aZ(null),a_(null);try{let b=await n(a,{type:"compact"});b?.reducedBy!=null&&a_(`Compacted ~${b.tokensBefore??"?"} → ~${b.tokensAfter??"?"} tokens (−${b.reducedBy})`),await bX(a,!0)}catch(a){aZ(a instanceof Error?a.message:String(a))}finally{aX(!1)}}},[aW,bX]),ci=(0,d.useCallback)(async(a,b,c)=>{let d=a6.current;if(!d)return;Q(d);let e=bS(c),f=a.trim()?e?`${a}
11
-
12
- Attached document text:
13
-
14
- ${e}`:a:e?`Attached document text:
15
-
16
- ${e}`:"",g=au.find(a=>a.provider===bP?.provider&&a.id===bP?.modelId)?.input,h=!g||0===g.length||g.includes("image")?b?.map(a=>({type:"image",data:a.data,mimeType:a.mimeType})):void 0,i={role:"user",content:`[steer] ${f}`,timestamp:Date.now()},j=U(),k=V(f,h?.length??0);by.current.set(j,{localId:j,sessionId:d,leafId:bC.current,message:i,createdAt:Date.now(),kind:"steer",confirmKey:k,confirmCountAtCreate:k?bz.current.get(k)??0:0}),af(a=>[...a,i]);try{await n(d,{type:"steer",message:f,...h?.length?{images:h}:{}})}catch(a){by.current.delete(j),console.error("Failed to steer:",a)}},[bS,au,bP]),cj=(0,d.useCallback)(async(a,b,c)=>{let d=a6.current;if(!d)return;Q(d);let e=bS(c),f=a.trim()?e?`${a}
17
-
18
- Attached document text:
19
-
20
- ${e}`:a:e?`Attached document text:
21
-
22
- ${e}`:"",g=au.find(a=>a.provider===bP?.provider&&a.id===bP?.modelId)?.input,h=!g||0===g.length||g.includes("image")?b?.map(a=>({type:"image",data:a.data,mimeType:a.mimeType})):void 0,i={role:"user",content:f,timestamp:Date.now()},j=U(),k=V(f,h?.length??0);by.current.set(j,{localId:j,sessionId:d,leafId:bC.current,message:i,createdAt:Date.now(),kind:"follow_up",confirmKey:k,confirmCountAtCreate:k?bz.current.get(k)??0:0}),af(a=>[...a,i]);try{await n(d,{type:"follow_up",message:f,...h?.length?{images:h}:{}})}catch(a){by.current.delete(j),console.error("Failed to follow up:",a)}},[bS,au,bP]),ck=(0,d.useCallback)(async()=>{let a=a6.current;if(a)try{await n(a,{type:"abort_compaction"})}catch(a){console.error("Failed to abort compaction:",a)}},[]),cl=(0,d.useCallback)(async a=>{if(aJ(a),"auto"===a)return;let b=a6.current;if(b)try{await n(b,{type:"set_thinking_level",level:a})}catch(a){console.error("Failed to set thinking level:",a)}},[]),cm=(0,d.useCallback)(async a=>{bN(a);let b=(0,R.tE)(a,aE),c=a6.current;if(c)try{await n(c,{type:"set_tools",toolNames:b})}catch(a){console.error("Failed to set tools:",a)}},[aE,bN]),cn=(0,d.useCallback)(async a=>{bO(a);let b=(0,R.tE)(aC,a),c=a6.current;if(c)try{await n(c,{type:"set_tools",toolNames:b})}catch(a){console.error("Failed to set memory tools:",a)}},[bO,aC]);(0,d.useCallback)((a="smooth")=>{bw.current?.scrollIntoView({behavior:a})},[]),(0,d.useCallback)(()=>{let a=bx.current,b=bu.current;if(!a||!b)return;let c=b.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop;a.scrollTo({top:c-16,behavior:"smooth"})},[]);let co=(0,d.useCallback)(async()=>{let a=a6.current;if(a)try{await n(a,{type:"clear_queue"}),a3({steering:[],followUp:[]})}catch(a){a5(a instanceof Error?a.message:String(a))}},[]);return{data:y,loading:$,error:aa,activeLeafId:ac,messages:ae,entryIds:ag,streamState:ao,agentRunning:aq,modelNames:as,modelList:au,modelThinkingLevels:aw,modelThinkingLevelMaps:ay,newSessionModel:aA,toolPreset:aC,memoryTools:aE,thinkingLevel:aI,retryInfo:aK,queuedMessages:a2,extensionStatuses:bb,extensionWidgets:bc,extensionDialog:bd,extensionNotices:be,bashLive:bk,bashRunning:bl,contextUsage:aM,systemPrompt:aO,forkingEntryId:aQ,isCompacting:aW,compactError:aY,compactInfo:a$,currentModel:bP,displayModel:bQ,sessionStats:bU,agentPhase:a0,agentError:a4,isNew:t,sessionIdRef:a6,sseReaderRef:ba,messagesEndRef:bw,scrollContainerRef:bx,lastUserMsgRef:bu,pendingScrollToUserRef:bv,initialScrollDoneRef:bt,handleSend:ca,handleAbort:cb,handleFork:cd,handleNavigate:cf,handleModelChange:cg,handleCompact:ch,handleSteer:ci,handleFollowUp:cj,handleAbortCompaction:ck,handleToolPresetChange:cm,handleMemoryToolsChange:cn,handleThinkingLevelChange:cl,handleClearQueue:co,handleBash:cc,respondToExtensionUi:bh,dismissExtensionNotice:bi,loadTools:b0,loadSlashCommands:b1,slashCommands:aG,setActiveLeafId:ad,setData:M,setMessages:af,dispatch:ap,setAgentRunning:ar,setForkingEntryId:aR,forkToNewSession:ce,loadMoreMessages:bZ,hasMoreMessages:ak,totalMessages:ai,loadedMessagesCount:am,loadShadowedMessages:b$,handleAgentEventRef:bq}}},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}}}}};