@openhands/agent-canvas 1.0.0-rc.2 → 1.0.0-rc.3
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 +2 -2
- package/README.windows.md +2 -2
- package/build/assets/acp-providers-C55k29rf.js +1 -0
- package/build/assets/{add-backend-modal-CIfhseZn.js → add-backend-modal-BdYxoUdL.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-js3oYcdU.js +5 -0
- package/build/assets/{agent-settings-B6htMeS2.js → agent-settings-BNrffu3I.js} +1 -1
- package/build/assets/{alert-banner-D41ZKDZT.js → alert-banner-BzU93oDh.js} +1 -1
- package/build/assets/{analytics-consent-form-modal-TINgM_jV.js → analytics-consent-form-modal-Ce-_Skcd.js} +1 -1
- package/build/assets/{api-key-entry-screen-Di1vHgIU.js → api-key-entry-screen-CGyS-Cna.js} +1 -1
- package/build/assets/{app-settings-CjCa1MOB.js → app-settings-DmOs4oik.js} +1 -1
- package/build/assets/{automation-detail-DPoxzTdV.js → automation-detail-DLbCVJCw.js} +1 -1
- package/build/assets/{automations-list-DwUEe2Ea.js → automations-list-Ces5shz5.js} +1 -1
- package/build/assets/{backend-form-modal-B6q897ZX.js → backend-form-modal-BUy-PzZN.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BwTawSCE.js → backend-synced-settings-badge-1A63yxGs.js} +1 -1
- package/build/assets/browser-B8bp1IqT.js +5 -0
- package/build/assets/{browser-tab-DiRTKik8.js → browser-tab-CiBRWB4X.js} +1 -1
- package/build/assets/chat-send-button-qKFZuB9E.js +1 -0
- package/build/assets/{circle-plus-check-toggle-B3_W6-nt.js → circle-plus-check-toggle-CboDp7XB.js} +1 -1
- package/build/assets/{condenser-settings-DczjwkIp.js → condenser-settings-FCBjvqSo.js} +1 -1
- package/build/assets/conversation-CT8AvxEH.js +1 -0
- package/build/assets/conversation-panel-DqDDs4WZ.js +1 -0
- package/build/assets/conversation-service.api-y_eB_43m.js +1 -0
- package/build/assets/conversation-store-CiYGBud3.js +6 -0
- package/build/assets/conversation-vNuLKgz6.js +19 -0
- package/build/assets/conversation-websocket-context-Bb4XBXoc.js +3 -0
- package/build/assets/{device-verify-BVl4GEvt.js → device-verify-BOQz2LJQ.js} +1 -1
- package/build/assets/{edit-automation-modal-kc_FzbzK.js → edit-automation-modal-C-oC5tis.js} +1 -1
- package/build/assets/{entry.client-CWkbusD1.js → entry.client-Db3BpFL_.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DlY0Q3fj.js → enum-filter-dropdown-DFwoVtOw.js} +1 -1
- package/build/assets/{extensions-hub-NbQnt-cn.js → extensions-hub-BxZbAtjP.js} +1 -1
- package/build/assets/extensions-navigation-BIb-vAa2.js +1 -0
- package/build/assets/{files-tab-mK7Mdyuf.js → files-tab-DpulQlIo.js} +1 -1
- package/build/assets/{git-control-bar-branch-button-C1qmab0K.js → git-control-bar-branch-button-D1uam-nI.js} +1 -1
- package/build/assets/home-sJAFzI6v.js +1 -0
- package/build/assets/install-server-modal-BjEzlLF5.js +1 -0
- package/build/assets/{launch-BADsYeGp.js → launch-DgtB1JTX.js} +1 -1
- package/build/assets/llm-settings-B8kPJ0Of.js +1 -0
- package/build/assets/llm-settings-CjUpPsvA.js +1 -0
- package/build/assets/{manage-backends-modal-sH7l5NgI.js → manage-backends-modal-CTA-2x4F.js} +1 -1
- package/build/assets/manifest-d3e8504d.js +1 -0
- package/build/assets/{markdown-renderer-CZq_UdmE.js → markdown-renderer-oOUs3tw5.js} +1 -1
- package/build/assets/{mcp-DdQ72_AO.js → mcp-kJYdM8aJ.js} +1 -1
- package/build/assets/messages-BFJXB6MW.js +36 -0
- package/build/assets/model-selector-z_QOzaRV.js +1 -0
- package/build/assets/{onboarding-DCL9stdH.js → onboarding-CZ_7nd-M.js} +1 -1
- package/build/assets/{path-utils-CNd_jqv_.js → path-utils-0KWEiRs9.js} +1 -1
- package/build/assets/{planner-tab-QBnZgIXd.js → planner-tab-CNmJiZ22.js} +1 -1
- package/build/assets/{recommended-automations-launcher-B01jchhe.js → recommended-automations-launcher-B1kfmFTQ.js} +8 -10
- package/build/assets/{root-BBV8Ew9E.js → root-CIZ7Rv1X.js} +2 -2
- package/build/assets/root-layout-B5ijp9At.js +2 -0
- package/build/assets/{sdk-section-page-BQKe3asw.js → sdk-section-page-DTyvCc52.js} +1 -1
- package/build/assets/{sdk-settings-schema-DoRnefvb.js → sdk-settings-schema-B0KrqqPX.js} +1 -1
- package/build/assets/{secrets-settings-D2EfzdpC.js → secrets-settings-BQNSDLKS.js} +1 -1
- package/build/assets/{settings-B7jVceyu.js → settings-BUlJrO_h.js} +1 -1
- package/build/assets/{settings-dropdown-input-BD7ziSoR.js → settings-dropdown-input-BUk4m23x.js} +1 -1
- package/build/assets/{settings-index-Xj0v9Oas.js → settings-index-DE91Eahc.js} +1 -1
- package/build/assets/{settings-modal-CDBy1S9S.js → settings-modal-CCaPYVqW.js} +1 -1
- package/build/assets/{settings-service.api-CTQ-LpAA.js → settings-service.api-4u2RKC8k.js} +1 -1
- package/build/assets/{settings-switch-CSHSqH99.js → settings-switch-BQiAS9ga.js} +1 -1
- package/build/assets/{settings-utils-BCbzc6-u.js → settings-utils-chxTa1vn.js} +1 -1
- package/build/assets/{shared-conversation-BHEbOdHj.js → shared-conversation-sBPLAawM.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-YYPXGikp.js → sidebar-mobile-menu-toggle-BDXWzhyB.js} +1 -1
- package/build/assets/{sidebar-nav-link-CiXbBMQx.js → sidebar-nav-link-Bhlzlhp8.js} +1 -1
- package/build/assets/{skill-card-pill-row-BXILn-GK.js → skill-card-pill-row-Bg5joQf6.js} +1 -1
- package/build/assets/{skills-plugins-Bs5HiF1O.js → skills-plugins-fihjo1KZ.js} +1 -1
- package/build/assets/{skills-settings-CQYxMmWf.js → skills-settings-NQnuMwZP.js} +1 -1
- package/build/assets/{styled-tooltip-DEr7oa0m.js → styled-tooltip-GXy1qxsO.js} +1 -1
- package/build/assets/{task-list-tab-R9N3Wd-U.js → task-list-tab-Hl9BuVfq.js} +1 -1
- package/build/assets/telemetry-j9SLrtY7.js +2 -0
- package/build/assets/{terminal-BTM3UFcQ.js → terminal-DRwe8--D.js} +1 -1
- package/build/assets/{use-active-conversation-BY5F6A1G.js → use-active-conversation-DJGoI9Mc.js} +1 -1
- package/build/assets/{use-agent-settings-schema-CsuMq16G.js → use-agent-settings-schema-DtusObuC.js} +1 -1
- package/build/assets/{use-agent-state-DX5NKEa_.js → use-agent-state-BXgWhFh6.js} +1 -1
- package/build/assets/{use-create-conversation-4iJytCT1.js → use-create-conversation-CzvaVA5A.js} +1 -1
- package/build/assets/use-event-store-DSpvASbC.js +1 -0
- package/build/assets/{use-get-secrets-BMnFFBUx.js → use-get-secrets-DiLgP147.js} +1 -1
- package/build/assets/use-handle-plan-click-CUZwmKIk.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BoqKmEHC.js → use-launch-skill-in-chat-ClRJlIx7.js} +1 -1
- package/build/assets/use-runtime-is-ready-CWkGQFsb.js +1 -0
- package/build/assets/{use-save-settings-hK6LYt0s.js → use-save-settings-CP23emUY.js} +1 -1
- package/build/assets/use-settings-0qFqC-r6.js +1 -0
- package/build/assets/{use-settings-nav-items-oZ-BlOWX.js → use-settings-nav-items-C6YxUn4h.js} +1 -1
- package/build/assets/{use-task-list-DydbuRFM.js → use-task-list-JPudBRv3.js} +1 -1
- package/build/assets/{use-tracking-DQU60djN.js → use-tracking-CjLZgh8X.js} +1 -1
- package/build/assets/{use-unified-vscode-url-D2Buvmxj.js → use-unified-vscode-url-DSn2tT08.js} +1 -1
- package/build/assets/{use-user-conversation-DwOGM1lc.js → use-user-conversation-CQ5IwnZk.js} +1 -1
- package/build/assets/{vendor~browser-3J6WDaAB.js → vendor~browser-Dwwc84Zf.js} +1 -1
- package/build/assets/{vendor~browser-tab-DYZ-OmbT.js → vendor~browser-tab-Bhohe29F.js} +1 -1
- package/build/assets/{vendor~files-tab-Diy4WrQz.js → vendor~files-tab-B447_Zns.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CWwn0K2j.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CQQAW8hY.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-dZ3D8RVL.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DFsI4CLy.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BighOCzm.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DcvlNgbn.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D13hiNGV.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-ojk_J4bB.js} +1 -1
- package/build/assets/{vendor~launch-D65Vw0VZ.js → vendor~launch-BdXJCmwc.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BJPgfJoU.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DToubnIU.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~jpfhx3ls-BkicN-14.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~jpfhx3ls-zdl_Rltz.js} +2 -2
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js → vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-BaCzvZac.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-BwbkftxT.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~automations-list-JQ-neDIa.js → vendor~root-layout~home~mcp~automations-list-CtdIEhjQ.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~automations-list-BTTZ58Mb.js → vendor~root-layout~home~mcp~automations-list-DGOI7kQz.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-UYEKKX0Y.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-iPAfRWNQ.js} +2 -2
- package/build/assets/{verification-settings-Rabe5TpK.js → verification-settings-Cm02KmeI.js} +1 -1
- package/build/assets/{vscode-tab-zLD5Z-PP.js → vscode-tab-AF70Yke0.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +1 -1
- package/build/locales/ca/openhands.json +1 -1
- package/build/locales/de/openhands.json +1 -1
- package/build/locales/en/openhands.json +1 -1
- package/build/locales/es/openhands.json +1 -1
- package/build/locales/fr/openhands.json +1 -1
- package/build/locales/it/openhands.json +1 -1
- package/build/locales/ja/openhands.json +1 -1
- package/build/locales/ko-KR/openhands.json +1 -1
- package/build/locales/no/openhands.json +1 -1
- package/build/locales/pt/openhands.json +1 -1
- package/build/locales/tr/openhands.json +1 -1
- package/build/locales/uk/openhands.json +1 -1
- package/build/locales/zh-CN/openhands.json +1 -1
- package/build/locales/zh-TW/openhands.json +1 -1
- package/config/defaults.json +1 -1
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.js +90 -85
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/app-preferences-store.cjs.map +1 -1
- package/dist/api/app-preferences-store.d.ts +6 -2
- package/dist/api/app-preferences-store.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +9 -9
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +80 -71
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
- package/dist/components/features/home/workspace-selection-form.d.ts +1 -0
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +8 -0
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.js +6 -6
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
- package/dist/components/features/skills/extensions-navigation.js +27 -29
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/i18n/translation.cjs +1 -1
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +15 -15
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +1 -1
- package/dist/locales/ca/openhands.json +1 -1
- package/dist/locales/de/openhands.json +1 -1
- package/dist/locales/en/openhands.json +1 -1
- package/dist/locales/es/openhands.json +1 -1
- package/dist/locales/fr/openhands.json +1 -1
- package/dist/locales/it/openhands.json +1 -1
- package/dist/locales/ja/openhands.json +1 -1
- package/dist/locales/ko-KR/openhands.json +1 -1
- package/dist/locales/no/openhands.json +1 -1
- package/dist/locales/pt/openhands.json +1 -1
- package/dist/locales/tr/openhands.json +1 -1
- package/dist/locales/uk/openhands.json +1 -1
- package/dist/locales/zh-CN/openhands.json +1 -1
- package/dist/locales/zh-TW/openhands.json +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.js +10 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.js +21 -21
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/types/agent-server/core/events/index.d.ts +1 -0
- package/dist/types/agent-server/core/events/streaming-delta-event.d.ts +7 -0
- package/dist/types/agent-server/core/openhands-event.d.ts +2 -2
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +2 -0
- package/dist/types/agent-server/type-guards.js +3 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.js +69 -13
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-config.cjs +1 -1
- package/dist/utils/mcp-config.cjs.map +1 -1
- package/dist/utils/mcp-config.js +27 -19
- package/dist/utils/mcp-config.js.map +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.js +38 -18
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/normalize-display-model.cjs +1 -1
- package/dist/utils/normalize-display-model.cjs.map +1 -1
- package/dist/utils/normalize-display-model.js +8 -7
- package/dist/utils/normalize-display-model.js.map +1 -1
- package/dist/utils/openhands-llm.cjs +1 -1
- package/dist/utils/openhands-llm.cjs.map +1 -1
- package/dist/utils/openhands-llm.d.ts +13 -0
- package/dist/utils/openhands-llm.js +9 -3
- package/dist/utils/openhands-llm.js.map +1 -1
- package/package.json +2 -2
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +53 -118
- package/scripts/dev-with-automation.mjs +58 -4
- package/scripts/runtime-services-info.mjs +199 -0
- package/scripts/static-server.mjs +42 -4
- package/build/assets/acp-providers-DZEi8wDz.js +0 -1
- package/build/assets/agent-server-conversation-service.api-B82pNNTm.js +0 -5
- package/build/assets/browser-DTei6kki.js +0 -5
- package/build/assets/chat-send-button-06dIuWXm.js +0 -1
- package/build/assets/conversation-CBlJiDaV.js +0 -19
- package/build/assets/conversation-Dss8XCN_.js +0 -1
- package/build/assets/conversation-panel-B5sVpsz5.js +0 -1
- package/build/assets/conversation-service.api-B4s-xIOK.js +0 -1
- package/build/assets/conversation-store-kHcewy1E.js +0 -1
- package/build/assets/conversation-websocket-context-C2yKCqvj.js +0 -3
- package/build/assets/extensions-navigation-oOk5yl8X.js +0 -1
- package/build/assets/home-ChuA06Hv.js +0 -1
- package/build/assets/install-server-modal--lZ1HSHB.js +0 -1
- package/build/assets/llm-settings-D477P0Lg.js +0 -1
- package/build/assets/llm-settings-DtlQ7i4C.js +0 -1
- package/build/assets/manifest-17af0b17.js +0 -1
- package/build/assets/messages-luW9zf1w.js +0 -36
- package/build/assets/middleware-B5rcobhi.js +0 -6
- package/build/assets/model-selector-DzQRgNGZ.js +0 -1
- package/build/assets/root-layout-pQASEqtQ.js +0 -2
- package/build/assets/sidebar-store-B76R2gP8.js +0 -1
- package/build/assets/telemetry-DCrd7gnV.js +0 -2
- package/build/assets/use-event-store-Rw1YbvLm.js +0 -1
- package/build/assets/use-handle-plan-click-DYd5a6zN.js +0 -1
- package/build/assets/use-runtime-is-ready-DP-KKHO6.js +0 -1
- package/build/assets/use-settings-Clf0Y_P3.js +0 -1
- /package/build/assets/{automation-LZB0MjdV.js → automation-BzmydDjr.js} +0 -0
- /package/build/assets/{browser-store-BjhV_9wS.js → browser-store-C5uQbbIi.js} +0 -0
- /package/build/assets/{checkmark-BB7QCG5T.js → checkmark-SEZPnU2I.js} +0 -0
- /package/build/assets/{chevron-left-small-CuuwpRi9.js → chevron-left-small-x9_-ucHG.js} +0 -0
- /package/build/assets/{close-Cz0OAgTy.js → close-CbOsKMRg.js} +0 -0
- /package/build/assets/{code-tag-Cz9AIz-X.js → code-tag-C0vR_IQH.js} +0 -0
- /package/build/assets/{command-store-DAd3K0d_.js → command-store-BUWgE-vZ.js} +0 -0
- /package/build/assets/{confirmation-modal-C_lds1Tb.js → confirmation-modal-BPgWqWRI.js} +0 -0
- /package/build/assets/{context-menu-list-item-DhG1Ln5m.js → context-menu-list-item-CHWCx1Mc.js} +0 -0
- /package/build/assets/{conversation-state-store-BUU90dVq.js → conversation-state-store-DpgQaK_O.js} +0 -0
- /package/build/assets/{conversation-tab-empty-state-5bW9CQke.js → conversation-tab-empty-state-Ba5hbJhn.js} +0 -0
- /package/build/assets/{copy-CA1Dblua.js → copy-CAxUvM-U.js} +0 -0
- /package/build/assets/{dist-CBUfAk0Z.js → dist-CeJSjcAI.js} +0 -0
- /package/build/assets/{ellipsis-button-DRRmCrWi.js → ellipsis-button-CiLx8dqc.js} +0 -0
- /package/build/assets/{environment-switch-overlay-BrHKX6_Z.js → environment-switch-overlay-Cow6h62p.js} +0 -0
- /package/build/assets/{file-DM0ihEsO.js → file-BJCSojij.js} +0 -0
- /package/build/assets/{files-tab-store-QlUCuW8b.js → files-tab-store-CZAEwv3x.js} +0 -0
- /package/build/assets/{folder-UGYUKpqb.js → folder-wShAU0y7.js} +0 -0
- /package/build/assets/{git-status-mapper-N4-7eaeC.js → git-status-mapper-C3rfzUex.js} +0 -0
- /package/build/assets/{globe-2otpEmVh.js → globe-CQ_5xwpo.js} +0 -0
- /package/build/assets/{handle-capture-consent-OitMkDHc.js → handle-capture-consent-DDnXMC9Y.js} +0 -0
- /package/build/assets/{iconBase-B_5IRYeZ.js → iconBase-1A_WRQ4E.js} +0 -0
- /package/build/assets/{lesson-plan-5O2tVbD1.js → lesson-plan-B607buca.js} +0 -0
- /package/build/assets/{link-external-kU6aFXU6.js → link-external-DCsHkAj4.js} +0 -0
- /package/build/assets/{map-provider-BHow6ugd.js → map-provider-XSFHmdDs.js} +0 -0
- /package/build/assets/{modal-close-button-BCvw9IUN.js → modal-close-button-DY-rVmld.js} +0 -0
- /package/build/assets/{plan-components-BRiIX8Wn.js → plan-components-DsiDjcDi.js} +0 -0
- /package/build/assets/{sdk-settings-field-metadata-CtO73dY6.js → sdk-settings-field-metadata-CETNItbo.js} +0 -0
- /package/build/assets/{search-Cbh-hHBu.js → search-BqXT2Ied.js} +0 -0
- /package/build/assets/{secrets-service-DEIB-Cfk.js → secrets-service-rJqZtDmI.js} +0 -0
- /package/build/assets/{settings-KgLvVrSm.js → settings-BgL2HUsU.js} +0 -0
- /package/build/assets/{settings-gear-xGs_SPgZ.js → settings-gear-DFmoMp-6.js} +0 -0
- /package/build/assets/{settings-input-CPr7vX81.js → settings-input-DsoZj8Dm.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-GknosJgv.js → settings-like-page-layout-classes-DENKlZpD.js} +0 -0
- /package/build/assets/{settings-list-classes-CYDn4jUg.js → settings-list-classes-D8VAVZmi.js} +0 -0
- /package/build/assets/{settings-section-header-context-aD2iq1gD.js → settings-section-header-context-D61smD-W.js} +0 -0
- /package/build/assets/{skills-CCaEu1KQ.js → skills-BDOWVle-.js} +0 -0
- /package/build/assets/{switch-skeleton-C87Tx3Tc.js → switch-skeleton-QpdcdxRP.js} +0 -0
- /package/build/assets/{terminal-DQJ6IJUd.js → terminal-BUww3Ssl.js} +0 -0
- /package/build/assets/{toggle-switch-C-7juZ1u.js → toggle-switch-DDr-DnEc.js} +0 -0
- /package/build/assets/{typography-U1gkzkXo.js → typography-Cx7uw7z3.js} +0 -0
- /package/build/assets/{u-check-circle-lbkXL2z4.js → u-check-circle-CftRwky1.js} +0 -0
- /package/build/assets/{u-check-circle-half-CirnoxXG.js → u-check-circle-half-sGVk0BtL.js} +0 -0
- /package/build/assets/{u-circuit-Danff2ks.js → u-circuit-Cg9tH5qb.js} +0 -0
- /package/build/assets/{u-edit-CH5nNya1.js → u-edit-foF02hwH.js} +0 -0
- /package/build/assets/{use-breakpoint-2sN462wJ.js → use-breakpoint-Dt2knceC.js} +0 -0
- /package/build/assets/{use-click-outside-element-_vianyPb.js → use-click-outside-element-Bu2A3s59.js} +0 -0
- /package/build/assets/{use-is-authed-DrocXcet.js → use-is-authed-fNsj-Adj.js} +0 -0
- /package/build/assets/{use-llm-profiles-BhZRf-NX.js → use-llm-profiles-CyNVoVqm.js} +0 -0
- /package/build/assets/{use-skills-v8pQ02ze.js → use-skills-BWHATXK-.js} +0 -0
- /package/build/assets/{v4-BMWDcIWQ.js → v4-BygpdDmc.js} +0 -0
- /package/build/assets/{vendor~browser-C3GKF4mj.js → vendor~browser-BYEwwJqV.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DMcFTqbt.js → vendor~conversation-panel~conversation~alert-banner-BnHToS5O.js} +0 -0
- /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Cntsv2EN.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B4oeCCli.js} +0 -0
- /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTosGXG7.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D8cqyq4k.js} +0 -0
- /package/build/assets/{vendor~terminal-CnKZILnC.js → vendor~terminal-aeP3PnKf.js} +0 -0
- /package/build/assets/{vscode-url-helper-CwQPl6QN.js → vscode-url-helper-DOCkV_-G.js} +0 -0
- /package/build/assets/{waiting-for-runtime-message-B1Dzhtj5.js → waiting-for-runtime-message-Bg27u9JB.js} +0 -0
- /package/build/assets/{x-mark-CmcVOTk2.js → x-mark-Cn-YJVbN.js} +0 -0
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-service-DEIB-Cfk.js","assets/rolldown-runtime-BFRubm34.js","assets/settings-client-BUlG0Gzq.js","assets/agent-server-client-options-Dvgeb3x4.js","assets/proxy-wIasY2Po.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-DMH1jSwL.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-CT1Z6Pdu.js";import{t}from"./common-Cfviy7yT.js";import{D as n,a as r,b as i,c as a,n as o,t as s,u as c,w as l}from"./agent-server-client-options-Dvgeb3x4.js";import{n as ee,r as u}from"./settings-client-BUlG0Gzq.js";import{c as d,n as f,s as p}from"./vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js";import{t as m}from"./profiles-client-CesbAK-7.js";import{n as h}from"./agent-server-compatibility-BANjmMTo.js";import{n as g,t as _}from"./proxy-wIasY2Po.js";import{t as v}from"./v4-BMWDcIWQ.js";import{t as y}from"./settings-KgLvVrSm.js";import{a as b,u as x}from"./acp-providers-DZEi8wDz.js";import{t as S}from"./settings-service.api-CTQ-LpAA.js";var C=class{constructor(e){this.host=e.host.replace(/\/$/,``),this.apiKey=e.apiKey,this.client=new ee({baseUrl:this.host,apiKey:this.apiKey,timeout:e.timeout||6e4})}async createConversation(e){return(await this.client.post(`/api/conversations`,e)).data}async searchConversations(e={}){return(await this.client.get(`/api/conversations/search`,{params:e})).data}async countConversations(e={}){return(await this.client.get(`/api/conversations/count`,{params:e})).data}async getConversations(e){return(await this.client.get(`/api/conversations`,{params:{ids:e}})).data}async getConversation(e){return(await this.client.get(`/api/conversations/${e}`)).data}async searchEvents(e,t={}){return(await this.client.get(`/api/conversations/${e}/events/search`,{params:t})).data}async getEvent(e,t){return(await this.client.get(`/api/conversations/${e}/events/${t}`)).data}async getEvents(e,t){return Promise.all(t.map(async t=>{try{return await this.getEvent(e,t)}catch(e){if(e instanceof u&&e.status===404)return null;throw e}}))}async sendEvent(e,t,n={}){await this.client.post(`/api/conversations/${e}/events`,{...t,...n.run===void 0?{}:{run:n.run}})}async pauseConversation(e){return(await this.client.post(`/api/conversations/${e}/pause`,{})).data}async interruptConversation(e){return(await this.client.post(`/api/conversations/${e}/interrupt`,{})).data}async runConversation(e){return(await this.client.post(`/api/conversations/${e}/run`,{})).data}async askAgent(e,t){return(await this.client.post(`/api/conversations/${e}/ask_agent`,{question:t})).data}async getEventCount(e,t={}){return(await this.client.get(`/api/conversations/${e}/events/count`,{params:t})).data}async respondToConfirmation(e,t){return(await this.client.post(`/api/conversations/${e}/events/respond_to_confirmation`,t)).data}async getAgentFinalResponse(e){return(await this.client.get(`/api/conversations/${e}/agent_final_response`)).data}async setConfirmationPolicy(e,t){let n=`policy`in t?t:{policy:t};return(await this.client.post(`/api/conversations/${e}/confirmation_policy`,n)).data}async condenseConversation(e){return(await this.client.post(`/api/conversations/${e}/condense`,{})).data}async setSecurityAnalyzer(e,t){let n=te(t)?t:{security_analyzer:t};return(await this.client.post(`/api/conversations/${e}/security_analyzer`,n)).data}async updateSecrets(e,t){return(await this.client.post(`/api/conversations/${e}/secrets`,t)).data}async forkConversation(e,t={},n={}){return(await this.client.post(`/api/conversations/${e}/fork`,t,{params:n.includeSkills===void 0?void 0:{include_skills:n.includeSkills}})).data}async switchProfile(e,t){await this.client.post(`/api/conversations/${e}/switch_profile`,{profile_name:t})}async switchLLM(e,t){await this.client.post(`/api/conversations/${e}/switch_llm`,{llm:t})}async switchAcpModel(e,t){await this.client.post(`/api/conversations/${e}/switch_acp_model`,{model:t})}async deleteConversation(e){await this.client.delete(`/api/conversations/${e}`)}async updateConversation(e,t){return(await this.client.patch(`/api/conversations/${e}`,t)).data}close(){this.client.close()}};function te(e){return typeof e==`object`&&!!e&&`security_analyzer`in e}var w=new Map;function ne(e){return/^([/\\]|[a-zA-Z]:[/\\])/.test(e)}function re(e,t){return`${e.replace(/[/\\]+$/,``)}/${t.replace(/^[/\\]+/,``)}`}async function T(e={}){let t=o(e),n=t.host,r=w.get(n);if(r)return r;let i=(async()=>{let{home:e}=await new d(t).getHome();if(!e||typeof e!=`string`)throw Error(`Agent server returned an empty home directory`);return e.replace(/[/\\]+$/,``)})();w.set(n,i);try{return await i}catch(e){throw w.delete(n),e}}async function ie(e,t={}){let n=e.replace(/[/\\]+$/,``);return n?ne(n)?n:re(await T(t),n):T(t)}var E=`openhands-agent-server-conversation-metadata`,D=()=>{if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(E);if(!e)return{};let t=JSON.parse(e);return!t||typeof t!=`object`?{}:t}catch{return{}}},O=e=>{if(!(typeof window>`u`)){if(Object.keys(e).length===0){window.localStorage.removeItem(E);return}window.localStorage.setItem(E,JSON.stringify(e))}},k=e=>D()[e]??null,A=(e,t)=>{let n=D();n[e]=t,O(n)},j=e=>{let t=D();e in t&&(delete t[e],O(t))};function M(e){if(!e?.id)return e;let t=k(e.id);return t?{...e,selected_repository:e.selected_repository??t.selected_repository??null,selected_branch:e.selected_branch??t.selected_branch??null,git_provider:e.git_provider??t.git_provider??null,selected_workspace:e.selected_workspace??t.selected_workspace??null}:e}function N(){let e=a().backend;if(e.kind!==`cloud`)throw Error(`Cloud conversations call requires a cloud backend.`);return e}async function ae(e=20,t){let n=N(),r=new URLSearchParams;r.set(`limit`,String(e)),t&&r.set(`page_id`,t),r.set(`sort_order`,`UPDATED_AT_DESC`);let i=await _({backend:n,method:`GET`,path:`/api/v1/app-conversations/search?${r.toString()}`});return{items:(i?.items??[]).map(e=>M(e)),next_page_id:i?.next_page_id??null}}async function P(e){if(e.length===0)return[];let t=N(),n=new URLSearchParams;for(let t of e)n.append(`ids`,t);return(await _({backend:t,method:`GET`,path:`/api/v1/app-conversations?${n.toString()}`})??[]).map(M)}async function oe(e){return await _({backend:N(),method:`POST`,path:`/api/v1/app-conversations`,body:e})}async function se(e){return _({backend:N(),method:`GET`,path:`/api/v1/app-conversations/${e}/download`,responseType:`blob`})}async function ce(e){await _({backend:N(),method:`DELETE`,path:`/api/v1/app-conversations/${e}`})}async function le(e,t){return await _({backend:N(),method:`PATCH`,path:`/api/v1/app-conversations/${e}`,body:{public:t}})}async function ue(e){await _({backend:N(),method:`POST`,path:`/api/v1/sandboxes/${e}/pause`})}async function de(e){await _({backend:N(),method:`POST`,path:`/api/v1/sandboxes/${e}/resume`})}async function fe(e,t){let n=N(),r=new URLSearchParams;return r.append(`file_path`,t),await _({backend:n,method:`GET`,path:`/api/v1/app-conversations/${e}/file?${r.toString()}`})??``}async function pe(e){let t=N(),n=new URLSearchParams;return n.set(`ids`,e),(await _({backend:t,method:`GET`,path:`/api/v1/app-conversations/start-tasks?${n.toString()}`}))?.[0]??null}var F=`canvas_ui`,me=`canvas_ui_tool`,he=[`terminal`,`file_editor`,`task_tracker`,F],I=`browser_tool_set`,L=`task_tool_set`;function ge(){return!0}function _e(){let e=(void 0)?.trim();if(!e)return null;try{let t=JSON.parse(e);return!t||typeof t!=`object`?null:t}catch{return null}}function ve(){let e=_e();if(!e?.services)return;let t=[];t.push(`<RUNTIME_SERVICES>`),e.mode?t.push(`You are running inside an agent-canvas dev stack started in '${e.mode}' mode.`):t.push(`You are running inside an agent-canvas dev stack.`),t.push(`The following services are reachable from your sandbox. URLs are written`,`from your point of view (i.e., as you should curl/fetch them).`,``);let{agent_server:n,ingress:r,automation:i}=e.services,a=e.services.frontend??e.services.vite;n?.url_from_agent&&t.push(`* Agent Server (you): ${n.url_from_agent}`,` ${n.description??`The agent-server hosting your tool calls.`}`),r?.url_from_agent&&t.push(`* Ingress: ${r.url_from_agent}`,` ${r.description??`Unified entry point for browser-facing traffic.`}`),a?.url_from_agent&&t.push(`* Frontend: ${a.url_from_agent}`,` ${a.description??`Frontend dev server.`}`),i?.url_from_agent?(t.push(`* Automation backend: ${i.url_from_agent}`,` ${i.description??`OpenHands Automations service.`}`),i.docs_url&&t.push(` Docs: ${i.docs_url}`),i.openapi_url&&t.push(` OpenAPI: ${i.openapi_url}`),i.auth_env_var&&t.push(` Auth: header 'X-Session-API-Key: $${i.auth_env_var}'`)):t.push(`* Automation backend: not running in this dev mode (skip /api/automation calls).`);let o=n?.url_from_agent;return t.push(``,`Trust this block over guessing: do not assume any other URLs are running.`),o&&t.push(`In particular, ${o} inside your sandbox is the Agent Server`,`you are running inside of — NOT the automation backend.`),t.push(`</RUNTIME_SERVICES>`),t.join(`
|
|
3
|
-
`)}function ye(e){let{host:t}=o();return`${t}/api/conversations/${e}`}function R(e){return`Conversation ${e.slice(0,5)}`}function z(e){let n=k(e.id),r=e.agent?.kind===`ACPAgent`,i=r?e.tags?.acpserver??null:null;return{id:e.id,created_by_user_id:null,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:n?.active_profile??null,title:e.title?.trim()?e.title:R(e.id),trigger:null,pr_number:[],agent_kind:r?`acp`:`openhands`,acp_server:i,llm_model:r?x({runtimeName:e.current_model_name,runtimeId:e.current_model_id,configured:e.agent?.acp_model,sdkLlm:e.agent?.llm?.model}):e.agent?.llm?.model??y.llm_model,metrics:e.metrics?{accumulated_cost:e.metrics.accumulated_cost??null,max_budget_per_task:e.metrics.max_budget_per_task??null,accumulated_token_usage:e.metrics.accumulated_token_usage?{prompt_tokens:e.metrics.accumulated_token_usage.prompt_tokens??0,completion_tokens:e.metrics.accumulated_token_usage.completion_tokens??0,cache_read_tokens:e.metrics.accumulated_token_usage.cache_read_tokens??0,cache_write_tokens:e.metrics.accumulated_token_usage.cache_write_tokens??0,context_window:e.metrics.accumulated_token_usage.context_window??0,per_turn_token:e.metrics.accumulated_token_usage.per_turn_token??0}:null}:null,created_at:e.created_at,updated_at:e.updated_at,execution_status:e.execution_status??t.IDLE,sandbox_status:e.sandbox_status??null,conversation_url:ye(e.id),session_api_key:o().apiKey??null,sandbox_id:null,workspace:{working_dir:e.workspace?.working_dir??l()},public:!1,sub_conversation_ids:[]}}function be(e){return{items:e.items.map(z),next_page_id:e.next_page_id??null}}var B=[`acp_command`,`acp_args`,`acp_model`,`acp_session_mode`,`acp_prompt_timeout`],xe=`acpserver`,Se=new Set([`schema_version`,`agent_settings`,`workspace`,`conversation_id`,`initial_message`,`plugins`]);function V(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:structuredClone(e)}function H(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Ce(e){return e.confirmation_mode===!0?e.security_analyzer===`llm`?{kind:`ConfirmRisky`,threshold:`HIGH`,confirm_unknown:!0}:{kind:`AlwaysConfirm`}:{kind:`NeverConfirm`}}function we(e){switch(e.security_analyzer){case`llm`:return{kind:`LLMSecurityAnalyzer`};case`pattern`:return{kind:`PatternSecurityAnalyzer`};case`policy_rail`:return{kind:`PolicyRailSecurityAnalyzer`};default:return}}function Te(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.name==`string`}function U(e,t){return e===I?ge()&&h(e):e===L?t.enable_sub_agents===!0&&h(e):!0}function Ee(e){let t=new Map;for(let e of he)t.set(e,{name:e,params:{}});for(let n of[I,L])U(n,e)&&t.set(n,{name:n,params:{}});let n=e.tools;if(Array.isArray(n)&&n.every(e=>Te(e)))for(let r of n)U(r.name,e)&&t.set(r.name,{name:r.name,params:V(r.params)});return Array.from(t.values())}function De(e,t){let n=[e?.trim(),t?.trim()].filter(Boolean);return n.length===0?null:{role:`user`,content:[{type:`text`,text:n.join(`
|
|
4
|
-
|
|
5
|
-
`)}],run:!0}}function W(e){let t=ve();return{...V(e.agent_context),load_public_skills:n(),load_user_skills:!0,load_project_skills:!0,...t?{system_message_suffix:t}:{}}}function G(e){return V(e.agent_settings).agent_kind===`acp`}function Oe(e){let t=V(e.agent_settings).acp_server;return typeof t==`string`&&t.length>0?t:void 0}function ke(e){let t=e.acp_command;if(!(Array.isArray(t)&&t.length===0)&&t!==void 0)return t;let n=b(typeof e.acp_server==`string`?e.acp_server:void 0);return n?[...n.default_command]:t}function Ae(e){let t=V(e.agent_settings),n={agent_kind:`acp`,agent_context:W(t)};for(let e of B){if(e===`acp_model`)continue;let r=e===`acp_command`?ke(t):t[e];r!=null&&(n[e]=r)}let r=V(t.mcp_config);Object.keys(r).length>0&&`mcpServers`in r&&(n.mcp_config=r);let i=b(typeof t.acp_server==`string`?t.acp_server:void 0),a=x({configured:t.acp_model,providerDefault:i?.default_model});return a&&(n.acp_model=a),n}function je(e){let t=V(e.agent_settings),n=V(t.llm);n.model=typeof n.model==`string`&&n.model.trim().length>0?n.model:y.llm_model;let r=H(n.api_key);r?n.api_key=r:delete n.api_key;let i=H(n.base_url);i?n.base_url=i:delete n.base_url;let a=V(t.mcp_config);(Object.keys(a).length===0||!(`mcpServers`in a))&&delete t.mcp_config,delete t.acp_server;for(let e of B)delete t[e];return delete t.acp_env,{...t,llm:n,agent_context:W(t),tools:Ee(t)}}function Me(e){return G(e)?Ae(e):je(e)}function Ne(e){let{settings:t,query:n,conversationInstructions:r,plugins:i,workingDir:a}=e,o=V(t.conversation_settings),s=De(n,r);return Se.forEach(e=>delete o[e]),{...o,workspace:{kind:`LocalWorkspace`,working_dir:a??l()},...s?{initial_message:s}:{},...i?.length?{plugins:i.map(e=>({source:e.source,...e.ref?{ref:e.ref}:{},...e.repo_path?{repo_path:e.repo_path}:{}}))}:{}}}function Pe(e){let t=e.encryptedAgentSettings?{...e.settings,agent_settings:e.encryptedAgentSettings}:e.settings,n=G(t),r=Me(t),i=n?Oe(t):void 0,a=Ne(e.encryptedConversationSettings?{...e,settings:{...e.settings,conversation_settings:e.encryptedConversationSettings}}:e),o={agent_settings:r,workspace:a.workspace,confirmation_policy:Ce(a),max_iterations:typeof a.max_iterations==`number`?a.max_iterations:500,stuck_detection:!0,autotitle:!0,worktree:!0};i&&(o.tags={[xe]:i}),e.secretsEncrypted&&(o.secrets_encrypted=!0),e.conversationId&&(o.conversation_id=e.conversationId);let s=we(a);if(s&&(o.security_analyzer=s),a.initial_message&&(o.initial_message=a.initial_message),a.plugins&&(o.plugins=a.plugins),a.hook_config&&(o.hook_config=a.hook_config),o.tool_module_qualnames={[F]:me,...a.tool_module_qualnames??{}},a.agent_definitions&&(o.agent_definitions=a.agent_definitions),e.customSecrets&&e.customSecrets.length>0){let t=c(),r=t?g(t):{},i={};for(let t of e.customSecrets){let e={kind:`LookupSecret`,url:`/api/settings/secrets/${encodeURIComponent(t.name)}`,description:t.description};Object.keys(r).length>0&&(e.headers=r),i[t.name]=e}o.secrets=i,n&&(o.agent_settings.agent_context={...o.agent_settings.agent_context,secrets:i})}return o}async function Fe(t){let{SecretsService:n}=await e(async()=>{let{SecretsService:e}=await import(`./secrets-service-DEIB-Cfk.js`).then(e=>e.n);return{SecretsService:e}},__vite__mapDeps([0,1,2,3,4,5])),[r,i]=await Promise.all([S.getSettingsForConversation(),n.getSecrets()]),{agentSettings:a,conversationSettings:o,secretsEncrypted:s}=r;return Pe({...t,encryptedAgentSettings:a,encryptedConversationSettings:o,secretsEncrypted:s,customSecrets:i})}function Ie(){return{hooks:[]}}var Le=`1970-01-01T00:00:00.000Z`,Re=`Unable to load conversations because the selected agent server returned data this UI does not understand. Check the backend URL/session key and update the agent server if needed.`;function K(){return Error(Re)}function q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function J(e){return typeof e==`number`?e:null}function Y(e){return typeof e==`number`?e:0}function X(e){return typeof e==`string`?e:null}function Z(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:Le}function ze(e){return q(e)?{prompt_tokens:Y(e.prompt_tokens),completion_tokens:Y(e.completion_tokens),cache_read_tokens:Y(e.cache_read_tokens),cache_write_tokens:Y(e.cache_write_tokens),context_window:Y(e.context_window),per_turn_token:Y(e.per_turn_token)}:null}function Q(e){return q(e)?{accumulated_cost:J(e.accumulated_cost),max_budget_per_task:J(e.max_budget_per_task),accumulated_token_usage:ze(e.accumulated_token_usage)}:null}function Be(e){if(!q(e))return null;let t=q(e.llm)?{model:X(e.llm.model)}:null;return{kind:X(e.kind),acp_model:X(e.acp_model),llm:t}}function Ve(e){return q(e)?{working_dir:X(e.working_dir)}:null}function He(e){if(!q(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function Ue(e){if(!e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(n&&n!==`.`)if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n);return`/${t.join(`/`)}`}function We(e,t){let n=Ue(e),r=Ue(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function Ge(e){if(!q(e)||typeof e.id!=`string`||!e.id.trim())throw K();return{id:e.id.trim(),title:X(e.title),created_at:Z(e,`created_at`,`createdAt`),updated_at:Z(e,`updated_at`,`updatedAt`),execution_status:X(e.execution_status),sandbox_status:X(e.sandbox_status),metrics:Q(e.metrics),agent:Be(e.agent),workspace:Ve(e.workspace),tags:He(e.tags),current_model_id:X(e.current_model_id),current_model_name:X(e.current_model_name)}}function $(e){if(!Array.isArray(e))throw K();return e.map(Ge)}function Ke(e){if(Array.isArray(e))return{items:$(e),next_page_id:null};if(!q(e))throw K();return{items:$(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var qe=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function Je(e){let t=e??`idle`;return qe.has(t)?t:`idle`}function Ye(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var Xe=class{static async sendMessage(e,t,n){let i=a().backend,s=n?.conversationUrl??null,c=n?.sessionApiKey??null;if(i.kind===`cloud`){if(!s||!c){let[t]=await P([e]);s=t?.conversation_url?.trim()??null,c=t?.session_api_key?.trim()??null}if(!s||!c)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await _({backend:i,method:`POST`,hostOverride:r(s),path:`/api/conversations/${e}/events`,body:{...t,run:!0},authMode:`session-api-key`,sessionApiKey:c}),t}return await new C(o({conversationUrl:s,sessionApiKey:c})).sendEvent(e,t,{run:!0}),t}static async createConversation(e,t,n,r,l,ee,u,d){if(a().backend.kind===`cloud`)return oe({initial_message:e?{role:`user`,content:[{type:`text`,text:e}]}:null,title:t??null,selected_repository:r?.selected_repository??null,selected_branch:r?.selected_branch??null,git_provider:r?.git_provider??null,plugins:n??null,parent_conversation_id:ee??null,agent_type:u,sandbox_id:d??null});let f=await S.getSettings(),p=v(),m=await Fe({settings:f,query:e,conversationInstructions:t,plugins:n,conversationId:p,workingDir:await ie(l??i(p))}),h=await new C(o()).createConversation(m),g=c();if(!g)throw new s;return(r?.selected_repository||l)&&A(h.id,{selected_repository:r?.selected_repository??null,selected_branch:r?.selected_branch??null,git_provider:r?.git_provider??null,selected_workspace:l??null}),{id:h.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:h.id,agent_server_url:g.host,request:{initial_message:m.initial_message,plugins:n??null},created_at:h.created_at,updated_at:h.updated_at}}static async getStartTask(e){return a().backend.kind===`cloud`?pe(e):null}static async getVSCodeUrl(e,t,n){let r=await this.resolveConversationWorkingDir(e);return{vscode_url:await new p(o({conversationUrl:t,sessionApiKey:n})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:r})}}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??l()}static async batchGetAppConversations(e){return e.length===0?[]:a().backend.kind===`cloud`?P(e):$(await new C(o()).getConversations(e)).map(e=>z(e))}static async updateConversationPublicFlag(e,t){if(a().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return le(e,t)}static async updateConversationRepository(e,t,n,r){t?A(e,{...k(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):j(e);let[i]=await this.batchGetAppConversations([e]);return Ye(i,e)}static async readConversationFile(e,t){if(a().backend.kind===`cloud`)return fe(e,We(t??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let n=await this.resolveConversationWorkingDir(e),r=We(t??`${n}/.agents_tmp/PLAN.md`,n);return new d(o()).downloadTextFile(r)}static async downloadConversation(e){return a().backend.kind===`cloud`?se(e):new d(o()).downloadTrajectory(e)}static async getHooks(e){return Ie()}static async getRuntimeConversation(e,t,n){let i=a().backend,s=i.kind===`cloud`&&t?await _({backend:i,method:`GET`,hostOverride:r(t),path:`/api/conversations/${e}`,authMode:`session-api-key`,sessionApiKey:n}):await new C(o({conversationUrl:t,sessionApiKey:n})).getConversation(e),c=Ge(s),l=q(s)?s.stats:null;return{id:c.id,title:c.title?.trim()?c.title:R(c.id),metrics:Q(c.metrics),created_at:c.created_at,updated_at:c.updated_at,status:Je(c.execution_status),stats:q(l)?l:{usage_to_metrics:{}}}}static async searchConversations(e=20,t){return a().backend.kind===`cloud`?ae(e,t):be(Ke(await new C(o()).searchConversations({limit:e,page_id:t,sort_order:f.UPDATED_AT_DESC})))}static async deleteConversation(e){a().backend.kind===`cloud`?await ce(e):await new C(o()).deleteConversation(e),j(e)}static async updateConversationTitle(e,t){await new C(o()).updateConversation(e,{title:t});let[n]=await this.batchGetAppConversations([e]);return Ye(n,e)}static async switchProfile(e,t){if(a().backend.kind===`cloud`)throw Error(`LLM profile switching is only supported for local agent-server backends.`);if(!e){await new m(o()).activateProfile(t);return}let n=o(),r=new C(n),i=await new m(n).getProfile(t,{exposeSecrets:`encrypted`}),s=typeof i.config.model==`string`?i.config.model:``;if(!s)throw Error(`Profile '${t}' has no model.`);await r.switchLLM(e,{...i.config,model:s,usage_id:`profile:${t}:${v()}`})}static async switchAcpModel(e,t){if(a().backend.kind===`cloud`)throw Error(`ACP model switching is only supported for local agent-server backends.`);await new C(o()).switchAcpModel(e,t)}};export{k as a,C as c,de as i,P as n,A as o,ue as r,ie as s,Xe as t};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./common-Cfviy7yT.js";import{t}from"./settings-KgLvVrSm.js";import{t as n}from"./automation-LZB0MjdV.js";import{i as r,n as i,r as a,t as o}from"./vendor~browser-3J6WDaAB.js";var s=[`file1.txt`,`file2.txt`,`file3.txt`],c=[`reboot_skynet.exe`,`target_list.txt`,`terminator_blueprint.txt`],l={home:`/home/openhands`,favorites:[{label:`Downloads`,path:`/home/openhands/Downloads`}],locations:[]},u={"/projects":[{name:`demo-app`,path:`/projects/demo-app`},{name:`sample-tools`,path:`/projects/sample-tools`},{name:`notes-service`,path:`/projects/notes-service`}],"/projects/demo-app":[{name:`web-client`,path:`/projects/demo-app/web-client`},{name:`api-service`,path:`/projects/demo-app/api-service`}],"/projects/demo-app/web-client":[]},d=[i.all(`*/api/bash/execute_bash_command`,async()=>r.json({command:``,exit_code:0,output:``})),i.get(`*/api/file/home`,async()=>r.json(l)),i.get(`*/api/file/search_subdirs`,async({request:e})=>{let t=new URL(e.url).searchParams.get(`path`)??``,n=u[t]??[];return r.json({path:t,items:n,subdirs:n,next_page_id:null})}),i.get(`*/api/file/:path`,async({params:e})=>r.json({path:`/${e.path?.toString()??`home`}`,subdirs:[]})),i.get(`/api/conversations/:conversationId/list-files`,async({params:e})=>{await o();let t=e.conversationId?.toString();return t?t===`test-conversation-id-2`?r.json(c):r.json(s):r.json(null,{status:400})}),i.get(`/api/conversations/:conversationId/select-file`,async({request:e})=>{await o();let t=new URL(e.url).searchParams.get(`file`)?.toString();return t?r.json({code:`Content of ${t}`}):r.json(null,{status:404})})],f=[{issue_number:6968,title:`Fix merge conflicts`,repo:`octocat/hello-world`,task_type:`MERGE_CONFLICTS`,git_provider:`github`}],p=[{issue_number:268,title:`Fix broken CI checks`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:281,title:`Fix issue`,repo:`octocat/earth`,task_type:`UNRESOLVED_COMMENTS`,git_provider:`github`},{issue_number:293,title:`Update documentation`,repo:`octocat/earth`,task_type:`OPEN_ISSUE`,git_provider:`github`},{issue_number:305,title:`Refactor user service`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:312,title:`Fix styling bug`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:327,title:`Add unit tests`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:331,title:`Implement dark mode`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:345,title:`Optimize build process`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`},{issue_number:352,title:`Update dependencies`,repo:`octocat/earth`,task_type:`FAILING_CHECKS`,git_provider:`github`}],m=[...f,...p],h=[i.get(`*/api/v1/git/suggested-tasks/search`,async({request:e})=>{let t=new URL(e.url),n=t.searchParams.get(`limit`),i=t.searchParams.get(`page_id`),a=[...m];if(i||n){let e=n?parseInt(n,10):30;a=a.slice(0,e)}return r.json({items:a,next_page_id:null})})],g=new Map([[`OpenAI_API_Key`,{value:`test-123`,description:`OpenAI API Key`}],[`Google_Maps_API_Key`,{value:`test-123`,description:`Google Maps API Key`}]]),_=[i.get(`*/api/settings/secrets`,async({request:e})=>{if(new URL(e.url).pathname.split(`/`).filter(Boolean).length>3)return;let t=Array.from(g.entries()).map(([e,{description:t}])=>({name:e,description:t}));return r.json({secrets:t})}),i.get(`*/api/settings/secrets/:name`,async({params:e})=>{let{name:t}=e;if(typeof t!=`string`)return r.json({detail:`Invalid name`},{status:400});let n=g.get(t);return n?new r(n.value,{headers:{"Content-Type":`text/plain`}}):r.json({detail:`Secret not found`},{status:404})}),i.put(`*/api/settings/secrets`,async({request:e})=>{let t=await e.json();return!t?.name||!t?.value?r.json({detail:`name and value are required`},{status:400}):(g.set(t.name,{value:t.value,description:t.description}),r.json({name:t.name,description:t.description}))}),i.delete(`*/api/settings/secrets/:name`,async({params:e})=>{let{name:t}=e;return typeof t==`string`?g.delete(t)?r.json({deleted:!0}):r.json({detail:`Secret not found`},{status:404}):r.json({detail:`Invalid name`},{status:400})})],v=(e,t)=>Array.from({length:e},(e,n)=>({id:`${n+1}`,full_name:`user/repo-${n+1}`,git_provider:t,is_public:Math.random()>.3,stargazers_count:Math.floor(Math.random()*1e3),pushed_at:new Date(Date.now()-Math.random()*90*24*60*60*1e3).toISOString()})),ee=e=>Array.from({length:e},(e,t)=>({name:t===0?`main`:t===1?`develop`:`feature/branch-${t}`,commit_sha:`abc123${t.toString().padStart(3,`0`)}`,protected:t===0,last_push_date:new Date(Date.now()-Math.random()*7*24*60*60*1e3).toISOString()})),y={github:v(120,`github`),gitlab:v(120,`gitlab`),bitbucket:v(120,`bitbucket`)},b=ee(25),x=[{path:`src/components/hello.tsx`,status:`UPDATED`},{path:`src/utils/new-helper.ts`,status:`ADDED`},{path:`src/old-module.py`,status:`DELETED`}];typeof window<`u`&&(window.__setMockGitChanges__=e=>{x=e});var S=[i.get(`*/api/user/repositories`,async({request:e})=>{await o(500);let t=new URL(e.url),n=t.searchParams.get(`selected_provider`),i=parseInt(t.searchParams.get(`page`)||`1`,10),a=parseInt(t.searchParams.get(`per_page`)||`30`,10),s=t.searchParams.get(`sort`)||`pushed`,c=t.searchParams.get(`installation_id`);if(!n)return r.json(`Git provider token required. (such as GitHub).`,{status:401});let l=[...y[n]||[]];if(s===`pushed`?l.sort((e,t)=>new Date(t.pushed_at).getTime()-new Date(e.pushed_at).getTime()):s===`stars`&&l.sort((e,t)=>(t.stargazers_count||0)-(e.stargazers_count||0)),c&&n===`github`){let e=(parseInt(c,10)||0)*20;l=l.slice(e,e+20)}let u=(i-1)*a,d=u+a,f=l.slice(u,d),p=d<l.length,m=i>1,h=Math.ceil(l.length/a),g=``;if(p||m){let e=[];m&&e.push(`</api/user/repositories?page=${i-1}&per_page=${a}>; rel="prev"`),p&&e.push(`</api/user/repositories?page=${i+1}&per_page=${a}>; rel="next"`),e.push(`</api/user/repositories?page=${h}&per_page=${a}>; rel="last"`),e.push(`</api/user/repositories?page=1&per_page=${a}>; rel="first"`),g=e.join(`, `)}let _=[...f];return _.length>0&&g&&(_[0]={..._[0],link_header:g}),r.json(_)}),i.get(`*/api/user/search/repositories`,async({request:e})=>{await o(300);let t=new URL(e.url),n=t.searchParams.get(`query`)||``,i=t.searchParams.get(`selected_provider`),a=parseInt(t.searchParams.get(`per_page`)||`5`,10),s=t.searchParams.get(`sort`)||`stars`,c=t.searchParams.get(`order`)||`desc`;if(!i)return r.json(`Git provider token required.`,{status:401});let l=[...(y[i]||[]).filter(e=>e.full_name.toLowerCase().includes(n.toLowerCase()))];s===`stars`&&l.sort((e,t)=>{let n=e.stargazers_count||0,r=t.stargazers_count||0;return c===`desc`?r-n:n-r});let u=l.slice(0,a);return r.json(u)}),i.get(`*/api/user/repository/branches`,async({request:e})=>{await o(300);let t=new URL(e.url),n=t.searchParams.get(`repository`),i=parseInt(t.searchParams.get(`page`)||`1`,10),a=parseInt(t.searchParams.get(`per_page`)||`30`,10);if(!n)return r.json(`Repository parameter is required`,{status:400});let s=(i-1)*a,c=s+a,l={branches:b.slice(s,c),has_next_page:c<b.length,current_page:i,per_page:a,total_count:b.length};return r.json(l)}),i.get(`*/api/user/search/branches`,async({request:e})=>{await o(200);let t=new URL(e.url),n=t.searchParams.get(`repository`),i=t.searchParams.get(`query`)||``,a=parseInt(t.searchParams.get(`per_page`)||`30`,10);if(!n)return r.json(`Repository parameter is required`,{status:400});let s=b.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())).slice(0,a);return r.json(s)}),i.get(`*/api/git/changes`,async()=>r.json(x)),i.get(`*/api/git/diff`,async()=>r.json({original:`def greet(name):
|
|
2
|
-
return f"Hello, {name}!"
|
|
3
|
-
`,modified:`def greet(name: str) -> str:
|
|
4
|
-
return f"Hello, {name}! Welcome."
|
|
5
|
-
`}))];function C(e,t){let n={...e};for(let[e,r]of Object.entries(t))typeof r==`object`&&r&&!Array.isArray(r)&&typeof n[e]==`object`&&n[e]!=null&&!Array.isArray(n[e])?n[e]=C(n[e],r):n[e]=r;return n}var w=t.agent_settings??{},T=w.llm,E=typeof T?.model==`string`?T.model:`openhands/claude-opus-4-5-20251101`,D={model_name:`AgentSettings`,sections:[{key:`general`,label:`General`,fields:[{key:`enable_sub_agents`,label:`Enable sub-agents`,description:`Allow the agent to delegate work to specialized built-in sub-agents.`,section:`general`,section_label:`General`,value_type:`boolean`,default:!1,choices:[],depends_on:[],prominence:`major`,secret:!1,required:!1}]},{key:`llm`,label:`LLM`,fields:[{key:`llm.model`,label:`Model`,description:`Select the model to use for this conversation.`,section:`llm`,section_label:`LLM`,value_type:`string`,default:E,choices:[],depends_on:[],prominence:`critical`,secret:!1,required:!0},{key:`llm.api_key`,label:`API Key`,description:`Provide the API key used to authenticate requests for the selected model.`,section:`llm`,section_label:`LLM`,value_type:`string`,default:null,choices:[],depends_on:[],prominence:`critical`,secret:!0,required:!1},{key:`llm.base_url`,description:`Override the model provider's default API base URL when needed.`,label:`Base URL`,section:`llm`,section_label:`LLM`,value_type:`string`,default:null,choices:[],depends_on:[],prominence:`critical`,secret:!1,required:!1},{key:`llm.temperature`,label:`Temperature`,description:`Adjust randomness for non-deterministic model outputs.`,section:`llm`,section_label:`LLM`,value_type:`number`,default:null,choices:[],depends_on:[],prominence:`minor`,secret:!1,required:!1}]},{key:`critic`,label:`Critic`,fields:[{description:`Enable an additional critic pass to review the agent's work.`,key:`critic.enabled`,label:`Enable critic`,section:`critic`,section_label:`Critic`,value_type:`boolean`,default:!1,choices:[],depends_on:[],prominence:`critical`,secret:!1,required:!0},{description:`Choose when the critic should review and intervene.`,key:`critic.mode`,label:`Mode`,section:`critic`,section_label:`Critic`,value_type:`string`,default:`finish_and_message`,choices:[{label:`finish_and_message`,value:`finish_and_message`},{label:`all_actions`,value:`all_actions`}],depends_on:[`critic.enabled`],prominence:`minor`,secret:!1,required:!0}]},{key:`condenser`,label:`Condenser`,fields:[{description:`Enable the default LLM-based condenser to summarize long conversation histories.`,key:`condenser.enable_default_condenser`,label:`Enable default condenser`,section:`condenser`,section_label:`Condenser`,value_type:`boolean`,default:!0,choices:[],depends_on:[],prominence:`critical`,secret:!1,required:!0},{description:`Maximum number of tokens the condenser keeps after summarization. Leave blank for unlimited.`,key:`condenser.condenser_max_size`,label:`Condenser max size`,section:`condenser`,section_label:`Condenser`,value_type:`integer`,default:null,choices:[],depends_on:[],prominence:`major`,secret:!1,required:!1}]}]},O={model_name:`ConversationSettings`,sections:[{key:`general`,label:`General`,fields:[{key:`max_iterations`,label:`Max iterations`,section:`general`,description:`Maximum number of agent steps allowed before the conversation stops.`,section_label:`General`,value_type:`integer`,default:500,choices:[],depends_on:[],prominence:`major`,secret:!1,required:!0}]},{key:`verification`,label:`Verification`,fields:[{key:`confirmation_mode`,label:`Confirmation mode`,description:`Pause for confirmation before the agent performs high-risk actions.`,section:`verification`,section_label:`Verification`,value_type:`boolean`,default:!1,choices:[],depends_on:[],prominence:`major`,secret:!1,required:!0},{key:`security_analyzer`,label:`Security analyzer`,description:`Choose how OpenHands should analyze actions before asking for confirmation.`,section:`verification`,section_label:`Verification`,value_type:`string`,default:`llm`,choices:[{label:`llm`,value:`llm`},{label:`none`,value:`none`}],depends_on:[`confirmation_mode`],prominence:`major`,secret:!1,required:!1}]}]},k={...t,provider_tokens_set:{},agent_settings_schema:D,agent_settings:{...w,critic:{mode:`finish_and_message`,enabled:!1},llm:{...T??{},api_key:null,model:E},condenser:{enable_default_condenser:!0,condenser_max_size:null},enable_sub_agents:!1},conversation_settings_schema:O,conversation_settings:{...t.conversation_settings??{}}},A={settings:structuredClone(k)},j={profiles:new Map,activeProfile:null},M=e=>decodeURIComponent(String(Array.isArray(e)?e[0]??``:e??``)),te=e=>({name:e.name,model:typeof e.config.model==`string`?e.config.model:null,base_url:typeof e.config.base_url==`string`?e.config.base_url:null,api_key_set:e.api_key_set}),N=e=>{let t=A.settings||structuredClone(k);A.settings={...t,agent_settings:{...t.agent_settings??{},llm:structuredClone(e.config)},llm_api_key_set:e.api_key_set}},ne=(e,t)=>{let n=structuredClone(e.config);return e.api_key_set&&`api_key`in n&&(t===`encrypted`?n.api_key=`gAAAAA_mock_encrypted_${e.name}`:t===`plaintext`||(n.api_key=null)),{name:e.name,config:n,api_key_set:e.api_key_set}},re=(e,t)=>{let n=structuredClone(t.llm??{});if(typeof n.model!=`string`||n.model.trim().length===0)return null;let r={name:e,config:n,api_key_set:typeof n.api_key==`string`&&n.api_key.trim().length>0};return j.profiles.set(e,r),j.activeProfile===e&&N(r),r},P=[`anthropic/claude-3.5`,`anthropic/claude-sonnet-4-20250514`,`anthropic/claude-sonnet-4-5-20250929`,`anthropic/claude-haiku-4-5-20251001`,`anthropic/claude-opus-4-5-20251101`,`anthropic/claude-opus-4-8`,`openai/gpt-3.5-turbo`,`openai/gpt-4o`,`openai/gpt-4o-mini`,`openhands/claude-sonnet-4-20250514`,`openhands/claude-sonnet-4-5-20250929`,`openhands/claude-haiku-4-5-20251001`,`openhands/claude-opus-4-5-20251101`,`openhands/minimax-m2.7`,`sambanova/Meta-Llama-3.1-8B-Instruct`],F=new Set([`anthropic/claude-opus-4-5-20251101`,`anthropic/claude-opus-4-8`,`anthropic/claude-sonnet-4-5-20250929`,`openhands/claude-opus-4-5-20251101`,`openhands/claude-sonnet-4-5-20250929`,`openhands/minimax-m2.7`]),I=[`openhands`,`anthropic`,`openai`,`mistral`,`gemini`,`deepseek`,`moonshot`,`minimax`],L=Array.from(new Set(P.map(e=>e.split(`/`)[0]).filter(e=>!!e))),ie=P.reduce((e,t)=>{if(!F.has(t))return e;let[n,...r]=t.split(`/`);return!n||r.length===0?e:(e[n]??=[],e[n].push(r.join(`/`)),e)},{}),ae=`1.24.0`,oe=[i.get(`*/server_info`,async()=>r.json({uptime:0,idle_time:0,version:ae,usable_tools:[`terminal`,`file_editor`,`task_tracker`,`browser_tool_set`],agents:[`CodeActAgent`],default_agent:`CodeActAgent`,models:P,security_analyzers:[`llm`,`none`]})),i.get(`*/api/llm/models`,async()=>r.json({models:P})),i.get(`*/api/llm/models/verified`,async()=>r.json({models:ie})),i.get(`*/api/llm/providers`,async()=>r.json({providers:L})),i.get(`*/api/options/models`,async()=>r.json({models:P,verified_models:[`claude-opus-4-5-20251101`,`claude-sonnet-4-5-20250929`],verified_providers:I,default_model:`openhands/minimax-m2.7`})),i.get(`*/api/v1/config/providers/search`,async({request:e})=>{let t=new URL(e.url),n=t.searchParams.get(`query`)?.toLowerCase(),i=t.searchParams.get(`verified__eq`),a=new Set,o=[];for(let e of P){let[t]=e.split(`/`);t&&!a.has(t)&&(a.add(t),o.push({name:t,verified:I.includes(t)}))}if(n&&(o=o.filter(e=>e.name.toLowerCase().includes(n))),i!=null){let e=i===`true`;o=o.filter(t=>t.verified===e)}return r.json({items:o,next_page_id:null})}),i.get(`*/api/v1/config/models/search`,async({request:e})=>{let t=new URL(e.url),n=t.searchParams.get(`query`)?.toLowerCase(),i=t.searchParams.get(`verified__eq`),a=t.searchParams.get(`provider__eq`),o=P.map(e=>{let[t,...n]=e.split(`/`),r=n.join(`/`);return{provider:t||null,name:r,verified:F.has(e)}});if(a&&(o=o.filter(e=>e.provider===a)),n&&(o=o.filter(e=>e.name.toLowerCase().includes(n))),i!=null){let e=i===`true`;o=o.filter(t=>t.verified===e)}return r.json({items:o,next_page_id:null})}),i.get(`*/api/options/security-analyzers`,async()=>r.json([`llm`,`none`])),i.get(`*/api/profiles`,async()=>r.json({profiles:Array.from(j.profiles.values()).map(te),active_profile:j.activeProfile})),i.get(`*/api/profiles/:name`,async({params:e,request:t})=>{let n=M(e.name),i=j.profiles.get(n);return i?r.json(ne(i,t.headers.get(`X-Expose-Secrets`))):r.json({detail:`Profile '${n}' not found`},{status:404})}),i.post(`*/api/profiles/:name`,async({params:e,request:t})=>{let n=M(e.name),i=await t.json();if(!i)return r.json({detail:`Empty body`},{status:400});let a=re(n,i);return a?r.json({name:a.name,message:`Profile '${a.name}' saved`},{status:201}):r.json({detail:`Profile requires llm.model`},{status:400})}),i.delete(`*/api/profiles/:name`,async({params:e})=>{let t=M(e.name);return j.profiles.delete(t),j.activeProfile===t&&(j.activeProfile=null),r.json({name:t,message:`Profile '${t}' deleted`})}),i.post(`*/api/profiles/:name/rename`,async({params:e,request:t})=>{let n=M(e.name),i=(await t.json())?.new_name?.trim()??``,a=j.profiles.get(n);if(!a)return r.json({detail:`Profile '${n}' not found`},{status:404});if(!i)return r.json({detail:`new_name is required`},{status:400});if(i!==n&&j.profiles.has(i))return r.json({detail:`Profile '${i}' already exists`},{status:409});j.profiles.delete(n);let o={...a,name:i};return j.profiles.set(i,o),j.activeProfile===n&&(j.activeProfile=i,N(o)),r.json({name:i,message:`Profile '${n}' renamed to '${i}'`})}),i.post(`*/api/profiles/:name/activate`,async({params:e})=>{let t=M(e.name),n=j.profiles.get(t);return n?(j.activeProfile=t,N(n),r.json({name:t,message:`Profile '${t}' activated and applied to current settings`,llm_applied:!0})):r.json({detail:`Profile '${t}' not found`},{status:404})}),i.get(`*/api/v1/web-client/config`,()=>{let e={posthog_client_key:`fake-posthog-client-key`,feature_flags:{hide_llm_settings:!1,hide_users_page:!1},providers_configured:[],maintenance_start_time:null,recaptcha_site_key:null,faulty_models:[],error_message:null,updated_at:new Date().toISOString()};return r.json(e)}),i.get(`*/api/settings/conversation-schema`,async()=>(await o(),r.json(O))),i.get(`*/api/v1/settings/conversation-schema`,async()=>(await o(),r.json(O))),i.get(`*/api/v1/settings`,async()=>{await o();let{settings:e}=A;return e?r.json(e):r.json(null,{status:404})}),i.get(`*/api/settings`,async({request:e})=>{if(new URL(e.url).pathname.split(`/`).filter(Boolean).length>2)return;await o();let{settings:t}=A;if(!t)return r.json({agent_settings:{},conversation_settings:{},llm_api_key_is_set:!1});let n=e.headers.get(`X-Expose-Secrets`),i=structuredClone(t.agent_settings??{}),a=i.llm;a?.api_key&&(n===`encrypted`?a.api_key=`gAAAAA_mock_encrypted_${String(a.api_key).slice(0,8)}`:n===`plaintext`||(a.api_key=`**********`));let s=!!t.llm_api_key_set||!!t.agent_settings?.llm&&!!t.agent_settings.llm?.api_key;return r.json({agent_settings:i,conversation_settings:t.conversation_settings??{},llm_api_key_is_set:s})}),i.patch(`*/api/settings`,async({request:e})=>{await o();let t=await e.json();if(!t)return r.json({error:`Empty body`},{status:400});if(!t.agent_settings_diff&&!t.conversation_settings_diff)return r.json({error:`At least one of agent_settings_diff or conversation_settings_diff must be provided`},{status:400});let n=A.settings||structuredClone(k),i={...n};if(t.agent_settings_diff){let e=C(n.agent_settings??{},t.agent_settings_diff);i.agent_settings=e;let r=e.llm;r?.api_key&&typeof r.api_key==`string`&&r.api_key.trim().length>0&&(i.llm_api_key_set=!0)}return t.conversation_settings_diff&&(i.conversation_settings={...n.conversation_settings??{},...t.conversation_settings_diff}),A.settings=i,r.json({agent_settings:i.agent_settings??{},conversation_settings:i.conversation_settings??{},llm_api_key_is_set:i.llm_api_key_set??!1})}),i.post(`*/api/mcp/test`,async()=>(await o(),r.json({ok:!0,tools:[`mock_tool`]}))),i.get(`*/api/settings/agent-schema`,async()=>(await o(),r.json(D))),i.get(`*/api/v1/settings/agent-schema`,async()=>(await o(),r.json(D))),i.post(`*/api/v1/settings`,async({request:e})=>{await o();let t=await e.json();if(t){let e=A.settings||structuredClone(k);if(`agent_settings`in t||`conversation_settings`in t)return r.json({error:`Use *_diff nested settings payloads`,keys:[`agent_settings`,`conversation_settings`].filter(e=>e in t)},{status:422});let n={...e},i=t.agent_settings_diff;i&&(n.agent_settings=C(e.agent_settings??{},i));let a=t.conversation_settings_diff;a&&(n.conversation_settings={...e.conversation_settings??{},...a});for(let[e,r]of Object.entries(t))e!==`agent_settings_diff`&&e!==`conversation_settings_diff`&&e!==`agent_settings_schema`&&e!==`conversation_settings_schema`&&(n[e]=r);return A.settings=n,r.json(null,{status:200})}return r.json(null,{status:400})})],se={},R=Date.now(),z=`pagination-local`,B=`pagination-cloud`,ce=100,le=500,ue=Date.UTC(2026,4,13,0,0,0),V=[{id:`1`,title:`My New Project`,created_at:new Date(R).toISOString(),updated_at:new Date(R).toISOString(),execution_status:`waiting_for_confirmation`},{id:`2`,title:`Repo Testing`,created_at:new Date(R-2880*60*1e3).toISOString(),updated_at:new Date(R-2880*60*1e3).toISOString(),execution_status:`idle`,selected_repository:`octocat/hello-world`,git_provider:`github`},{id:`3`,title:`Another Project`,created_at:new Date(R-7200*60*1e3).toISOString(),updated_at:new Date(R-7200*60*1e3).toISOString(),execution_status:`idle`,selected_repository:`octocat/earth`,selected_branch:`main`},{id:`4`,title:`Archived Project`,created_at:new Date(R-14400*60*1e3).toISOString(),updated_at:new Date(R-14400*60*1e3).toISOString(),execution_status:`idle`,sandbox_status:`MISSING`},{id:`5`,title:`Errored Project`,created_at:new Date(R-10080*60*1e3).toISOString(),updated_at:new Date(R-10080*60*1e3).toISOString(),execution_status:`idle`,sandbox_status:`ERROR`},{id:z,title:`Local pagination fixture`,created_at:new Date(R-8640*60*1e3).toISOString(),updated_at:new Date(R-8640*60*1e3).toISOString(),execution_status:`idle`,workspace:{working_dir:`/workspace/project`}}],H=new Map(V.map(e=>[e.id,e])),de=new Map([[z,U(`Local pagination message`)],[B,U(`Cloud pagination message`)]]);function fe(e,t){return{id:`${t.toLowerCase().replaceAll(` `,`-`)}-${e}`,timestamp:new Date(ue+e*6e4).toISOString(),source:`agent`,llm_message:{role:`assistant`,content:[{type:`text`,text:`${t} ${e}`}]},activated_microagents:[],extended_content:[]}}function U(e){return Array.from({length:ce},(t,n)=>fe(n+1,e))}function pe(e,t){let n=Number(t.get(`limit`)??`100`),r=t.get(`timestamp__lt`),i=t.get(`sort_order`),a=[...r?e.filter(e=>e.timestamp<r):e].sort((e,t)=>i===`TIMESTAMP_DESC`?t.timestamp.localeCompare(e.timestamp):e.timestamp.localeCompare(t.timestamp));return{items:a.slice(0,n),next_page_id:a.length>n?`next-page`:null}}async function W(e,t){let n=de.get(e);return n?(t.has(`timestamp__lt`)&&await o(le),pe(n,t)):null}function me(){let t=new Date(R-8640*60*1e3).toISOString();return{id:B,created_by_user_id:null,selected_repository:null,selected_branch:null,git_provider:null,title:`Cloud pagination fixture`,trigger:null,pr_number:[],llm_model:`openhands/claude-haiku-4-5-20251001`,metrics:null,created_at:t,updated_at:t,execution_status:e.IDLE,conversation_url:null,session_api_key:null,sandbox_id:null,workspace:{working_dir:`/workspace/project`},public:!1,sub_conversation_ids:[]}}var G=me();function K(e){return{id:e.id,title:e.title??null,created_at:e.created_at,updated_at:e.updated_at,execution_status:e.execution_status??`idle`,sandbox_status:e.sandbox_status??null,metrics:e.metrics??null,agent:e.agent??null,workspace:e.workspace??null}}function he(e){return!e||e.length===0?Array.from(H.values()).map(K):e.map(e=>{let t=H.get(e);return t?K(t):null})}var ge=[i.get(`*/api/conversations/search`,async({request:e})=>{let t=new URL(e.url),n=Number(t.searchParams.get(`limit`)??`20`),i=Array.from(H.values()).sort((e,t)=>t.updated_at.localeCompare(e.updated_at)).slice(0,n).map(K);return r.json({items:i,next_page_id:null})}),i.get(`*/api/conversations`,async({request:e})=>{let t=new URL(e.url),n=t.searchParams.getAll(`ids[]`).length>0?t.searchParams.getAll(`ids[]`):t.searchParams.getAll(`ids`);return r.json(he(n))}),i.get(`*/api/conversations/:conversationId`,async({params:e})=>{let t=e.conversationId,n=H.get(t);return n?r.json(K(n)):r.json(null,{status:404})}),i.post(`*/api/conversations`,async()=>{await o();let e={id:`${Math.floor(Math.random()*1e5)}`,title:`New Conversation`,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),execution_status:`idle`};return H.set(e.id,e),r.json(K(e),{status:201})}),i.patch(`/api/conversations/:conversationId`,async({params:e,request:t})=>{let n=e.conversationId,i=H.get(n);if(i){let e=await t.json();if(e?.title)return H.set(n,{...i,title:e.title,updated_at:new Date().toISOString()}),r.json(null,{status:200})}return r.json(null,{status:404})}),i.delete(`*/api/conversations/:conversationId`,async({params:e})=>{let t=e.conversationId;return H.has(t)?(H.delete(t),r.json(null,{status:200})):r.json(null,{status:404})}),i.get(`*/api/conversations/:conversationId/events/count`,async()=>r.json(0)),i.get(`*/api/conversations/:conversationId/events/search`,async({params:e,request:t})=>{let n=e.conversationId,i=await W(n,new URL(t.url).searchParams);if(i)return r.json(i);let a=se[n]??[];return r.json({items:a,next_page_id:null})}),i.post(`*/api/conversations/:conversationId/events`,async()=>r.json({ok:!0})),i.post(`*/api/conversations/:conversationId/pause`,async()=>r.json({success:!0})),i.post(`*/api/conversations/:conversationId/interrupt`,async()=>r.json({success:!0})),i.post(`*/api/conversations/:conversationId/run`,async()=>r.json({success:!0})),i.post(`*/api/cloud-proxy`,async({request:e})=>{let t=(await e.json()).path??`/`,n=new URL(t,`https://mock-cloud.test`);if(n.pathname===`/api/v1/app-conversations`){let e=n.searchParams.getAll(`ids`);if(e.length>0)return r.json(e.map(e=>e===B?G:null))}if(n.pathname===`/api/v1/app-conversations/search`)return r.json({items:[G],next_page_id:null});if(n.pathname===`/api/v1/conversation/${B}/events/search`){let e=await W(B,n.searchParams);return r.json(e)}return n.pathname===`/api/v1/settings`?r.json({llm_model:`openhands/claude-haiku-4-5-20251001`,llm_base_url:``,llm_api_key:null,llm_api_key_set:!1,search_api_key_set:!1,agent:`CodeActAgent`,language:`en`,user_consents_to_analytics:!1,provider_tokens_set:{github:``}}):n.pathname===`/api/keys/current`?r.json({id:`mock-key`,name:`Mock key`,org_id:`org-1`,user_id:`user-1`,auth_type:`api_key`}):n.pathname===`/api/organizations`?r.json({items:[{id:`org-1`,name:`Mock Org`,is_personal:!0}],current_org_id:`org-1`}):n.pathname===`/api/organizations/org-1/me`?r.json({org_id:`org-1`,user_id:`org-1`}):n.pathname===`/api/authenticate`?r.json({ok:!0}):r.json({})}),i.post(`*/api/conversations/:conversationId/ask_agent`,async()=>r.json({response:`Mock agent response`})),i.get(`*/api/vscode/url`,async()=>r.json({url:null})),i.post(`*/api/skills`,async()=>r.json({skills:[]})),i.post(`/api/v1/conversations/:conversationId/pending-messages`,async()=>r.json({id:`mock-pending-id`,position:0})),i.get(`*/api/conversations/:conversationId/microagents`,async()=>r.json({microagents:[{name:`init`,type:`agentskills`,content:`Initialize an AGENTS.md file for the repository`,triggers:[`/init`]},{name:`releasenotes`,type:`agentskills`,content:`Generate a changelog from the most recent release`,triggers:[`/releasenotes`]},{name:`test-runner`,type:`agentskills`,content:`Run the test suite and report results`,triggers:[`/test`]},{name:`code-search`,type:`knowledge`,content:`Search the codebase semantically`,triggers:[`/search`]},{name:`docker`,type:`agentskills`,content:`Docker usage guide for container environments`,triggers:[`docker`,`container`]},{name:`github`,type:`agentskills`,content:`GitHub API interaction guide`,triggers:[`github`,`git`]},{name:`work_hosts`,type:`repo`,content:`Available hosts for web applications`,triggers:[]}]}))],_e=[i.post(`*/api/cloud-proxy`,()=>r.json({error:`cloud proxy not available in mock mode`},{status:503})),i.get(`*/api/user/info`,()=>r.json({id:`1`,login:`octocat`,avatar_url:`https://avatars.githubusercontent.com/u/583231?v=4`,company:`GitHub`,email:`placeholder@placeholder.placeholder`,name:`monalisa octocat`})),i.post(`*/api/authenticate`,async()=>r.json({message:`Authenticated`})),i.post(`*/api/logout`,()=>r.json(null,{status:200}))],ve=[i.post(`*/api/submit-feedback`,async()=>(await o(1200),r.json({statusCode:200,body:{message:`Success`,link:`fake-url.com`,password:`abc123`}}))),i.post(`*/api/submit-feedback`,async()=>r.json({statusCode:200},{status:200}))],ye=[i.post(`https://us.i.posthog.com/e`,async()=>r.json(null,{status:200})),i.post(`https://z.openhands.dev/*`,async()=>r.json(null,{status:200}))],q=new Date().toISOString(),J=e=>new Date(Date.now()-e*864e5).toISOString(),be={automations:[{id:`a1000000-0000-0000-0000-000000000001`,name:`PR Triage Digest`,trigger:{type:`cron`,schedule:`0 9 * * 1-5`,schedule_human:`Weekdays at 09:00`},enabled:!0,repository:`acme/frontend-app`,model:`triage-fast`,created_at:J(90),updated_at:q,prompt:`Review newly opened pull requests in acme/frontend-app, identify risky changes, summarize likely impact, and prepare a concise digest with priority ordering for the engineering review channel.`,branch:`main`,plugins:[`GitHub`,`Slack`,`Linear`],notification:`Slack digest to #eng-reviews`,timezone:`America/Los_Angeles`,last_triggered_at:J(0)},{id:`a1000000-0000-0000-0000-000000000002`,name:`Nightly Security Pass`,trigger:{type:`cron`,schedule:`30 1 * * *`,schedule_human:`Daily at 01:30`},enabled:!0,repository:`acme/backend-api`,model:`security-careful`,created_at:J(60),updated_at:q,prompt:`Scan the acme/backend-api repository for known security vulnerabilities, outdated dependencies, and insecure code patterns. Produce a prioritized remediation summary.`,branch:`main`,plugins:[`GitHub`],notification:`Email to security-team@acme.com`,timezone:`UTC`,last_triggered_at:J(0)},{id:`a1000000-0000-0000-0000-000000000003`,name:`Docs Sync on Push`,trigger:{type:`cron`,schedule:`*/5 * * * *`,schedule_human:`Runs on every push`},enabled:!0,repository:`acme/docs`,model:`docs-fast`,created_at:J(45),updated_at:q,prompt:`Monitor acme/docs for new pushes. For each push, generate a changelog-ready summary of what changed and why.`,branch:`main`,plugins:[`GitHub`,`Slack`],notification:`Slack to #docs-updates`,timezone:`America/New_York`,last_triggered_at:J(1)},{id:`a1000000-0000-0000-0000-000000000004`,name:`Release Readiness Review`,trigger:{type:`cron`,schedule:`0 11 * * 5`,schedule_human:`Fridays at 11:00`},enabled:!1,repository:`acme/realtime-service`,model:`release-review`,created_at:J(80),updated_at:q,prompt:`Compile a release readiness report: list open blockers, active incidents, and pending approvals for acme/realtime-service.`,branch:`release`,plugins:[`GitHub`,`Linear`],notification:`Slack to #releases`,timezone:`America/Chicago`,last_triggered_at:J(14)},{id:`a1000000-0000-0000-0000-000000000005`,name:`Incident Webhook Summary`,trigger:{type:`cron`,schedule:`0 */2 * * *`,schedule_human:`On incident webhook`},enabled:!1,repository:`acme/incident-service`,model:`incident-summary`,created_at:J(30),updated_at:q,prompt:`Summarize incoming incident webhooks, categorize by severity, and post a digest to the on-call Slack channel.`,branch:`main`,plugins:[`Slack`],notification:`Slack to #oncall`,timezone:`UTC`,last_triggered_at:null},{id:`a1000000-0000-0000-0000-000000000006`,name:`PR Review on Open`,trigger:{type:`event`,source:`github`,on:`pull_request.opened`,filter:`repository.full_name == 'acme/frontend-app'`},enabled:!0,repository:`acme/frontend-app`,model:`review-fast`,created_at:J(15),updated_at:q,prompt:`When a new PR is opened, perform a thorough code review focusing on correctness, security, and performance. Post findings as inline comments.`,branch:`main`,plugins:[`GitHub`],notification:`GitHub PR comment`,last_triggered_at:J(0)},{id:`a1000000-0000-0000-0000-000000000007`,name:`Release Notes Generator`,trigger:{type:`event`,source:`github`,on:`release.published`,filter:`glob(release.tag_name, 'v*') && !release.prerelease`},enabled:!0,repository:`acme/backend-api`,model:`docs-fast`,created_at:J(10),updated_at:q,prompt:`Generate comprehensive release notes from the commits since the last release. Include breaking changes, new features, and bug fixes.`,branch:`main`,plugins:[`GitHub`],notification:`GitHub release body update`,last_triggered_at:J(3)}],total:7},xe=(e,t=9)=>{let n=new Date(Date.now()-e*864e5);return n.setHours(t,0,0,0),n.toISOString()};function Y(e,t,r,i=9,a=!0){let o=xe(r,i);return{id:e,status:t,conversation_id:a?`conv-${e}`:null,bash_command_id:a?`cmd-${e}`:null,error_detail:t===n.FAILED?`Process exited with code 1`:null,started_at:o,completed_at:new Date(new Date(o).getTime()+12e4).toISOString()}}var Se={"a1000000-0000-0000-0000-000000000001":[Y(`r1-01`,n.COMPLETED,0),Y(`r1-02`,n.COMPLETED,1),Y(`r1-03`,n.FAILED,2),Y(`r1-04`,n.COMPLETED,3),Y(`r1-05`,n.COMPLETED,4),Y(`r1-06`,n.COMPLETED,7),Y(`r1-07`,n.FAILED,8),Y(`r1-08`,n.COMPLETED,9),Y(`r1-09`,n.COMPLETED,10),Y(`r1-10`,n.COMPLETED,11)],"a1000000-0000-0000-0000-000000000002":[Y(`r2-01`,n.COMPLETED,0,1),Y(`r2-02`,n.COMPLETED,1,1),Y(`r2-03`,n.COMPLETED,2,1),Y(`r2-04`,n.FAILED,3,1),Y(`r2-05`,n.COMPLETED,4,1)],"a1000000-0000-0000-0000-000000000003":[Y(`r3-01`,n.COMPLETED,1),Y(`r3-02`,n.COMPLETED,2),Y(`r3-03`,n.COMPLETED,3)],"a1000000-0000-0000-0000-000000000004":[Y(`r4-01`,n.FAILED,14,11,!1),Y(`r4-02`,n.COMPLETED,21,11)],"a1000000-0000-0000-0000-000000000005":[],"a1000000-0000-0000-0000-000000000006":[Y(`r6-01`,n.COMPLETED,0,14),Y(`r6-02`,n.COMPLETED,0,11),Y(`r6-03`,n.FAILED,1,16),Y(`r6-04`,n.COMPLETED,2,10),Y(`r6-05`,n.COMPLETED,3,9)],"a1000000-0000-0000-0000-000000000007":[Y(`r7-01`,n.COMPLETED,3,15),Y(`r7-02`,n.COMPLETED,10,12)]},X=new Map(be.automations.map(e=>[e.id,{...e}])),Ce=[i.get(`*/api/automation/health`,async()=>(await o(100),r.json({status:`ok`}))),i.get(`*/api/automation/v1`,async({request:e})=>{await o(300);let t=new URL(e.url),n=Number(t.searchParams.get(`limit`)??`50`),i=Number(t.searchParams.get(`offset`)??`0`),a=Array.from(X.values()),s={automations:a.slice(i,i+n),total:a.length};return r.json(s)}),i.get(`*/api/automation/v1/:id/runs`,async({params:e,request:t})=>{await o(200);let n=e.id;if(!X.has(n))return r.json({detail:`Automation not found`},{status:404});let i=new URL(t.url),a=Number(i.searchParams.get(`limit`)??`50`),s=Number(i.searchParams.get(`offset`)??`0`),c=Se[n]??[],l={runs:c.slice(s,s+a),total:c.length};return r.json(l)}),i.get(`*/api/automation/v1/:id`,async({params:e})=>{await o(200);let t=X.get(e.id);return t?r.json(t):r.json({detail:`Automation not found`},{status:404})}),i.patch(`*/api/automation/v1/:id`,async({params:e,request:t})=>{await o(200);let n=e.id,i=await t.clone().json(),a=X.get(n);if(!a)return r.json({detail:`Automation not found`},{status:404});let s={...a,...i,updated_at:new Date().toISOString()};return X.set(n,s),r.json(s)}),i.post(`*/api/automation/v1/:id/dispatch`,async({params:e})=>{await o(200);let t=e.id;if(!X.get(t))return r.json({detail:`Automation not found`},{status:404});let i={id:crypto.randomUUID(),status:n.PENDING,conversation_id:null,bash_command_id:null,error_detail:null,started_at:new Date().toISOString(),completed_at:null};return r.json(i,{status:201})}),i.delete(`*/api/automation/v1/:id`,async({params:e})=>{await o(200);let t=e.id;return X.has(t)?(X.delete(t),new r(null,{status:204})):r.json({detail:`Automation not found`},{status:404})})],we={ok:!0,tools:[]},Te=[i.post(`*/api/mcp/test`,async()=>r.json(we))],Z=[],Q=[];function $(){return{workspaces:Z.map(e=>({...e})),workspaceParents:Q.map(e=>({...e}))}}var Ee=[i.get(`*/api/workspaces`,async()=>r.json($())),i.post(`*/api/workspaces`,async({request:e})=>{let t=await e.json();for(let e of t.workspaces??[]){let t=Z.findIndex(t=>t.path===e.path);t>=0?Z[t]={...e}:Z.push({...e})}return r.json($())}),i.delete(`*/api/workspaces`,async({request:e})=>{let t=new URL(e.url).searchParams.get(`path`),n=Z.length;return Z=Z.filter(e=>e.path!==t),r.json({deleted:Z.length!==n})}),i.post(`*/api/workspaces/parents`,async({request:e})=>{let t=await e.json();for(let e of t.parents??[]){let t=Q.findIndex(t=>t.path===e.path);t>=0?Q[t]={...e}:Q.push({...e})}return r.json($())}),i.delete(`*/api/workspaces/parents`,async({request:e})=>{let t=new URL(e.url).searchParams.get(`path`),n=Q.length;return Q=Q.filter(e=>e.path!==t),r.json({deleted:Q.length!==n})}),i.post(`*/api/auth/workspace-session`,async()=>r.json({ok:!0})),i.delete(`*/api/auth/workspace-session`,async()=>new r(null,{status:204}))],De=a(...d,...h,..._,...S,...oe,...ge,..._e,...ve,...ye,...Ce,...Te,...Ee);export{De as worker};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{a as n,f as r,o as i}from"./path-utils-CNd_jqv_.js";import{t as a}from"./useMutation-7hG0GuPx.js";import{o,t as s}from"./declaration-IA661TBv.js";import{n as c}from"./QueryClientProvider-7oLZ1RtQ.js";import{t as l}from"./useQuery-JDs8UaWj.js";import{t as u}from"./useTranslation-CbJtty1g.js";import{r as d}from"./vendor~root-layout~home~conversation-panel~conversation-Cg0nXqVs.js";import{a as f,n as p,t as m}from"./custom-toast-handlers-fgD4IYsu.js";import{g as h,i as g,t as _}from"./utils-CVcuFUYj.js";import{t as v}from"./common-Cfviy7yT.js";import{c as y,n as b}from"./agent-server-client-options-Dvgeb3x4.js";import{n as x}from"./active-backend-context-CQTk4wD8.js";import{r as S}from"./vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js";import{t as C}from"./agent-server-conversation-service.api-B82pNNTm.js";import{n as ee}from"./navigation-context-CszaA-CJ.js";import{t as te}from"./dist-B-SKiGDl.js";import{t as w}from"./proxy-wIasY2Po.js";import{t as T}from"./react-CuAHzoGi.js";import{r as ne,t as E}from"./middleware-B5rcobhi.js";import{t as re}from"./conversation-local-storage-D5Tre_GA.js";import{t as D}from"./use-is-authed-DrocXcet.js";import{r as ie}from"./use-settings-Clf0Y_P3.js";import{t as ae}from"./use-tracking-DQU60djN.js";import{o as oe,s as se,t as O}from"./vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js";import{t as k}from"./git-status-mapper-N4-7eaeC.js";var A=o(),j=te(`shrink-0 self-stretch min-w-full bg-[var(--oh-border)]`,{variants:{orientation:{horizontal:`h-[1px]`},color:{light:`bg-[var(--oh-border)]`},size:{thin:`h-[1px]`},inset:{none:``,menu:``}},defaultVariants:{orientation:`horizontal`,color:`light`,size:`thin`,inset:`none`}});function M({orientation:e,color:t,size:n,inset:r,className:i,testId:a}){return r===`menu`?(0,A.jsx)(`div`,{"data-testid":a,role:`separator`,className:_(`relative min-w-full shrink-0 self-stretch`,`h-3`,i),children:(0,A.jsx)(`div`,{"aria-hidden":!0,className:`absolute top-1/2 -left-1 -right-1 h-px -translate-y-1/2 bg-[var(--oh-border)]`})}):(0,A.jsx)(`div`,{"data-testid":a,role:`separator`,className:_(j({orientation:e,color:t,size:n,inset:r}),i)})}var N=()=>{let e=c();return a({mutationFn:e=>C.deleteConversation(e.conversationId),onMutate:async t=>{await e.cancelQueries({queryKey:[`user`,`conversations`]});let n=e.getQueryData([`user`,`conversations`]);return e.setQueryData([`user`,`conversations`],e=>e?.filter(e=>e.conversation_id!==t.conversationId)),{previousConversations:n}},onSuccess:(e,t)=>{re(t.conversationId)},onError:(t,n,r)=>{r?.previousConversations&&e.setQueryData([`user`,`conversations`],r.previousConversations)},onSettled:()=>{e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`start-tasks`]})}})},P=()=>{let{t:e}=u(`openhands`),t=c(),{conversationId:r,navigate:o}=ee();return a({mutationKey:[`stop-conversation`],mutationFn:async e=>i(e.conversationId),onMutate:async()=>{let n=f.loading(e(s.TOAST$STOPPING_CONVERSATION),m);return await t.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:t.getQueryData([`user`,`conversations`]),toastId:n}},onError:(n,r,i)=>{i?.toastId&&f.dismiss(i.toastId),p(e(s.TOAST$FAILED_TO_STOP_CONVERSATION)),i?.previousConversations&&t.setQueryData([`user`,`conversations`],i.previousConversations)},onSuccess:(i,a,c)=>{c?.toastId&&f.dismiss(c.toastId),f.success(e(s.TOAST$CONVERSATION_STOPPED),m),n(t,a.conversationId,{execution_status:v.PAUSED,sandbox_status:`PAUSED`}),r===a.conversationId&&o(`/conversations`)}})},F=e(t()),I=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M22.1595 5.22752L20.9895 4.95152L17.8275 8.09552L16.0365 6.27152L19.1205 3.03602L18.8505 1.84802C18.1988 1.62999 17.5172 1.51461 16.83 1.50602C16.0804 1.49449 15.3365 1.63746 14.6445 1.92602C13.9764 2.22843 13.3725 2.65616 12.8655 3.18602C12.3011 3.72063 11.8542 4.36683 11.553 5.08352C10.9732 6.50984 10.9732 8.10619 11.553 9.53252C8.42587 12.609 5.3391 15.7263 2.29351 18.8835C1.97851 19.296 1.82851 19.8105 1.86751 20.328C1.89825 20.8846 2.14856 21.4063 2.56351 21.7785C2.74951 21.981 2.97151 22.149 3.21901 22.2705C3.47401 22.383 3.74851 22.4475 4.02601 22.461C4.50001 22.452 4.95451 22.272 5.30701 21.9555C7.62901 19.77 12.078 15.2805 14.6055 12.6495C15.291 12.9405 16.0275 13.0905 16.7715 13.089C17.5204 13.0884 18.2616 12.9377 18.9513 12.6458C19.641 12.3539 20.2652 11.9267 20.787 11.3895C21.8588 10.2964 22.4575 8.82543 22.4535 7.29452C22.4708 6.59398 22.3715 5.89544 22.1595 5.22752ZM4.39951 20.892C4.34178 20.9433 4.27218 20.9794 4.19701 20.997C4.12306 21.0098 4.04746 21.0098 3.97351 20.997C3.89598 20.9852 3.82213 20.956 3.75751 20.9115C3.68817 20.8709 3.62955 20.8144 3.58651 20.7465C3.37651 20.532 3.18001 20.124 3.37651 19.8945C5.43151 17.709 9.66301 13.437 12.309 10.8255C12.459 11.0235 12.624 11.2125 12.801 11.3895C12.978 11.574 13.1685 11.745 13.371 11.901C10.812 14.526 6.63901 18.747 4.40101 20.892H4.39951ZM21.0765 7.29452C21.0795 8.44202 20.6325 9.54452 19.8285 10.3665C19.0262 11.1536 17.9472 11.5944 16.8233 11.5944C15.6994 11.5944 14.6203 11.1536 13.818 10.3665C13.23 9.75286 12.8283 8.98485 12.6597 8.15183C12.4911 7.31882 12.5624 6.45505 12.8655 5.66102C13.0673 5.12062 13.3802 4.62858 13.784 4.21671C14.1879 3.80485 14.6737 3.48233 15.21 3.27002C15.7192 3.05688 16.266 2.94774 16.818 2.94902H17.199L14.4735 5.75852V6.80252L17.316 9.63152H18.306L21.0765 6.90752V7.29452ZM4.86001 10.032H7.15651L8.21401 11.1075L9.23101 10.0965L8.23351 9.07952V9.01502L8.31901 6.54152L7.98901 5.88602L3.69901 3.06302L2.81251 3.16202L1.56601 4.43552L1.46701 5.33402L4.22401 9.71102L4.86001 10.0335V10.032ZM3.44251 4.58402L6.91351 6.87002L6.85501 8.55452H5.24101L3.00301 5.01152L3.44251 4.58402ZM14.1 15.024L15.111 14.0145L19.77 18.792C20.1624 19.2045 20.3813 19.752 20.3813 20.3213C20.3813 20.8906 20.1624 21.4381 19.77 21.8505C19.4749 22.1535 19.0955 22.3605 18.6811 22.4448C18.2667 22.5291 17.8365 22.4866 17.4465 22.323C17.1976 22.2126 16.9744 22.0517 16.791 21.8505L12.078 17.046L13.0965 16.029L17.7945 20.82C17.8577 20.8897 17.9363 20.9436 18.024 20.9775C18.1967 21.0476 18.3899 21.0476 18.5625 20.9775C18.6502 20.9436 18.7288 20.8897 18.792 20.82C18.8577 20.755 18.9088 20.6768 18.942 20.5905C18.9764 20.5025 18.9947 20.409 18.996 20.3145C18.9945 20.2202 18.9767 20.1268 18.9435 20.0385C18.9103 19.9523 18.8592 19.8741 18.7935 19.809L14.1 15.024Z`,fill:`currentColor`})}),L=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 13.0605L17.469 18.531L18.531 17.4705L13.0605 12L18.531 6.53099L17.4705 5.46899L12 10.9395L6.53099 5.46899L5.47049 6.53099L10.9395 12L5.47049 17.469L6.53099 18.531L12 13.0605Z`,fill:`currentColor`})}),R=e=>(0,A.jsx)(`svg`,{height:24,viewBox:`0 0 24 24`,width:24,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,A.jsx)(`path`,{fill:`currentColor`,d:`m22 18-5 4-8-3v3l-4.19-5.75 12.91 1.05v-10.96l4.28-.69zm-17.19-1.75v-7.29l12.91-2.62-7.12-4.34v2.84l-6.63 1.92-1.97 2.62v5.69z`})}),z=e=>(0,A.jsx)(`svg`,{width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,A.jsx)(`path`,{d:`M21.0004 6.00001C21.0016 5.43668 20.8441 4.88442 20.5459 4.40644C20.2478 3.92846 19.8212 3.54406 19.3148 3.29726C18.8084 3.05046 18.2428 2.95122 17.6826 3.0109C17.1224 3.07059 16.5904 3.28678 16.1474 3.63473C15.7044 3.98269 15.3683 4.44835 15.1776 4.97841C14.9869 5.50848 14.9493 6.08152 15.0691 6.63197C15.1888 7.18241 15.4612 7.688 15.8549 8.09088C16.2487 8.49375 16.7479 8.77762 17.2954 8.91001V10.5C17.2978 10.6372 17.261 10.7722 17.1892 10.8891C17.1175 11.006 17.0138 11.1 16.8904 11.16L12.7354 13.32L8.59544 11.22C8.46356 11.1544 8.35443 11.0507 8.28221 10.9223C8.21 10.7939 8.17802 10.6468 8.19044 10.5V8.91001C8.89743 8.72746 9.51358 8.29333 9.92339 7.689C10.3332 7.08467 10.5085 6.35161 10.4165 5.62725C10.3245 4.90289 9.97149 4.23695 9.42361 3.75426C8.87573 3.27157 8.17062 3.00527 7.44044 3.00527C6.71026 3.00527 6.00514 3.27157 5.45726 3.75426C4.90938 4.23695 4.55635 4.90289 4.46435 5.62725C4.37234 6.35161 4.54768 7.08467 4.95749 7.689C5.36729 8.29333 5.98344 8.72746 6.69044 8.91001V10.5C6.6913 10.9156 6.80651 11.323 7.02346 11.6776C7.24041 12.0321 7.55073 12.3201 7.92044 12.51L12.0004 14.61V16.59C11.2934 16.7726 10.6773 17.2067 10.2675 17.811C9.85768 18.4153 9.68234 19.1484 9.77435 19.8728C9.86635 20.5971 10.2194 21.2631 10.7673 21.7457C11.3151 22.2284 12.0203 22.4947 12.7504 22.4947C13.4806 22.4947 14.1857 22.2284 14.7336 21.7457C15.2815 21.2631 15.6345 20.5971 15.7265 19.8728C15.8185 19.1484 15.6432 18.4153 15.2334 17.811C14.8236 17.2067 14.2074 16.7726 13.5004 16.59V14.61L17.5504 12.57C17.9317 12.3784 18.2501 12.0816 18.468 11.7148C18.686 11.348 18.7944 10.9265 18.7804 10.5V8.88001C19.4147 8.70922 19.9755 8.33496 20.3765 7.81469C20.7776 7.29442 20.9967 6.6569 21.0004 6.00001ZM6.00044 6.00001C6.00044 5.60218 6.15847 5.22065 6.43978 4.93934C6.72108 4.65804 7.10261 4.5 7.50044 4.5C7.89826 4.5 8.27979 4.65804 8.5611 4.93934C8.8424 5.22065 9.00044 5.60218 9.00044 6.00001C9.00044 6.39783 8.8424 6.77936 8.5611 7.06067C8.27979 7.34197 7.89826 7.50001 7.50044 7.50001C7.10261 7.50001 6.72108 7.34197 6.43978 7.06067C6.15847 6.77936 6.00044 6.39783 6.00044 6.00001ZM14.2054 19.5C14.2054 19.8978 14.0474 20.2794 13.7661 20.5607C13.4848 20.842 13.1033 21 12.7054 21C12.3076 21 11.9261 20.842 11.6448 20.5607C11.3635 20.2794 11.2054 19.8978 11.2054 19.5C11.2054 19.1022 11.3635 18.7207 11.6448 18.4393C11.9261 18.158 12.3076 18 12.7054 18C13.1033 18 13.4848 18.158 13.7661 18.4393C14.0474 18.7207 14.2054 19.1022 14.2054 19.5ZM18.0004 7.50001C17.6026 7.50001 17.2211 7.34197 16.9398 7.06067C16.6585 6.77936 16.5004 6.39783 16.5004 6.00001C16.5004 5.60218 16.6585 5.22065 16.9398 4.93934C17.2211 4.65804 17.6026 4.5 18.0004 4.5C18.3983 4.5 18.7798 4.65804 19.0611 4.93934C19.3424 5.22065 19.5004 5.60218 19.5004 6.00001C19.5004 6.39783 19.3424 6.77936 19.0611 7.06067C18.7798 7.34197 18.3983 7.50001 18.0004 7.50001Z`,fill:`currentColor`})}),B=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{d:`M12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12ZM7.79289 7.79289C8.18342 7.40237 8.81658 7.40237 9.20711 7.79289L12 10.5858L14.7929 7.79289C15.1834 7.40237 15.8166 7.40237 16.2071 7.79289C16.5976 8.18342 16.5976 8.81658 16.2071 9.20711L13.4142 12L16.2071 14.7929C16.5976 15.1834 16.5976 15.8166 16.2071 16.2071C15.8166 16.5976 15.1834 16.5976 14.7929 16.2071L12 13.4142L9.20711 16.2071C8.81658 16.5976 8.18342 16.5976 7.79289 16.2071C7.40237 15.8166 7.40237 15.1834 7.79289 14.7929L10.5858 12L7.79289 9.20711C7.40237 8.81658 7.40237 8.18342 7.79289 7.79289Z`,fill:`currentColor`})}),V=()=>{let{trackDownloadTrajectoryButtonClicked:e}=ae(),{t}=u(`openhands`);return a({mutationKey:[`conversations`,`download`],mutationFn:async t=>{e(),g(await C.downloadConversation(t),`conversation_${t}.zip`)},onError:()=>{p(t(s.CONVERSATION$DOWNLOAD_ERROR))}})},H=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M21 15V2.25L20.25 1.5H5.60999C5.26596 1.50381 4.92547 1.56987 4.60499 1.695C4.28194 1.83856 3.99081 2.0452 3.74868 2.30278C3.50656 2.56036 3.31831 2.8637 3.19499 3.195C3.07229 3.49004 3.00614 3.80552 2.99999 4.125V18.375C2.99638 18.7197 3.06272 19.0616 3.19499 19.38C3.46049 20.0205 3.96749 20.532 4.60499 20.805C4.92547 20.9301 5.26596 20.9962 5.60999 21H5.99999V19.5H5.60999C5.46032 19.5005 5.31218 19.4698 5.17499 19.41C4.90342 19.2974 4.68763 19.0816 4.57499 18.81C4.52706 18.6699 4.50174 18.5231 4.49999 18.375V17.625C4.50174 17.4769 4.52706 17.3301 4.57499 17.19C4.68763 16.9184 4.90342 16.7026 5.17499 16.59C5.31033 16.531 5.45634 16.5004 5.60399 16.5H19.5V19.5H13.5V21H20.25L21 20.25V15ZM5.99999 15V3H19.5V15H5.99999ZM7.49999 4.5H8.99999V6H7.49999V4.5ZM7.49999 7.5H8.99999V9H7.49999V7.5ZM8.99999 10.5H7.49999V12H8.99999V10.5ZM9.74999 20.235L7.91999 22.5H7.49999V18H12V22.5H11.58L9.74999 20.235Z`,fill:`currentColor`})}),U=e=>{if(!e)return[];let t=[];for(let n of Object.keys(e))n&&t.push(n);return t},W=()=>{let{data:e,isLoading:t}=ie();return{providers:F.useMemo(()=>U(e?.provider_tokens_set),[e?.provider_tokens_set]),isLoadingSettings:t}};function G(){let e=y().backend;if(e.kind!==`cloud`)throw Error(`Cloud git call requires a cloud backend.`);return e}async function K(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`limit`,String(e.limit??100)),e.query&&n.set(`query`,e.query),e.pageId&&n.set(`page_id`,e.pageId),e.installationId&&n.set(`installation_id`,e.installationId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/repositories/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}async function ce(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`limit`,String(e.limit??100)),e.pageId&&n.set(`page_id`,e.pageId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/installations/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}async function q(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`repository`,e.repository),n.set(`limit`,String(e.limit??30)),n.set(`query`,e.query??``),e.pageId&&n.set(`page_id`,e.pageId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/branches/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}var J=e=>e,Y=()=>y().backend.kind===`cloud`,X=e=>!e||e===`undefined`||e===`null`,Z={items:[],next_page_id:null},Q={items:[],next_page_id:null},le={items:[],next_page_id:null},$=class{static async searchGitRepositories(e,t,n=100,r,i){return X(t)||!Y()?Z:K({provider:J(t),query:e||void 0,limit:n,pageId:r,installationId:i})}static async retrieveUserGitRepositories(e,t,n=30,r){return X(e)||!Y()?Z:K({provider:J(e),limit:n,pageId:t,installationId:r})}static async retrieveInstallationRepositories(e,t,n,r,i=30){if(X(e)||!Y())return Z;let a=n[t];return a?K({provider:J(e),installationId:a,limit:i,pageId:r}):Z}static async getRepositoryBranches(e,t,n=``,r,i=30){return X(t)||!Y()?Q:q({provider:J(t),repository:e,query:n||void 0,pageId:r,limit:i})}static async searchRepositoryBranches(e,t,n,r,i=30){return X(t)||!Y()?Q:q({provider:J(t),repository:e,query:n,pageId:r,limit:i})}static async getUserInstallations(e,t,n=100){return X(e)||!Y()?le:ce({provider:J(e),pageId:t,limit:n})}static async getGitChanges(e){let t=await C.resolveConversationWorkingDir(e);return(await new S(b({workingDir:t})).gitChanges(t,{ref:`HEAD`})).map(e=>({path:e.path,status:k(String(e.status))}))}static async getGitChangeDiff(e,t){let n=await new S(b()).gitDiff(t,{ref:`HEAD`});return{modified:n.modified??``,original:n.original??``}}},ue=e=>{let{data:t}=D(),{providers:n}=W(),r=x();return l({queryKey:[`installations`,e,r.backend.id,r.orgId],queryFn:()=>$.getUserInstallations(e),enabled:t&&!!e&&n.length>0&&h(e,r.backend.kind),staleTime:1e3*60*5,gcTime:1e3*60*15})};function de(e){let{provider:t,pageSize:n=30,enabled:i=!0}=e,{providers:a}=W(),{data:o}=ue(t),s=o?.items,c=x(),l=t?h(t,c.backend.kind):!1,u=r({queryKey:[`repositories`,t,l,n,c.backend.id,c.orgId,...l?[s||[]]:[]],queryFn:async({pageParam:e})=>{if(!t)throw Error(`Provider is required`);if(l){if(!s)throw Error(`Missing installation list`);let r=e;return await $.retrieveInstallationRepositories(t,r.installationIndex,s,r.pageId??void 0,n)}let r=e;return await $.retrieveUserGitRepositories(t,r??void 0,n)},getNextPageParam:(e,t,n)=>{if(l&&s){let t=n;if(e.next_page_id)return{installationIndex:t.installationIndex,pageId:e.next_page_id};let r=t.installationIndex+1;return r<s.length?{installationIndex:r,pageId:null}:void 0}return e.next_page_id},initialPageParam:l?{installationIndex:0,pageId:null}:null,enabled:i&&(a||[]).length>0&&!!t&&(!l||Array.isArray(s)&&s.length>0),staleTime:1e3*60*5,gcTime:1e3*60*15,refetchOnWindowFocus:!1});return{data:u.data,isLoading:u.isLoading,isError:u.isError,hasNextPage:u.hasNextPage,isFetchingNextPage:u.isFetchingNextPage,fetchNextPage:u.fetchNextPage,onLoadMore:()=>{u.hasNextPage&&!u.isFetchingNextPage&&u.fetchNextPage()}}}function fe(e,t,n,r=100){return l({queryKey:[`repositories`,`search`,e,t,r],queryFn:async()=>t?(await $.searchGitRepositories(e,t,r)).items:[],enabled:!!e&&!!t&&!n,staleTime:1e3*60*5,gcTime:1e3*60*15})}function pe(e,t){let[n,r]=(0,F.useState)(e);return(0,F.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}var me={recentRepositories:[],lastSelectedProvider:null},he=T()(ne((e,t)=>({...me,addRecentRepository:t=>e(e=>({recentRepositories:[t,...e.recentRepositories.filter(e=>e.id!==t.id)].slice(0,3)})),clearRecentRepositories:()=>e(()=>({recentRepositories:[]})),getRecentRepositories:()=>t().recentRepositories,setLastSelectedProvider:t=>e(()=>({lastSelectedProvider:t})),getLastSelectedProvider:()=>t().lastSelectedProvider}),{name:`home-store`,storage:E(()=>localStorage)}));function ge({gitProvider:e,className:t}){return(0,A.jsxs)(A.Fragment,{children:[e===`github`&&(0,A.jsx)(oe,{size:14,className:t}),e===`gitlab`&&(0,A.jsx)(se,{size:14,className:t}),e===`bitbucket`&&(0,A.jsx)(O,{size:14,className:t}),e===`bitbucket_data_center`&&(0,A.jsx)(O,{size:14,className:t}),e===`azure_devops`&&(0,A.jsx)(R,{className:_(t,`w-[14px] h-[14px]`)})]})}function _e({buttonClassName:e,handleSubmit:t,disabled:n}){return(0,A.jsx)(`button`,{type:`button`,className:_(`flex items-center justify-center rounded-full border border-white size-8`,n?`cursor-not-allowed border-[var(--oh-muted)]`:`cursor-pointer hover:bg-white/10`,e),"data-name":`arrow-up-circle-fill`,"data-testid":`submit-button`,onClick:t,disabled:n,children:(0,A.jsx)(d,{className:`w-4 h-4`,color:n?`var(--oh-muted)`:`white`})})}export{N as _,fe as a,W as c,B as d,z as f,P as g,I as h,pe as i,H as l,L as m,ge as n,de as o,R as p,he as r,$ as s,_e as t,V as u,M as v};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/files-tab-mK7Mdyuf.js","assets/rolldown-runtime-BFRubm34.js","assets/vendor~files-tab-Diy4WrQz.js","assets/iconBase-B_5IRYeZ.js","assets/react-CM_dJw1Z.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js","assets/mcp-client-xEdbDxOL.js","assets/settings-client-BUlG0Gzq.js","assets/agent-server-conversation-service.api-B82pNNTm.js","assets/preload-helper-CT1Z6Pdu.js","assets/profiles-client-CesbAK-7.js","assets/v4-BMWDcIWQ.js","assets/agent-server-client-options-Dvgeb3x4.js","assets/agent-server-compatibility-BANjmMTo.js","assets/server-client-Cz8PyIbN.js","assets/settings-service.api-CTQ-LpAA.js","assets/proxy-wIasY2Po.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-DMH1jSwL.js","assets/settings-KgLvVrSm.js","assets/acp-providers-DZEi8wDz.js","assets/declaration-IA661TBv.js","assets/common-Cfviy7yT.js","assets/QueryClientProvider-7oLZ1RtQ.js","assets/useQuery-JDs8UaWj.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~h07fzaqi-D15MEcqi.js","assets/suspense-C9MBE_9N.js","assets/useTranslation-CbJtty1g.js","assets/context-BBqptpXX.js","assets/vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BighOCzm.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Cntsv2EN.js","assets/objectWithoutPropertiesLoose-B-IA9dU9.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CWwn0K2j.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTosGXG7.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-dZ3D8RVL.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D13hiNGV.js","assets/react-CuAHzoGi.js","assets/conversation-tab-empty-state-5bW9CQke.js","assets/utils-CVcuFUYj.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~j8sdb9mk-oCzr0-9g.js","assets/markdown-renderer-CZq_UdmE.js","assets/checkmark-BB7QCG5T.js","assets/copy-CA1Dblua.js","assets/active-backend-context-CQTk4wD8.js","assets/health-store-d-d2ssv4.js","assets/use-active-conversation-BY5F6A1G.js","assets/conversation-service.api-B4s-xIOK.js","assets/navigation-context-CszaA-CJ.js","assets/use-user-conversation-DwOGM1lc.js","assets/use-agent-state-DX5NKEa_.js","assets/conversation-state-store-BUU90dVq.js","assets/use-runtime-is-ready-DP-KKHO6.js","assets/chevron-left-small-CuuwpRi9.js","assets/file-DM0ihEsO.js","assets/folder-UGYUKpqb.js","assets/link-external-kU6aFXU6.js","assets/files-tab-store-QlUCuW8b.js","assets/use-event-store-Rw1YbvLm.js","assets/typography-U1gkzkXo.js","assets/dist-B-SKiGDl.js","assets/conversation-local-storage-D5Tre_GA.js","assets/git-status-mapper-N4-7eaeC.js","assets/retrieve-axios-error-message-DbnSBc_1.js","assets/browser-tab-DiRTKik8.js","assets/vendor~browser-tab-DYZ-OmbT.js","assets/browser-store-BjhV_9wS.js","assets/vscode-tab-zLD5Z-PP.js","assets/use-unified-vscode-url-D2Buvmxj.js","assets/vscode-url-helper-CwQPl6QN.js","assets/waiting-for-runtime-message-B1Dzhtj5.js","assets/brand-button-BoiPxAGm.js","assets/planner-tab-QBnZgIXd.js","assets/plan-components-BRiIX8Wn.js","assets/use-handle-plan-click-DYd5a6zN.js","assets/custom-toast-handlers-fgD4IYsu.js","assets/createLucideIcon-C9OEnwvX.js","assets/i18n-CyvU1o95.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~skills-settings~m~o9nrx3fm-87v-LliW.js","assets/use-create-conversation-4iJytCT1.js","assets/useMutation-7hG0GuPx.js","assets/mutation-CaJwPR9O.js","assets/use-llm-profiles-BhZRf-NX.js","assets/query-keys-CQaji0wJ.js","assets/use-tracking-DQU60djN.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-CBEOG8NF.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~lpdshwee-CTmh4bwd.js","assets/use-settings-Clf0Y_P3.js","assets/conversation-store-kHcewy1E.js","assets/middleware-B5rcobhi.js","assets/lesson-plan-5O2tVbD1.js","assets/task-list-tab-R9N3Wd-U.js","assets/use-task-list-DydbuRFM.js","assets/u-check-circle-half-CirnoxXG.js","assets/u-check-circle-lbkXL2z4.js","assets/terminal-BTM3UFcQ.js","assets/vendor~terminal-CnKZILnC.js","assets/vendor~terminal-T4IDBjWs.css","assets/command-store-DAd3K0d_.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{t as n}from"./preload-helper-CT1Z6Pdu.js";import{A as r,L as i,M as a,k as o}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~cnj3raoq-DTEXlLSB.js";import{t as s}from"./react-dom-hVBnwgwZ.js";import{c,i as l,r as u,s as d,u as f}from"./path-utils-CNd_jqv_.js";import{t as p}from"./useMutation-7hG0GuPx.js";import{o as m,t as h}from"./declaration-IA661TBv.js";import{n as g}from"./QueryClientProvider-7oLZ1RtQ.js";import{t as _}from"./useQuery-JDs8UaWj.js";import{t as v}from"./Trans-rF21Jwln.js";import{t as y}from"./useTranslation-CbJtty1g.js";import{a as b,c as x,d as S,f as C,i as w,l as T,n as E,o as ee,r as D,s as O,t as te,u as k}from"./messages-luW9zf1w.js";import{c as ne,d as re,f as A,i as j,l as ie,n as M,r as N,s as P,t as F,u as I}from"./sidebar-mobile-menu-toggle-YYPXGikp.js";import{a as L,n as R,o as ae,r as oe,t as se}from"./custom-toast-handlers-fgD4IYsu.js";import{n as z,r as ce,t as B}from"./vendor~conversation-panel~conversation-DYHL7QoY.js";import{t as le}from"./x-8AbJWTbX.js";import{C as ue,P as de,S as V,T as H,b as fe,c as pe,d as me,l as he,m as ge,o as _e,t as U,u as ve,w as ye,x as be,y as xe}from"./utils-CVcuFUYj.js";import{t as Se}from"./common-Cfviy7yT.js";import{i as Ce}from"./agent-server-client-options-Dvgeb3x4.js";import{n as W}from"./active-backend-context-CQTk4wD8.js";import{a as we,i as Te,t as Ee}from"./agent-server-conversation-service.api-B82pNNTm.js";import{t as De}from"./modal-backdrop-B1si6TUd.js";import{n as Oe}from"./modal-body-2Po2nl1e.js";import{r as ke}from"./base-modal-Ba5WcNb6.js";import{t as Ae}from"./brand-button-BoiPxAGm.js";import{t as je}from"./loading-spinner-CFuA0UNt.js";import{n as Me}from"./navigation-context-CszaA-CJ.js";import{h as Ne}from"./vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-DveauQfg.js";import{O as Pe}from"./vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-Dr8Ly0at.js";import{t as Fe}from"./styled-tooltip-DEr7oa0m.js";import{r as Ie,u as Le}from"./dropdown-classes-lT1LUsbO.js";import{c as Re,g as ze,h as Be,m as Ve,r as He,v as Ue}from"./chat-send-button-06dIuWXm.js";import{t as We}from"./react-CuAHzoGi.js";import{n as Ge}from"./middleware-B5rcobhi.js";import{i as Ke,s as qe}from"./conversation-local-storage-D5Tre_GA.js";import{t as G}from"./conversation-store-kHcewy1E.js";import{t as Je}from"./modal-close-button-BCvw9IUN.js";import{t as Ye}from"./v4-BMWDcIWQ.js";import{t as Xe}from"./use-is-authed-DrocXcet.js";import{t as Ze}from"./use-click-outside-element-_vianyPb.js";import{r as Qe}from"./use-settings-Clf0Y_P3.js";import{t as $e}from"./use-tracking-DQU60djN.js";import{t as et}from"./use-create-conversation-4iJytCT1.js";import{r as tt}from"./conversation-service.api-B4s-xIOK.js";import{i as nt}from"./vendor~root-layout~conversation-panel~conversation~shared-conversation-BJPgfJoU.js";import{n as rt,t as K}from"./context-menu-list-item-DhG1Ln5m.js";import{i as q,r as it,t as at}from"./ellipsis-button-DRRmCrWi.js";import{t as ot}from"./u-edit-CH5nNya1.js";import{t as st}from"./skills-CCaEu1KQ.js";import{t as ct}from"./terminal-DQJ6IJUd.js";import{t as lt}from"./use-user-conversation-DwOGM1lc.js";import{t as ut}from"./conversation-state-store-BUU90dVq.js";import{r as dt}from"./typography-U1gkzkXo.js";import{C as ft,D as pt,E as mt,I as ht,M as gt,O as _t,P as vt,S as yt,T as bt,_ as xt,a as St,b as Ct,d as wt,f as Tt,g as Et,h as Dt,i as Ot,j as kt,k as At,m as jt,n as Mt,p as Nt,r as Pt,t as Ft,v as It,w as Lt,x as Rt,y as zt}from"./git-control-bar-branch-button-C1qmab0K.js";import{n as J,r as Bt,t as Y}from"./use-active-conversation-BY5F6A1G.js";import{t as X}from"./use-agent-state-DX5NKEa_.js";import{a as Vt,c as Ht,d as Z,f as Ut,l as Wt,n as Gt,o as Kt,s as qt,t as Jt,u as Yt}from"./conversation-websocket-context-C2yKCqvj.js";import{S as Xt,a as Zt,d as Qt,o as $t,t as en}from"./use-event-store-Rw1YbvLm.js";import{t as tn}from"./command-store-DAd3K0d_.js";import{t as nn}from"./lesson-plan-5O2tVbD1.js";import{t as rn}from"./copy-CA1Dblua.js";import{t as an}from"./use-runtime-is-ready-DP-KKHO6.js";import{r as on}from"./plan-components-BRiIX8Wn.js";import{t as sn}from"./use-breakpoint-2sN462wJ.js";import{t as cn}from"./globe-2otpEmVh.js";import{n as ln,t as un}from"./use-unified-vscode-url-D2Buvmxj.js";import{t as dn}from"./use-task-list-DydbuRFM.js";import{t as fn}from"./vendor~conversation-panel~conversation~alert-banner-DMcFTqbt.js";var Q=e(t(),1),pn={curAgentState:V.LOADING},mn=We(e=>({...pn,setCurrentAgentState:t=>e({curAgentState:t}),reset:()=>e(pn)})),hn=`openhands-last-conversation-by-backend`;function gn(e,t){return t?`${e}::${t}`:e}function _n(){if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(hn);if(!e)return{};let t=JSON.parse(e);if(typeof t!=`object`||!t)return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&r.length>0&&(n[e]=r);return n}catch{return{}}}function vn(e){if(!(typeof window>`u`))try{window.localStorage.setItem(hn,JSON.stringify(e))}catch{}}function yn(e,t,n){if(!n)return;let r=_n();r[gn(e,t)]=n,vn(r)}function bn(e,t){let n=_n(),r=gn(e,t);r in n&&(delete n[r],vn(n))}var xn=e=>({action:C.CHANGE_AGENT_STATE,args:{agent_state:e}}),Sn=e=>`error`in e,Cn=e=>`type`in e&&e.type===`error`,wn=()=>{let{send:e}=S(),t=en(e=>e.events);Q.useEffect(()=>{if(!t.length)return;let n=t[t.length-1];if(!($t(n)&&Zt(n))){if(Sn(n)){if(n.error_code===401){R(`Session expired.`);return}typeof n.error==`string`?R(n.error):R(n.message);return}Cn(n)&&`${n.message??``}`.startsWith(`Agent reached maximum`)&&e(xn(V.PAUSED))}},[t.length])},Tn=()=>{let{curAgentState:e}=X();return{runtimeActive:!ue.includes(e)}};function En({children:e}){return wn(),Tn(),e}var $=m(),Dn=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 512 512`,...e,children:(0,$.jsx)(`path`,{d:`M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z`})}),On={entriesByConversation:{}},kn=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:n(e.entriesByConversation[t]??[])}}),An=We()(Ge(e=>({...On,addPending:(t,n)=>{let r=Ye();return e(e=>kn(e,t,e=>[...e,{id:r,question:n,status:`pending`}])),r},resolve:(t,n,r)=>e(e=>kn(e,t,e=>e.map(e=>e.id===n?{...e,response:r,status:`done`}:e))),fail:(t,n,r)=>e(e=>kn(e,t,e=>e.map(e=>e.id===n?{...e,response:r,status:`error`}:e))),dismiss:(t,n)=>e(e=>kn(e,t,e=>e.filter(e=>e.id!==n)))}),{name:`BtwStore`}));function jn({onClick:e}){let{t}=y(`openhands`);return(0,$.jsxs)(`button`,{type:`button`,onClick:e,className:`flex items-center gap-1.5 px-3 py-1 rounded-full text-xs font-normal text-success bg-success/10 hover:bg-success/20 border border-success/30 transition-colors`,children:[(0,$.jsx)(Dn,{className:`w-3.5 h-3.5 fill-success`}),(0,$.jsx)(`span`,{children:t(h.CHAT_INTERFACE$BTW_GOT_IT)})]})}function Mn({conversationId:e}){let{t}=y(`openhands`),n=An(e=>e.entriesByConversation),r=An(e=>e.dismiss),i=e?n[e]??[]:[];return!e||i.length===0?null:(0,$.jsx)(`div`,{"data-testid":`btw-messages`,className:`flex flex-col w-full`,children:i.map(n=>{let i=n.status===`pending`;return(0,$.jsx)(T,{title:(0,$.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`opacity-60`,children:t(h.CHAT_INTERFACE$BTW_PREFIX)}),(0,$.jsx)(`span`,{children:n.question}),i&&(0,$.jsx)(`span`,{"data-testid":`btw-spinner`,className:`inline-block w-3.5 h-3.5 ml-2 rounded-full border-2 border-[var(--oh-border-input)] border-t-transparent animate-spin`})]}),details:i?t(h.CHAT_INTERFACE$BTW_WAITING_FOR_ANSWER):n.response??``,initiallyExpanded:!i,chevronPosition:`before`,titleTrailing:!i&&(0,$.jsx)(jn,{onClick:()=>r(e,n.id)})},n.id)})})}var Nn=`${H} `,Pn=(e,t)=>{let n=An(e=>e.addPending),r=An(e=>e.resolve),i=An(e=>e.fail);return(0,Q.useCallback)(a=>{let o=a.trim(),s=o===`/btw`||o.startsWith(Nn);if(!e||!s){t(a);return}let c=o.slice(H.length).trim();if(!c)return;let l=n(e,c);u(e,c).then(({response:t})=>r(e,l,t)).catch(t=>i(e,l,t?.message??`Failed to ask agent`))},[e,t,n,r,i])},Fn=`flex flex-row gap-1 items-center justify-center rounded-[100px]`;function In(e){return U(Fn,e?`bg-[var(--oh-surface)] hover:bg-tertiary cursor-pointer text-white`:`bg-[var(--oh-surface)] cursor-not-allowed opacity-50 text-[var(--oh-muted)]`)}function Ln(e){return e?`white`:`var(--oh-muted)`}var Rn=`font-normal text-sm leading-5 truncate`;function zn({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,isConversationReady:r=!0}){let{t:i}=y(`openhands`),{trackPullButtonClick:a}=$e(),o=n&&t&&r;return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{a(),e(pe())},disabled:!o,className:U(In(o),`px-0.5 py-1 w-[76px] min-w-[76px]`),children:[(0,$.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,$.jsx)(ft,{width:12,height:12,color:Ln(o)})}),(0,$.jsx)(`div`,{className:U(Rn,`max-w-[76px]`),title:i(h.COMMON$PULL),children:i(h.COMMON$PULL)})]})}function Bn({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,currentGitProvider:r,isConversationReady:i=!0}){let{t:a}=y(`openhands`),{trackPushButtonClick:o}=$e(),s=n&&t&&i;return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{o(),e(he(r))},disabled:!s,className:U(In(s),`px-2 py-1 w-[77px] min-w-[77px]`),children:[(0,$.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,$.jsx)(Lt,{width:12,height:12,color:Ln(s)})}),(0,$.jsx)(`div`,{className:U(Rn,`max-w-[77px]`),title:a(h.COMMON$PUSH),children:a(h.COMMON$PUSH)})]})}function Vn({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,currentGitProvider:r,isConversationReady:i=!0}){let{t:a}=y(`openhands`),{trackCreatePrButtonClick:o}=$e(),s=n&&t&&i;return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{o(),e(_e(r))},disabled:!s,className:U(In(s),`px-2 py-1 w-[126px] min-w-[126px] h-7`),children:[(0,$.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,$.jsx)(yt,{width:12,height:12,color:Ln(s)})}),(0,$.jsx)(`div`,{className:U(Rn,`max-w-[126px]`),title:a(h.COMMON$PULL_REQUEST),children:a(h.COMMON$PULL_REQUEST)})]})}function Hn(e){return e.kind===`BashCommand`}function Un(e){return e.kind===`BashOutput`}function Wn(e){return e.kind===`BashError`}function Gn(e,t,n){let r=(0,Q.useRef)(null),i=(0,Q.useRef)([]),a=(0,Q.useRef)([]),o=(0,Q.useRef)(new Map);return(0,Q.useEffect)(()=>{if(!n)return;let s=Ce(e,t),c=new WebSocket(s);r.current=c,c.onopen=()=>{for(let{command:e,cwd:t,timeout:n,resolve:r,reject:o}of i.current)a.current.push({resolve:r,reject:o}),c.send(JSON.stringify({command:e,cwd:t,timeout:n}));i.current=[]},c.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(Hn(t)){let e=a.current.shift();e&&o.current.set(t.id,{...e,stdout:[],stderr:[]})}else if(Un(t)&&t.command_id){let e=o.current.get(t.command_id);e&&(t.stdout&&e.stdout.push(t.stdout),t.stderr&&e.stderr.push(t.stderr),t.exit_code!=null&&(o.current.delete(t.command_id),e.resolve({exit_code:t.exit_code,stdout:e.stdout.join(``),stderr:e.stderr.join(``)})))}else Wn(t)&&l(`Bash error: ${t.code}: ${t.detail}`)};function l(e){let t=Error(e);for(let{reject:e}of i.current)e(t);i.current=[];for(let e of a.current)e.reject(t);a.current=[];for(let e of o.current.values())e.reject(t);o.current.clear()}return c.onclose=()=>{r.current=null,l(`Bash WebSocket closed`)},c.onerror=()=>{r.current=null,l(`Bash WebSocket error`)},()=>{c.onclose=null,c.onerror=null,c.close(),r.current=null,l(`Bash WebSocket unmounted`)}},[n,e,t]),(0,Q.useCallback)((e,t,n)=>new Promise((o,s)=>{let c=r.current;if(!c||c.readyState===WebSocket.CLOSED||c.readyState===WebSocket.CLOSING){s(Error(`Bash WebSocket not available`));return}c.readyState===WebSocket.CONNECTING?i.current.push({command:e,cwd:t,timeout:n,resolve:o,reject:s}):(a.current.push({resolve:o,reject:s}),c.send(JSON.stringify({command:e,cwd:t,timeout:n})))}),[])}var Kn={"github.com":`github`,"gitlab.com":`gitlab`,"bitbucket.org":`bitbucket`,"dev.azure.com":`azure_devops`};function qn(e){return e.replace(/\.git$/,``)}function Jn(e){return e?Kn[e.toLowerCase()]??null:null}function Yn(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`_git`);return n===-1?t.join(`/`):[...t.slice(0,n),...t.slice(n+1)].join(`/`)}function Xn(e,t,n){let r=qn(n.replace(/^\/+/,``)),i=Jn(t);return{url:e,host:t,repository:(i===`azure_devops`?Yn(r):r)||null,provider:i}}function Zn(e){let t=e?.trim();if(!t)return null;let n=t.match(/^[^@\s]+@([^:\s]+):(.+)$/);if(n){let e=n[1];return Xn(t,e,n[2])}try{let e=new URL(t);return Xn(t,e.hostname||null,e.pathname)}catch{return null}}var Qn={repository:null,branch:null,provider:null,remoteUrl:null},$n=[`r=$(git remote get-url origin 2>/dev/null)`,`b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)`,`if [ -z "$r$b" ]; then`,`n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)`,`c=$(printf '%s\\n' "$n" | grep -c '[^[:space:]]')`,`if [ "$c" = "1" ] && [ -n "$n" ]; then`,`r=$(git -C "$n" remote get-url origin 2>/dev/null)`,`b=$(git -C "$n" rev-parse --abbrev-ref HEAD 2>/dev/null)`,`fi`,`fi`,`printf '%s\\n%s' "$r" "$b"`].join(`
|
|
3
|
-
`);async function er(e,t){let n=await e($n,t,10);if(n.exit_code!==0)return Qn;let r=n.stdout.indexOf(`
|
|
4
|
-
`),i=(r>=0?n.stdout.slice(0,r):n.stdout).trim(),a=(r>=0?n.stdout.slice(r+1):``).trim(),o=a&&a!==`HEAD`?a:null;if(!i&&!o)return Qn;let s=Zn(i);return{repository:s?.repository??null,provider:s?.provider??null,remoteUrl:i||null,branch:o}}var tr=()=>{let{data:e}=Y(),t=an(),{backend:n}=W(),r=n.kind===`local`,i=e?.id,a=e?.conversation_url,o=e?.session_api_key,s=e?.workspace?.working_dir?.trim(),c=!!e?.selected_repository,l=!!e?.git_provider,u=!!e?.selected_branch,d=r&&t&&!!i&&!!s&&(!c||!l||!u),f=Gn(a,o,d),p=(0,Q.useRef)(f);return p.current=f,_({queryKey:[`local-git-info`,i,a,o,s],queryFn:async()=>er((e,t,n)=>p.current(e,t,n),s),enabled:d,retry:!1,staleTime:1e4,refetchInterval:1e4,gcTime:1e3*60*5,meta:{disableToast:!0}})},nr=()=>{let e=g(),{t}=y(`openhands`);return p({mutationFn:e=>Ee.updateConversationRepository(e.conversationId,e.repository,e.branch,e.gitProvider),onMutate:async t=>{let n=[`user`,`conversation`,t.conversationId];await e.cancelQueries({queryKey:n});let r=e.getQueriesData({queryKey:n});return e.setQueriesData({queryKey:n},e=>e&&{...e,selected_repository:t.repository,selected_branch:t.branch??null,git_provider:t.gitProvider??null}),{previousEntries:r}},onError:(n,r,i)=>{i?.previousEntries.forEach(([t,n])=>{e.setQueryData(t,n)}),R(t(h.CONVERSATION$FAILED_TO_UPDATE_REPOSITORY))},onSuccess:()=>{oe(t(h.CONVERSATION$REPOSITORY_UPDATED))},onSettled:(t,n,r)=>{e.invalidateQueries({queryKey:[`user`,`conversation`,r.conversationId]}),e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`local-git-info`,r.conversationId]})}})};function rr({children:e,tooltipMessage:t,testId:n,shouldShowTooltip:r}){return r?(0,$.jsx)(Fe,{content:t,placement:`top`,showArrow:!0,tooltipClassName:`bg-white text-black`,children:(0,$.jsx)(`span`,{"data-testid":n,className:`hover:opacity-100`,children:e})}):e}function ir({isOpen:e,onClose:t,onLaunch:n,defaultProvider:r=`github`}){let{t:i}=y(`openhands`),{providers:a}=Re(),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{a.length===1&&!o?s(a[0]):a.length>1&&!o&&r&&a.includes(r)&&s(r)},[a,o,r]);let f=(0,Q.useCallback)(e=>{e!==o&&(s(e),l(null),d(null))},[o]),p=(0,Q.useCallback)(e=>{e?(l(e),d(null)):(l(null),d(null))},[]),m=(0,Q.useCallback)(e=>{d(e)},[]),g=()=>{!c||!u||(n(c,u),l(null),d(null),t())},_=()=>{s(null),l(null),d(null),t()};if(!e)return null;let v=c?.git_provider||o||r,b=!!c&&!!u;return(0,$.jsx)(De,{onClose:_,children:(0,$.jsxs)(Oe,{width:`sm`,className:`relative items-start border border-[var(--oh-border)] !gap-4`,children:[(0,$.jsx)(Je,{onClose:_,testId:`close-open-repository-modal`}),(0,$.jsx)(`div`,{className:`w-full pr-6`,children:(0,$.jsx)(ke,{title:i(h.CONVERSATION$OPEN_REPOSITORY)})}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-4 w-full`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-sm text-white font-normal leading-[22px]`,children:i(h.CONVERSATION$SELECT_OR_INSERT_LINK)}),a.length>1&&(0,$.jsx)(St,{providers:a,value:o,placeholder:`Select Provider`,onChange:f})]}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-[10px] w-full`,children:[(0,$.jsx)(Pt,{provider:v,value:c?.id||null,repositoryName:c?.full_name||null,onChange:p,placeholder:`Search repositories...`,className:`w-full`}),(0,$.jsx)(Ot,{repository:c?.full_name||null,provider:v,selectedBranch:u,onBranchSelect:m,defaultBranch:c?.main_branch||null,placeholder:`Select branch...`,disabled:!c,className:`w-full`})]})]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 w-full`,onClick:e=>e.stopPropagation(),children:[(0,$.jsx)(Ae,{type:`button`,variant:`secondary`,onClick:_,children:i(h.BUTTON$CANCEL)}),(0,$.jsx)(Ae,{type:`button`,variant:`primary`,onClick:g,isDisabled:!b,children:i(h.BUTTON$LAUNCH)})]})]})})}function ar({onSuggestionsClick:e}){let{t}=y(`openhands`),{conversationId:n}=J(),[r,i]=(0,Q.useState)(!1),[a,o]=(0,Q.useState)(!1),s=(0,Q.useRef)(null),{addRecentRepository:c}=He(),l=Z(e=>e.enqueuePendingMessage),u=Z(e=>e.markPendingMessageError),{backend:d}=W(),f=d.kind===`local`,{providers:p}=Re(),m=f||p.length>0,{data:g}=Y(),{repositoryInfo:_}=_t(),{data:v}=tr(),b=vt(),x=Gt()?.isLoadingHistory??!1,C=(0,Q.useRef)(b);(0,Q.useEffect)(()=>{C.current=b},[b]);let{send:w}=S(),T=(0,Q.useRef)(w);(0,Q.useEffect)(()=>{T.current=w},[w]);let E=O(),{mutate:ee}=nr(),{mutate:D,isPending:te}=et(),k=g?.selected_repository||_?.selectedRepository,ne=g?.git_provider||_?.gitProvider,re=g?.selected_branch||_?.selectedBranch,A=k||v?.repository||void 0,j=ne||v?.provider,ie=re||v?.branch||void 0,M=(g?.id?we(g.id):null)?.selected_workspace??null,N=M&&M.replace(/\/+$/,``).split(`/`).pop()||null,P=!!A&&!!j,F=!!g&&b===`OPEN`&&!x;(0,Q.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),(0,Q.useEffect)(()=>{if(!a)return;let e=e=>{e.key===`Escape`&&o(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let I=(e,r)=>{n&&(c(e),ee({conversationId:n,repository:e.full_name,branch:r.name,gitProvider:e.git_provider},{onSuccess:()=>{if(C.current!==`OPEN`){R(t(h.CONVERSATION$CLONE_COMMAND_FAILED_DISCONNECTED));return}let i=e.git_provider.charAt(0).toUpperCase()+e.git_provider.slice(1),a=`Clone ${e.full_name} from ${i} and checkout branch ${r.name}.`,o=n?l({conversationId:n,text:a}):null;E?.scrollDomToBottom(),Promise.resolve(T.current({action:`message`,args:{content:a,timestamp:new Date().toISOString()}})).catch(e=>{o&&u(o,e instanceof Error?e.message:`Failed to send message`)})}}))},L=!f||!!A||!!N,ae=f&&!P;return L||ie||P?(0,$.jsxs)(`div`,{className:`flex flex-row items-center`,children:[(0,$.jsxs)(`div`,{className:`flex flex-row gap-2.5 items-center overflow-x-auto flex-nowrap relative scrollbar-hide`,children:[L?(0,$.jsx)(Mt,{selectedRepository:A,gitProvider:j,workspaceName:N,onClick:()=>i(!0),disabled:!F||ae}):null,ie?(0,$.jsx)(Ft,{selectedBranch:ie,selectedRepository:A,gitProvider:j}):null,P?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(rr,{tooltipMessage:t(h.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-pull-button-tooltip`,shouldShowTooltip:!P,children:(0,$.jsx)(zn,{onSuggestionsClick:e,hasRepository:P,providerTokensReady:m,isConversationReady:F})}),(0,$.jsx)(rr,{tooltipMessage:t(h.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-push-button-tooltip`,shouldShowTooltip:!P,children:(0,$.jsx)(Bn,{onSuggestionsClick:e,hasRepository:P,providerTokensReady:m,currentGitProvider:j,isConversationReady:F})}),(0,$.jsx)(rr,{tooltipMessage:t(h.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-pr-button-tooltip`,shouldShowTooltip:!P,children:(0,$.jsx)(Vn,{onSuggestionsClick:e,hasRepository:P,providerTokensReady:m,currentGitProvider:j,isConversationReady:F})})]}):null]}),(0,$.jsx)(ir,{isOpen:r,onClose:()=>i(!1),onLaunch:I,defaultProvider:j})]}):null}function or({onSubmit:e,disabled:t=!1}){let{images:n,files:r,imagesMarkedUploadAsFile:i,clearAllFiles:a,subConversationTaskId:o}=G(),{curAgentState:s}=X(),{data:c}=Y(),{conversationId:l}=Bt(),u=l??c?.id??null,{taskStatus:d}=pt(o,c?.id||null),{handleUpload:f}=wt(),p=Tt(u,Pn(u,t=>{let{imagesToEmbed:o,imagesAsFiles:s}=ht(n,i);e(t,o,[...r,...s]),a()}));return(0,$.jsxs)(`div`,{"data-testid":`interactive-chat-box`,children:[(0,$.jsx)(Nt,{disabled:t||s===V.AWAITING_USER_CONFIRMATION||ge(d),isNewConversationPending:t,onSubmit:p,onFilesPaste:f}),(0,$.jsx)(`div`,{className:`mt-3 pb-3`,children:(0,$.jsx)(ar,{onSuggestionsClick:e=>{p(e)}})})]})}function sr(){let e=en(e=>e.events),t=en(e=>e.uiEvents),n=Q.useMemo(()=>t.filter(Kt),[t]),r=Q.useMemo(()=>e,[e]),i=Q.useMemo(()=>n.length,[n]),a=Q.useMemo(()=>r.some(e=>e.source===`agent`&&!Xt(e)&&!Qt(e)),[r]),o=Vt(r);return{storeEvents:e,uiEvents:t,renderableEvents:n,allConversationEvents:r,totalEvents:i,hasSubstantiveAgentActions:a,conversationUserEventsExist:o,userEventsExist:o}}var cr=e=>`timestamp`in e?e.timestamp:void 0,lr=e=>{let t=!!e&&Ke(e),n=t?void 0:e,{data:r}=lt(e??null),{data:i,isFetched:a}=qt(n??void 0),o=en(e=>e.addEvents),[s,c]=Q.useState(!1),[l,u]=Q.useState(!0),d=Q.useRef(!1),f=Q.useRef(!0);return Q.useEffect(()=>{if(d.current=!1,c(!1),t){f.current=!1,u(!1);return}f.current=!0,u(!0)},[e,t]),Q.useEffect(()=>{t||!a||!i||i.hasMore||(f.current=!1,u(!1))},[t,a,i?.hasMore,n]),{isLoading:s,hasMore:l,loadOlder:Q.useCallback(async()=>{if(!e||Ke(e)||d.current||!f.current||!r)return;let{events:t}=en.getState(),n=t[0];if(!n)return;let i=cr(n);if(!i){f.current=!1,u(!1);return}d.current=!0,c(!0);try{let t=await Wt.searchEvents(e,r?.conversation_url??null,r?.session_api_key??null,{limit:50,sortOrder:`TIMESTAMP_DESC`,timestampLt:i});if(!Array.isArray(t.items))throw Error(`Invalid older-events response: expected page.items to be an array.`);let n=[...t.items].reverse();n.length>0&&o(n),(!t.next_page_id||t.items.length<50)&&(f.current=!1,u(!1))}finally{d.current=!1,c(!1)}},[e,r,r?.conversation_url,r?.session_api_key,o])}};function ur(){return(0,$.jsxs)(`div`,{className:`flex items-center space-x-1.5 rounded-full bg-[var(--oh-surface)] px-3 py-1.5`,children:[(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:0ms]`}),(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:75ms]`}),(0,$.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:150ms]`})]})}function dr({suggestion:e,onClick:t}){let{t:n}=y(`openhands`);return(0,$.jsxs)(`button`,{type:`button`,className:`list-none border border-[var(--oh-border)] rounded-[15px] hover:bg-surface-raised hover:border-[var(--oh-interactive-hover)] transition-colors flex-1 flex items-center justify-center cursor-pointer gap-[10px] h-[55px] px-4`,onClick:()=>t(e.value),children:[(0,Q.useMemo)(()=>{switch(e.label){case`INCREASE_TEST_COVERAGE`:return(0,$.jsx)(Rt,{width:24,height:24,color:`#fff`});case`AUTO_MERGE_PRS`:return(0,$.jsx)(Ct,{width:19,height:20,color:`#fff`});case`FIX_README`:return(0,$.jsx)(zt,{width:24,height:24,color:`#fff`});case`CLEAN_DEPENDENCIES`:return(0,$.jsx)(It,{width:24,height:24,color:`#fff`});default:return null}},[e]),(0,$.jsx)(`span`,{"data-testid":`suggestion`,className:`text-[15px] font-normal leading-5 text-white text-center cursor-pointer`,children:n(e.label)})]})}function fr({suggestions:e,onSuggestionClick:t}){return(0,$.jsx)(`div`,{"data-testid":`suggestions`,className:`grid grid-cols-2 gap-5 max-w-fit`,children:e.map((e,n)=>(0,$.jsx)(dr,{suggestion:e,onClick:t},n))})}var pr=h.SUGGESTIONS$HACKER_NEWS,mr=`Please write a bash script which displays the top story on Hacker News. It should show the title, the link, and the number of points.
|
|
5
|
-
The script should only use tools that are widely available on unix systems, like curl and grep.`,hr=h.SUGGESTIONS$HELLO_WORLD,gr=`I want to create a Hello World app in Javascript that:
|
|
6
|
-
* Displays Hello World in the middle.
|
|
7
|
-
* Has a button that when clicked, changes the greeting with a bouncing animation to fun versions of Hello.
|
|
8
|
-
* Has a counter for how many times the button has been clicked.
|
|
9
|
-
* Has another button that changes the app's background color.`,_r=h.SUGGESTIONS$TODO_APP,vr=`I want to create a VueJS app that allows me to:
|
|
10
|
-
* See all the items on my todo list
|
|
11
|
-
* add a new item to the list
|
|
12
|
-
* mark an item as done
|
|
13
|
-
* totally remove an item from the list
|
|
14
|
-
* change the text of an item
|
|
15
|
-
* set a due date on the item
|
|
16
|
-
|
|
17
|
-
This should be a client-only app with no backend. The list should persist in localStorage.`,yr={repo:xt,"non-repo":{[pr]:mr,[hr]:gr,[_r]:vr}};function br({onSuggestionsClick:e}){let{t}=y(`openhands`),{shouldHideSuggestions:n}=G();return(0,$.jsx)(Pe,{children:!n&&(0,$.jsxs)(B.div,{"data-testid":`chat-suggestions`,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3,ease:`easeInOut`},className:`pointer-events-auto absolute inset-x-4 bottom-[151px] top-0 flex flex-col items-center justify-center md:inset-x-8`,children:[(0,$.jsx)(`div`,{className:`flex flex-col items-center p-4 rounded-xl w-full`,children:(0,$.jsx)(`span`,{className:`pb-6 text-[32px] font-medium leading-5 text-white`,children:t(h.LANDING$TITLE)})}),(0,$.jsx)(fr,{suggestions:Object.entries(yr.repo).slice(0,4).map(([e,t])=>({label:e,value:t})),onSuggestionClick:e})]})})}var xr={files:[],initialPrompt:null,selectedRepository:null,selectedRepositoryProvider:null,replayJson:null},Sr=We(e=>({...xr,addFile:t=>e(e=>({files:[...e.files,t]})),removeFile:t=>e(e=>({files:e.files.filter((e,n)=>n!==t)})),clearFiles:()=>e(()=>({files:[]})),setInitialPrompt:t=>e(()=>({initialPrompt:t})),clearInitialPrompt:()=>e(()=>({initialPrompt:null})),setSelectedRepository:t=>e(()=>({selectedRepository:t})),clearSelectedRepository:()=>e(()=>({selectedRepository:null})),setSelectedRepositoryProvider:t=>e(()=>({selectedRepositoryProvider:t})),setReplayJson:t=>e(()=>({replayJson:t})),reset:()=>e(()=>xr)})),Cr=e=>(0,$.jsx)(`svg`,{width:12,height:17,viewBox:`0 0 12 17`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M11.5304 6.46978L10.4697 7.53044L6.75006 3.81077L6.75006 17.0001H5.25006L5.25006 3.81077L1.53039 7.53044L0.469727 6.46978L6.00006 0.939453L11.5304 6.46978Z`,fill:`currentColor`})});function wr({onClick:e}){return(0,$.jsx)(`button`,{type:`button`,onClick:e,"data-testid":`scroll-to-bottom`,className:`flex items-center justify-center size-8 rounded-full bg-[var(--oh-surface)] text-[var(--oh-muted)] hover:bg-tertiary hover:text-white rotate-180 cursor-pointer transition-colors`,children:(0,$.jsx)(Cr,{width:15,height:15})})}var Tr=[{width:`w-[25%]`,height:`h-4`,align:`justify-end`},{width:`w-[60%]`,height:`h-4`,align:`justify-start`},{width:`w-[45%]`,height:`h-4`,align:`justify-start`},{width:`w-[65%]`,height:`h-20`,align:`justify-start`},{width:`w-[35%]`,height:`h-4`,align:`justify-end`},{width:`w-[50%]`,height:`h-4`,align:`justify-start`},{width:`w-[30%]`,height:`h-4`,align:`justify-end`},{width:`w-[75%]`,height:`h-4`,align:`justify-start`},{width:`w-[55%]`,height:`h-4`,align:`justify-start`}];function Er({width:e,height:t}){return(0,$.jsx)(`div`,{className:U(`rounded-md bg-foreground/5 animate-pulse`,e,t)})}function Dr(){return(0,$.jsx)(`div`,{className:`flex flex-col gap-6 p-4 w-full h-full overflow-hidden`,"data-testid":`chat-messages-skeleton`,"aria-label":`Loading conversation`,children:Tr.map((e,t)=>(0,$.jsx)(`div`,{className:U(`flex w-full`,e.align),children:(0,$.jsx)(Er,{width:e.width,height:e.height})},t))})}var Or=220;function kr({message:e,onDismiss:t,onRetry:n}){let{t:r,i18n:i}=y(`openhands`),[a,o]=Q.useState(!1),[s,c]=Q.useState(!1),l=Q.useRef(null),u=i.exists(e,{ns:`openhands`}),d=u?String(r(e)):e,f=d.length>Or,p=f&&!a;return Q.useLayoutEffect(()=>{let e=l.current;if(!e)return;let t=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){c(!1);return}c(e.getBoundingClientRect().height>t*1.5)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[d,p,a,e]),(0,$.jsxs)(`div`,{className:U(`flex w-full gap-2 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-2 text-[var(--oh-foreground)]`,s?`items-start`:`items-center`),"data-testid":`error-message-banner`,children:[(0,$.jsx)(ae,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:de},"data-testid":`error-message-banner-icon`}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{ref:l,className:U(`whitespace-pre-wrap break-words text-sm text-[var(--oh-muted)]`,p&&`line-clamp-3`),"data-testid":`error-message-banner-content`,children:u?(0,$.jsx)(v,{ns:`openhands`,i18nKey:e}):e}),f&&(0,$.jsx)(`button`,{type:`button`,className:`mt-1 cursor-pointer text-xs font-normal text-[var(--oh-foreground)] underline`,onClick:()=>o(e=>!e),"data-testid":`error-message-banner-toggle`,children:r(a?h.COMMON$VIEW_LESS:h.COMMON$VIEW_MORE)})]}),(0,$.jsxs)(`div`,{className:U(`flex shrink-0 gap-1`,s?`self-start`:`items-center`),children:[n&&(0,$.jsx)(`button`,{type:`button`,onClick:n,className:`cursor-pointer rounded-md border border-[var(--oh-border)] px-2 py-1 text-xs font-normal text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]`,"data-testid":`error-message-banner-retry`,children:r(h.CHAT_INTERFACE$MESSAGE_RETRY)}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,className:`shrink-0 cursor-pointer rounded-md p-1 text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-[var(--oh-foreground)]`,"aria-label":r(h.BUTTON$CLOSE),"data-testid":`error-message-banner-dismiss`,children:(0,$.jsx)(le,{className:`h-4 w-4`,"aria-hidden":!0})})]})]})}function Ar(){let{conversationId:e}=Bt(),t=Z(e=>e.pendingMessages),n=Z(e=>e.markPendingMessageError),r=Z(e=>e.markPendingMessageSending),i=Z(e=>e.removePendingMessage),a=G(e=>e.restoreMessageToInputIfEmpty),{send:o}=S(),s=Q.useMemo(()=>e?t.filter(t=>At(e,t.conversationId)):[],[t,e]),c=Q.useCallback(async e=>{let t=Z.getState().pendingMessages.find(t=>t.id===e);if(t){r(e);try{await o(k(t.text,t.imageUrls,t.fileUrls,t.timestamp))}catch(t){n(e,t instanceof Error?t.message:`Failed to send message`)}}},[o,n,r]),l=Q.useCallback((e,t)=>{a(t),i(e)},[a,i]);return s.length===0?null:(0,$.jsx)($.Fragment,{children:s.map(e=>(0,$.jsx)(D,{type:`user`,message:e.text,pendingStatus:e.status,onRetry:e.status===`error`?()=>c(e.id):void 0,onStop:e.status===`sending`?()=>l(e.id,e.text):void 0,children:e.imageUrls.length>0&&(0,$.jsx)(E,{size:`small`,images:e.imageUrls})},e.id))})}var jr=()=>{let{data:e}=Y();return p({mutationKey:[`unified-upload-files`],mutationFn:async t=>{let{conversationId:n,files:r}=t;return tt(n,r,e)},meta:{disableToast:!0}})},Mr=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 3.25C9.92893 3.25 8.25 4.92893 8.25 7V10H7C6.44772 10 6 10.4477 6 11V19C6 19.5523 6.44772 20 7 20H17C17.5523 20 18 19.5523 18 19V11C18 10.4477 17.5523 10 17 10H15.75V7C15.75 4.92893 14.0711 3.25 12 3.25ZM14.25 10V7C14.25 5.75736 13.2426 4.75 12 4.75C10.7574 4.75 9.75 5.75736 9.75 7V10H14.25Z`,fill:`currentColor`})});function Nr(){let{t:e}=y(`openhands`),{data:t}=Qe();return t?.confirmation_mode?(0,$.jsx)(Fe,{closeDelay:100,content:e(h.COMMON$CONFIRMATION_MODE_ENABLED),tooltipClassName:`bg-white text-black hover:bg-transparent`,children:(0,$.jsx)(`div`,{className:`flex items-center justify-center w-[26px] h-[26px] rounded-lg bg-[var(--oh-surface)]`,children:(0,$.jsx)(Mr,{width:15,height:15})})}):null}var Pr=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,$.jsx)(`path`,{d:`M15 12C15 12.7956 14.6839 13.5587 14.1213 14.1213C13.5587 14.6839 12.7956 15 12 15C11.2044 15 10.4413 14.6839 9.87868 14.1213C9.31607 13.5587 9 12.7956 9 12C9 11.2044 9.31607 10.4413 9.87868 9.87868C10.4413 9.31607 11.2044 9 12 9C12.7956 9 13.5587 9.31607 14.1213 9.87868C14.6839 10.4413 15 11.2044 15 12Z`,fill:`currentColor`})});function Fr({status:e,statusColor:t}){return(0,$.jsx)(`div`,{"data-testid":`chat-status-indicator`,className:Ne(`w-full max-w-full rounded-[100px] p-1 bg-[var(--oh-surface)] flex items-center gap-1`),children:(0,$.jsxs)(Pe,{mode:`wait`,children:[(0,$.jsx)(B.span,{className:`flex-shrink-0 animate-[pulse_1.2s_ease-in-out_infinite]`,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},children:(0,$.jsx)(Pr,{className:`w-4 h-4`,color:t})},`dot-${e}`),(0,$.jsx)(B.span,{initial:{opacity:0,y:-2},animate:{opacity:1,y:0},exit:{opacity:0,y:2},transition:{duration:.3},className:`pr-1.5 font-normal text-[11px] leading-[16px] normal-case break-words whitespace-normal`,children:e},`text-${e}`)]})})}var Ir=()=>{let e=g(),{navigate:t}=Me(),{t:n}=y(`openhands`),{data:r}=Y();return p({mutationFn:async()=>{if(!r?.id)throw Error(`No active conversation`);let e=await Ee.createConversation(void 0,void 0,void 0,void 0,void 0,void 0,void 0,r.sandbox_id??void 0);if(e.status===`ERROR`)throw Error(e.detail||`Failed to create new conversation`);return{newConversationId:e.app_conversation_id?e.app_conversation_id:`task-${e.id}`,oldConversationId:r.id}},onMutate:()=>{L.loading(n(h.CONVERSATION$CLEARING),{...se,id:`clear-conversation`})},onSuccess:r=>{L.dismiss(`clear-conversation`),oe(n(h.CONVERSATION$CLEAR_SUCCESS)),t(`/conversations/${r.newConversationId}`),e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`v1-batch-get-app-conversations`]})},onError:e=>{L.dismiss(`clear-conversation`);let t=n(h.CONVERSATION$CLEAR_UNKNOWN_ERROR);e instanceof Error?t=e.message:typeof e==`string`&&(t=e),R(n(h.CONVERSATION$CLEAR_FAILED,{error:t}))}})};function Lr(e,t){return e?`github`:t?`replay`:`direct`}function Rr(){let{trackInitialQuerySubmitted:e,trackUserMessageSent:t}=$e(),{setMessageToSend:n}=G(),{errorMessage:r,removeErrorMessage:i,setErrorMessage:a}=Ut(),{isTask:o,taskStatus:s,taskDetail:c}=_t(),l=o,u=Gt(),{send:d}=S(),{renderableEvents:f,allConversationEvents:p,totalEvents:m,hasSubstantiveAgentActions:g,userEventsExist:_}=sr(),v=Z(e=>e.enqueuePendingMessage),C=Z(e=>e.markPendingMessageError),w=Z(e=>e.pendingMessages),{t:T}=y(`openhands`),E=Q.useRef(null),{scrollDomToBottom:D,onChatBodyScroll:O,hitBottom:ne,autoScroll:re,setAutoScroll:A,setHitBottom:j}=on(E),{mutate:ie,isPending:M}=Ir(),{curAgentState:N}=X(),{handleBuildPlanClick:P}=b(),{data:F}=Y(),I=F?.sandbox_status??null,L=I===`MISSING`||I===`ERROR`,ae=N===V.RUNNING||N===V.LOADING;Q.useEffect(()=>{if(ae)return;let e=e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),P(e),D())};return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[ae,P,D]);let{selectedRepository:oe,replayJson:se}=Sr(),{conversationId:z}=Bt(),{mutateAsync:ce}=jr(),{isLoading:B,hasMore:le,loadOlder:ue}=lr(z),de=Q.useRef(null),H=Q.useCallback(e=>{if(l||B||!le)return;let t=e.scrollTop<=80,n=e.scrollHeight<=e.clientHeight+80;!t&&!n||(de.current={scrollHeight:e.scrollHeight,scrollTop:e.scrollTop},ue().catch(e=>{de.current=null,a(e instanceof Error&&e.message?e.message:T(h.ERROR$GENERIC))}))},[le,B,l,ue,a,T]),fe=Q.useCallback(e=>{e.deltaY<0&&e.currentTarget.scrollTop<=0&&H(e.currentTarget)},[H]),pe=Q.useMemo(()=>z?w.some(e=>At(z,e.conversationId)):!1,[w,z]),he=p.length>0||pe||!u?.isLoadingHistory,ge=!!z,_e=!he&&!o,U=Yt(e=>z?(e.entriesByConversation[z]?.length??0)>0:!1),ye=async(r,i,a)=>{if(r.trim()===`/new`){if(!z){R(T(h.CONVERSATION$CLEAR_NO_ID));return}if(m===0){R(T(h.CONVERSATION$CLEAR_EMPTY));return}if(M)return;ie();return}let o=[...i],s=[...a];m===0?e({entryPoint:Lr(oe!==null,se!==null),queryCharacterLength:r.length,replayJsonSize:se?.length}):t({sessionMessageCount:m,currentMessageLength:r.length});let c=kt([...o,...s]);if(!c.isValid){R(`Error: ${c.errorMessage}`);return}let l=o.map(e=>gt(e)),u=await Promise.all(l),f=new Date().toISOString(),{skipped_files:p,uploaded_files:g}=s.length>0?await ce({conversationId:z,files:s}):{skipped_files:[],uploaded_files:[]};p.forEach(e=>R(e.reason));let _=`${T(`CHAT_INTERFACE$AUGMENTED_PROMPT_FILES_TITLE`)}: ${g.join(`
|
|
18
|
-
|
|
19
|
-
`)}`,y=g.length>0?`${r}\n\n${_}`:r,b=v({conversationId:z,text:r,content:y,imageUrls:u,fileUrls:g,timestamp:f});D(),n(``);try{await d(k(y,u,g,f))}catch(e){C(b,e instanceof Error?e.message:`Failed to send message`)}};Q.useEffect(()=>{if(de.current&&E.current){let{scrollHeight:e,scrollTop:t}=de.current,n=E.current,r=n.scrollHeight-e;r>0&&(n.scrollTop=t+r),de.current=null;return}re&&D()},[f.length,pe,D]);let be=Q.useRef(H);Q.useEffect(()=>{be.current=H}),Q.useEffect(()=>{let e=E.current;e&&be.current(e)},[f.length,le]);let xe={scrollRef:E,autoScroll:re,setAutoScroll:A,scrollDomToBottom:D,hitBottom:ne,setHitBottom:j,onChatBodyScroll:O},Se=N===V.LOADING||N===V.INIT,Ce=N===V.STOPPED,W=N===V.PAUSED,we=ve({isPausing:W,isTask:o,taskStatus:s,isStartingStatus:Se,isStopStatus:Ce,curAgentState:N}),Te=me({isPausing:W,isTask:o,taskStatus:s,taskDetail:c,isStartingStatus:Se,isStopStatus:Ce,curAgentState:N,errorMessage:r,t:T});return(0,$.jsx)(ee,{value:xe,children:(0,$.jsxs)(`div`,{className:`relative flex h-full flex-col justify-between px-4`,"data-testid":`chat-interface`,children:[!g&&!pe&&!_&&!U&&!_e&&!l&&m===0&&!L&&(0,$.jsx)(br,{onSuggestionsClick:e=>n(e)}),(0,$.jsxs)(`div`,{ref:E,"data-testid":`chat-scroll-container`,onScroll:e=>{O(e.currentTarget),H(e.currentTarget)},onWheel:fe,className:`custom-scrollbar-always flex min-h-0 grow flex-col gap-2 overflow-x-hidden overflow-y-auto px-0 pt-4 pb-8 md:px-4`,children:[_e&&ge&&(0,$.jsx)(Dr,{}),_e&&!ge&&(0,$.jsx)(`div`,{className:`flex justify-center`,"data-testid":`loading-spinner`,children:(0,$.jsx)(je,{size:`small`})}),B&&(0,$.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-3 text-sm text-neutral-400`,"data-testid":`loading-older-events`,children:[(0,$.jsx)(je,{size:`small`}),(0,$.jsx)(`span`,{children:T(h.CHAT_INTERFACE$FETCHING_OLDER_MESSAGES)})]}),(0,$.jsx)(x,{conversationId:z,anchorEventId:null}),he&&f.length>0&&(0,$.jsx)(te,{messages:f,allEvents:p}),(0,$.jsx)(Ar,{})]}),(0,$.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-[6px]`,children:[(0,$.jsx)(Mn,{conversationId:z}),r&&(0,$.jsx)(kr,{message:r,onDismiss:i,onRetry:r===`Unable to connect to server`?()=>u?.reconnect():void 0}),L?(0,$.jsxs)(`div`,{"data-testid":`archived-conversation-banner`,className:`mx-1 px-4 py-3 rounded-lg bg-[var(--oh-surface)] border border-[var(--oh-border-subtle)]`,children:[(0,$.jsx)(`p`,{className:`text-xs font-semibold text-[var(--oh-foreground)]`,children:T(I===`ERROR`?h.CHAT_INTERFACE$ERROR_SANDBOX_TITLE:h.CHAT_INTERFACE$ARCHIVED_SANDBOX_TITLE)}),(0,$.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)] mt-0.5`,children:T(I===`ERROR`?h.CHAT_INTERFACE$ERROR_SANDBOX_DESCRIPTION:h.CHAT_INTERFACE$ARCHIVED_SANDBOX_DESCRIPTION)})]}):(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-full mb-1 z-20`,children:(0,$.jsxs)(`div`,{className:`flex justify-between relative`,children:[(0,$.jsxs)(`div`,{className:`flex items-end gap-1 pointer-events-auto`,children:[(0,$.jsx)(Nr,{}),Se&&(0,$.jsx)(Fr,{statusColor:we,status:Te})]}),ne?N===V.RUNNING&&(0,$.jsx)(`div`,{className:`absolute left-1/2 transform -translate-x-1/2 bottom-0 pointer-events-auto`,children:(0,$.jsx)(ur,{})}):(0,$.jsx)(`div`,{className:`absolute left-1/2 transform -translate-x-1/2 bottom-0 pointer-events-auto`,children:(0,$.jsx)(wr,{onClick:D})})]})}),(0,$.jsx)(or,{onSubmit:ye,disabled:M})]})]})]})})}function zr({isRightPanelShown:e}){return(0,$.jsx)(`div`,{className:`flex justify-center w-full h-full`,children:(0,$.jsx)(`div`,{className:`w-full min-w-0 max-w-[800px] h-full flex flex-col min-h-0 transition-all duration-300 ease-in-out`,children:(0,$.jsx)(Rr,{})})})}function Br({className:e}){let{t}=y(`openhands`);return(0,$.jsxs)(`div`,{className:U(`bg-[var(--oh-surface)] flex h-full w-full flex-col items-center justify-center gap-3`,e),children:[(0,$.jsx)(f,{className:`h-8 w-8 shrink-0 animate-spin text-[var(--oh-text-secondary)]`,"aria-hidden":!0}),(0,$.jsx)(`span`,{className:`text-base font-normal leading-5 text-[var(--oh-text-secondary)]`,children:t(h.HOME$LOADING)})]})}function Vr({children:e}){return(0,$.jsx)(`div`,{className:`absolute inset-0`,children:e})}function Hr({children:e}){return(0,$.jsx)(`div`,{className:`flex flex-col h-full w-full`,children:e})}function Ur({children:e}){return(0,$.jsx)(`div`,{className:`overflow-hidden flex-grow h-full w-full relative`,children:e})}var Wr=(0,Q.lazy)(()=>n(()=>import(`./files-tab-mK7Mdyuf.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62]))),Gr=(0,Q.lazy)(()=>n(()=>import(`./browser-tab-DiRTKik8.js`),__vite__mapDeps([63,20,1,26,27,4,64,3,37,38,39,21,65,36]))),Kr=(0,Q.lazy)(()=>n(()=>import(`./vscode-tab-zLD5Z-PP.js`),__vite__mapDeps([66,1,20,26,27,4,67,8,9,5,6,7,10,11,12,13,14,15,16,17,18,19,21,23,24,25,22,46,43,44,45,47,48,51,38,39,49,50,36,68,69,37,70]))),qr=(0,Q.lazy)(()=>n(()=>import(`./planner-tab-QBnZgIXd.js`),__vite__mapDeps([71,1,20,26,27,4,37,38,39,21,40,32,30,31,33,34,28,3,29,35,41,42,72,70,73,74,75,76,77,78,8,9,5,6,7,10,11,12,13,14,15,16,17,18,19,79,24,80,22,81,23,25,43,44,82,83,84,85,86,45,46,47,48,87,88,36,60,89]))),Jr=(0,Q.lazy)(()=>n(()=>import(`./task-list-tab-R9N3Wd-U.js`),__vite__mapDeps([90,1,20,26,27,4,37,38,39,21,91,57,36,92,93,58,59]))),Yr=(0,Q.lazy)(()=>n(()=>import(`./terminal-BTM3UFcQ.js`),__vite__mapDeps([94,1,95,96,20,4,69,26,27,38,39,21,49,45,46,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,47,48,23,24,25,22,43,44,50,36,97]))),Xr={tasklist:{component:Jr},files:{component:Wr},browser:{component:Gr},vscode:{component:Kr},terminal:{component:Yr},planner:{component:qr}};function Zr(){let{selectedTab:e,shouldShownAgentLoading:t}=G(),{conversationId:n}=J(),r=(0,Q.useMemo)(()=>Xr[e]??Xr.files,[e]).component;return t?(0,$.jsx)(Br,{}):(0,$.jsx)(Hr,{children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(Br,{}),children:(0,$.jsx)(Ur,{children:(0,$.jsx)(Vr,{children:(0,$.jsx)(r,{})},e===`terminal`?`${e}-${n}`:e)})})})}var Qr=()=>{let e=g(),t=Ut(e=>e.removeErrorMessage);return p({mutationKey:[`start-conversation`],mutationFn:async e=>d(e.conversationId),onMutate:async()=>(await e.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:e.getQueryData([`user`,`conversations`])}),onError:(t,n,r)=>{r?.previousConversations&&e.setQueryData([`user`,`conversations`],r.previousConversations)},onSettled:(t,n,r)=>{l(e,r.conversationId)},onSuccess:(n,r)=>{t(),c(e,r.conversationId,Se.RUNNING)}})},$r=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM10 9H14A1 1 0 0 1 15 10V14A1 1 0 0 1 14 15H10A1 1 0 0 1 9 14V10A1 1 0 0 1 10 9Z`,fill:`currentColor`})}),ei=e=>(0,$.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:[(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12.9 1.50004C15.3 1.65004 17.55 2.85004 19.2 4.50004C21.15 6.60004 22.2 9.15004 22.2 12.15C22.2 14.55 21.3 16.8 19.8 18.75C18.3 20.55 16.2 21.9 13.8 22.35C11.4 22.8 9 22.5 6.9 21.3C4.8 20.1 3.15 18.3 2.25 16.05C1.35 13.8 1.2 11.25 1.95 9.00004C2.7 6.60004 4.05 4.65004 6.15 3.30004C8.1 1.95004 10.5 1.35004 12.9 1.50004ZM13.65 20.85C15.6 20.4 17.4 19.35 18.75 17.7C19.95 16.05 20.7 14.1 20.55 12C20.55 9.60004 19.65 7.20004 18 5.55004C16.5 4.05004 14.7 3.15004 12.6 3.00004C10.65 2.85004 8.55 3.30004 6.9 4.50004C5.25 5.70004 4.05 7.35004 3.45 9.45004C2.85 11.4 2.85 13.5 3.75 15.45C4.65 17.4 6 18.9 7.8 19.95C9.6 21 11.7 21.3 13.65 20.85Z`,fill:`currentColor`}),(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M9 7.49998L10.1655 6.87598L16.9155 11.376V12.624L10.1655 17.124L9 16.5V7.49998ZM10.5 8.90098V15.099L15.1485 12L10.5 8.90098Z`,fill:`currentColor`})]});function ti({icon:e,text:t,onClick:n,testId:r}){return(0,$.jsx)(K,{testId:r,onClick:n,children:(0,$.jsxs)(`div`,{className:`flex min-w-0 w-full items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`min-w-0 truncate`,children:t}),(0,$.jsx)(`span`,{className:Le,"aria-hidden":!0,children:e})]})})}function ni({className:e=``,executionStatus:t,isPausing:n=!1}){let{curAgentState:r}=X(),{isTask:i,taskStatus:a,taskDetail:o}=_t(),{t:s}=y(`openhands`),{errorMessage:c}=Ut(),l=r===V.LOADING||r===V.INIT,u=fe(t)||be(t),d=ve({isPausing:n,isTask:i,taskStatus:a,isStartingStatus:l,isStopStatus:u,curAgentState:r}),f=me({isPausing:n,isTask:i,taskStatus:a,taskDetail:o,isStartingStatus:l,isStopStatus:u,curAgentState:r,errorMessage:c,t:s});return(0,$.jsx)(`div`,{className:e,"data-testid":`server-status`,children:(0,$.jsxs)(`div`,{className:`flex items-center`,children:[(0,$.jsx)(Pr,{className:`w-6 h-6 shrink-0`,color:d}),(0,$.jsx)(`span`,{className:`text-[13px] text-white font-normal`,children:f})]})})}function ri({onClose:e,onStopServer:t,onStartServer:n,executionStatus:r,position:i=`top`,className:a=``,isPausing:o=!1}){let{t:s}=y(`openhands`),c=Ze(e),l=xe(r),u=be(r),d=l||u;return(0,$.jsxs)(rt,{ref:c,testId:`server-status-context-menu`,position:i,alignment:`left`,size:`default`,className:U(`left-2 w-fit min-w-42`,a),children:[(0,$.jsx)(ni,{executionStatus:r,isPausing:o,className:`pl-0 pr-2 py-1`}),d&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ue,{inset:`menu`}),l&&t&&(0,$.jsx)(ti,{icon:(0,$.jsx)($r,{width:18,height:18}),text:s(h.COMMON$STOP_RUNTIME),onClick:t,testId:`stop-server-button`}),u&&n&&(0,$.jsx)(ti,{icon:(0,$.jsx)(ei,{width:18,height:18}),text:s(h.COMMON$START_RUNTIME),onClick:n,testId:`start-server-button`})]})]})}var ii=e(s(),1);function ai({isPublic:e,onToggle:t,ariaLabel:n}){return(0,$.jsxs)(`label`,{className:`relative inline-flex shrink-0 cursor-pointer items-center`,children:[(0,$.jsx)(`input`,{hidden:!0,type:`checkbox`,"data-testid":`share-publicly-button`,checked:e,"aria-label":n,onChange:e=>t(e.target.checked)}),(0,$.jsx)(`span`,{"aria-hidden":!0,className:U(`inline-flex h-3.5 w-7 items-center rounded-full px-0.5 py-px transition-colors duration-200 ease-in-out`,e?`bg-white`:`bg-base-secondary`),children:(0,$.jsx)(`span`,{className:U(`block h-2 w-2 shrink-0 rounded-full transition-transform duration-200 ease-in-out`,e?`translate-x-[calc(1rem-1px)] bg-base-secondary`:`translate-x-px bg-tertiary-light`)})})]})}function oi({onClose:e,onRename:t,onDelete:n,onStop:r,onDisplayCost:i,onShowAgentTools:a,onShowSkills:o,onShowHooks:s,onTogglePublic:c,onCopyShareLink:l,onDownloadConversation:u,shareUrl:d,position:f=`bottom`,anchorRef:p}){let m=sn(),{t:g}=y(`openhands`),{backend:_}=W(),{data:v}=Y(),b=Ze(e),x=p?.current??null,[S,C]=Q.useState();Q.useLayoutEffect(()=>{if(!x)return;let e=()=>{let e=x.getBoundingClientRect();if(!e)return;let t={position:`fixed`,zIndex:9999};f===`top`?t.bottom=window.innerHeight-e.top+8:t.top=e.bottom+8,t.left=e.left,C(t)};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[x,f]);let w=!!(a||o||s),T=!!i,E=!!(r||n),ee=_.kind===`cloud`?h.COMMON$CLOSE_CONVERSATION_STOP_RUNTIME:h.COMMON$STOP_CONVERSATION,D=_.kind===`cloud`&&!!c,O=v?.public||!1,te=!!x,k=(0,$.jsxs)(rt,{ref:b,testId:`conversation-name-context-menu`,position:f,alignment:`left`,className:U(m?`right-0 translate-x-[34%] left-auto`:``,te?`!static !top-auto !bottom-auto !left-auto !right-auto !mt-0`:``),children:[t&&(0,$.jsx)(K,{testId:`rename-button`,onClick:t,children:(0,$.jsx)(q,{icon:(0,$.jsx)(ot,{width:16,height:16}),text:g(h.BUTTON$RENAME)})}),w&&(0,$.jsx)(Ue,{testId:`separator-tools`,inset:`menu`}),o&&(0,$.jsx)(K,{testId:`show-skills-button`,onClick:o,children:(0,$.jsx)(q,{icon:(0,$.jsx)(st,{width:16,height:16,className:`stroke-[1.75]`,"aria-hidden":!0}),text:g(h.CONVERSATION$SHOW_SKILLS)})}),s&&(0,$.jsx)(K,{testId:`show-hooks-button`,onClick:s,children:(0,$.jsx)(q,{icon:(0,$.jsx)(bt,{width:16,height:16,"aria-hidden":!0}),text:g(h.CONVERSATION$SHOW_HOOKS)})}),a&&(0,$.jsx)(K,{testId:`show-agent-tools-button`,onClick:a,children:(0,$.jsx)(q,{icon:(0,$.jsx)(Be,{width:16,height:16}),text:g(h.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)})}),u&&(0,$.jsx)(K,{testId:`download-trajectory-button`,onClick:u,children:(0,$.jsx)(q,{icon:(0,$.jsx)(ne,{width:16,height:16}),text:g(h.BUTTON$EXPORT_CONVERSATION)})}),(T||E)&&(0,$.jsx)(Ue,{testId:`separator-info-control`,inset:`menu`}),i&&(0,$.jsx)(K,{testId:`display-cost-button`,onClick:i,children:(0,$.jsx)(q,{icon:(0,$.jsx)(P,{width:16,height:16}),text:g(h.BUTTON$DISPLAY_COST)})}),D&&c&&(0,$.jsxs)(`li`,{className:`flex w-full items-center gap-2 rounded px-2 py-2 hover:bg-[var(--oh-interactive-hover)]`,children:[(0,$.jsx)(`span`,{className:`flex shrink-0 items-center text-[var(--oh-muted)]`,"aria-hidden":!0,children:(0,$.jsx)(z,{size:16})}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:g(h.CONVERSATION$SHARE_PUBLICLY)}),(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center`,children:[O&&d&&l&&(0,$.jsxs)(`div`,{className:`mr-2 flex items-center gap-0.5`,children:[(0,$.jsx)(`button`,{type:`button`,"data-testid":`copy-share-link-button`,onClick:l,className:`rounded p-0.5 text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-selected)] hover:text-[var(--oh-foreground)] cursor-pointer [&_svg]:text-current`,title:g(h.BUTTON$COPY_TO_CLIPBOARD),children:(0,$.jsx)(rn,{width:14,height:14})}),(0,$.jsx)(`a`,{"data-testid":`open-share-link-button`,href:d,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),className:`rounded p-0.5 text-[var(--oh-muted)] no-underline visited:text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-selected)] hover:text-[var(--oh-foreground)] cursor-pointer [&_svg]:text-current`,title:g(h.BUTTON$OPEN_IN_NEW_TAB),children:(0,$.jsx)(ce,{size:14,"aria-hidden":!0})})]}),(0,$.jsx)(ai,{isPublic:O,onToggle:c,ariaLabel:g(h.CONVERSATION$SHARE_PUBLICLY)})]})]}),r&&(0,$.jsx)(K,{testId:`stop-button`,onClick:r,children:(0,$.jsx)(q,{icon:(0,$.jsx)(Ve,{width:16,height:16}),text:g(ee)})}),n&&(0,$.jsx)(K,{testId:`delete-button`,onClick:n,children:(0,$.jsx)(q,{icon:(0,$.jsx)(it,{width:16,height:16}),text:g(h.COMMON$DELETE_CONVERSATION)})})]});return te?typeof document>`u`||!S?null:ii.createPortal((0,$.jsx)(`div`,{style:S,children:k}),document.body):k}function si({onClose:e}){let{t}=y(`openhands`);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Je,{onClose:e,testId:`close-metrics-modal`}),(0,$.jsx)(`div`,{className:`w-full pr-6`,children:(0,$.jsx)(ke,{title:t(h.CONVERSATION$METRICS_INFO)})})]})}function ci({currentCost:e,maxBudget:t}){let n=e/t*100;return(0,$.jsx)(`div`,{className:`w-full h-1.5 bg-tertiary rounded-full overflow-hidden mt-1`,children:(0,$.jsx)(`div`,{className:U(`h-full transition-all duration-300`,n>80?`bg-red-500`:`bg-blue-500`),style:{width:`${Math.min(100,n)}%`}})})}function li({currentCost:e,maxBudget:t}){let{t:n}=y(`openhands`),r=e/t*100;return(0,$.jsx)(`div`,{className:`flex justify-end`,children:(0,$.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:n(h.CONVERSATION$BUDGET_USAGE_FORMAT,{currentCost:`$${e.toFixed(4)}`,maxBudget:`$${t.toFixed(4)}`,usagePercentage:r.toFixed(2),used:n(h.CONVERSATION$USED)})})})}function ui({cost:e,maxBudgetPerTask:t}){let{t:n}=y(`openhands`);return e===null?null:(0,$.jsx)(`div`,{className:`border-b border-[var(--oh-border-subtle)]`,children:t!==null&&t>0?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ci,{currentCost:e,maxBudget:t}),(0,$.jsx)(li,{currentCost:e,maxBudget:t})]}):(0,$.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:n(h.CONVERSATION$NO_BUDGET_LIMIT)})})}function di({cost:e,maxBudgetPerTask:t}){let{t:n}=y(`openhands`);return e===null?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex justify-between items-center pb-2`,children:[(0,$.jsx)(`span`,{className:`text-lg font-semibold`,children:n(h.CONVERSATION$TOTAL_COST)}),(0,$.jsxs)(`span`,{className:`font-semibold`,children:[`$`,e.toFixed(4)]})]}),(0,$.jsx)(ui,{cost:e,maxBudgetPerTask:t})]})}function fi({label:e,value:t,labelClassName:n=``,valueClassName:r=`font-semibold`}){return(0,$.jsxs)(`div`,{className:`flex justify-between items-center border-b border-[var(--oh-border-subtle)] pb-2`,children:[(0,$.jsx)(`span`,{className:n,children:e}),(0,$.jsx)(`span`,{className:r,children:t})]})}function pi({usage:e}){let{t}=y(`openhands`);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(fi,{label:t(h.CONVERSATION$INPUT),value:e.prompt_tokens.toLocaleString()}),(0,$.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 pl-4 text-sm`,children:[(0,$.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:t(h.CONVERSATION$CACHE_HIT)}),(0,$.jsx)(`span`,{className:`text-right`,children:e.cache_read_tokens.toLocaleString()}),(0,$.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:t(h.CONVERSATION$CACHE_WRITE)}),(0,$.jsx)(`span`,{className:`text-right`,children:e.cache_write_tokens.toLocaleString()})]}),(0,$.jsx)(fi,{label:t(h.CONVERSATION$OUTPUT),value:e.completion_tokens.toLocaleString()}),(0,$.jsx)(fi,{label:t(h.CONVERSATION$TOTAL),value:(e.prompt_tokens+e.completion_tokens).toLocaleString(),labelClassName:`font-semibold`,valueClassName:`font-bold`})]})}function mi({perTurnToken:e,contextWindow:t}){let{t:n}=y(`openhands`),r=t>0?e/t*100:0,i=Math.min(100,r);return(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsx)(`div`,{className:`flex items-center justify-between`,children:(0,$.jsx)(`span`,{className:`font-semibold`,children:n(h.CONVERSATION$CONTEXT_WINDOW)})}),(0,$.jsx)(`div`,{className:`w-full h-1.5 bg-tertiary rounded-full overflow-hidden`,children:(0,$.jsx)(`div`,{className:`h-full bg-foreground transition-all duration-300`,style:{width:`${i}%`}})}),(0,$.jsx)(`div`,{className:`flex justify-end`,children:(0,$.jsxs)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:[e.toLocaleString(),` / `,t.toLocaleString(),` (`,r.toFixed(2),`% `,n(h.CONVERSATION$USED),`)`]})})]})}function hi(){let{t:e}=y(`openhands`);return(0,$.jsx)(`div`,{className:`text-center`,children:(0,$.jsx)(`p`,{className:`text-[var(--oh-muted)]`,children:e(h.CONVERSATION$NO_METRICS)})})}function gi(e){let{stats:t}=e;if(!t?.usage_to_metrics)return{accumulated_cost:0,max_budget_per_task:null,accumulated_token_usage:null};let n=0,r=null,i=null;for(let e of Object.values(t.usage_to_metrics))n+=e.accumulated_cost,r===null&&e.max_budget_per_task!==null&&(r=e.max_budget_per_task),e.accumulated_token_usage&&(i=i===null?{...e.accumulated_token_usage}:{prompt_tokens:i.prompt_tokens+e.accumulated_token_usage.prompt_tokens,completion_tokens:i.completion_tokens+e.accumulated_token_usage.completion_tokens,cache_read_tokens:i.cache_read_tokens+e.accumulated_token_usage.cache_read_tokens,cache_write_tokens:i.cache_write_tokens+e.accumulated_token_usage.cache_write_tokens,context_window:Math.max(i.context_window,e.accumulated_token_usage.context_window),per_turn_token:Math.max(i.per_turn_token,e.accumulated_token_usage.per_turn_token)});return{accumulated_cost:n,max_budget_per_task:r,accumulated_token_usage:i}}var _i=(e,t,n,r=!0)=>{let i=_({queryKey:[`conversation-metrics`,e,t,n],queryFn:async()=>{if(!e)throw Error(`Conversation ID is required`);return gi(await Ee.getRuntimeConversation(e,t,n))},enabled:r&&!!e&&!!t,staleTime:1e3*30,gcTime:1e3*60*5,refetchInterval:1e3*30,retry:!1});return{data:i.data,isLoading:i.isLoading,error:i.error}};function vi({isOpen:e,onOpenChange:t}){let n=Ht(),{data:r}=Y(),i=r?.id,a=r?.conversation_url,o=r?.session_api_key,{data:s}=_i(i,a,o,e),c=(0,Q.useMemo)(()=>s?{cost:s.accumulated_cost,max_budget_per_task:s.max_budget_per_task,usage:s.accumulated_token_usage?{prompt_tokens:s.accumulated_token_usage.prompt_tokens??0,completion_tokens:s.accumulated_token_usage.completion_tokens??0,cache_read_tokens:s.accumulated_token_usage.cache_read_tokens??0,cache_write_tokens:s.accumulated_token_usage.cache_write_tokens??0,context_window:s.accumulated_token_usage.context_window??0,per_turn_token:s.accumulated_token_usage.per_turn_token??0}:null}:n,[s,n]);return e?(0,$.jsx)(De,{onClose:()=>t(!1),children:(0,$.jsxs)(Oe,{testID:`metrics-modal`,className:`relative items-start border border-[var(--oh-border)]`,children:[(0,$.jsx)(si,{onClose:()=>t(!1)}),(0,$.jsxs)(`div`,{className:`w-full`,children:[(c?.cost!==null||c?.usage!==null)&&(0,$.jsx)(`div`,{className:`rounded-md border border-[var(--oh-border)] bg-surface-raised p-3`,children:(0,$.jsxs)(`div`,{className:`grid gap-3`,children:[(0,$.jsx)(di,{cost:c?.cost??null,maxBudgetPerTask:c?.max_budget_per_task??null}),c?.usage!==null&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(pi,{usage:c.usage}),(0,$.jsx)(mi,{perTurnToken:c.usage.per_turn_token,contextWindow:c.usage.context_window})]})]})}),!c?.cost&&!c?.usage&&(0,$.jsx)(`div`,{className:`rounded-md border border-[var(--oh-border)] bg-surface-raised p-3`,children:(0,$.jsx)(hi,{})})]})]})}):null}function yi(){let{t:e}=y(`openhands`),{conversationId:t}=J(),{data:n}=Y(),{mutate:r}=ie(),[i,a]=Q.useState(`view`),[o,s]=Q.useState(!1),c=Q.useRef(null),l=Q.useRef(null),{handleDelete:u,handleStop:d,handleDownloadConversation:f,handleDisplayCost:p,handleShowAgentTools:m,handleShowSkills:g,handleShowHooks:_,handleTogglePublic:v,handleCopyShareLink:b,shareUrl:x,handleConfirmDelete:S,handleConfirmStop:C,metricsModalVisible:w,setMetricsModalVisible:T,systemModalVisible:E,setSystemModalVisible:ee,skillsModalVisible:D,setSkillsModalVisible:O,hooksModalVisible:te,setHooksModalVisible:k,confirmDeleteModalVisible:ne,setConfirmDeleteModalVisible:A,confirmStopModalVisible:j,setConfirmStopModalVisible:M,systemMessage:N,shouldShowStop:P,shouldShowDownloadConversation:F,shouldShowDisplayCost:L,shouldShowAgentTools:R,shouldShowSkills:ae,shouldShowHooks:se}=mt({conversationId:t,executionStatus:n?.execution_status,showOptions:!0,onContextMenuToggle:s});return Q.useEffect(()=>{i===`edit`&&c.current?.focus()},[i]),n?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 h-[22px] text-base font-normal text-left pl-0 lg:pl-1 min-w-0`,"data-testid":`conversation-name`,children:[i===`edit`?(0,$.jsx)(`input`,{ref:c,"data-testid":`conversation-name-input`,onClick:e=>{i===`edit`&&(e.preventDefault(),e.stopPropagation())},onBlur:()=>{if(c.current?.value&&t){let i=c.current.value.trim();i!==n?.title&&r({conversationId:t,newTitle:i},{onSuccess:()=>{oe(e(h.CONVERSATION$TITLE_UPDATED))}})}else c.current&&(c.current.value=n?.title??``);a(`view`)},onKeyUp:e=>{e.nativeEvent.isComposing||e.key===`Enter`&&e.currentTarget.blur()},type:`text`,defaultValue:n.title||``,className:`text-white leading-5 bg-transparent border-none outline-none text-base font-normal w-fit max-w-fit field-sizing-content`}):(0,$.jsx)(`div`,{className:`text-white leading-5 truncate`,"data-testid":`conversation-name-title`,onDoubleClick:()=>{a(`edit`)},title:n.title||``,children:n.title}),i!==`edit`&&(0,$.jsxs)(`div`,{ref:l,className:`relative flex items-center shrink-0`,children:[(0,$.jsx)(at,{onClick:e=>{e.preventDefault(),e.stopPropagation(),s(!o)}}),o&&(0,$.jsx)(oi,{onClose:()=>s(!1),onRename:e=>{e.preventDefault(),e.stopPropagation(),a(`edit`),s(!1)},onDelete:u,onStop:P?d:void 0,onDisplayCost:L?p:void 0,onShowAgentTools:R?m:void 0,onShowSkills:ae?g:void 0,onShowHooks:se?_:void 0,onTogglePublic:v,onCopyShareLink:b,shareUrl:x,onDownloadConversation:F?f:void 0,position:`bottom`,anchorRef:l})]})]}),(0,$.jsx)(vi,{isOpen:w,onOpenChange:T}),(0,$.jsx)(Et,{isOpen:E,onClose:()=>ee(!1),systemMessage:N||null}),D&&(0,$.jsx)(Dt,{onClose:()=>O(!1)}),te&&(0,$.jsx)(jt,{onClose:()=>k(!1)}),ne&&(0,$.jsx)(re,{onConfirm:S,onCancel:()=>A(!1),conversationTitle:n?.title||``}),j&&(0,$.jsx)(I,{onConfirm:C,onCancel:()=>M(!1)})]}):null}function bi({children:e,tooltip:t,ariaLabel:n}){return(0,$.jsx)(Fe,{content:t,placement:`bottom`,tooltipClassName:`bg-white text-black text-xs font-medium leading-5`,children:(0,$.jsx)(`span`,{"data-aria-label":n,children:e})})}function xi({className:e}){let{t}=y(`openhands`),n=sn(),r=a(),{conversationId:i}=J(),{isRightPanelShown:o,setHasRightPanelToggled:s,setIsRightPanelShown:c,setSelectedTab:l}=G(),u=()=>{if(n){if(!i)return;s(!0),c(!0);let{selectedTab:e}=G.getState();e||l(`files`),r(`/conversations/${i}/panel`);return}let e=!o;if(s(e),e){let{selectedTab:e}=G.getState();e||l(`files`)}},d=t(n?h.COMMON$SHOW_PANEL:o?h.COMMON$HIDE_PANEL:h.COMMON$SHOW_PANEL),f=n?!1:o;return(0,$.jsx)(bi,{tooltip:d,ariaLabel:d,children:(0,$.jsx)(`button`,{type:`button`,onClick:u,className:U(N,e),"aria-label":d,"aria-pressed":f,"data-testid":`right-panel-toggle`,children:(0,$.jsx)(M,{className:`w-5 h-5 -scale-x-100`})})})}function Si(){let{conversationId:e}=J(),{data:t}=Y(),{curAgentState:n}=X(),{isTask:r,taskStatus:i}=_t(),{mutate:a}=ze(),{mutate:o}=Qr(),{providers:s}=Re(),c=t?.execution_status??null,l=ve({isPausing:!1,isTask:r,taskStatus:i,isStartingStatus:n===V.LOADING||n===V.INIT,isStopStatus:fe(c),curAgentState:n});return(0,$.jsxs)(`div`,{className:`flex items-center justify-between w-full`,children:[(0,$.jsxs)(`div`,{className:`flex items-center min-w-0`,children:[(0,$.jsxs)(`div`,{className:`group relative shrink-0`,children:[(0,$.jsx)(Pr,{className:`ml-[3.5px] w-6 h-6 cursor-pointer`,color:l}),(0,$.jsx)(ri,{onClose:()=>{},onStopServer:xe(c)?t=>{t.preventDefault(),t.stopPropagation(),e&&a({conversationId:e})}:void 0,onStartServer:be(c)?t=>{t.preventDefault(),t.stopPropagation(),e&&o({conversationId:e,providers:s})}:void 0,executionStatus:c,position:`bottom`,className:`opacity-0 invisible pointer-events-none group-hover:opacity-100 group-hover:visible group-hover:pointer-events-auto bottom-full left-0 mt-0 min-h-fit`,isPausing:!1})]}),(0,$.jsx)(yi,{})]}),(0,$.jsx)(xi,{className:`mr-2`})]})}var Ci=e=>(0,$.jsxs)(`svg`,{width:20,height:20,viewBox:`0 0 20 20`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,$.jsx)(`path`,{d:`M3 10.5L6.5 14L14 6`,stroke:`currentColor`,strokeWidth:2.2,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,$.jsx)(`path`,{d:`M7 10.5L10.5 14L18 6`,stroke:`currentColor`,strokeWidth:2.2,strokeLinecap:`round`,strokeLinejoin:`round`})]});function wi({tabValue:e,icon:t,onClick:n,isActive:r,label:i,className:a,measureOnly:o}){return(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{n()},...o?{}:{"data-testid":`conversation-tab-${e}`},"data-tab-measure":o?`true`:void 0,className:U(`flex items-center gap-2 rounded-md cursor-pointer`,`pl-1.5 pr-2 py-1 lg:py-1.5`,`text-[var(--oh-muted)] bg-transparent`,r&&`bg-[var(--oh-interactive-active)] text-white`,r?`hover:text-white hover:bg-[var(--oh-interactive-hover)]`:`hover:text-white hover:bg-white/5`,r?`focus-within:text-white`:`focus-within:text-[var(--oh-muted)]`,a),children:[(0,$.jsx)(t,{className:U(`w-5 h-5 text-inherit flex-shrink-0`)}),r&&i&&(0,$.jsx)(`span`,{className:`text-sm font-normal whitespace-nowrap`,children:i})]})}function Ti(){let{curAgentState:e}=X(),{t}=y(`openhands`),{data:n,refetch:r}=un(),i=ye.includes(e);return(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{children:t(h.COMMON$CODE)}),i?null:(0,$.jsx)(nt,{className:`w-3 h-3 text-inherit cursor-pointer`,onClick:async e=>{e.preventDefault(),e.stopPropagation();let t=n?.url;t||=(await r()).data?.url??null,t&&window.open(t,`_blank`,`noopener,noreferrer`)}})]})}var Ei=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,$.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M7.13832 8.76476C8.25957 8.17949 9.52697 7.9727 10.7515 8.14436L14.9025 2.52826L21.4717 9.09737L15.8555 13.2484C16.0272 14.4729 15.8204 15.7403 15.2351 16.8616C15.1872 16.9535 15.1366 17.0444 15.0836 17.1343C14.8318 17.5605 14.5228 17.9624 14.1566 18.3286L10.4443 14.6163L4.75207 20.3085H3.69141V19.2478L9.38361 13.5556L5.6713 9.84332C6.03755 9.47708 6.43936 9.16808 6.86562 8.91632C6.95547 8.86326 7.04641 8.81274 7.13832 8.76476ZM15.0735 4.82054L19.1794 8.92641L14.2461 12.5727L14.3701 13.4567C14.492 14.3266 14.3596 15.2233 13.9758 16.0265L7.97338 10.0241C8.77665 9.64035 9.67335 9.50789 10.5432 9.62984L11.4272 9.75376L15.0735 4.82054Z`,fill:`currentColor`})}),Di=e=>(0,$.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,$.jsx)(`path`,{d:`M10.9706 10.1586C10.2819 10.0621 9.56905 10.1784 8.93842 10.5075C8.88672 10.5345 8.83557 10.5629 8.78504 10.5928C8.54529 10.7344 8.3193 10.9082 8.11331 11.1142L9.83702 12.8372L7.00054 15.75L7 17H8.25064L11.1628 14.1632L12.8857 15.8865C13.0917 15.6805 13.2655 15.4545 13.4071 15.2147C13.437 15.1642 13.4654 15.1131 13.4924 15.0614C13.8215 14.4308 13.9378 13.718 13.8413 13.0293L17 10.6946L13.3053 7L10.9706 10.1586Z`,fill:`currentColor`})});function Oi({isOpen:e,onClose:t,ignoreOutsideClickRef:n}){let r=Ze(t,n),{t:i}=y(`openhands`),{conversationId:a}=J(),{state:o,setUnpinnedTabs:s,setSelectedTab:c}=qe(a),{selectedTab:l,isRightPanelShown:u,setSelectedTab:d}=G(),{navigateToTab:f}=w(),{hasTaskList:p}=dn(),{backend:m}=W(),g=[{tab:`planner`,icon:nn,i18nKey:h.COMMON$PLANNER},{tab:`files`,icon:zt,i18nKey:h.COMMON$FILES},{tab:`vscode`,icon:ln,i18nKey:h.COMMON$CODE},{tab:`terminal`,icon:ct,i18nKey:h.COMMON$TERMINAL},{tab:`browser`,icon:cn,i18nKey:h.COMMON$BROWSER}];p&&g.unshift({tab:`tasklist`,icon:Ci,i18nKey:h.COMMON$TASK_LIST});let _=g.filter(({tab:e})=>e!==`vscode`&&e!==`planner`||m.kind===`cloud`);if(!e)return null;let v=e=>{f(e),t()},b=(e,t)=>{if(t.preventDefault(),t.stopPropagation(),o.unpinnedTabs.includes(e))s(o.unpinnedTabs.filter(t=>t!==e));else{let t=[...o.unpinnedTabs,e];if(s(t),l===e&&u){let n=_.find(({tab:n})=>n!==e&&!t.includes(n));n&&(d(n.tab),c(n.tab))}}};return(0,$.jsx)(rt,{ref:r,alignment:`right`,position:`bottom`,className:`z-[9999] mt-2 w-fit`,children:_.map(({tab:e,icon:t,i18nKey:n})=>{let r=!o.unpinnedTabs.includes(e);return(0,$.jsx)(`li`,{className:`list-none`,children:(0,$.jsxs)(`div`,{className:U(`group flex h-[30px] w-full min-w-0 items-stretch rounded`,`hover:bg-[var(--oh-interactive-hover)]`),children:[(0,$.jsxs)(`button`,{type:`button`,"data-testid":`conversation-tabs-menu-open-${e}`,className:U(`flex min-w-0 flex-1 cursor-pointer items-center gap-2 rounded-l p-2 text-start text-white`,Ie),onClick:()=>v(e),children:[(0,$.jsx)(`span`,{className:Le,"aria-hidden":!0,children:(0,$.jsx)(t,{className:`h-4 w-4`})}),(0,$.jsx)(`span`,{className:`text-sm`,children:i(n)})]}),(0,$.jsx)(`button`,{type:`button`,"data-testid":`conversation-tabs-menu-pin-${e}`,className:U(`flex shrink-0 cursor-pointer items-center justify-center rounded-r px-2 text-white hover:bg-white/10`,Ie),"aria-pressed":r,"aria-label":r?`Unpin tab from bar`:`Pin tab to bar`,onClick:t=>b(e,t),children:r?(0,$.jsx)(`span`,{className:U(`-mr-[5px] ml-auto`,Le),"aria-hidden":!0,children:(0,$.jsx)(Di,{className:`h-7 w-7`})}):(0,$.jsx)(`span`,{className:U(`ml-auto`,Le),"aria-hidden":!0,children:(0,$.jsx)(Ei,{className:`h-4.5 w-4.5`})})})]})},e)})})}function ki({variant:e=`default`}){let{conversationId:t}=J(),{setSelectedTab:n,planContent:r}=G(),[i,a]=(0,Q.useState)(!1),{state:o}=qe(t),{hasTaskList:s}=dn(),{backend:c}=W(),{handleBuildPlanClick:l}=b(),{curAgentState:u}=X(),{selectTab:d,isTabActive:f,onTabChange:p,selectedTab:m,isRightPanelShown:g}=w();(0,Q.useEffect)(()=>{n(o.selectedTab)},[n,o.selectedTab]),(0,Q.useEffect)(()=>{g&&(m||p(`files`))},[g,m,p]);let{t:_,i18n:v}=y(`openhands`),x=[{tabValue:`files`,isActive:f(`files`),icon:zt,onClick:()=>d(`files`),tooltipContent:_(h.COMMON$FILES),tooltipAriaLabel:_(h.COMMON$FILES),label:_(h.COMMON$FILES)},{tabValue:`planner`,isActive:f(`planner`),icon:nn,onClick:()=>d(`planner`),tooltipContent:_(h.COMMON$PLANNER),tooltipAriaLabel:_(h.COMMON$PLANNER),label:_(h.COMMON$PLANNER)},{tabValue:`vscode`,isActive:f(`vscode`),icon:ln,onClick:()=>d(`vscode`),tooltipContent:(0,$.jsx)(Ti,{}),tooltipAriaLabel:_(h.COMMON$CODE),label:_(h.COMMON$CODE)},{tabValue:`terminal`,isActive:f(`terminal`),icon:ct,onClick:()=>d(`terminal`),tooltipContent:_(h.COMMON$TERMINAL),tooltipAriaLabel:_(h.COMMON$TERMINAL),label:_(h.COMMON$TERMINAL),className:`pl-2`},{tabValue:`browser`,isActive:f(`browser`),icon:cn,onClick:()=>d(`browser`),tooltipContent:_(h.COMMON$BROWSER),tooltipAriaLabel:_(h.COMMON$BROWSER),label:_(h.COMMON$BROWSER)}];s&&x.splice(1,0,{tabValue:`tasklist`,isActive:f(`tasklist`),icon:Ci,onClick:()=>d(`tasklist`),tooltipContent:_(h.COMMON$TASK_LIST),tooltipAriaLabel:_(h.COMMON$TASK_LIST),label:_(h.COMMON$TASK_LIST)});let S=x.filter(e=>e.tabValue===`vscode`&&c.kind!==`cloud`||e.tabValue===`planner`&&c.kind!==`cloud`?!1:o.unpinnedTabs.includes(e.tabValue)?m===e.tabValue:!0),C=o.unpinnedTabs.join(`,`),T=u===V.RUNNING||u===V.LOADING||!r,E=(0,Q.useRef)(null),ee=(0,Q.useRef)(null),D=(0,Q.useRef)(null),O=(0,Q.useRef)(null),[te,k]=(0,Q.useState)(S.length);(0,Q.useLayoutEffect)(()=>{let e=E.current,t=ee.current,n=D.current;if(!e||!t||!n)return;let r=()=>{let r=t.querySelectorAll(`[data-tab-measure="true"]`),i=r.length,a=e.getBoundingClientRect().width;if(a===0){k(i);return}let o=Array.from(r).map(e=>e.getBoundingClientRect().width);if(o.length!==i||i===0){k(Math.max(0,i));return}let s=n.getBoundingClientRect().width,c=getComputedStyle(e).columnGap||getComputedStyle(e).gap,l=parseFloat(c)||6,u=0;for(let e=i;e>=0;--e){let t=s;for(let n=0;n<e;n+=1)t+=o[n]??0;if(e>0&&(t+=e*l),t<=a+.5){u=e;break}}k(e=>e===u?e:u)};if(r(),typeof ResizeObserver>`u`)return;let i=new ResizeObserver(r);return i.observe(e),()=>i.disconnect()},[C,S.length,s,c.kind,m,g,v.language]);let ne=Math.min(te,S.length);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:U(`relative w-full min-w-0`,e===`compact`?`flex h-full min-h-0 items-center py-0 pl-0 pr-1`:`min-h-10 p-1`),children:[(0,$.jsx)(`div`,{ref:ee,"aria-hidden":!0,className:`pointer-events-none absolute top-0 left-[-10000px] flex flex-nowrap items-center gap-1.5`,children:S.map(({tabValue:e,icon:t,isActive:n,tooltipContent:r,tooltipAriaLabel:i,label:a,className:o},s)=>(0,$.jsx)(bi,{tooltip:r,ariaLabel:i,children:(0,$.jsx)(wi,{tabValue:e,icon:t,onClick:()=>{},isActive:n,label:a,className:U(o,`shrink-0`),measureOnly:!0})},`measure-${e}-${s}`))}),(0,$.jsx)(`div`,{ref:E,className:`flex w-full min-w-0 flex-nowrap items-center justify-start`,children:(0,$.jsxs)(`div`,{className:`flex w-fit max-w-full min-w-0 flex-nowrap items-center gap-1.5`,children:[(0,$.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-nowrap items-center gap-1.5 overflow-x-hidden`,children:S.slice(0,ne).map(({tabValue:e,icon:t,onClick:n,isActive:r,tooltipContent:i,tooltipAriaLabel:a,label:o,className:s},c)=>(0,$.jsx)(bi,{tooltip:i,ariaLabel:a,children:(0,$.jsx)(wi,{tabValue:e,icon:t,onClick:n,isActive:r,label:o,className:U(s,`shrink-0`)})},`${e}-${c}`))}),(0,$.jsxs)(`div`,{ref:D,className:`relative shrink-0`,children:[(0,$.jsx)(at,{ref:O,onClick:()=>a(!i),ariaLabel:_(h.COMMON$MORE_OPTIONS),iconClassName:e===`compact`?j:void 0}),(0,$.jsx)(Oi,{isOpen:i,onClose:()=>a(!1),ignoreOutsideClickRef:O})]})]})})]}),f(`planner`)&&(0,$.jsx)(`div`,{className:U(`flex h-10 min-h-10 shrink-0 items-center border-t border-[var(--oh-border)] pl-[10px] pr-1`),children:(0,$.jsx)(`button`,{type:`button`,onClick:l,disabled:T,className:U(`flex h-5 min-w-17 items-center justify-center rounded bg-white px-2 transition-opacity`,T?`cursor-not-allowed opacity-50`:`cursor-pointer hover:opacity-90`),"data-testid":`planner-tab-build-button`,children:(0,$.jsxs)(dt.Text,{className:`text-[11px] font-normal leading-5 text-black`,children:[_(h.COMMON$BUILD),` ⌘↩`]})})})]})}function Ai({onMouseDown:e,className:t,isDragging:n=!1}){let[r,i]=(0,Q.useState)(!1),a=n||r;return(0,$.jsxs)(`div`,{className:U(`relative z-10 w-0 shrink-0 self-stretch`,t),"aria-hidden":!0,children:[(0,$.jsx)(`div`,{className:`absolute inset-y-0 left-1/2 w-3 min-w-[12px] -translate-x-1/2 cursor-ew-resize`,onMouseDown:e,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1)}),(0,$.jsx)(`div`,{className:U(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 transition-colors`,a?`bg-white`:`bg-transparent`),"aria-hidden":!0})]})}var ji=200;function Mi({defaultLeftWidth:e=50,minLeftWidth:t=30,maxLeftWidth:n=80,storageKey:r=`desktop-layout-panel-width`}={}){let[i,a]=fn(r,e),o=(0,Q.useCallback)(e=>Math.max(t,Math.min(n,e)),[t,n]),[s,c]=(0,Q.useState)(()=>o(i)),[l,u]=(0,Q.useState)(!1),d=(0,Q.useRef)(null),f=(0,Q.useCallback)(e=>{e.preventDefault(),u(!0)},[]),p=(0,Q.useCallback)(e=>{if(!l||!d.current)return;let t=d.current.getBoundingClientRect();c(o((e.clientX-t.left)/t.width*100))},[l,o]),m=(0,Q.useCallback)(()=>{l&&(u(!1),a(s))},[l,s,a]);return(0,Q.useLayoutEffect)(()=>{if(!l)return;let e=document.createElement(`div`);return e.setAttribute(`aria-hidden`,`true`),e.dataset.panelDragShield=``,Object.assign(e.style,{position:`fixed`,inset:`0`,zIndex:String(ji),cursor:`ew-resize`}),document.body.appendChild(e),document.addEventListener(`mousemove`,p),document.addEventListener(`mouseup`,m),document.body.style.cursor=`ew-resize`,document.body.style.userSelect=`none`,()=>{document.removeEventListener(`mousemove`,p),document.removeEventListener(`mouseup`,m),document.body.style.cursor=``,document.body.style.userSelect=``,e.remove()}},[l,p,m]),{leftWidth:s,rightWidth:100-s,isDragging:l,containerRef:d,handleMouseDown:f}}function Ni(e){return e?`translate-x-0 opacity-100`:`w-0 translate-x-full opacity-0`}function Pi(){let e=sn(),t=sn(767),{isRightPanelShown:n}=G(),{leftWidth:r,rightWidth:i,isDragging:a,containerRef:o,handleMouseDown:s}=Mi({defaultLeftWidth:50,minLeftWidth:30,maxLeftWidth:80,storageKey:`desktop-layout-panel-width`});return(0,$.jsx)(`div`,{className:U(e?`relative min-h-0 flex-1 flex flex-col`:`h-full flex flex-col overflow-hidden`),children:(0,$.jsxs)(`div`,{ref:o,className:U(`flex flex-1 overflow-hidden`,e?`flex-col`:`transition-all duration-300 ease-in-out`),style:e?void 0:{transitionProperty:a?`none`:`all`},children:[(0,$.jsxs)(`div`,{className:U(`flex flex-col bg-base overflow-hidden`,e?`flex-1`:`transition-all duration-300 ease-in-out`),style:e?void 0:{width:n?`${r}%`:`100%`,transitionProperty:a?`none`:`all`},children:[(0,$.jsxs)(`div`,{"data-testid":`chat-pane-header`,className:U(`flex h-10 min-h-10 shrink-0 items-center`,t&&`gap-2 pl-2.5`),children:[t?(0,$.jsx)(F,{}):null,(0,$.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,$.jsx)(Si,{})})]}),(0,$.jsx)(`div`,{className:`flex-1 min-h-0 flex flex-col`,children:(0,$.jsx)(zr,{isRightPanelShown:!e&&n})})]}),!e&&n&&(0,$.jsx)(Ai,{onMouseDown:s,isDragging:a}),!e&&(0,$.jsx)(`div`,{className:U(`transition-all duration-300 ease-in-out overflow-hidden`,Ni(n)),style:{width:n?`${i}%`:`0%`,transitionProperty:a?`opacity, transform`:`all`},children:(0,$.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:(0,$.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0 bg-[var(--oh-surface)] border-l border-[var(--oh-border)] overflow-hidden`,children:[(0,$.jsx)(`div`,{"data-testid":`tabs-pane-header`,className:`flex shrink-0 flex-col border-b border-[var(--oh-border)]`,children:(0,$.jsx)(ki,{})}),(0,$.jsx)(`div`,{className:`flex-1 min-h-0 flex flex-col`,children:(0,$.jsx)(Zr,{})})]})})})]})})}function Fi({onNavigateBack:e}){let{t}=y(`openhands`),{setIsRightPanelShown:n,setHasRightPanelToggled:r,setSelectedTab:i}=G();return Q.useLayoutEffect(()=>(n(!0),r(!0),G.getState().selectedTab||i(`files`),()=>{n(!1),r(!1)}),[n,r,i]),(0,$.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-[var(--oh-surface)]`,children:[(0,$.jsxs)(`div`,{"data-testid":`conversation-mobile-panel-top`,className:`flex h-10 min-h-10 shrink-0 items-center gap-1.5 border-b border-[var(--oh-border)] pl-2.5`,children:[(0,$.jsx)(`button`,{type:`button`,"data-testid":`conversation-mobile-panel-back`,onClick:()=>{e()},"aria-label":t(h.COMMON$BACK),className:N,children:(0,$.jsx)(A,{size:20,className:j,"aria-hidden":!0,strokeWidth:2})}),(0,$.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 items-center self-stretch`,children:(0,$.jsx)(`div`,{"data-testid":`tabs-pane-header`,className:`flex h-full min-h-0 w-full min-w-0 flex-col justify-center`,children:(0,$.jsx)(ki,{variant:`compact`})})})]}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col bg-[var(--oh-surface)]`,children:(0,$.jsx)(Zr,{})})]})}var Ii=1e3*60*5,Li=1e3*60*15,Ri=e=>{let t=e||[],n=W();return _({queryKey:[`v1`,`sub-conversations`,t,n.backend.id,n.orgId],queryFn:async()=>t.length===0?[]:Ee.batchGetAppConversations(t),enabled:t.length>0,staleTime:Ii,gcTime:Li,retry:!1})};function zi({children:e,conversationId:t}){let{data:n}=Y(),{data:r}=Ri(n?.sub_conversation_ids??[]),i=r?.filter(e=>e!==null);return(0,$.jsx)(Jt,{conversationId:t,conversationUrl:n?.sandbox_status===`PAUSED`?null:n?.conversation_url,sessionApiKey:n?.session_api_key,subConversationIds:n?.sub_conversation_ids,subConversations:i,children:e})}function Bi(){let{t:e}=y(`openhands`),{conversationId:t}=J(),n=r(`/conversations/:conversationId/panel`),{isTask:i,taskStatus:s,taskDetail:c}=_t(),l=W(),u=Q.useRef(l.backend.id),d=Q.useRef(l.orgId),f=u.current!==l.backend.id||d.current!==l.orgId,{data:p,isFetched:m}=Y(),{data:g}=Xe(),{resetConversationState:_}=G(),v=a(),b=o(),x=tn(e=>e.clearTerminal),S=ut(e=>e.reset),C=mn(e=>e.setCurrentAgentState),w=Ut(e=>e.removeErrorMessage);Q.useEffect(()=>{x(),_(),S(),C(V.LOADING),w()},[t,x,_,S,C,w]),Q.useEffect(()=>{if(i&&s===`ERROR`){R(c||e(h.CONVERSATION$FAILED_TO_START_FROM_TASK));let t=b.state?.resumedFromConversationId;v(t?`/conversations/${t}`:`/conversations`,{replace:!0})}},[i,s,c,e,v,b.state]),Q.useEffect(()=>{!m||!g||f||p||(bn(l.backend.id,l.orgId),R(e(h.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION)),v(`/conversations`))},[p,m,g,v,e,f,l.backend.id,l.orgId]),Q.useEffect(()=>{f||t&&(t.startsWith(`task-`)||yn(l.backend.id,l.orgId,t))},[t,f,l.backend.id,l.orgId]);let T=Q.useRef(null);return Q.useEffect(()=>{!m||!p||l.backend.kind===`cloud`&&p.sandbox_status===`PAUSED`&&p.sandbox_id&&T.current!==p.id&&(T.current=p.id,Te(p.sandbox_id).catch(()=>{R(e(h.CONVERSATION$FAILED_TO_START_FROM_TASK))}))},[m,p?.id,p?.sandbox_status,p?.sandbox_id,l.backend.kind,e]),f?null:(0,$.jsx)(zi,{conversationId:t,children:(0,$.jsx)(En,{children:(0,$.jsx)(`div`,{"data-testid":`app-route`,className:`flex h-full flex-col`,children:n?(0,$.jsx)(Fi,{onNavigateBack:()=>v(`/conversations/${t}`)}):(0,$.jsx)(Pi,{})})})})}function Vi(){return(0,$.jsx)(Bi,{})}var Hi=i(Vi);export{Hi as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./conversation-CBlJiDaV.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./conversation-CBlJiDaV.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,n as t,r as n,w as r}from"./agent-server-client-options-Dvgeb3x4.js";import{i,r as a,s as o}from"./vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js";import{a as s,n as c,s as l,t as u}from"./agent-server-conversation-service.api-B82pNNTm.js";var d=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function f(e){let t=e.split(/[\\/]+/).filter(Boolean),n=t[t.length-1];if(!n||n===`.`||n===`..`)throw Error(`Invalid file name`);return n}async function p(e,t={}){return l(e,t)}async function m(e,t,n={}){let r=f(e);return`${(await p(t,n)).replace(/[/\\]+$/,``)}/${r}`}async function h(e,t){if(t?.id===e&&t.workspace?.working_dir?.trim())return t.workspace.working_dir.trim();let n=s(e);return n?.selected_workspace?.trim()?n.selected_workspace.trim():d.test(e)?u.resolveConversationWorkingDir(e):r()}var g=5;async function _(t,n){if(n?.id===t&&n.conversation_url?.trim()&&n.session_api_key?.trim())return{conversationUrl:n.conversation_url.trim(),sessionApiKey:n.session_api_key.trim()};if(e().backend.kind===`cloud`){let[e]=await c([t]);return{conversationUrl:e?.conversation_url?.trim()??null,sessionApiKey:e?.session_api_key?.trim()??null}}return{conversationUrl:null,sessionApiKey:null}}function v(e){if(!e.conversationUrl||!e.sessionApiKey)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return{conversationUrl:e.conversationUrl,sessionApiKey:e.sessionApiKey}}async function y(t,n,r){let i=await h(t,r),a=await _(t,r),o=e().backend.kind===`cloud`,s=r?.id===t?r.session_api_key??a.sessionApiKey:a.sessionApiKey,c=r?.id===t?r.conversation_url??a.conversationUrl:a.conversationUrl;if(o){let e=v({conversationUrl:c,sessionApiKey:s});return b({files:n,workingDir:i,conversationUrl:e.conversationUrl,sessionApiKey:e.sessionApiKey})}return b({files:n,workingDir:i,conversationUrl:c,sessionApiKey:s})}async function b(e){let{files:n,workingDir:r,conversationUrl:i,sessionApiKey:o}=e,s=new a(t({conversationUrl:i,sessionApiKey:o,workingDir:r})),c=async e=>{try{let t=f(e.name),n=await m(e.name,r,{conversationUrl:i,sessionApiKey:o});return await s.fileUpload(e,n),{uploadedFile:t,skippedFile:null}}catch(t){return{uploadedFile:null,skippedFile:{name:e.name,reason:t instanceof Error?t.message:`Upload failed`}}}},l=[];for(let e=0;e<n.length;e+=g){let t=n.slice(e,e+g);l.push(...await Promise.all(t.map(c)))}return{uploaded_files:l.flatMap(e=>e.uploadedFile?[e.uploadedFile]:[]),skipped_files:l.flatMap(e=>e.skippedFile?[e.skippedFile]:[])}}var x=class{static currentConversation=null;static setCurrentConversation(e){this.currentConversation=e}static getClientOverrides(){return{sessionApiKey:this.currentConversation?.session_api_key}}static async getVSCodeUrl(e){let n=this.currentConversation?.id===e?this.currentConversation?.workspace?.working_dir??r():r();return{vscode_url:await new o(t(this.getClientOverrides())).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:n})}}static async getTrajectory(e){return{trajectory:(await new i(n(this.getClientOverrides()),e).search({limit:1e4})).items??[]}}static async uploadFiles(e,t){return y(e,t,this.currentConversation)}};export{_ as n,y as r,x as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./react-CuAHzoGi.js";import{n as t}from"./middleware-B5rcobhi.js";import{a as n,r}from"./conversation-local-storage-D5Tre_GA.js";var i=()=>{if(typeof window>`u`)return null;let e=window.location.pathname.match(/\/conversations\/([^/]+)/);return e?e[1]:null},a=()=>{if(typeof window>`u`)return`code`;let e=i();return e?r(e).conversationMode:`code`},o=e()(t(e=>({isRightPanelShown:!1,selectedTab:`files`,images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[],messageToSend:null,messageRestoreIfEmpty:null,shouldShownAgentLoading:!1,submittedMessage:null,shouldHideSuggestions:!1,hasRightPanelToggled:!1,planContent:null,conversationMode:a(),subConversationTaskId:null,setIsRightPanelShown:t=>e({isRightPanelShown:t},!1,`setIsRightPanelShown`),setSelectedTab:t=>e({selectedTab:t},!1,`setSelectedTab`),setShouldShownAgentLoading:t=>e({shouldShownAgentLoading:t},!1,`setShouldShownAgentLoading`),setShouldHideSuggestions:t=>e({shouldHideSuggestions:t},!1,`setShouldHideSuggestions`),addImages:t=>e(e=>({images:[...e.images,...t]}),!1,`addImages`),addFiles:t=>e(e=>({files:[...e.files,...t]}),!1,`addFiles`),toggleImageUploadAsFile:t=>e(e=>{let n=new Set(e.imagesMarkedUploadAsFile);return n.has(t)?n.delete(t):n.add(t),{imagesMarkedUploadAsFile:[...n]}},!1,`toggleImageUploadAsFile`),markImagesAsPasted:t=>e(e=>({pastedImageNames:[...new Set([...e.pastedImageNames,...t])]}),!1,`markImagesAsPasted`),removeImage:t=>e(e=>{let n=e.images[t],r=[...e.images];return r.splice(t,1),{images:r,imagesMarkedUploadAsFile:n?e.imagesMarkedUploadAsFile.filter(e=>e!==n.name):e.imagesMarkedUploadAsFile,pastedImageNames:n?e.pastedImageNames.filter(e=>e!==n.name):e.pastedImageNames}},!1,`removeImage`),removeFile:t=>e(e=>{let n=[...e.files];return n.splice(t,1),{files:n}},!1,`removeFile`),clearImages:()=>e({images:[]},!1,`clearImages`),clearFiles:()=>e({files:[]},!1,`clearFiles`),clearAllFiles:()=>e({images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[]},!1,`clearAllFiles`),addFileLoading:t=>e(e=>e.loadingFiles.includes(t)?e:{loadingFiles:[...e.loadingFiles,t]},!1,`addFileLoading`),removeFileLoading:t=>e(e=>({loadingFiles:e.loadingFiles.filter(e=>e!==t)}),!1,`removeFileLoading`),addImageLoading:t=>e(e=>e.loadingImages.includes(t)?e:{loadingImages:[...e.loadingImages,t]},!1,`addImageLoading`),removeImageLoading:t=>e(e=>({loadingImages:e.loadingImages.filter(e=>e!==t)}),!1,`removeImageLoading`),clearAllLoading:()=>e({loadingFiles:[],loadingImages:[]},!1,`clearAllLoading`),setMessageToSend:t=>e({messageToSend:{text:t,timestamp:Date.now()}},!1,`setMessageToSend`),restoreMessageToInputIfEmpty:t=>e({messageRestoreIfEmpty:{text:t,timestamp:Date.now()}},!1,`restoreMessageToInputIfEmpty`),clearMessageRestoreIfEmpty:()=>e({messageRestoreIfEmpty:null},!1,`clearMessageRestoreIfEmpty`),setSubmittedMessage:t=>e({submittedMessage:t},!1,`setSubmittedMessage`),resetConversationState:()=>e({shouldHideSuggestions:!1,conversationMode:a(),subConversationTaskId:null,planContent:null},!1,`resetConversationState`),setHasRightPanelToggled:t=>e({hasRightPanelToggled:t},!1,`setHasRightPanelToggled`),setConversationMode:t=>{let r=i();r&&n(r,{conversationMode:t}),e({conversationMode:t},!1,`setConversationMode`)},setSubConversationTaskId:t=>e({subConversationTaskId:t},!1,`setSubConversationTaskId`),setPlanContent:t=>e({planContent:t},!1,`setPlanContent`)}),{name:`conversation-store`}));export{o as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{i as n,l as r,n as i}from"./path-utils-CNd_jqv_.js";import{t as a}from"./useMutation-7hG0GuPx.js";import{o}from"./declaration-IA661TBv.js";import{n as s}from"./QueryClientProvider-7oLZ1RtQ.js";import{t as c}from"./useQuery-JDs8UaWj.js";import{a as l,c as u,n as d,o as f,r as p}from"./agent-server-client-options-Dvgeb3x4.js";import{n as m}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-CBEOG8NF.js";import{i as h}from"./vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js";import{c as g,t as _}from"./agent-server-conversation-service.api-B82pNNTm.js";import{t as v}from"./proxy-wIasY2Po.js";import{t as y}from"./react-CuAHzoGi.js";import{n as b}from"./middleware-B5rcobhi.js";import{a as ee}from"./conversation-local-storage-D5Tre_GA.js";import{t as x}from"./conversation-store-kHcewy1E.js";import{t as S}from"./v4-BMWDcIWQ.js";import{t as te}from"./use-user-conversation-DwOGM1lc.js";import{t as ne}from"./conversation-state-store-BUU90dVq.js";import{C,_ as w,a as T,b as re,c as ie,d as E,f as ae,g as D,h as oe,i as se,l as ce,m as le,o as ue,p as de,r as fe,s as pe,t as O,u as me,v as k,x as he,y as ge}from"./use-event-store-Rw1YbvLm.js";import{t as _e}from"./command-store-DAd3K0d_.js";import{t as A}from"./browser-store-BjhV_9wS.js";import{t as j}from"./files-tab-store-QlUCuW8b.js";var M=e(t(),1),ve=(e,t)=>{let[n,r]=M.useState(!1),[i,a]=M.useState(null),[o,s]=M.useState([]),[c,l]=M.useState(null),[u,d]=M.useState(!1),f=M.useRef(null),p=M.useRef(0),m=M.useRef(null),h=M.useRef(!0),g=M.useRef(new WeakSet),_=M.useRef(t);M.useEffect(()=>{_.current=t},[t]);let v=M.useCallback(()=>{let t=e;if(_.current?.queryParams){let n=Object.entries(_.current.queryParams).reduce((e,[t,n])=>(e[t]=String(n),e),{});t=`${e}?${new URLSearchParams(n).toString()}`}let n=new WebSocket(t);f.current=n,g.current.add(n),n.onopen=e=>{r(!0),l(null),d(!1),p.current=0,_.current?.onOpen?.(e)},n.onmessage=e=>{a(e.data),s(t=>[...t,e.data]),_.current?.onMessage?.(e)},n.onclose=e=>{let t=g.current.has(n);r(!1),e.code!==1e3&&(l(Error(`WebSocket closed with code ${e.code}: ${e.reason||`Connection closed unexpectedly`}`)),t&&_.current?.onError?.(e)),_.current?.onClose?.(e);let i=_.current?.reconnect?.enabled??!1,a=_.current?.reconnect?.maxAttempts??1/0;i&&t&&h.current&&p.current<a?(d(!0),p.current+=1,m.current=setTimeout(()=>{v()},3e3)):d(!1)},n.onerror=e=>{r(!1),_.current?.onError?.(e)}},[e]);M.useEffect(()=>(h.current=!0,p.current=0,e&&e.trim()!==``&&v(),()=>{if(h.current=!1,m.current&&=(clearTimeout(m.current),null),f.current){let{readyState:e}=f.current;g.current.delete(f.current),(e===WebSocket.CONNECTING||e===WebSocket.OPEN)&&f.current.close(),f.current=null}}),[e,v]);let y=M.useCallback(e=>{f.current?.readyState===WebSocket.OPEN&&f.current.send(e)},[]),b=M.useCallback(()=>{h.current=!1,d(!1),m.current&&=(clearTimeout(m.current),null),f.current&&(g.current.delete(f.current),f.current.close())},[]),ee=M.useCallback(()=>{if(h.current=!0,p.current=0,d(!0),l(null),m.current&&=(clearTimeout(m.current),null),f.current){let e=f.current;g.current.delete(e),f.current=null,(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN)&&e.close()}v()},[v]);return{isConnected:n,lastMessage:i,messages:o,error:c,socket:f.current,sendMessage:y,isReconnecting:u,attemptCount:p.current,disconnect:b,reconnect:ee}},N=`Unable to connect to server`,P={errorMessage:null,errorType:null},ye=y(e=>({...P,setErrorMessage:(t,n=`conversation`)=>e(()=>({errorMessage:t,errorType:n})),removeErrorMessage:()=>e(()=>({errorMessage:null,errorType:null})),clearConnectionError:()=>e(e=>e.errorType===`connection`?{errorMessage:null,errorType:null}:e)})),F=15e4,I={pendingMessages:[]},L=()=>`pending-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,be=y((e,t)=>({...I,enqueuePendingMessage:n=>{let r=L(),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`)},F),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(()=>({...I})),reassignPendingMessages:(t,n)=>e(e=>({pendingMessages:e.pendingMessages.map(e=>e.conversationId===t?{...e,conversationId:n}:e)}))})),R=new Set([`files`,`browser`,`vscode`,`terminal`,`planner`,`tasklist`]);function z(e){let t=x.getState();t.setSelectedTab(e),t.isRightPanelShown||(t.setHasRightPanelToggled(!0),t.setIsRightPanelShown(!0))}function B(e){return R.has(e)}function xe(e){switch(e.command){case`navigate_to_file`:case`show_preview`:z(`files`),e.path&&j.getState().setSelectedPath(e.path);return;case`open_tab`:e.tab&&B(e.tab)?z(e.tab):e.tab&&console.warn(`[canvas_ui] Ignoring open_tab with unknown tab: ${e.tab}`);return}}var V=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:[...e.entriesByConversation[t]??[],n]}}),H=y()(b(e=>({entriesByConversation:{},activeProfileByConversation:{},show:(t,n,r)=>e(e=>V(e,t,{id:S(),anchorEventId:n,profiles:r})),recordSwitch:(t,n,r)=>e(e=>({...V(e,t,{id:S(),anchorEventId:n,profiles:[],switchedTo:r}),activeProfileByConversation:{...e.activeProfileByConversation,[t]:r}})),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`})),Se=(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=i(r.path);n.invalidateQueries({queryKey:[`file_diff`,t,e]})}e.tool_name===`SwitchLLMTool`&&(n.invalidateQueries({queryKey:[`user`,`conversation`,t]}),H.getState().clearActiveProfile(t))},Ce=class{static async respondToConfirmation(e,t,n,r){let i=u().backend;return i.kind===`cloud`?v({backend:i,method:`POST`,hostOverride:l(t),path:`/api/conversations/${e}/events/respond_to_confirmation`,body:n,authMode:`session-api-key`,sessionApiKey:r}):new g(d({conversationUrl:t,sessionApiKey:r})).respondToConfirmation(e,n)}static async getEventCount(e,t,n){let r=u().backend;return r.kind===`cloud`?v({backend:r,method:`GET`,hostOverride:l(t),path:`/api/conversations/${e}/events/count`,authMode:`session-api-key`,sessionApiKey:n}):new g(d({conversationUrl:t,sessionApiKey:n})).getEventCount(e)}static async searchEvents(e,t,n,r={}){let i=u().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=>v({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)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 h(p({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 U({message:e,source:t,metadata:n={},posthog:r}){if(!r)return;let i=Error(e);r.captureException(i,{error_source:t||`unknown`,...n})}var we=()=>a({mutationKey:[`read-conversation-file`],mutationFn:async({conversationId:e,filePath:t})=>_.readConversationFile(e,t)}),Te=y(e=>({cost:null,max_budget_per_task:null,usage:null,setMetrics:t=>e(t)})),Ee=e=>{let{data:t}=te(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 Ce.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:1/0,gcTime:1800*1e3})},W=e=>{if(E(e))return!1;if(se(e)){let t=e.action.kind;return!(!t||t===`ExecuteBashAction`&&e.source===`user`||t===`PlanningFileEditorAction`||t===`SwitchLLMAction`)}return k(e)?!(e.observation.kind===`SwitchLLMObservation`&&!e.observation.is_error):!!(w(e)||T(e)||D(e)||fe(e))},G=e=>e.some(e=>e.source===`user`),K=()=>{let{uiEvents:e}=O.getState();for(let t=e.length-1;t>=0;--t){let n=e[t];if(W(n))return String(n.id)}return null};function De(e,t,n=K()){H.getState().recordSwitch(e,n,t)}var Oe=o(),ke=(0,M.createContext)(void 0);function Ae(e){return e.llm_message.content.filter(e=>e.type===`text`).map(e=>e.text).join(``)}function je({children:e,conversationId:t,conversationUrl:i,sessionApiKey:a,subConversations:o,subConversationIds:c}){let[l,u]=(0,M.useState)(`CONNECTING`),[p,h]=(0,M.useState)(`CONNECTING`),_=M.useRef(!1),v=M.useRef(!1),y=m(),b=s(),S=O(e=>e.addEvent),te=O(e=>e.addEvents),w=O(e=>e.clearEventsForConversation),{setErrorMessage:D,removeErrorMessage:fe,clearConnectionError:k}=ye(),j=be(e=>e.consumeMatchingPendingMessage),{setExecutionStatus:P}=ne(),{appendInput:F,appendOutput:I}=_e(),L=A(e=>e.reset),[R,z]=(0,M.useState)(!0),[B,V]=(0,M.useState)(null),{setPlanContent:H}=x(),{mutate:W}=we(),G=(0,M.useRef)(0),K=(0,M.useRef)(null),je=e=>e?.toUpperCase().endsWith(`PLAN.MD`)??!1,q=(0,M.useCallback)(()=>{k()},[k]),J=(0,M.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};Te.getState().setMetrics(n)}},[]),{data:Y,isPending:X,isError:Me}=Ee(t),Ne=!!t&&X;(0,M.useLayoutEffect)(()=>{let e=t??null;O.getState().loadedConversationId!==e&&(w(e),L())},[t,w,L]),(0,M.useLayoutEffect)(()=>{if(!(!Y||Y.events.length===0)&&(te(Y.events),t))for(let e of Y.events)C(e)&&j(t,Ae(e))},[Y,te,t,j]);let Pe=(0,M.useMemo)(()=>{if(X)return null;let e=Y?.events??[],t=e[e.length-1];return!t||!(`timestamp`in t)||!t.timestamp?null:t.timestamp},[Y,X]),Fe=(0,M.useMemo)(()=>!t||!i||X&&!Me?null:f(t,i),[t,i,X,Me]),Z=(0,M.useMemo)(()=>{if(!o?.length)return null;let e=o[0];return!e?.id||!e.conversation_url?null:f(e.id,e.conversation_url)},[o]),Ie=(0,M.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,M.useEffect)(()=>{B!==null&&G.current>=B&&R&&z(!1)},[B,R,G]),(0,M.useEffect)(()=>{if(!R&&K.current){let{path:e,conversationId:t}=K.current;W({conversationId:t,filePath:e},{onSuccess:e=>{H(e)},onError:e=>{console.warn(`Failed to read conversation file:`,e)}}),K.current=null}},[R,W,H]),(0,M.useEffect)(()=>{_.current=!1,z(!!c?.length),V(null),G.current=0,K.current=null},[c]),(0,M.useEffect)(()=>{_.current=!1,v.current=!1,K.current=null},[t]);let Le=(0,M.useMemo)(()=>Ne||R,[Ne,R]),Re=(0,M.useCallback)(e=>{try{let i=JSON.parse(e.data);if(ue(i)){let e=!O.getState().eventIds.has(i.id)&&he(i)?i:null;if(S(i),ae(i)){let e=i;U({message:e.detail,source:`conversation`,metadata:{eventId:e.id,errorCode:e.code},posthog:y}),D(e.detail)}else q();if(T(i)&&U({message:i.error,source:`agent`,metadata:{eventId:i.id,toolName:i.tool_name,toolCallId:i.tool_call_id},posthog:y}),C(i)&&t&&(j(t,Ae(i)),ee(t,{draftMessage:null})),se(i)&&Se(i,t||`test-conversation-id`,b),E(i)&&(oe(i)&&P(i.value.execution_status),pe(i)&&P(i.value),re(i)&&J(i)),de(i)&&F(i.action.command),le(i)&&I(i.observation.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
2
|
-
`)),ce(i)){let{screenshot_data:e}=i.observation;if(e){let t=e.startsWith(`data:`)?e:`data:image/png;base64,${e}`;A.getState().setScreenshotSrc(t)}}ie(i)&&A.getState().setUrl(i.action.url),t&&e&&!e.observation.is_error&&(De(t,e.observation.profile_name),e.observation.active_model&&r(b,t,e.observation.active_model),n(b,t)),me(i)&&xe(i.action)}}catch(e){console.warn(`Failed to parse WebSocket message as JSON:`,e)}},[S,D,j,b,t,P,F,I,J,q,y]),ze=(0,M.useCallback)(e=>{try{let n=JSON.parse(e.data);if(R&&(G.current+=1,B!==null&&G.current>=B&&z(!1)),ue(n)){if(S({...n,isFromPlanningAgent:!0}),ae(n)){let e=n;U({message:e.detail,source:`planning_conversation`,metadata:{eventId:e.id,errorCode:e.code},posthog:y}),D(e.detail)}else q();if(T(n)&&U({message:n.error,source:`planning_agent`,metadata:{eventId:n.id,toolName:n.tool_name,toolCallId:n.tool_call_id},posthog:y}),C(n)&&t&&(j(t,Ae(n)),ee(t,{draftMessage:null})),se(n)&&Se(n,o?.[0]?.id||`test-conversation-id`,b),E(n)&&(oe(n)&&P(n.value.execution_status),pe(n)&&P(n.value),re(n)&&J(n)),de(n)&&F(n.action.command),le(n)&&I(n.observation.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
3
|
-
`)),ge(n)){let{path:e}=n.observation;if(je(e)){let t=o?.[0]?.id;t&&e&&(R?K.current={path:e,conversationId:t}:W({conversationId:t,filePath:e},{onSuccess:e=>{H(e)},onError:e=>{console.warn(`Failed to read conversation file:`,e)}}))}}}}catch(e){console.warn(`Failed to parse WebSocket message as JSON:`,e)}},[S,R,B,D,j,b,o,t,P,F,I,W,H,J,q,y]),Be=(0,M.useMemo)(()=>{let e=Pe?{resend_mode:`since`,after_timestamp:Pe}:{resend_mode:`all`};return a&&(e.session_api_key=a),{queryParams:e,reconnect:{enabled:!0},onOpen:()=>{u(`OPEN`),_.current=!0,k()},onClose:()=>{u(`CLOSED`)},onError:()=>{u(`CLOSED`),_.current&&D(N,`connection`)},onMessage:Re}},[Re,D,k,a,Pe]),Ve=(0,M.useMemo)(()=>{let e={resend_all:!0};a&&(e.session_api_key=a);let t=o?.[0];return{queryParams:e,reconnect:{enabled:!0},onOpen:async()=>{if(h(`OPEN`),v.current=!0,k(),t?.id&&t.conversation_url)try{let e=await Ce.getEventCount(t.id,t.conversation_url,t.session_api_key);V(e),e===0&&z(!1)}catch{z(!1)}},onClose:()=>{h(`CLOSED`)},onError:()=>{h(`CLOSED`),v.current&&D(N,`connection`)},onMessage:ze}},[ze,D,k,a,o]),{socket:Q,reconnect:He}=ve(Fe||``,Be),{socket:$,reconnect:Ue}=ve(Z||``,Ve),We=(0,M.useCallback)(()=>{if(fe(),x.getState().conversationMode===`plan`&&Z){Ue();return}He()},[Z,He,Ue,fe]),Ge=(0,M.useCallback)(async e=>{let n=x.getState().conversationMode===`plan`?$:Q;if(n?.readyState!==WebSocket.OPEN){if(!t){let e=Error(`No conversation ID available`);throw D(e.message),e}try{return await new g(d()).sendEvent(t,{role:`user`,content:e.content},{run:!0}),{queued:!0}}catch(e){throw D(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 D(e instanceof Error?e.message:`Failed to send message`),e}},[Q,$,D,t]);(0,M.useEffect)(()=>{Q&&Fe&&(()=>{switch(Q.readyState){case WebSocket.CONNECTING:u(`CONNECTING`);break;case WebSocket.OPEN:u(`OPEN`);break;case WebSocket.CLOSING:u(`CLOSING`);break;case WebSocket.CLOSED:u(`CLOSED`);break;default:u(`CLOSED`);break}})()},[Q,Fe]),(0,M.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 Ke=(0,M.useMemo)(()=>({connectionState:Ie,sendMessage:Ge,isLoadingHistory:Le,reconnect:We}),[Ie,Ge,Le,We]);return(0,Oe.jsx)(ke.Provider,{value:Ke,children:e})}var q=()=>(0,M.useContext)(ke)||null;export{G as a,Te as c,be as d,ye as f,K as i,Ce as l,q as n,W as o,N as p,De as r,Ee as s,je as t,H as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-BFRubm34.js";import{t as e}from"./react-CM_dJw1Z.js";import{o as t,t as n}from"./declaration-IA661TBv.js";import{t as r}from"./useTranslation-CbJtty1g.js";import{t as i}from"./utils-CVcuFUYj.js";import{t as a}from"./navigation-link-DXg4oo29.js";import{c as o,m as s}from"./use-cloud-current-user-id-e1Pk7NxQ.js";import{t as c}from"./skills-CCaEu1KQ.js";import{t as l}from"./sidebar-store-B76R2gP8.js";import{t as u}from"./use-breakpoint-2sN462wJ.js";import{t as d}from"./backend-synced-settings-badge-BwTawSCE.js";e();var f=t(),p=[{to:`/skills`,label:`Skills`,icon:(0,f.jsx)(c,{width:16,height:16,"aria-hidden":`true`}),end:!0},{to:`/mcp`,label:`MCP Servers`,icon:(0,f.jsx)(e=>(0,f.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,f.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M2.25 3H21.75L22.5 3.75V13.5H21V9H3V19.5H13.5V21H2.25L1.5 20.25V3.75L2.25 3ZM3 7.5H21V4.5H3V7.5ZM10.5 18V16.359C10.2451 16.2664 10.0074 16.132 9.7965 15.9615L8.379 16.77L7.629 15.48L9.0345 14.6595C8.98649 14.3881 8.98649 14.1104 9.0345 13.839L7.629 13.02L8.379 11.73L9.7965 12.54C10.023 12.36 10.2585 12.2265 10.5 12.141V10.5H12V12.141C12.2568 12.2293 12.4953 12.3641 12.7035 12.5385L14.121 11.73L14.871 13.02L13.4655 13.8405C13.5133 14.1114 13.5133 14.3886 13.4655 14.6595L14.871 15.48L14.121 16.77L12.7035 15.96C12.4903 16.1274 12.2531 16.2619 12 16.359V18H10.5ZM10.125 14.25C10.125 14.562 10.2345 14.8275 10.4535 15.0465C10.5568 15.1528 10.6807 15.2367 10.8177 15.2932C10.9547 15.3497 11.1018 15.3776 11.25 15.375C11.3982 15.3776 11.5453 15.3497 11.6823 15.2932C11.8193 15.2367 11.9432 15.1528 12.0465 15.0465C12.1528 14.9432 12.2367 14.8193 12.2932 14.6823C12.3497 14.5453 12.3776 14.3982 12.375 14.25C12.3776 14.1018 12.3497 13.9547 12.2932 13.8177C12.2367 13.6807 12.1528 13.5568 12.0465 13.4535C11.9432 13.3472 11.8193 13.2633 11.6823 13.2068C11.5453 13.1503 11.3982 13.1224 11.25 13.125C11.1018 13.1224 10.9547 13.1503 10.8177 13.2068C10.6807 13.2633 10.5568 13.3472 10.4535 13.4535C10.3472 13.5568 10.2633 13.6807 10.2068 13.8177C10.1503 13.9547 10.1224 14.1018 10.125 14.25ZM18.126 22.5V20.859C17.8711 20.7663 17.6334 20.632 17.4225 20.4615L16.005 21.27L15.255 19.98L16.662 19.1595C16.614 18.8881 16.614 18.6104 16.662 18.339L15.255 17.52L16.005 16.23L17.4225 17.04C17.649 16.86 17.8845 16.7265 18.1275 16.641V15H19.6275V16.641C19.8837 16.7297 20.1216 16.8644 20.3295 17.0385L21.747 16.23L22.497 17.52L21.0915 18.3405C21.1396 18.6114 21.1396 18.8886 21.0915 19.1595L22.497 19.98L21.747 21.27L20.3295 20.46C20.1163 20.6275 19.8791 20.762 19.626 20.859V22.5H18.126ZM17.751 18.75C17.751 19.062 17.8605 19.3275 18.0795 19.5465C18.1828 19.6528 18.3067 19.7367 18.4437 19.7932C18.5807 19.8497 18.7278 19.8776 18.876 19.875C19.0242 19.8776 19.1713 19.8497 19.3083 19.7932C19.4453 19.7367 19.5692 19.6528 19.6725 19.5465C19.779 19.4434 19.8633 19.3195 19.9201 19.1825C19.9768 19.0455 20.0049 18.8983 20.0025 18.75C20.0049 18.6017 19.9768 18.4545 19.9201 18.3175C19.8633 18.1805 19.779 18.0566 19.6725 17.9535C19.5694 17.8474 19.4457 17.7636 19.309 17.7071C19.1722 17.6506 19.0254 17.6226 18.8775 17.625C18.7291 17.6222 18.5817 17.65 18.4444 17.7065C18.3072 17.763 18.183 17.847 18.0795 17.9535C17.9732 18.0568 17.8893 18.1807 17.8328 18.3177C17.7763 18.4547 17.7484 18.6018 17.751 18.75Z`,fill:`currentColor`})}),{width:16,height:16}),end:!0},{to:`/plugins`,label:`Plugins`,icon:(0,f.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,width:16,height:16,"aria-hidden":`true`,children:[(0,f.jsx)(`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}),(0,f.jsx)(`path`,{d:`m3.3 7 8.7 5 8.7-5`}),(0,f.jsx)(`path`,{d:`M12 22V12`})]}),end:!0,comingSoon:!0}];function m(){let{t:e}=r(`openhands`),t=l(e=>e.collapsed),c=u(1023),m=u(767);return!t&&c&&!m?null:(0,f.jsxs)(`aside`,{"data-testid":`extensions-navbar-desktop`,className:`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start`,children:[(0,f.jsx)(`span`,{className:`px-2 text-sm font-normal text-white`,children:e(n.NAV$CUSTOMIZE)}),(0,f.jsx)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:p.map(t=>{let r=(0,f.jsx)(`span`,{className:`shrink-0 flex items-center justify-center`,children:t.icon}),c=(0,f.jsx)(`span`,{className:`truncate`,children:t.label}),l=t.comingSoon&&(0,f.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]`,children:e(n.NAV$COMING_SOON)});return(0,f.jsxs)(a,{to:t.to,end:t.end,"data-testid":`sidebar-extensions-${t.to}`,className:({isActive:e})=>i(s(),`truncate`,e?o.active:o.idle),children:[r,c,l]},t.to)})}),(0,f.jsx)(`div`,{className:`px-2 pt-3`,children:(0,f.jsx)(d,{})})]})}export{m as n,p as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{L as n,k as r}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~cnj3raoq-DTEXlLSB.js";import{o as i,t as a}from"./declaration-IA661TBv.js";import{r as o}from"./recommended-automations-launcher-B01jchhe.js";import{t as s}from"./useTranslation-CbJtty1g.js";import{t as c}from"./vendor~root-layout~home~conversation-panel~conversation-Cg0nXqVs.js";import{a as l}from"./vendor~root-layout~home~mcp~automations-list-BTTZ58Mb.js";import{a as u,c as d,d as f,i as p,l as m,n as h,o as g,r as _,s as v,t as y,u as b}from"./onboarding-DCL9stdH.js";import{a as x,n as S,t as C}from"./custom-toast-handlers-fgD4IYsu.js";import{t as w}from"./utils-CVcuFUYj.js";import{n as T}from"./active-backend-context-CQTk4wD8.js";import{t as E}from"./modal-backdrop-B1si6TUd.js";import{n as D}from"./modal-body-2Po2nl1e.js";import{r as O}from"./base-modal-Ba5WcNb6.js";import{a as k,g as A,o as j,p as M,t as N}from"./brand-button-BoiPxAGm.js";import{t as P}from"./use-config-DSzkljTq.js";import{n as F}from"./navigation-context-CszaA-CJ.js";import{t as I}from"./styled-tooltip-DEr7oa0m.js";import{i as L,n as R}from"./dropdown-classes-lT1LUsbO.js";import{c as z,f as B,l as V,r as H}from"./chat-send-button-06dIuWXm.js";import{t as U}from"./conversation-store-kHcewy1E.js";import{t as W}from"./modal-close-button-BCvw9IUN.js";import{r as ee}from"./use-settings-Clf0Y_P3.js";import{t as te}from"./use-llm-profiles-BhZRf-NX.js";import{t as G}from"./use-create-conversation-4iJytCT1.js";import{l as ne}from"./vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js";import{t as re}from"./folder-UGYUKpqb.js";import{r as K}from"./typography-U1gkzkXo.js";import{A as ie,F as q,I as J,M as Y,N as ae,a as oe,c as se,d as ce,f as le,i as ue,l as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,u as ve}from"./git-control-bar-branch-button-C1qmab0K.js";import{d as ye}from"./conversation-websocket-context-C2yKCqvj.js";import{r as be}from"./settings-utils-BCbzc6-u.js";var X=e(t(),1);async function Z(e){let{imagesToEmbed:t}=J(e.images,e.imagesMarkedUploadAsFile),n=await Promise.all(t.map(e=>Y(e)));ye.getState().enqueuePendingMessage({conversationId:e.conversationId,text:e.text,content:e.text,imageUrls:n,fileUrls:[]})}var Q=i();function xe(){let{t:e}=s(`openhands`);return(0,Q.jsx)(`div`,{className:`flex min-h-[80px] w-full items-center justify-center py-2`,children:(0,Q.jsx)(K.H1,{className:`w-full text-center leading-normal`,children:e(`HOME$LETS_START_BUILDING`)})})}function Se({kind:e,onClick:t,disabled:n=!1,disabledTooltip:r}){let{t:i}=s(`openhands`),o=e===`local`,c=i(o?a.HOME$OPEN_WORKSPACE:a.COMMON$OPEN_REPOSITORY),u=(0,Q.jsxs)(`button`,{type:`button`,"data-testid":o?`open-workspace-button`:`open-repository-button`,onClick:t,disabled:n,className:w(`flex flex-row items-center gap-2 rounded-full px-2.5 py-1 text-white`,k,M,A,n?`cursor-not-allowed opacity-50`:`cursor-pointer hover:bg-surface-raised`),children:[(0,Q.jsx)(`span`,{className:`flex h-4 w-4 shrink-0 items-center justify-center`,children:o?(0,Q.jsx)(l,{"aria-hidden":!0,className:`h-4 w-4`,strokeWidth:2}):(0,Q.jsx)(B,{width:16,height:16,className:`shrink-0`})}),(0,Q.jsx)(`span`,{className:`text-sm font-normal leading-5`,children:c})]});return r?(0,Q.jsx)(I,{content:r,placement:`top`,children:(0,Q.jsx)(`span`,{className:`inline-flex`,children:u})}):u}function Ce({workspaces:e,value:t,placeholder:n,className:r,disabled:i=!1,disabledTooltip:o,showManage:l,onChange:u,onAddClick:d,onManageClick:f}){let{t:p}=s(`openhands`),[m,h]=(0,X.useState)(t?.name??``),g=(0,X.useRef)(null),_=(0,X.useMemo)(()=>{let t=m.trim().toLowerCase();return t?e.filter(e=>e.name.toLowerCase().includes(t)||e.path.toLowerCase().includes(t)):e},[e,m]),v=(0,X.useCallback)(e=>{u(e),e&&h(e.name)},[u]),y=(0,X.useCallback)(()=>{v(null),h(``)},[v]),{isOpen:b,getToggleButtonProps:x,getMenuProps:S,getInputProps:C,highlightedIndex:T,getItemProps:E,selectedItem:D,closeMenu:O}=c({items:_,itemToString:e=>e?.name??``,selectedItem:t,onSelectedItemChange:({selectedItem:e})=>{v(e??null)},inputValue:m,stateReducer:(e,t)=>t.type===c.stateChangeTypes.InputClick&&e.isOpen?{...t.changes,isOpen:!0}:t.changes}),k=(e,t,n,r,i)=>(0,Q.jsx)(se,{item:e,index:t,isSelected:r?.id===e.id,getItemProps:i,getDisplayText:e=>e.name,getItemKey:e=>e.id},e.id),A=e=>(0,Q.jsx)(ge,{inputValue:e,searchMessage:p(a.HOME$NO_WORKSPACES),emptyMessage:p(a.HOME$NO_WORKSPACES),testId:`workspace-dropdown-empty`}),M=(0,X.useMemo)(()=>(0,Q.jsxs)(`div`,{className:L,children:[(0,Q.jsx)(`button`,{type:`button`,"data-testid":`add-workspaces-button`,className:w(R,`cursor-pointer`),onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.preventDefault(),e.stopPropagation(),O(),d()},children:p(a.HOME$ADD_WORKSPACES)}),(l??e.length>0)&&(0,Q.jsx)(`button`,{type:`button`,"data-testid":`manage-workspaces-button`,className:w(R,`cursor-pointer`),onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.preventDefault(),e.stopPropagation(),O(),f()},children:p(a.HOME$MANAGE_WORKSPACES)})]}),[d,f,p,O,e.length,l]),N=(0,Q.jsxs)(`div`,{className:w(`relative`,r),children:[(0,Q.jsxs)(`div`,{className:`group relative text-[var(--oh-muted)] hover:text-white`,children:[(0,Q.jsx)(`div`,{className:`absolute left-2 top-1/2 transform -translate-y-1/2 z-10`,children:(0,Q.jsx)(V,{width:16,height:16})}),(0,Q.jsx)(`input`,{...C({disabled:i,placeholder:n??p(a.HOME$WORKSPACE_PLACEHOLDER),className:w(j,`text-inherit shadow-none pl-7 pr-16 text-sm font-normal leading-5`,`placeholder:text-[var(--oh-muted)]`,`disabled:cursor-not-allowed disabled:opacity-60`),onChange:e=>{h(e.target.value)}}),"data-testid":`workspace-dropdown`}),(0,Q.jsxs)(`div`,{className:`absolute right-1 top-1/2 transform -translate-y-1/2 flex items-center`,children:[t&&(0,Q.jsx)(ve,{disabled:i,onClear:y}),(0,Q.jsx)(de,{isOpen:b,disabled:i,getToggleButtonProps:x})]})]}),(0,Q.jsx)(pe,{isOpen:b,filteredItems:_,inputValue:m,highlightedIndex:T,selectedItem:D,getMenuProps:S,getItemProps:E,menuRef:g,renderItem:k,renderEmptyState:A,stickyFooterItem:M,testId:`workspace-dropdown-menu`,itemKey:e=>e.id})]});return o?(0,Q.jsx)(I,{content:o,placement:`top`,children:(0,Q.jsx)(`span`,{className:`block`,children:N})}):N}function $({isLoadingSettings:e=!1,onConfirm:t}){let{t:n}=s(`openhands`),{navigate:r}=F(),{data:i,error:c}=v(),l=i?.workspaceParents??[],{mutate:h}=m(),{mutate:y}=b(),{mutate:x}=d(),{mutate:S}=f(),{workspaces:C,isLoading:w,isError:T,error:E}=g(),D=u(c??E,n),[O,k]=X.useState(null),[A,j]=X.useState(!1),[M,P]=X.useState(!1),{mutate:I,isPending:L,isSuccess:R}=G(),z=o(),B=L||R||z,V=l.length>0||!!D,H=null;D?H=D:w?H=n(a.HOME$LOADING):T&&(H=n(a.HOME$WORKSPACE_SCAN_ERROR));let U=!!D||e||w&&C.length===0;return(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[!t&&(0,Q.jsxs)(`div`,{className:`flex items-center gap-[10px] pb-4`,children:[(0,Q.jsx)(re,{width:24,height:24}),(0,Q.jsx)(`span`,{className:`leading-5 font-bold text-base text-white`,children:n(a.HOME$WORKSPACES_TAB)})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-[10px] pb-4`,children:[(0,Q.jsx)(Ce,{workspaces:C,value:O,placeholder:D?n(a.HOME$WORKSPACES_UNSUPPORTED_PLACEHOLDER):U?n(a.HOME$LOADING):void 0,disabled:U,disabledTooltip:D,showManage:C.length>0||l.length>0,onChange:k,onAddClick:()=>j(!0),onManageClick:()=>P(!0),className:`max-w-auto`}),V&&H&&(0,Q.jsx)(`p`,{className:`px-1 text-xs text-[var(--oh-text-secondary)]`,"data-testid":`workspace-status-message`,children:H})]}),(0,Q.jsx)(N,{testId:`workspace-launch-button`,variant:`primary`,type:`button`,isDisabled:!O||!t&&B||e,onClick:()=>{if(O){if(t){t(O);return}I({workingDir:O.path},{onSuccess:e=>r(`/conversations/${e.conversation_id}`)})}},className:t?`w-full`:`w-auto absolute bottom-5 left-5 right-5`,children:t?n(a.BUTTON$CONFIRM):B?n(a.HOME$LOADING):`Launch`}),(0,Q.jsx)(p,{isOpen:A,onClose:()=>j(!1),onAdd:e=>h(e),onAddParent:e=>x(e)}),(0,Q.jsx)(_,{isOpen:M,workspaces:C,workspaceParents:l,onClose:()=>P(!1),onRemove:e=>{O?.path===e&&k(null),y(e)},onRemoveParent:e=>{O?.parentPath===e&&k(null),S(e)}})]})}function we({isOpen:e,onClose:t,onConfirm:n}){let{t:r}=s(`openhands`),{isLoadingSettings:i}=z();return e?(0,Q.jsx)(E,{onClose:t,children:(0,Q.jsxs)(D,{width:`sm`,className:`relative items-start border border-[var(--oh-border)] !gap-4`,children:[(0,Q.jsx)(W,{onClose:t,testId:`close-open-workspace-dialog`}),(0,Q.jsx)(`div`,{className:`w-full pr-6`,children:(0,Q.jsx)(O,{title:r(a.HOME$OPEN_WORKSPACE)})}),(0,Q.jsx)(`div`,{className:`w-full`,"data-testid":`open-workspace-dialog-body`,children:(0,Q.jsx)($,{isLoadingSettings:i,onConfirm:e=>{n(e),t()}})})]})}):null}function Te({onRepoSelection:e,isLoadingSettings:t=!1,onConfirm:n}){let{navigate:r}=F(),[i,c]=X.useState(null),[l,u]=X.useState(null),[d,f]=X.useState(null),{providers:p}=z(),{addRecentRepository:m,setLastSelectedProvider:h,getLastSelectedProvider:g}=H(),{mutate:_,isPending:v,isSuccess:y}=G(),b=o(),{t:x}=s(`openhands`);X.useEffect(()=>{if(p.length!==0){if(p.length===1&&!d){f(p[0]);return}if(p.length>1&&!d){let e=g();e&&p.includes(e)&&f(e)}}},[p,d,g]);let S=v||y||b,C=t=>{t!==d&&(f(t),h(t),c(null),u(null),e?.(null))},w=X.useCallback(e=>{u(e)},[]);return(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[!n&&(0,Q.jsx)(`div`,{className:`flex items-center justify-between`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-[10px] pb-4`,children:[(0,Q.jsx)(B,{width:24,height:24}),(0,Q.jsx)(`span`,{className:`leading-5 font-bold text-base text-white`,children:x(a.COMMON$OPEN_REPOSITORY)})]})}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-[10px] pb-4`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`span`,{className:`text-sm text-white font-normal leading-[22px]`,children:x(a.HOME$SELECT_OR_INSERT_URL)}),p.length<=1?null:(0,Q.jsx)(oe,{providers:p,value:d,placeholder:`Select Provider`,className:`max-w-[500px]`,onChange:C,disabled:t})]}),(0,Q.jsx)(he,{provider:d||p[0],value:i?.id||null,repositoryName:i?.full_name||null,placeholder:`user/repo`,disabled:!d||t,onChange:t=>{t?(e?.(t),c(t)):(e?.(null),c(null),u(null))},className:`max-w-auto`}),(()=>{let e=i?.main_branch||null;return(0,Q.jsx)(ue,{repository:i?.full_name||null,provider:d||p[0],selectedBranch:l,onBranchSelect:w,defaultBranch:e,placeholder:`Select branch...`,className:`max-w-full`,disabled:!i||t})})()]}),(0,Q.jsx)(N,{testId:`repo-launch-button`,variant:`primary`,type:`button`,isDisabled:!i||!l||!n&&S||p.length>1&&!d||t,onClick:()=>{if(!(!i||!l)){if(m(i),n){n({repository:i,branch:l,provider:d});return}_({repository:{name:i.full_name||``,gitProvider:i.git_provider||`github`,branch:l.name||`main`}},{onSuccess:e=>r(`/conversations/${e.conversation_id}`)})}},className:`w-full`,children:n?x(a.BUTTON$CONFIRM):S?x(`HOME$LOADING`):`Launch`})]})}function Ee({isOpen:e,onClose:t,onConfirm:n}){let{t:r}=s(`openhands`),{isLoadingSettings:i}=z();return e?(0,Q.jsx)(E,{onClose:t,children:(0,Q.jsxs)(D,{width:`sm`,className:`relative items-start border border-[var(--oh-border)] !gap-4`,children:[(0,Q.jsx)(W,{onClose:t,testId:`close-open-repository-dialog`}),(0,Q.jsx)(`div`,{className:`w-full pr-6`,children:(0,Q.jsx)(O,{title:r(a.COMMON$OPEN_REPOSITORY)})}),(0,Q.jsx)(`div`,{className:`w-full`,"data-testid":`open-repository-dialog-body`,children:(0,Q.jsx)(Te,{isLoadingSettings:i,onConfirm:e=>{n(e),t()}})})]})}):null}function De({workspace:e,repository:t,branch:n,provider:r,onRepoClick:i}){let a=e?e.path.replace(/\/+$/,``).split(`/`).pop()||e.path:null;return(0,Q.jsxs)(`div`,{className:`flex flex-row gap-2.5 items-center flex-wrap`,"data-testid":`home-git-control-bar-preview`,children:[(0,Q.jsx)(fe,{selectedRepository:t?.full_name??null,gitProvider:r??null,workspaceName:a,onClick:i}),n?(0,Q.jsx)(_e,{selectedBranch:n.name,selectedRepository:t?.full_name??null,gitProvider:r??null}):null]})}function Oe(){let{t:e}=s(`openhands`),{backend:t}=T(),{navigate:n}=F(),r=t.kind===`local`,[i,c]=(0,X.useState)(!1),[l,d]=(0,X.useState)(null),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(null),[g,_]=(0,X.useState)(null),{mutate:y,isPending:b}=G(),w=o(),E=b||w,{images:D,files:O,imagesMarkedUploadAsFile:k,clearAllFiles:A}=U(),{handleUpload:j}=ce(),{error:M}=v({enabled:r}),N=r?u(M,e):null,P=r?!!l:!!f&&!!m,I=le(null,t=>{let i=t.trim(),o=D.length>0||O.length>0;if(!i&&!o||E)return;let s={images:[...D],files:[...O]},c={query:o?void 0:i||void 0};r&&l?c={...c,workingDir:l.path}:!r&&f&&m&&(c={...c,repository:{name:f.full_name,gitProvider:f.git_provider,branch:m.name}});let u=x.loading(e(a.HOME$CREATING_CONVERSATION),C);y(c,{onSuccess:async t=>{x.dismiss(u);try{sessionStorage.removeItem(q)}catch{}let a=t.conversation_id,c=a.startsWith(`task-`);if(o)if(!r||c){let e=t.task_id??(c?a.slice(5):null);if(!e){S(null);return}ae(e,{content:i,images:s.images,files:s.files,imagesMarkedUploadAsFile:[...k]}),A(),await Z({conversationId:a,text:i,images:s.images,imagesMarkedUploadAsFile:k}),n(`/conversations/${a}`);return}else try{await ie({conversationId:a,content:i,images:s.images,files:s.files,imagesMarkedUploadAsFile:k,t:e}),A()}catch(e){S(e instanceof Error?e.message:null);return}c&&i&&await Z({conversationId:a,text:i,images:[],imagesMarkedUploadAsFile:[]}),n(`/conversations/${a}`)},onError:e=>{x.dismiss(u),S(e instanceof Error?e.message:null)}})});return(0,Q.jsxs)(`div`,{"data-testid":`home-chat-launcher`,className:`flex w-full max-w-[800px] flex-col gap-4 md:px-4`,children:[(0,Q.jsx)(`div`,{className:`flex w-full justify-center`,children:(0,Q.jsx)(xe,{})}),(0,Q.jsx)(`div`,{className:`w-full`,children:(0,Q.jsx)(me,{onSubmit:I,onFilesPaste:j,disabled:E})}),(0,Q.jsx)(`div`,{className:`flex justify-start`,children:P?(0,Q.jsx)(De,{workspace:l,repository:f,branch:m,provider:g,onRepoClick:()=>c(!0)}):(0,Q.jsx)(Se,{kind:r?`local`:`cloud`,onClick:()=>c(!0),disabled:E||!!N,disabledTooltip:N})}),r?(0,Q.jsx)(we,{isOpen:i,onClose:()=>c(!1),onConfirm:e=>{d(e),p(null),h(null),_(null)}}):(0,Q.jsx)(Ee,{isOpen:i,onClose:()=>c(!1),onConfirm:({repository:e,branch:t,provider:n})=>{p(e),h(t),_(n??e.git_provider),d(null)}})]})}function ke(){let{data:e,isLoading:t,isError:n}=ee(),{data:r,isLoading:i,isError:a}=P(),{data:o,isLoading:s,isError:c}=te(),l=e?.agent_settings?.agent_kind===`acp`,u=e?.llm_api_key_set===!0,d=o?.profiles.find(e=>e.name===o.active_profile)?.api_key_set===!0,f=be(`/settings/llm`,r?.feature_flags);return{isConfigured:l||u||d||f,isLoading:t||n&&!e||i||a&&!r||s||c&&!o}}function Ae(){let{t:e}=s(`openhands`),{navigate:t}=F(),{isConfigured:n,isLoading:r}=ke();return r||n?null:(0,Q.jsxs)(`div`,{"data-testid":`home-llm-not-configured-banner`,role:`alert`,className:`bg-base border border-primary text-white p-4 rounded flex flex-row items-center justify-between gap-3 mt-3`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`div`,{className:`flex-shrink-0`,children:(0,Q.jsx)(ne,{className:`text-primary align-middle`})}),(0,Q.jsx)(K.Text,{className:`ml-3 text-sm font-medium`,children:e(a.HOME$LLM_NOT_CONFIGURED_MESSAGE)})]}),(0,Q.jsx)(N,{testId:`home-llm-not-configured-action`,type:`button`,variant:`primary`,onClick:()=>t(`/settings/llm`),children:e(a.HOME$LLM_NOT_CONFIGURED_ACTION)})]})}function je(){let e=h(r().search);return(0,Q.jsxs)(`div`,{"data-testid":`home-screen`,className:`custom-scrollbar-always flex h-full flex-col overflow-y-auto rounded-xl bg-transparent px-4 md:px-0 lg:px-[42px]`,children:[(0,Q.jsx)(Ae,{}),(0,Q.jsx)(`div`,{className:`flex flex-1 min-h-0 flex-col items-center justify-center`,children:(0,Q.jsx)(Oe,{})}),e?null:(0,Q.jsx)(y,{})]})}var Me=n(je);export{Me as default};
|