@openhands/agent-canvas 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{active-backend-context-B8rMv0X9.js → active-backend-context-DHhm10VS.js} +1 -1
- package/build/assets/{add-backend-modal-CxC7BNEc.js → add-backend-modal-BoMkMyLB.js} +1 -1
- package/build/assets/{agent-profiles-settings-BJb8YXR1.js → agent-profiles-settings-CYPloKYK.js} +1 -1
- package/build/assets/{agent-server-compatibility-BWN-EIQn.js → agent-server-compatibility-C0MtTTwb.js} +1 -1
- package/build/assets/{agent-server-conversation-service.api-DSPIkMwJ.js → agent-server-conversation-service.api-lzc8dabY.js} +3 -3
- package/build/assets/{agent-settings-CgCnqaAA.js → agent-settings-GwiXe_6k.js} +1 -1
- package/build/assets/agent-settings-OdsyI2gX.js +1 -0
- package/build/assets/{api-key-entry-screen-iZc7n8AI.js → api-key-entry-screen-2gsoZAOK.js} +1 -1
- package/build/assets/{app-settings-B5zyipxJ.js → app-settings-CD9euh81.js} +1 -1
- package/build/assets/{automation-detail-CZsu2CoM.js → automation-detail-Bn8q0AG3.js} +1 -1
- package/build/assets/{automation-export-BwRX6H32.js → automation-export-Djc8Tf0M.js} +1 -1
- package/build/assets/{automations-list-lHAVzMoA.js → automations-list-Dtiolk1h.js} +1 -1
- package/build/assets/{backend-form-modal-RGcu909r.js → backend-form-modal-B8GtBA-J.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BSfN0AZA.js → backend-synced-settings-badge-yVh6Kf4E.js} +1 -1
- package/build/assets/{client-source-BZK8vRs2.js → client-source-CtQjJEy6.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-Zcv57hfT.js → cloud-funnel-analytics-uzzLlLuj.js} +1 -1
- package/build/assets/{condenser-settings-BGlWn93P.js → condenser-settings-Q1rHh4Qe.js} +1 -1
- package/build/assets/conversation-B8d8_Upd.js +1 -0
- package/build/assets/{conversation-BoCYx8n2.js → conversation-Lmqm6VJC.js} +20 -20
- package/build/assets/conversation-panel-B8n40Swu.js +1 -0
- package/build/assets/{conversation-service.api-_f9GlIEi.js → conversation-service.api-D8QU-BiL.js} +1 -1
- package/build/assets/{entry.client-DNlPGxsu.js → entry.client-Dnnak-Hq.js} +1 -1
- package/build/assets/{extensions-hub-CCbLA7IM.js → extensions-hub-DqvwvpCi.js} +1 -1
- package/build/assets/{extensions-navigation-CPNjMNvR.js → extensions-navigation-BMc9Nluv.js} +1 -1
- package/build/assets/{files-tab-y4K7EXBO.js → files-tab-BAkaV4aO.js} +1 -1
- package/build/assets/{git-provider-icon-ITvsH4Ko.js → git-provider-icon-xvbukHaT.js} +1 -1
- package/build/assets/{home-BwbeOWwU.js → home-D01kSnmo.js} +1 -1
- package/build/assets/home-NZO2bF4N.js +1 -0
- package/build/assets/index-home-BsI6i0TC.js +1 -0
- package/build/assets/{install-server-modal-Qk1gwyI8.js → install-server-modal-BYjqoRyX.js} +1 -1
- package/build/assets/{launch-CAGavYl-.js → launch-DlXspDku.js} +1 -1
- package/build/assets/{lesson-plan-DMCPdtrf.js → lesson-plan-cNUjpdFx.js} +1 -1
- package/build/assets/{llm-not-configured-banner-C1ktyb3C.js → llm-not-configured-banner-DUPyoFIZ.js} +7 -7
- package/build/assets/{llm-settings-DFkJQr_w.js → llm-settings-Cs_iieFY.js} +1 -1
- package/build/assets/llm-settings-J2ke2foG.js +1 -0
- package/build/assets/{llm-subscription-service-Casyzgn1.js → llm-subscription-service-C0zN0-rH.js} +1 -1
- package/build/assets/{manage-backends-modal-CKQ46rvw.js → manage-backends-modal-nMoCZ2a0.js} +1 -1
- package/build/assets/{manifest-03478bbf.js → manifest-f1b46f62.js} +1 -1
- package/build/assets/{mcp-BapoJsDc.js → mcp-kZM-cAZw.js} +1 -1
- package/build/assets/{messages-CUBFMY5o.js → messages-CJAv5n4j.js} +1 -1
- package/build/assets/{model-selector-DJrMrFAr.js → model-selector-D51W2Q9b.js} +1 -1
- package/build/assets/{onboarding-6NMkdNxV.js → onboarding-Dx8n8HFr.js} +1 -1
- package/build/assets/{onboarding-modal-Q4AnpIdg.js → onboarding-modal-Bxuxpfdz.js} +1 -1
- package/build/assets/{organization-service.api-vrRNwOma.js → organization-service.api-Da2jiuBS.js} +1 -1
- package/build/assets/{path-utils-PNfCKQDV.js → path-utils-D53ZHUQU.js} +1 -1
- package/build/assets/{planner-tab-ByOw1he8.js → planner-tab-BM-pKx0z.js} +1 -1
- package/build/assets/{plugins-management-service-B75jyC56.js → plugins-management-service-DISfOL13.js} +1 -1
- package/build/assets/{profiles-service.api-BQTklD5D.js → profiles-service.api-DWetW2TL.js} +1 -1
- package/build/assets/{providers-DfTB2gPd.js → providers-C7lMslCi.js} +1 -1
- package/build/assets/{proxy-B3tCGf0X.js → proxy-G4ce0fnQ.js} +1 -1
- package/build/assets/{recommended-automations-launcher-Bj7PuHY1.js → recommended-automations-launcher-BWRRvMPE.js} +1 -1
- package/build/assets/{root-layout-DfYVlcRG.js → root-layout-ClEl-JlJ.js} +2 -2
- package/build/assets/{root-CDnuTToz.js → root-oT83qVlk.js} +2 -2
- package/build/assets/{schema-field-CUwk4wrQ.js → schema-field-CwdqUOnE.js} +1 -1
- package/build/assets/{sdk-section-page-DLLNrYjI.js → sdk-section-page-Cwj0T4gF.js} +1 -1
- package/build/assets/{secrets-service-CvyPWJhg.js → secrets-service-Ch7RH8eH.js} +1 -1
- package/build/assets/{secrets-settings-CHy72A5C.js → secrets-settings-Bc_pBX6F.js} +1 -1
- package/build/assets/{settings-index-BKDl2CQ-.js → settings-index-BzSIM1-N.js} +1 -1
- package/build/assets/{settings-modal-DeK11CyT.js → settings-modal-BnZ7mMu7.js} +1 -1
- package/build/assets/{settings-B9S8UVQr.js → settings-n9a395O0.js} +1 -1
- package/build/assets/{settings-service.api-DXk5TdeJ.js → settings-service.api-DPTFyRXL.js} +1 -1
- package/build/assets/{shared-conversation-9atDzTR4.js → shared-conversation-CIDDti9I.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-giMMZctn.js → sidebar-mobile-menu-toggle-CTX7J4wM.js} +1 -1
- package/build/assets/{skills-plugins-Tropusio.js → skills-plugins-HZEbNDmX.js} +1 -1
- package/build/assets/{skills-settings-BvzBBCWk.js → skills-settings-BdqijFlC.js} +1 -1
- package/build/assets/{telemetry-C5JMEfqB.js → telemetry-SHxpVxk8.js} +1 -1
- package/build/assets/{terminal-DRXt2Lr4.js → terminal-BDTa1HEr.js} +1 -1
- package/build/assets/{use-acp-credential-form-Bm8qXdlc.js → use-acp-credential-form-DHd_Id-q.js} +1 -1
- package/build/assets/{use-activate-agent-profile-DlykqEfN.js → use-activate-agent-profile-BRDdSwQ0.js} +1 -1
- package/build/assets/{use-active-agent-profile-hI-x-UBa.js → use-active-agent-profile-BMDTXsay.js} +1 -1
- package/build/assets/{use-active-conversation-2qeez40F.js → use-active-conversation-BbeVgedA.js} +1 -1
- package/build/assets/{use-agent-profiles-0pr5bLS7.js → use-agent-profiles-Dn_S_Tkz.js} +1 -1
- package/build/assets/{use-agent-state-C6peDXUm.js → use-agent-state-5qM3X30V.js} +1 -1
- package/build/assets/{use-backends-health-CLHPitJM.js → use-backends-health-BagmAE_W.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-Ck_bsNbH.js → use-can-manage-org-profiles-CyYqfzeo.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-DUCSxNjY.js → use-cloud-current-user-id-BwMX7jHW.js} +1 -1
- package/build/assets/{use-config-B5r8erYt.js → use-config-B39iHYFi.js} +1 -1
- package/build/assets/{use-create-conversation-r1JHfKO5.js → use-create-conversation-CkKUQVbP.js} +1 -1
- package/build/assets/{use-create-secret-Cf2N11d2.js → use-create-secret-DEgM0MXZ.js} +1 -1
- package/build/assets/{use-handle-plan-click-CsAW3FlH.js → use-handle-plan-click-BFcE0Xms.js} +1 -1
- package/build/assets/{use-llm-profiles-Dr5__SlZ.js → use-llm-profiles-CgRtnj74.js} +1 -1
- package/build/assets/{use-plugins-marketplace-BplU65ae.js → use-plugins-marketplace-DOJp9rlE.js} +1 -1
- package/build/assets/use-runtime-is-ready-ziHQvXZQ.js +1 -0
- package/build/assets/{use-save-agent-profile-RqUGqTv6.js → use-save-agent-profile-i4FcEP98.js} +1 -1
- package/build/assets/{use-save-settings-Chvzeu2s.js → use-save-settings-DiDEbIJw.js} +1 -1
- package/build/assets/{use-settings-CyxSlyTQ.js → use-settings-BeJap6YL.js} +1 -1
- package/build/assets/{use-settings-nav-items-zEkSO_Bf.js → use-settings-nav-items-D5JJjFHJ.js} +1 -1
- package/build/assets/{use-skills-xrVoKYrF.js → use-skills-Blpg2BqE.js} +1 -1
- package/build/assets/{use-tracking-D2Qg5Lpd.js → use-tracking-DFoPQUSU.js} +1 -1
- package/build/assets/{use-user-conversation-CnE4zhOA.js → use-user-conversation-BrN2xeQU.js} +1 -1
- package/build/assets/{verification-settings-CfkrXoSa.js → verification-settings-C8KzAdAX.js} +1 -1
- package/build/index.html +4 -4
- package/config/defaults.json +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +19 -3
- package/dist/hooks/query/use-task-polling.js +36 -35
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +1 -1
- package/dist/routes/conversation.js.map +1 -1
- package/package.json +1 -1
- package/build/assets/agent-settings-DDkSavD7.js +0 -1
- package/build/assets/conversation-DgHqMjnY.js +0 -1
- package/build/assets/conversation-panel-78Rxh_-I.js +0 -1
- package/build/assets/home-DKPGQ5P3.js +0 -1
- package/build/assets/index-home-Bko2Itv5.js +0 -1
- package/build/assets/llm-settings-BBsZFi9l.js +0 -1
- package/build/assets/use-runtime-is-ready-vCFOcLFa.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{I as r,L as i,M as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~jkpzbynd-CkpBIhVe.js";import{t as o}from"./useTranslation-Cbf5AGg_.js";import{t as s}from"./declaration-BGsHjPEW.js";import{t as c}from"./utils-DB9LsAzA.js";import{t as l}from"./modal-backdrop-zVwfOJZr.js";import{r as u,t as d}from"./modal-body-Cc2zp0xb.js";import{t as f}from"./brand-button-B1izLAdR.js";import{t as p}from"./modal-close-button-BcIBUdSq.js";import{t as m}from"./settings-input-BsgQWS5R.js";import{n as h}from"./use-create-conversation-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{I as r,L as i,M as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~jkpzbynd-CkpBIhVe.js";import{t as o}from"./useTranslation-Cbf5AGg_.js";import{t as s}from"./declaration-BGsHjPEW.js";import{t as c}from"./utils-DB9LsAzA.js";import{t as l}from"./modal-backdrop-zVwfOJZr.js";import{r as u,t as d}from"./modal-body-Cc2zp0xb.js";import{t as f}from"./brand-button-B1izLAdR.js";import{t as p}from"./modal-close-button-BcIBUdSq.js";import{t as m}from"./settings-input-BsgQWS5R.js";import{n as h}from"./use-create-conversation-CkKUQVbP.js";import{r as g}from"./typography-CzfoD9DY.js";import{n as _,t as v}from"./vendor~launch-_Km3J77E.js";var y=e(t(),1),b=n();function x({pluginIndex:e,paramKey:t,paramValue:n,onParameterChange:r}){let i=`plugin-${e}-param-${t}`;return typeof n==`boolean`?(0,b.jsxs)(`label`,{htmlFor:i,className:`flex w-full cursor-pointer items-center gap-2.5`,children:[(0,b.jsx)(`input`,{id:i,"data-testid":i,type:`checkbox`,checked:n,onChange:n=>r(e,t,n.target.checked),className:`h-4 w-4 shrink-0 rounded`}),(0,b.jsx)(`span`,{className:`text-sm`,children:t})]}):typeof n==`number`?(0,b.jsx)(m,{testId:i,name:`plugin-${e}-param-${t}`,type:`number`,label:t,value:String(n),className:`w-full`,onChange:n=>r(e,t,n===``?0:parseFloat(n)||0)}):(0,b.jsx)(m,{testId:i,name:`plugin-${e}-param-${t}`,type:`text`,label:t,value:String(n??``),className:`w-full`,onChange:n=>r(e,t,n)})}function S({plugin:e,originalIndex:t,isExpanded:n,onToggle:r,getPluginDisplayName:i,onParameterChange:a}){let{t:c}=o(`openhands`);return e.parameters&&Object.keys(e.parameters).length>0?(0,b.jsxs)(`div`,{className:`rounded-lg border border-[var(--oh-border)] bg-tertiary`,children:[(0,b.jsxs)(`button`,{type:`button`,onClick:r,className:`flex w-full items-center justify-between px-4 py-3 text-left hover:bg-base-tertiary rounded-t-lg cursor-pointer`,"data-testid":`plugin-section-${t}`,children:[(0,b.jsx)(g.Text,{className:`text-base font-normal`,children:i(e)}),n?(0,b.jsx)(v,{className:`h-5 w-5 text-white`}):(0,b.jsx)(_,{className:`h-5 w-5 text-white`})]}),n&&(0,b.jsxs)(`div`,{className:`border-t border-[var(--oh-border-subtle)] px-4 pb-3`,children:[e.ref&&(0,b.jsxs)(`div`,{className:`mb-2 text-sm text-white`,children:[c(s.LAUNCH$PLUGIN_REF),` `,e.ref]}),e.repo_path&&(0,b.jsxs)(`div`,{className:`mb-2 text-sm text-white`,children:[c(s.LAUNCH$PLUGIN_PATH),` `,e.repo_path]}),(0,b.jsx)(`div`,{className:`flex flex-col gap-4`,children:Object.entries(e.parameters||{}).map(([e,n])=>(0,b.jsx)(x,{pluginIndex:t,paramKey:e,paramValue:n,onParameterChange:a},e))})]})]}):null}function C({plugins:e,message:t,isLoading:n=!1,onStartConversation:r,onClose:i}){let{t:a}=o(`openhands`),[m,h]=y.useState(e),[_,v]=y.useState(()=>{let t={};return e.forEach((e,n)=>{e.parameters&&Object.keys(e.parameters).length>0&&(t[n]=!0)}),t}),[x,C]=y.useState(!1),w=m.filter(e=>e.parameters&&Object.keys(e.parameters).length>0),T=m.filter(e=>!e.parameters||Object.keys(e.parameters).length===0),E=e=>{v(t=>({...t,[e]:!t[e]}))},D=(e,t,n)=>{h(r=>{let i=[...r],a={...i[e]};return a.parameters={...a.parameters,[t]:n},i[e]=a,i})},O=e=>{let{source:t,repo_path:n}=e;if(n){let e=n.split(`/`);return e[e.length-1]}if(t.startsWith(`github:`))return t.replace(`github:`,``);if(t.includes(`/`)){let e=t.split(`/`);return e[e.length-1].replace(`.git`,``)}return t},k=e=>{let{source:t}=e;return t.startsWith(`github:`)?t.replace(`github:`,``):t.includes(`github.com/`)&&t.split(`github.com/`)[1]?.replace(`.git`,``)||t},A=()=>{let e=m.map(e=>k(e));return[...new Set(e)]},j=()=>{r(m,t)},M=m.length===1?O(m[0]):a(s.LAUNCH$MODAL_TITLE_GENERIC);return(0,b.jsx)(l,{onClose:i,children:(0,b.jsxs)(`div`,{"data-testid":`plugin-launch-modal`,className:c(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)] max-h-[80vh]`,u(`md`),d),children:[(0,b.jsx)(p,{onClose:i,testId:`close-button`}),(0,b.jsxs)(g.H2,{className:`pr-6`,children:[a(s.LAUNCH$MODAL_TITLE),` `,M]}),t&&(0,b.jsx)(`p`,{className:`text-sm text-white`,children:t}),(0,b.jsxs)(`div`,{className:`flex-1 overflow-y-auto custom-scrollbar`,children:[w.length>0&&(0,b.jsx)(`div`,{className:`space-y-3`,children:m.map((e,t)=>(0,b.jsx)(S,{plugin:e,originalIndex:t,isExpanded:!!_[t],onToggle:()=>E(t),getPluginDisplayName:O,onParameterChange:D},`plugin-${t}`))}),T.length>0&&(0,b.jsxs)(`div`,{className:c(w.length>0&&`mt-4`),children:[(0,b.jsx)(g.H3,{className:`mb-2 text-white`,children:w.length>0?a(s.LAUNCH$ADDITIONAL_PLUGINS):a(s.LAUNCH$PLUGINS)}),(0,b.jsx)(`div`,{className:`space-y-2`,children:T.map((e,t)=>(0,b.jsxs)(`div`,{className:`rounded-md bg-tertiary px-3 py-2 text-sm`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:O(e)}),(0,b.jsxs)(`div`,{className:`text-xs text-white mt-1`,children:[k(e),e.repo_path&&(0,b.jsxs)(`span`,{className:`ml-1`,children:[`/ `,e.repo_path]}),e.ref&&(0,b.jsxs)(`span`,{className:`ml-2`,children:[`@ `,e.ref]})]})]},`simple-plugin-${t}`))})]})]}),(0,b.jsxs)(`div`,{className:`pt-4 border-t border-[var(--oh-border-subtle)]`,children:[(0,b.jsxs)(`div`,{className:`flex items-start gap-3 mb-4`,children:[(0,b.jsx)(`input`,{id:`trust-checkbox`,"data-testid":`trust-checkbox`,type:`checkbox`,checked:x,onChange:e=>C(e.target.checked),className:`mt-1 h-4 w-4 flex-shrink-0`}),(0,b.jsx)(`label`,{htmlFor:`trust-checkbox`,className:`text-sm text-white`,children:a(s.LAUNCH$TRUST_SKILL_CHECKBOX,{sources:A().join(`, `),interpolation:{escapeValue:!1}})})]}),(0,b.jsx)(`div`,{className:`flex w-full justify-end mt-8`,children:(0,b.jsx)(f,{testId:`start-conversation-button`,type:`button`,variant:`primary`,onClick:j,isDisabled:n||!x,className:`px-4`,children:a(n?s.LAUNCH$STARTING:s.LAUNCH$START_CONVERSATION)})})]})]})})}function w(e){if(e)return e.replace(/<[^>]*>/g,``).slice(0,500)||void 0}function T(e){let t=e.get(`plugins`);if(t)try{let n=atob(t),r=JSON.parse(n);if(!Array.isArray(r))return{plugins:[],error:`invalid_format`};let i=[];for(let e of r){if(typeof e!=`object`||!e||typeof e.source!=`string`)return{plugins:[],error:`invalid_format`};i.push({source:e.source,ref:e.ref??null,repo_path:e.repo_path??null,parameters:e.parameters??null})}return i.length===0?{plugins:[],error:`no_plugins`}:{plugins:i,message:w(e.get(`message`))}}catch{return{plugins:[],error:`invalid_format`}}let n=e.get(`plugin_source`);return n?{plugins:[{source:n,ref:e.get(`plugin_ref`)??null,repo_path:e.get(`plugin_repo_path`)??null,parameters:null}],message:w(e.get(`message`))}:{plugins:[],error:`no_plugins`}}function E({errorType:e,onGoHome:t,onTryAgain:n}){let{t:r}=o(`openhands`),i={no_plugins:r(s.LAUNCH$ERROR_NO_PLUGINS),invalid_format:r(s.LAUNCH$ERROR_INVALID_FORMAT),creation_failed:r(s.LAUNCH$ERROR_CREATION_FAILED)};return(0,b.jsx)(`div`,{className:`flex h-full items-center justify-center`,"data-testid":`launch-error`,children:(0,b.jsxs)(`div`,{className:`max-w-md rounded-lg bg-[var(--oh-surface)] p-6 text-center`,children:[(0,b.jsx)(`h2`,{className:`mb-4 text-xl font-medium text-red-400`,children:r(s.LAUNCH$ERROR_TITLE)}),(0,b.jsx)(`p`,{className:`mb-6 text-[var(--oh-text-tertiary)]`,children:i[e]}),(0,b.jsxs)(`div`,{className:`flex justify-center gap-3`,children:[(0,b.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-md bg-tertiary px-4 py-2 text-sm text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]`,"data-testid":`go-home-button`,children:r(s.LAUNCH$GO_HOME)}),n&&(0,b.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-md bg-blue-600 px-4 py-2 text-sm text-white hover:bg-blue-700`,"data-testid":`try-again-button`,children:r(s.LAUNCH$TRY_AGAIN)})]})]})})}var D=i(function(){let[e]=r(),t=a(),{t:n}=o(`openhands`),i=h(),[c,l]=y.useState(null),u=y.useMemo(()=>T(e),[e]),d=async(e,r)=>{l(null);try{t(`/conversations/${(await i.mutateAsync({plugins:e,query:r,entryPoint:`launch_deeplink`})).conversation_id}`)}catch{l(n(s.LAUNCH$ERROR_CREATION_UNKNOWN))}},f=()=>{t(`/conversations`)};return u.error?(0,b.jsx)(E,{errorType:u.error,onGoHome:f}):c?(0,b.jsx)(E,{errorType:`creation_failed`,onGoHome:f,onTryAgain:()=>{l(null),window.location.reload()}}):(0,b.jsx)(`div`,{className:`h-full`,"data-testid":`launch-route`,children:(0,b.jsx)(C,{plugins:u.plugins,message:u.message,isLoading:i.isPending,onStartConversation:d,onClose:f})})});export{D as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{n as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~e0djk9ee-Cw6LUe8p.js";import{a as i,n as a,p as o}from"./path-utils-PNfCKQDV.js";import{t as s}from"./useMutation-u8UgRgDK.js";import{t as c}from"./useQuery-D5pEZbY0.js";import{_ as l,d as u,f as d,h as f,m as p}from"./agent-server-compatibility-BWN-EIQn.js";import{_ as m}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js";import{f as h}from"./telemetry-C5JMEfqB.js";import{a as g}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js";import{t as _}from"./proxy-B3tCGf0X.js";import{t as v}from"./react-DPDgL6du.js";import{n as y}from"./middleware-DYHYNAnP.js";import{a as ee}from"./conversation-local-storage-F6zVMM--.js";import{t as b}from"./conversation-store-LptbOvKa.js";import{t as x}from"./v4-DbCkTSoU.js";import{o as te,s as ne,t as re}from"./agent-server-conversation-service.api-DSPIkMwJ.js";import{t as S}from"./use-user-conversation-CnE4zhOA.js";import{t as ie}from"./conversation-state-store-B2Bp32XI.js";import{t as ae}from"./files-tab-store-DJsPxYdg.js";import{C,D as oe,E as w,S as T,T as se,_ as ce,b as le,c as ue,d as de,f as fe,g as pe,h as E,k as D,l as O,m as me,p as he,s as k,t as A,u as ge,v as _e,w as ve,x as j,y as ye}from"./use-event-store-Bbaz51GR.js";import{t as be}from"./command-store-D8J5LMW1.js";import{t as M}from"./browser-store-BI6uklCG.js";var N=e(t(),1),xe=(e,t)=>{let[n,r]=N.useState(!1),[i,a]=N.useState(null),[o,s]=N.useState(null),[c,l]=N.useState(!1),u=N.useRef(null),d=N.useRef(0),f=N.useRef(null),p=N.useRef(!0),m=N.useRef(new WeakSet),h=N.useRef(t);N.useEffect(()=>{h.current=t},[t]);let g=N.useCallback(()=>{let t=e;if(h.current?.queryParams){let n=Object.entries(h.current.queryParams).reduce((e,[t,n])=>(e[t]=String(n),e),{});t=`${e}?${new URLSearchParams(n).toString()}`}let n=new WebSocket(t);u.current=n,m.current.add(n),n.onopen=e=>{r(!0),s(null),l(!1),d.current=0,h.current?.onOpen?.(e)},n.onmessage=e=>{a(e.data),h.current?.onMessage?.(e)},n.onclose=e=>{let t=m.current.has(n);r(!1),e.code!==1e3&&(s(Error(`WebSocket closed with code ${e.code}: ${e.reason||`Connection closed unexpectedly`}`)),t&&h.current?.onError?.(e)),h.current?.onClose?.(e);let i=h.current?.reconnect?.enabled??!1,a=h.current?.reconnect?.maxAttempts??1/0;i&&t&&p.current&&d.current<a?(l(!0),d.current+=1,f.current=setTimeout(()=>{g()},3e3)):l(!1)},n.onerror=e=>{r(!1),h.current?.onError?.(e)}},[e]);N.useEffect(()=>(p.current=!0,d.current=0,e&&e.trim()!==``&&g(),()=>{if(p.current=!1,f.current&&=(clearTimeout(f.current),null),u.current){let{readyState:e}=u.current;m.current.delete(u.current),(e===WebSocket.CONNECTING||e===WebSocket.OPEN)&&u.current.close(),u.current=null}}),[e,g]);let _=N.useCallback(e=>{u.current?.readyState===WebSocket.OPEN&&u.current.send(e)},[]),v=N.useCallback(()=>{p.current=!1,l(!1),f.current&&=(clearTimeout(f.current),null),u.current&&(m.current.delete(u.current),u.current.close())},[]),y=N.useCallback(()=>{if(p.current=!0,d.current=0,l(!0),s(null),f.current&&=(clearTimeout(f.current),null),u.current){let e=u.current;m.current.delete(e),u.current=null,(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN)&&e.close()}g()},[g]);return{isConnected:n,lastMessage:i,error:o,socket:u.current,sendMessage:_,isReconnecting:c,attemptCount:d.current,disconnect:v,reconnect:y}},P=`Unable to connect to server`,F={errorMessage:null,errorType:null,errorCode:null},Se=v(e=>({...F,setErrorMessage:(t,n=`conversation`,r=null)=>e(()=>({errorMessage:t,errorType:n,errorCode:r})),removeErrorMessage:()=>e(()=>({...F})),clearConnectionError:()=>e(e=>e.errorType===`connection`?{...F}:e)})),I=15e4,L={pendingMessages:[]},R=()=>`pending-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,Ce=v((e,t)=>({...L,enqueuePendingMessage:n=>{let r=R(),i={id:r,conversationId:n.conversationId,text:n.text,content:n.content??n.text,status:`sending`,imageUrls:n.imageUrls??[],fileUrls:n.fileUrls??[],timestamp:n.timestamp??new Date().toISOString()};return e(e=>({pendingMessages:[...e.pendingMessages,i]})),setTimeout(()=>{t().pendingMessages.find(e=>e.id===r)?.status===`sending`&&t().markPendingMessageError(r,`Send timed out`)},I),r},markPendingMessageError:(t,n)=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.id===t?{...e,status:`error`,errorMessage:n}:e)})),markPendingMessageSending:t=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.id===t?{...e,status:`sending`,errorMessage:void 0}:e)})),removePendingMessage:t=>e(e=>({pendingMessages:e.pendingMessages.filter(e=>e.id!==t)})),consumeMatchingPendingMessage:(t,n)=>{let r=null;return e(e=>{let i=e.pendingMessages.map((e,t)=>({m:e,i:t})).filter(({m:e})=>e.status===`sending`&&e.conversationId===t);if(i.length===0)return e;let a=i.find(({m:e})=>e.content===n)??i[0];return r=a.m,{pendingMessages:[...e.pendingMessages.slice(0,a.i),...e.pendingMessages.slice(a.i+1)]}}),r},clearPendingMessages:()=>e(()=>({...L})),reassignPendingMessages:(t,n)=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.conversationId===t?{...e,conversationId:n}:e)}))})),we={statusByConversation:{}},Te=v()(y(e=>({...we,setStatus:(t,n)=>e(e=>({statusByConversation:{...e.statusByConversation,[t]:n}}))}),{name:`GoalStore`})),z=new Set([`files`,`browser`,`terminal`,`planner`,`tasklist`]);function B(e){let t=b.getState();t.setSelectedTab(e),t.isRightPanelShown||(t.setHasRightPanelToggled(!0),t.setIsRightPanelShown(!0))}function V(e){return z.has(e)}function Ee(e,t=null){switch(e.command){case`navigate_to_file`:case`show_preview`:B(`files`),e.path&&ae.getState().setSelectedPath(e.path,t);return;case`open_tab`:e.tab===`vscode`?B(`files`):e.tab&&V(e.tab)?B(e.tab):e.tab&&console.warn(`[canvas_ui] Ignoring open_tab with unknown tab: ${e.tab}`);return}}var H=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:[...e.entriesByConversation[t]??[],n]}}),U=v()(y(e=>({entriesByConversation:{},activeProfileByConversation:{},show:(t,n,r)=>e(e=>H(e,t,{id:x(),anchorEventId:n,profiles:r})),recordSwitch:(t,n,r)=>e(e=>({...H(e,t,{id:x(),anchorEventId:n,profiles:[],switchedTo:r}),activeProfileByConversation:{...e.activeProfileByConversation,[t]:r}})),seedSwitches:(t,n)=>e(e=>{let r=e.entriesByConversation[t]??[],i=new Set(r.map(e=>e.id)),a=n.filter(e=>!i.has(e.id)).map(e=>({id:e.id,anchorEventId:e.anchorEventId,profiles:[],switchedTo:e.profileName}));return a.length===0?e:{entriesByConversation:{...e.entriesByConversation,[t]:[...r,...a]}}}),clearActiveProfile:t=>e(e=>{if(!(t in e.activeProfileByConversation))return e;let n={...e.activeProfileByConversation};return delete n[t],{activeProfileByConversation:n}}),clear:t=>e(e=>{let n={...e.entriesByConversation};delete n[t];let r={...e.activeProfileByConversation};return delete r[t],{entriesByConversation:n,activeProfileByConversation:r}}),clearAll:()=>e({entriesByConversation:{},activeProfileByConversation:{}})}),{name:`ModelStore`})),De=(e,t,n)=>{let{action:r}=e;if((r.kind===`StrReplaceEditorAction`||r.kind===`FileEditorAction`||r.kind===`ExecuteBashAction`)&&n.invalidateQueries({queryKey:[`file_changes`,t]},{cancelRefetch:!1}),(r.kind===`StrReplaceEditorAction`||r.kind===`FileEditorAction`)&&r.path){let e=a(r.path);n.invalidateQueries({queryKey:[`file_diff`,t,e]})}e.tool_name===`SwitchLLMTool`&&(n.invalidateQueries({queryKey:[`user`,`conversation`,t]}),U.getState().clearActiveProfile(t))},Oe=class{static async respondToConfirmation(e,t,n,r){let i=l().backend;return i.kind===`cloud`?_({backend:i,method:`POST`,hostOverride:p(t),path:`/api/conversations/${e}/events/respond_to_confirmation`,body:n,authMode:`session-api-key`,sessionApiKey:r}):new m(u({conversationUrl:t,sessionApiKey:r})).respondToConfirmation(e,n)}static async getEventCount(e,t,n){let r=l().backend;return r.kind===`cloud`?_({backend:r,method:`GET`,hostOverride:p(t),path:`/api/conversations/${e}/events/count`,authMode:`session-api-key`,sessionApiKey:n}):new m(u({conversationUrl:t,sessionApiKey:n})).getEventCount(e)}static async searchEvents(e,t,n,r={}){let i=l().backend,a=r.limit??100;if(i.kind===`cloud`){let t=Math.min(a,100),n=!!(r.sortOrder||r.pageId||r.timestampGte||r.timestampLt),o=new URLSearchParams;o.set(`limit`,String(t)),r.sortOrder&&o.set(`sort_order`,r.sortOrder),r.pageId&&o.set(`page_id`,r.pageId),r.timestampGte&&o.set(`timestamp__gte`,r.timestampGte),r.timestampLt&&o.set(`timestamp__lt`,r.timestampLt);let s=t=>_({backend:i,method:`GET`,path:`/api/v1/conversation/${e}/events/search?${t.toString()}`});try{let e=await s(o);return{items:e?.items??[],next_page_id:e?.next_page_id??null}}catch(e){if(!n||r.strictPagination)throw e;return console.warn(`[EventService] Cloud backend doesn't support pagination filters. Falling back to initial load only. Server needs OpenHands/OpenHands#14399.`),{items:[],next_page_id:null}}}let o=await new g(d({conversationUrl:t,sessionApiKey:n}),e).search({limit:a,...r.pageId?{page_id:r.pageId}:{},...r.sortOrder?{sort_order:r.sortOrder}:{},...r.timestampGte?{timestamp__gte:r.timestampGte}:{},...r.timestampLt?{timestamp__lt:r.timestampLt}:{}});return{items:o?.items??[],next_page_id:o?.next_page_id??null}}};function W({message:e,source:t,metadata:n={}}){h(Error(e),{error_source:t||`unknown`,...n})}var ke=()=>s({mutationKey:[`read-conversation-file`],mutationFn:async({conversationId:e,filePath:t})=>re.readConversationFile(e,t)}),Ae=v(e=>({cost:null,max_budget_per_task:null,usage:null,setMetrics:t=>e(t)})),je=e=>{let{data:t}=S(e??null);return c({queryKey:[`conversation-history`,e,t?.conversation_url??null,t?.session_api_key??null],enabled:!!e&&!!t,queryFn:async()=>{if(!e)return{events:[],hasMore:!1,nextPageId:null};let n=await Oe.searchEvents(e,t?.conversation_url??null,t?.session_api_key??null,{limit:50,sortOrder:`TIMESTAMP_DESC`});if(!Array.isArray(n.items))throw Error(`Invalid conversation history response: expected page.items to be an array.`);return{events:[...n.items].reverse(),hasMore:!!n.next_page_id||n.items.length>=50,nextPageId:n.next_page_id??null}},staleTime:0,gcTime:1800*1e3,refetchOnMount:`always`,refetchOnWindowFocus:!1})},G=[`The goal is NOT yet complete (audit iteration`,`Resuming a goal that was paused or interrupted.`],K=e=>{if(e.llm_message?.role!==`user`)return!1;let t=e.llm_message.content,n=Array.isArray(t)?t.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
1
|
+
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{n as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~e0djk9ee-Cw6LUe8p.js";import{a as i,n as a,p as o}from"./path-utils-D53ZHUQU.js";import{t as s}from"./useMutation-u8UgRgDK.js";import{t as c}from"./useQuery-D5pEZbY0.js";import{_ as l,d as u,f as d,h as f,m as p}from"./agent-server-compatibility-C0MtTTwb.js";import{_ as m}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js";import{f as h}from"./telemetry-SHxpVxk8.js";import{a as g}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js";import{t as _}from"./proxy-G4ce0fnQ.js";import{t as v}from"./react-DPDgL6du.js";import{n as y}from"./middleware-DYHYNAnP.js";import{a as ee}from"./conversation-local-storage-F6zVMM--.js";import{t as b}from"./conversation-store-LptbOvKa.js";import{t as x}from"./v4-DbCkTSoU.js";import{o as te,s as ne,t as re}from"./agent-server-conversation-service.api-lzc8dabY.js";import{t as S}from"./use-user-conversation-BrN2xeQU.js";import{t as ie}from"./conversation-state-store-B2Bp32XI.js";import{t as ae}from"./files-tab-store-DJsPxYdg.js";import{C,D as oe,E as w,S as T,T as se,_ as ce,b as le,c as ue,d as de,f as fe,g as pe,h as E,k as D,l as O,m as me,p as he,s as k,t as A,u as ge,v as _e,w as ve,x as j,y as ye}from"./use-event-store-Bbaz51GR.js";import{t as be}from"./command-store-D8J5LMW1.js";import{t as M}from"./browser-store-BI6uklCG.js";var N=e(t(),1),xe=(e,t)=>{let[n,r]=N.useState(!1),[i,a]=N.useState(null),[o,s]=N.useState(null),[c,l]=N.useState(!1),u=N.useRef(null),d=N.useRef(0),f=N.useRef(null),p=N.useRef(!0),m=N.useRef(new WeakSet),h=N.useRef(t);N.useEffect(()=>{h.current=t},[t]);let g=N.useCallback(()=>{let t=e;if(h.current?.queryParams){let n=Object.entries(h.current.queryParams).reduce((e,[t,n])=>(e[t]=String(n),e),{});t=`${e}?${new URLSearchParams(n).toString()}`}let n=new WebSocket(t);u.current=n,m.current.add(n),n.onopen=e=>{r(!0),s(null),l(!1),d.current=0,h.current?.onOpen?.(e)},n.onmessage=e=>{a(e.data),h.current?.onMessage?.(e)},n.onclose=e=>{let t=m.current.has(n);r(!1),e.code!==1e3&&(s(Error(`WebSocket closed with code ${e.code}: ${e.reason||`Connection closed unexpectedly`}`)),t&&h.current?.onError?.(e)),h.current?.onClose?.(e);let i=h.current?.reconnect?.enabled??!1,a=h.current?.reconnect?.maxAttempts??1/0;i&&t&&p.current&&d.current<a?(l(!0),d.current+=1,f.current=setTimeout(()=>{g()},3e3)):l(!1)},n.onerror=e=>{r(!1),h.current?.onError?.(e)}},[e]);N.useEffect(()=>(p.current=!0,d.current=0,e&&e.trim()!==``&&g(),()=>{if(p.current=!1,f.current&&=(clearTimeout(f.current),null),u.current){let{readyState:e}=u.current;m.current.delete(u.current),(e===WebSocket.CONNECTING||e===WebSocket.OPEN)&&u.current.close(),u.current=null}}),[e,g]);let _=N.useCallback(e=>{u.current?.readyState===WebSocket.OPEN&&u.current.send(e)},[]),v=N.useCallback(()=>{p.current=!1,l(!1),f.current&&=(clearTimeout(f.current),null),u.current&&(m.current.delete(u.current),u.current.close())},[]),y=N.useCallback(()=>{if(p.current=!0,d.current=0,l(!0),s(null),f.current&&=(clearTimeout(f.current),null),u.current){let e=u.current;m.current.delete(e),u.current=null,(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN)&&e.close()}g()},[g]);return{isConnected:n,lastMessage:i,error:o,socket:u.current,sendMessage:_,isReconnecting:c,attemptCount:d.current,disconnect:v,reconnect:y}},P=`Unable to connect to server`,F={errorMessage:null,errorType:null,errorCode:null},Se=v(e=>({...F,setErrorMessage:(t,n=`conversation`,r=null)=>e(()=>({errorMessage:t,errorType:n,errorCode:r})),removeErrorMessage:()=>e(()=>({...F})),clearConnectionError:()=>e(e=>e.errorType===`connection`?{...F}:e)})),I=15e4,L={pendingMessages:[]},R=()=>`pending-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,Ce=v((e,t)=>({...L,enqueuePendingMessage:n=>{let r=R(),i={id:r,conversationId:n.conversationId,text:n.text,content:n.content??n.text,status:`sending`,imageUrls:n.imageUrls??[],fileUrls:n.fileUrls??[],timestamp:n.timestamp??new Date().toISOString()};return e(e=>({pendingMessages:[...e.pendingMessages,i]})),setTimeout(()=>{t().pendingMessages.find(e=>e.id===r)?.status===`sending`&&t().markPendingMessageError(r,`Send timed out`)},I),r},markPendingMessageError:(t,n)=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.id===t?{...e,status:`error`,errorMessage:n}:e)})),markPendingMessageSending:t=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.id===t?{...e,status:`sending`,errorMessage:void 0}:e)})),removePendingMessage:t=>e(e=>({pendingMessages:e.pendingMessages.filter(e=>e.id!==t)})),consumeMatchingPendingMessage:(t,n)=>{let r=null;return e(e=>{let i=e.pendingMessages.map((e,t)=>({m:e,i:t})).filter(({m:e})=>e.status===`sending`&&e.conversationId===t);if(i.length===0)return e;let a=i.find(({m:e})=>e.content===n)??i[0];return r=a.m,{pendingMessages:[...e.pendingMessages.slice(0,a.i),...e.pendingMessages.slice(a.i+1)]}}),r},clearPendingMessages:()=>e(()=>({...L})),reassignPendingMessages:(t,n)=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.conversationId===t?{...e,conversationId:n}:e)}))})),we={statusByConversation:{}},Te=v()(y(e=>({...we,setStatus:(t,n)=>e(e=>({statusByConversation:{...e.statusByConversation,[t]:n}}))}),{name:`GoalStore`})),z=new Set([`files`,`browser`,`terminal`,`planner`,`tasklist`]);function B(e){let t=b.getState();t.setSelectedTab(e),t.isRightPanelShown||(t.setHasRightPanelToggled(!0),t.setIsRightPanelShown(!0))}function V(e){return z.has(e)}function Ee(e,t=null){switch(e.command){case`navigate_to_file`:case`show_preview`:B(`files`),e.path&&ae.getState().setSelectedPath(e.path,t);return;case`open_tab`:e.tab===`vscode`?B(`files`):e.tab&&V(e.tab)?B(e.tab):e.tab&&console.warn(`[canvas_ui] Ignoring open_tab with unknown tab: ${e.tab}`);return}}var H=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:[...e.entriesByConversation[t]??[],n]}}),U=v()(y(e=>({entriesByConversation:{},activeProfileByConversation:{},show:(t,n,r)=>e(e=>H(e,t,{id:x(),anchorEventId:n,profiles:r})),recordSwitch:(t,n,r)=>e(e=>({...H(e,t,{id:x(),anchorEventId:n,profiles:[],switchedTo:r}),activeProfileByConversation:{...e.activeProfileByConversation,[t]:r}})),seedSwitches:(t,n)=>e(e=>{let r=e.entriesByConversation[t]??[],i=new Set(r.map(e=>e.id)),a=n.filter(e=>!i.has(e.id)).map(e=>({id:e.id,anchorEventId:e.anchorEventId,profiles:[],switchedTo:e.profileName}));return a.length===0?e:{entriesByConversation:{...e.entriesByConversation,[t]:[...r,...a]}}}),clearActiveProfile:t=>e(e=>{if(!(t in e.activeProfileByConversation))return e;let n={...e.activeProfileByConversation};return delete n[t],{activeProfileByConversation:n}}),clear:t=>e(e=>{let n={...e.entriesByConversation};delete n[t];let r={...e.activeProfileByConversation};return delete r[t],{entriesByConversation:n,activeProfileByConversation:r}}),clearAll:()=>e({entriesByConversation:{},activeProfileByConversation:{}})}),{name:`ModelStore`})),De=(e,t,n)=>{let{action:r}=e;if((r.kind===`StrReplaceEditorAction`||r.kind===`FileEditorAction`||r.kind===`ExecuteBashAction`)&&n.invalidateQueries({queryKey:[`file_changes`,t]},{cancelRefetch:!1}),(r.kind===`StrReplaceEditorAction`||r.kind===`FileEditorAction`)&&r.path){let e=a(r.path);n.invalidateQueries({queryKey:[`file_diff`,t,e]})}e.tool_name===`SwitchLLMTool`&&(n.invalidateQueries({queryKey:[`user`,`conversation`,t]}),U.getState().clearActiveProfile(t))},Oe=class{static async respondToConfirmation(e,t,n,r){let i=l().backend;return i.kind===`cloud`?_({backend:i,method:`POST`,hostOverride:p(t),path:`/api/conversations/${e}/events/respond_to_confirmation`,body:n,authMode:`session-api-key`,sessionApiKey:r}):new m(u({conversationUrl:t,sessionApiKey:r})).respondToConfirmation(e,n)}static async getEventCount(e,t,n){let r=l().backend;return r.kind===`cloud`?_({backend:r,method:`GET`,hostOverride:p(t),path:`/api/conversations/${e}/events/count`,authMode:`session-api-key`,sessionApiKey:n}):new m(u({conversationUrl:t,sessionApiKey:n})).getEventCount(e)}static async searchEvents(e,t,n,r={}){let i=l().backend,a=r.limit??100;if(i.kind===`cloud`){let t=Math.min(a,100),n=!!(r.sortOrder||r.pageId||r.timestampGte||r.timestampLt),o=new URLSearchParams;o.set(`limit`,String(t)),r.sortOrder&&o.set(`sort_order`,r.sortOrder),r.pageId&&o.set(`page_id`,r.pageId),r.timestampGte&&o.set(`timestamp__gte`,r.timestampGte),r.timestampLt&&o.set(`timestamp__lt`,r.timestampLt);let s=t=>_({backend:i,method:`GET`,path:`/api/v1/conversation/${e}/events/search?${t.toString()}`});try{let e=await s(o);return{items:e?.items??[],next_page_id:e?.next_page_id??null}}catch(e){if(!n||r.strictPagination)throw e;return console.warn(`[EventService] Cloud backend doesn't support pagination filters. Falling back to initial load only. Server needs OpenHands/OpenHands#14399.`),{items:[],next_page_id:null}}}let o=await new g(d({conversationUrl:t,sessionApiKey:n}),e).search({limit:a,...r.pageId?{page_id:r.pageId}:{},...r.sortOrder?{sort_order:r.sortOrder}:{},...r.timestampGte?{timestamp__gte:r.timestampGte}:{},...r.timestampLt?{timestamp__lt:r.timestampLt}:{}});return{items:o?.items??[],next_page_id:o?.next_page_id??null}}};function W({message:e,source:t,metadata:n={}}){h(Error(e),{error_source:t||`unknown`,...n})}var ke=()=>s({mutationKey:[`read-conversation-file`],mutationFn:async({conversationId:e,filePath:t})=>re.readConversationFile(e,t)}),Ae=v(e=>({cost:null,max_budget_per_task:null,usage:null,setMetrics:t=>e(t)})),je=e=>{let{data:t}=S(e??null);return c({queryKey:[`conversation-history`,e,t?.conversation_url??null,t?.session_api_key??null],enabled:!!e&&!!t,queryFn:async()=>{if(!e)return{events:[],hasMore:!1,nextPageId:null};let n=await Oe.searchEvents(e,t?.conversation_url??null,t?.session_api_key??null,{limit:50,sortOrder:`TIMESTAMP_DESC`});if(!Array.isArray(n.items))throw Error(`Invalid conversation history response: expected page.items to be an array.`);return{events:[...n.items].reverse(),hasMore:!!n.next_page_id||n.items.length>=50,nextPageId:n.next_page_id??null}},staleTime:0,gcTime:1800*1e3,refetchOnMount:`always`,refetchOnWindowFocus:!1})},G=[`The goal is NOT yet complete (audit iteration`,`Resuming a goal that was paused or interrupted.`],K=e=>{if(e.llm_message?.role!==`user`)return!1;let t=e.llm_message.content,n=Array.isArray(t)?t.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
2
2
|
`):``;return G.some(e=>n.startsWith(e))},q=e=>{if(E(e))return le(e)&&!e.value.active;if(ue(e)){let t=e.action.kind;return!(!t||t===`ExecuteBashAction`&&e.source===`user`||t===`PlanningFileEditorAction`||t===`SwitchLLMAction`)}return C(e)?!(e.observation.kind===`SwitchLLMObservation`&&!e.observation.is_error):T(e)?!K(e):O(e)||j(e)||k(e)?!0:w(e)?e.content!==null||e.reasoning_content!==null:!1},Me=e=>e.some(e=>e.source===`user`),J=()=>{let{uiEvents:e}=A.getState();for(let t=e.length-1;t>=0;--t){let n=e[t];if(q(n))return String(n.id)}return null};function Ne(e,t,n=J()){U.getState().recordSwitch(e,n,t)}function Pe(e,t){let n=[],r=null;for(let e of t)oe(e)&&!e.observation.is_error&&n.push({id:`history-switch:${e.id}`,anchorEventId:r,profileName:e.observation.profile_name}),q(e)&&(r=String(e.id));n.length>0&&U.getState().seedSwitches(e,n)}var Y=n(),Fe=(0,N.createContext)(void 0);function Ie(e){return e.llm_message.content.filter(e=>e.type===`text`).map(e=>e.text).join(``)}function Le({children:e,conversationId:t,conversationUrl:n,sessionApiKey:a,subConversations:s,subConversationIds:c}){let[l,d]=(0,N.useState)(`CONNECTING`),[p,h]=(0,N.useState)(`CONNECTING`),g=N.useRef(!1),_=N.useRef(!1),v=r(),y=A(e=>e.addEvent),x=A(e=>e.addEvents),re=A(e=>e.clearEventsForConversation),{setErrorMessage:S,removeErrorMessage:ae,clearConnectionError:C}=Se(),w=Ce(e=>e.consumeMatchingPendingMessage),{setExecutionStatus:T}=ie(),{appendInput:k,appendOutput:j}=be(),F=M(e=>e.reset),[I,L]=(0,N.useState)(!0),[R,we]=(0,N.useState)(null),{setPlanContent:z}=b(),{mutate:B}=ke(),V=(0,N.useRef)(0),H=(0,N.useRef)(null),U=e=>e?.toUpperCase().endsWith(`PLAN.MD`)??!1,G=(0,N.useCallback)(()=>{C()},[C]),K=(0,N.useCallback)(e=>{if(e.value.usage_to_metrics?.agent){let t=e.value.usage_to_metrics.agent,n={cost:t.accumulated_cost,max_budget_per_task:t.max_budget_per_task??null,usage:t.accumulated_token_usage?{prompt_tokens:t.accumulated_token_usage.prompt_tokens,completion_tokens:t.accumulated_token_usage.completion_tokens,cache_read_tokens:t.accumulated_token_usage.cache_read_tokens,cache_write_tokens:t.accumulated_token_usage.cache_write_tokens,context_window:t.accumulated_token_usage.context_window,per_turn_token:t.accumulated_token_usage.per_turn_token}:null};Ae.getState().setMetrics(n)}},[]),{data:q,isPending:Me,isFetching:J,isError:Le}=je(t),Re=!!t&&Me;(0,N.useLayoutEffect)(()=>{let e=t??null;A.getState().loadedConversationId!==e&&(re(e),F())},[t,re,F]),(0,N.useLayoutEffect)(()=>{if(!(!q||q.events.length===0)&&(x(q.events),t)){Pe(t,A.getState().uiEvents);for(let e of q.events)D(e)&&w(t,Ie(e))}},[q,x,t,w]);let X=(0,N.useMemo)(()=>{if(J)return null;let e=q?.events??[],t=e[e.length-1];return!t||!(`timestamp`in t)||!t.timestamp?null:t.timestamp},[q,J]),ze=(0,N.useMemo)(()=>!t||!n||J&&!Le?null:f(t,n),[t,n,J,Le]),Z=(0,N.useMemo)(()=>{if(!s?.length)return null;let e=s[0];return!e?.id||!e.conversation_url?null:f(e.id,e.conversation_url)},[s]),Be=(0,N.useMemo)(()=>Z?l===`CONNECTING`||p===`CONNECTING`?`CONNECTING`:l===`OPEN`&&p===`OPEN`?`OPEN`:l===`CLOSED`&&p===`CLOSED`?`CLOSED`:l===`CLOSING`||p===`CLOSING`?`CLOSING`:`CLOSED`:l,[l,p,Z]);(0,N.useEffect)(()=>{R!==null&&V.current>=R&&I&&L(!1)},[R,I,V]),(0,N.useEffect)(()=>{if(!I&&H.current){let{path:e,conversationId:t}=H.current;B({conversationId:t,filePath:e},{onSuccess:e=>{z(e)},onError:e=>{console.warn(`Failed to read conversation file:`,e)}}),H.current=null}},[I,B,z]),(0,N.useEffect)(()=>{g.current=!1,L(!!c?.length),we(null),V.current=0,H.current=null},[c]),(0,N.useEffect)(()=>{g.current=!1,_.current=!1,H.current=null},[t]);let Ve=(0,N.useMemo)(()=>Re||I,[Re,I]),He=(0,N.useCallback)(e=>{try{let n=JSON.parse(e.data);if(ge(n)){let e=!A.getState().eventIds.has(n.id)&&oe(n)?n:null;if(y(n),pe(n)){let e=n;W({message:e.detail,source:`conversation`,metadata:{eventId:e.id,errorCode:e.code}}),S(e.detail,`conversation`,e.code)}else G();if(O(n)&&W({message:n.error,source:`agent`,metadata:{eventId:n.id,toolName:n.tool_name,toolCallId:n.tool_call_id}}),D(n)&&t&&(w(t,Ie(n)),ee(t,{draftMessage:null})),ue(n)&&De(n,t||`test-conversation-id`,v),E(n)&&(ye(n)&&T(n.value.execution_status),de(n)&&T(n.value),se(n)&&K(n),le(n)&&t&&Te.getState().setStatus(t,n.value)),ce(n)&&k(n.action.command),_e(n)&&j(n.observation.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
3
3
|
`)),he(n)){let{screenshot_data:e}=n.observation;if(e){let t=e.startsWith(`data:`)?e:`data:image/png;base64,${e}`;M.getState().setScreenshotSrc(t)}}if(fe(n)&&M.getState().setUrl(n.action.url),t&&e&&!e.observation.is_error){Ne(t,e.observation.profile_name);let n=te(t);ne(t,{selected_repository:n?.selected_repository??null,selected_branch:n?.selected_branch??null,git_provider:n?.git_provider??null,selected_workspace:n?.selected_workspace??null,active_profile:e.observation.profile_name,plugins:n?.plugins??null}),e.observation.active_model&&o(v,t,e.observation.active_model),i(v,t)}me(n)&&Ee(n.action,t??null)}}catch(e){console.warn(`Failed to parse WebSocket message as JSON:`,e)}},[y,S,w,v,t,T,k,j,K,G]),Ue=(0,N.useCallback)(e=>{try{let n=JSON.parse(e.data);if(I&&(V.current+=1,R!==null&&V.current>=R&&L(!1)),ge(n)){if(y({...n,isFromPlanningAgent:!0}),pe(n)){let e=n;W({message:e.detail,source:`planning_conversation`,metadata:{eventId:e.id,errorCode:e.code}}),S(e.detail,`conversation`,e.code)}else G();if(O(n)&&W({message:n.error,source:`planning_agent`,metadata:{eventId:n.id,toolName:n.tool_name,toolCallId:n.tool_call_id}}),D(n)&&t&&(w(t,Ie(n)),ee(t,{draftMessage:null})),ue(n)&&De(n,s?.[0]?.id||`test-conversation-id`,v),E(n)&&(ye(n)&&T(n.value.execution_status),de(n)&&T(n.value),se(n)&&K(n),le(n)&&t&&Te.getState().setStatus(t,n.value)),ce(n)&&k(n.action.command),_e(n)&&j(n.observation.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
4
4
|
`)),ve(n)){let{path:e}=n.observation;if(U(e)){let t=s?.[0]?.id;t&&e&&(I?H.current={path:e,conversationId:t}:B({conversationId:t,filePath:e},{onSuccess:e=>{z(e)},onError:e=>{console.warn(`Failed to read conversation file:`,e)}}))}}}}catch(e){console.warn(`Failed to parse WebSocket message as JSON:`,e)}},[y,I,R,S,w,v,s,t,T,k,j,B,z,K,G]),We=(0,N.useMemo)(()=>{let e=X?{resend_mode:`since`,after_timestamp:X}:{resend_mode:`all`};return a&&(e.session_api_key=a),{queryParams:e,reconnect:{enabled:!0},onOpen:()=>{d(`OPEN`),g.current=!0,C()},onClose:()=>{d(`CLOSED`)},onError:()=>{d(`CLOSED`),g.current&&S(P,`connection`)},onMessage:He}},[He,S,C,a,X]),Ge=(0,N.useMemo)(()=>{let e={resend_all:!0};a&&(e.session_api_key=a);let t=s?.[0];return{queryParams:e,reconnect:{enabled:!0},onOpen:async()=>{if(h(`OPEN`),_.current=!0,C(),t?.id&&t.conversation_url)try{let e=await Oe.getEventCount(t.id,t.conversation_url,t.session_api_key);we(e),e===0&&L(!1)}catch{L(!1)}},onClose:()=>{h(`CLOSED`)},onError:()=>{h(`CLOSED`),_.current&&S(P,`connection`)},onMessage:Ue}},[Ue,S,C,a,s]),{socket:Q,reconnect:Ke}=xe(ze||``,We),{socket:$,reconnect:qe}=xe(Z||``,Ge),Je=(0,N.useCallback)(()=>{if(ae(),b.getState().conversationMode===`plan`&&Z){qe();return}Ke()},[Z,Ke,qe,ae]),Ye=(0,N.useCallback)(async e=>{let n=b.getState().conversationMode===`plan`?$:Q;if(n?.readyState!==WebSocket.OPEN){if(!t){let e=Error(`No conversation ID available`);throw S(e.message),e}try{return await new m(u()).sendEvent(t,{role:`user`,content:e.content},{run:!0}),{queued:!0}}catch(e){throw S(e instanceof Error?e.message:`Failed to queue message for delivery`),e}}try{return n.send(JSON.stringify({...e,run:!0})),{queued:!1}}catch(e){throw S(e instanceof Error?e.message:`Failed to send message`),e}},[Q,$,S,t]);(0,N.useEffect)(()=>{Q&&ze&&(()=>{switch(Q.readyState){case WebSocket.CONNECTING:d(`CONNECTING`);break;case WebSocket.OPEN:d(`OPEN`);break;case WebSocket.CLOSING:d(`CLOSING`);break;case WebSocket.CLOSED:d(`CLOSED`);break;default:d(`CLOSED`);break}})()},[Q,ze]),(0,N.useEffect)(()=>{$&&Z&&(()=>{switch($.readyState){case WebSocket.CONNECTING:h(`CONNECTING`);break;case WebSocket.OPEN:h(`OPEN`);break;case WebSocket.CLOSING:h(`CLOSING`);break;case WebSocket.CLOSED:h(`CLOSED`);break;default:h(`CLOSED`);break}})()},[$,Z]);let Xe=(0,N.useMemo)(()=>({connectionState:Be,sendMessage:Ye,isLoadingHistory:Ve,reconnect:Je}),[Be,Ye,Ve,Je]);return(0,Y.jsx)(Fe.Provider,{value:Xe,children:e})}var Re=()=>(0,N.useContext)(Fe)||null,X=e=>(0,Y.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:109,height:109,viewBox:`0 0 109 109`,fill:`none`,...e,children:[(0,Y.jsx)(`path`,{d:`M40.1979 21.8969L34.7311 17.832L25.2691 30.5574L20.2094 26.784L16.1367 32.2451L26.6653 40.0969L40.1979 21.8969Z`,fill:`currentColor`}),(0,Y.jsx)(`path`,{d:`M90.8342 35.1983H50.4639V28.3858H90.8342V35.1983Z`,fill:`currentColor`}),(0,Y.jsx)(`path`,{d:`M90.8342 57.9067H50.4638V51.0942H90.8342V57.9067Z`,fill:`currentColor`}),(0,Y.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M27.2508 63.5837C32.2674 63.5837 36.3342 59.517 36.3342 54.5004C36.3342 49.4838 32.2674 45.4171 27.2508 45.4171C22.2342 45.4171 18.1675 49.4838 18.1675 54.5004C18.1675 59.517 22.2342 63.5837 27.2508 63.5837ZM27.2508 59.0421C29.7591 59.0421 31.7925 57.0087 31.7925 54.5004C31.7925 51.9921 29.7591 49.9587 27.2508 49.9587C24.7425 49.9587 22.7092 51.9921 22.7092 54.5004C22.7092 57.0087 24.7425 59.0421 27.2508 59.0421Z`,fill:`currentColor`}),(0,Y.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M36.3342 77.2087C36.3342 82.2253 32.2674 86.2921 27.2508 86.2921C22.2342 86.2921 18.1675 82.2253 18.1675 77.2087C18.1675 72.1922 22.2342 68.1254 27.2508 68.1254C32.2674 68.1254 36.3342 72.1922 36.3342 77.2087ZM31.7925 77.2087C31.7925 79.717 29.7591 81.7504 27.2508 81.7504C24.7425 81.7504 22.7092 79.717 22.7092 77.2087C22.7092 74.7005 24.7425 72.6671 27.2508 72.6671C29.7591 72.6671 31.7925 74.7005 31.7925 77.2087Z`,fill:`currentColor`}),(0,Y.jsx)(`path`,{d:`M50.4637 80.615H90.834V73.8025H50.4637V80.615Z`,fill:`currentColor`})]});export{Pe as a,q as c,Oe as d,U as f,P as g,Se as h,Ne as i,je as l,Ce as m,Le as n,J as o,Te as p,Re as r,Me as s,X as t,Ae as u};
|