@shawnstack/quickforge 1.7.5 → 1.7.6

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 (66) hide show
  1. package/dist/assets/AgentProfilesPage-Dl5Peqov.js +1 -0
  2. package/dist/assets/ChatPanelHost-D3987TUJ.js +307 -0
  3. package/dist/assets/CloudAccountSettingsPage-BG5Nn3bq.js +1 -0
  4. package/dist/assets/PluginsPage-BDKYfLna.js +1 -0
  5. package/dist/assets/ScheduledTasksPage--GAki3lB.js +2 -0
  6. package/dist/assets/SettingsWorkspacePage-DSy66Tuw.js +1696 -0
  7. package/dist/assets/ShareLinksSettingsPage-BQQMsvJo.js +1 -0
  8. package/dist/assets/SharedConversationPage-B9BUVCri.js +1 -0
  9. package/dist/assets/TerminalDock-CT1nYo7P.js +2 -0
  10. package/dist/assets/{WorkspaceInspector-D9kdnLDd.js → WorkspaceInspector-BnfDLf9a.js} +5 -5
  11. package/dist/assets/{dist-DLKC_odd.js → dist-yDHbi5ux.js} +1 -1
  12. package/dist/assets/{esm-Df4edDpj.js → esm-sdsK6gaB.js} +2 -2
  13. package/dist/assets/{icons-CXPP1fFT.js → icons-2D18YbSI.js} +1 -1
  14. package/dist/assets/index-1ei6nhs-.css +3 -0
  15. package/dist/assets/index-BivLuZvX.js +65 -0
  16. package/dist/assets/{mcp-servers-dialog-BUSPvaqI.js → mcp-servers-dialog-BEV4_TXC.js} +2 -2
  17. package/dist/assets/{logger-8REuLPGK.js → model-display-label-C6-0eDxF.js} +1 -1
  18. package/dist/assets/{monaco-D6OhXgjg.js → monaco-DvXErxp2.js} +1 -1
  19. package/dist/assets/{react-vendor-1KC5PyRx.js → react-vendor-3UaA-C9W.js} +1 -1
  20. package/dist/assets/{skills-dialog-BThnIUBs.js → skills-dialog-BTJ7mzk_.js} +3 -3
  21. package/dist/assets/{web-DoV8MSMn.js → web-B5qgZJRv.js} +1 -1
  22. package/dist/index.html +8 -8
  23. package/dist/sw.js +17 -0
  24. package/package.json +2 -1
  25. package/runtime-assets/agent/darwin-arm64/qf-agent +0 -0
  26. package/runtime-assets/agent/darwin-x64/qf-agent +0 -0
  27. package/runtime-assets/agent/linux-arm64/qf-agent +0 -0
  28. package/runtime-assets/agent/linux-x64/qf-agent +0 -0
  29. package/runtime-assets/agent/win32-x64/qf-agent.exe +0 -0
  30. package/server/access-policy.mjs +11 -0
  31. package/server/agent-manager.mjs +349 -48
  32. package/server/agent-profiles.mjs +27 -8
  33. package/server/auto-compaction.mjs +35 -8
  34. package/server/cloud/client.mjs +4 -7
  35. package/server/cloud/config.mjs +6 -5
  36. package/server/cloud/credential-store.mjs +10 -3
  37. package/server/cloud/identity.mjs +17 -60
  38. package/server/cloud/models.mjs +1 -1
  39. package/server/cloud/qf-agent-process.mjs +571 -0
  40. package/server/cloud/runtime.mjs +11 -5
  41. package/server/cloud/service-config.mjs +8 -4
  42. package/server/index.mjs +96 -37
  43. package/server/mcp/registry.mjs +8 -7
  44. package/server/message-converters.mjs +40 -19
  45. package/server/model-catalog.mjs +11 -4
  46. package/server/opencode-acp-agent.mjs +1151 -0
  47. package/server/public-api.mjs +11 -5
  48. package/server/routes/agent-profiles.mjs +6 -3
  49. package/server/routes/agent.mjs +43 -3
  50. package/server/routes/backup.mjs +5 -4
  51. package/server/routes/cloud.mjs +54 -35
  52. package/server/routes/shares.mjs +7 -8
  53. package/server/routes/storage.mjs +9 -24
  54. package/server/routes/system.mjs +7 -4
  55. package/server/utils/process-tree.mjs +78 -0
  56. package/dist/assets/AgentProfilesPage-XNjuqJs7.js +0 -1
  57. package/dist/assets/ChatPanelHost-CuF-PZpc.js +0 -292
  58. package/dist/assets/CloudAccountSettingsPage-GJSoi6sO.js +0 -1
  59. package/dist/assets/PluginsPage-BQgp0qN-.js +0 -1
  60. package/dist/assets/ScheduledTasksPage-DdekATzq.js +0 -2
  61. package/dist/assets/SettingsWorkspacePage-Cb54Ic91.js +0 -1639
  62. package/dist/assets/ShareLinksSettingsPage-C75WJpaF.js +0 -1
  63. package/dist/assets/SharedConversationPage-CjMtSQTW.js +0 -1
  64. package/dist/assets/TerminalDock-D4zJBJc4.js +0 -2
  65. package/dist/assets/index-_ZhK6bvp.js +0 -65
  66. package/dist/assets/index-iVV2bP_f.css +0 -3
@@ -0,0 +1,307 @@
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{qt as t}from"./icons-2D18YbSI.js";import{n}from"./react-vendor-3UaA-C9W.js";import{d as r,p as i,t as a}from"./lit-vendor-DvaQX_UQ.js";import{g as o,h as s,y as c}from"./pi-web-ui-DV5jKjSg.js";import{n as l}from"./model-display-label-C6-0eDxF.js";import{r as u}from"./model-reference-o41fJ6jQ.js";import{At as d,Dt as f,Et as p,Gt as m,Jt as h,Kt as g,Ot as _,Wt as v,Xt as y,Yt as b,d as x,k as S,n as C,o as w,qt as T,r as E,rt as D,t as O,xt as ee,yn as k,z as te}from"./index-BivLuZvX.js";import{t as A}from"./plugin-api-Uu2xAB4d.js";import{n as j,r as M,t as N}from"./mermaid-renderer-jEbqFaTe.js";var P=e(t(),1);function F(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ne(e,t,n){if(!e||e.isError||t||!F(e.details))return``;let r=e.details.action,i=e.details.status,a=e.details.markdown;if(typeof a!=`string`)return``;if(r===`read`){if(a)return a;if(i===`empty`||i===void 0)return n(`memoryContentEmpty`)}return r===`write`&&(i===`saved`||i===void 0)?n(`memoryContentSaved`):``}function I(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function re(e){let t=new Set;for(let n of e)!I(n)||n.role!==`assistant`||!Array.isArray(n.content)||n.content.forEach(e=>{I(e)&&e.type===`toolCall`&&typeof e.id==`string`&&t.add(e.id)});return e.filter(e=>I(e)&&(e.role===`assistant`||e.role===`toolResult`&&typeof e.toolCallId==`string`&&t.has(e.toolCallId)))}var ie=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:png|jpg|webp|gif)$/i,ae=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]);function oe(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function se(e){if(!oe(e)||e.type!==`generated_image_result`||typeof e.sessionId!=`string`||!e.sessionId||typeof e.prompt!=`string`||typeof e.model!=`string`||!Array.isArray(e.assets))return null;let t=e.assets.flatMap(e=>!oe(e)||typeof e.assetId!=`string`||!ie.test(e.assetId)||typeof e.mimeType!=`string`||!ae.has(e.mimeType)||typeof e.size!=`number`||!Number.isFinite(e.size)||e.size<0?[]:[{assetId:e.assetId,mimeType:e.mimeType,size:e.size}]);return t.length?{type:`generated_image_result`,sessionId:e.sessionId,prompt:e.prompt,model:e.model,assets:t,...typeof e.text==`string`&&e.text?{text:e.text}:{}}:null}function ce(e,t,n=window.location.pathname){let r=n.match(/^\/share\/([^/]+)\/?$/)?.[1];return r?`/api/shared/${encodeURIComponent(decodeURIComponent(r))}/assets/${encodeURIComponent(t.assetId)}`:`/api/session-assets/${encodeURIComponent(e.sessionId)}/${encodeURIComponent(t.assetId)}`}var L={maxHeight:`28rem`,overflow:`auto`,border:`1px solid color-mix(in oklab, var(--border) 75%, transparent)`,borderRadius:`0.75rem`,background:`color-mix(in oklab, var(--muted) 28%, transparent)`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.78rem`,lineHeight:`1.45`},le={minHeight:`1.35em`,padding:`0 0.75rem`,whiteSpace:`pre`},ue={display:`inline-flex`,alignItems:`center`,borderRadius:`999px`,padding:`0.05rem 0.45rem`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.72rem`,fontWeight:`650`};function R(e,t){let n=V(e?.details)?e.details:void 0;return e?.isError||n?.aborted===!0||n?.timedOut===!0?`error`:t?`running`:e?`done`:`called`}function z(e){if(e==null)return``;if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function B(e){return e?.content?.filter(e=>e.type===`text`).map(e=>e.text??``).join(`
2
+ `)??``}function V(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function de(e,t){let n=V(e?.__quickforgeAcp)?e.__quickforgeAcp:void 0,r=V(t)?t:void 0;return(V(r?.__quickforgeAcp)?r.__quickforgeAcp:void 0)??n}function H(e){if(!e||!(`__quickforgeAcp`in e))return e;let{__quickforgeAcp:t,...n}=e;return n}function fe(e){if(!V(e)||!(`__quickforgeAcp`in e))return e;let{__quickforgeAcp:t,...n}=e;return n}function pe(e,t){if(e.running===!0||t)return`Status: running`;let n=[e.timedOut?`timed out`:null,e.aborted?`aborted`:null].filter(Boolean),r=n.length?` (${n.join(`, `)})`:``;return`Exit code: ${e.code??`unknown`}${typeof e.signal==`string`&&e.signal?`, signal: ${e.signal}`:``}${r}`}function me(e,t,n){let r=V(t)?t:void 0,i=typeof r?.command==`string`?r.command:typeof e?.command==`string`?e.command:``;if(!i||!r)return``;let a=typeof r?.stdout_preview==`string`?r.stdout_preview:typeof r?.stdout==`string`?r.stdout:``,o=typeof r?.stderr_preview==`string`?r.stderr_preview:typeof r?.stderr==`string`?r.stderr:``,s=!!(a||o),c=r.running===!0||r.code!==void 0||r.signal!==void 0||r.timedOut===!0||r.aborted===!0;return!s&&!c&&!n?``:[`Command: ${i}`,pe(r,n),``,`STDOUT:`,a||`(empty)`,``,`STDERR:`,o||`(empty)`].join(`
3
+ `)}function U(e,t,n,r){let i=B(n);return e===`manage_global_memory`?ne(n,r,k)||i:i||(e===`run_command`?me(t,n?.details,r):``)}function he(e,t){return V(e)&&typeof e[t]==`string`?e[t]:``}function ge(e,t,n){if(!t&&!n?.details)return``;if(e===`run_command`&&typeof t?.command==`string`)return t.command;if(e===`generate_image`){let e=typeof t?.prompt==`string`?t.prompt.trim():``;return e.length>100?`${e.slice(0,100)}…`:e}if(e===`present_files`){let e=(Array.isArray(t?.files)?t.files:Array.isArray(n?.details&&n.details.files)?(n?.details).files:[]).map(e=>typeof e==`string`?e:V(e)&&typeof e.path==`string`?e.path:``).filter(Boolean);return e.length?e.slice(0,3).join(`, `)+(e.length>3?` +${e.length-3}`:``):``}if(e===`grep_files`){let e=typeof t?.query==`string`&&t.query?t.query:he(n?.details,`query`),r=typeof t?.path==`string`&&t.path?t.path:he(n?.details,`path`)||`.`,i=t?.regex||V(n?.details)&&V(n.details.searchOptions)&&n.details.searchOptions.regex?`regex`:`text`,a=r&&r!==`.`?` in ${r}`:` in current workspace`;return e?`${i}: ${e}${a}`:`searching${a}`}return e===`activate_skill`&&typeof t?.name==`string`?t.name:e===`read_skill_resource`&&typeof t?.path==`string`||t&&`path`in t&&typeof t.path==`string`?t.path:t&&`query`in t&&typeof t.query==`string`?t.query:t&&`search_query`in t&&typeof t.search_query==`string`?t.search_query:``}function _e(e){if(!e||typeof e!=`object`)return;let t=e.diff;if(!t||typeof t!=`object`)return;let n=t;return typeof n.text==`string`?n:void 0}function ve(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.diff;if(!n||typeof n!=`object`)return e;let{text:r,...i}=n;return{...t,diff:i}}function ye(e){if(!e||typeof e!=`object`)return{};let t=e;return{sessionId:typeof t.sessionId==`string`?t.sessionId:void 0,toolCallId:typeof t.toolCallId==`string`?t.toolCallId:void 0}}async function be(e,t,n){let r=n.getAttribute(`aria-label`)||k(`terminateCommand`);n.disabled=!0,n.setAttribute(`aria-label`,k(`commandTerminateRequested`)),n.setAttribute(`title`,k(`commandTerminateRequested`));try{let n=await fetch(`/api/agents/${encodeURIComponent(e)}/abort-tool`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t})});if(!n.ok)throw Error(`HTTP ${n.status}`)}catch{n.disabled=!1,n.setAttribute(`aria-label`,r),n.setAttribute(`title`,k(`terminateCommandTitle`))}}function xe(e){return e.startsWith(`+++`)||e.startsWith(`---`)?`quickforge-diff-file`:e.startsWith(`@@`)?`quickforge-diff-hunk`:e.startsWith(`+`)?`quickforge-diff-add`:e.startsWith(`-`)?`quickforge-diff-del`:`quickforge-diff-context`}function Se(e){return e.startsWith(`+++`)||e.startsWith(`---`)?{...le,background:`color-mix(in oklab, var(--muted) 48%, transparent)`,color:`color-mix(in oklab, var(--muted-foreground) 88%, transparent)`}:e.startsWith(`@@`)?{...le,background:`color-mix(in oklab, rgb(37 99 235) 10%, transparent)`,color:`rgb(37 99 235)`}:e.startsWith(`+`)?{...le,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`}:e.startsWith(`-`)?{...le,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`}:{...le,color:`var(--foreground)`}}function Ce(e,t){if(e!==`write_file`&&e!==`edit_file`||!t)return r;let n=Number(t.addedLines??0),o=Number(t.removedLines??0);return i`
4
+ <span class="quickforge-tool-meta-hover shrink-0 inline-flex items-center gap-1" title="+${n} -${o}">
5
+ <span
6
+ class="quickforge-diff-badge quickforge-diff-badge-add"
7
+ style=${a({...ue,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`})}
8
+ >+${n}</span>
9
+ <span
10
+ class="quickforge-diff-badge quickforge-diff-badge-del"
11
+ style=${a({...ue,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`})}
12
+ >-${o}</span>
13
+ </span>
14
+ `}function we(e){let t=e.text?.split(`
15
+ `)??[],n=Number(e.addedLines??0),o=Number(e.removedLines??0);return i`
16
+ <div>
17
+ <div class="mb-1 flex items-center gap-2 text-xs font-medium text-muted-foreground">
18
+ <span>Diff</span>
19
+ <span
20
+ class="quickforge-diff-badge quickforge-diff-badge-add"
21
+ style=${a({...ue,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`})}
22
+ >+${n}</span>
23
+ <span
24
+ class="quickforge-diff-badge quickforge-diff-badge-del"
25
+ style=${a({...ue,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`})}
26
+ >-${o}</span>
27
+ ${e.truncated?i`<span class="text-muted-foreground/80">truncated</span>`:r}
28
+ </div>
29
+ <div class="quickforge-diff-block" style=${a(L)}>${t.map(e=>i`
30
+ <div class=${xe(e)} style=${a(Se(e))}>${e||` `}</div>
31
+ `)}</div>
32
+ </div>
33
+ `}function W(e){if(!Number.isFinite(e)||e<0)return``;if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=e/1e3;return t<10?`${t.toFixed(1)}s`:t<60?`${Math.round(t)}s`:`${Math.floor(t/60)}m ${Math.floor(t%60).toString().padStart(2,`0`)}s`}function Te(e){if(e){if(typeof e.durationMs==`number`)return e.durationMs;if(typeof e.startedAt==`number`)return Date.now()-e.startedAt}}var Ee=class extends HTMLElement{timer;static get observedAttributes(){return[`duration-ms`,`running`,`started-at`]}connectedCallback(){this.render(),this.syncTimer()}disconnectedCallback(){this.stopTimer()}attributeChangedCallback(){this.render(),this.syncTimer()}readNumberAttribute(e){let t=this.getAttribute(e);if(t===null||t.trim()===``)return;let n=Number(t);return Number.isFinite(n)&&n>=0?n:void 0}syncTimer(){this.getAttribute(`running`)===`true`&&this.readNumberAttribute(`duration-ms`)===void 0?this.timer||=setInterval(()=>this.render(),500):this.stopTimer()}stopTimer(){this.timer&&=(clearInterval(this.timer),void 0)}render(){let e=this.readNumberAttribute(`duration-ms`),t=this.readNumberAttribute(`started-at`),n=e===void 0?t!==void 0&&t>0?Date.now()-t:0:e;this.textContent=W(n)}};customElements.get(`quickforge-elapsed-time`)||customElements.define(`quickforge-elapsed-time`,Ee);function De(e,t){return Te(e)===void 0?r:i`
34
+ <quickforge-elapsed-time
35
+ class="quickforge-tool-meta-hover text-xs text-muted-foreground/70"
36
+ started-at=${String(e?.startedAt??``)}
37
+ duration-ms=${typeof e?.durationMs==`number`?String(e.durationMs):``}
38
+ running=${String(t===`running`)}
39
+ ></quickforge-elapsed-time>
40
+ `}function G(){return`text-muted-foreground/60`}function K(e){let t=`quickforge-tool-type-icon shrink-0 ${G()}`;return e===`manage_global_memory`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 18V5"/><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"/><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"/><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"/><path d="M18 18a4 4 0 0 0 2-7.464"/><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"/><path d="M6 18a4 4 0 0 1-2-7.464"/><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"/></svg>`:e===`edit_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.4 2.6a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z"/></svg>`:e===`write_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M12 18v-6"/><path d="M9 15h6"/></svg>`:e===`read_file`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></svg>`:e===`grep_files`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>`:e===`present_files`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"/><path d="M14 2v6h6"/><path d="M10 13.5 8 16l2 2.5"/><path d="m14 13.5 2 2.5-2 2.5"/></svg>`:e===`generate_image`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.1-3.1a2 2 0 0 0-2.8 0L6 21"/><path d="m14 19.5-2-2a2 2 0 0 0-2.8 0L5.5 21"/></svg>`:e===`read_skill_resource`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3Z"/></svg>`:e===`run_command`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="4 17 10 11 4 5"/><line x1="12" x2="20" y1="19" y2="19"/></svg>`:e===`run_subagent`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 8V4H8"/><rect width="16" height="12" x="4" y="8" rx="2"/><path d="M2 14h2"/><path d="M20 14h2"/><path d="M15 13v2"/><path d="M9 13v2"/></svg>`:e===`activate_skill`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.9 2.1 8.5 8.5 2.1 9.9l6.4 1.4 1.4 6.4 1.4-6.4 6.4-1.4-6.4-1.4Z"/><path d="M19 15v4"/><path d="M21 17h-4"/></svg>`:i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.8-3.8a6 6 0 0 1-7.9 7.9l-6.9 6.9a2.1 2.1 0 0 1-3-3l6.9-6.9a6 6 0 0 1 7.9-7.9Z"/></svg>`}function Oe(e){return e===`error`?`text-destructive`:e===`running`?`text-primary animate-spin`:e===`done`?`text-emerald-600 dark:text-emerald-500`:`text-muted-foreground/70`}function ke(e){let t=`quickforge-tool-status-icon shrink-0 ${Oe(e)}`,n=k(e);return e===`running`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><path d="M21 12a9 9 0 1 1-6.2-8.6"/></svg>`:e===`done`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><path d="M22 11.1V12a10 10 0 1 1-5.9-9.1"/><path d="m9 11 3 3L22 4"/></svg>`:e===`error`?i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><circle cx="12" cy="12" r="10"/><path d="m15 9-6 6"/><path d="m9 9 6 6"/></svg>`:i`<svg class=${t} xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" role="img" aria-label=${n}><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="2" fill="currentColor" stroke="none"/></svg>`}function Ae(e,t){return i`
41
+ <span class="${e===`done`?`quickforge-tool-meta-hover`:`quickforge-tool-meta-important`} shrink-0 inline-flex items-center gap-1.5" title=${k(e)}>
42
+ ${ke(e)}${De(t,e)}
43
+ </span>
44
+ `}function je(e,t,n){if(e!==`run_command`||t!==`running`)return r;let{sessionId:a,toolCallId:o}=ye(n);return!a||!o?r:i`
45
+ <button
46
+ type="button"
47
+ class="shrink-0 inline-flex size-5 items-center justify-center text-foreground transition-opacity hover:opacity-70 disabled:cursor-not-allowed disabled:opacity-40"
48
+ title=${k(`terminateCommandTitle`)}
49
+ aria-label=${k(`terminateCommandTitle`)}
50
+ @click=${e=>{e.preventDefault(),e.stopPropagation(),be(a,o,e.currentTarget)}}
51
+ ><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="7" width="10" height="10" rx="2.4"/></svg></button>
52
+ `}var Me=`quickforge:preview-artifact`;function Ne(e,t){let n=t===`html`||t===`image`||t===`markdown`||t===`code`||t===`unknown`?t:void 0;return x(e,n)?{path:e,kind:n}:void 0}function Pe(e,t){if(e===`write_file`||e===`edit_file`){let e=t&&`path`in t&&typeof t.path==`string`?t.path:``;return e?Ne(e):void 0}if(e===`present_files`){let e=(t&&Array.isArray(t.files)?t.files:[]).map(e=>{if(typeof e==`string`)return{path:e,kind:void 0};if(!(!V(e)||typeof e.path!=`string`))return{path:e.path,kind:typeof e.kind==`string`?e.kind:void 0}}).filter(e=>!!e),n=t&&typeof t.defaultPreview==`string`?t.defaultPreview:``,r=e.find(e=>e.path===n);if(r){let e=Ne(r.path,r.kind);if(e)return e}for(let t of e){let e=Ne(t.path,t.kind);if(e)return e}}}function q(e,t){let n=Pe(e,t);return n?i`
53
+ <button
54
+ type="button"
55
+ class="shrink-0 inline-flex size-5 items-center justify-center text-muted-foreground transition-colors hover:text-foreground"
56
+ title=${k(`previewArtifact`)}
57
+ aria-label=${k(`previewArtifact`)}
58
+ @click=${e=>{e.preventDefault(),e.stopPropagation(),window.dispatchEvent(new CustomEvent(Me,{detail:n}))}}
59
+ ><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg></button>
60
+ `:r}function Fe(e,t){return V(t)&&typeof t.label==`string`&&t.label?t.label:e===`general`?k(`subagentGeneral`):e===`explore`?k(`subagentExplore`):e||k(`runSubagent`)}function Ie(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Le(e){return Array.isArray(e)?e:[]}var J=new Map,Y=200;function X(e,t){if(e){if(!J.has(e)&&J.size>=Y){let e=J.keys().next().value;e&&J.delete(e)}J.set(e,t)}}function Re(e,t,n){let{toolCallId:r}=ye(n);return r||`${e}:${z(t)}`}var ze=new Map,Be=100;function Ve(e,t){if(e){if(!ze.has(e)&&ze.size>=Be){let e=ze.keys().next().value;e&&ze.delete(e)}ze.set(e,t)}}var He=class{render(e,t,n){let a=R(t,n),o=d(t?.details),s=V(t?.details)?t.details:void 0,c=typeof e?.subagent==`string`?e.subagent:typeof s?.subagent==`string`?s.subagent:``,l=Fe(c,s),u=typeof e?.task==`string`?e.task:``,f=typeof e?.context==`string`?e.context:``,p=typeof e?.expectedOutput==`string`?e.expectedOutput:``,m=typeof s?.toolCalls==`number`?s.toolCalls:void 0,h=Ie(s?.allowedTools),g=Le(s?.messages),_=Le(s?.tools),v=new Set(Ie(s?.pendingToolCalls)),y=ee().toolDisplayMode===`detailed`,b=re(g),x=y?z(e):``,S=y?z(t?.details):``,C=B(t),w=typeof s?.sessionId==`string`?s.sessionId:`${c}:${u}`,T=ze.get(w)??y,E=a===`running`?k(`subagentRunning`,{name:l}):a===`done`?k(`subagentCompleted`,{name:l}):a===`error`?k(`subagentFailed`,{name:l}):k(`runSubagent`);return{isCustom:!1,content:i`
61
+ <details class="group/tool quickforge-subagent-tool" ?open=${T} @toggle=${e=>{e.isTrusted&&Ve(w,e.currentTarget.open)}}>
62
+ <summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
63
+ ${K(`run_subagent`)}
64
+ <span class="quickforge-subagent-title min-w-0">
65
+ <span class="quickforge-subagent-label">${E}</span>
66
+ <svg class="quickforge-subagent-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
67
+ ${Ae(a,o)}
68
+ </span>
69
+ </summary>
70
+ <div class="mt-3 space-y-3">
71
+ ${u||f||p?i`<div class="quickforge-subagent-task space-y-1 rounded-lg border border-border bg-background/60 px-3 py-2 text-xs leading-relaxed text-muted-foreground/70">
72
+ ${u?i`<div><span class="font-medium text-foreground/75">${k(`subagentTask`)}:</span> ${u}</div>`:r}
73
+ ${f?i`<div><span class="font-medium text-foreground/75">${k(`subagentContext`)}:</span> ${f}</div>`:r}
74
+ ${p?i`<div><span class="font-medium text-foreground/75">${k(`subagentExpectedOutput`)}:</span> ${p}</div>`:r}
75
+ </div>`:r}
76
+ ${y?i`<div class="quickforge-subagent-summary rounded-lg border border-border/75 bg-muted/20 px-3 py-2.5 text-sm">
77
+ <div class="flex flex-wrap items-center gap-x-3 gap-y-1 text-muted-foreground">
78
+ <span class="font-medium text-foreground/85">${l}</span>
79
+ ${m===void 0?r:i`<span>${k(`subagentToolCalls`)}: ${m}</span>`}
80
+ ${o?i`<span>${De(o,a)}</span>`:r}
81
+ </div>
82
+ ${h.length>0?i`<div class="mt-2 flex flex-wrap gap-1.5">${h.map(e=>i`<span class="rounded-full bg-background/80 px-2 py-0.5 text-[11px] text-muted-foreground/80">${e}</span>`)}</div>`:r}
83
+ </div>`:r}
84
+ ${b.length>0?i`<div class="quickforge-subagent-trace rounded-lg border border-border bg-background/60 p-2.5"><message-list data-quickforge-subagent-process="true" data-quickforge-subagent-streaming=${String(a===`running`)} .messages=${b} .tools=${_} .pendingToolCalls=${v} .isStreaming=${!1}></message-list></div>`:r}
85
+ ${C&&b.length===0?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`subagentResult`)}</div><code-block .code=${C} language="text"></code-block></div>`:r}
86
+ ${x?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`input`)}</div><code-block .code=${x} language="json"></code-block></div>`:r}
87
+ ${S?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`details`)}</div><code-block .code=${S} language="json"></code-block></div>`:r}
88
+ </div>
89
+ </details>
90
+ `}}},Ue=class{render(e,t,n){let a=R(t,n),o=d(t?.details),s=se(t?.details),c=ge(`generate_image`,e,t),l=B(t),u=s?.model||(typeof e?.model==`string`?e.model:``);return{isCustom:!0,content:i`
91
+ <div class="quickforge-generated-image-tool space-y-3">
92
+ <div class="flex items-center gap-2 text-sm text-muted-foreground">
93
+ ${K(`generate_image`)}
94
+ <span class="min-w-0 flex-1 truncate">${k(`generateImage`)}${c?i`<span class="text-muted-foreground/70"> · ${c}</span>`:r}</span>
95
+ ${Ae(a,o)}
96
+ </div>
97
+ ${s?i`
98
+ <div class=${s.assets.length>1?`grid grid-cols-1 gap-3 sm:grid-cols-2`:`grid grid-cols-1 gap-3`}>
99
+ ${s.assets.map((e,t)=>{let n=ce(s,e),r=k(`generatedImageAlt`,{index:t+1});return i`
100
+ <figure class="overflow-hidden rounded-lg border border-border bg-background/60">
101
+ <a href=${n} target="_blank" rel="noopener noreferrer" title=${k(`openGeneratedImage`)} aria-label=${k(`openGeneratedImage`)}>
102
+ <img class="block max-h-[32rem] w-full object-contain" src=${n} alt=${r} loading="lazy" referrerpolicy="no-referrer" />
103
+ </a>
104
+ <figcaption class="flex items-center gap-2 border-t border-border px-3 py-2 text-xs text-muted-foreground">
105
+ <span class="min-w-0 flex-1 truncate">${u||e.mimeType}</span>
106
+ <a class="text-muted-foreground transition-colors hover:text-foreground" href=${n} download=${e.assetId} title=${k(`downloadGeneratedImage`)} aria-label=${k(`downloadGeneratedImage`)}>${k(`downloadGeneratedImage`)}</a>
107
+ </figcaption>
108
+ </figure>
109
+ `})}
110
+ </div>
111
+ ${s.text?i`<div class="text-sm leading-relaxed text-muted-foreground">${s.text}</div>`:r}
112
+ `:a===`running`?i`
113
+ <div class="rounded-lg border border-border bg-background/60 px-3 py-6 text-center text-sm text-muted-foreground">${k(`generatingImage`)}</div>
114
+ `:l?i`<code-block .code=${l} language="text"></code-block>`:r}
115
+ </div>
116
+ `}}},We=class{toolName;labelKey;constructor(e,t){this.toolName=e,this.labelKey=t}render(e,t,n){let r=R(t,n),a=d(t?.details),o=H(e),s=fe(t?.details),c=de(e,t?.details),l=typeof c?.title==`string`&&c.title?c.title:typeof c?.kind==`string`?c.kind:``,u=typeof c?.kind==`string`&&c.kind!==l?c.kind:``,f=ge(this.toolName,o,t),p=ee().toolDisplayMode===`detailed`,m=p?z(o):``,h=U(this.toolName,o,t,n),g=_e(s),_=p?z(g?ve(s):s):``,v=Re(this.toolName,o,t?.details),y=J.get(v)??p,b=t?.isError?`error`:`default`;return{isCustom:!0,content:i`
117
+ <div class="quickforge-local-tool-shell">
118
+ <details class="group/tool quickforge-local-tool" ?open=${y} @toggle=${e=>{e.isTrusted&&X(v,e.currentTarget.open)}}>
119
+ <summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
120
+ ${K(this.toolName)}
121
+ <span class="quickforge-tool-title min-w-0">
122
+ <span class="quickforge-tool-label">${l?i`OpenCode<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${l}${u?`/${u}`:``}</span>`:k(this.labelKey)}${f?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${f}</span>`:``}</span>
123
+ <svg class="quickforge-tool-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
124
+ ${Ce(this.toolName,g)}
125
+ ${Ae(r,a)}
126
+ </span>
127
+ </summary>
128
+ <div class="mt-3 space-y-3">
129
+ ${m?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`input`)}</div><code-block .code=${m} language="json"></code-block></div>`:``}
130
+ ${h?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`output`)}</div>${this.toolName===`run_command`?i`<console-block .content=${h} .variant=${b}></console-block>`:i`<code-block .code=${h} language="text"></code-block>`}</div>`:``}
131
+ ${g?we(g):``}
132
+ ${_?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`details`)}</div><code-block .code=${_} language="json"></code-block></div>`:``}
133
+ </div>
134
+ </details>
135
+ <span class="quickforge-tool-actions inline-flex shrink-0 items-center gap-1">
136
+ ${q(this.toolName,o)}
137
+ ${je(this.toolName,r,t?.details)}
138
+ </span>
139
+ </div>
140
+ `}}},Ge=class{render(e,t,n){let a=R(t,n),o=d(t?.details),s=de(e,t?.details),c=typeof s?.title==`string`&&s.title?s.title:typeof s?.kind==`string`&&s.kind?s.kind:`tool`,l=typeof s?.kind==`string`&&s.kind&&s.kind!==c?s.kind:``,u=H(e),f=fe(t?.details),p=ee().toolDisplayMode===`detailed`,m=p?z(u):``,h=B(t),g=_e(f),_=p?z(g?ve(f):f):``,v=Re(`opencode_tool`,u,t?.details);return{isCustom:!0,content:i`
141
+ <div class="quickforge-local-tool-shell quickforge-opencode-tool-shell">
142
+ <details class="group/tool quickforge-local-tool quickforge-opencode-tool" ?open=${J.get(v)??p} @toggle=${e=>{e.isTrusted&&X(v,e.currentTarget.open)}}>
143
+ <summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
144
+ ${K(`opencode_tool`)}
145
+ <span class="quickforge-tool-title min-w-0">
146
+ <span class="quickforge-tool-label">OpenCode<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${c}${l?`/${l}`:``}</span></span>
147
+ <svg class="quickforge-tool-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
148
+ ${Ae(a,o)}
149
+ </span>
150
+ </summary>
151
+ <div class="mt-3 space-y-3">
152
+ ${m?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`input`)}</div><code-block .code=${m} language="json"></code-block></div>`:r}
153
+ ${h?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`output`)}</div><code-block .code=${h} language=${Je(h)}></code-block></div>`:r}
154
+ ${g?we(g):r}
155
+ ${_?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`details`)}</div><code-block .code=${_} language="json"></code-block></div>`:r}
156
+ </div>
157
+ </details>
158
+ </div>
159
+ `}}};function Ke(e){if(!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{serverName:t.slice(0,n),toolName:t.slice(n+2)}}function qe(e,t){let n=Ke(e),r=V(t)?t:void 0,i=typeof r?.server==`string`&&r.server?r.server:n?.serverName??``,a=typeof r?.tool==`string`&&r.tool?r.tool:n?.toolName??e;return n||r?.mcp===!0?{serverName:i,toolName:a}:null}function Je(e){if(!e)return`text`;try{return JSON.parse(e),`json`}catch{return`text`}}var Ye=class{toolName;label;constructor(e,t){this.toolName=e,this.label=t}render(e,t,n){let a=R(t,n),o=d(t?.details),s=qe(this.toolName,t?.details)??Ke(this.toolName),c=s?.serverName??``,l=s?.toolName??this.toolName,u=ge(this.toolName,e,t),f=ee().toolDisplayMode===`detailed`,p=f?z(e):``,m=U(this.toolName,e,t,n),h=f?z(t?.details):``,g=Re(this.toolName,e,t?.details),_=J.get(g)??f,v=this.label&&this.label!==l?`${this.label} (${l})`:l;return{isCustom:!1,content:i`
160
+ <details class="group/tool quickforge-mcp-tool" ?open=${_} @toggle=${e=>{e.isTrusted&&X(g,e.currentTarget.open)}}>
161
+ <summary class="quickforge-tool-summary flex cursor-pointer list-none items-center gap-2 text-sm text-muted-foreground select-none">
162
+ ${K(this.toolName)}
163
+ <span class="quickforge-tool-title min-w-0">
164
+ <span class="quickforge-tool-label">MCP${c?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${c}</span>`:r}<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${v}</span>${u?i`<span class="quickforge-tool-summary-detail text-muted-foreground/70"> · ${u}</span>`:r}</span>
165
+ <svg class="quickforge-tool-chevron shrink-0 group-open/tool:rotate-90" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
166
+ ${Ae(a,o)}
167
+ </span>
168
+ </summary>
169
+ <div class="mt-3 space-y-3">
170
+ ${p?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`input`)}</div><code-block .code=${p} language="json"></code-block></div>`:r}
171
+ ${m?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`output`)}</div><code-block .code=${m} language=${Je(m)}></code-block></div>`:r}
172
+ ${h?i`<div><div class="mb-1 text-xs font-medium text-muted-foreground">${k(`details`)}</div><code-block .code=${h} language="json"></code-block></div>`:r}
173
+ </div>
174
+ </details>
175
+ `}}},Xe=new Set;function Ze(e){for(let t of e){if(!V(t)||typeof t.name!=`string`||!Ke(t.name)||Xe.has(t.name))continue;let e=typeof t.label==`string`?t.label:typeof t.description==`string`?t.description.replace(/^\[MCP:[^\]]+\]\s*/,``):void 0;c(t.name,new Ye(t.name,e)),Xe.add(t.name)}}for(let[e,t]of[[`manage_global_memory`,`manageGlobalMemory`],[`read_file`,`readFile`],[`grep_files`,`searchFiles`],[`write_file`,`writeFile`],[`edit_file`,`editFile`],[`run_command`,`runCommand`],[`present_files`,`presentFiles`],[`activate_skill`,`activateSkill`],[`read_skill_resource`,`readSkillResource`]])c(e,new We(e,t));c(`run_subagent`,new He),c(`generate_image`,new Ue),c(`opencode_tool`,new Ge);function Qe(e=[]){return Ze(e),e}function $e({panel:e,onReachTop:t,onAutoScrollEnabled:n}){let r=!0,i,a=0,o,s=-1/0,c=-1/0,l,u=0,d=()=>e.querySelector(`agent-interface .overflow-y-auto`),f=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=80,p=t=>{e.querySelector(`agent-interface`)?.setAutoScroll?.(t)},m=()=>{let e=Math.max(s,c);return window.performance.now()-e<=500},h=()=>{i!==void 0&&(window.cancelAnimationFrame(i),i=void 0),r=!1,p(!1)},g=()=>{s=window.performance.now(),h()},_=()=>{c=window.performance.now()},v=()=>{let e=d();if(!e||!r)return;let t=e.scrollHeight-e.clientHeight;if(Math.abs(e.scrollTop-t)<=1){a=e.scrollTop;return}e.scrollTop=e.scrollHeight,a=e.scrollTop},y=()=>{i===void 0&&(i=window.requestAnimationFrame(()=>{i=void 0,v(),window.requestAnimationFrame(v)}))},b=()=>{r=!0,p(!0),n?.(),y()},x=()=>{let e=d();if(!e)return;let n=e.scrollTop,i=n<a-1;if(u>0){a=n;return}n<=0&&a>0&&t?.();let o=i&&m();if(i&&r&&!o&&!f(e)){a=n,y();return}o?h():f(e)&&(r=!0,p(!0)),a=n},S=e=>{e.deltaY<0&&g()},C=e=>{e.target===e.currentTarget&&_()},w=e=>{(e.key===`ArrowUp`||e.key===`PageUp`||e.key===`Home`)&&g()},T=e=>{o=e.touches[0]?.clientY},E=e=>{let t=e.touches[0]?.clientY;t===void 0||o===void 0||(t>o+1&&g(),o=t)};return{get isEnabled(){return r},beginProgrammaticScroll:()=>(u+=1,h(),()=>{u=Math.max(0,u-1);let e=d();e&&(a=e.scrollTop)}),enable:b,disable:h,scheduleScrollToBottom:y,setup:()=>{let t=d();if(!t||l)return;a=t.scrollTop,t.addEventListener(`scroll`,x,{passive:!0}),t.addEventListener(`wheel`,S,{passive:!0}),t.addEventListener(`pointerdown`,C,{passive:!0}),t.addEventListener(`keydown`,w),t.addEventListener(`touchstart`,T,{passive:!0}),t.addEventListener(`touchmove`,E,{passive:!0}),l=new ResizeObserver(()=>{r&&y()}),l.observe(t);let n=t.querySelector(`.max-w-3xl`);n&&l.observe(n);let i=e.querySelector(`.quickforge-composer-dock`);i&&l.observe(i),b()},cleanup:()=>{let e=d();e?.removeEventListener(`scroll`,x),e?.removeEventListener(`wheel`,S),e?.removeEventListener(`pointerdown`,C),e?.removeEventListener(`keydown`,w),e?.removeEventListener(`touchstart`,T),e?.removeEventListener(`touchmove`,E),l?.disconnect(),l=void 0,i!==void 0&&(window.cancelAnimationFrame(i),i=void 0)}}}function et(e){return e.role===`user`||e.role===`user-with-attachments`}function tt(e){let t=[];for(let n=0;n<e.length;n++)et(e[n])&&t.push(n);return t}function nt(e,t){if(typeof e==`string`)return Math.min(e.length,t);if(!Array.isArray(e))return 0;let n=0;for(let r of e){if(n>=t)break;if(typeof r==`string`){n+=Math.min(r.length,t-n);continue}if(!r||typeof r!=`object`)continue;let e=r;for(let r of[`text`,`content`,`arguments`]){let i=e[r];if(typeof i==`string`&&(n+=Math.min(i.length,t-n),n>=t))break}}return n}function rt(e,t){let n=0;for(let r of e)if(n+=nt(r.content,t-n),n>=t)return!0;return!1}function it(e,t){if(e.role!==`assistant`)return;let n=Array.isArray(e.content)?e.content:[];for(let e of n){if(!e||typeof e!=`object`)continue;let n=e;n.type!==`toolCall`||!n.id||t.add(n.id)}}function at(e,t,n){let r=e.slice(t,n),i=new Set;for(let r=t;r<n;r++)it(e[r],i);if(i.size===0)return r;let a=[];for(let r=0;r<e.length;r++){if(r>=t&&r<n)continue;let o=e[r];o.role===`toolResult`&&typeof o.toolCallId==`string`&&i.has(o.toolCallId)&&a.push(o)}return a.length>0?[...r,...a]:r}function ot(e={}){let t=e.enabled??!0,n=e.enableTurns??6,r=e.enableMessages??48,i=e.enableContentChars??8e4,a=e.windowTurns??3,o=e.pageTurns??3,s=[],c=[],l=a,u=0,d=0,f=[],p=!1,m=!1,h=e=>Math.max(0,e-l),g=()=>{let e=u===0?0:c[u],t=Math.min(c.length,u+l),n=t<c.length?c[t]:s.length;d=e,f=at(s,e,n)};return{setFullMessages(e){s=e,c=tt(e);let o=c.length;return l=Math.min(a,Math.max(1,o-1)),m=t&&o>1&&(o>n||e.length>r||rt(e,i)),m?(u=p?Math.max(0,Math.min(u,h(o))):h(o),g(),f):(u=0,d=0,f=e,p=!1,e)},getWindowStart(){return d},getWindowMessages(){return f},isEnabled(){return m},hasMore(){return m&&u>0},loadMore(){return!m||u<=0?null:(p=!0,u=Math.max(0,u-o),g(),f)},showMessageIndex(e){if(!m||c.length===0)return null;let t=Math.max(0,Math.min(e,s.length-1)),n=0;for(let e=0;e<c.length&&!(c[e]>t);e++)n=e;let r=Math.min(c.length,u+l);return n>=u&&n<r?f:(p=!0,u=Math.min(n,h(c.length)),g(),f)},resetToTail(){p=!1},isAssignedWindow(e){return e===f}}}var st=!1,ct=null;function lt(){return customElements.get(`message-list`)||null}function ut(e){if(ct=e(),st)return;let t=()=>{let e=lt();if(!e)return!1;let t=Object.getOwnPropertyDescriptor(e,`messages`);if(!t||typeof t.set!=`function`)return!1;st=!0;let n=t.set;return Object.defineProperty(e,`messages`,{...t,set(e){let t=ct,r=this.hasAttribute(`data-quickforge-subagent-process`);if(t&&!r){if(t.isAssignedWindow(e)){n.call(this,e);return}n.call(this,t.setFullMessages(e));return}n.call(this,e)}}),!0};t()||customElements.whenDefined(`message-list`).then(()=>{t()})}function dt(e){ct===e&&(ct=null)}function ft({panel:e,getCustomCommands:t,restoreDraftIntoComposer:n}){let r=e=>`/${e.name}${e.argumentHint?` ${e.argumentHint}`:``}`,i=()=>[{name:`init`,description:k(`initCommandDescription`),argumentHint:``},{name:`plan`,description:k(`planCommandDescription`),argumentHint:`[task]`},{name:`review`,description:k(`reviewCommandDescription`),argumentHint:`[scope]`},{name:`summary`,description:k(`summaryCommandDescription`),argumentHint:``},{name:`compact`,description:k(`compactCommandDescription`),argumentHint:``},{name:`clear`,description:k(`clearCommandDescription`),argumentHint:``},{name:`help`,description:k(`helpCommandDescription`),argumentHint:``}],a=()=>{let n=(e.querySelector(`.quickforge-command-suggestions`)?.querySelector(`.quickforge-command-suggestion-item`))?.dataset.quickforgeCommandName;if(n)return[...i(),...t()].find(e=>e.name===n)},o=()=>{let t=e.querySelector(`.quickforge-command-suggestions`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove()},s=t=>{let r=e.querySelector(`message-editor`),i=`/${t.name}${t.argumentHint?` `:``}`;n({text:i,attachments:[]});let a=r?.querySelector(`textarea`);a?.focus(),a&&(a.selectionStart=i.length,a.selectionEnd=i.length),o()};return{update:n=>{let a=e.querySelector(`message-editor`),c=n??a?.value??a?.querySelector(`textarea`)?.value??``,l=a?.querySelector(`textarea`),u=e.querySelector(`.quickforge-command-suggestions`);if(!a||!l||!c.startsWith(`/`)){u?.remove();return}let d=c.slice(1).trim().toLowerCase(),f=t(),p=[...i(),...f].filter(e=>e.name.includes(d)||e.description?.toLowerCase().includes(d));if(p.length===0){u?.remove();return}let m=u??document.createElement(`div`);m.className=`quickforge-command-suggestions`,m.setAttribute(`role`,`listbox`),m.innerHTML=``;let h=document.createElement(`div`);h.className=`quickforge-command-suggestions-header`,h.textContent=k(f.length?`customCommandsHint`:`customCommandsEmptyHint`),m.append(h);for(let e of p){let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-command-suggestion-item`,t.dataset.quickforgeCommandName=e.name,t.setAttribute(`role`,`option`),t.innerHTML=`
176
+ <span class="quickforge-command-suggestion-name"></span>
177
+ <span class="quickforge-command-suggestion-description"></span>
178
+ `,t.querySelector(`.quickforge-command-suggestion-name`).textContent=r(e),t.querySelector(`.quickforge-command-suggestion-description`).textContent=e.description??``,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),s(e)},m.append(t)}u||a.parentElement?.insertBefore(m,a),m.__quickforgeDismissHandler||(m.__quickforgeDismissHandler=e=>{m.contains(e.target)||a.contains(e.target)||o()},document.addEventListener(`pointerdown`,m.__quickforgeDismissHandler,!0))},remove:o,setupTextareaHandler:e=>{let t=e?.querySelector(`textarea`);if(!t)return;let n=t;n.__quickforgeCommandCompleteHandler&&n.removeEventListener(`keydown`,n.__quickforgeCommandCompleteHandler,!0),n.__quickforgeCommandCompleteHandler=t=>{if(t.isComposing||t.key===`Process`)return;if(t.key===`Enter`&&t.shiftKey){t.stopImmediatePropagation();return}if(t.key!==`Tab`||!(e?.value??n.value??``).startsWith(`/`)||t.shiftKey)return;let r=a();r&&(t.preventDefault(),t.stopPropagation(),s(r))},n.addEventListener(`keydown`,n.__quickforgeCommandCompleteHandler,!0)},cleanupTextareaHandler:()=>{let t=e.querySelector(`message-editor textarea`);t?.__quickforgeCommandCompleteHandler&&t.removeEventListener(`keydown`,t.__quickforgeCommandCompleteHandler,!0)}}}var pt={plugin:`
179
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
180
+ <path d="M7.4 3.2h5.2a1.2 1.2 0 0 1 1.2 1.2v2.1h.9a2.1 2.1 0 1 1 0 4.2h-.9v2.1a1.2 1.2 0 0 1-1.2 1.2h-2.1v.7a2.1 2.1 0 1 1-4.2 0V14H4.4a1.2 1.2 0 0 1-1.2-1.2V9.9h.8a1.8 1.8 0 1 0 0-3.6h-.8V4.4a1.2 1.2 0 0 1 1.2-1.2h2.1v-.8a1.8 1.8 0 1 1 3.6 0v.8Z" />
181
+ </svg>`,document:`
182
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round">
183
+ <path d="M5.4 2.8h6.1L15.8 7v10.2H5.4z" />
184
+ <path d="M11.4 2.9V7h4.1" />
185
+ <path d="M7.6 10.2h5" />
186
+ <path d="M7.6 13h4.3" />
187
+ </svg>`,spreadsheet:`
188
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round">
189
+ <rect x="3.4" y="4" width="13.2" height="12.2" rx="1.5" />
190
+ <path d="M3.4 8h13.2" />
191
+ <path d="M7.8 4v12.2" />
192
+ <path d="M12.2 4v12.2" />
193
+ <path d="M3.4 12h13.2" />
194
+ </svg>`,presentation:`
195
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round">
196
+ <path d="M3 4.2h14" />
197
+ <rect x="4.2" y="4.2" width="11.6" height="8.4" rx="1.2" />
198
+ <path d="M10 12.6v3.2" />
199
+ <path d="m7.2 17 2.8-1.2 2.8 1.2" />
200
+ <path d="M7.1 9.5 9 7.7l1.5 1.3 2.4-2.5" />
201
+ </svg>`,skill:`
202
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
203
+ <path d="M4.2 3.2h4.4A2.4 2.4 0 0 1 11 5.6v11a2.4 2.4 0 0 0-2.4-2.4H4.2V3.2Z" />
204
+ <path d="M11 5.6a2.4 2.4 0 0 1 2.4-2.4h2.4v11.1h-2.4A2.4 2.4 0 0 0 11 16.7" />
205
+ </svg>`,tool:`
206
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
207
+ <path d="M12.8 3.5a4.2 4.2 0 0 0 4 5.5l-7.6 7.6a2.2 2.2 0 0 1-3.1-3.1l7.6-7.6a4.2 4.2 0 0 0-5.5-4" />
208
+ </svg>`,command:`
209
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
210
+ <path d="m5 6 4 4-4 4" />
211
+ <path d="M10.5 14h4.5" />
212
+ </svg>`};function mt(e){return e.split(/[-_/\\]+/).filter(Boolean).map(e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`).join(` `)}function ht(e){switch(e.name){case`documents`:return{label:k(`pluginDocumentsName`),description:k(`pluginDocumentsDescription`),mention:`Documents`,iconKind:`document`};case`spreadsheets`:return{label:k(`pluginSpreadsheetsName`),description:k(`pluginSpreadsheetsDescription`),mention:`Spreadsheets`,iconKind:`spreadsheet`};case`presentations`:return{label:k(`pluginPresentationsName`),description:k(`pluginPresentationsDescription`),mention:`Presentations`,iconKind:`presentation`};default:return null}}function gt(e){let t=ht(e);return t?t.label:(e.displayName||mt(e.name.replace(/^openai-/,``))).replace(/^OpenAI\s+/i,``)}function _t(e){let t=ht(e),n=t?.label??gt(e),r=t?.mention??n.replace(/\s+/g,``);return[{type:`plugin`,iconKind:t?.iconKind??`plugin`,pluginName:e.name,name:e.name,label:n,mention:r,insertText:r,description:t?.description??e.description}]}function vt(e,t){let n=e.slice(0,t),r=/(^|\s)@([^\s@]*)$/.exec(n);if(!r)return null;let i=r[1]?.length??0;return{start:n.length-r[0].length+i,end:t,query:r[2]??``}}function yt(e){let t=new Set,n=/(^|\s)@([\p{L}\p{N}_-]+)/gu,r;for(;r=n.exec(e);)t.add((r[2]||``).toLowerCase());return t}function bt({panel:e,restoreDraftIntoComposer:t,onSelectionChange:n,enabled:r=!0}){let i=[],a=null,o=`idle`,s=!1,c=!1,l=new Map,u=()=>n?.([...l.values()]),d=()=>a||(o===`loaded`?Promise.resolve():(o=`loading`,a=A().then(e=>{i=(e.plugins??[]).filter(e=>e.enabled&&e.status===`loaded`)}).catch(()=>{i=[]}).finally(()=>{a=null,o=`loaded`}),a));r&&d();let f=()=>i.flatMap(_t),p=()=>{let t=(e.querySelector(`.quickforge-capability-suggestions`)?.querySelector(`.quickforge-capability-suggestion-item`))?.dataset.quickforgeCapabilityKey;if(t)return f().find(e=>xt(e)===t)},m=()=>{let t=e.querySelector(`.quickforge-capability-suggestions`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove()},h=(n,r)=>{let i=e.querySelector(`message-editor`),a=i?.querySelector(`textarea`),o=i?.value??a?.value??``,s=a?.selectionStart??o.length,c=r??vt(o,s),d=`@${n.insertText}`,f=c?`${o.slice(0,c.start)}${d} ${o.slice(c.end)}`:`${o}${o.endsWith(` `)||o.length===0?``:` `}${d} `,p=c?c.start+d.length+1:f.length;l.set(xt(n),n),u(),t({text:f,attachments:i?.attachments?[...i.attachments]:[]});let h=i?.querySelector(`textarea`);h?.focus(),h&&(h.selectionStart=p,h.selectionEnd=p),m()},g=e=>{let t=()=>{let t=f().find(t=>t.insertText===e);t&&h(t)};if(i.length>0){t();return}c||(c=!0,d().then(()=>{c=!1,t()}))},_=t=>{let n=e.querySelector(`message-editor`),r=n?.querySelector(`textarea`),c=t??n?.value??r?.value??``,l=vt(c,r?.selectionStart??c.length),u=e.querySelector(`.quickforge-capability-suggestions`);if(!n||!r||!l){s&&(o=`idle`),s=!1,u?.remove();return}if(s=!0,i.length===0){let t=d();a!==null&&t.then(()=>{let t=e.querySelector(`message-editor`),n=t?.querySelector(`textarea`),r=t?.value??n?.value??``;vt(r,n?.selectionStart??r.length)&&_(r)})}let p=l.query.toLowerCase(),g=f().filter(e=>[e.label,e.name,e.pluginName,e.description].filter(Boolean).join(` `).toLowerCase().includes(p)).slice(0,8);if(g.length===0){u?.remove();return}let v=u??document.createElement(`div`);v.className=`quickforge-capability-suggestions`,v.setAttribute(`role`,`listbox`),v.innerHTML=``;let y=document.createElement(`div`);y.className=`quickforge-capability-suggestions-header`,y.textContent=k(`pluginMentionHeader`),v.append(y);for(let e of g){let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-capability-suggestion-item`,t.dataset.quickforgeCapabilityKey=xt(e),t.dataset.quickforgePluginName=e.pluginName,t.setAttribute(`role`,`option`),t.innerHTML=`
213
+ <span class="quickforge-capability-suggestion-icon quickforge-capability-suggestion-icon-${e.iconKind}">${pt[e.iconKind]}</span>
214
+ <span class="quickforge-capability-suggestion-main">
215
+ <span class="quickforge-capability-suggestion-line">
216
+ <span class="quickforge-capability-suggestion-name"></span>
217
+ </span>
218
+ <span class="quickforge-capability-suggestion-description"></span>
219
+ </span>
220
+ `,t.querySelector(`.quickforge-capability-suggestion-name`).textContent=e.label,t.querySelector(`.quickforge-capability-suggestion-description`).textContent=e.description??e.pluginName,t.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),h(e,l)},v.append(t)}u||n.parentElement?.insertBefore(v,n),v.__quickforgeDismissHandler||(v.__quickforgeDismissHandler=e=>{v.contains(e.target)||n.contains(e.target)||m()},document.addEventListener(`pointerdown`,v.__quickforgeDismissHandler,!0))};return{update:_,remove:m,setupTextareaHandler:e=>{let t=e?.querySelector(`textarea`);if(!t)return;let n=t;n.__quickforgeCapabilityCompleteHandler&&n.removeEventListener(`keydown`,n.__quickforgeCapabilityCompleteHandler,!0),n.__quickforgeCapabilityCompleteHandler=t=>{if(t.isComposing||t.key===`Process`)return;if(t.key===`Escape`){m();return}if(t.key!==`Tab`&&t.key!==`Enter`)return;let r=e?.value??n.value??``,i=vt(r,n.selectionStart??r.length);if(!i||t.shiftKey)return;let a=p();a&&(t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),h(a,i))},n.addEventListener(`keydown`,n.__quickforgeCapabilityCompleteHandler,!0)},cleanupTextareaHandler:()=>{let t=e.querySelector(`message-editor textarea`);t?.__quickforgeCapabilityCompleteHandler&&t.removeEventListener(`keydown`,t.__quickforgeCapabilityCompleteHandler,!0)},consumeSelectedCapabilities:e=>{let t=yt(e),n=[...l.values()].filter(e=>t.has(e.mention.toLowerCase())),r=f().filter(e=>t.has(e.insertText.toLowerCase())||t.has(e.label.replace(/\s+/g,``).toLowerCase())),i=new Map;for(let e of[...n,...r])i.set(xt(e),e);return l=new Map,u(),[...i.values()].slice(0,4)},insertBuiltinPluginMention:g,availablePluginRows:f}}function xt(e){return`${e.type}:${e.pluginName}:${e.name}`}var St=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`,Ct=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>`,wt=`<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/></svg>`,Tt=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9"/><path d="M12 12v3"/></svg>`,Et=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 2v6h-6"/><path d="M3 12a9 9 0 0 1 15.36-5.64L21 9"/><path d="M3 22v-6h6"/><path d="M21 12a9 9 0 0 1-15.36 5.64L3 15"/></svg>`,Dt=`<svg class="quickforge-plan-mode-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h1"/><path d="M4 12h1"/><path d="M4 18h1"/><path d="M9 6h11"/><path d="M9 12h11"/><path d="M9 18h11"/></svg>`,Ot=`<svg class="quickforge-plan-remove-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,kt=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14"/><path d="M5 12h14"/></svg>`,At=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></svg>`,jt=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7.5 4.5h5a1.5 1.5 0 0 1 1.5 1.5v2h1a2.5 2.5 0 0 1 0 5h-1v2a1.5 1.5 0 0 1-1.5 1.5h-2v1a2.5 2.5 0 0 1-5 0v-1h-2A1.5 1.5 0 0 1 2 15.5v-3h1a2 2 0 1 0 0-4H2v-2A1.5 1.5 0 0 1 3.5 5h2v-1a2.5 2.5 0 0 1 5 0v.5Z"/></svg>`,Mt=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><path d="M5.4 2.8h6.1L15.8 7v10.2H5.4z"/><path d="M11.4 2.9V7h4.1"/><path d="M7.6 10.2h5"/><path d="M7.6 13h4.3"/></svg>`,Nt=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="4" width="13.2" height="12.2" rx="1.5"/><path d="M3.4 8h13.2"/><path d="M7.8 4v12.2"/><path d="M12.2 4v12.2"/><path d="M3.4 12h13.2"/></svg>`,Pt=`<svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.65" stroke-linecap="round" stroke-linejoin="round"><path d="M3 4.2h14"/><rect x="4.2" y="4.2" width="11.6" height="8.4" rx="1.2"/><path d="M10 12.6v3.2"/><path d="m7.2 17 2.8-1.2 2.8 1.2"/><path d="M7.1 9.5 9 7.7l1.5 1.3 2.4-2.5"/></svg>`,Ft=`<svg class="quickforge-agent-access-trigger-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3 19 6v5c0 4.5-2.8 8.4-7 10-4.2-1.6-7-5.5-7-10V6l7-3Z"/><path d="M9 12h6"/></svg>`,It=`<svg class="quickforge-agent-access-option-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>`,Lt=`<svg class="quickforge-agent-access-check" xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>`,Rt=`<svg class="quickforge-agent-access-chevron" xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>`,zt=`<svg class="quickforge-opencode-config-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/><path d="M18 4a2 2 0 0 0-4 0"/><path d="M6 16a2 2 0 0 0-4 0"/><path d="M12 10a2 2 0 0 0-4 0"/></svg>`;function Bt(e){return k(e===`full-access`?`agentAccessFullLabel`:`agentAccessDefaultLabel`)}function Vt(e){let t=document.querySelector(`.quickforge-agent-access-menu`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),document.removeEventListener(`keydown`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`resize`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`scroll`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-agent-access-inline`)?.setAttribute(`aria-expanded`,`false`)}function Ht(e,t,n){let r=e===t,i=document.createElement(`button`);return i.type=`button`,i.className=`quickforge-agent-access-item`,i.setAttribute(`role`,`menuitemradio`),i.setAttribute(`aria-checked`,String(r)),i.dataset.quickforgeAgentAccessMode=e,i.innerHTML=`
221
+ <span class="quickforge-agent-access-check-slot">${r?Lt:``}</span>
222
+ <span class="quickforge-agent-access-option-icon-wrap">${e===`full-access`?It:Ft}</span>
223
+ <span class="quickforge-agent-access-item-label"></span>
224
+ `,i.querySelector(`.quickforge-agent-access-item-label`).textContent=Bt(e),i.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),n(e)},i}function Ut(e){let{panel:t,trigger:n,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}=e;if(document.querySelector(`.quickforge-agent-access-menu`)){Vt(t);return}a(),Vt(t);let o=document.createElement(`div`);o.className=`quickforge-agent-access-menu`,o.setAttribute(`role`,`menu`),o.setAttribute(`aria-label`,k(`agentAccessMenuLabel`));let s=e=>{Vt(t),e!==r&&i(e)};o.append(Ht(`default`,r,s),Ht(`full-access`,r,s));let c=()=>{let e=n.getBoundingClientRect(),t=Math.min(196,window.innerWidth-24);o.style.width=`${t}px`;let r=o.offsetHeight||96,i=Math.max(12,Math.min(e.left,window.innerWidth-t-12)),a=Math.max(12,e.top-r-8);o.style.left=`${i}px`,o.style.top=`${a}px`},l=e=>{if(e.type===`resize`||e.type===`scroll`){c();return}if(e instanceof KeyboardEvent){if(e.key!==`Escape`)return;e.preventDefault()}else{let t=e.target;if(o.contains(t)||n.contains(t))return}Vt(t)};o.__quickforgeDismissHandler=l,o.addEventListener(`pointerdown`,e=>e.stopPropagation()),document.addEventListener(`pointerdown`,l,!0),document.addEventListener(`keydown`,l,!0),window.addEventListener(`resize`,l,!0),window.addEventListener(`scroll`,l,!0),document.body.append(o),c(),n.setAttribute(`aria-expanded`,`true`)}function Wt(e){let{panel:t,leftControls:n,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}=e;n.classList.add(`quickforge-composer-left-controls`),t.querySelector(`.quickforge-yolo-inline`)?.remove();let o=Bt(r),s=k(r===`full-access`?`agentAccessFullTitle`:`agentAccessDefaultTitle`),c=`${r===`full-access`?It:Ft}<span class="quickforge-agent-access-label"></span>${Rt}`,l=`quickforge-agent-access-inline inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground${r===`full-access`?` quickforge-agent-access-inline-full`:``}`,u=n.querySelector(`.quickforge-agent-access-inline`),d=e=>{b(e,c),e.querySelector(`.quickforge-agent-access-label`).textContent=o,e.title=s,e.setAttribute(`aria-label`,s),e.setAttribute(`aria-haspopup`,`menu`),e.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-agent-access-menu`)?`true`:`false`),e.dataset.quickforgeAgentAccessMode=r,e.className=l,e.onpointerdown=n=>{n.preventDefault(),n.stopPropagation(),Ut({panel:t,trigger:e,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a})},e.onclick=e=>{e.preventDefault(),e.stopPropagation()},e.onkeydown=n=>{n.key!==`Enter`&&n.key!==` `&&n.key!==`ArrowDown`||(n.preventDefault(),Ut({panel:t,trigger:e,agentAccessMode:r,onAccessModeChange:i,dismissComposerMenus:a}))}};if(u)d(u);else{let e=document.createElement(`button`);e.type=`button`,d(e),n.append(e)}let f=n.querySelector(`.quickforge-agent-access-inline`),p=n.querySelector(`.quickforge-plan-inline`);f&&p&&f.nextSibling!==p&&n.insertBefore(p,f.nextSibling)}function Gt(e){return typeof e.group==`string`&&Array.isArray(e.options)}function Kt(e){let t=e?.configOptions;return Array.isArray(t)&&t.length>0}function qt(e){return e.description?`${e.name} — ${e.description}`:e.name}function Jt(e){if(!Array.isArray(e))return{groups:[],flat:[]};let t=[],n=[];for(let r of e)r&&Gt(r)?(t.push({group:r.group,options:r.options}),n.push(...r.options)):r&&typeof r.value==`string`&&n.push(r);return{groups:t,flat:n}}function Yt(e){let t=document.querySelector(`.quickforge-opencode-config-menu`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),document.removeEventListener(`keydown`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`resize`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`scroll`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-opencode-config-inline`)?.setAttribute(`aria-expanded`,`false`)}function Xt(e,t,n){let r=e.currentValue===!0,i=document.createElement(`button`);return i.type=`button`,i.className=`quickforge-opencode-config-item quickforge-opencode-config-toggle`,i.setAttribute(`role`,`menuitemcheckbox`),i.setAttribute(`aria-checked`,String(r)),i.disabled=t,i.innerHTML=`
225
+ <span class="quickforge-opencode-config-check-slot">${r?Lt:``}</span>
226
+ <span class="quickforge-opencode-config-item-label"></span>
227
+ `,i.querySelector(`.quickforge-opencode-config-item-label`).textContent=e.name,e.description&&(i.title=e.description),i.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),t||n(!r)},i}function Zt(e,t,n,r){let i=e.value===t,a=document.createElement(`button`);return a.type=`button`,a.className=`quickforge-opencode-config-item quickforge-opencode-config-select-option`,a.setAttribute(`role`,`menuitemradio`),a.setAttribute(`aria-checked`,String(i)),a.disabled=n,a.innerHTML=`
228
+ <span class="quickforge-opencode-config-check-slot">${i?Lt:``}</span>
229
+ <span class="quickforge-opencode-config-item-label"></span>
230
+ `,a.querySelector(`.quickforge-opencode-config-item-label`).textContent=qt(e),a.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),!n&&!i&&r(e.value)},a}function Qt(e){let t=document.createElement(`div`);return t.className=`quickforge-opencode-config-section-title`,t.textContent=e,t}function $t(e){let{panel:t,trigger:n,acpSession:r,disabled:i,onConfigOptionChange:a,dismissComposerMenus:o}=e;if(document.querySelector(`.quickforge-opencode-config-menu`)){Yt(t);return}if(!Kt(r)){Yt(t);return}o(),Yt(t);let s=document.createElement(`div`);s.className=`quickforge-opencode-config-menu`,s.setAttribute(`role`,`menu`),s.setAttribute(`aria-label`,k(`openCodeConfigMenuLabel`));let c=Array.isArray(r?.configOptions)?r.configOptions:[];if(c.length>0){s.append(Qt(k(`openCodeConfigOptionsTitle`)));for(let e of c){if(e.type===`boolean`){s.append(Xt(e,i,t=>a(e.id,t)));continue}if(e.type===`select`){let{groups:t,flat:n}=Jt(e.options),r=typeof e.currentValue==`string`?e.currentValue:``,o=Qt(e.name);if(e.description&&(o.title=e.description),s.append(o),t.length>0)for(let n of t){let t=document.createElement(`div`);t.className=`quickforge-opencode-config-group-label`,t.textContent=n.group,s.append(t);for(let t of n.options)s.append(Zt(t,r,i,t=>a(e.id,t)))}else for(let t of n)s.append(Zt(t,r,i,t=>a(e.id,t)))}}}let l=()=>{let e=n.getBoundingClientRect(),t=Math.min(232,window.innerWidth-24);s.style.width=`${t}px`,s.style.maxHeight=`${Math.max(180,window.innerHeight-32)}px`;let r=s.offsetHeight||160,i=Math.max(12,Math.min(e.left,window.innerWidth-t-12)),a=Math.max(12,e.top-r-8);s.style.left=`${i}px`,s.style.top=`${a}px`},u=e=>{if(e.type===`resize`||e.type===`scroll`){l();return}if(e instanceof KeyboardEvent){if(e.key!==`Escape`)return;e.preventDefault()}else{let t=e.target;if(s.contains(t)||n.contains(t))return}Yt(t)};s.__quickforgeDismissHandler=u,s.addEventListener(`pointerdown`,e=>e.stopPropagation()),document.addEventListener(`pointerdown`,u,!0),document.addEventListener(`keydown`,u,!0),window.addEventListener(`resize`,u,!0),window.addEventListener(`scroll`,u,!0),document.body.append(s),l(),n.setAttribute(`aria-expanded`,`true`)}function en(e){let{panel:t,leftControls:n,getAcpSession:r,isStreaming:i,onConfigOptionChange:a,onModeChange:o,dismissComposerMenus:s}=e;if(n.classList.add(`quickforge-composer-left-controls`),!Kt(r())){n.querySelector(`.quickforge-opencode-config-inline`)?.remove(),Yt(t);return}let c=e=>{$t({panel:t,leftControls:n,getAcpSession:r,isStreaming:i,trigger:e,acpSession:r(),disabled:i(),onConfigOptionChange:a,onModeChange:o,dismissComposerMenus:s})},l=e=>{let t=i(),n=k(t?`openCodeConfigDisabledWhileStreaming`:`openCodeConfigMenuLabel`);b(e,`${zt}<span class="quickforge-opencode-config-label"></span>${Rt}`),e.querySelector(`.quickforge-opencode-config-label`).textContent=k(`openCodeConfigButtonLabel`),e.title=n,e.setAttribute(`aria-label`,n),e.setAttribute(`aria-haspopup`,`menu`),e.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-opencode-config-menu`)?`true`:`false`),e.disabled=t,e.className=`quickforge-opencode-config-inline inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground`,e.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),e.disabled||c(e)},e.onclick=e=>{e.preventDefault(),e.stopPropagation()},e.onkeydown=t=>{t.key!==`Enter`&&t.key!==` `&&t.key!==`ArrowDown`||(t.preventDefault(),e.disabled||c(e))}},u=n.querySelector(`.quickforge-opencode-config-inline`);if(u)l(u);else{let e=document.createElement(`button`);e.type=`button`,l(e),n.append(e)}}function tn(e){let t=e?.modes;return!!(t&&Array.isArray(t.availableModes)&&t.availableModes.length>0)}function nn(e){let t=e?.modes?.currentModeId;return t?e?.modes?.availableModes?.find(e=>e.id===t)?.name??t:``}function Z(e){let t=document.querySelector(`.quickforge-opencode-mode-menu`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),document.removeEventListener(`keydown`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`resize`,t.__quickforgeDismissHandler,!0),window.removeEventListener(`scroll`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-opencode-mode-inline`)?.setAttribute(`aria-expanded`,`false`)}function rn(e,t,n,r){let i=e.id===t,a=document.createElement(`button`);a.type=`button`,a.className=`quickforge-model-menu-item`,a.setAttribute(`role`,`menuitemradio`),a.setAttribute(`aria-checked`,String(i)),a.disabled=n;let o=document.createElement(`span`);o.className=`quickforge-model-menu-item-label`,o.textContent=e.description?`${e.name} — ${e.description}`:e.name;let s=document.createElement(`span`);return s.className=`quickforge-model-menu-item-suffix`,s.textContent=i?`✓`:``,a.append(o,s),a.onpointerdown=t=>{t.preventDefault(),t.stopPropagation(),r(e.id)},a}function an(e){let{panel:t,trigger:n,acpSession:r,disabled:i,onModeChange:a,dismissComposerMenus:o}=e;if(document.querySelector(`.quickforge-opencode-mode-menu`)){Z(t);return}if(!tn(r)){Z(t);return}o(),Z(t);let s=document.createElement(`div`);s.className=`quickforge-opencode-mode-menu quickforge-model-menu`,s.setAttribute(`role`,`menu`),s.setAttribute(`aria-label`,k(`openCodeModeMenuLabel`));let c=r?.modes?.currentModeId??``,l=document.createElement(`div`);l.className=`quickforge-model-menu-header`,l.textContent=k(`openCodeConfigModesTitle`),s.append(l);let u=e=>{Z(t),e!==c&&a(e)};for(let e of r?.modes?.availableModes??[])s.append(rn(e,c,i,u));let d=()=>{let e=n.getBoundingClientRect(),t=Math.min(260,window.innerWidth-24);s.style.width=`${t}px`;let r=s.offsetHeight||160,i=Math.max(12,Math.min(e.right-t,window.innerWidth-t-12)),a=e.top-r-8,o=e.bottom+8,c=a>=12?a:Math.min(o,window.innerHeight-r-12);s.style.left=`${i}px`,s.style.top=`${Math.max(12,c)}px`},f=e=>{if(e.type===`resize`||e.type===`scroll`){d();return}if(e instanceof KeyboardEvent){if(e.key!==`Escape`)return;e.preventDefault()}else{let t=e.target;if(s.contains(t)||n.contains(t))return}Z(t)};s.__quickforgeDismissHandler=f,s.addEventListener(`pointerdown`,e=>e.stopPropagation()),document.addEventListener(`pointerdown`,f,!0),document.addEventListener(`keydown`,f,!0),window.addEventListener(`resize`,f,!0),window.addEventListener(`scroll`,f,!0),document.body.append(s),d(),n.setAttribute(`aria-expanded`,`true`)}function on(e){let{panel:t,rightControls:n,getAcpSession:r,isStreaming:i,onModeChange:a,dismissComposerMenus:o}=e;if(!tn(r())){t.querySelector(`.quickforge-opencode-mode-inline`)?.remove(),Z(t);return}let s=e=>{an({panel:t,rightControls:n,getAcpSession:r,isStreaming:i,onModeChange:a,dismissComposerMenus:o,trigger:e,acpSession:r(),disabled:i()})},c=n.querySelector(`.quickforge-opencode-mode-inline`)??document.createElement(`button`);c.type=`button`;let l=i(),u=k(l?`openCodeModeDisabledWhileStreaming`:`openCodeModeMenuLabel`);b(c,`<span class="quickforge-opencode-mode-label"></span>`),c.querySelector(`.quickforge-opencode-mode-label`).textContent=nn(r()),c.title=u,c.setAttribute(`aria-label`,u),c.setAttribute(`aria-haspopup`,`menu`),c.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-opencode-mode-menu`)?`true`:`false`),c.disabled=l,c.className=`quickforge-opencode-mode-inline quickforge-model-trigger inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground`,c.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),c.disabled||s(c)},c.onclick=e=>{e.preventDefault(),e.stopPropagation()},c.onkeydown=e=>{e.key!==`Enter`&&e.key!==` `&&e.key!==`ArrowDown`||(e.preventDefault(),c.disabled||s(c))};let d=n.querySelector(`button:last-child`);if(!d)n.append(c);else if(d!==c)n.insertBefore(c,d);else{let e=Array.from(n.querySelectorAll(`button`)).filter(e=>e!==c).pop();e?n.insertBefore(c,e.nextSibling):n.prepend(c)}}var sn={plugin:jt,document:Mt,spreadsheet:Nt,presentation:Pt,skill:jt,tool:jt,command:jt};function cn(e){let t=e.querySelector(`.quickforge-plus-popover`);t?.__quickforgeDismissHandler&&(document.removeEventListener(`pointerdown`,t.__quickforgeDismissHandler,!0),t.__quickforgeDismissHandler=void 0),t?.remove(),e.querySelector(`.quickforge-plus-inline`)?.setAttribute(`aria-expanded`,`false`)}function ln(e,t){e.querySelectorAll(`.quickforge-native-attachment-hidden`).forEach(e=>{t.contains(e)||e.classList.remove(`quickforge-native-attachment-hidden`)})}function un(e){return e.querySelector(`.quickforge-native-attachment-hidden`)||Array.from(e.querySelectorAll(`button`)).find(e=>!e.classList.contains(`quickforge-plus-inline`)&&!e.classList.contains(`quickforge-agent-access-inline`)&&!e.classList.contains(`quickforge-yolo-inline`)&&!e.classList.contains(`quickforge-plan-inline`))}function dn(e,t){e.querySelectorAll(`input[type="file"]`).forEach(e=>{e.disabled=!0}),t&&(ln(e,t),un(t)?.classList.add(`quickforge-native-attachment-hidden`))}function fn(e,t){let n=e.querySelector(`input[type="file"]`);if(n){n.click();return}un(t)?.click()}function pn({className:e,icon:t,label:n,description:r,pluginName:i,onSelect:a}){let o=document.createElement(`button`);o.type=`button`,o.className=`quickforge-plus-popover-item${e?` ${e}`:``}`,i&&(o.dataset.quickforgePluginName=i),o.innerHTML=`
231
+ <span class="quickforge-plus-popover-item-icon">${t}</span>
232
+ <span class="quickforge-plus-popover-item-main">
233
+ <span class="quickforge-plus-popover-item-label"></span>
234
+ ${r?`<span class="quickforge-plus-popover-item-description"></span>`:``}
235
+ </span>
236
+ `,o.querySelector(`.quickforge-plus-popover-item-label`).textContent=n;let s=o.querySelector(`.quickforge-plus-popover-item-description`);return s&&r&&(s.textContent=r),o.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),a()},o}function mn(e,t){let{panel:n,editor:r,leftControls:i,insertBuiltinPluginMention:a,removeCommandSuggestions:o,removeCapabilitySuggestions:s}=e;Z(n),o(),s();let c=n.querySelector(`.quickforge-plus-popover`)??document.createElement(`div`);c.className=`quickforge-plus-popover`,c.setAttribute(`role`,`menu`),c.innerHTML=``;let l=document.createElement(`div`);if(l.className=`quickforge-plus-popover-header`,l.textContent=k(t===`plugins`?`composerAddPlugins`:`composerAddMenu`),c.append(l),t===`main`)e.attachmentsEnabled&&c.append(pn({icon:At,label:k(`composerAddAttachment`),onSelect:()=>{cn(n),fn(r,i)}})),e.pluginsEnabled&&e.availablePluginRows().length>0&&c.append(pn({icon:jt,label:k(`composerAddPlugins`),onSelect:()=>mn(e,`plugins`)}));else{let t=pn({className:`quickforge-plus-popover-back`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg>`,label:k(`composerAddBack`),onSelect:()=>mn(e,`main`)});c.append(t);for(let t of e.availablePluginRows())c.append(pn({icon:sn[t.iconKind],label:t.label,description:t.description,pluginName:t.pluginName,onSelect:()=>{a(t.mention),cn(n)}}))}c.isConnected||r.parentElement?.insertBefore(c,r),c.__quickforgeDismissHandler&&document.removeEventListener(`pointerdown`,c.__quickforgeDismissHandler,!0),c.__quickforgeDismissHandler=e=>{let t=e.target;c.contains(t)||n.querySelector(`.quickforge-plus-inline`)?.contains(t)||cn(n)},document.addEventListener(`pointerdown`,c.__quickforgeDismissHandler,!0),n.querySelector(`.quickforge-plus-inline`)?.setAttribute(`aria-expanded`,`true`)}function hn(e){let{panel:t,editor:n,leftControls:r}=e;ln(n,r),un(r)?.classList.add(`quickforge-native-attachment-hidden`);let i=r.querySelector(`.quickforge-plus-inline`),a=n=>{n.type=`button`,b(n,kt),n.title=k(`composerAddMenu`),n.setAttribute(`aria-label`,k(`composerAddMenu`)),n.setAttribute(`aria-haspopup`,`menu`),n.setAttribute(`aria-expanded`,t.querySelector(`.quickforge-plus-popover`)?`true`:`false`),n.className=`quickforge-plus-inline inline-flex h-8 w-8 items-center justify-center rounded-md border border-transparent text-muted-foreground`,n.onpointerdown=n=>{n.preventDefault(),n.stopPropagation(),t.querySelector(`.quickforge-plus-popover`)?cn(t):mn(e,`main`)},n.onclick=e=>{e.preventDefault(),e.stopPropagation()}};if(i){a(i);return}let o=document.createElement(`button`);a(o),r.prepend(o)}function gn(e){switch(e){case`low`:return k(`thinkingLow`);case`medium`:return k(`thinkingMedium`);case`high`:return k(`thinkingHigh`);case`xhigh`:return k(`thinkingXHigh`);default:return k(`thinkingOff`)}}function _n(e,t){let n=e,r=n?.currentModel;t.querySelector(`[data-quickforge-thinking-badge]`)?.remove();let i=Array.from(t.querySelectorAll(`button:not(.quickforge-agent-access-inline):not(.quickforge-yolo-inline):not(.quickforge-plan-inline):not(.quickforge-opencode-mode-inline)`)).find(e=>!!(r?.id&&e.textContent?.includes(r.id)));i&&(i.classList.add(`quickforge-model-trigger`),i.setAttribute(`aria-haspopup`,`menu`),i.setAttribute(`aria-expanded`,document.querySelector(`.quickforge-model-menu`)?`true`:`false`),r?.reasoning?i.dataset.quickforgeThinkingLevel=`· ${gn(n?.thinkingLevel)}`:delete i.dataset.quickforgeThinkingLevel)}function vn(e){let t=e?.querySelector(`textarea`);t?.__quickforgePlanModeHandler&&(t.removeEventListener(`keydown`,t.__quickforgePlanModeHandler,!0),t.__quickforgePlanModeHandler=void 0),e&&delete e.dataset.quickforgePlanMode}function yn(e,t,n){let r=e?.querySelector(`textarea`);if(!r)return;let i=r;i.__quickforgePlanModeHandler&&i.removeEventListener(`keydown`,i.__quickforgePlanModeHandler,!0),i.__quickforgePlanModeHandler=e=>{e.isComposing||e.key===`Process`||e.key!==`Tab`||!e.shiftKey||(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),n())},i.addEventListener(`keydown`,i.__quickforgePlanModeHandler,!0),e&&(e.dataset.quickforgePlanMode=String(t))}function bn(e){let{panel:t,leftControls:n,planMode:r,onTogglePlanMode:i}=e,a=k(`planModeEnabledTitle`),o=`${Dt}${Ot}<span>${k(`planModeLabel`)}</span>`,s=e=>{e.preventDefault(),e.stopPropagation(),i()},c=e=>{e.key!==`Enter`&&e.key!==` `||s(e)},l=t.querySelector(`.quickforge-plan-inline`),u=e=>{b(e,o),e.title=a,e.setAttribute(`aria-label`,a),e.setAttribute(`aria-pressed`,String(r)),e.className=`quickforge-plan-inline inline-flex h-8 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 text-xs font-medium text-muted-foreground`,e.onpointerdown=s,e.onclick=e=>{e.preventDefault(),e.stopPropagation()},e.onkeydown=c};if(!r)l?.remove();else if(l)u(l);else{let e=document.createElement(`button`);e.type=`button`,u(e);let t=n.querySelector(`.quickforge-agent-access-inline`);t?n.insertBefore(e,t.nextSibling):n.append(e)}}function xn(e){let{rightControls:t,isStreaming:n,abort:r,removeCommandSuggestions:i}=e,a=t.querySelector(`button:last-child`);if(!a)return;let o=()=>{a.__quickforgeStopHandler&&=(a.removeEventListener(`pointerdown`,a.__quickforgeStopHandler,!0),a.removeEventListener(`click`,a.__quickforgeStopHandler,!0),void 0)};if(n())a.disabled=!1,a.classList.remove(`quickforge-send-button`),a.classList.add(`quickforge-stop-button`),a.title=`Stop`,a.setAttribute(`aria-label`,`Stop`),delete a.dataset.quickforgeSendIcon,y(a,`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><rect x="6" y="6" width="12" height="12" rx="2"/></svg>`),a.__quickforgeStopHandler||(a.__quickforgeStopHandler=e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),i(),r()},a.addEventListener(`pointerdown`,a.__quickforgeStopHandler,!0),a.addEventListener(`click`,a.__quickforgeStopHandler,!0));else if(o(),a.classList.remove(`quickforge-stop-button`),a.classList.add(`quickforge-send-button`),a.dataset.quickforgeSendIcon!==`arrow-up`){a.dataset.quickforgeSendIcon=`arrow-up`,y(a,`<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5"/><path d="m5 12 7-7 7 7"/></svg>`);let e=a.querySelector(`svg`)?.parentElement;e&&e!==a&&e.style.transform&&(e.style.transform=``)}}function Sn(e){let{editor:t,onInput:n,onFilesChange:r,removeCommandSuggestions:i,updateCommandSuggestions:a,removeCapabilitySuggestions:o,updateCapabilitySuggestions:s,attachmentsEnabled:c=!0,onBeforeSend:l}=e;if(!t)return;t.__quickforgeAttachmentPasteGuard&&t.removeEventListener(`paste`,t.__quickforgeAttachmentPasteGuard,!0),t.__quickforgeAttachmentDropGuard&&t.removeEventListener(`drop`,t.__quickforgeAttachmentDropGuard,!0),c?(t.__quickforgeAttachmentPasteGuard=void 0,t.__quickforgeAttachmentDropGuard=void 0,t.onFilesChange=e=>{r(e?[...e]:[])}):(t.attachments=[],t.onFilesChange=()=>r([]),t.__quickforgeAttachmentPasteGuard=e=>{[...e.clipboardData?.items??[]].some(e=>e.kind===`file`)&&(e.preventDefault(),e.stopPropagation())},t.__quickforgeAttachmentDropGuard=e=>{(e.dataTransfer?.files.length??0)!==0&&(e.preventDefault(),e.stopPropagation())},t.addEventListener(`paste`,t.__quickforgeAttachmentPasteGuard,!0),t.addEventListener(`drop`,t.__quickforgeAttachmentDropGuard,!0)),t.onInput=e=>{n(e),a(e),s(e)};let u=t.onSend;u&&u!==t.__quickforgePlanWrappedOnSend&&(t.__quickforgePlanBaseOnSend=u);let d=t.__quickforgePlanBaseOnSend;if(d){let e=(e,t)=>{let n=String(e??``);E({attachments:c},n,t)&&(l?.(n),i(),o(),d(n,c?t:[]))};t.__quickforgePlanWrappedOnSend=e,t.onSend=e}a(),s()}function Cn(e){let t=e.querySelector(`message-editor`),n=t?.querySelector(`textarea`);return{text:t?.value??n?.value??``,attachments:t?.attachments?[...t.attachments]:[]}}function wn(e,t,n){let r=Cn(e);T(r)?t.set(n,r):t.delete(n)}function Tn(e,t,n,r){if(!T(t))return!1;let i={text:t.text,attachments:t.attachments?[...t.attachments]:[]},a=e.querySelector(`message-editor`),o=a?.querySelector(`textarea`);return!a&&!o?!1:(a&&(a.value=i.text,a.attachments=i.attachments,a.requestUpdate?.(),a.onInput?.(i.text),a.onFilesChange?.(i.attachments)),o&&(o.value=i.text,o.dispatchEvent(new Event(`input`,{bubbles:!0})),o.focus()),n.set(r,i),!0)}function En(e,t,n,r,i={}){let a=!0,o,s=new Set,c=()=>{o!==void 0&&(window.cancelAnimationFrame(o),o=void 0);for(let e of s)window.clearTimeout(e);s.clear()},l=()=>{a&&(a=!1,c())},u=()=>{if(a){if(i.shouldApply&&!i.shouldApply()){l();return}i.onApplyStart?.();try{if(!Tn(e,t,n,r))return;i.onApplied?.(),l()}finally{i.onApplyEnd?.()}}};if(u(),a){o=window.requestAnimationFrame(u);for(let e of[0,50,150,300,600]){let t=window.setTimeout(()=>{s.delete(t),u()},e);s.add(t)}i.updateComplete?.then(u)}return{cancel:l}}function Q(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Dn(e){return e.split(`
237
+ `).map(e=>{let t=Q(e);return e.startsWith(`+`)?`<span style="color:rgb(22 101 52);background:rgba(34,197,94,.14);display:block;">${t}</span>`:e.startsWith(`-`)?`<span style="color:rgb(153 27 27);background:rgba(239,68,68,.12);display:block;">${t}</span>`:e.startsWith(`@@`)?`<span style="color:rgb(37 99 235);background:rgba(37,99,235,.10);display:block;">${t}</span>`:`<span style="display:block;">${t||` `}</span>`}).join(`
238
+ `)}function On(e,t){let n=e.split(`
239
+ `),r=t.split(`
240
+ `),i=[];for(let e of n)i.push(`<span style="color:rgb(153 27 27);background:rgba(239,68,68,.12);display:block;">- ${Q(e)}</span>`);for(let e of r)i.push(`<span style="color:rgb(22 101 52);background:rgba(34,197,94,.14);display:block;">+ ${Q(e)}</span>`);return i.join(`
241
+ `)}function kn(e){return JSON.stringify({tone:e.tone,disabled:e.disabled,disabledReason:e.disabledReason,copy:{status:e.status,title:e.title,risk:e.risk,approve:e.approveLabel,reject:e.rejectLabel},toolDisplayName:e.toolDisplayName,badges:e.badges,criticalParameters:e.criticalParameters,keySummary:e.keySummary,details:e.details,integration:e.integration})}var An=`.quickforge-approval-card`,jn={manage_global_memory:`manageGlobalMemory`,read_file:`readFile`,grep_files:`searchFiles`,write_file:`writeFile`,edit_file:`editFile`,run_command:`runCommand`,present_files:`presentFiles`,activate_skill:`activateSkill`,read_skill_resource:`readSkillResource`,run_subagent:`runSubagent`,generate_image:`generateImage`};function Mn(e){if(typeof e!=`string`||!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{serverName:t.slice(0,n),toolName:t.slice(n+2)}}function Nn(e){if(typeof e!=`string`||!e.startsWith(`plugin__`))return null;let t=e.slice(8),n=t.indexOf(`__`);return n<=0||n>=t.length-2?null:{pluginName:t.slice(0,n),toolName:t.slice(n+2)}}function Pn(e,t=k){let n=jn[e];if(n)return t(n);let r=Mn(e);if(r)return`MCP · ${r.serverName} · ${r.toolName}`;let i=Nn(e);return i?`Plugin · ${i.pluginName} · ${i.toolName}`:e}function Fn(e,t){return typeof t.summary==`string`?t.summary:e===`run_command`&&typeof t.command==`string`?t.command:e===`activate_skill`&&typeof t.name==`string`?t.name:e===`read_skill_resource`&&typeof t.path==`string`||typeof t.path==`string`?t.path:typeof t.query==`string`?t.query:typeof t.name==`string`?t.name:``}function In(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Ln({toolName:e,args:t,source:n,tone:r=`warning`,copy:i,disabled:a=!1,disabledReason:o=``,translate:s=k}){let c=Mn(e),l=Nn(e),u=Pn(e,s),d=[];c?d.push({label:s(`toolApprovalSource`),value:`MCP`},{label:s(`toolApprovalServer`),value:c.serverName},{label:s(`toolApprovalTool`),value:c.toolName}):l&&d.push({label:s(`toolApprovalSource`),value:`Plugin`},{label:s(`toolApprovalPlugin`),value:l.pluginName},{label:s(`toolApprovalTool`),value:l.toolName}),typeof t.path==`string`&&t.path&&d.push({label:s(`toolApprovalPath`),value:t.path}),typeof t.command==`string`&&t.command&&d.push({label:s(`toolApprovalCommand`),value:t.command});let f=n?.type===`subagent`?n.label||n.subagent||`Subagent`:``,p=[...c?[`MCP`]:[],...l?[`Plugin`]:[],...f?[f]:[]],m=typeof t.keepRecentTurns==`number`?t.keepRecentTurns:3,h=r===`info`?s(`autoCompactApprovalRisk`,{keepRecentTurns:m}):s(e===`run_command`?`toolApprovalRiskCommand`:e===`write_file`||e===`edit_file`?`toolApprovalRiskFileChange`:c||l?`toolApprovalRiskExternal`:`toolApprovalRiskGeneric`);return{tone:r,status:i?.status??s(r===`info`?`autoCompactApprovalStatus`:`toolApprovalNeedsConfirmation`),title:i?.title??(r===`info`?s(`autoCompactApprovalTitle`):u),risk:i?.risk??h,approveLabel:i?.approve??s(r===`info`?`autoCompactApprovalAccept`:`toolApprovalAccept`),rejectLabel:i?.reject??s(r===`info`?`autoCompactApprovalReject`:`toolApprovalReject`),toolDisplayName:u,badges:p,criticalParameters:d,keySummary:Fn(e,t),details:In(t),disabled:a,disabledReason:a?o||s(`toolApprovalDisabled`):``,integration:c?`mcp`:l?`plugin`:null}}function Rn(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function zn(e){return e.role===`user`||e.role===`user-with-attachments`}function Bn(e,t,n){if(n<=0||t.length===0)return null;let r=[];for(let e=0;e<t.length;e++)zn(t[e])&&r.push(e);if(r.length===0)return null;let i=Math.min(n,r.length),a=r[r.length-i],o=e.querySelector(`message-list`);if(!o)return null;let s=Array.from(o.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===o),c=0;for(let e=0;e<=a;e++)if(Rn(t[e])){if(e===a)return s[c]??null;c+=1}return null}function Vn(e){return e===`info`?`<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5"/><path d="M12 8h.01"/></svg>`:`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>`}function Hn(e,t,n){let r=n.criticalParameters.map(({label:n,value:r})=>e===`run_command`&&r===t.command?``:`<div class="quickforge-approval-impact-row"><span>${Q(n)}</span><strong>${Q(r)}</strong></div>`).join(``),i=``;if(e===`run_command`&&typeof t.command==`string`)i=`<pre class="quickforge-approval-code"><span class="quickforge-approval-prompt">$</span> ${Q(t.command)}</pre>`;else if(e===`edit_file`)i=`<pre class="quickforge-approval-code">${On(String(t.oldText??``),String(t.newText??``))}</pre>`;else if(e===`write_file`&&typeof t.content==`string`){let e=t.content.length>800;i=`<pre class="quickforge-approval-code">${Dn(t.content.slice(0,800))}${e?`\n${Q(k(`toolApprovalTruncated`))}`:``}</pre>`}else n.keySummary&&!n.criticalParameters.some(({value:e})=>e===n.keySummary)&&(i=`<pre class="quickforge-approval-code">${Q(n.keySummary)}</pre>`);return r||i?`<div class="quickforge-approval-impact">${r}${i}</div>`:``}function Un(e,t,n,r,i){let{panel:a,onApprove:o,onReject:s}=e,c=Ln({toolName:t,args:r,source:i,tone:e.tone,copy:e.copy,disabled:e.disabled,disabledReason:e.disabledReason}),l=kn(c);if(a.querySelector(`.quickforge-approval-card[data-tool-call-id="${CSS.escape(n)}"]`)?.dataset.displaySignature===l)return;Wn(a);let u=document.createElement(`section`);u.className=`quickforge-approval-card quickforge-approval-card--${c.tone}`,u.dataset.toolCallId=n,u.dataset.displaySignature=l;let d=document.createElement(`div`);d.className=`quickforge-approval-body`,d.innerHTML=`
242
+ <div class="quickforge-approval-status-row">
243
+ <div class="quickforge-approval-status">${Vn(c.tone)}<span>${Q(c.status)}</span></div>
244
+ ${c.badges.length?`<div class="quickforge-approval-badges">${c.badges.map(e=>`<span class="quickforge-approval-badge">${Q(e)}</span>`).join(``)}</div>`:``}
245
+ </div>
246
+ <h3 class="quickforge-approval-title">${Q(c.title)}</h3>
247
+ <p class="quickforge-approval-risk">${Q(c.risk)}</p>
248
+ ${Hn(t,r,c)}
249
+ `,u.append(d);let f=document.createElement(`div`);f.className=`quickforge-approval-details`;let p=document.createElement(`button`);p.type=`button`,p.className=`quickforge-approval-details-toggle`,p.setAttribute(`aria-expanded`,`false`),p.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>`;let m=document.createElement(`span`);m.textContent=k(`toolApprovalViewDetails`),p.append(m);let h=document.createElement(`div`);h.className=`quickforge-approval-details-content`,h.innerHTML=`<pre class="quickforge-approval-code">${Q(c.details)}</pre>`,p.addEventListener(`click`,e=>{e.stopPropagation();let t=f.classList.toggle(`quickforge-approval-details--open`);p.setAttribute(`aria-expanded`,String(t)),m.textContent=k(t?`toolApprovalHideDetails`:`toolApprovalViewDetails`)}),f.append(p,h),d.append(f);let g=document.createElement(`div`);g.className=`quickforge-approval-message`,c.disabledReason?(g.textContent=c.disabledReason,g.classList.add(`quickforge-approval-message--disabled`)):g.hidden=!0,d.append(g);let _=document.createElement(`div`);_.className=`quickforge-approval-actions`;let v=document.createElement(`button`),y=document.createElement(`button`);v.type=`button`,v.className=`quickforge-approval-button quickforge-approval-button--primary`,v.textContent=c.approveLabel,y.type=`button`,y.className=`quickforge-approval-button quickforge-approval-button--reject`,y.textContent=c.rejectLabel;let b=(e,t)=>{v.disabled=e||c.disabled,y.disabled=e||c.disabled,v.classList.toggle(`quickforge-approval-button--loading`,e&&t===v),y.classList.toggle(`quickforge-approval-button--loading`,e&&t===y),e&&t&&(t.textContent=k(`toolApprovalSubmitting`))},x=async(e,t,n)=>{g.hidden=!0,g.textContent=``,g.classList.remove(`quickforge-approval-message--disabled`),b(!0,t);try{await e()}catch(e){g.textContent=e instanceof Error&&e.message?e.message:k(`toolApprovalFailed`),g.hidden=!1,t.textContent=k(`toolApprovalRetry`);let n=t===v?y:v;n.textContent=t===v?c.rejectLabel:c.approveLabel,b(!1),t.textContent=k(`toolApprovalRetry`);return}t.textContent=n};v.addEventListener(`click`,e=>{e.stopPropagation(),e.preventDefault(),x(o,v,c.approveLabel)}),y.addEventListener(`click`,e=>{e.stopPropagation(),e.preventDefault(),x(s,y,c.rejectLabel)}),b(!1),_.append(y,v),d.append(_);let S=e.keepRecentTurns?Bn(a,e.getMessages?.()??[],e.keepRecentTurns):null,C=a.querySelector(`message-list`);S?S.before(u):C?C.append(u):a.querySelector(`agent-interface`)?.append(u),S||u.scrollIntoView({behavior:`smooth`,block:`end`})}function Wn(e){e.querySelectorAll(An).forEach(e=>e.remove())}function Gn(e,t,n){let r=k(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),y(e,Ct),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{y(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Kn(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function qn(e){return e.role===`user`||e.role===`user-with-attachments`}function Jn(e,t){for(let n=Math.min(t,e.length-1);n>=0;n--)if(qn(e[n]))return n;return 0}function Yn(e){let t=e.querySelector(`message-list`);return t?Array.from(t.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===t):[]}function Xn(e,t,n,r){let i=Yn(e),a=0;for(let e=0;e<t.length;e++)if(Kn(t[e])){if(e===n){let e=i[a];if(e){r.nextElementSibling!==e&&e.before(r);return}break}a+=1}let o=e.querySelector(`message-list`);o&&o.firstElementChild!==r&&o.prepend(r)}function Zn(e){let t=e,n=t?.role===`assistant`?p(t):_(t);return(n.match(/<compact_summary>\s*([\s\S]*?)\s*<\/compact_summary>/i)?.[1]??n).trim()}function Qn(e,t,n=!1){let r=e.querySelector(`.quickforge-context-compaction-details`),i=e.querySelector(`.quickforge-context-compaction-summary`),a=e.querySelector(`.quickforge-context-compaction-toggle-label`),o=e.querySelector(`[data-quickforge-action="copy-compact-summary"]`);r&&(r.open=n);let s=()=>{a&&r&&(a.textContent=r.open?k(`contextCompactedHideSummary`):k(`contextCompactedViewSummary`))};i&&!i.dataset.quickforgeCompactionBound&&(i.dataset.quickforgeCompactionBound=`true`,i.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r&&(r.open=!r.open,s())})),r&&!r.dataset.quickforgeCompactionBound&&(r.dataset.quickforgeCompactionBound=`true`,r.addEventListener(`toggle`,s)),s(),o&&(o.onclick=async e=>{e.preventDefault(),e.stopPropagation(),await f(t),Gn(o,k(`contextCompactedCopySummary`),St)})}function $n(e){let{panel:t,getMessages:n,getContextCompaction:r,messageIndexOffset:i=0}=e,a=r(),o=n(),s=t.querySelector(`.quickforge-context-compaction-notice`);if(!a||o.length===0){s?.remove();return}let c=Math.max(0,Number(a.compactedUpToIndex)||0),l=i+o.length;if(c<=0||c>=l){s?.remove();return}let u=Jn(o,Math.max(0,c-i)),d=a.summaryMessage?Zn(a.summaryMessage):``,f=s?.querySelector(`.quickforge-context-compaction-details`)?.open??!1,p=s??document.createElement(`div`),m=p.dataset.summaryText??``,h=p.dataset.hasSummary===`true`,g=!s||m!==d||h!==!!d;p.className=`quickforge-context-compaction-notice`,p.dataset.tailStart=String(u),p.dataset.summaryText=d,p.dataset.hasSummary=String(!!d),p.title=k(`contextCompactedTooltip`),p.setAttribute(`aria-label`,k(`contextCompactedTooltip`)),g&&(p.innerHTML=d?`
250
+ <details class="quickforge-context-compaction-details">
251
+ <summary class="quickforge-context-compaction-summary">
252
+ <div class="quickforge-context-compaction-line"></div>
253
+ <div class="quickforge-context-compaction-pill">
254
+ <span class="quickforge-context-compaction-dot" aria-hidden="true"></span>
255
+ <span><strong>${Q(k(`contextCompactedLabel`))}</strong> · ${Q(k(`contextCompactedTimelineLabel`))} · <span class="quickforge-context-compaction-toggle-label"></span></span>
256
+ </div>
257
+ <div class="quickforge-context-compaction-line"></div>
258
+ </summary>
259
+ <div class="quickforge-context-compaction-card">
260
+ <div class="quickforge-context-compaction-card-header">
261
+ <span>${Q(k(`contextCompactedSummaryTitle`))}</span>
262
+ <button type="button" class="quickforge-context-compaction-copy" data-quickforge-action="copy-compact-summary">${St}<span>${Q(k(`contextCompactedCopySummary`))}</span></button>
263
+ </div>
264
+ <pre class="quickforge-context-compaction-text">${Q(d)}</pre>
265
+ </div>
266
+ </details>
267
+ `:`
268
+ <div class="quickforge-context-compaction-summary" role="separator">
269
+ <div class="quickforge-context-compaction-line"></div>
270
+ <div class="quickforge-context-compaction-pill">
271
+ <span class="quickforge-context-compaction-dot" aria-hidden="true"></span>
272
+ <span><strong>${Q(k(`contextCompactedLabel`))}</strong> · ${Q(k(`contextCompactedTimelineLabel`))}</span>
273
+ </div>
274
+ <div class="quickforge-context-compaction-line"></div>
275
+ </div>
276
+ `),d&&Qn(p,d,f),Xn(t,o,u,p)}function er(e){return String(e).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function tr(e){return Number.isFinite(e)?e>=1e6?`${(e/1e6).toFixed(e>=1e7?0:1)}M`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(Math.round(e)):``}function nr(e){let t=[k(`openCodeUsageTokensTitle`,{used:tr(e.used)||`0`,size:tr(e.size)||`0`})];return e.cost&&Number.isFinite(e.cost.amount)&&t.push(k(`openCodeUsageCostTitle`,{amount:e.cost.amount,currency:e.cost.currency})),t.join(`
277
+ `)}function rr(e){let t=`${tr(e.used)} / ${tr(e.size)} tokens`;return e.cost&&Number.isFinite(e.cost.amount)?`${t} · ${e.cost.amount} ${e.cost.currency}`:t}function ir({panel:e,getAcpSession:t}){return{update:()=>{let n=t()?.usage??null,r=e.querySelector(`.quickforge-opencode-usage-inline`),i=e.querySelector(`message-editor`)?.parentElement?.querySelector(`.ml-auto.items-center`);if(!n||!i){r?.remove();return}let a=nr(n),o=rr(n);if(r){if(r.dataset.quickforgeOpenCodeUsage===o)return;r.dataset.quickforgeOpenCodeUsage=o,r.innerHTML=`<span class="quickforge-opencode-usage-text">${er(o)}</span>`,r.title=a,r.setAttribute(`aria-label`,a);return}let s=document.createElement(`span`);s.className=`quickforge-opencode-usage-inline`,s.dataset.quickforgeOpenCodeUsage=o,s.title=a,s.setAttribute(`aria-label`,a),s.innerHTML=`<span class="quickforge-opencode-usage-text">${er(o)}</span>`,i.prepend(s)},cleanup:()=>{}}}var ar=`.quickforge-process-group`,or=`.quickforge-process-body`,sr=`.quickforge-process-tools`,cr=`.quickforge-process-tools-body`,lr=`.quickforge-process-stage`,ur=`.quickforge-process-stage-body`,dr=`thinking-block, tool-message`,fr=`thinking-block, tool-message, markdown-block`,pr=`data-quickforge-process-final-summary`,mr=`data-quickforge-process-folded`,hr=500,gr=new Set([`edit_file`,`write_file`]),_r=new WeakMap,vr=new WeakMap,yr=new WeakMap,br=1;function xr(e){let t=_r.get(e);return t||(t=new Map,_r.set(e,t)),t}function Sr(e,t,n){let r=xr(e);if(r.set(t,n),r.size<=hr)return;let i=r.keys().next().value;i&&r.delete(i)}function Cr(e){return e.findIndex(e=>e.connected)}function wr(e){let t=vr.get(e);return t===void 0&&(t=br++,vr.set(e,t)),t}function Tr(e,t,n){let r=Ar(t[0]?.message?.timestamp);return`scope:${wr(e)}:turn:${n}:started:${r??`unknown`}`}function Er(e,t,n,r){return e===void 0?t?n:r:e}function Dr(e,t,n,r=!1){let i=t.dataset.quickforgeProcessKey;t.dataset.quickforgeProcessKey=n;let a=xr(e).get(n),o=Er(a,i===n,t.dataset.expanded===`true`,r);t.dataset.expanded=String(o),a===void 0&&r&&Sr(e,n,o)}function Or(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function kr(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function Ar(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=e.trim();if(!t)return;let n=Number(t);if(Number.isFinite(n))return n;let r=Date.parse(t);return Number.isNaN(r)?void 0:r}}function jr(e){if(!Or(e))return;let t=e.details;if(!Or(t))return;let n=t.quickforgeTiming;if(Or(n))return{startedAt:kr(n.startedAt),finishedAt:kr(n.finishedAt),durationMs:kr(n.durationMs)}}function Mr(e){let t=jr(e.result);if(t?.finishedAt!==void 0)return t.finishedAt;if(t?.startedAt!==void 0&&t.durationMs!==void 0)return t.startedAt+t.durationMs}function Nr(e){return jr(e.result)?.startedAt}function Pr(e){if(Or(e.details))return Ar(e.details.quickforgeProcessFinishedAt)}function Fr(e){let t=e.map(Pr).filter(e=>e!==void 0);return t.length>0?Math.max(...t):void 0}function Ir(e){if(e===void 0||e<1e3)return``;let t=Math.max(1,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?k(`processDurationMinutesSeconds`,{minutes:n,seconds:r}):k(`processDurationSeconds`,{seconds:r})}function Lr(e){return e.tool?.name||e.toolCall?.name||``}function Rr(e){return e!==`run_subagent`&&e!==`generate_image`}function zr(e){return e.tagName.toLowerCase()===`tool-message`&&Rr(Lr(e))}function Br(e){return e.aborted?!0:Or(e.result)&&e.result.isError===!0}function Vr(e){if(!gr.has(Lr(e)))return;let t=e.toolCall?.arguments?.path;if(typeof t==`string`&&t.trim())return t.trim();let n=Or(e.result)?e.result.details:void 0,r=Or(n)?n.path:void 0;return typeof r==`string`&&r.trim()?r.trim():void 0}function Hr(e){let t=Array.from(e),n=t.map(Vr),r=new Set(n.filter(e=>!!e)),i=t.length>0&&t.every(e=>gr.has(Lr(e))),a=n.every(e=>e!==void 0);return{count:t.length,errorCount:t.filter(Br).length,commandsOnly:t.length>0&&t.every(e=>Lr(e)===`run_command`),...i&&a?{editedFileCount:r.size}:{}}}function Ur(e){let t=Array.from(e),n=t.map(Vr),r=new Set(n.filter(e=>!!e));return{toolCallCount:t.length,commandCount:t.filter(e=>Lr(e)===`run_command`).length,editedFileCount:r.size}}function Wr(e,t){let n=[];e.toolCallCount>0&&n.push(k(`processGroupToolsCalled`,{count:e.toolCallCount})),e.commandCount>0&&n.push(k(`processGroupCommandsRan`,{count:e.commandCount})),e.editedFileCount>0&&n.push(k(`processGroupFilesEdited`,{count:e.editedFileCount}));let r=k(t?`processExecuting`:`processExecuted`);return n.length>0?`${r} ${n.join(` · `)}`:r}function Gr(e){let t=k(e.commandsOnly?`processCommandsRan`:e.editedFileCount===void 0?`processToolsCalled`:`processFilesEdited`,{count:e.editedFileCount??e.count});return e.errorCount>0?`${t} · ${k(`processToolsFailedCount`,{count:e.errorCount})}`:t}function Kr(e,t){return[e,t].filter(Boolean).join(` · `)}function qr(e,t,n){let r=Oi(t).map(({node:e})=>e).filter(e=>e.tagName.toLowerCase()===`tool-message`),i=[...e.map(e=>Ar(e.message?.timestamp)),...r.map(Nr)].filter(e=>e!==void 0),a=[Fr(e.map(e=>e.message??{})),...r.map(Mr)].filter(e=>e!==void 0),o=i.length>0?Math.min(...i):void 0,s=a.length>0?Math.max(...a):void 0;if(n)s=Date.now();else{let e=Ar(t.dataset.quickforgeFinishedAt);e!==void 0&&e>0?s=e:(s??=Date.now(),t.dataset.quickforgeFinishedAt=String(s))}let c=o!==void 0&&s!==void 0?Ir(Math.max(0,s-o)):``,l=[...e].reverse().find(e=>e.message?.stopReason)?.message?.stopReason;return Kr(k(l===`error`?`processFailed`:l===`aborted`?`processAborted`:n?`processExecuting`:`processExecuted`),c)}function Jr(e){return e.closest(`message-list`)}function Yr(e,t){return e.closest(`message-list`)===Jr(t)&&hi(e)}function Xr(e){return Array.from(e.querySelectorAll(ar)).filter(t=>t.closest(`assistant-message`)===e)}function Zr(e){let t=e.querySelector(`${fr}, ${ar}`);return t?.closest(`.px-4.flex.flex-col`)??t?.parentElement??null}function Qr(){let e=document.createElement(`div`);return e.className=`quickforge-process-step`,e}function $r(){return`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 18V5"/><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"/><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"/><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"/><path d="M18 18a4 4 0 0 0 2-7.464"/><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"/><path d="M6 18a4 4 0 0 1-2-7.464"/><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"/></svg>`}function ei(){return`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="14" x="3" y="5" rx="2"/><path d="m7 9 3 3-3 3"/><path d="M13 15h4"/></svg>`}function ti(e){let t=e.map((e,t)=>({child:e,index:t})).filter(({child:e})=>!e.quickforgeIcon),n=t.find(({child:e})=>e.markedChevron)??t.find(({child:e})=>e.hasSvg),r=t.find(({child:e,index:t})=>e.markedLabel&&t!==n?.index)??t.find(({index:e})=>e!==n?.index);return{chevronIndex:n?.index,labelIndex:r?.index,chevronExpanded:n?.child.rotated===!0}}function ni(e){e.querySelectorAll(`thinking-block`).forEach(t=>{if(t.closest(ar)!==e)return;let n=t.querySelector(`:scope > .thinking-block > .thinking-header`);if(!n)return;let r=Array.from(n.children).filter(e=>e instanceof HTMLElement),{chevronIndex:i,labelIndex:a,chevronExpanded:o}=ti(r.map(e=>({quickforgeIcon:e.dataset.quickforgeThinkingRole===`icon`||e.classList.contains(`quickforge-process-thinking-icon`),markedChevron:e.dataset.quickforgeThinkingRole===`chevron`,markedLabel:e.dataset.quickforgeThinkingRole===`label`,hasSvg:!!e.querySelector(`svg`),rotated:e.classList.contains(`rotate-90`)||e.classList.contains(`quickforge-process-thinking-chevron-expanded`)}))),s=i===void 0?void 0:r[i],c=a===void 0?void 0:r[a];if(!s||!c)return;s.dataset.quickforgeThinkingRole=`chevron`,c.dataset.quickforgeThinkingRole=`label`,s.className=`quickforge-process-thinking-chevron`,s.classList.toggle(`quickforge-process-thinking-chevron-expanded`,o),c.className=`quickforge-process-thinking-label`,c.textContent=k(`processThinking`);let l=r.find(e=>e.dataset.quickforgeThinkingRole===`icon`||e.classList.contains(`quickforge-process-thinking-icon`));l||(l=document.createElement(`span`),l.setAttribute(`aria-hidden`,`true`),l.innerHTML=$r()),l.dataset.quickforgeThinkingRole=`icon`,l.classList.add(`quickforge-process-thinking-icon`),n.prepend(l),n.append(c,s),n.className=`thinking-header quickforge-process-thinking-header`})}function ri(){let e=document.createElement(`div`);e.className=`quickforge-process-tools`,e.dataset.expanded=`false`;let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-process-tools-summary`,t.innerHTML=`
278
+ <span class="quickforge-process-tools-icon" aria-hidden="true">
279
+ ${ei()}
280
+ </span>
281
+ <span class="quickforge-process-tools-label"></span>
282
+ <span class="quickforge-process-tools-chevron" aria-hidden="true">
283
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>
284
+ </span>
285
+ `;let n=document.createElement(`div`);return n.className=`quickforge-process-tools-body`,e.append(t,n),e}function ii(){let e=document.createElement(`div`);e.className=`quickforge-process-stage`,e.dataset.expanded=`false`;let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-process-stage-summary`,t.innerHTML=`
286
+ <span class="quickforge-process-stage-label"></span>
287
+ <span class="quickforge-process-stage-chevron" aria-hidden="true">
288
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>
289
+ </span>
290
+ `;let n=document.createElement(`div`);return n.className=`quickforge-process-stage-body`,e.append(t,n),e}function ai(){let e=document.createElement(`div`);e.className=`quickforge-process-group`,e.dataset.expanded=`false`;let t=document.createElement(`button`);t.type=`button`,t.className=`quickforge-process-summary`,t.innerHTML=`
291
+ <span class="quickforge-process-label"></span>
292
+ <span class="quickforge-process-chevron" aria-hidden="true">
293
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>
294
+ </span>
295
+ `;let n=document.createElement(`div`);return n.className=`quickforge-process-body`,e.append(t,n),e}function oi(){return!1}function si(e,t){return`${e}:stage:${t}`}function ci(e,t,n,r){let i=Array.from(n.querySelectorAll(lr)).filter(e=>e.closest(ar)===n);i.forEach((n,a)=>{let o=n.querySelector(`:scope > ${ur}`),s=n.querySelector(`:scope > .quickforge-process-stage-summary`),c=n.querySelector(`:scope > .quickforge-process-stage-summary > .quickforge-process-stage-label`);if(!o||!s||!c)return;let l=si(t,a),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`,d=n.dataset.quickforgeProcessKey;n.dataset.quickforgeProcessKey=l;let f=Er(xr(e).get(l),d===l,n.dataset.expanded===`true`,oi());n.dataset.expanded=String(f);let p=r&&a===i.length-1;c.textContent=Wr(Ur(o.querySelectorAll(`tool-message`)),p),o.id=u,s.setAttribute(`aria-controls`,u),s.setAttribute(`aria-expanded`,String(f)),s.setAttribute(`aria-label`,`${c.textContent} · ${k(f?`collapseProcess`:`expandProcess`)}`),s.onclick=t=>{t.preventDefault(),t.stopPropagation();let r=n.dataset.expanded!==`true`;n.dataset.expanded=String(r),Sr(e,l,r),s.setAttribute(`aria-expanded`,String(r)),s.setAttribute(`aria-label`,`${c.textContent} · ${k(r?`collapseProcess`:`expandProcess`)}`)}})}function li(e,t,n){return t?`${e}:tools:${t}`:`${e}:tools:${n}`}function ui(e,t,n){return li(e,Array.from(t.querySelectorAll(`tool-message`))[0]?.toolCall?.id,n)}function di(e,t,n){n.querySelectorAll(sr).forEach((r,i)=>{if(r.closest(ar)!==n)return;let a=r.querySelector(`:scope > ${cr}`),o=r.querySelector(`.quickforge-process-tools-summary`),s=r.querySelector(`.quickforge-process-tools-label`);if(!a||!o||!s)return;let c=Hr(a.querySelectorAll(`:scope > tool-message`));if(r.hidden=c.count===0,c.count===0)return;let l=ui(t,r,i),u=`quickforge-${l.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u);let d=ee().toolDisplayMode===`detailed`,f=d?`detailed`:`compact`,p=r.dataset.quickforgeProcessKey,m=r.dataset.quickforgeToolDisplayMode;r.dataset.quickforgeProcessKey=l,r.dataset.quickforgeToolDisplayMode=f;let h=Er(xr(e).get(l),p===l&&m===f,r.dataset.expanded===`true`,d);r.dataset.expanded=String(h),s.textContent=Gr(c),o.setAttribute(`aria-expanded`,String(h)),o.setAttribute(`aria-label`,k(h?`collapseProcessTools`:`expandProcessTools`)),o.onclick=t=>{t.preventDefault(),t.stopPropagation();let n=r.dataset.expanded===`false`;r.dataset.expanded=String(n),Sr(e,l,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,k(n?`collapseProcessTools`:`expandProcessTools`))}})}function fi(e,t,n={}){return t===`pointerdown`?e&&(n.button??0)===0&&n.isPrimary!==!1:!e||(n.detail??0)===0}function pi(e,t,n,r,i){Dr(e,r,t,i),r.dataset.streaming=String(i);let a=r.querySelector(`:scope > ${or}`),o=r.querySelector(`.quickforge-process-summary`),s=r.querySelector(`.quickforge-process-label`);if(!a||!o||!s)return;let c=qr(n,r,i);s.textContent!==c&&(s.textContent=c);let l=r.dataset.expanded===`true`,u=`quickforge-${t.replace(/[^a-z0-9_-]+/gi,`-`)}`;a.id=u,o.setAttribute(`aria-controls`,u),o.setAttribute(`aria-expanded`,String(l)),o.setAttribute(`aria-label`,`${c} · ${k(l?`collapseProcess`:`expandProcess`)}`);let d=()=>{let n=r.dataset.expanded!==`true`;r.dataset.expanded=String(n),Sr(e,t,n),o.setAttribute(`aria-expanded`,String(n)),o.setAttribute(`aria-label`,`${c} · ${k(n?`collapseProcess`:`expandProcess`)}`)};o.onpointerdown=e=>{fi(i,`pointerdown`,e)&&(e.stopPropagation(),d())},o.onclick=e=>{e.preventDefault(),e.stopPropagation(),fi(i,`click`,e)&&d()},ci(e,t,r,i),di(e,t,r),ni(r)}function mi(e,t,n){if(n){e.hasAttribute(t)||e.setAttribute(t,`true`);return}e.hasAttribute(t)&&e.removeAttribute(t)}function hi(e){let t=e.closest(`message-list`),n=e.parentElement?.closest(fr);return!n||n.closest(`message-list`)!==t}function gi(e){let t=Jr(e);return Array.from(e.querySelectorAll(`markdown-block`)).filter(e=>{if(e.closest(`message-list`)!==t)return!1;let n=e.parentElement?.closest(dr);return!n||n.closest(`message-list`)!==t})}function _i(e){let t=e.filter(e=>(e.textContent??``).trim().length>0);return t[t.length-1]??e[e.length-1]??null}function vi(e,t){return Array.from(e.querySelectorAll(fr)).filter(n=>n!==t&&Yr(n,e)).some(e=>!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))}function yi(e,t){let n=gi(e);if(t){let t=_i(n);return t&&!vi(e,t)?t:null}return _i(n.filter(e=>e.hasAttribute(pr)))||(_i(n.filter(e=>!e.closest(or)))??_i(n))}function bi(e,t){gi(e).forEach(e=>{mi(e,pr,e===t),e===t&&mi(e,mr,!1)})}function xi(e){return e.length>1||e.some(e=>Array.from(e.querySelectorAll(dr)).some(t=>t.closest(`message-list`)===Jr(e)))}function Si(e){let t=new Map;return e.forEach(e=>{Xr(e).forEach(e=>{yr.get(e)?.forEach(e=>t.set(e.node,e))})}),e.flatMap(e=>Array.from(e.querySelectorAll(fr)).filter(t=>Yr(t,e)).map(n=>t.get(n)??{node:n,sourceAssistant:e,sourceParent:n.parentElement,sourceNextSibling:n.nextSibling}))}function Ci(e,t,n,r){return e.filter(e=>!t(e)&&(!n(e)||r))}function wi(e,t,n){return Ci(Si(e),e=>e.node===t,e=>e.node.tagName.toLowerCase()===`markdown-block`,n)}function Ti(e,t){let n=[],r=[],i=!1,a=()=>{r.length!==0&&(n.push({kind:i?`stage`:`detail`,items:r}),r=[])};for(let o of e)t(o)?(a(),n.push({kind:`detail`,items:[o]}),i=!0):r.push(o);return a(),n}function Ei(e,t){let n=[];for(let r of e){let e=t(r)?`tools`:`detail`,i=n[n.length-1];i?.kind===e?i.items.push(r):n.push({kind:e,items:[r]})}return n}function Di(e){return!!e.querySelector(`${or} ${fr}`)}function Oi(e){return yr.get(e)??Array.from(e.querySelectorAll(`${or} ${fr}`)).filter(t=>t.closest(ar)===e).map(t=>({node:t,sourceAssistant:e.closest(`assistant-message`)??e.parentElement,sourceParent:e.parentElement,sourceNextSibling:e}))}function ki(e,t){let{node:n,sourceParent:r,sourceNextSibling:i}=e;if(mi(n,mr,!1),mi(n,pr,!1),r?.isConnected){i?.parentNode===r?r.insertBefore(n,i):r.append(n);return}let a=Zr(e.sourceAssistant);a?a.insertBefore(n,a.querySelector(ar)):t.parentElement?.insertBefore(n,t)}function Ai(e,t){return!e||t}function ji(e){if(!e.sourceAssistant.isConnected)return!1;let t=e.node.tagName.toLowerCase(),n=t===`tool-message`?e.node.toolCall?.id:void 0;return Array.from(e.sourceAssistant.querySelectorAll(dr)).filter(t=>t!==e.node&&!t.closest(ar)).filter(t=>Yr(t,e.sourceAssistant)).some(e=>e.tagName.toLowerCase()===t?t!==`tool-message`||!n?!0:e.toolCall?.id===n:!1)}function Mi(e){mi(e.node,mr,!1),mi(e.node,pr,!1),e.node.remove()}function Ni(e,t=!1){let n=new Set(e);for(let r of e)r.classList.remove(`quickforge-process-source-empty`),Xr(r).forEach(e=>{Oi(e).slice().reverse().forEach(r=>{t&&Ai(n.has(r.sourceAssistant),ji(r))?Mi(r):ki(r,e)}),yr.delete(e),e.remove()})}function Pi(e){e.querySelectorAll(`${ar}[data-streaming="true"]`).forEach(e=>{let t=Oi(e),n=new Set(t.map(e=>e.sourceAssistant)),r=e.closest(`assistant-message`);r&&n.add(r),n.forEach(e=>e.classList.remove(`quickforge-process-source-empty`)),t.slice().reverse().forEach(t=>ki(t,e)),yr.delete(e),e.remove()})}function Fi(e,t){return!!(e&&e.length===t.length&&e.every((e,n)=>e.node.isConnected&&e.node===t[n]?.node&&e.sourceAssistant===t[n]?.sourceAssistant))}function Ii(e,t){let n=Qr(),r=Ei(t,e=>zr(e.node));for(let e of r){if(e.kind===`tools`){let t=ri(),r=t.querySelector(cr);if(!r)continue;e.items.forEach(({node:e})=>{mi(e,mr,!0),r.append(e)}),n.append(t);continue}e.items.forEach(({node:e})=>{mi(e,mr,!0),n.append(e)})}e.append(n)}function Li(e,t){let n=e.querySelector(`:scope > ${or}`);if(!n)return!1;let r=Ti(t,e=>e.node.tagName.toLowerCase()===`markdown-block`);for(let e of r){if(e.kind===`detail`){Ii(n,e.items);continue}let t=ii(),r=t.querySelector(ur);r&&(Ii(r,e.items),n.append(t))}return yr.set(e,t),Di(e)}function Ri(e,t){let n=Cr(e.map(e=>({connected:e.sourceParent?.isConnected===!0&&e.node.isConnected}))),r=n>=0?e[n]:void 0,i=[...t].reverse().find(e=>e.isStreaming!==!0),a=i?Zr(i):null;if(!r?.sourceParent?.isConnected&&!a)return null;let o=ai();return r?.sourceParent?.isConnected?r.sourceParent.insertBefore(o,r.node):a&&a.append(o),Li(o,e)?o:null}function zi(e){for(let t of e){let e=!!Array.from(t.querySelectorAll(`markdown-block, thinking-block, tool-message, .quickforge-process-group, .quickforge-approval-card`)).some(e=>e.closest(`message-list`)===Jr(t));t.classList.toggle(`quickforge-process-source-empty`,!e)}}function Bi(e){let t=new Map(e.map((e,t)=>[e,t])),n=Si(e).map(({node:e,sourceAssistant:n})=>{let r=t.get(n)??0,i=e.tagName.toLowerCase();if(i!==`tool-message`)return`${r}:${i}`;let a=e;return`${r}:${i}:${a.toolCall?.id??Lr(a)}`});return`${e.length}|${n.join(`|`)}`}function Vi(e,t,n,r,i=!0){return!n||!r||!i?`full`:e?`update`:t?`skip`:`full`}function Hi(e,t,n){return!e&&t&&n}function Ui(e,t,n,r,i){if(t.length===0)return;let a=Tr(e,t,r),o=t[t.length-1],s=t.flatMap(Xr),c=s.length===1?s[0]:void 0,l=Bi(t),u=xi(t),d=wi(t,u?yi(o,n):null,u),f=!c||Fi(yr.get(c),d),p=Vi(n,i,!!c,c?.dataset.quickforgeProcessFp===l,f);if(p===`skip`)return;if(p===`update`&&c){pi(e,a,t,c,!0);return}if(d.length===0&&Hi(!1,s.length>0,e.dataset.quickforgeProcessHandoff!==void 0))return;Ni(t,!0);let m=xi(t),h=m?yi(o,n):null;m&&bi(o,h);let g=wi(t,h,m);if(g.length===0)return;let _=Ri(g,t);_&&(_.dataset.quickforgeProcessFp=l,pi(e,a,t,_,n),zi(t))}function Wi(e,t,n){let r=t[t.length-1]?.tagName.toLowerCase()===`assistant-message`,i=[],a=[];for(let e of t){if(e.tagName.toLowerCase()===`user-message`){a.length>0&&i.push(a),a=[];continue}a.push(e)}a.length>0&&i.push(a),i.forEach((t,a)=>{let o=n&&r&&a===i.length-1;Ui(e,t,o,a,n&&!o)})}var Gi=new Set([`bash`,`sh`,`shell`,`zsh`,`fish`,`cmd`,`bat`,`batch`,`powershell`,`ps1`,`terminal`,`console`]),Ki=/\b(rm\s+-rf|sudo|chmod\b|chown\b|npm\s+publish|pnpm\s+publish|yarn\s+publish|git\s+push|curl\b[^\n|;]*\|\s*(sh|bash)|wget\b[^\n|;]*\|\s*(sh|bash))\b/i,qi=/<\s*(script|foreignObject)\b|\son[a-z]+\s*=|javascript\s*:/i;function Ji(e,t,n){let r=k(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),y(e,Ct),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{y(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Yi(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),y(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Xi(e){if(typeof e.getDecodedCode==`function`)try{return e.getDecodedCode()}catch{}let t=typeof e.code==`string`?e.code:e.getAttribute(`code`)??``;if(!t)return``;try{return decodeURIComponent(escape(window.atob(t)))}catch{return t}}function Zi(e){return e.replace(/\r\n/g,`
296
+ `).split(`
297
+ `).map(e=>e.replace(/^\s*\$\s+/,``).replace(/^\s*>\s+/,``).replace(/^\s*PS\s+[^>\n]+>\s+/i,``)).join(`
298
+ `).trim()}function Qi(e){return e.split(`
299
+ `).map(e=>e.trim()).filter(Boolean).length}function $i(e){let t=String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase();return Gi.has(t)}function ea(e){return String(e.language??e.getAttribute(`language`)??``).trim().toLowerCase()===`svg`}function ta(e){let t=e.trim();return/^<svg[\s>]/i.test(t)&&/<\/svg>\s*$/i.test(t)&&!qi.test(t)}function na(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}function ra(){let e=document.querySelector(`.quickforge-svg-code-lightbox`);e?.quickforgeCleanup?.(),e?.remove()}function ia(e,t=`SVG preview`){ra();let n=document.createElement(`div`);n.className=`quickforge-svg-code-lightbox`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,t);let r=document.createElement(`img`);r.alt=t,r.src=e,r.addEventListener(`click`,e=>e.stopPropagation()),n.append(r);let i=()=>ra(),a=e=>{e.key===`Escape`&&i()};n.quickforgeCleanup=()=>document.removeEventListener(`keydown`,a),n.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.append(n)}function aa(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}function oa(e){let t=0;for(let n=0;n<e.length;n++)t=Math.imul(31,t)+e.charCodeAt(n)|0;return`${e.length}:${t}`}function sa(e){e.nextElementSibling instanceof HTMLElement&&e.nextElementSibling.dataset.quickforgeSvgPreview===`true`&&e.nextElementSibling.remove(),e.querySelector(`[data-quickforge-svg-preview="true"]`)?.remove(),e.classList.contains(`quickforge-mermaid-code-block`)||e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-svg-original-copy="true"]`)?.removeAttribute(`data-quickforge-svg-original-copy`),e.querySelector(`[data-quickforge-svg-toolbar="true"]`)?.remove();let t=e.querySelector(`pre`)?.parentElement,n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`)!==null;t instanceof HTMLElement&&!n&&(t.hidden=!1),delete e.dataset.quickforgeSvgPreviewSource,delete e.dataset.quickforgeSvgMode}function ca(e,t){let n=e.querySelector(`[data-quickforge-svg-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeSvgMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function la(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.dataset.quickforgeAction=e,r.className=`quickforge-svg-code-menu-item`,r.title=t,r.setAttribute(`aria-label`,t),r.setAttribute(`role`,`menuitem`),y(r,n),r}function ua(e=document,t){e.querySelectorAll(`.quickforge-svg-code-menu[open]`).forEach(e=>{e!==t&&(e.open=!1)})}var da=!1;function fa(){da||(da=!0,document.addEventListener(`pointerdown`,e=>{e.target?.closest(`.quickforge-svg-code-menu`)||ua(document)},!0),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&ua(document)}))}function pa(e,t){fa();let n=e.querySelector(`:scope > div > div:first-child`),r=n?.querySelector(`copy-button`);if(!n||!r)return;let i=n.querySelector(`[data-quickforge-svg-toolbar="true"]`);if(!i){i=document.createElement(`div`),i.dataset.quickforgeSvgToolbar=`true`,i.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=k(`moreActions`),t.setAttribute(`aria-label`,k(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let a=la(`svg-preview-mode`,k(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=la(`svg-source-mode`,k(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=la(`copy-svg-code`,k(`copySvgSource`),St),c=la(`download-svg-code`,k(`downloadSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(a,o,s,c),r.before(i),r.dataset.quickforgeSvgOriginalCopy=`true`,r.setAttribute(`hidden`,``),e.append(t,n),i.append(e)}let a=i.querySelector(`.quickforge-svg-code-menu`),o=i.querySelector(`[data-quickforge-action="svg-preview-mode"]`),s=i.querySelector(`[data-quickforge-action="svg-source-mode"]`),c=i.querySelector(`[data-quickforge-action="copy-svg-code"]`),l=i.querySelector(`[data-quickforge-action="download-svg-code"]`),u=()=>{a&&(a.open=!1)};a&&!a.dataset.quickforgeSvgMenuBound&&(a.dataset.quickforgeSvgMenuBound=`true`,a.addEventListener(`toggle`,()=>{a.open&&ua(e.closest(`markdown-block`)??document,a)})),o&&(o.onclick=()=>{ca(e,`preview`),u()}),s&&(s.onclick=()=>{ca(e,`source`),u()}),c&&(c.onclick=async()=>{await f(t),Ji(c,k(`copySvgSource`),St)}),l&&(l.onclick=()=>{aa(`quickforge-svg-${Date.now()}.svg`,t,`image/svg+xml;charset=utf-8`),u()})}function ma(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{if(!ea(e)){sa(e);return}if(t)return;let n=Xi(e).trim();if(!n||!ta(n)){sa(e);return}let r=oa(n);if(e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.dataset.quickforgeSvgPreviewSource===r){pa(e,n),ca(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`);return}let i=e.querySelector(`:scope > div > div:first-child`);if(!i)return;sa(e);let a=document.createElement(`div`);e.classList.add(`quickforge-svg-code-block`),a.dataset.quickforgeSvgPreview=`true`,a.className=`quickforge-svg-code-preview`,a.setAttribute(`aria-label`,`SVG preview`);let o=document.createElement(`img`);o.alt=`SVG preview`,o.src=na(n),o.title=k(`svgEnlargePreview`),o.addEventListener(`click`,()=>ia(o.src)),a.replaceChildren(o),i.after(a),pa(e,n),e.dataset.quickforgeSvgPreviewSource=r,ca(e,e.dataset.quickforgeSvgMode===`source`?`source`:`preview`)})}var ha=0;function ga(e){return j(String(e.language??e.getAttribute(`language`)??``))}function _a(e){let t=e.classList.contains(`quickforge-mermaid-code-block`);if(!(t||e.dataset.quickforgeMermaidRequestToken!==void 0||e.dataset.quickforgeMermaidPendingSource!==void 0||e.dataset.quickforgeMermaidPreviewSource!==void 0||e.dataset.quickforgeMermaidFailedSource!==void 0||e.querySelector(`[data-quickforge-mermaid-preview="true"], [data-quickforge-mermaid-error="true"], [data-quickforge-mermaid-toolbar="true"], copy-button[data-quickforge-mermaid-original-copy="true"]`)!==null))return;e.dataset.quickforgeMermaidRequestToken&&(e.dataset.quickforgeMermaidRequestToken=String(++ha)),e.querySelector(`[data-quickforge-mermaid-preview="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-error="true"]`)?.remove(),e.querySelector(`[data-quickforge-mermaid-toolbar="true"]`)?.remove(),e.classList.remove(`quickforge-mermaid-code-block`),t&&!e.querySelector(`[data-quickforge-svg-preview="true"]`)&&e.classList.remove(`quickforge-svg-code-block`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`hidden`),e.querySelector(`copy-button[data-quickforge-mermaid-original-copy="true"]`)?.removeAttribute(`data-quickforge-mermaid-original-copy`);let n=e.querySelector(`pre`)?.parentElement,r=e.querySelector(`[data-quickforge-svg-preview="true"]`)!==null;n instanceof HTMLElement&&!r&&(n.hidden=!1),delete e.dataset.quickforgeMermaidMode,delete e.dataset.quickforgeMermaidPreviewSource,delete e.dataset.quickforgeMermaidPendingSource,delete e.dataset.quickforgeMermaidFailedSource,delete e.dataset.quickforgeMermaidRequestToken}function va(e,t){let n=e.querySelector(`[data-quickforge-mermaid-preview="true"]`),r=e.querySelector(`:scope > div > div:first-child`),i=e.querySelector(`pre`)?.parentElement;e.dataset.quickforgeMermaidMode=t,n&&(n.hidden=t!==`preview`),r&&r.classList.toggle(`quickforge-svg-code-toolbar-floating`,t===`preview`),i instanceof HTMLElement&&(i.hidden=t===`preview`)}function ya(e,t,n){fa();let r=e.querySelector(`:scope > div > div:first-child`),i=r?.querySelector(`copy-button`);if(!r||!i)return;let a=r.querySelector(`[data-quickforge-mermaid-toolbar="true"]`);if(!a){a=document.createElement(`div`),a.dataset.quickforgeMermaidToolbar=`true`,a.className=`quickforge-svg-code-toolbar`;let e=document.createElement(`details`);e.className=`quickforge-svg-code-menu quickforge-mermaid-code-menu`;let t=document.createElement(`summary`);t.className=`quickforge-svg-code-menu-trigger`,t.title=k(`moreActions`),t.setAttribute(`aria-label`,k(`moreActions`)),t.textContent=`⋯`;let n=document.createElement(`div`);n.className=`quickforge-svg-code-menu-content`,n.setAttribute(`role`,`menu`);let r=la(`mermaid-preview-mode`,k(`svgPreviewMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`),o=la(`mermaid-source-mode`,k(`svgSourceMode`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/></svg>`),s=la(`copy-mermaid-code`,k(`copyMermaidSource`),St),c=la(`download-mermaid-svg`,k(`downloadMermaidSvg`),`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>`);n.append(r,o,s,c),i.before(a),i.dataset.quickforgeMermaidOriginalCopy=`true`,i.setAttribute(`hidden`,``),e.append(t,n),a.append(e)}let o=a.querySelector(`.quickforge-mermaid-code-menu`),s=a.querySelector(`[data-quickforge-action="mermaid-preview-mode"]`),c=a.querySelector(`[data-quickforge-action="mermaid-source-mode"]`),l=a.querySelector(`[data-quickforge-action="copy-mermaid-code"]`),u=a.querySelector(`[data-quickforge-action="download-mermaid-svg"]`),d=()=>{o&&(o.open=!1)};o&&!o.dataset.quickforgeMermaidMenuBound&&(o.dataset.quickforgeMermaidMenuBound=`true`,o.addEventListener(`toggle`,()=>{o.open&&ua(e.closest(`markdown-block`)??document,o)})),s&&(s.onclick=()=>{va(e,`preview`),d()}),c&&(c.onclick=()=>{va(e,`source`),d()}),l&&(l.onclick=async()=>{await f(t),Ji(l,k(`copyMermaidSource`),St)}),u&&(u.onclick=()=>{aa(`quickforge-mermaid-${Date.now()}.svg`,n,`image/svg+xml;charset=utf-8`),d()})}function ba(e){let t=e.querySelector(`:scope > div > div:first-child`);if(!t||e.querySelector(`[data-quickforge-mermaid-error="true"]`))return;let n=document.createElement(`div`);n.dataset.quickforgeMermaidError=`true`,n.className=`quickforge-mermaid-code-error`,n.textContent=k(`mermaidRenderFailed`),t.after(n)}function xa(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(n=>{try{if(!ga(n)){_a(n);return}let r=Xi(n).trim();if(!r){_a(n);return}let i=oa(r);if(n.querySelector(`[data-quickforge-mermaid-preview="true"]`)&&n.dataset.quickforgeMermaidPreviewSource===i){va(n,n.dataset.quickforgeMermaidMode===`source`?`source`:`preview`);return}if(t){(n.dataset.quickforgeMermaidPendingSource||n.dataset.quickforgeMermaidPreviewSource)&&_a(n);return}if(n.dataset.quickforgeMermaidPendingSource===i||n.dataset.quickforgeMermaidFailedSource===i||!n.querySelector(`:scope > div > div:first-child`))return;_a(n);let a=String(++ha);n.dataset.quickforgeMermaidRequestToken=a,n.dataset.quickforgeMermaidPendingSource=i,(async()=>{try{let t=await M(r);if(!t)throw Error(`Empty Mermaid SVG`);let o=N(t);if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||e.dataset.quickforgeAgentStreaming===`true`||!ga(n)||oa(Xi(n).trim())!==i){n.dataset.quickforgeMermaidRequestToken===a&&(delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken);return}let s=n.querySelector(`:scope > div > div:first-child`);if(!s){delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken;return}let c=document.createElement(`div`);c.dataset.quickforgeMermaidPreview=`true`,c.className=`quickforge-svg-code-preview quickforge-mermaid-code-preview`,c.setAttribute(`aria-label`,k(`mermaidPreviewLabel`));let l=document.createElement(`img`);l.alt=k(`mermaidPreviewLabel`),l.src=o,l.title=k(`mermaidEnlargePreview`),l.addEventListener(`click`,()=>ia(l.src,k(`mermaidPreviewLabel`))),c.replaceChildren(l),n.classList.add(`quickforge-svg-code-block`,`quickforge-mermaid-code-block`),s.after(c),ya(n,r,t),n.dataset.quickforgeMermaidPreviewSource=i,delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidFailedSource,delete n.dataset.quickforgeMermaidRequestToken,va(n,`preview`)}catch{if(!n.isConnected||n.dataset.quickforgeMermaidRequestToken!==a||!ga(n)||oa(Xi(n).trim())!==i)return;delete n.dataset.quickforgeMermaidPendingSource,delete n.dataset.quickforgeMermaidRequestToken,n.dataset.quickforgeMermaidFailedSource=i,ba(n)}})()}catch{_a(n),ba(n)}})}function Sa(e,t){e.querySelectorAll(`assistant-message markdown-block code-block`).forEach(e=>{let n=e.querySelector(`[data-quickforge-action="execute-markdown-command"]`);if(!$i(e)){n?.remove(),delete e.dataset.quickforgeCommand;return}let r;if(n&&e.dataset.quickforgeCommand!==void 0){if(n.disabled===t)return;r=e.dataset.quickforgeCommand}else r=Zi(Xi(e));if(!r){n?.remove(),delete e.dataset.quickforgeCommand;return}e.dataset.quickforgeCommand=r;let i=k(`executeInTerminal`),a=n??Yi(`execute-markdown-command`,i,`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="6 3 20 12 6 21 6 3"/></svg>`,()=>{let t=Zi(Xi(e));t&&window.dispatchEvent(new CustomEvent(`quickforge:execute-markdown-command`,{detail:{command:t,confirm:Qi(t)>1,dangerous:Ki.test(t)}}))});if(a.title=i,a.setAttribute(`aria-label`,i),a.disabled=t,a.className=`pointer-events-auto inline-flex size-8 items-center justify-center rounded-md text-emerald-600 transition-colors hover:bg-emerald-500/10 hover:text-emerald-700 disabled:cursor-not-allowed disabled:opacity-40 dark:text-emerald-400 dark:hover:text-emerald-300`,!n){let t=e.querySelector(`:scope > div > div:first-child`),n=t?.querySelector(`copy-button`);if(t&&n){let e=document.createElement(`div`);e.className=`flex items-center gap-1`,n.before(e),e.appendChild(n),e.appendChild(a)}}})}var Ca=/[A-Za-z]:[\\/][^\s"'<>`]+|(?:\/Users|\/home|\/workspace|\/mnt|\/Volumes)\/[^\s"'<>`]+/g,wa=new Set([`.`,`,`,`;`,`:`,`!`,`?`,`)`,`]`,`}`,`>`,`。`,`,`,`;`,`:`,`!`,`?`,`)`,`】`,`》`]),Ta=[`pre`,`code`,`a`,`button`,`textarea`,`input`,`select`,`thinking-block`,`tool-message`,`.quickforge-file-path-link`,`.quickforge-message-actions`,`.quickforge-process-group`,`.quickforge-approval-card`].join(`,`);function Ea(e){let t=e.length;for(;t>0&&wa.has(e[t-1]);)--t;return{path:e.slice(0,t),suffix:e.slice(t)}}function Da(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`quickforge-file-path-link`,n.dataset.quickforgeFilePath=e,n.textContent=e,n.title=`Open file`,n.setAttribute(`aria-label`,`Open file ${e}`),n.onclick=n=>{n.preventDefault(),n.stopPropagation(),t(e)},n}function Oa(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){let t=e.textContent??``;if(!Ca.test(t))return NodeFilter.FILTER_REJECT;Ca.lastIndex=0;let n=e.parentElement;return!n||n.closest(Ta)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=n.nextNode();for(;r;)t.push(r),r=n.nextNode();return t}function ka(e,t){let n=e.textContent??``;Ca.lastIndex=0;let r,i=0,a=document.createDocumentFragment(),o=!1;for(;r=Ca.exec(n);){let e=r[0],{path:s,suffix:c}=Ea(e);if(!s)continue;let l=r.index,u=l+e.length;l>i&&a.append(document.createTextNode(n.slice(i,l))),a.append(Da(s,t)),c&&a.append(document.createTextNode(c)),i=u,o=!0}o&&(i<n.length&&a.append(document.createTextNode(n.slice(i))),e.replaceWith(a))}function Aa(e,t,n){let r=Array.from(e.querySelectorAll(`markdown-block`)),i=r.reduce((e,t)=>e+(t.textContent?.length??0),0),a=p(t).length,o=`${String(t.timestamp??``)}:${a}:${r.length}:${i}`;e.dataset.quickforgeLocalPathSignature!==o&&(r.forEach(e=>{Oa(e).forEach(e=>ka(e,n))}),e.dataset.quickforgeLocalPathSignature=o)}function ja(e,t){let n=new Set,r;e.forEach((e,t)=>{if(e.role===`assistant`){r=t;return}r!==void 0&&n.add(r),r=void 0});let i=t&&e[e.length-1]?.role===`assistant`;return r!==void 0&&!i&&n.add(r),n}function Ma(e,t,n){let r=k(`copied`),i=Number(e.dataset.quickforgeCopyFeedbackTimer);i&&window.clearTimeout(i),y(e,Ct),e.title=r,e.setAttribute(`aria-label`,r),e.style.color=`rgb(5 150 105)`;let a=window.setTimeout(()=>{y(e,n),e.title=t,e.setAttribute(`aria-label`,t),e.style.color=``,delete e.dataset.quickforgeCopyFeedbackTimer},1200);e.dataset.quickforgeCopyFeedbackTimer=String(a)}function Na(e,t,n,r){let i=document.createElement(`button`);return i.type=`button`,i.dataset.quickforgeAction=e,i.title=t,i.setAttribute(`aria-label`,t),y(i,n),i.className=`pointer-events-auto inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,i.onclick=e=>{e.stopPropagation(),r(i)},i}function Pa(e){if(!e)return null;let t=document.createElement(`span`);return t.className=`quickforge-message-time`,t.textContent=g(e),t}function Fa(e){e.querySelectorAll(`.quickforge-rollback-popover`).forEach(e=>{e.quickforgeCleanup?.(),(e.closest(`.quickforge-rollback-action`)?.querySelector(`button[data-quickforge-action="rollback"]`))?.setAttribute(`aria-expanded`,`false`),e.remove()})}function Ia(e){let{panel:t,button:n,messageIndex:r,title:i,description:a,onConfirm:o}=e,s=n.closest(`.quickforge-rollback-action`);if(!s||n.disabled)return;if(s.querySelector(`.quickforge-rollback-popover`)){Fa(t);return}Fa(t);let c=document.createElement(`div`);c.className=`quickforge-rollback-popover`,c.setAttribute(`role`,`dialog`),c.setAttribute(`aria-label`,i),c.tabIndex=-1;let l=document.createElement(`div`);l.className=`quickforge-rollback-popover-arrow`;let u=document.createElement(`div`);u.className=`quickforge-rollback-popover-title`,u.textContent=i;let d=document.createElement(`div`);d.className=`quickforge-rollback-popover-description`,d.textContent=a;let f=document.createElement(`div`);f.className=`quickforge-rollback-popover-footer`;let p=document.createElement(`button`);p.type=`button`,p.className=`quickforge-rollback-popover-cancel`,p.textContent=k(`cancel`);let m=document.createElement(`button`);m.type=`button`,m.className=`quickforge-rollback-popover-confirm`,m.textContent=k(`confirmRollback`),f.append(p,m),c.append(l,u,d,f);let h=()=>Fa(t),g=e=>{let t=e.target;!t||c.contains(t)||n.contains(t)||h()},_=e=>{e.key===`Escape`&&(e.preventDefault(),h())};c.quickforgeCleanup=()=>{document.removeEventListener(`pointerdown`,g,!0),document.removeEventListener(`keydown`,_)},c.addEventListener(`pointerdown`,e=>e.stopPropagation()),c.addEventListener(`click`,e=>e.stopPropagation()),p.addEventListener(`click`,h),m.addEventListener(`click`,async()=>{m.disabled=!0,p.disabled=!0,m.textContent=k(`rollingBack`);try{await o(r)}finally{h()}}),s.append(c),n.setAttribute(`aria-expanded`,`true`),document.addEventListener(`pointerdown`,g,!0),document.addEventListener(`keydown`,_),window.requestAnimationFrame(()=>m.focus())}function La(e){let t=document.createElement(`span`);t.className=`quickforge-rollback-action`;let n=Na(`rollback`,k(`rollback`),wt,t=>{Ia({panel:e.panel,button:t,messageIndex:e.messageIndex,title:e.title,description:e.description,onConfirm:e.onConfirm})});return n.disabled=e.isDisabled,n.setAttribute(`aria-haspopup`,`dialog`),n.setAttribute(`aria-expanded`,`false`),t.append(n),t}function Ra(e){return e.querySelector(`message-list`)}function za(e){return Array.from(e.querySelectorAll(`user-message, assistant-message`)).filter(t=>t.closest(`message-list`)===e)}function Ba(e){let t=Ra(e);return t?za(t):[]}function Va(e){return(Ra(e)?.parentElement?.querySelector(`:scope > streaming-message-container:not(.hidden)`))?.querySelector(`:scope > div > assistant-message`)??null}function Ha(e){let{panel:t,getMessages:n,messageIndexOffset:r=0,isStreaming:i,onCopyAnswer:a,onRollbackFromMessage:o,onRetryFromMessage:s,onForkFromMessage:c,onOpenLocalFilePath:l,disableFork:u,allowRollback:d=!0,allowRetry:f=!0,readOnly:m=!1,enableTerminalCommandActions:v=!0,rollbackConfirmTitle:y=k(`rollbackConfirmTitle`),rollbackConfirmDescription:b=k(`rollbackConfirm`)}=e,x=n().map((e,t)=>({message:e,index:t+r})).filter(({message:e})=>e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`),S=(()=>{for(let e=x.length-1;e>=0;e--)if(x[e].message.role!==`assistant`)return x[e]})(),C=Ba(t),w=i(),T=ja(x.map(({message:e})=>e),w),E=e=>{let t=k(`copy`);return Na(`copy`,t,St,async n=>{let r=e();if(r)try{await a(r),Ma(n,t,St)}catch{}})};C.forEach((e,r)=>{let a=x[r];if(!a)return;e.classList.add(`group`,`relative`),e.classList.toggle(`quickforge-assistant-message`,a.message.role===`assistant`),e.classList.toggle(`quickforge-user-message`,a.message.role!==`assistant`);let v=h(a.message),C=e=>{let t=e.querySelector(`.quickforge-message-time`);if(v>0){if(t){t.textContent=g(v);return}let n=Pa(v);if(!n)return;a.message.role===`assistant`?e.append(n):e.prepend(n)}else t?.remove()};a.message.role===`assistant`&&l&&Aa(e,a.message,l);let w=`quickforge-message-actions pointer-events-none mt-1 flex gap-1 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100 ${a.message.role===`assistant`?`px-4 justify-start`:`mx-4 justify-end`}`,D=e.querySelector(`.quickforge-message-actions`);if(!(a.message.role!==`assistant`||T.has(r))){D?.remove();return}if(D?.dataset.quickforgeLayout===`message-bottom`){D.className=w,D.parentElement===e&&D!==e.lastElementChild&&e.append(D),m&&Fa(t),D.querySelectorAll(`button[data-quickforge-action="rollback"], button[data-quickforge-action="retry"], button[data-quickforge-action="fork"]`).forEach(e=>{let t=e.dataset.quickforgeAction;if(m||t===`rollback`&&!d||t===`retry`&&!f||t===`fork`&&u){e.closest(`.quickforge-rollback-action`)?.remove(),e.remove();return}e.disabled=i()}),i()&&Fa(t);let n=D.querySelector(`button[data-quickforge-action="retry"]`),r=!m&&f&&S&&a.index===S.index&&a.message.role!==`assistant`;if(n&&!r)n.remove();else if(!n&&r){let e=Na(`retry`,k(`retry`),Et,()=>{s(a.index)});e.disabled=i(),D.append(e)}C(D);return}D?.remove();let O=document.createElement(`div`);if(O.dataset.quickforgeLayout=`message-bottom`,O.className=w,a.message.role===`assistant`){let e=p(a.message);if(!e)return;let t=E(()=>{let t=n()[a.index];return t?p(t):e});if(O.append(t),!m&&!u){let e=Na(`fork`,k(`forkConversation`),Tt,()=>{c(a.index)});e.disabled=i(),O.append(e)}}else{let e=_(a.message);if(e){let t=E(()=>{let t=n()[a.index];return t?_(t):e});O.append(t)}if(!m&&d){let e=La({panel:t,messageIndex:a.index,isDisabled:i(),title:y,description:b,onConfirm:o});O.append(e)}if(!m&&f&&S&&a.index===S.index){let e=Na(`retry`,k(`retry`),Et,()=>{s(a.index)});e.disabled=i(),O.append(e)}}C(O),e.append(O)}),ua(t);let D=[...C];if(w){let e=Va(t);e&&(e.classList.add(`quickforge-assistant-message`),D.push(e))}Wi(t,D,w),t.querySelectorAll(`message-list[data-quickforge-subagent-process="true"]`).forEach(e=>{Wi(e,za(e),e.dataset.quickforgeSubagentStreaming===`true`)}),ma(t,i()),xa(t,i()),v?Sa(t,i()):t.querySelectorAll(`[data-quickforge-action="execute-markdown-command"]`).forEach(e=>e.remove())}function Ua(e){return e.role===`user`||e.role===`user-with-attachments`||e.role===`assistant`}function Wa(e){return e.role===`user`||e.role===`user-with-attachments`}function Ga(e){return e.role===`assistant`?p(e).trim().length>0:!1}function Ka(e){return e.querySelector(`message-list`)}function qa(e){let t=Ka(e);return t?Array.from(t.querySelectorAll(`user-message, assistant-message`)).filter(e=>e.closest(`message-list`)===t):[]}var Ja=`.quickforge-assistant-waiting`;function Ya(e){e.querySelectorAll(Ja).forEach(e=>e.remove())}function Xa(e){let t=e.querySelectorAll(`thinking-block, tool-message`);for(let e of t)if(!e.closest(`.quickforge-process-body`))return!0;let n=e.querySelectorAll(`markdown-block, code-block`);for(let e of n)if(!e.closest(`.quickforge-process-body`)&&(e.textContent??``).trim().length>0)return!0;let r=e.cloneNode(!0);return r.querySelectorAll(`.quickforge-message-actions`).forEach(e=>e.remove()),r.querySelectorAll(`.quickforge-process-body`).forEach(e=>e.remove()),(r.textContent??``).trim().length>0}function Za(e){let{panel:t,getMessages:n,isStreaming:r,isActive:i}=e,a=t.querySelector(Ja);if(!r()||!i)return Ya(t),!1;let o=Ka(t),s=n(),c=s.map((e,t)=>({message:e,index:t})).filter(({message:e})=>Ua(e)),l=(()=>{for(let e=c.length-1;e>=0;e--)if(Wa(c[e].message))return e;return-1})();if(!o||l<0)return a?.remove(),!1;let u=c[l],d=s.slice(u.index+1).some(Ga),f=qa(t),p=f[l],m=f.slice(l+1).some(e=>e.matches(`assistant-message`)&&Xa(e));if(!p||d||m)return a?.remove(),!1;let h=a??document.createElement(`div`);return h.className=`quickforge-assistant-waiting`,h.setAttribute(`role`,`status`),h.setAttribute(`aria-live`,`polite`),h.setAttribute(`aria-label`,k(`assistantWaitingAriaLabel`)),a||(h.innerHTML=`
300
+ <div class="quickforge-assistant-waiting-dots" aria-hidden="true">
301
+ <span></span>
302
+ <span></span>
303
+ <span></span>
304
+ </div>
305
+ `),h.previousElementSibling!==p&&p.after(h),!0}function Qa(e){let{panel:t,isStreaming:n,abort:r,agentAccessMode:i,harness:a,getAcpSession:o,onOpenCodeConfigOptionChange:s,onOpenCodeModeChange:c,planMode:l,workspaceToolsEnabled:u,readOnly:d,allowModelControls:f,planModeEnabled:p,accessModeEnabled:m,commandSuggestionsEnabled:h,capabilitySuggestionsEnabled:g,attachmentsEnabled:_,onAccessModeChange:v,onTogglePlanMode:y,onInput:b,onFilesChange:x,removeCommandSuggestions:S,updateCommandSuggestions:C,setupCommandTextareaHandler:w,removeCapabilitySuggestions:T,updateCapabilitySuggestions:E,setupCapabilityTextareaHandler:O,insertBuiltinPluginMention:ee,availablePluginRows:te,onBeforeSend:A}=e,j=t.querySelector(`message-editor`);j?.classList.add(`quickforge-composer`),j?.parentElement?.classList.add(`quickforge-composer-shell`),j?.parentElement?.parentElement?.classList.add(`quickforge-composer-dock`);let M=j?.querySelector(`textarea`);if(M&&(M.placeholder=k(`composerPlaceholder`)),d){t.querySelector(`.quickforge-composer-dock`)?.remove();return}Sn({editor:j,onInput:b,onFilesChange:x,removeCommandSuggestions:S,updateCommandSuggestions:h?C:()=>S(),removeCapabilitySuggestions:T,updateCapabilitySuggestions:g?E:()=>T(),attachmentsEnabled:_,onBeforeSend:A}),h?w(j):S(),g?O(j):T(),p?yn(j,l,y):vn(j);let N=t.querySelector(`agent-interface`);if(N){let e=N.enableModelSelector!==f;N.enableModelSelector=f,N.enableThinkingSelector=!1,e&&N.requestUpdate?.()}let P=j?.querySelectorAll(`.flex.gap-2.items-center`),F=P?.[0],ne=P?.[P.length-1];if(!ne)return;if(_n(j,ne),xn({rightControls:ne,isStreaming:n,abort:r,removeCommandSuggestions:S}),!F){t.querySelector(`.quickforge-plus-inline`)?.remove(),cn(t),!_&&j&&dn(j),t.querySelector(`.quickforge-agent-access-inline`)?.remove(),Vt(t),t.querySelector(`.quickforge-opencode-config-inline`)?.remove(),Yt(t),t.querySelector(`.quickforge-opencode-mode-inline`)?.remove(),Z(t),t.querySelector(`.quickforge-yolo-inline`)?.remove(),t.querySelector(`.quickforge-plan-inline`)?.remove();return}let I=()=>{cn(t),Yt(t),Z(t),Vt(t),D()};if(j&&(j.querySelectorAll(`input[type="file"]`).forEach(e=>{e.disabled=!_}),_||dn(j,F)),j&&(_||g)?hn({panel:t,editor:j,leftControls:F,insertBuiltinPluginMention:ee,availablePluginRows:te,removeCommandSuggestions:S,removeCapabilitySuggestions:T,attachmentsEnabled:_,pluginsEnabled:g}):(t.querySelector(`.quickforge-plus-inline`)?.remove(),cn(t),j&&dn(j,F)),p?bn({panel:t,leftControls:F,planMode:l,onTogglePlanMode:y}):t.querySelector(`.quickforge-plan-inline`)?.remove(),a===`opencode`&&o&&s&&c?(en({panel:t,leftControls:F,getAcpSession:o,isStreaming:n,onConfigOptionChange:s,onModeChange:c,dismissComposerMenus:I}),on({panel:t,rightControls:ne,getAcpSession:o,isStreaming:n,onModeChange:c,dismissComposerMenus:I})):(t.querySelector(`.quickforge-opencode-config-inline`)?.remove(),Yt(t),t.querySelector(`.quickforge-opencode-mode-inline`)?.remove(),Z(t)),!u||!m){t.querySelector(`.quickforge-agent-access-inline`)?.remove(),Vt(t),t.querySelector(`.quickforge-yolo-inline`)?.remove();return}Wt({panel:t,leftControls:F,agentAccessMode:i,onAccessModeChange:v,dismissComposerMenus:I})}function $a(e){return e>=5}function eo(e){return e.role===`user`||e.role===`user-with-attachments`}function to(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&`type`in e&&e.type===`text`&&`text`in e&&typeof e.text==`string`).map(e=>e.text).join(`
306
+
307
+ `).trim():``}function no(e){return eo(e)?(typeof e.content==`string`?e.content:to(e.content)).trim():``}function ro(e){return e.role===`assistant`?to(e.content):``}function io(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!eo(r))continue;let i=``;for(let n=t+1;n<e.length;n++){let t=e[n];if(eo(t))break;t.role===`assistant`&&(i=ro(t))}n.push({messageIndex:t,userText:no(r),finalAnswerText:i,isGenerating:!1})}return t&&n.length>0&&(n[n.length-1].isGenerating=!0),n}var ao=eo;function oo(e,t){return e.trim().replace(/\s+/g,` `)||t}function so({host:e,panel:t,getMessages:n,isStreaming:r,windowLayer:i,beginProgrammaticScroll:a,onWindowChanged:o}){let s=document.createElement(`nav`);s.className=`quickforge-turn-navigation`,s.setAttribute(`aria-label`,k(`turnNavigationLabel`)),s.hidden=!0;let c=document.createElement(`div`);c.className=`quickforge-turn-navigation-track`,s.append(c),e.append(s);let l=[],u=``,d=-1,f=null,p=null,m,h,g=null,_=0,v=null,y=null,b=()=>{m!==void 0&&(window.clearTimeout(m),m=void 0)},x=()=>{h!==void 0&&(window.clearTimeout(h),h=void 0)},S=()=>{b(),x(),f?.remove(),f=null,p?.removeAttribute(`aria-describedby`),p=null},C=()=>{if(!f||!p)return;let e=p.getBoundingClientRect(),t=f.getBoundingClientRect(),n=e.right+10;n+t.width>window.innerWidth-12&&(n=e.left-t.width-10);let r=Math.min(Math.max(12,e.top+e.height/2-t.height/2),Math.max(12,window.innerHeight-t.height-12));f.style.left=`${Math.max(12,n)}px`,f.style.top=`${r}px`},w=(e,t)=>{b(),x(),S();let n=l[t];if(!n)return;let r=document.createElement(`div`),i=`quickforge-turn-navigation-tooltip-${t}`;r.id=i,r.className=`quickforge-turn-navigation-tooltip`,r.setAttribute(`role`,`tooltip`);let a=document.createElement(`div`);a.className=`quickforge-turn-navigation-tooltip-text quickforge-turn-navigation-tooltip-user`,a.textContent=oo(n.userText,k(`turnNavigationAttachmentOnly`)),r.append(a);let o=n.isGenerating?k(`turnNavigationGenerating`):n.finalAnswerText.trim();if(o){let e=document.createElement(`div`);e.className=`quickforge-turn-navigation-tooltip-text quickforge-turn-navigation-tooltip-answer`,e.textContent=o,r.append(e)}r.addEventListener(`pointerenter`,x),r.addEventListener(`pointerleave`,()=>{h=window.setTimeout(S,100)}),document.body.append(r),f=r,p=e,e.setAttribute(`aria-describedby`,i),C()},T=(e,t)=>{b(),x(),m=window.setTimeout(()=>w(e,t),150)},E=e=>{e!==d&&(d=e,c.querySelectorAll(`.quickforge-turn-navigation-node`).forEach((t,n)=>{let r=n===e,i=Math.abs(n-e);t.classList.toggle(`is-active`,r),t.classList.toggle(`is-nearby`,i===1),t.classList.toggle(`is-nearby-secondary`,i===2),r?t.setAttribute(`aria-current`,`true`):t.removeAttribute(`aria-current`)}))},D=()=>{let e=g,r=t.querySelector(`message-list`);if(!e||!r||l.length===0)return;let a=n(),o=(i.isEnabled()?i.getWindowMessages():a).map(e=>ao(e)?a.indexOf(e):-1).filter(e=>e>=0).map(e=>l.findIndex(t=>t.messageIndex===e)).filter(e=>e>=0),s=Array.from(r.querySelectorAll(`user-message`)).filter(e=>e.closest(`message-list`)===r);if(s.length===0||o.length===0)return;let c=e.getBoundingClientRect().top+Math.min(120,e.clientHeight*.2),u=0;for(let e=0;e<s.length&&s[e].getBoundingClientRect().top<=c;e++)u=e;E(o[Math.min(u,o.length-1)])},O=()=>{let e=t.querySelector(`agent-interface .overflow-y-auto`);e!==g&&(g?.removeEventListener(`scroll`,D),g=e,g?.addEventListener(`scroll`,D,{passive:!0}))},ee=e=>{let r=l[e],s=t.querySelector(`message-list`),c=t.querySelector(`agent-interface .overflow-y-auto`);if(!r||!s||!c)return;S();let u=++_;y?.(),y=null,v?.(),v=a();let d=()=>{if(u!==_)return;y?.(),y=null;let e=v;v=null,window.requestAnimationFrame(()=>e?.())},f=()=>{let e=!1,t=()=>{e||(e=!0,c.removeEventListener(`scrollend`,t),window.clearTimeout(n),d())};c.addEventListener(`scrollend`,t,{once:!0});let n=window.setTimeout(t,900);y=()=>{e=!0,c.removeEventListener(`scrollend`,t),window.clearTimeout(n)}},p=i.showMessageIndex(r.messageIndex);p&&s.messages!==p&&(s.messages=p);let m=()=>{window.requestAnimationFrame(()=>{if(u!==_)return;let t=n(),a=i.isEnabled()?i.getWindowMessages():t,l=a.findIndex(e=>e===t[r.messageIndex]);if(l<0){d();return}let p=a.slice(0,l+1).filter(ao).length-1,m=Array.from(s.querySelectorAll(`user-message`)).filter(e=>e.closest(`message-list`)===s)[p];if(!m){d();return}let h=c.scrollTop+m.getBoundingClientRect().top-c.getBoundingClientRect().top-24,g=Math.max(0,h);Math.abs(c.scrollTop-g)<=1?(c.scrollTop=g,d()):(f(),c.scrollTo({top:g,behavior:`smooth`})),E(e),o()})};(s.updateComplete??Promise.resolve()).then(m,m)},te=()=>{if(c.replaceChildren(),!$a(l.length)){s.hidden=!0;return}s.hidden=!1,l.forEach((e,t)=>{let n=document.createElement(`button`);n.type=`button`,n.className=`quickforge-turn-navigation-node`,n.setAttribute(`aria-label`,k(`turnNavigationJumpLabel`,{index:t+1,preview:oo(e.userText,k(`turnNavigationAttachmentOnly`))})),n.addEventListener(`pointerenter`,()=>T(n,t)),n.addEventListener(`pointerleave`,()=>{b(),h=window.setTimeout(S,100)}),n.addEventListener(`focus`,()=>T(n,t)),n.addEventListener(`blur`,()=>{h=window.setTimeout(S,100)}),n.addEventListener(`click`,()=>ee(t)),c.append(n)}),d=-1},A=()=>{l=io(n(),r());let e=l.map(e=>`${e.messageIndex}:${e.userText}`).join(`|`);e!==u&&(u=e,te()),O(),D()},j=e=>{e.key===`Escape`&&S()},M=()=>S();return document.addEventListener(`keydown`,j),window.addEventListener(`resize`,M),{update:A,cleanup(){_+=1,y?.(),y=null,v?.(),v=null,S(),g?.removeEventListener(`scroll`,D),document.removeEventListener(`keydown`,j),window.removeEventListener(`resize`,M),s.remove()}}}function $(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function co(e,t){let n=e[t];return typeof n==`string`&&n.trim()?n:void 0}function lo(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function uo(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function fo(e){let t=e&&$(e.diff)?e.diff:void 0;return{addedLines:t?uo(t,`addedLines`):void 0,removedLines:t?uo(t,`removedLines`):void 0}}function po(e=``){let t=e.toLowerCase(),n=t.replace(/\\/g,`/`).split(`/`).pop()||t;return t.endsWith(`.html`)||t.endsWith(`.htm`)?`html`:/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(t)?`image`:/\.(md|mdx|markdown)$/i.test(t)?`markdown`:n===`dockerfile`||n.endsWith(`.dockerfile`)||n===`makefile`||/\.(ts|tsx|js|jsx|mjs|cjs|css|scss|less|json|jsonc|txt|csv|tsv|log|sql|xml|yml|yaml|toml|ini|py|rb|go|rs|java|swift|kt|kts|c|h|cpp|hpp|cs|php|sh|bash|zsh|ps1)$/i.test(t)?`code`:`unknown`}function mo(e){return e===`html`||e===`image`||e===`markdown`||e===`code`}function ho(e){return[e.source,e.path??``,e.command??``,e.outputFile??``,e.toolCallId??``,e.preview?`preview`:``].join(`\0`)}function go(e,t,n){let r=ho(n);t.has(r)||(t.add(r),e.push({id:`${e.length}:${r}`,...n}))}function _o(e){if(!(typeof e!=`string`||!e.trim()))try{return JSON.parse(e)}catch{return}}function vo(e,t){if(t&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t;let n=e.data;if(Array.isArray(n))for(let e of n){if(!$(e)||e.type!==`text`)continue;let t=_o(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}let r=e.content;if(Array.isArray(r))for(let e of r){if(!$(e)||e.type!==`text`)continue;let t=_o(e.text);if($(t)&&(Array.isArray(t.files)||Array.isArray(t.previewed)))return t}return t}function yo(e){if(typeof e==`string`&&e.trim())return{path:e};if($(e)){let t=co(e,`path`);return t?{path:t,title:co(e,`title`),description:co(e,`description`),kind:co(e,`kind`),preview:lo(e,`preview`)}:void 0}}function bo(e){let t=new Set,n=[];for(let r of e){if(r.role!==`toolResult`)continue;let e=typeof r.toolName==`string`?r.toolName:``,i=$(r.details)?r.details:void 0,a=typeof r.toolCallId==`string`?r.toolCallId:void 0;if(!(!i&&e!==`present_files`)){if(e===`write_file`||e===`edit_file`){let r=i?co(i,`path`):void 0;if(r){let o=po(r),{addedLines:s,removedLines:c}=fo(i);go(n,t,{source:e,confidence:`high`,path:r,toolCallId:a,kind:o,preview:mo(o),presentation:`inferred`,addedLines:s,removedLines:c})}}else if(e===`present_files`){let e=vo(r,i),o=$(e)&&Array.isArray(e.files)?e.files:[],s=$(e)?co(e,`defaultPreview`):void 0,c=new Set($(e)&&Array.isArray(e.previewed)?e.previewed.filter(e=>typeof e==`string`):[]);for(let e of o){let r=yo(e);if(!r?.path)continue;let i=r.kind??po(r.path);go(n,t,{source:`present_files`,confidence:`high`,path:r.path,title:r.title,description:r.description,toolCallId:a,kind:i,preview:r.preview??(c.has(r.path)||s===r.path||mo(i)),defaultPreview:s===r.path,presentation:`explicit`})}}else if(e===`run_command`&&i){let e=co(i,`command`),r=co(i,`outputFile`);(e||r)&&go(n,t,{source:`run_command`,confidence:`low`,command:e,outputFile:r,toolCallId:a})}}}return n}function xo(e){return e?.length?bo(e):[]}var So=`quickforge:composer-drafts:v1`,Co=100,wo={},To=!1;function Eo(e){return!!(e&&!e.startsWith(`pending-`))}function Do(e){return Eo(e.sessionId)?`session:${e.sessionId}`:e.scope===`project`&&e.projectId?`new:project:${e.projectId}`:`new:global`}function Oo(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!=`object`||Array.isArray(r))continue;let e=r;typeof e.text==`string`&&(t[n]={text:e.text,updatedAt:typeof e.updatedAt==`string`?e.updatedAt:new Date().toISOString(),scope:e.scope===`project`?`project`:e.scope===`global`?`global`:void 0,projectId:typeof e.projectId==`string`?e.projectId:void 0,sessionId:typeof e.sessionId==`string`?e.sessionId:void 0})}return t}function ko(){try{return globalThis.localStorage}catch{return}}function Ao(e,t=Co){return Object.fromEntries(Object.entries(e).filter(([,e])=>e.text.length>0).sort(([,e],[,t])=>t.updatedAt.localeCompare(e.updatedAt)).slice(0,t))}function jo(){let e=ko();if(!e||To)return wo;let t;try{t=e.getItem(So)}catch{return To=!0,wo}try{return Oo(t?JSON.parse(t):void 0)}catch{return wo}}function Mo(e){let t=Ao(e);wo=t;let n=ko();if(!(!n||To))try{Object.keys(t).length===0?n.removeItem(So):n.setItem(So,JSON.stringify(t))}catch{let e=Ao(t,Math.ceil(Co/2));wo=e;try{Object.keys(e).length===0?n.removeItem(So):n.setItem(So,JSON.stringify(e))}catch{To=!0}}}async function No(e){let t=jo()[e];if(!(!t||t.text.length===0))return{text:t.text,attachments:[]}}async function Po(e,t,n){let r=t.text??``;if(r.length===0){await Fo(e);return}let i=jo();i[e]={text:r,updatedAt:new Date().toISOString(),scope:n.scope,projectId:n.scope===`project`?n.projectId:void 0,sessionId:Eo(n.sessionId)?n.sessionId:void 0},Mo(i)}async function Fo(e){let t=jo();Object.prototype.hasOwnProperty.call(t,e)&&(delete t[e],Mo(t))}function Io(e,t,n=200){for(e.delete(t),e.add(t);e.size>n;){let t=e.values().next().value;if(t===void 0)break;e.delete(t)}}function Lo(){let e=0;return{version:()=>e,isCurrent:t=>t===e,invalidate:()=>(e+=1,e)}}var Ro=n();function zo(e){let t=e.state.contextCompaction;if(!t?.summaryMessage)return e.state.messages;let n=e.state.messages,r=Math.min(n.length,Math.max(0,Number(t.compactedUpToIndex)||0));return[t.summaryMessage,...n.slice(r)]}function Bo(e){let t=String(e.length);for(let n of e)n.role===`toolResult`&&(t+=`|${n.toolCallId??``}:${n.toolName??``}`);return t}function Vo({agent:e,onModelSelect:t,revision:n,agentAccessMode:r,workspaceToolsEnabled:i,project:a,projectId:c,chatScope:d=`global`,onAccessModeChange:f,onRollbackFromMessage:p,onRetryFromMessage:h,onCopyAnswer:g,onForkFromMessage:_,onApproveToolCall:y,onRejectToolCall:b,onApproveAutoCompact:x,onRejectAutoCompact:E,onOpenWorkspaceGitChanges:D,onOpenLocalFilePath:A,onArtifactsChange:j,onContextUsageDisplayChange:M,onInitialRenderReady:N,onInitialRenderError:F,restoredDraft:ne,onRestoredDraftConsumed:I,disableFork:re=!1,readOnly:ie=!1,approvalReadOnly:ae=!1,approvalReadOnlyMessage:oe,bypassClientApiKeyCheck:se=!1,allowModelControls:ce=!0,newChatEmptyState:L=!1,showTurnNavigation:le=!0,rollbackConfirmTitle:ue,rollbackConfirmDescription:R,capabilities:z=O}){let B=(0,P.useRef)(null),V=(0,P.useRef)(void 0),de=(0,P.useRef)(void 0),H=(0,P.useRef)(new Map),fe=(0,P.useRef)([]),pe=(0,P.useRef)(void 0),me=(0,P.useRef)(new Set),U=(0,P.useRef)(void 0),he=(0,P.useRef)(null),ge=(0,P.useRef)(!1),_e=(0,P.useRef)(new WeakSet),ve=(0,P.useRef)(``),ye=(0,P.useRef)(``),be=(0,P.useRef)(Lo()),[xe,Se]=(0,P.useState)(),[Ce,we]=(0,P.useState)(!1),W=(0,P.useMemo)(()=>C(z,{readOnly:ie,disableFork:re}),[z,ie,re]),Te=(0,P.useCallback)(()=>we(e=>!e),[]),Ee=(0,P.useCallback)(()=>we(!1),[]);(0,P.useEffect)(()=>{let t=e,n=W.planMode&&Ce;t?.setPlanMode?.(n,n?Ee:void 0),!W.planMode&&Ce&&queueMicrotask(Ee)},[e,Ce,Ee,W.planMode]);let De=(0,P.useCallback)(()=>{U.current&&=(window.clearTimeout(U.current),void 0)},[]),G=(0,P.useCallback)(()=>{he.current?.cancel(),he.current=null,ge.current=!1},[]),K=(0,P.useCallback)(e=>{Io(me.current,e),I?.(e)},[I]),Oe=(0,P.useMemo)(()=>({sessionId:e?.sessionId,scope:d,projectId:c}),[e?.sessionId,d,c]),ke=Do(Oe),Ae=(0,P.useRef)(Oe),je=(0,P.useRef)(ke);(0,P.useEffect)(()=>{Ae.current=Oe,je.current=ke},[Oe,ke]),(0,P.useEffect)(()=>()=>{De(),G()},[De,G]);let Me=(0,P.useCallback)((e,t,n)=>{if(t.text.length===0){Fo(e).catch(e=>l.error(`Failed to clear composer draft:`,e));return}Po(e,t,n).catch(e=>l.error(`Failed to save composer draft:`,e))},[]),Ne=(0,P.useCallback)((e,t,n)=>{U.current&&window.clearTimeout(U.current),U.current=window.setTimeout(()=>{U.current=void 0,Me(e,t,n)},400)},[Me]),Pe=(0,P.useCallback)((e,t=je.current,n=Ae.current)=>{let r=Cn(e);T(r)?H.current.set(t,r):H.current.delete(t),Me(t,r,n)},[Me]),q=(0,P.useRef)({onCopyAnswer:g,onRollbackFromMessage:p,onRetryFromMessage:h,onForkFromMessage:_,onAccessModeChange:f,onTogglePlanMode:Te,onApproveToolCall:y,onRejectToolCall:b,onApproveAutoCompact:x,onRejectAutoCompact:E,onOpenWorkspaceGitChanges:D,onOpenLocalFilePath:A,onArtifactsChange:j,onContextUsageDisplayChange:M,onInitialRenderReady:N,onInitialRenderError:F,onModelSelect:t,agentAccessMode:r,planMode:Ce,workspaceToolsEnabled:i,disableFork:re,readOnly:ie,approvalReadOnly:ae,approvalReadOnlyMessage:oe,allowModelControls:ce,newChatEmptyState:L,bypassClientApiKeyCheck:se,rollbackConfirmTitle:ue,rollbackConfirmDescription:R,capabilities:W,gitBranch:xe});(0,P.useEffect)(()=>{q.current={onCopyAnswer:g,onRollbackFromMessage:p,onRetryFromMessage:h,onForkFromMessage:_,onAccessModeChange:f,onTogglePlanMode:Te,onApproveToolCall:y,onRejectToolCall:b,onApproveAutoCompact:x,onRejectAutoCompact:E,onOpenWorkspaceGitChanges:D,onOpenLocalFilePath:A,onArtifactsChange:j,onContextUsageDisplayChange:M,onInitialRenderReady:N,onInitialRenderError:F,onModelSelect:t,agentAccessMode:r,planMode:Ce,workspaceToolsEnabled:i,disableFork:re,readOnly:ie,approvalReadOnly:ae,approvalReadOnlyMessage:oe,allowModelControls:ce,newChatEmptyState:L,bypassClientApiKeyCheck:se,rollbackConfirmTitle:ue,rollbackConfirmDescription:R,capabilities:W,gitBranch:xe},de.current=ne});let Fe=a?.id??c;(0,P.useEffect)(()=>{let e=!1;return queueMicrotask(()=>{if(!e){if(!Fe){Se(void 0);return}S(Fe).then(t=>{e||Se(t.isGitRepository?t.branch:void 0)}).catch(t=>{e||(l.warn(`Failed to load git branch:`,t),Se(void 0))})}}),()=>{e=!0}},[Fe,n]);let Ie=(0,P.useRef)(null),Le=(0,P.useRef)(null),J=(0,P.useRef)(null),Y=(0,P.useRef)(null),X=(0,P.useRef)(null);(0,P.useEffect)(()=>{let e=!1;return!W.commands||!a?.id?(fe.current=[],()=>{e=!0}):(fetch(`/api/project/commands?projectId=${encodeURIComponent(a.id)}`,{cache:`no-store`}).then(e=>e.ok?e.json():{commands:[]}).then(t=>{e||(fe.current=Array.isArray(t.commands)?t.commands:[],J.current?.())}).catch(()=>{e||(fe.current=[],J.current?.())}),()=>{e=!0})},[a?.id,n,W.commands]);let Re=(0,P.useCallback)((e,t,n,r)=>{if(t.sessionId&&t.sessionId!==n||!T(t)||me.current.has(t.id))return;let i=e.querySelector(`message-editor`),a=i?{text:i.value??i.querySelector(`textarea`)?.value??``,attachments:i.attachments?[...i.attachments]:[]}:H.current.get(r),o=pe.current;if(!(o?.id!==t.id||!T(a??m())||a?.text===o.text))return;be.current.invalidate(),G();let s=e.querySelector(`agent-interface`);he.current=En(e,t,H.current,r,{shouldApply:()=>!me.current.has(t.id)&&e.isConnected&&!!B.current?.contains(e),onApplyStart:()=>{ge.current=!0},onApplyEnd:()=>{ge.current=!1},onApplied:()=>{_e.current.add(e),V.current=t.id,pe.current={id:t.id,text:t.text},K(t.id)},updateComplete:s?.updateComplete})},[G,K]);return(0,P.useEffect)(()=>{if(!B.current||!e)return;let t=be.current,n=_e.current,r=new o;we(!1);let i=e.sessionId,a=je.current,c=Ae.current,d=!1,f,p=!1,h=!1,g=!1,_=e.state.isStreaming,y=!1,b=0,x,S=ot({enabled:!1});ut(()=>S);let C=!1,E=()=>{if(d||C||!S.hasMore())return;let e=r.querySelector(`message-list`),t=r.querySelector(`agent-interface .overflow-y-auto`);if(!e||!t)return;let n=Array.from(e.querySelectorAll(`user-message, assistant-message`)).filter(t=>t.closest(`message-list`)===e),i=t.getBoundingClientRect().top,a=-1,o=0;for(let e=0;e<n.length;e++){let t=n[e].getBoundingClientRect();if(t.bottom>i){a=e,o=t.top;break}}let s=t.scrollTop,c=S.loadMore();if(!c)return;C=!0,e.messages=c;let l=()=>{window.requestAnimationFrame(()=>{if(C=!1,!d){if(a>=0){let n=Array.from(e.querySelectorAll(`user-message, assistant-message`))[a];n&&(t.scrollTop=s+(n.getBoundingClientRect().top-o))}J.current?.()}})};(e.updateComplete??Promise.resolve()).then(l,l)},D=$e({panel:r,onReachTop:()=>{E()},onAutoScrollEnabled:()=>{S.resetToTail()}});Le.current=D;let O=null,A=ft({panel:r,getCustomCommands:()=>fe.current,getComposerDrafts:()=>H.current,sessionId:a,setComposerDrafts:e=>{H.current=e},restoreDraftIntoComposer:e=>{Tn(r,e,H.current,a),Ne(a,e,c)}}),j=bt({panel:r,enabled:W.capabilitySuggestions,restoreDraftIntoComposer:e=>{Tn(r,e,H.current,a),Ne(a,e,c)}}),M=v({panel:r,getSystemPrompt:()=>e.state.systemPrompt,getMessages:()=>e.state.messages,getEffectiveMessages:()=>zo(e),getContextWindow:()=>e.state.model?.contextWindow??0,getTools:()=>e.state.tools,getMaxTokens:()=>e.state.model?.maxTokens,getServerContextUsage:()=>e.state.contextUsage??null,getIsCompacted:()=>!!e.state.contextCompaction?.summaryMessage,getGitBranch:()=>q.current.gitBranch,onGitBranchClick:()=>q.current.onOpenWorkspaceGitChanges?.(),renderInline:!1,renderModelRing:ee().showContextUsage,onDisplayChange:t=>q.current.onContextUsageDisplayChange?.(e.sessionId,t)}),N=ir({panel:r,getAcpSession:()=>e.state.acpSession??null}),P=()=>{if(ge.current)return;g=!0,t.invalidate(),G();let e=de.current;e&&(!e.sessionId||e.sessionId===i)&&K(e.id)},F=e=>{P(),p=!1;let t=r.querySelector(`message-editor`),n={text:e,attachments:t?.attachments?[...t.attachments]:[]};T(n)?(H.current.set(a,n),Ne(a,n,c)):(H.current.delete(a),De(),Fo(a).catch(e=>l.error(`Failed to clear composer draft:`,e)))},ne=e=>{P(),p=!1;let t=r.querySelector(`message-editor`),n=t?.querySelector(`textarea`),i={text:t?.value??n?.value??``,attachments:e?[...e]:[]};T(i)?(H.current.set(a,i),Ne(a,i,c)):(H.current.delete(a),De(),Fo(a).catch(e=>l.error(`Failed to clear composer draft:`,e)));let o=r.querySelector(`agent-interface`);o?.requestUpdate?.(),window.requestAnimationFrame(()=>J.current?.()),o?.updateComplete?.then(()=>J.current?.())},I=()=>{e.state.isStreaming?r.dataset.quickforgeAgentStreaming=`true`:delete r.dataset.quickforgeAgentStreaming},re=!1,ie=()=>{if(d||re)return;re=!0;let t=()=>{if(re=!1,d)return;let t=xo(e.state.messages),n=JSON.stringify(t.map(e=>[e.source,e.path,e.command,e.outputFile,e.confidence,e.preview,e.defaultPreview,e.addedLines,e.removedLines]));n!==ve.current&&(ve.current=n,q.current.onArtifactsChange?.(t))};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(t,{timeout:500}):t()},ae=()=>{if(d||!r.isConnected)return;I();let t=()=>S.isEnabled()?S.getWindowMessages():e.state.messages,n=S.isEnabled()?S.getWindowStart():0,i=q.current,a=Bo(e.state.messages);a!==ye.current&&(ye.current=a,ie());try{Ha({panel:r,getMessages:t,messageIndexOffset:n,isStreaming:()=>e.state.isStreaming,onCopyAnswer:i.onCopyAnswer,onRollbackFromMessage:i.onRollbackFromMessage,onRetryFromMessage:i.onRetryFromMessage,onForkFromMessage:i.onForkFromMessage,onOpenLocalFilePath:i.onOpenLocalFilePath,disableFork:!i.capabilities.forkFromMessage,allowRollback:i.capabilities.rollback,allowRetry:i.capabilities.retry,readOnly:i.readOnly,enableTerminalCommandActions:!i.readOnly,rollbackConfirmTitle:i.rollbackConfirmTitle,rollbackConfirmDescription:i.rollbackConfirmDescription}),$n({panel:r,getMessages:t,getContextCompaction:()=>i.capabilities.compaction?e.state.contextCompaction??null:null,messageIndexOffset:n}),Za({panel:r,getMessages:t,isStreaming:()=>e.state.isStreaming,isActive:_})}catch(e){l.warn(`Failed to decorate chat messages:`,e)}try{Qa({panel:r,isStreaming:()=>e.state.isStreaming,abort:()=>e.abort(),agentAccessMode:i.agentAccessMode,harness:e.harness,getAcpSession:()=>e.state.acpSession??null,onOpenCodeConfigOptionChange:(t,n)=>{e.setConfigOption(t,n).catch(e=>{l.error(`Failed to update OpenCode config option:`,e)})},onOpenCodeModeChange:t=>{e.setMode(t).catch(e=>{l.error(`Failed to update OpenCode mode:`,e)})},planMode:i.planMode,workspaceToolsEnabled:i.workspaceToolsEnabled,readOnly:i.readOnly,allowModelControls:i.allowModelControls&&i.capabilities.modelSelection,planModeEnabled:i.capabilities.planMode,accessModeEnabled:i.capabilities.accessMode,commandSuggestionsEnabled:i.capabilities.commands,capabilitySuggestionsEnabled:i.capabilities.capabilitySuggestions,attachmentsEnabled:i.capabilities.attachments,onAccessModeChange:i.onAccessModeChange,onTogglePlanMode:i.onTogglePlanMode,onInput:F,onFilesChange:ne,removeCommandSuggestions:A.remove,updateCommandSuggestions:A.update,setupCommandTextareaHandler:A.setupTextareaHandler,removeCapabilitySuggestions:j.remove,updateCapabilitySuggestions:j.update,setupCapabilityTextareaHandler:j.setupTextareaHandler,insertBuiltinPluginMention:j.insertBuiltinPluginMention,availablePluginRows:j.availablePluginRows,onBeforeSend:t=>{w();let n=i.capabilities.capabilitySuggestions?j.consumeSelectedCapabilities(t):[];e.setNextPromptCapabilities?.(n)}})}catch{}let o=Y.current??(()=>{let t=e.state.pendingToolApproval;return t?{...t,sessionId:e.sessionId}:null})();if(o&&o.sessionId===e.sessionId&&typeof o.toolCallId==`string`&&typeof o.toolName==`string`){let t=o.toolCallId;Un({panel:r,tone:`warning`,disabled:i.approvalReadOnly,disabledReason:i.approvalReadOnlyMessage,onApprove:async()=>{await q.current.onApproveToolCall(t),Y.current=null,e.state.pendingToolApproval=null,Wn(r)},onReject:async()=>{await q.current.onRejectToolCall(t),Y.current=null,e.state.pendingToolApproval=null,Wn(r)}},o.toolName,t,o.args,o.source)}else{let n=X.current??(()=>{let t=e.state.pendingAutoCompactApproval;return t?{...t,sessionId:e.sessionId}:null})();if(n&&n.sessionId===e.sessionId){let a=n.approvalId,o=!i.onApproveAutoCompact||!i.onRejectAutoCompact,s=i.approvalReadOnly||o,c=i.approvalReadOnly?i.approvalReadOnlyMessage:o?k(`autoCompactApprovalUnavailable`):void 0;Un({panel:r,tone:`info`,copy:{status:k(`autoCompactApprovalStatus`),title:k(`autoCompactApprovalTitle`),risk:k(`autoCompactApprovalRisk`,{keepRecentTurns:n.keepRecentTurns??3}),approve:k(`autoCompactApprovalAccept`),reject:k(`autoCompactApprovalReject`)},disabled:s,disabledReason:c,getMessages:t,keepRecentTurns:n.keepRecentTurns??3,onApprove:async()=>{let t=q.current.onApproveAutoCompact;if(!t)throw Error(k(`autoCompactApprovalUnavailable`));await t(a),X.current=null,e.state.pendingAutoCompactApproval=null,Wn(r)},onReject:async()=>{let t=q.current.onRejectAutoCompact;if(!t)throw Error(k(`autoCompactApprovalUnavailable`));await t(a),X.current=null,e.state.pendingAutoCompactApproval=null,Wn(r)}},k(`contextManagement`),a,{percent:n.usage?.percent??0,threshold:n.thresholdPercent??0,keepRecentTurns:n.keepRecentTurns??3,summary:k(`autoCompactApprovalWaiting`,{percent:n.usage?.percent??0,threshold:n.thresholdPercent??0}),description:k(`autoCompactApprovalPreview`,{keepRecentTurns:n.keepRecentTurns??3})})}else Wn(r)}i.capabilities.contextUsage?M.update():M.cleanup(),e.harness===`opencode`&&N.update(),O?.update(),D.setup(),D.isEnabled&&(S.resetToTail(),D.scheduleScrollToBottom())},oe=!1,se,ce=!1,L,ue=()=>{L===void 0&&(L=window.requestAnimationFrame(()=>{L=void 0,ce=!1}))},R=()=>{if(!d){ce=!0;try{ae()}finally{ue()}}},z=()=>{oe||(oe=!0,se=window.requestAnimationFrame(()=>{se=void 0,oe=!1,R()}))};Ie.current=R;let pe=()=>r.querySelector(`agent-interface`),me=()=>{y||(y=!0,window.requestAnimationFrame(()=>{if(y=!1,d)return;I();let e=pe();e?.requestUpdate?.(),(e?.updateComplete??Promise.resolve()).then(()=>{d||R()}),D.isEnabled&&D.scheduleScrollToBottom()}))};J.current=z;let U=()=>{let e=++b;r.dataset.quickforgeProcessHandoff=String(e);let t=pe();t?.requestUpdate?.(),J.current?.(),window.requestAnimationFrame(()=>{!d&&b===e&&J.current?.()});let n=()=>{d||b!==e||(delete r.dataset.quickforgeProcessHandoff,J.current?.(),window.requestAnimationFrame(()=>{!d&&b===e&&J.current?.()}))};(t?.updateComplete??Promise.resolve()).then(n,n)};r.setAgent(e,{onApiKeyRequired:!q.current.capabilities.clientApiKeyCheck||q.current.bypassClientApiKeyCheck?async()=>!0:t=>u(e.state.model)?Promise.resolve(!0):s.prompt(t),onBeforeSend:()=>{t.invalidate(),G();let e=de.current;e&&(!e.sessionId||e.sessionId===i)&&K(e.id),De(),p=!0,A.remove(),H.current.delete(a),Fo(a).catch(e=>l.error(`Failed to clear composer draft:`,e)),D.enable()},onModelSelect:q.current.onModelSelect,toolsFactory:()=>Qe(e.state.tools)}).then(()=>{if(d)return;let e=de.current,n=t.version(),o=o=>{if(!(d||!t.isCurrent(n)))if(e&&V.current!==e.id)Re(r,e,i,a);else{let e=o??H.current.get(a)??m();T(e)||(h=!0),G();let i=r.querySelector(`agent-interface`);he.current=En(r,e,H.current,a,{shouldApply:()=>!d&&t.isCurrent(n)&&r.isConnected&&!!B.current?.contains(r),onApplyStart:()=>{ge.current=!0},onApplyEnd:()=>{ge.current=!1},onApplied:()=>{h=!0,_e.current.add(r)},updateComplete:i?.updateComplete})}};if(e&&V.current!==e.id)o();else{let e=H.current.get(a);e?o(e):No(a).then(e=>o(e)).catch(e=>l.error(`Failed to load composer draft:`,e))}f=new MutationObserver(()=>{ce||z()}),f.observe(r,{childList:!0,subtree:!0}),window.requestAnimationFrame(()=>{d||R()});let s=pe(),c=()=>{d||(x=te(()=>{d||q.current.onInitialRenderReady?.(i)}))};(s?.updateComplete??Promise.resolve()).then(c,c)},e=>{d||(l.error(`Failed to initialize chat panel:`,e),q.current.onInitialRenderError?.(i,e))}),B.current.replaceChildren(r),le&&(O=so({host:B.current,panel:r,getMessages:()=>e.state.messages,isStreaming:()=>e.state.isStreaming,windowLayer:S,beginProgrammaticScroll:D.beginProgrammaticScroll,onWindowChanged:()=>J.current?.()}));let xe=e.subscribe(t=>{if(t.type===`agent_start`&&(b+=1,delete r.dataset.quickforgeProcessHandoff,_=!0,I(),J.current?.(),D.enable(),Y.current?.sessionId===e.sessionId&&(Y.current=null),X.current?.sessionId===e.sessionId&&(X.current=null)),t.type===`message_start`||t.type===`message_update`||t.type===`message_end`||t.type===`turn_end`||t.type===`agent_end`){I();let e=t.message;t.type===`message_start`&&e?.role===`assistant`&&(b+=1,delete r.dataset.quickforgeProcessHandoff),(t.type===`message_update`||e?.role===`assistant`)&&(_=!1),J.current?.(),t.type===`message_end`&&e?.role===`assistant`&&U(),D.isEnabled&&D.scheduleScrollToBottom()}if(t.type===`messages_replaced`){let e=de.current;e&&V.current===e.id&&Re(r,e,i,a)}let n=t.type;if(n===`tool_execution_start`){let n=t,r=Y.current,i=n.sessionId??e.sessionId;r&&r.sessionId===e.sessionId&&i===e.sessionId&&n.toolCallId===r.toolCallId&&(Y.current=null,e.state.pendingToolApproval?.toolCallId===n.toolCallId&&(e.state.pendingToolApproval=null),J.current?.())}if((n===`tool_execution_start`||n===`tool_execution_update`||n===`tool_execution_end`)&&me(),(n===`acp_session_update`||n===`acp_session_usage_update`)&&J.current?.(),t.type===`agent_end`&&(_=!1,I(),U(),Y.current?.sessionId===e.sessionId&&(Y.current=null,J.current?.()),X.current?.sessionId===e.sessionId&&(X.current=null,J.current?.())),(n===`auto_compact_completed`||n===`auto_compact_failed`)&&(X.current?.sessionId===e.sessionId&&(X.current=null),e.state.pendingAutoCompactApproval=null,J.current?.()),n===`auto_compact_completed`||n===`messages_replaced`){Pi(r);let e=pe();e?.requestUpdate?.(),J.current?.(),window.requestAnimationFrame(()=>J.current?.()),e?.updateComplete?.then(()=>J.current?.())}if(n===`auto_compact_failed`&&l.warn(k(`autoCompactFailed`)),t.type===`tool_approval_required`){let e=t;Y.current={toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,sessionId:e.sessionId,source:e.source},J.current?.()}if(t.type===`auto_compact_approval_required`){let e=t;X.current={approvalId:e.approvalId,usage:e.usage,thresholdPercent:e.thresholdPercent,keepRecentTurns:e.keepRecentTurns,sessionId:e.sessionId},J.current?.()}});return()=>{d=!0,t.invalidate(),G(),De(),x?.(),p?(H.current.delete(a),Fo(a).catch(e=>l.error(`Failed to clear composer draft:`,e))):(h||g||n.has(r))&&(wn(r,H.current,a),Pe(r,a,c)),A.remove(),A.cleanupTextareaHandler(),j.remove(),j.cleanupTextareaHandler(),M.cleanup(),N.cleanup(),O?.cleanup(),D.cleanup(),Le.current=null,dt(S),xe(),f?.disconnect(),se!==void 0&&window.cancelAnimationFrame(se),L!==void 0&&window.cancelAnimationFrame(L),Ie.current=null,r.remove()}},[e,le,W.capabilitySuggestions,De,G,K,Pe,Re,Ne]),(0,P.useEffect)(()=>{let e=B.current;e&&(e.classList.toggle(`quickforge-chat-panel-empty-host`,L),e.dataset.quickforgeEmptyChat=L?`true`:`false`)},[L]),(0,P.useEffect)(()=>{Ie.current?.(),(B.current?.querySelector(`agent-interface`))?.requestUpdate?.()},[r,Ce,i,xe,re,ie,ae,oe,ce,z,n]),(0,P.useEffect)(()=>{let t=de.current;if(!t||!B.current)return;let n=e?.sessionId??``;if(t.sessionId&&t.sessionId!==n||me.current.has(t.id))return;let r=B.current.querySelector(`pi-chat-panel`);r&&Re(r,t,n,je.current)},[ne,e,Re]),(0,Ro.jsx)(`div`,{ref:B,className:`quickforge-chat-panel-host min-h-0 flex-1 overflow-hidden`})}export{Vo as ChatPanelHost};