openpond 0.2.46 → 0.2.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/app-server.d.ts +96 -1
  2. package/dist/app-server.js +1 -1
  3. package/dist/chunks/{actions-command-I3NI75P2.js → actions-command-DSO6YOEE.js} +1 -1
  4. package/dist/chunks/{app-layer-B3SMVO4B.js → app-layer-RRFI27N4.js} +1 -1
  5. package/dist/chunks/app-server-runtime-3KFJJUJH.js +2 -0
  6. package/dist/chunks/{apps-OA2VX34V.js → apps-NELJL377.js} +1 -1
  7. package/dist/chunks/{chunk-4UTIEH5H.js → chunk-2SPZYBDN.js} +1 -1
  8. package/dist/chunks/{chunk-JBHAU7PH.js → chunk-36YNUUZL.js} +137 -137
  9. package/dist/chunks/chunk-3HBCQNRN.js +2 -0
  10. package/dist/chunks/chunk-4UTBLHFC.js +2 -0
  11. package/dist/chunks/{chunk-FOEUDMME.js → chunk-526PVA3V.js} +86 -86
  12. package/dist/chunks/{chunk-5OGRWWEH.js → chunk-6MH55NGW.js} +1 -1
  13. package/dist/chunks/{chunk-YSYXIJ46.js → chunk-7QEE4PBI.js} +1 -1
  14. package/dist/chunks/{chunk-F2AG46CV.js → chunk-7YR6CBNU.js} +1 -1
  15. package/dist/chunks/{chunk-HO5L2FUU.js → chunk-A2GVVXFV.js} +1 -1
  16. package/dist/chunks/{chunk-W4IL6TWB.js → chunk-BM7TU6NX.js} +115 -111
  17. package/dist/chunks/{chunk-HP2D3W2B.js → chunk-CNTGL5IX.js} +1 -1
  18. package/dist/chunks/{chunk-WWABOVRW.js → chunk-D7DA5G2U.js} +2 -2
  19. package/dist/chunks/{chunk-UWO34HP6.js → chunk-DALJMSJG.js} +2 -2
  20. package/dist/chunks/{chunk-33AO3P6X.js → chunk-DLZP22WV.js} +1 -1
  21. package/dist/chunks/{chunk-BKMGBIBT.js → chunk-EMKZVP7Z.js} +1 -1
  22. package/dist/chunks/chunk-F7RCOLZD.js +2 -0
  23. package/dist/chunks/{chunk-ZJY2L43W.js → chunk-HA7EFTPF.js} +1 -1
  24. package/dist/chunks/{chunk-HK3WGUKK.js → chunk-IKWDL3RB.js} +1 -1
  25. package/dist/chunks/{chunk-ZC57DX6D.js → chunk-JDLAHVAJ.js} +1 -1
  26. package/dist/chunks/{chunk-D6MQTNJ3.js → chunk-K6S4TY5W.js} +6 -6
  27. package/dist/chunks/{chunk-IV7F74JJ.js → chunk-MASJQWA2.js} +1 -1
  28. package/dist/chunks/{chunk-XLDW5NN3.js → chunk-N3DEA6PG.js} +1 -1
  29. package/dist/chunks/{chunk-F5DUN73H.js → chunk-N5QNXMIS.js} +1 -1
  30. package/dist/chunks/{chunk-MCRA6ZGJ.js → chunk-NAZ26IZL.js} +1 -1
  31. package/dist/chunks/chunk-NNF6KCHD.js +3 -0
  32. package/dist/chunks/{chunk-USWZ3KUC.js → chunk-PA7XP42P.js} +1 -1
  33. package/dist/chunks/{chunk-BQNK2NMB.js → chunk-PJM2G7SG.js} +1 -1
  34. package/dist/chunks/chunk-PYABBF53.js +53 -0
  35. package/dist/chunks/{chunk-TYWBEJOA.js → chunk-Q4H3NUVW.js} +2 -2
  36. package/dist/chunks/chunk-QRWPEW3Z.js +24 -0
  37. package/dist/chunks/{chunk-LZSY5IM3.js → chunk-QXVIIM4T.js} +1 -1
  38. package/dist/chunks/{chunk-6SJZXZNA.js → chunk-R3XFY7VL.js} +1 -1
  39. package/dist/chunks/{chunk-EWS7MXTM.js → chunk-RLZPX4YP.js} +1 -1
  40. package/dist/chunks/{chunk-VW7D3DRM.js → chunk-SDEDAHV6.js} +72 -67
  41. package/dist/chunks/{chunk-BUFQKDAW.js → chunk-T5LE6R5S.js} +1 -1
  42. package/dist/chunks/{chunk-L4BYPZ4U.js → chunk-TGIB24K4.js} +1 -1
  43. package/dist/chunks/{chunk-KUKOZJIR.js → chunk-TT46OISU.js} +1 -1
  44. package/dist/chunks/{chunk-6WLJWRMF.js → chunk-UJ5EFSEC.js} +1 -1
  45. package/dist/chunks/{chunk-KE5RH6JA.js → chunk-WITSXYEW.js} +1 -1
  46. package/dist/chunks/chunk-WV2APYWG.js +2 -0
  47. package/dist/chunks/chunk-XBCIBAXD.js +4 -0
  48. package/dist/chunks/chunk-XDMUD4FW.js +5 -0
  49. package/dist/chunks/{chunk-DNXKIIV7.js → chunk-XM26DGML.js} +1 -1
  50. package/dist/chunks/{chunk-4VKNBADF.js → chunk-XON44M6V.js} +1 -1
  51. package/dist/chunks/{chunk-D6E7JBBQ.js → chunk-YBVIFIXN.js} +1 -1
  52. package/dist/chunks/{chunk-OGXSE57Z.js → chunk-YIB3J4RC.js} +1 -1
  53. package/dist/chunks/{chunk-H6W55CQG.js → chunk-YL6VFJ4P.js} +1 -1
  54. package/dist/chunks/cli-WPAYXAJX.js +2 -0
  55. package/dist/chunks/{configuration-command-MVZS625X.js → configuration-command-SA56RV5B.js} +1 -1
  56. package/dist/chunks/{connected-evidence-7LHUZ2UI.js → connected-evidence-IVSQZYIB.js} +1 -1
  57. package/dist/chunks/{continual-K5JNHNQH.js → continual-PKK2BOTB.js} +1 -1
  58. package/dist/chunks/core-commands-W5IGIITV.js +2 -0
  59. package/dist/chunks/{datasets-KDN2EXHE.js → datasets-KSO2UG6R.js} +1 -1
  60. package/dist/chunks/{desktop-test-WIOEKMPR.js → desktop-test-6HXFM7PO.js} +1 -1
  61. package/dist/chunks/{dist-JBE7DPFZ.js → dist-4HV2W6V4.js} +1 -1
  62. package/dist/chunks/{dist-3MTJ7VM6.js → dist-VDVI7KIO.js} +1 -1
  63. package/dist/chunks/{evaluation-coordination-NGYHL7HG.js → evaluation-coordination-MOFBXRXN.js} +1 -1
  64. package/dist/chunks/{experiment-improvements-2M7GRGWS.js → experiment-improvements-TDHM6NEA.js} +1 -1
  65. package/dist/chunks/{experiments-B6CRZ3GI.js → experiments-HFPDFD4I.js} +1 -1
  66. package/dist/chunks/{extension-RZTMK3ON.js → extension-R373LYIB.js} +1 -1
  67. package/dist/chunks/{help-EISFHH2F.js → help-PEFQDDTA.js} +1 -1
  68. package/dist/chunks/{hosted-experiment-improvement-6CHH65DX.js → hosted-experiment-improvement-T6Q7ASMI.js} +1 -1
  69. package/dist/chunks/hosted-harness-runtime-2R5QRZCG.js +2 -0
  70. package/dist/chunks/{hosted-profile-candidate-HYEISIAC.js → hosted-profile-candidate-TKOY3M4S.js} +1 -1
  71. package/dist/chunks/hosted-profile-compiler-VLBFIEWK.js +2 -0
  72. package/dist/chunks/{hosted-profile-evaluation-control-LV6YXOG7.js → hosted-profile-evaluation-control-7B3RAZU2.js} +1 -1
  73. package/dist/chunks/{hosted-profile-evaluation-inspection-A62UYFEP.js → hosted-profile-evaluation-inspection-3MB6MWO6.js} +1 -1
  74. package/dist/chunks/{hosted-profile-evaluation-preparation-OR4OLYEX.js → hosted-profile-evaluation-preparation-C7WEABZ5.js} +1 -1
  75. package/dist/chunks/{human-review-J6JGNRBR.js → human-review-HRGGACEM.js} +1 -1
  76. package/dist/chunks/import-RSAQ44GG.js +4 -0
  77. package/dist/chunks/{learning-REL6GGNA.js → learning-FNBEIAY6.js} +1 -1
  78. package/dist/chunks/{opchat-CUZUU2WM.js → opchat-I7ZWJ5XK.js} +1 -1
  79. package/dist/chunks/{organizations-VT27V4B2.js → organizations-LFCZIH7E.js} +1 -1
  80. package/dist/chunks/{profile-N2E5ASHQ.js → profile-EPIX5QVK.js} +1 -1
  81. package/dist/chunks/{project-agent-XMXOBJSC.js → project-agent-DGOPMECP.js} +1 -1
  82. package/dist/chunks/{sandbox-command-NC665ZZ5.js → sandbox-command-Q5F6VUOS.js} +1 -1
  83. package/dist/chunks/{sandbox-template-OTP6S3RU.js → sandbox-template-7GICPIKJ.js} +1 -1
  84. package/dist/chunks/{src-WM35IF4W.js → src-DH5AQ4Z7.js} +1 -1
  85. package/dist/chunks/src-R4TSYNTK.js +329 -0
  86. package/dist/chunks/{taskset-COAPMTT3.js → taskset-LUG3ZU6J.js} +1 -1
  87. package/dist/chunks/{teams-bot-ACWJ7PJP.js → teams-bot-Z6RJGHME.js} +1 -1
  88. package/dist/chunks/{training-4JUK7YQV.js → training-XHE6FVII.js} +1 -1
  89. package/dist/cli.js +1 -1
  90. package/dist/index.js +1 -1
  91. package/dist/web/agent-sources/SOURCES.md +11 -0
  92. package/dist/web/agent-sources/claude-code.svg +1 -0
  93. package/dist/web/agent-sources/codex.svg +1 -0
  94. package/dist/web/agent-sources/grok-build.svg +3 -0
  95. package/dist/web/agent-sources/hermes.png +0 -0
  96. package/dist/web/agent-sources/oh-my-pi.svg +11 -0
  97. package/dist/web/agent-sources/openclaw.svg +54 -0
  98. package/dist/web/agent-sources/opencode.svg +4 -0
  99. package/dist/web/agent-sources/pi.svg +6 -0
  100. package/dist/web/assets/App-BI-uOpnP.js +234 -0
  101. package/dist/web/assets/App-DkH8CeoI.css +1 -0
  102. package/dist/web/assets/{AppDialog-CaxeNfsu.js → AppDialog-1iGodoot.js} +1 -1
  103. package/dist/web/assets/{AppTerminalPanel-dtK0ZPer.js → AppTerminalPanel-udtBdWFn.js} +2 -2
  104. package/dist/web/assets/AppsView-BonAGiS8.css +1 -0
  105. package/dist/web/assets/AppsView-DhKsU4yi.js +1 -0
  106. package/dist/web/assets/BrowserSidebar-BnOyqIQT.js +1 -0
  107. package/dist/web/assets/{CartesianChart-Drfk6jTn.js → CartesianChart-C24DAywn.js} +1 -1
  108. package/dist/web/assets/{CollaborationTabs-Czh2noeb.js → CollaborationTabs-DgmOF5Fe.js} +1 -1
  109. package/dist/web/assets/{CommandMenu-D-M-xomh.js → CommandMenu-CUNGtHwS.js} +1 -1
  110. package/dist/web/assets/{CommunityView-BrdxUI5Z.js → CommunityView-CE7qeJnr.js} +1 -1
  111. package/dist/web/assets/{ComposerCreateImproveStrip-CJ8nkYJf.js → ComposerCreateImproveStrip-BixNsg2a.js} +1 -1
  112. package/dist/web/assets/{GetStartedView-u7Jw7YA1.js → GetStartedView-B8gCwmBX.js} +1 -1
  113. package/dist/web/assets/{HostedModelLearningReview-D0a2nwse.js → HostedModelLearningReview-CitgUNfC.js} +1 -1
  114. package/dist/web/assets/{HostedModelLearningSettings-CQQGyjxi.js → HostedModelLearningSettings-WUaqzNsa.js} +1 -1
  115. package/dist/web/assets/{LabModelVersionDetailPage-Cxlc4sSC.js → LabModelVersionDetailPage-Cx0kL69J.js} +1 -1
  116. package/dist/web/assets/{LabSkillSidebar-BnJkDb0c.js → LabSkillSidebar-DRggqZ1j.js} +1 -1
  117. package/dist/web/assets/LabsRoute-BujTZhqC.js +99 -0
  118. package/dist/web/assets/{MainChatThread-r_TYiTnW.js → MainChatThread-CyA_644R.js} +2 -2
  119. package/dist/web/assets/MainPane-LaEtxydD.js +19 -0
  120. package/dist/web/assets/{MarkdownText-BxPHz4je.js → MarkdownText-DJI5LwT0.js} +19 -19
  121. package/dist/web/assets/{NativeSkillSidebar-CCHK6kMG.js → NativeSkillSidebar-CkFpWxjd.js} +1 -1
  122. package/dist/web/assets/{NewExperienceSwitcher-CuKWTDZj.js → NewExperienceSwitcher-DXcRHHsu.js} +1 -1
  123. package/dist/web/assets/{NewProjectDialog-CS6sw2oD.js → NewProjectDialog-gDzX_ZIJ.js} +1 -1
  124. package/dist/web/assets/{OutputsPage-JDM5bfLJ.js → OutputsPage-J_k-_N82.js} +1 -1
  125. package/dist/web/assets/{ProjectsPage-B3zTBHOA.js → ProjectsPage-BsyZmvlg.js} +1 -1
  126. package/dist/web/assets/{RightChatPanelStack-L8S3yj1u.js → RightChatPanelStack-Bz8puMUB.js} +1 -1
  127. package/dist/web/assets/{RightSidebarHomePanel-BWJQKFUp.js → RightSidebarHomePanel-DmorYb6p.js} +1 -1
  128. package/dist/web/assets/ScheduledWorkPage-BFDzQUyL.js +1 -0
  129. package/dist/web/assets/SettingsView-BB7wCdbr.js +5 -0
  130. package/dist/web/assets/SettingsView-BnANbPLS.css +1 -0
  131. package/dist/web/assets/{TeamChatView-DakXCNQE.js → TeamChatView-CZ3b7rq2.js} +2 -2
  132. package/dist/web/assets/{TerminalOverlay-DaonK5C0.js → TerminalOverlay-Ck43Qri3.js} +1 -1
  133. package/dist/web/assets/{TrainingCreationPanel-CUvSsSwp.js → TrainingCreationPanel-ejqPZm3g.js} +1 -1
  134. package/dist/web/assets/{TrainingDraftPanel-DNivtVwd.js → TrainingDraftPanel-Cy2AQxxL.js} +1 -1
  135. package/dist/web/assets/{UsageSettingsSection-rbmuoPoE.js → UsageSettingsSection-B7nyMItm.js} +1 -1
  136. package/dist/web/assets/{WorkSidebarPanel-DrYt9xzv.js → WorkSidebarPanel-BfjAc097.js} +1 -1
  137. package/dist/web/assets/{WorkspaceDiffPanel-CThoTqe4.js → WorkspaceDiffPanel-D9hAV8l7.js} +5 -5
  138. package/dist/web/assets/{WorkspaceEnvironmentMenu-DeODKxvW.js → WorkspaceEnvironmentMenu-B-K9XgFB.js} +3 -3
  139. package/dist/web/assets/{WorkspaceGitDialogs-CBarJYF-.js → WorkspaceGitDialogs-BJVFx_L3.js} +1 -1
  140. package/dist/web/assets/{WorkspaceMonacoEditor-Hmu5m_sO.js → WorkspaceMonacoEditor-p-FWMXoZ.js} +3 -3
  141. package/dist/web/assets/{arrow-up-right-BV2IHfb9.js → arrow-up-right-CFGI2YSt.js} +1 -1
  142. package/dist/web/assets/{chunk-YTGRET2L-PKzEfYnf.js → chunk-UHVJOMWN-BAlur2vw.js} +1 -1
  143. package/dist/web/assets/{clipboard-DDIvAWKp.js → clipboard-DIIxBort.js} +1 -1
  144. package/dist/web/assets/{cloud-upload-Dv6kFnfC.js → cloud-upload-BaQFNCTp.js} +1 -1
  145. package/dist/web/assets/{cssMode-BK0jFqWW.js → cssMode-6LOkSggB.js} +1 -1
  146. package/dist/web/assets/{folder-open-B9ixJQJX.js → folder-open-DZSxfPtr.js} +1 -1
  147. package/dist/web/assets/{folder-plus-DqSKvtNB.js → folder-plus-21v4D_Vx.js} +1 -1
  148. package/dist/web/assets/{git-commit-horizontal-C1lQvfxe.js → git-commit-horizontal-CgGixL64.js} +1 -1
  149. package/dist/web/assets/{htmlMode-CCV301b6.js → htmlMode-B5uRraNd.js} +1 -1
  150. package/dist/web/assets/index-DJcUXSsN.css +1 -0
  151. package/dist/web/assets/{index-DIaKfM8a.js → index-DOMrqhcz.js} +2 -2
  152. package/dist/web/assets/{info-BEvaynAD.js → info-BGTcmow7.js} +1 -1
  153. package/dist/web/assets/{jsonMode-Co4pyN4F.js → jsonMode-D3m8N4Gi.js} +1 -1
  154. package/dist/web/assets/{lspLanguageFeatures-CSU0G5da.js → lspLanguageFeatures-DoyipLsB.js} +1 -1
  155. package/dist/web/assets/{minimize-2-DT8t8wwP.js → minimize-2-B01qSko4.js} +1 -1
  156. package/dist/web/assets/{monaco.contribution-Cr0AaHCD.js → monaco.contribution--U8v3jpa.js} +2 -2
  157. package/dist/web/assets/{monaco.contribution-DSBAb_PC.js → monaco.contribution-BJyfaGX2.js} +2 -2
  158. package/dist/web/assets/{monaco.contribution-CBwGIQY1.js → monaco.contribution-Bc22foTx.js} +2 -2
  159. package/dist/web/assets/{monaco.contribution-DUZrs1D-.js → monaco.contribution-DuRhJ6zU.js} +2 -2
  160. package/dist/web/assets/{monitor-DGqnfsK9.js → monitor-eZP8ZTHe.js} +1 -1
  161. package/dist/web/assets/{play-C1XWyKh6.js → play-CGsWFR_B.js} +1 -1
  162. package/dist/web/assets/{python-Z1foxLdf.js → python-BNrLZWud.js} +1 -1
  163. package/dist/web/assets/{save-CX2kF74j.js → save-BLgjrccP.js} +1 -1
  164. package/dist/web/assets/{square-DMkXeYeV.js → square-CI1qNtvE.js} +1 -1
  165. package/dist/web/assets/{toggleHighContrast-CRMVp779.js → toggleHighContrast-B_GcTCnw.js} +1 -1
  166. package/dist/web/assets/{tsMode-Czu8YAqh.js → tsMode-CmruH_ys.js} +1 -1
  167. package/dist/web/assets/{upload-giKOPnl1.js → upload-DnlgGS2x.js} +1 -1
  168. package/dist/web/assets/useLocalAgentSchedules-BBhGUfK-.js +1 -0
  169. package/dist/web/assets/useProviderSettings-Bw-csWbH.css +1 -0
  170. package/dist/web/assets/useProviderSettings-DfhdkKdC.js +5 -0
  171. package/dist/web/assets/{useSessionTurnCache-CUYFsu_W.js → useSessionTurnCache-BwscKl5i.js} +1 -1
  172. package/dist/web/assets/{wifi-off-DbDXaV1N.js → wifi-off-Dz-4EDCc.js} +1 -1
  173. package/dist/web/assets/{workers-Cno4XklJ.js → workers-Bi9u46cp.js} +1 -1
  174. package/dist/web/assets/{yaml-C28t_C6h.js → yaml-DVTkiRnh.js} +1 -1
  175. package/dist/web/index.html +2 -2
  176. package/package.json +1 -1
  177. package/dist/chunks/app-server-runtime-FL2CHQU2.js +0 -2
  178. package/dist/chunks/chunk-5ZZM3TUN.js +0 -24
  179. package/dist/chunks/chunk-6JBWHR6T.js +0 -5
  180. package/dist/chunks/chunk-FKCWOASO.js +0 -49
  181. package/dist/chunks/chunk-ICZEOMPO.js +0 -2
  182. package/dist/chunks/chunk-JO7GRBOG.js +0 -2
  183. package/dist/chunks/chunk-M7PBDRKC.js +0 -2
  184. package/dist/chunks/chunk-P653BXMY.js +0 -3
  185. package/dist/chunks/chunk-PMZH2TKS.js +0 -4
  186. package/dist/chunks/chunk-WVNN3RB2.js +0 -2
  187. package/dist/chunks/cli-5QR7QNQJ.js +0 -2
  188. package/dist/chunks/core-commands-J2SJM5I5.js +0 -2
  189. package/dist/chunks/hosted-harness-runtime-PAYMAXH7.js +0 -2
  190. package/dist/chunks/hosted-profile-compiler-KQREWJA5.js +0 -2
  191. package/dist/chunks/import-YHSX6SBZ.js +0 -4
  192. package/dist/chunks/src-TNWF3IC5.js +0 -329
  193. package/dist/web/assets/App-CdDQ-lXE.css +0 -1
  194. package/dist/web/assets/App-D2f8_mGk.js +0 -235
  195. package/dist/web/assets/AppsView-CzbB5pXp.css +0 -1
  196. package/dist/web/assets/AppsView-DwK1UBJP.js +0 -1
  197. package/dist/web/assets/BrowserSidebar-Cj9VnkgU.js +0 -1
  198. package/dist/web/assets/LabsRoute-hHwZNbqN.js +0 -99
  199. package/dist/web/assets/MainPane-DJcd4tPk.js +0 -19
  200. package/dist/web/assets/ScheduledWorkPage-qX12p4B0.js +0 -1
  201. package/dist/web/assets/SettingsView-0KMs-r2I.js +0 -9
  202. package/dist/web/assets/SettingsView-CVsuQeCZ.css +0 -1
  203. package/dist/web/assets/index-1cMIFBxZ.css +0 -1
  204. package/dist/web/assets/useLocalAgentSchedules-BHxWmOeC.js +0 -1
@@ -1,4 +1,4 @@
1
- import{r as m,j as t}from"./index-DIaKfM8a.js";import{c as Mt,bw as Ye,bx as qt,by as Ut,X as ut,bz as we,aA as Lt,bA as Ne,bg as Ot,aj as Je,L as Ft,ah as at,I as Bt,bB as Dt,ba as Gt,a_ as Tt,bC as kt,bD as st,x as O,b6 as Ht,al as Vt,S as Xt,ai as Ke,C as Jt,as as Kt,h as Qt}from"./App-D2f8_mGk.js";import{I as Zt}from"./info-BEvaynAD.js";import{M as Yt}from"./monitor-DGqnfsK9.js";import{P as $e}from"./play-C1XWyKh6.js";import{G as Wt}from"./git-commit-horizontal-C1lQvfxe.js";import{S as en}from"./square-DMkXeYeV.js";import{U as rt}from"./upload-giKOPnl1.js";const tn=[["path",{d:"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9",key:"1hayfq"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"15ts47"}]],nn=Mt("hammer",tn);function an(e){const n=te(e?.data),a=te(n.preview);return(typeof a.url=="string"?a.url.trim():"")||null}function sn(){const e=window.open("","_blank");return e?(e.document.write('<!doctype html><title>Opening sandbox preview</title><body style="margin:0;background:#05070a;color:#f5f5f4;font:14px system-ui,sans-serif;display:grid;place-items:center;height:100vh;">Opening sandbox preview...</body>'),e.document.close(),e):null}function ye(e,n){if(!n){e?.close();return}if(e){e.opener=null,e.location.href=n;return}window.open(n,"_blank","noopener,noreferrer")}function mt(e){const n=rn(e),a=ln(te(e?.resources)),i=te(te(e?.inputs).schema),g=te(i.properties),u=new Set(bt(i.required)),l=[],x=[];for(const[p,N]of Object.entries(g)){const c=te(N),U=te(c["x-openpond-upload"]??c.xOpenPondUpload),I=typeof c.type=="string"?c.type:"string",H=te(c.items),z=pn(c,U),v=c.format==="file"||U.enabled===!0||I==="array"&&H.format==="file",M=typeof c.title=="string"&&c.title.trim()?c.title.trim():xn(p);if(v){x.push({name:p,label:M,required:u.has(p),multiple:I==="array"||U.multiple===!0,accept:gn(U,c),targetPath:bn(U,p),targetNames:z});continue}(I==="string"||I==="number"||I==="integer"||I==="boolean")&&l.push({name:p,label:M,required:u.has(p),type:I,defaultValue:typeof c.default=="string"||typeof c.default=="number"||typeof c.default=="boolean"?String(c.default):"",targetNames:z})}return{entrypoints:n,scalarInputs:l,fileInputs:x,envInputs:cn(e),resources:a,volumes:on(e,x),schedules:dn(e)}}function Fe(e,n){const a=n.trim();return e.filter(i=>!i.targetNames||i.targetNames.length===0?!0:i.targetNames.includes(a))}function rn(e){return e?Ye(e).flatMap(n=>{if(n.kind==="action")return[];const a=n.name.trim(),i=n.command.trim(),g=Be(n.timeoutSeconds),u=n.ports.flatMap(l=>{const x=Be(l.port);return x?[{port:x,label:typeof l.label=="string"&&l.label.trim()?l.label.trim():"web",access:l.access==="public"?"public":"private",path:typeof l.path=="string"&&l.path.trim()?l.path.trim():"/"}]:[]});return a&&i?[{name:a,command:i,timeoutSeconds:g,ports:u}]:[]}):[]}function ln(e){return{cpu:Qe(e.cpu)??1,memoryGb:Qe(e.memoryGb)??1,diskGb:Qe(e.diskGb)??8}}function on(e,n){const a=Array.isArray(e?.volumes)?e.volumes:[];if(a.length>0)return a.map((u,l)=>{const x=l===0?"volume":`volume-${l+1}`,p=typeof u.name=="string"&&u.name.trim()?u.name.trim():x;return{name:p,mountPath:typeof u.mountPath=="string"&&u.mountPath.trim()?u.mountPath.trim():`/workspace/volumes/${p}`,...Be(u.storageGb)?{storageGb:Be(u.storageGb)??void 0}:{},deleteOnSandboxDelete:u.deleteOnSandboxDelete===!0}});const i=n.find(u=>u.targetPath.startsWith("volumes/"));if(!i)return[];const[,g="volume"]=i.targetPath.split("/");return[{name:g,mountPath:`/workspace/volumes/${g}`,storageGb:8,deleteOnSandboxDelete:!1}]}function cn(e){return(Array.isArray(e?.inputs.env)?e.inputs.env:[]).flatMap(a=>{const i=typeof a.name=="string"?a.name.trim():"";return i?[{name:i,required:a.required===!0,secret:a.secret!==!1,description:typeof a.description=="string"?a.description.trim():""}]:[]})}function dn(e){return e?.schedules?.length?e.schedules.flatMap(n=>{const a=typeof n.name=="string"?n.name.trim():"",i=un(n);if(!a||!i.scheduleExpression)return[];try{return[{name:a,...typeof n.description=="string"&&n.description.trim()?{description:n.description.trim()}:{},enabled:!1,...i,...typeof n.timezone=="string"&&n.timezone.trim()?{timezone:n.timezone.trim()}:{},...typeof n.startAt=="string"&&n.startAt.trim()?{startAt:n.startAt.trim()}:{},...typeof n.endAt=="string"&&n.endAt.trim()?{endAt:n.endAt.trim()}:{},...typeof n.maxRuns=="number"&&Number.isInteger(n.maxRuns)&&n.maxRuns>0?{maxRuns:n.maxRuns}:{},runtimePolicy:n.runtimePolicy,target:mn(e,n),...n.budget?{budget:n.budget}:{},...n.resources?{resources:n.resources}:{},...n.quotas?{quotas:n.quotas}:{},...n.lifecycle?{lifecycle:n.lifecycle}:{},...n.retentionPolicy?{retentionPolicy:n.retentionPolicy}:{},...n.env?{env:n.env}:{},...n.integrationLeases?{integrationLeases:n.integrationLeases}:{},metadata:{...te(n.metadata),manifestScheduleName:a,source:"openpond-app-sandbox-template-start"}}]}catch{return[]}}):[]}function un(e){return e.scheduleExpression?{scheduleType:e.scheduleType??"cron",scheduleExpression:e.scheduleExpression}:e.rate?{scheduleType:"rate",scheduleExpression:/^rate\(/i.test(e.rate)?e.rate:`rate(${e.rate})`}:e.once?{scheduleType:"once",scheduleExpression:/^at\(/i.test(e.once)?e.once:`at(${e.once})`}:{scheduleType:"cron",scheduleExpression:e.cron??""}}function mn(e,n){const a=n.command??n.target?.command??null;if(a)return{kind:"command",command:a,requiresStart:n.requiresStart??n.target?.requiresStart??!1};const i=n.target?.kind??"action";if(i==="start")return{kind:"command",command:e.start.command,requiresStart:n.requiresStart??n.target?.requiresStart??e.start.requiresStart??!1};if(i==="service"){const l=n.target?.name??"",x=e.services.find(p=>p.name===l);if(!x)throw new Error("schedule_service_target_missing");return{kind:"command",command:x.command,requiresStart:n.requiresStart??n.target?.requiresStart??x.requiresStart??!1}}const g=n.actionName??n.action??n.target?.actionName??(n.target?.kind==="action"?n.target?.name:void 0),u=e.actions.find(l=>l.name===g);if(!u)throw new Error("schedule_action_target_missing");return{kind:"command",command:u.command,requiresStart:n.requiresStart??n.target?.requiresStart??u.requiresStart??!1}}function pt(e,n){return e.flatMap(a=>{const i=(n[a.name]??"").trim();return i?[{name:a.name,secretRef:i}]:[]})}function gt(e,n){const a={};for(const i of e){const g=n[i.name]??"";if(!(!g.trim()&&!i.required))if(i.type==="boolean")a[i.name]=g==="true";else if(i.type==="number"||i.type==="integer"){const u=Number(g);Number.isFinite(u)&&(a[i.name]=i.type==="integer"?Math.trunc(u):u)}else a[i.name]=g}return a}function pn(e,n){const a=e["x-openpond-targets"]??e.xOpenPondTargets??n.targets??n.actions,i=bt(a).map(g=>g.trim()).filter(Boolean);return i.length>0?[...new Set(i)]:null}function gn(e,n){return typeof e.accept=="string"?e.accept.trim():Array.isArray(e.accept)?e.accept.filter(a=>typeof a=="string").join(","):typeof n.accept=="string"?n.accept.trim():""}function bn(e,n){return(typeof e.targetPath=="string"&&e.targetPath.trim()?e.targetPath.trim():typeof e.path=="string"&&e.path.trim()?e.path.trim():`uploads/${n}`).replace(/^\/+/,"").replace(/^workspace\//,"").replace(/\/+$/,"")}function Qe(e){const n=Number(e);return Number.isFinite(n)&&n>0?n:null}function Be(e){const n=Number(e);return Number.isInteger(n)&&n>0?n:null}function fn(e,n){return[n,...e.slice(1)]}function bt(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"):[]}function xn(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase())}function te(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function hn({busy:e,defaultRepoUrl:n,projectName:a,commitBeforeCreate:i,templateManifest:g,uploadBeforeCreate:u,onClose:l,onSubmit:x}){const p=m.useMemo(()=>mt(g),[g]),N=p.entrypoints[0]??null,[c,U]=m.useState(n),[I,H]=m.useState(N?.name??""),[z,v]=m.useState(N?.command??""),[M,V]=m.useState(N?.timeoutSeconds?String(N.timeoutSeconds):""),[X,b]=m.useState(`Update ${a}`),[j,w]=m.useState("0.05"),[_,F]=m.useState(()=>Object.fromEntries(p.scalarInputs.map(r=>[r.name,r.defaultValue]))),[B,ae]=m.useState(()=>Object.fromEntries(p.envInputs.map(r=>[r.name,""]))),[Z,fe]=m.useState({}),K=p.volumes[0]??null,[Y,o]=m.useState(p.volumes.length>0||p.fileInputs.length>0),[P,E]=m.useState(K?.name??"volume"),[R,$]=m.useState(K?.mountPath??"/workspace/volumes/volume"),[J,ce]=m.useState(String(K?.storageGb??8)),[Pe,de]=m.useState(!(K?.deleteOnSandboxDelete??!1)),[q,ze]=m.useState(p.schedules),Me=p.entrypoints.find(r=>r.name===I)??N,se=Me?.ports??[],re=se[0]??null,[ue,xe]=m.useState(!!re),[Ce,me]=m.useState(re?String(re.port):""),D=Number(Ce),he=Number(j),ie=Number(J),le=Number(M),ke=!M.trim()||Number.isInteger(le)&&le>0&&le<=86400,oe=!ue||Number.isInteger(D)&&D>=qt&&D<=Ut&&se.some(r=>r.port===D),Ie=Number.isFinite(he)&&he>0,ne=!Y||Number.isInteger(ie)&&ie>0,G=q.every(r=>!r.enabled||!!r.scheduleExpression.trim()),W=Fe(p.scalarInputs,I),je=Fe(p.fileInputs,I),qe=p.envInputs.every(r=>!r.required||!!(B[r.name]??"").trim()),ve=p.envInputs.filter(r=>r.required&&!(B[r.name]??"").trim()),Re=(u||!!c.trim())&&!!z.trim()&&Ie&&ke&&ne&&W.every(r=>!r.required||!!(_[r.name]??"").trim())&&je.every(r=>!r.required||(Z[r.name]?.length??0)>0)&&qe&&G&&oe;function He(r){H(r);const f=p.entrypoints.find(A=>A.name===r);if(!f)return;v(f.command),V(f.timeoutSeconds?String(f.timeoutSeconds):"");const y=f.ports[0]??null;me(y?String(y.port):""),xe(!!y)}function _e(r,f){F(y=>({...y,[r]:f}))}function pe(r,f){ae(y=>({...y,[r]:f}))}function Ve(r,f){const y=Array.from(f.target.files??[]);fe(A=>({...A,[r.name]:r.multiple?y:y.slice(0,1)}))}function ee(r,f){ze(y=>y.map((A,ge)=>ge===r?{...A,...f}:A))}function Ae(r){r.preventDefault(),!(!Re||e)&&x({repoUrl:c.trim(),command:z.trim(),entrypointName:I,commitMessage:X.trim(),budgetUsd:j.trim(),params:gt(W,_),env:pt(p.envInputs,B),timeoutSeconds:M.trim()&&Number.isInteger(le)?le:Me?.timeoutSeconds??null,uploads:je.flatMap(f=>{const y=Z[f.name]??[];return y.length>0?[{inputName:f.name,label:f.label,targetPath:f.targetPath,multiple:f.multiple,files:y}]:[]}),resources:p.resources,volumes:Y?fn(p.volumes,{...P.trim()?{name:P.trim()}:{},...R.trim()?{mountPath:R.trim()}:{},...Number.isInteger(ie)&&ie>0?{storageGb:ie}:{},deleteOnSandboxDelete:!Pe}):[],schedules:q.filter(f=>f.enabled),openPreview:ue,previewPort:ue?D:null,previewLabel:se.find(f=>f.port===D)?.label??"web",previewAccess:se.find(f=>f.port===D)?.access??"private"})}return t.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:t.jsxs("form",{className:"git-dialog run-once-dialog sandbox-start-dialog",role:"dialog","aria-modal":"true","aria-label":"Start sandbox",onSubmit:Ae,children:[t.jsx("button",{className:"git-dialog-close",disabled:e,type:"button",title:"Close","aria-label":"Close",onClick:l,children:t.jsx(ut,{size:15})}),t.jsxs("div",{className:"sandbox-start-dialog-heading",children:[t.jsx("div",{className:"git-dialog-icon",children:t.jsx(we,{size:18})}),t.jsx("h2",{children:"Start sandbox"}),t.jsxs("div",{className:"git-dialog-row",children:[t.jsx("span",{children:"Project"}),t.jsx("strong",{children:a})]})]}),t.jsxs("div",{className:"sandbox-start-dialog-body",children:[u?null:t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Repository"}),t.jsx("input",{disabled:e,value:c,onChange:r=>U(r.target.value)})]}),i?t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Commit message"}),t.jsx("input",{disabled:e,value:X,onChange:r=>b(r.target.value)})]}):null,p.entrypoints.length>0?t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Run target"}),t.jsx("select",{disabled:e,value:I,onChange:r=>He(r.target.value),children:p.entrypoints.map(r=>t.jsx("option",{value:r.name,children:r.name},r.name))})]}):null,t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Shell command"}),t.jsx("input",{disabled:e,value:z,onChange:r=>v(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Timeout seconds"}),t.jsx("input",{disabled:e,inputMode:"numeric",value:M,onChange:r=>V(r.target.value)})]}),W.map(r=>r.type==="boolean"?t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:(_[r.name]??"")==="true",disabled:e,type:"checkbox",onChange:f=>_e(r.name,f.target.checked?"true":"false")}),t.jsx("span",{}),r.label]},r.name):t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:r.label}),t.jsx("input",{disabled:e,inputMode:r.type==="number"||r.type==="integer"?"decimal":void 0,value:_[r.name]??"",onChange:f=>_e(r.name,f.target.value)})]},r.name)),je.map(r=>t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:r.label}),t.jsx("input",{accept:r.accept||void 0,disabled:e,multiple:r.multiple,type:"file",onChange:f=>Ve(r,f)})]},r.name)),p.envInputs.length>0?t.jsxs("div",{className:"sandbox-start-env-section",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Environment"}),ve.length>0?t.jsxs("p",{className:"sandbox-start-env-warning",role:"status",children:["Required sandbox secret ref missing: ",ve.map(r=>r.name).join(", ")]}):null,p.envInputs.map(r=>{const f=B[r.name]??"",y=r.required&&!f.trim(),A=`sandbox-env-${r.name}-description`;return t.jsxs("label",{className:"git-dialog-field",children:[t.jsxs("span",{children:[r.name,r.required?" *":""]}),t.jsx("input",{"aria-describedby":A,"aria-invalid":y,disabled:e,placeholder:"openpond://secret/...",value:f,onChange:ge=>pe(r.name,ge.target.value)}),t.jsx("small",{id:A,children:y?"Add a sandbox secret ref before starting.":r.description||"Sandbox secret ref only."})]},r.name)})]}):null,je.length>0||p.volumes.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:Y,disabled:e,type:"checkbox",onChange:r=>o(r.target.checked)}),t.jsx("span",{}),"Mount volume"]}),Y?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"run-once-dialog-grid",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Volume"}),t.jsx("input",{disabled:e,value:P,onChange:r=>E(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Storage GiB"}),t.jsx("input",{disabled:e,inputMode:"numeric",value:J,onChange:r=>ce(r.target.value)})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Mount path"}),t.jsx("input",{disabled:e,value:R,onChange:r=>$(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:Pe,disabled:e,type:"checkbox",onChange:r=>de(r.target.checked)}),t.jsx("span",{}),"Keep volume"]})]}):null]}):null,q.length>0?t.jsxs("div",{className:"sandbox-start-schedules",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Schedules"}),q.map((r,f)=>t.jsxs("div",{className:"sandbox-start-schedule-row",children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:r.enabled,disabled:e,type:"checkbox",onChange:y=>ee(f,{enabled:y.target.checked})}),t.jsx("span",{}),r.name]}),t.jsxs("div",{className:"run-once-dialog-grid",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Type"}),t.jsxs("select",{disabled:e||!r.enabled,value:r.scheduleType,onChange:y=>ee(f,{scheduleType:y.target.value}),children:[t.jsx("option",{value:"rate",children:"Rate"}),t.jsx("option",{value:"cron",children:"Cron"}),t.jsx("option",{value:"once",children:"Once"})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Max runs"}),t.jsx("input",{disabled:e||!r.enabled,inputMode:"numeric",value:r.maxRuns??"",onChange:y=>{const A=Number(y.target.value);ee(f,{maxRuns:Number.isInteger(A)&&A>0?A:null})}})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Expression"}),t.jsx("input",{disabled:e||!r.enabled,value:r.scheduleExpression,onChange:y=>ee(f,{scheduleExpression:y.target.value})})]})]},r.name))]}):null,t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Budget"}),t.jsx("input",{disabled:e,inputMode:"decimal",value:j,onChange:r=>w(r.target.value)})]}),se.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:ue,disabled:e,type:"checkbox",onChange:r=>xe(r.target.checked)}),t.jsx("span",{}),"Open preview"]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Preview port"}),t.jsx("select",{disabled:e||!ue,value:Ce,onChange:r=>me(r.target.value),children:se.map(r=>t.jsx("option",{value:r.port,children:r.label?`${r.label} (${r.port})`:r.port},r.port))})]})]}):null]}),t.jsxs("div",{className:"git-dialog-footer sandbox-start-dialog-footer",children:[t.jsx("button",{className:"git-dialog-secondary",disabled:e,type:"button",onClick:l,children:"Cancel"}),t.jsxs("button",{className:"git-dialog-primary",disabled:e||!Re,title:qe?void 0:"Required sandbox secret refs are missing.",type:"submit",children:[t.jsx(Lt,{size:14}),"Start"]})]})]})})}function jn({busy:e,projectName:n,templateManifest:a,onClose:i,onSubmit:g}){const u=m.useMemo(()=>mt(a),[a]),l=m.useMemo(()=>a?Ye(a).filter(o=>o.kind==="action"):[],[a]),x=l[0]??null,[p,N]=m.useState("sandbox"),[c,U]=m.useState(x?.name??""),[I,H]=m.useState(()=>Object.fromEntries(u.scalarInputs.map(o=>[o.name,o.defaultValue]))),[z,v]=m.useState(()=>Object.fromEntries(u.envInputs.map(o=>[o.name,""]))),[M,V]=m.useState({}),X=Fe(u.scalarInputs,c),b=Fe(u.fileInputs,c),j=p==="sandbox"?u.envInputs:[],w=X.every(o=>!o.required||!!(I[o.name]??"").trim()),_=b.every(o=>!o.required||(M[o.name]?.length??0)>0),F=j.every(o=>!o.required||!!(z[o.name]??"").trim()),B=j.filter(o=>o.required&&!(z[o.name]??"").trim()),ae=!!c&&w&&_&&F;function Z(o,P){H(E=>({...E,[o]:P}))}function fe(o,P){v(E=>({...E,[o]:P}))}function K(o,P,E){const R=Array.from(E.target.files??[]);V($=>({...$,[o]:P?R:R.slice(0,1)}))}function Y(o){o.preventDefault(),!(!ae||e)&&g({mode:p,target:c,params:gt(X,I),env:p==="sandbox"?pt(j,z):[],uploads:b.flatMap(P=>{const E=M[P.name]??[];return E.length>0?[{inputName:P.name,label:P.label,targetPath:P.targetPath,multiple:P.multiple,files:E}]:[]})})}return t.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:t.jsxs("form",{className:"git-dialog run-once-dialog sandbox-start-dialog",role:"dialog","aria-modal":"true","aria-label":"Run sandbox action",onSubmit:Y,children:[t.jsx("button",{className:"git-dialog-close",disabled:e,type:"button",title:"Close","aria-label":"Close",onClick:i,children:t.jsx(ut,{size:15})}),t.jsxs("div",{className:"sandbox-start-dialog-heading",children:[t.jsx("div",{className:"git-dialog-icon",children:t.jsx($e,{size:18})}),t.jsx("h2",{children:"Run action"}),t.jsxs("div",{className:"git-dialog-row",children:[t.jsx("span",{children:"Project"}),t.jsx("strong",{children:n})]})]}),t.jsxs("div",{className:"sandbox-start-dialog-body",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Action"}),t.jsx("select",{disabled:e||l.length===0,value:c,onChange:o=>U(o.target.value),children:l.map(o=>t.jsx("option",{value:o.name,children:o.name},o.name))})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Run on"}),t.jsxs("select",{disabled:e,value:p,onChange:o=>N(o.target.value==="local"?"local":"sandbox"),children:[t.jsx("option",{value:"sandbox",children:"Hosted sandbox (start/update)"}),t.jsx("option",{value:"local",children:"Local machine"})]})]}),X.map(o=>o.type==="boolean"?t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:(I[o.name]??"")==="true",disabled:e,type:"checkbox",onChange:P=>Z(o.name,P.target.checked?"true":"false")}),t.jsx("span",{}),o.label]},o.name):t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:o.label}),t.jsx("input",{disabled:e,inputMode:o.type==="number"||o.type==="integer"?"decimal":void 0,value:I[o.name]??"",onChange:P=>Z(o.name,P.target.value)})]},o.name)),b.map(o=>t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:o.label}),t.jsx("input",{accept:o.accept||void 0,disabled:e,multiple:o.multiple,type:"file",onChange:P=>K(o.name,o.multiple,P)})]},o.name)),j.length>0?t.jsxs("div",{className:"sandbox-start-env-section",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Environment"}),B.length>0?t.jsxs("p",{className:"sandbox-start-env-warning",role:"status",children:["Required sandbox secret ref missing: ",B.map(o=>o.name).join(", ")]}):null,j.map(o=>{const P=z[o.name]??"",E=o.required&&!P.trim(),R=`sandbox-action-env-${o.name}-description`;return t.jsxs("label",{className:"git-dialog-field",children:[t.jsxs("span",{children:[o.name,o.required?" *":""]}),t.jsx("input",{"aria-describedby":R,"aria-invalid":E,disabled:e,placeholder:"openpond://secret/...",value:P,onChange:$=>fe(o.name,$.target.value)}),t.jsx("small",{id:R,children:E?"Add a sandbox secret ref before running.":o.description||"Sandbox secret ref only."})]},o.name)})]}):null]}),t.jsxs("div",{className:"git-dialog-footer sandbox-start-dialog-footer",children:[t.jsx("button",{className:"git-dialog-secondary",disabled:e,type:"button",onClick:i,children:"Cancel"}),t.jsxs("button",{className:"git-dialog-primary",disabled:e||!ae,title:F?void 0:"Required sandbox secret refs are missing.",type:"submit",children:[t.jsx($e,{size:14}),"Run"]})]})]})})}function ft(e,n){const a=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent";return n==="cron"?`name: ${a}
1
+ import{r as m,j as t}from"./index-DOMrqhcz.js";import{c as Mt,bw as Ye,bx as qt,by as Ut,X as ut,bz as we,aB as Lt,bA as Ne,bi as Ot,an as Je,N as Ft,al as at,L as Bt,bB as Dt,bb as Gt,a$ as Tt,bC as kt,bD as st,G as O,b7 as Ht,ap as Vt,S as Xt,am as Ke,C as Jt,av as Kt,i as Qt}from"./App-BI-uOpnP.js";import{I as Zt}from"./info-BGTcmow7.js";import{M as Yt}from"./monitor-eZP8ZTHe.js";import{P as $e}from"./play-CGsWFR_B.js";import{G as Wt}from"./git-commit-horizontal-CgGixL64.js";import{S as en}from"./square-CI1qNtvE.js";import{U as rt}from"./upload-DnlgGS2x.js";const tn=[["path",{d:"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9",key:"1hayfq"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"15ts47"}]],nn=Mt("hammer",tn);function an(e){const n=te(e?.data),a=te(n.preview);return(typeof a.url=="string"?a.url.trim():"")||null}function sn(){const e=window.open("","_blank");return e?(e.document.write('<!doctype html><title>Opening sandbox preview</title><body style="margin:0;background:#05070a;color:#f5f5f4;font:14px system-ui,sans-serif;display:grid;place-items:center;height:100vh;">Opening sandbox preview...</body>'),e.document.close(),e):null}function ye(e,n){if(!n){e?.close();return}if(e){e.opener=null,e.location.href=n;return}window.open(n,"_blank","noopener,noreferrer")}function mt(e){const n=rn(e),a=ln(te(e?.resources)),i=te(te(e?.inputs).schema),g=te(i.properties),u=new Set(bt(i.required)),l=[],x=[];for(const[p,N]of Object.entries(g)){const c=te(N),U=te(c["x-openpond-upload"]??c.xOpenPondUpload),I=typeof c.type=="string"?c.type:"string",H=te(c.items),z=pn(c,U),v=c.format==="file"||U.enabled===!0||I==="array"&&H.format==="file",M=typeof c.title=="string"&&c.title.trim()?c.title.trim():xn(p);if(v){x.push({name:p,label:M,required:u.has(p),multiple:I==="array"||U.multiple===!0,accept:gn(U,c),targetPath:bn(U,p),targetNames:z});continue}(I==="string"||I==="number"||I==="integer"||I==="boolean")&&l.push({name:p,label:M,required:u.has(p),type:I,defaultValue:typeof c.default=="string"||typeof c.default=="number"||typeof c.default=="boolean"?String(c.default):"",targetNames:z})}return{entrypoints:n,scalarInputs:l,fileInputs:x,envInputs:cn(e),resources:a,volumes:on(e,x),schedules:dn(e)}}function Fe(e,n){const a=n.trim();return e.filter(i=>!i.targetNames||i.targetNames.length===0?!0:i.targetNames.includes(a))}function rn(e){return e?Ye(e).flatMap(n=>{if(n.kind==="action")return[];const a=n.name.trim(),i=n.command.trim(),g=Be(n.timeoutSeconds),u=n.ports.flatMap(l=>{const x=Be(l.port);return x?[{port:x,label:typeof l.label=="string"&&l.label.trim()?l.label.trim():"web",access:l.access==="public"?"public":"private",path:typeof l.path=="string"&&l.path.trim()?l.path.trim():"/"}]:[]});return a&&i?[{name:a,command:i,timeoutSeconds:g,ports:u}]:[]}):[]}function ln(e){return{cpu:Qe(e.cpu)??1,memoryGb:Qe(e.memoryGb)??1,diskGb:Qe(e.diskGb)??8}}function on(e,n){const a=Array.isArray(e?.volumes)?e.volumes:[];if(a.length>0)return a.map((u,l)=>{const x=l===0?"volume":`volume-${l+1}`,p=typeof u.name=="string"&&u.name.trim()?u.name.trim():x;return{name:p,mountPath:typeof u.mountPath=="string"&&u.mountPath.trim()?u.mountPath.trim():`/workspace/volumes/${p}`,...Be(u.storageGb)?{storageGb:Be(u.storageGb)??void 0}:{},deleteOnSandboxDelete:u.deleteOnSandboxDelete===!0}});const i=n.find(u=>u.targetPath.startsWith("volumes/"));if(!i)return[];const[,g="volume"]=i.targetPath.split("/");return[{name:g,mountPath:`/workspace/volumes/${g}`,storageGb:8,deleteOnSandboxDelete:!1}]}function cn(e){return(Array.isArray(e?.inputs.env)?e.inputs.env:[]).flatMap(a=>{const i=typeof a.name=="string"?a.name.trim():"";return i?[{name:i,required:a.required===!0,secret:a.secret!==!1,description:typeof a.description=="string"?a.description.trim():""}]:[]})}function dn(e){return e?.schedules?.length?e.schedules.flatMap(n=>{const a=typeof n.name=="string"?n.name.trim():"",i=un(n);if(!a||!i.scheduleExpression)return[];try{return[{name:a,...typeof n.description=="string"&&n.description.trim()?{description:n.description.trim()}:{},enabled:!1,...i,...typeof n.timezone=="string"&&n.timezone.trim()?{timezone:n.timezone.trim()}:{},...typeof n.startAt=="string"&&n.startAt.trim()?{startAt:n.startAt.trim()}:{},...typeof n.endAt=="string"&&n.endAt.trim()?{endAt:n.endAt.trim()}:{},...typeof n.maxRuns=="number"&&Number.isInteger(n.maxRuns)&&n.maxRuns>0?{maxRuns:n.maxRuns}:{},runtimePolicy:n.runtimePolicy,target:mn(e,n),...n.budget?{budget:n.budget}:{},...n.resources?{resources:n.resources}:{},...n.quotas?{quotas:n.quotas}:{},...n.lifecycle?{lifecycle:n.lifecycle}:{},...n.retentionPolicy?{retentionPolicy:n.retentionPolicy}:{},...n.env?{env:n.env}:{},...n.integrationLeases?{integrationLeases:n.integrationLeases}:{},metadata:{...te(n.metadata),manifestScheduleName:a,source:"openpond-app-sandbox-template-start"}}]}catch{return[]}}):[]}function un(e){return e.scheduleExpression?{scheduleType:e.scheduleType??"cron",scheduleExpression:e.scheduleExpression}:e.rate?{scheduleType:"rate",scheduleExpression:/^rate\(/i.test(e.rate)?e.rate:`rate(${e.rate})`}:e.once?{scheduleType:"once",scheduleExpression:/^at\(/i.test(e.once)?e.once:`at(${e.once})`}:{scheduleType:"cron",scheduleExpression:e.cron??""}}function mn(e,n){const a=n.command??n.target?.command??null;if(a)return{kind:"command",command:a,requiresStart:n.requiresStart??n.target?.requiresStart??!1};const i=n.target?.kind??"action";if(i==="start")return{kind:"command",command:e.start.command,requiresStart:n.requiresStart??n.target?.requiresStart??e.start.requiresStart??!1};if(i==="service"){const l=n.target?.name??"",x=e.services.find(p=>p.name===l);if(!x)throw new Error("schedule_service_target_missing");return{kind:"command",command:x.command,requiresStart:n.requiresStart??n.target?.requiresStart??x.requiresStart??!1}}const g=n.actionName??n.action??n.target?.actionName??(n.target?.kind==="action"?n.target?.name:void 0),u=e.actions.find(l=>l.name===g);if(!u)throw new Error("schedule_action_target_missing");return{kind:"command",command:u.command,requiresStart:n.requiresStart??n.target?.requiresStart??u.requiresStart??!1}}function pt(e,n){return e.flatMap(a=>{const i=(n[a.name]??"").trim();return i?[{name:a.name,secretRef:i}]:[]})}function gt(e,n){const a={};for(const i of e){const g=n[i.name]??"";if(!(!g.trim()&&!i.required))if(i.type==="boolean")a[i.name]=g==="true";else if(i.type==="number"||i.type==="integer"){const u=Number(g);Number.isFinite(u)&&(a[i.name]=i.type==="integer"?Math.trunc(u):u)}else a[i.name]=g}return a}function pn(e,n){const a=e["x-openpond-targets"]??e.xOpenPondTargets??n.targets??n.actions,i=bt(a).map(g=>g.trim()).filter(Boolean);return i.length>0?[...new Set(i)]:null}function gn(e,n){return typeof e.accept=="string"?e.accept.trim():Array.isArray(e.accept)?e.accept.filter(a=>typeof a=="string").join(","):typeof n.accept=="string"?n.accept.trim():""}function bn(e,n){return(typeof e.targetPath=="string"&&e.targetPath.trim()?e.targetPath.trim():typeof e.path=="string"&&e.path.trim()?e.path.trim():`uploads/${n}`).replace(/^\/+/,"").replace(/^workspace\//,"").replace(/\/+$/,"")}function Qe(e){const n=Number(e);return Number.isFinite(n)&&n>0?n:null}function Be(e){const n=Number(e);return Number.isInteger(n)&&n>0?n:null}function fn(e,n){return[n,...e.slice(1)]}function bt(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"):[]}function xn(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase())}function te(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function hn({busy:e,defaultRepoUrl:n,projectName:a,commitBeforeCreate:i,templateManifest:g,uploadBeforeCreate:u,onClose:l,onSubmit:x}){const p=m.useMemo(()=>mt(g),[g]),N=p.entrypoints[0]??null,[c,U]=m.useState(n),[I,H]=m.useState(N?.name??""),[z,v]=m.useState(N?.command??""),[M,V]=m.useState(N?.timeoutSeconds?String(N.timeoutSeconds):""),[X,b]=m.useState(`Update ${a}`),[j,w]=m.useState("0.05"),[_,F]=m.useState(()=>Object.fromEntries(p.scalarInputs.map(r=>[r.name,r.defaultValue]))),[B,ae]=m.useState(()=>Object.fromEntries(p.envInputs.map(r=>[r.name,""]))),[Z,fe]=m.useState({}),K=p.volumes[0]??null,[Y,o]=m.useState(p.volumes.length>0||p.fileInputs.length>0),[P,A]=m.useState(K?.name??"volume"),[R,$]=m.useState(K?.mountPath??"/workspace/volumes/volume"),[J,ce]=m.useState(String(K?.storageGb??8)),[Pe,de]=m.useState(!(K?.deleteOnSandboxDelete??!1)),[q,ze]=m.useState(p.schedules),Me=p.entrypoints.find(r=>r.name===I)??N,se=Me?.ports??[],re=se[0]??null,[ue,xe]=m.useState(!!re),[Ce,me]=m.useState(re?String(re.port):""),D=Number(Ce),he=Number(j),ie=Number(J),le=Number(M),ke=!M.trim()||Number.isInteger(le)&&le>0&&le<=86400,oe=!ue||Number.isInteger(D)&&D>=qt&&D<=Ut&&se.some(r=>r.port===D),Ie=Number.isFinite(he)&&he>0,ne=!Y||Number.isInteger(ie)&&ie>0,G=q.every(r=>!r.enabled||!!r.scheduleExpression.trim()),W=Fe(p.scalarInputs,I),je=Fe(p.fileInputs,I),qe=p.envInputs.every(r=>!r.required||!!(B[r.name]??"").trim()),ve=p.envInputs.filter(r=>r.required&&!(B[r.name]??"").trim()),Re=(u||!!c.trim())&&!!z.trim()&&Ie&&ke&&ne&&W.every(r=>!r.required||!!(_[r.name]??"").trim())&&je.every(r=>!r.required||(Z[r.name]?.length??0)>0)&&qe&&G&&oe;function He(r){H(r);const f=p.entrypoints.find(E=>E.name===r);if(!f)return;v(f.command),V(f.timeoutSeconds?String(f.timeoutSeconds):"");const y=f.ports[0]??null;me(y?String(y.port):""),xe(!!y)}function _e(r,f){F(y=>({...y,[r]:f}))}function pe(r,f){ae(y=>({...y,[r]:f}))}function Ve(r,f){const y=Array.from(f.target.files??[]);fe(E=>({...E,[r.name]:r.multiple?y:y.slice(0,1)}))}function ee(r,f){ze(y=>y.map((E,ge)=>ge===r?{...E,...f}:E))}function Ee(r){r.preventDefault(),!(!Re||e)&&x({repoUrl:c.trim(),command:z.trim(),entrypointName:I,commitMessage:X.trim(),budgetUsd:j.trim(),params:gt(W,_),env:pt(p.envInputs,B),timeoutSeconds:M.trim()&&Number.isInteger(le)?le:Me?.timeoutSeconds??null,uploads:je.flatMap(f=>{const y=Z[f.name]??[];return y.length>0?[{inputName:f.name,label:f.label,targetPath:f.targetPath,multiple:f.multiple,files:y}]:[]}),resources:p.resources,volumes:Y?fn(p.volumes,{...P.trim()?{name:P.trim()}:{},...R.trim()?{mountPath:R.trim()}:{},...Number.isInteger(ie)&&ie>0?{storageGb:ie}:{},deleteOnSandboxDelete:!Pe}):[],schedules:q.filter(f=>f.enabled),openPreview:ue,previewPort:ue?D:null,previewLabel:se.find(f=>f.port===D)?.label??"web",previewAccess:se.find(f=>f.port===D)?.access??"private"})}return t.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:t.jsxs("form",{className:"git-dialog run-once-dialog sandbox-start-dialog",role:"dialog","aria-modal":"true","aria-label":"Start sandbox",onSubmit:Ee,children:[t.jsx("button",{className:"git-dialog-close",disabled:e,type:"button",title:"Close","aria-label":"Close",onClick:l,children:t.jsx(ut,{size:15})}),t.jsxs("div",{className:"sandbox-start-dialog-heading",children:[t.jsx("div",{className:"git-dialog-icon",children:t.jsx(we,{size:18})}),t.jsx("h2",{children:"Start sandbox"}),t.jsxs("div",{className:"git-dialog-row",children:[t.jsx("span",{children:"Project"}),t.jsx("strong",{children:a})]})]}),t.jsxs("div",{className:"sandbox-start-dialog-body",children:[u?null:t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Repository"}),t.jsx("input",{disabled:e,value:c,onChange:r=>U(r.target.value)})]}),i?t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Commit message"}),t.jsx("input",{disabled:e,value:X,onChange:r=>b(r.target.value)})]}):null,p.entrypoints.length>0?t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Run target"}),t.jsx("select",{disabled:e,value:I,onChange:r=>He(r.target.value),children:p.entrypoints.map(r=>t.jsx("option",{value:r.name,children:r.name},r.name))})]}):null,t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Shell command"}),t.jsx("input",{disabled:e,value:z,onChange:r=>v(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Timeout seconds"}),t.jsx("input",{disabled:e,inputMode:"numeric",value:M,onChange:r=>V(r.target.value)})]}),W.map(r=>r.type==="boolean"?t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:(_[r.name]??"")==="true",disabled:e,type:"checkbox",onChange:f=>_e(r.name,f.target.checked?"true":"false")}),t.jsx("span",{}),r.label]},r.name):t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:r.label}),t.jsx("input",{disabled:e,inputMode:r.type==="number"||r.type==="integer"?"decimal":void 0,value:_[r.name]??"",onChange:f=>_e(r.name,f.target.value)})]},r.name)),je.map(r=>t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:r.label}),t.jsx("input",{accept:r.accept||void 0,disabled:e,multiple:r.multiple,type:"file",onChange:f=>Ve(r,f)})]},r.name)),p.envInputs.length>0?t.jsxs("div",{className:"sandbox-start-env-section",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Environment"}),ve.length>0?t.jsxs("p",{className:"sandbox-start-env-warning",role:"status",children:["Required sandbox secret ref missing: ",ve.map(r=>r.name).join(", ")]}):null,p.envInputs.map(r=>{const f=B[r.name]??"",y=r.required&&!f.trim(),E=`sandbox-env-${r.name}-description`;return t.jsxs("label",{className:"git-dialog-field",children:[t.jsxs("span",{children:[r.name,r.required?" *":""]}),t.jsx("input",{"aria-describedby":E,"aria-invalid":y,disabled:e,placeholder:"openpond://secret/...",value:f,onChange:ge=>pe(r.name,ge.target.value)}),t.jsx("small",{id:E,children:y?"Add a sandbox secret ref before starting.":r.description||"Sandbox secret ref only."})]},r.name)})]}):null,je.length>0||p.volumes.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:Y,disabled:e,type:"checkbox",onChange:r=>o(r.target.checked)}),t.jsx("span",{}),"Mount volume"]}),Y?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"run-once-dialog-grid",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Volume"}),t.jsx("input",{disabled:e,value:P,onChange:r=>A(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Storage GiB"}),t.jsx("input",{disabled:e,inputMode:"numeric",value:J,onChange:r=>ce(r.target.value)})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Mount path"}),t.jsx("input",{disabled:e,value:R,onChange:r=>$(r.target.value)})]}),t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:Pe,disabled:e,type:"checkbox",onChange:r=>de(r.target.checked)}),t.jsx("span",{}),"Keep volume"]})]}):null]}):null,q.length>0?t.jsxs("div",{className:"sandbox-start-schedules",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Schedules"}),q.map((r,f)=>t.jsxs("div",{className:"sandbox-start-schedule-row",children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:r.enabled,disabled:e,type:"checkbox",onChange:y=>ee(f,{enabled:y.target.checked})}),t.jsx("span",{}),r.name]}),t.jsxs("div",{className:"run-once-dialog-grid",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Type"}),t.jsxs("select",{disabled:e||!r.enabled,value:r.scheduleType,onChange:y=>ee(f,{scheduleType:y.target.value}),children:[t.jsx("option",{value:"rate",children:"Rate"}),t.jsx("option",{value:"cron",children:"Cron"}),t.jsx("option",{value:"once",children:"Once"})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Max runs"}),t.jsx("input",{disabled:e||!r.enabled,inputMode:"numeric",value:r.maxRuns??"",onChange:y=>{const E=Number(y.target.value);ee(f,{maxRuns:Number.isInteger(E)&&E>0?E:null})}})]})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Expression"}),t.jsx("input",{disabled:e||!r.enabled,value:r.scheduleExpression,onChange:y=>ee(f,{scheduleExpression:y.target.value})})]})]},r.name))]}):null,t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Budget"}),t.jsx("input",{disabled:e,inputMode:"decimal",value:j,onChange:r=>w(r.target.value)})]}),se.length>0?t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:ue,disabled:e,type:"checkbox",onChange:r=>xe(r.target.checked)}),t.jsx("span",{}),"Open preview"]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Preview port"}),t.jsx("select",{disabled:e||!ue,value:Ce,onChange:r=>me(r.target.value),children:se.map(r=>t.jsx("option",{value:r.port,children:r.label?`${r.label} (${r.port})`:r.port},r.port))})]})]}):null]}),t.jsxs("div",{className:"git-dialog-footer sandbox-start-dialog-footer",children:[t.jsx("button",{className:"git-dialog-secondary",disabled:e,type:"button",onClick:l,children:"Cancel"}),t.jsxs("button",{className:"git-dialog-primary",disabled:e||!Re,title:qe?void 0:"Required sandbox secret refs are missing.",type:"submit",children:[t.jsx(Lt,{size:14}),"Start"]})]})]})})}function jn({busy:e,projectName:n,templateManifest:a,onClose:i,onSubmit:g}){const u=m.useMemo(()=>mt(a),[a]),l=m.useMemo(()=>a?Ye(a).filter(o=>o.kind==="action"):[],[a]),x=l[0]??null,[p,N]=m.useState("sandbox"),[c,U]=m.useState(x?.name??""),[I,H]=m.useState(()=>Object.fromEntries(u.scalarInputs.map(o=>[o.name,o.defaultValue]))),[z,v]=m.useState(()=>Object.fromEntries(u.envInputs.map(o=>[o.name,""]))),[M,V]=m.useState({}),X=Fe(u.scalarInputs,c),b=Fe(u.fileInputs,c),j=p==="sandbox"?u.envInputs:[],w=X.every(o=>!o.required||!!(I[o.name]??"").trim()),_=b.every(o=>!o.required||(M[o.name]?.length??0)>0),F=j.every(o=>!o.required||!!(z[o.name]??"").trim()),B=j.filter(o=>o.required&&!(z[o.name]??"").trim()),ae=!!c&&w&&_&&F;function Z(o,P){H(A=>({...A,[o]:P}))}function fe(o,P){v(A=>({...A,[o]:P}))}function K(o,P,A){const R=Array.from(A.target.files??[]);V($=>({...$,[o]:P?R:R.slice(0,1)}))}function Y(o){o.preventDefault(),!(!ae||e)&&g({mode:p,target:c,params:gt(X,I),env:p==="sandbox"?pt(j,z):[],uploads:b.flatMap(P=>{const A=M[P.name]??[];return A.length>0?[{inputName:P.name,label:P.label,targetPath:P.targetPath,multiple:P.multiple,files:A}]:[]})})}return t.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:t.jsxs("form",{className:"git-dialog run-once-dialog sandbox-start-dialog",role:"dialog","aria-modal":"true","aria-label":"Run sandbox action",onSubmit:Y,children:[t.jsx("button",{className:"git-dialog-close",disabled:e,type:"button",title:"Close","aria-label":"Close",onClick:i,children:t.jsx(ut,{size:15})}),t.jsxs("div",{className:"sandbox-start-dialog-heading",children:[t.jsx("div",{className:"git-dialog-icon",children:t.jsx($e,{size:18})}),t.jsx("h2",{children:"Run action"}),t.jsxs("div",{className:"git-dialog-row",children:[t.jsx("span",{children:"Project"}),t.jsx("strong",{children:n})]})]}),t.jsxs("div",{className:"sandbox-start-dialog-body",children:[t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Action"}),t.jsx("select",{disabled:e||l.length===0,value:c,onChange:o=>U(o.target.value),children:l.map(o=>t.jsx("option",{value:o.name,children:o.name},o.name))})]}),t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:"Run on"}),t.jsxs("select",{disabled:e,value:p,onChange:o=>N(o.target.value==="local"?"local":"sandbox"),children:[t.jsx("option",{value:"sandbox",children:"Hosted sandbox (start/update)"}),t.jsx("option",{value:"local",children:"Local machine"})]})]}),X.map(o=>o.type==="boolean"?t.jsxs("label",{className:"git-dialog-toggle",children:[t.jsx("input",{checked:(I[o.name]??"")==="true",disabled:e,type:"checkbox",onChange:P=>Z(o.name,P.target.checked?"true":"false")}),t.jsx("span",{}),o.label]},o.name):t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:o.label}),t.jsx("input",{disabled:e,inputMode:o.type==="number"||o.type==="integer"?"decimal":void 0,value:I[o.name]??"",onChange:P=>Z(o.name,P.target.value)})]},o.name)),b.map(o=>t.jsxs("label",{className:"git-dialog-field",children:[t.jsx("span",{children:o.label}),t.jsx("input",{accept:o.accept||void 0,disabled:e,multiple:o.multiple,type:"file",onChange:P=>K(o.name,o.multiple,P)})]},o.name)),j.length>0?t.jsxs("div",{className:"sandbox-start-env-section",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Environment"}),B.length>0?t.jsxs("p",{className:"sandbox-start-env-warning",role:"status",children:["Required sandbox secret ref missing: ",B.map(o=>o.name).join(", ")]}):null,j.map(o=>{const P=z[o.name]??"",A=o.required&&!P.trim(),R=`sandbox-action-env-${o.name}-description`;return t.jsxs("label",{className:"git-dialog-field",children:[t.jsxs("span",{children:[o.name,o.required?" *":""]}),t.jsx("input",{"aria-describedby":R,"aria-invalid":A,disabled:e,placeholder:"openpond://secret/...",value:P,onChange:$=>fe(o.name,$.target.value)}),t.jsx("small",{id:R,children:A?"Add a sandbox secret ref before running.":o.description||"Sandbox secret ref only."})]},o.name)})]}):null]}),t.jsxs("div",{className:"git-dialog-footer sandbox-start-dialog-footer",children:[t.jsx("button",{className:"git-dialog-secondary",disabled:e,type:"button",onClick:i,children:"Cancel"}),t.jsxs("button",{className:"git-dialog-primary",disabled:e||!ae,title:F?void 0:"Required sandbox secret refs are missing.",type:"submit",children:[t.jsx($e,{size:14}),"Run"]})]})]})})}function ft(e,n){const a=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent";return n==="cron"?`name: ${a}
2
2
  version: 0.1.0
3
3
  useCase: scheduled_report
4
4
  start:
@@ -28,5 +28,5 @@ start:
28
28
  command: pnpm start
29
29
  actions:
30
30
  - name: hello
31
- command: pnpm hello`}function vn(e,n){return n||(e==="missing_config"?`${Ne} missing`:e==="needs_project"?"Local config is ready":e==="needs_sync"?"Project needs manifest sync":e==="needs_agent"?"Project is synced":e==="ready"?"Agent is ready":"Setup unavailable")}function Sn(e){return e?.source==="openpond"?"OpenPond Git":e?.source==="github"?"GitHub":e?.source==="local_git"?"Local Git":e?.source==="local_folder"?"Local folder":"Workspace"}function yn(e){const n=De(e.data),a=De(n.remote);return(typeof a.remoteUrl=="string"?a.remoteUrl.trim():"")||null}function Nn(e){const n=De(e.data),a=De(n.sandbox);return(typeof a.id=="string"?a.id.trim():"")||null}function it(e){return e?typeof e.metadata?.name=="string"&&e.metadata.name.trim()?e.metadata.name.trim():e.projectId?`Project sandbox ${Ze(e.id)}`:e.agentId?`Agent sandbox ${Ze(e.id)}`:`Sandbox ${Ze(e.id)}`:null}function Pn(e,n){return{sourceSandboxId:n,name:e.name,...e.description?{description:e.description}:{},scheduleType:e.scheduleType,scheduleExpression:e.scheduleExpression,enabled:!0,...e.timezone?{timezone:e.timezone}:{},...e.startAt?{startAt:e.startAt}:{},...e.endAt?{endAt:e.endAt}:{},...e.maxRuns!==void 0?{maxRuns:e.maxRuns}:{},...e.runtimePolicy?{runtimePolicy:e.runtimePolicy}:{},target:e.target,...e.budget?{budget:e.budget}:{},...e.resources?{resources:e.resources}:{},...e.quotas?{quotas:e.quotas}:{},...e.lifecycle?{lifecycle:e.lifecycle}:{},...e.retentionPolicy?{retentionPolicy:e.retentionPolicy}:{},...e.env?{env:e.env}:{},...e.integrationLeases?{integrationLeases:e.integrationLeases}:{},metadata:e.metadata??{},managementSource:"openpond.yaml",manifestPath:Ne}}function Cn(e){const n=e?.gitOwner?.trim()??"",a=e?.gitRepo?.trim()??"",i=e?.gitHost?.trim()??"";if(!n||!a||!i)return null;const g=a.endsWith(".git")?a:`${a}.git`;return/^https?:\/\//i.test(i)?`${i.replace(/\/+$/,"")}/${n}/${g}`:`https://${i.replace(/\/+$/,"")}/${n}/${g}`}function In(e,n){const a=n.trim();if(e==="github_repo"){const i=a.replace(/^https:\/\/github\.com\//i,"").replace(/^git@github\.com:/i,"").replace(/\.git$/i,""),[g,u]=i.split("/").filter(Boolean);return{gitHost:"github.com",gitOwner:g??null,gitRepo:u??null,internalRepoPath:null,templateRepoUrl:null}}return e==="internal_repo"?{gitHost:"openpond.ai",gitOwner:null,gitRepo:a.split("/").filter(Boolean).at(-1)??null,internalRepoPath:a||null,templateRepoUrl:null}:e==="template"?{gitHost:null,gitOwner:null,gitRepo:null,internalRepoPath:null,templateRepoUrl:a||null}:{gitHost:null,gitOwner:null,gitRepo:null,internalRepoPath:null,templateRepoUrl:null}}function lt(e,n){const a=e.trim().replace(/^\/+/,"").replace(/^workspace\//,"").replace(/\/+$/,""),i=n.trim().replace(/[/\\]+/g,"-").replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"upload";return`${a||"uploads"}/${i}`}function Rn(e,n){return`OPENPOND_REPLAY_PARAMS_BASE64='${An({input:n})}' ${e}`}function _n(e,n,a){return["cd",ot(e),"&&","openpond","sandbox-template",n,"--file",Ne,"--target",ot(a)].join(" ")}function ot(e){return`'${e.replace(/'/g,"'\\''")}'`}function ct(e){return new Promise((n,a)=>{const i=new FileReader;i.onload=()=>{const g=typeof i.result=="string"?i.result:"",[,u=""]=g.split(",",2);n(u)},i.onerror=()=>a(i.error??new Error("Failed to read file")),i.readAsDataURL(e)})}function An(e){const n=JSON.stringify(e),a=new TextEncoder().encode(n);let i="";for(const g of a)i+=String.fromCharCode(g);return window.btoa(i)}function De(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function be(e){return e instanceof Error?e.message:String(e)}function Ze(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}async function En(e){e&&(await e("sandbox_preserve_source"),await e("sandbox_stop"))}function wn(e){return{...e.teamId?{teamId:e.teamId}:{},...e.projectId?{projectId:e.projectId}:{},runtime:{runtimeId:e.runtimeId},visibility:"team",budget:{maxUsd:"0.05"},quotas:{idleTimeoutSeconds:900,maxSpendUsd:"0.05"},metadata:{source:"openpond-app-environment-menu-sandbox-resume",resumeSandboxId:e.id,previousState:e.state}}}function $n({canCreateSandboxProject:e,canInitGit:n,defaultSandboxRepoUrl:a,gitWorkspace:i,hasRemote:g,isProjectWorkspace:u,isSandboxWorkspace:l,managed:x,onOpenCommitDialog:p,onRunTerminalCommand:N,onWorkspaceToolAction:c,projectSandboxTemplate:U,projectSandboxTemplateValid:I,sandboxTemplateActionTargetCount:H,sandboxTemplateServiceTargets:z,sandboxResumeTarget:v,selectedApp:M,selectedProject:V,setSandboxCreateDialogOpen:X,setSandboxRunActionDialogOpen:b,workspaceBusyValue:j,workspaceReady:w,workspaceState:_}){const F=[{icon:t.jsx(Ot,{size:14}),label:"Initialize Git",disabled:x||!n||j||!w||!c,onSelect:()=>c?.("git_init")},{icon:t.jsx(Wt,{size:14}),label:"Commit changes",disabled:x||!i||j||!w||!_?.dirty||!p,onSelect:()=>p?.("commit")},{icon:t.jsx(rt,{size:14}),label:"Push branch",disabled:x||!i||j||!w||!g||!c,onSelect:()=>c?.("git_push")},{icon:t.jsx(Je,{size:14}),label:"Fetch remote",disabled:x||!i||j||!w||!g||!c,onSelect:()=>c?.("git_fetch")},{icon:t.jsx(Ft,{size:14}),label:"Create PR",disabled:!0,onSelect:()=>{}}],B=[...U?[]:[{icon:t.jsx(we,{size:14}),label:"Create sandbox template",disabled:x||j||!w||!c,onSelect:()=>c?.("create_sandbox_template_scaffold")}],{icon:t.jsx(at,{size:14}),label:`Validate ${Ne}`,disabled:x||j||!w||!c,onSelect:()=>c?.("validate_sandbox_template")},{icon:t.jsx(nn,{size:14}),label:"Build template",disabled:x||j||!w||!c,onSelect:()=>c?.("build_sandbox_template")},{icon:t.jsx($e,{size:14}),label:"Run start locally",disabled:x||j||!w||!c,onSelect:()=>c?.("run_sandbox_template",{mode:"local",target:"start"})},{icon:t.jsx($e,{size:14}),label:"Run action",disabled:x||j||!w||!I||H===0,onSelect:()=>b(!0)},...z.map(K=>({icon:t.jsx(Bt,{size:14}),label:`Dev ${K.name} locally`,disabled:x||j||!w||!I||!V?.sandboxTemplate?.rootPath||!N,onSelect:()=>N?.(_n(V?.sandboxTemplate?.rootPath??"","dev",K.name))})),{icon:t.jsx(we,{size:14}),label:"Start sandbox",disabled:x||j||!w||!e,onSelect:()=>X(!0)}],ae=[{icon:t.jsx(Je,{size:14}),label:"Sandbox status",disabled:j||!c,onSelect:()=>c?.("sandbox_status")},{icon:t.jsx($e,{size:14}),label:"Resume sandbox",disabled:j||!c||!v?.runtimeId||v.state==="running"||v.state==="creating",onSelect:()=>v?.runtimeId?c?.("sandbox_create",wn(v)):void 0},{icon:t.jsx(Dt,{size:14}),label:"Sandbox logs",disabled:j||!c,onSelect:()=>c?.("sandbox_logs")},{icon:t.jsx(at,{size:14}),label:"Receipts",disabled:j||!c,onSelect:()=>c?.("sandbox_receipts")},{icon:t.jsx(Gt,{size:14}),label:"Export patch",disabled:j||!c,onSelect:()=>c?.("sandbox_git_export_patch")},{icon:t.jsx(rt,{size:14}),label:"Apply locally",disabled:j||!c,onSelect:()=>c?.("sandbox_git_apply_patch_local")},{icon:t.jsx(en,{size:14}),label:"Checkpoint and stop",disabled:j||!c,onSelect:()=>En(c)}];return{gitActionItems:F,sandboxActionItems:l?ae:u?B:[{icon:t.jsx(we,{size:14}),label:a?"Create sandbox from repo":"Create sandbox",disabled:j||!c,onSelect:()=>c?.("sandbox_create",{...a?{repo:a}:{},visibility:"team",budget:{maxUsd:"0.05"},quotas:{maxSpendUsd:"0.05"},metadata:{source:"openpond-app-environment-menu-sandbox",...M?.name?{appName:M.name}:{}}})},{icon:t.jsx(Je,{size:14}),label:"List templates",disabled:j||!c,onSelect:()=>c?.("sandbox_templates")}]}}function zn({busy:e,error:n,projectName:a,onClose:i,onSubmit:g}){const[u,l]=m.useState("action"),[x,p]=m.useState(Ne),N=a.trim()||"local-agent";return t.jsxs(Ge,{title:"Add Agent config",busy:e,error:n,onClose:i,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Template preset"}),t.jsxs("select",{value:u,onChange:c=>l(c.target.value),disabled:e,children:[t.jsx("option",{value:"action",children:"Action"}),t.jsx("option",{value:"cron",children:"Cron"}),t.jsx("option",{value:"background",children:"Background worker"}),t.jsx("option",{value:"resources",children:"Resource profile"})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Manifest path"}),t.jsx("input",{value:x,onChange:c=>p(c.target.value),disabled:e})]}),t.jsx("pre",{children:ft(N,u)}),t.jsx(Te,{busy:e,actionLabel:"Write config",canSubmit:!!x.trim(),onClose:i,onSubmit:()=>g({name:N,preset:u,manifestPath:x.trim()})})]})}function Mn({busy:e,defaultBranch:n,defaultTeamId:a,error:i,projectName:g,sourceIdentity:u,onClose:l,onSubmit:x}){const p=a,[N,c]=m.useState(g),[U,I]=m.useState(/github\.com[:/]/i.test(u)?"github_repo":"manual"),[H,z]=m.useState(u),[v,M]=m.useState(n||"main"),[V,X]=m.useState(!0);return t.jsxs(Ge,{title:"Connect Project",busy:e,error:i,onClose:l,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Project name"}),t.jsx("input",{value:N,onChange:b=>c(b.target.value),disabled:e})]}),t.jsxs("div",{className:"agent-setup-two-col",children:[t.jsxs("label",{children:[t.jsx("span",{children:"Source type"}),t.jsxs("select",{value:U,onChange:b=>I(b.target.value),disabled:e,children:[t.jsx("option",{value:"manual",children:"Manual"}),t.jsx("option",{value:"github_repo",children:"GitHub repo"}),t.jsx("option",{value:"internal_repo",children:"Internal repo"}),t.jsx("option",{value:"template",children:"Template"})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Default branch"}),t.jsx("input",{value:v,onChange:b=>M(b.target.value),disabled:e})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Source identity"}),t.jsx("input",{value:H,onChange:b=>z(b.target.value),disabled:e})]}),t.jsxs("label",{className:"agent-setup-check",children:[t.jsx("input",{type:"checkbox",checked:V,onChange:b=>X(b.target.checked),disabled:e}),t.jsx("span",{children:"Sync now"})]}),t.jsx(Te,{busy:e,actionLabel:V?"Connect and sync":"Connect Project",canSubmit:!!(N.trim()&&p),onClose:l,onSubmit:()=>x({teamId:p,projectName:N.trim(),sourceType:U,sourceIdentity:H.trim(),defaultBranch:v.trim(),syncNow:V})})]})}function qn({busy:e,defaultName:n,error:a,onClose:i,onSubmit:g}){const[u,l]=m.useState(n),[x,p]=m.useState(!0);return t.jsxs(Ge,{title:"Create Agent",busy:e,error:a,onClose:i,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Agent name"}),t.jsx("input",{value:u,onChange:N=>l(N.target.value),disabled:e})]}),t.jsx("div",{className:"agent-setup-summary",children:"Entire manifest · Manual trigger · Package defaults"}),t.jsxs("label",{className:"agent-setup-check",children:[t.jsx("input",{type:"checkbox",checked:x,onChange:N=>p(N.target.checked),disabled:e}),t.jsx("span",{children:"Create and test run"})]}),t.jsx(Te,{busy:e,actionLabel:"Create Agent",canSubmit:!!u.trim(),onClose:i,onSubmit:()=>g({agentName:u.trim(),createTestRun:x})})]})}function dt({actionLabel:e,busy:n,error:a,summary:i,title:g,onClose:u,onSubmit:l}){return t.jsxs(Ge,{title:g,busy:n,error:a,onClose:u,children:[t.jsx("div",{className:"agent-setup-summary",children:i}),t.jsx(Te,{busy:n,actionLabel:e,canSubmit:!0,onClose:u,onSubmit:l})]})}function Ge({busy:e,children:n,error:a,title:i,onClose:g}){return Tt(a),t.jsx("div",{className:"agent-setup-dialog-backdrop",role:"presentation",onMouseDown:g,children:t.jsxs("section",{className:"agent-setup-dialog",role:"dialog","aria-modal":"true","aria-label":i,onMouseDown:u=>u.stopPropagation(),children:[t.jsxs("header",{children:[t.jsx("h3",{children:i}),t.jsx("button",{type:"button",disabled:e,onClick:g,children:"Close"})]}),t.jsx("div",{className:"agent-setup-fields",children:n})]})})}function Te({actionLabel:e,busy:n,canSubmit:a,onClose:i,onSubmit:g}){return t.jsxs("div",{className:"agent-setup-dialog-actions",children:[t.jsx("button",{type:"button",disabled:n,onClick:i,children:"Cancel"}),t.jsx("button",{type:"button",disabled:n||!a,onClick:g,children:n?"Working":e})]})}function Un(e){return e.split(`
32
- `).filter(n=>n.trim()).length}function Ln(e){return e.status==="loading"?"Checking sandbox changes":e.status==="error"?"Sandbox status unavailable":e.status!=="ready"?"Sandbox changes unknown":e.changedFiles===0?"Sandbox clean":`${e.changedFiles} sandbox changed ${e.changedFiles===1?"file":"files"}`}function On(e){return e>0&&e%3600===0?`${e/3600} hr`:e>0&&e%60===0?`${e/60} min`:`${e} sec`}function Oe(e){const n=e?.trim();if(!n)return null;if(n.startsWith("$"))return n;const a=Number(n);if(!Number.isFinite(a))return`$${n}`;if(a===0)return"$0";const i=a>=1?2:4;return`$${a.toFixed(i).replace(/0+$/,"").replace(/\.$/,"")}`}function Fn(e){return e.receipts.slice().sort((n,a)=>Date.parse(a.createdAt)-Date.parse(n.createdAt))[0]??null}function Bn(e){const n=Fn(e);if(n){const a=Oe(n.totalUsd);if(n.reason==="idle_timeout")return a?`stopped by idle timeout · charged ${a}`:"stopped by idle timeout";if(n.reason==="budget_exhausted")return a?`budget exhausted · charged ${a}`:"budget exhausted";if(e.state!=="running")return a?`receipt ${n.status} · charged ${a}`:`receipt ${n.status}`}if(e.reservation.status==="reserved"){const a=Oe(e.reservation.reservedUsd);return a?`reservation active ${a}`:"reservation active"}if(e.reservation.status==="captured"){const a=Oe(e.reservation.capturedUsd);return a?`captured ${a}`:"captured"}return e.reservation.status==="released"?"reservation released":null}function Dn(e){if(!e)return"Loading sandbox policy";const n=typeof e.quotas?.idleTimeoutSeconds=="number"&&e.quotas.idleTimeoutSeconds>0?e.quotas.idleTimeoutSeconds:null,a=Oe(e.quotas?.maxSpendUsd??e.budget.maxUsd),i=[n?`Auto-stop after ${On(n)} idle`:"Auto-stop policy unavailable"];a&&i.push(`cap ${a}`);const g=Bn(e);return g&&i.push(g),i.join(" · ")}function Yn({mode:e,busy:n,workspaceState:a,workspaceId:i,workspaceKind:g,selectedApp:u,selectedProject:l,workspaceBusy:x,defaultTeamId:p,workspaceDiff:N,managedWorkspace:c,showDiffControls:U,diffPanelOpen:I,onToggleDiffPanel:H,onRunTerminalCommand:z,onWorkspaceToolAction:v,onOpenCommitDialog:M,onWorkspaceBranchChange:V,onWorkspaceBranchCreate:X,connection:b,onBootstrap:j,onOpenSandboxWorkspace:w}){const[_,F]=m.useState(!1),[B,ae]=m.useState(!1),[Z,fe]=m.useState(""),[K,Y]=m.useState(!1),[o,P]=m.useState(!1),[E,R]=m.useState(null),[$,J]=m.useState(!1),[ce,Pe]=m.useState(!1),[de,q]=m.useState(null),[ze,Me]=m.useState([]),[se,re]=m.useState([]),[ue,xe]=m.useState([]),[Ce,me]=m.useState({status:"idle",changedFiles:0,error:null}),[D,he]=m.useState(null),ie=m.useRef(null),le=m.useRef(null),ke=!!a?.initialized,oe=!!x,Ie=!!c,ne=g==="local_project"||!!l,G=g==="sandbox"||g==="sandbox_template",W=G&&i?.trim()||null,je=G?0:N?.additions??0,qe=G?0:N?.deletions??0,ve=G?Ce.changedFiles:N?.filesChanged??a?.changedFilesCount??0,Re=ve>0,He=G?Ln(Ce):Re?`${ve} changed ${ve===1?"file":"files"}`:"No changes",_e=G?Dn(D):"",pe=a?.source!=="local_folder",Ve=ne&&a?.source==="local_folder",ee=!!a?.remoteUrl,Ae=a?.remoteUrl?.trim()??"",r=Cn(u??null),f=!!l?.sandboxTemplate?.detected,y=!!(l?.sandboxTemplate?.valid&&l.sandboxTemplate.normalizedManifest),A=l?.sandboxTemplate?.normalizedManifest??null,ge=A?Ye(A):[],xt=ge.filter(s=>s.kind==="action"),ht=ge.filter(s=>s.kind==="service"),jt=!!l?.linkedOpenPondApp?.appId,C=kt({localProject:l,organizations:ze,projects:se,agents:ue,defaultTeamId:p}),Xe=st(ze,p),Ue=ne&&f&&!jt,vt=ne&&f&&y&&(Ue||!!Ae),Le=a?Array.from(new Set([a.currentBranch,...a.branches].filter(s=>!!s))):[],St=a?.initialized?a.currentBranch??Le[0]??"No branch":"Not synced",yt=Sn(a),We=m.useMemo(()=>{const s=Z.trim().toLowerCase();return s?Le.filter(d=>d.toLowerCase().includes(s)):Le},[Le,Z]);m.useEffect(()=>{if(!_)return;function s(h){ie.current?.contains(h.target)||F(!1)}function d(h){h.key==="Escape"&&F(!1)}return document.addEventListener("pointerdown",s),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",s),document.removeEventListener("keydown",d)}},[_]),m.useEffect(()=>{_&&B&&le.current?.focus()},[B,_]),m.useEffect(()=>{if(!b||!_||!ne)return;let s=!1;return Pe(!0),q(null),O.organizations(b).then(async d=>{if(s)return;const h=d.organizations.map(Ht).filter(L=>!!L).filter(L=>L.status==="active");Me(h);const S=st(h,p);if(!S)return;const[T,Q]=await Promise.all([O.listSandboxProjects(b,{teamId:S.teamId}),O.listSandboxAgents(b,{teamId:S.teamId})]);s||(re(T.projects),xe(Q.agents))}).catch(d=>{s||q(be(d))}).finally(()=>{s||Pe(!1)}),()=>{s=!0}},[b,p,ne,_]),m.useEffect(()=>{if(!_||!G||!b||!W){me({status:"idle",changedFiles:0,error:null});return}let s=!1;return me(d=>({status:"loading",changedFiles:d.changedFiles,error:null})),O.sandboxGitStatus(b,W).then(d=>{s||me({status:"ready",changedFiles:Un(d.status?.porcelain??""),error:null})}).catch(d=>{s||me({status:"error",changedFiles:0,error:be(d)})}),()=>{s=!0}},[b,G,_,W]),m.useEffect(()=>{if(!_||!G||!b||!W){he(null);return}let s=!1;return O.sandbox(b,W).then(d=>{s||he(d.sandbox)}).catch(()=>{s||he(null)}),()=>{s=!0}},[b,G,_,W]);async function Nt(s){if(!v)return;const d=s.openPreview?sn():null;let h=s.repoUrl||Ae;if(Ue){if(ee&&!window.confirm("Replace the current origin remote with a new OpenPond repo before starting the sandbox?")){ye(d,null);return}const k=await v("publish_openpond_repo",{replaceOrigin:ee,...a?.dirty?{commitDirty:!0,commitMessage:s.commitMessage}:{}});if(!k?.ok){ye(d,null);return}h=yn(k)??h}else if(pe&&ee){if(a?.dirty&&!(await v("git_commit",{message:s.commitMessage,includeUnstaged:!0,runChecks:!1}))?.ok){ye(d,null);return}if(!(await v("git_push",{runChecks:!1}))?.ok){ye(d,null);return}}if(!h){ye(d,null);return}const S=await v("sandbox_create",{repo:h,visibility:"team",resources:s.resources,budget:{maxUsd:s.budgetUsd},quotas:{idleTimeoutSeconds:900,maxSpendUsd:s.budgetUsd},...s.env.length>0?{env:s.env}:{},...s.volumes.length>0?{volumes:s.volumes}:{},metadata:{source:"openpond-app-local-sandbox-template-start",...s.entrypointName?{entrypointName:s.entrypointName}:{},...l?.id?{localProjectId:l.id}:{},...l?.name?{projectName:l.name}:{},...A?{templateName:A.name,templateVersion:A.version,templateUseCase:A.useCase,templateTargets:ge.map(k=>({name:k.name,kind:k.kind}))}:{}},...s.openPreview&&s.previewPort?{previewPort:s.previewPort,previewLabel:s.previewLabel,previewAccess:s.previewAccess,previewAutoStart:!0}:{}}),T=an(S);if(s.openPreview&&ye(d,T),!S?.ok)return;const Q=Nn(S);for(const k of A?.setup.commands??[])if(!(await v("sandbox_exec",{command:k,timeoutSeconds:900}))?.ok)return;const L={};for(const k of s.uploads){const Se=[];for(const tt of k.files){const nt=lt(k.targetPath,tt.name),zt=await ct(tt);if(!(await v("sandbox_upload_file",{path:nt,contentsBase64:zt}))?.ok)return;Se.push(nt)}L[k.inputName]=k.multiple?Se:Se[0]??""}const Ee=Rn(s.command,{...s.params,...L});if((await v("sandbox_exec",{command:Ee,timeoutSeconds:s.timeoutSeconds??900}))?.ok){if(Q){for(const k of s.schedules)if(!(await v("sandbox_schedule_create",Pn(k,Q)))?.ok)return}Y(!1)}}async function Pt(s){if(!v)return;const d={},h=[];for(const S of s.uploads){const T=[];for(const Q of S.files){const L=lt(S.targetPath,Q.name),Ee=await ct(Q);h.push({path:L,contentsBase64:Ee}),T.push(L)}d[S.inputName]=S.multiple?T:T[0]??""}P(!1),await v("run_sandbox_template",{mode:s.mode,target:s.target,params:{...s.params,...d},...s.env.length>0?{env:s.env}:{},...h.length>0?{uploads:h}:{}})}async function Ct(s=Xe?.teamId){if(!b||!s)return;const[d,h]=await Promise.all([O.listSandboxProjects(b,{teamId:s}),O.listSandboxAgents(b,{teamId:s})]);re(d.projects),xe(h.agents)}async function It(s){if(!(!v||!l)){J(!0),q(null);try{if(!(await v("create_sandbox_template_scaffold",{manifestOnly:!0,manifestContent:ft(s.name,s.preset),name:s.name,preset:s.preset,manifestPath:s.manifestPath}))?.ok)return;R(null)}catch(d){q(be(d))}finally{J(!1)}}}async function Rt(s){if(!b||!l||!j)return;const d=s.teamId;J(!0),q(null);try{const h=In(s.sourceType,s.sourceIdentity);let S=(await O.upsertSandboxProject(b,{teamId:d,name:s.projectName,sourceType:s.sourceType,normalizedSourceIdentity:s.sourceIdentity||s.projectName,defaultBranch:s.defaultBranch||null,gitProvider:s.sourceType==="github_repo"?"github":null,gitHost:h.gitHost,gitOwner:h.gitOwner,gitRepo:h.gitRepo,internalRepoPath:h.internalRepoPath,templateRepoUrl:h.templateRepoUrl,sourceConfig:{sourceType:s.sourceType,sourceValue:s.sourceIdentity||s.projectName},metadata:{source:"openpond-app-local-project-agent-setup"}})).project;s.syncNow&&(S=(await O.syncSandboxProject(b,S.id,{teamId:d})).project);const T=await O.updateLocalProjectAgentSetup(b,l.id,{linkedSandboxProject:{teamId:d,projectId:S.id,projectSlug:S.slug,projectName:S.name,sourceRepoUrl:s.sourceIdentity||null,defaultBranch:S.defaultBranch,lastUploadedCommit:null,lastUploadTransport:null,manifestPath:S.sandboxManifestPath,manifestHash:S.sandboxManifestHash,syncedAt:S.sandboxManifestSyncedAt,linkedAt:new Date().toISOString()}});j(T.bootstrap),re(Q=>[S,...Q.filter(L=>L.id!==S.id)]),R(null)}catch(h){q(be(h))}finally{J(!1)}}async function _t(){if(!b||!l||!C.project||!j)return;const s=C.project;J(!0),q(null);try{const d=(await O.syncSandboxProject(b,s.id,{teamId:s.teamId})).project,h=await O.updateLocalProjectAgentSetup(b,l.id,{linkedSandboxProject:{teamId:d.teamId,projectId:d.id,projectSlug:d.slug,projectName:d.name,sourceRepoUrl:a?.remoteUrl??l.linkedSandboxProject?.sourceRepoUrl??null,defaultBranch:d.defaultBranch,lastUploadedCommit:l.linkedSandboxProject?.lastUploadedCommit??null,lastUploadTransport:l.linkedSandboxProject?.lastUploadTransport??null,manifestPath:d.sandboxManifestPath,manifestHash:d.sandboxManifestHash,syncedAt:d.sandboxManifestSyncedAt,linkedAt:l.linkedSandboxProject?.linkedAt??new Date().toISOString()}});j(h.bootstrap),re(S=>[d,...S.filter(T=>T.id!==d.id)]),R(null)}catch(d){q(be(d))}finally{J(!1)}}async function At(s){if(!b||!l||!C.project||!j)return;const d=C.project;J(!0),q(null);try{const h=(await O.upsertSandboxAgent(b,{teamId:d.teamId,projectId:d.id,name:s.agentName,selectedEntrypoint:{scope:"entire_manifest",name:null},triggerType:"manual",backgroundTaskPolicy:{},defaultWorkflowMode:"attempt",defaultResourcePolicy:{},metadata:{source:"openpond-app-local-project-agent-setup"}})).agent;let S=null,T=null;if(s.createTestRun){const L=await O.runSandboxAgent(b,h.id,{teamId:d.teamId,triggerType:"manual",metadata:{source:"openpond-app-local-project-agent-setup"}});S=L.sandbox??null,T=S?.id??L.run.sandboxId??null}const Q=await O.updateLocalProjectAgentSetup(b,l.id,{preferredSandboxAgentId:h.id});j(Q.bootstrap),xe(L=>[h,...L.filter(Ee=>Ee.id!==h.id)]),R(null),T&&await w?.({sandboxId:T,name:it(S)??`${h.name} sandbox`})}catch(h){q(be(h))}finally{J(!1)}}async function Et(){if(!(!b||!C.agent)){J(!0),q(null);try{const s=await O.runSandboxAgent(b,C.agent.id,{teamId:C.agent.teamId,triggerType:"manual",metadata:{source:"openpond-app-local-project-agent-setup"}});await Ct(C.agent.teamId),R(null);const d=s.sandbox?.id??s.run.sandboxId;d&&await w?.({sandboxId:d,name:it(s.sandbox??null)??`${C.agent.name} sandbox`})}catch(s){q(be(s))}finally{J(!1)}}}const{gitActionItems:wt,sandboxActionItems:$t}=$n({canCreateSandboxProject:vt,canInitGit:Ve,defaultSandboxRepoUrl:r??"",gitWorkspace:pe,hasRemote:ee,isProjectWorkspace:ne,isSandboxWorkspace:G,managed:Ie,onOpenCommitDialog:M,onRunTerminalCommand:z,onWorkspaceToolAction:v,projectSandboxTemplate:f,projectSandboxTemplateValid:y,sandboxTemplateActionTargetCount:xt.length,sandboxTemplateServiceTargets:ht,sandboxResumeTarget:D?{id:D.id,runtimeId:D.runtimeId??null,teamId:D.teamId??null,projectId:D.projectId??null,state:D.state??null}:null,selectedApp:u,selectedProject:l,setSandboxCreateDialogOpen:Y,setSandboxRunActionDialogOpen:P,workspaceBusyValue:oe,workspaceReady:ke,workspaceState:a});if(!a)return null;function et(s){F(!1),s.onSelect()}return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:`workspace-environment-menu ${e==="dock"?"open-up":""} ${e==="topbar"?"topbar":""}`,ref:ie,children:[t.jsx("button",{type:"button",className:`environment-info-button ${e==="topbar"?"titlebar-icon":"composer-icon"} ${_?"active":""}`,title:"Environment","data-tooltip":"Environment","aria-label":"Environment","aria-haspopup":"menu","aria-expanded":_,onClick:()=>F(s=>!s),children:t.jsx(Zt,{size:16})}),_&&t.jsxs("div",{className:"environment-popover",role:"menu","aria-label":"Environment",children:[t.jsx("div",{className:"environment-popover-header",children:t.jsx("span",{children:"Environment"})}),ne&&l?t.jsxs("button",{type:"button",className:"environment-row",disabled:ce||!C.canAct||$,title:ce?"Loading Agent setup state":C.reason??"Set up this project as an Agent",onClick:()=>{ce||!C.canAct||(C.state==="missing_config"&&R("config"),C.state==="needs_project"&&R("connect"),C.state==="needs_sync"&&R("sync"),C.state==="needs_agent"&&R("agent"),C.state==="ready"&&R("run"),F(!1))},children:[t.jsx(we,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Agent setup"}),t.jsx("small",{children:ce?"Loading setup state":vn(C.state,C.reason)})]}),t.jsx("span",{className:"environment-row-action",children:$?"Working":ce?"Loading":C.actionLabel})]}):null,t.jsxs("button",{type:"button",className:`environment-row ${I?"active":""}`,disabled:!U||!H,onClick:()=>{F(!1),H?.()},children:[t.jsx(Vt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Changes"}),t.jsx("small",{children:He})]}),!G&&(Re||N)&&t.jsxs("span",{className:"environment-change-counts",children:[t.jsxs("span",{className:"diff-addition",children:["+",je]}),t.jsxs("span",{className:"diff-deletion",children:["-",qe]})]})]}),t.jsxs("div",{className:"environment-row static",children:[t.jsx(Yt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:yt}),t.jsx("small",{children:a.repoPath||a.workspacePath})]})]}),G?t.jsxs("div",{className:"environment-row static",title:_e,children:[t.jsx(Xt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Idle cleanup"}),t.jsx("small",{children:_e})]})]}):null,t.jsxs("button",{type:"button",className:`environment-row ${B?"active":""}`,disabled:Ie||!pe||n||oe||!a.initialized,"aria-expanded":B,onClick:()=>ae(s=>!s),children:[t.jsx(Ke,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:St}),t.jsx("small",{children:Ie?"Managed workspace":pe?"Branch":"Git not initialized"})]}),t.jsx(Jt,{size:13})]}),B&&t.jsxs("div",{className:"environment-branch-panel",children:[t.jsxs("label",{className:"environment-branch-search",children:[t.jsx(Kt,{size:13}),t.jsx("input",{ref:le,value:Z,placeholder:"Search branches",onChange:s=>fe(s.target.value)})]}),t.jsxs("div",{className:"environment-branch-list",children:[We.map(s=>{const d=s===a.currentBranch,h=n||a.dirty&&!d;return t.jsxs("button",{type:"button",className:d?"selected":"",disabled:h,role:"menuitemradio","aria-checked":d,title:h&&!d?"Commit or discard local changes before switching branches.":s,onClick:()=>{F(!1),d||V?.(s)},children:[t.jsx(Ke,{size:13}),t.jsxs("span",{children:[t.jsx("strong",{children:s}),d&&a.dirty&&t.jsxs("small",{children:["Uncommitted: ",a.changedFilesCount," ",a.changedFilesCount===1?"file":"files"]})]}),d&&t.jsx(Qt,{size:14})]},s)}),We.length===0&&t.jsx("div",{className:"environment-branch-empty",children:"No branches found"})]}),t.jsxs("button",{type:"button",className:"environment-branch-create",disabled:n||!a.initialized||!X,onClick:()=>{F(!1),X?.()},children:[t.jsx(Ke,{size:14}),t.jsx("span",{children:"Create branch"})]})]}),t.jsx("div",{className:"environment-section-title",children:"Git"}),wt.map(s=>t.jsxs("button",{type:"button",className:"environment-action",disabled:s.disabled,onClick:()=>et(s),children:[s.icon,t.jsx("span",{children:s.label})]},s.label)),t.jsx("div",{className:"environment-section-title",children:"Sandbox"}),$t.map(s=>t.jsxs("button",{type:"button",className:"environment-action",disabled:s.disabled,onClick:()=>et(s),children:[s.icon,t.jsx("span",{children:s.label})]},s.label))]})]}),K&&t.jsx(hn,{busy:oe,commitBeforeCreate:(Ue||pe&&ee)&&!!a?.dirty,defaultRepoUrl:Ae,projectName:l?.name??"sandbox template",templateManifest:l?.sandboxTemplate?.normalizedManifest??null,uploadBeforeCreate:Ue,onClose:()=>{oe||Y(!1)},onSubmit:s=>{Nt(s)}}),o&&t.jsx(jn,{busy:oe,projectName:l?.name??"sandbox template",templateManifest:l?.sandboxTemplate?.normalizedManifest??null,onClose:()=>{oe||P(!1)},onSubmit:s=>{Pt(s)}}),E==="config"&&l?t.jsx(zn,{busy:$,error:de,projectName:l.name,onClose:()=>!$&&R(null),onSubmit:s=>{It(s)}}):null,E==="connect"&&l&&Xe?t.jsx(Mn,{busy:$,error:de,defaultTeamId:Xe.teamId,projectName:l.name,sourceIdentity:a?.remoteUrl??"",defaultBranch:a?.currentBranch??"main",onClose:()=>!$&&R(null),onSubmit:s=>{Rt(s)}}):null,E==="sync"&&C.project?t.jsx(dt,{busy:$,error:de,title:"Sync Project",actionLabel:"Sync Project",summary:`${C.project.name} · ${C.project.sandboxManifestPath??Ne}`,onClose:()=>!$&&R(null),onSubmit:()=>{_t()}}):null,E==="agent"&&C.project?t.jsx(qn,{busy:$,error:de,defaultName:`${l?.name??C.project.name} Agent`,onClose:()=>!$&&R(null),onSubmit:s=>{At(s)}}):null,E==="run"&&C.agent?t.jsx(dt,{busy:$,error:de,title:"Run Agent",actionLabel:"Run Agent",summary:C.agent.name,onClose:()=>!$&&R(null),onSubmit:()=>{Et()}}):null]})}export{Yn as WorkspaceEnvironmentMenu,On as formatIdleTimeout,Ln as sandboxChangeLabel,Un as sandboxChangedFileCount,Dn as sandboxRuntimePolicyLabel};
31
+ command: pnpm hello`}function vn(e,n){return n||(e==="missing_config"?`${Ne} missing`:e==="needs_project"?"Local config is ready":e==="needs_sync"?"Project needs manifest sync":e==="needs_agent"?"Project is synced":e==="ready"?"Agent is ready":"Setup unavailable")}function Sn(e){return e?.source==="openpond"?"OpenPond Git":e?.source==="github"?"GitHub":e?.source==="local_git"?"Local Git":e?.source==="local_folder"?"Local folder":"Workspace"}function yn(e){const n=De(e.data),a=De(n.remote);return(typeof a.remoteUrl=="string"?a.remoteUrl.trim():"")||null}function Nn(e){const n=De(e.data),a=De(n.sandbox);return(typeof a.id=="string"?a.id.trim():"")||null}function it(e){return e?typeof e.metadata?.name=="string"&&e.metadata.name.trim()?e.metadata.name.trim():e.projectId?`Project sandbox ${Ze(e.id)}`:e.agentId?`Agent sandbox ${Ze(e.id)}`:`Sandbox ${Ze(e.id)}`:null}function Pn(e,n){return{sourceSandboxId:n,name:e.name,...e.description?{description:e.description}:{},scheduleType:e.scheduleType,scheduleExpression:e.scheduleExpression,enabled:!0,...e.timezone?{timezone:e.timezone}:{},...e.startAt?{startAt:e.startAt}:{},...e.endAt?{endAt:e.endAt}:{},...e.maxRuns!==void 0?{maxRuns:e.maxRuns}:{},...e.runtimePolicy?{runtimePolicy:e.runtimePolicy}:{},target:e.target,...e.budget?{budget:e.budget}:{},...e.resources?{resources:e.resources}:{},...e.quotas?{quotas:e.quotas}:{},...e.lifecycle?{lifecycle:e.lifecycle}:{},...e.retentionPolicy?{retentionPolicy:e.retentionPolicy}:{},...e.env?{env:e.env}:{},...e.integrationLeases?{integrationLeases:e.integrationLeases}:{},metadata:e.metadata??{},managementSource:"openpond.yaml",manifestPath:Ne}}function Cn(e){const n=e?.gitOwner?.trim()??"",a=e?.gitRepo?.trim()??"",i=e?.gitHost?.trim()??"";if(!n||!a||!i)return null;const g=a.endsWith(".git")?a:`${a}.git`;return/^https?:\/\//i.test(i)?`${i.replace(/\/+$/,"")}/${n}/${g}`:`https://${i.replace(/\/+$/,"")}/${n}/${g}`}function In(e,n){const a=n.trim();if(e==="github_repo"){const i=a.replace(/^https:\/\/github\.com\//i,"").replace(/^git@github\.com:/i,"").replace(/\.git$/i,""),[g,u]=i.split("/").filter(Boolean);return{gitHost:"github.com",gitOwner:g??null,gitRepo:u??null,internalRepoPath:null,templateRepoUrl:null}}return e==="internal_repo"?{gitHost:"openpond.ai",gitOwner:null,gitRepo:a.split("/").filter(Boolean).at(-1)??null,internalRepoPath:a||null,templateRepoUrl:null}:e==="template"?{gitHost:null,gitOwner:null,gitRepo:null,internalRepoPath:null,templateRepoUrl:a||null}:{gitHost:null,gitOwner:null,gitRepo:null,internalRepoPath:null,templateRepoUrl:null}}function lt(e,n){const a=e.trim().replace(/^\/+/,"").replace(/^workspace\//,"").replace(/\/+$/,""),i=n.trim().replace(/[/\\]+/g,"-").replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"upload";return`${a||"uploads"}/${i}`}function Rn(e,n){return`OPENPOND_REPLAY_PARAMS_BASE64='${En({input:n})}' ${e}`}function _n(e,n,a){return["cd",ot(e),"&&","openpond","sandbox-template",n,"--file",Ne,"--target",ot(a)].join(" ")}function ot(e){return`'${e.replace(/'/g,"'\\''")}'`}function ct(e){return new Promise((n,a)=>{const i=new FileReader;i.onload=()=>{const g=typeof i.result=="string"?i.result:"",[,u=""]=g.split(",",2);n(u)},i.onerror=()=>a(i.error??new Error("Failed to read file")),i.readAsDataURL(e)})}function En(e){const n=JSON.stringify(e),a=new TextEncoder().encode(n);let i="";for(const g of a)i+=String.fromCharCode(g);return window.btoa(i)}function De(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function be(e){return e instanceof Error?e.message:String(e)}function Ze(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}async function An(e){e&&(await e("sandbox_preserve_source"),await e("sandbox_stop"))}function wn(e){return{...e.teamId?{teamId:e.teamId}:{},...e.projectId?{projectId:e.projectId}:{},runtime:{runtimeId:e.runtimeId},visibility:"team",budget:{maxUsd:"0.05"},quotas:{idleTimeoutSeconds:900,maxSpendUsd:"0.05"},metadata:{source:"openpond-app-environment-menu-sandbox-resume",resumeSandboxId:e.id,previousState:e.state}}}function $n({canCreateSandboxProject:e,canInitGit:n,defaultSandboxRepoUrl:a,gitWorkspace:i,hasRemote:g,isProjectWorkspace:u,isSandboxWorkspace:l,managed:x,onOpenCommitDialog:p,onRunTerminalCommand:N,onWorkspaceToolAction:c,projectSandboxTemplate:U,projectSandboxTemplateValid:I,sandboxTemplateActionTargetCount:H,sandboxTemplateServiceTargets:z,sandboxResumeTarget:v,selectedApp:M,selectedProject:V,setSandboxCreateDialogOpen:X,setSandboxRunActionDialogOpen:b,workspaceBusyValue:j,workspaceReady:w,workspaceState:_}){const F=[{icon:t.jsx(Ot,{size:14}),label:"Initialize Git",disabled:x||!n||j||!w||!c,onSelect:()=>c?.("git_init")},{icon:t.jsx(Wt,{size:14}),label:"Commit changes",disabled:x||!i||j||!w||!_?.dirty||!p,onSelect:()=>p?.("commit")},{icon:t.jsx(rt,{size:14}),label:"Push branch",disabled:x||!i||j||!w||!g||!c,onSelect:()=>c?.("git_push")},{icon:t.jsx(Je,{size:14}),label:"Fetch remote",disabled:x||!i||j||!w||!g||!c,onSelect:()=>c?.("git_fetch")},{icon:t.jsx(Ft,{size:14}),label:"Create PR",disabled:!0,onSelect:()=>{}}],B=[...U?[]:[{icon:t.jsx(we,{size:14}),label:"Create sandbox template",disabled:x||j||!w||!c,onSelect:()=>c?.("create_sandbox_template_scaffold")}],{icon:t.jsx(at,{size:14}),label:`Validate ${Ne}`,disabled:x||j||!w||!c,onSelect:()=>c?.("validate_sandbox_template")},{icon:t.jsx(nn,{size:14}),label:"Build template",disabled:x||j||!w||!c,onSelect:()=>c?.("build_sandbox_template")},{icon:t.jsx($e,{size:14}),label:"Run start locally",disabled:x||j||!w||!c,onSelect:()=>c?.("run_sandbox_template",{mode:"local",target:"start"})},{icon:t.jsx($e,{size:14}),label:"Run action",disabled:x||j||!w||!I||H===0,onSelect:()=>b(!0)},...z.map(K=>({icon:t.jsx(Bt,{size:14}),label:`Dev ${K.name} locally`,disabled:x||j||!w||!I||!V?.sandboxTemplate?.rootPath||!N,onSelect:()=>N?.(_n(V?.sandboxTemplate?.rootPath??"","dev",K.name))})),{icon:t.jsx(we,{size:14}),label:"Start sandbox",disabled:x||j||!w||!e,onSelect:()=>X(!0)}],ae=[{icon:t.jsx(Je,{size:14}),label:"Sandbox status",disabled:j||!c,onSelect:()=>c?.("sandbox_status")},{icon:t.jsx($e,{size:14}),label:"Resume sandbox",disabled:j||!c||!v?.runtimeId||v.state==="running"||v.state==="creating",onSelect:()=>v?.runtimeId?c?.("sandbox_create",wn(v)):void 0},{icon:t.jsx(Dt,{size:14}),label:"Sandbox logs",disabled:j||!c,onSelect:()=>c?.("sandbox_logs")},{icon:t.jsx(at,{size:14}),label:"Receipts",disabled:j||!c,onSelect:()=>c?.("sandbox_receipts")},{icon:t.jsx(Gt,{size:14}),label:"Export patch",disabled:j||!c,onSelect:()=>c?.("sandbox_git_export_patch")},{icon:t.jsx(rt,{size:14}),label:"Apply locally",disabled:j||!c,onSelect:()=>c?.("sandbox_git_apply_patch_local")},{icon:t.jsx(en,{size:14}),label:"Checkpoint and stop",disabled:j||!c,onSelect:()=>An(c)}];return{gitActionItems:F,sandboxActionItems:l?ae:u?B:[{icon:t.jsx(we,{size:14}),label:a?"Create sandbox from repo":"Create sandbox",disabled:j||!c,onSelect:()=>c?.("sandbox_create",{...a?{repo:a}:{},visibility:"team",budget:{maxUsd:"0.05"},quotas:{maxSpendUsd:"0.05"},metadata:{source:"openpond-app-environment-menu-sandbox",...M?.name?{appName:M.name}:{}}})},{icon:t.jsx(Je,{size:14}),label:"List templates",disabled:j||!c,onSelect:()=>c?.("sandbox_templates")}]}}function zn({busy:e,error:n,projectName:a,onClose:i,onSubmit:g}){const[u,l]=m.useState("action"),[x,p]=m.useState(Ne),N=a.trim()||"local-agent";return t.jsxs(Ge,{title:"Add Agent config",busy:e,error:n,onClose:i,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Template preset"}),t.jsxs("select",{value:u,onChange:c=>l(c.target.value),disabled:e,children:[t.jsx("option",{value:"action",children:"Action"}),t.jsx("option",{value:"cron",children:"Cron"}),t.jsx("option",{value:"background",children:"Background worker"}),t.jsx("option",{value:"resources",children:"Resource profile"})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Manifest path"}),t.jsx("input",{value:x,onChange:c=>p(c.target.value),disabled:e})]}),t.jsx("pre",{children:ft(N,u)}),t.jsx(Te,{busy:e,actionLabel:"Write config",canSubmit:!!x.trim(),onClose:i,onSubmit:()=>g({name:N,preset:u,manifestPath:x.trim()})})]})}function Mn({busy:e,defaultBranch:n,defaultTeamId:a,error:i,projectName:g,sourceIdentity:u,onClose:l,onSubmit:x}){const p=a,[N,c]=m.useState(g),[U,I]=m.useState(/github\.com[:/]/i.test(u)?"github_repo":"manual"),[H,z]=m.useState(u),[v,M]=m.useState(n||"main"),[V,X]=m.useState(!0);return t.jsxs(Ge,{title:"Connect Project",busy:e,error:i,onClose:l,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Project name"}),t.jsx("input",{value:N,onChange:b=>c(b.target.value),disabled:e})]}),t.jsxs("div",{className:"agent-setup-two-col",children:[t.jsxs("label",{children:[t.jsx("span",{children:"Source type"}),t.jsxs("select",{value:U,onChange:b=>I(b.target.value),disabled:e,children:[t.jsx("option",{value:"manual",children:"Manual"}),t.jsx("option",{value:"github_repo",children:"GitHub repo"}),t.jsx("option",{value:"internal_repo",children:"Internal repo"}),t.jsx("option",{value:"template",children:"Template"})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Default branch"}),t.jsx("input",{value:v,onChange:b=>M(b.target.value),disabled:e})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Source identity"}),t.jsx("input",{value:H,onChange:b=>z(b.target.value),disabled:e})]}),t.jsxs("label",{className:"agent-setup-check",children:[t.jsx("input",{type:"checkbox",checked:V,onChange:b=>X(b.target.checked),disabled:e}),t.jsx("span",{children:"Sync now"})]}),t.jsx(Te,{busy:e,actionLabel:V?"Connect and sync":"Connect Project",canSubmit:!!(N.trim()&&p),onClose:l,onSubmit:()=>x({teamId:p,projectName:N.trim(),sourceType:U,sourceIdentity:H.trim(),defaultBranch:v.trim(),syncNow:V})})]})}function qn({busy:e,defaultName:n,error:a,onClose:i,onSubmit:g}){const[u,l]=m.useState(n),[x,p]=m.useState(!0);return t.jsxs(Ge,{title:"Create Agent",busy:e,error:a,onClose:i,children:[t.jsxs("label",{children:[t.jsx("span",{children:"Agent name"}),t.jsx("input",{value:u,onChange:N=>l(N.target.value),disabled:e})]}),t.jsx("div",{className:"agent-setup-summary",children:"Entire manifest · Manual trigger · Package defaults"}),t.jsxs("label",{className:"agent-setup-check",children:[t.jsx("input",{type:"checkbox",checked:x,onChange:N=>p(N.target.checked),disabled:e}),t.jsx("span",{children:"Create and test run"})]}),t.jsx(Te,{busy:e,actionLabel:"Create Agent",canSubmit:!!u.trim(),onClose:i,onSubmit:()=>g({agentName:u.trim(),createTestRun:x})})]})}function dt({actionLabel:e,busy:n,error:a,summary:i,title:g,onClose:u,onSubmit:l}){return t.jsxs(Ge,{title:g,busy:n,error:a,onClose:u,children:[t.jsx("div",{className:"agent-setup-summary",children:i}),t.jsx(Te,{busy:n,actionLabel:e,canSubmit:!0,onClose:u,onSubmit:l})]})}function Ge({busy:e,children:n,error:a,title:i,onClose:g}){return Tt(a),t.jsx("div",{className:"agent-setup-dialog-backdrop",role:"presentation",onMouseDown:g,children:t.jsxs("section",{className:"agent-setup-dialog",role:"dialog","aria-modal":"true","aria-label":i,onMouseDown:u=>u.stopPropagation(),children:[t.jsxs("header",{children:[t.jsx("h3",{children:i}),t.jsx("button",{type:"button",disabled:e,onClick:g,children:"Close"})]}),t.jsx("div",{className:"agent-setup-fields",children:n})]})})}function Te({actionLabel:e,busy:n,canSubmit:a,onClose:i,onSubmit:g}){return t.jsxs("div",{className:"agent-setup-dialog-actions",children:[t.jsx("button",{type:"button",disabled:n,onClick:i,children:"Cancel"}),t.jsx("button",{type:"button",disabled:n||!a,onClick:g,children:n?"Working":e})]})}function Un(e){return e.split(`
32
+ `).filter(n=>n.trim()).length}function Ln(e){return e.status==="loading"?"Checking sandbox changes":e.status==="error"?"Sandbox status unavailable":e.status!=="ready"?"Sandbox changes unknown":e.changedFiles===0?"Sandbox clean":`${e.changedFiles} sandbox changed ${e.changedFiles===1?"file":"files"}`}function On(e){return e>0&&e%3600===0?`${e/3600} hr`:e>0&&e%60===0?`${e/60} min`:`${e} sec`}function Oe(e){const n=e?.trim();if(!n)return null;if(n.startsWith("$"))return n;const a=Number(n);if(!Number.isFinite(a))return`$${n}`;if(a===0)return"$0";const i=a>=1?2:4;return`$${a.toFixed(i).replace(/0+$/,"").replace(/\.$/,"")}`}function Fn(e){return e.receipts.slice().sort((n,a)=>Date.parse(a.createdAt)-Date.parse(n.createdAt))[0]??null}function Bn(e){const n=Fn(e);if(n){const a=Oe(n.totalUsd);if(n.reason==="idle_timeout")return a?`stopped by idle timeout · charged ${a}`:"stopped by idle timeout";if(n.reason==="budget_exhausted")return a?`budget exhausted · charged ${a}`:"budget exhausted";if(e.state!=="running")return a?`receipt ${n.status} · charged ${a}`:`receipt ${n.status}`}if(e.reservation.status==="reserved"){const a=Oe(e.reservation.reservedUsd);return a?`reservation active ${a}`:"reservation active"}if(e.reservation.status==="captured"){const a=Oe(e.reservation.capturedUsd);return a?`captured ${a}`:"captured"}return e.reservation.status==="released"?"reservation released":null}function Dn(e){if(!e)return"Loading sandbox policy";const n=typeof e.quotas?.idleTimeoutSeconds=="number"&&e.quotas.idleTimeoutSeconds>0?e.quotas.idleTimeoutSeconds:null,a=Oe(e.quotas?.maxSpendUsd??e.budget.maxUsd),i=[n?`Auto-stop after ${On(n)} idle`:"Auto-stop policy unavailable"];a&&i.push(`cap ${a}`);const g=Bn(e);return g&&i.push(g),i.join(" · ")}function Yn({mode:e,busy:n,workspaceState:a,workspaceId:i,workspaceKind:g,selectedApp:u,selectedProject:l,workspaceBusy:x,defaultTeamId:p,workspaceDiff:N,managedWorkspace:c,showDiffControls:U,diffPanelOpen:I,onToggleDiffPanel:H,onRunTerminalCommand:z,onWorkspaceToolAction:v,onOpenCommitDialog:M,onWorkspaceBranchChange:V,onWorkspaceBranchCreate:X,connection:b,onBootstrap:j,onOpenSandboxWorkspace:w}){const[_,F]=m.useState(!1),[B,ae]=m.useState(!1),[Z,fe]=m.useState(""),[K,Y]=m.useState(!1),[o,P]=m.useState(!1),[A,R]=m.useState(null),[$,J]=m.useState(!1),[ce,Pe]=m.useState(!1),[de,q]=m.useState(null),[ze,Me]=m.useState([]),[se,re]=m.useState([]),[ue,xe]=m.useState([]),[Ce,me]=m.useState({status:"idle",changedFiles:0,error:null}),[D,he]=m.useState(null),ie=m.useRef(null),le=m.useRef(null),ke=!!a?.initialized,oe=!!x,Ie=!!c,ne=g==="local_project"||!!l,G=g==="sandbox"||g==="sandbox_template",W=G&&i?.trim()||null,je=G?0:N?.additions??0,qe=G?0:N?.deletions??0,ve=G?Ce.changedFiles:N?.filesChanged??a?.changedFilesCount??0,Re=ve>0,He=G?Ln(Ce):Re?`${ve} changed ${ve===1?"file":"files"}`:"No changes",_e=G?Dn(D):"",pe=a?.source!=="local_folder",Ve=ne&&a?.source==="local_folder",ee=!!a?.remoteUrl,Ee=a?.remoteUrl?.trim()??"",r=Cn(u??null),f=!!l?.sandboxTemplate?.detected,y=!!(l?.sandboxTemplate?.valid&&l.sandboxTemplate.normalizedManifest),E=l?.sandboxTemplate?.normalizedManifest??null,ge=E?Ye(E):[],xt=ge.filter(s=>s.kind==="action"),ht=ge.filter(s=>s.kind==="service"),jt=!!l?.linkedOpenPondApp?.appId,C=kt({localProject:l,organizations:ze,projects:se,agents:ue,defaultTeamId:p}),Xe=st(ze,p),Ue=ne&&f&&!jt,vt=ne&&f&&y&&(Ue||!!Ee),Le=a?Array.from(new Set([a.currentBranch,...a.branches].filter(s=>!!s))):[],St=a?.initialized?a.currentBranch??Le[0]??"No branch":"Not synced",yt=Sn(a),We=m.useMemo(()=>{const s=Z.trim().toLowerCase();return s?Le.filter(d=>d.toLowerCase().includes(s)):Le},[Le,Z]);m.useEffect(()=>{if(!_)return;function s(h){ie.current?.contains(h.target)||F(!1)}function d(h){h.key==="Escape"&&F(!1)}return document.addEventListener("pointerdown",s),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",s),document.removeEventListener("keydown",d)}},[_]),m.useEffect(()=>{_&&B&&le.current?.focus()},[B,_]),m.useEffect(()=>{if(!b||!_||!ne)return;let s=!1;return Pe(!0),q(null),O.organizations(b).then(async d=>{if(s)return;const h=d.organizations.map(Ht).filter(L=>!!L).filter(L=>L.status==="active");Me(h);const S=st(h,p);if(!S)return;const[T,Q]=await Promise.all([O.listSandboxProjects(b,{teamId:S.teamId}),O.listSandboxAgents(b,{teamId:S.teamId})]);s||(re(T.projects),xe(Q.agents))}).catch(d=>{s||q(be(d))}).finally(()=>{s||Pe(!1)}),()=>{s=!0}},[b,p,ne,_]),m.useEffect(()=>{if(!_||!G||!b||!W){me({status:"idle",changedFiles:0,error:null});return}let s=!1;return me(d=>({status:"loading",changedFiles:d.changedFiles,error:null})),O.sandboxGitStatus(b,W).then(d=>{s||me({status:"ready",changedFiles:Un(d.status?.porcelain??""),error:null})}).catch(d=>{s||me({status:"error",changedFiles:0,error:be(d)})}),()=>{s=!0}},[b,G,_,W]),m.useEffect(()=>{if(!_||!G||!b||!W){he(null);return}let s=!1;return O.sandbox(b,W).then(d=>{s||he(d.sandbox)}).catch(()=>{s||he(null)}),()=>{s=!0}},[b,G,_,W]);async function Nt(s){if(!v)return;const d=s.openPreview?sn():null;let h=s.repoUrl||Ee;if(Ue){if(ee&&!window.confirm("Replace the current origin remote with a new OpenPond repo before starting the sandbox?")){ye(d,null);return}const k=await v("publish_openpond_repo",{replaceOrigin:ee,...a?.dirty?{commitDirty:!0,commitMessage:s.commitMessage}:{}});if(!k?.ok){ye(d,null);return}h=yn(k)??h}else if(pe&&ee){if(a?.dirty&&!(await v("git_commit",{message:s.commitMessage,includeUnstaged:!0,runChecks:!1}))?.ok){ye(d,null);return}if(!(await v("git_push",{runChecks:!1}))?.ok){ye(d,null);return}}if(!h){ye(d,null);return}const S=await v("sandbox_create",{repo:h,visibility:"team",resources:s.resources,budget:{maxUsd:s.budgetUsd},quotas:{idleTimeoutSeconds:900,maxSpendUsd:s.budgetUsd},...s.env.length>0?{env:s.env}:{},...s.volumes.length>0?{volumes:s.volumes}:{},metadata:{source:"openpond-app-local-sandbox-template-start",...s.entrypointName?{entrypointName:s.entrypointName}:{},...l?.id?{localProjectId:l.id}:{},...l?.name?{projectName:l.name}:{},...E?{templateName:E.name,templateVersion:E.version,templateUseCase:E.useCase,templateTargets:ge.map(k=>({name:k.name,kind:k.kind}))}:{}},...s.openPreview&&s.previewPort?{previewPort:s.previewPort,previewLabel:s.previewLabel,previewAccess:s.previewAccess,previewAutoStart:!0}:{}}),T=an(S);if(s.openPreview&&ye(d,T),!S?.ok)return;const Q=Nn(S);for(const k of E?.setup.commands??[])if(!(await v("sandbox_exec",{command:k,timeoutSeconds:900}))?.ok)return;const L={};for(const k of s.uploads){const Se=[];for(const tt of k.files){const nt=lt(k.targetPath,tt.name),zt=await ct(tt);if(!(await v("sandbox_upload_file",{path:nt,contentsBase64:zt}))?.ok)return;Se.push(nt)}L[k.inputName]=k.multiple?Se:Se[0]??""}const Ae=Rn(s.command,{...s.params,...L});if((await v("sandbox_exec",{command:Ae,timeoutSeconds:s.timeoutSeconds??900}))?.ok){if(Q){for(const k of s.schedules)if(!(await v("sandbox_schedule_create",Pn(k,Q)))?.ok)return}Y(!1)}}async function Pt(s){if(!v)return;const d={},h=[];for(const S of s.uploads){const T=[];for(const Q of S.files){const L=lt(S.targetPath,Q.name),Ae=await ct(Q);h.push({path:L,contentsBase64:Ae}),T.push(L)}d[S.inputName]=S.multiple?T:T[0]??""}P(!1),await v("run_sandbox_template",{mode:s.mode,target:s.target,params:{...s.params,...d},...s.env.length>0?{env:s.env}:{},...h.length>0?{uploads:h}:{}})}async function Ct(s=Xe?.teamId){if(!b||!s)return;const[d,h]=await Promise.all([O.listSandboxProjects(b,{teamId:s}),O.listSandboxAgents(b,{teamId:s})]);re(d.projects),xe(h.agents)}async function It(s){if(!(!v||!l)){J(!0),q(null);try{if(!(await v("create_sandbox_template_scaffold",{manifestOnly:!0,manifestContent:ft(s.name,s.preset),name:s.name,preset:s.preset,manifestPath:s.manifestPath}))?.ok)return;R(null)}catch(d){q(be(d))}finally{J(!1)}}}async function Rt(s){if(!b||!l||!j)return;const d=s.teamId;J(!0),q(null);try{const h=In(s.sourceType,s.sourceIdentity);let S=(await O.upsertSandboxProject(b,{teamId:d,name:s.projectName,sourceType:s.sourceType,normalizedSourceIdentity:s.sourceIdentity||s.projectName,defaultBranch:s.defaultBranch||null,gitProvider:s.sourceType==="github_repo"?"github":null,gitHost:h.gitHost,gitOwner:h.gitOwner,gitRepo:h.gitRepo,internalRepoPath:h.internalRepoPath,templateRepoUrl:h.templateRepoUrl,sourceConfig:{sourceType:s.sourceType,sourceValue:s.sourceIdentity||s.projectName},metadata:{source:"openpond-app-local-project-agent-setup"}})).project;s.syncNow&&(S=(await O.syncSandboxProject(b,S.id,{teamId:d})).project);const T=await O.updateLocalProjectAgentSetup(b,l.id,{linkedSandboxProject:{teamId:d,projectId:S.id,projectSlug:S.slug,projectName:S.name,sourceRepoUrl:s.sourceIdentity||null,defaultBranch:S.defaultBranch,lastUploadedCommit:null,lastUploadTransport:null,manifestPath:S.sandboxManifestPath,manifestHash:S.sandboxManifestHash,syncedAt:S.sandboxManifestSyncedAt,linkedAt:new Date().toISOString()}});j(T.bootstrap),re(Q=>[S,...Q.filter(L=>L.id!==S.id)]),R(null)}catch(h){q(be(h))}finally{J(!1)}}async function _t(){if(!b||!l||!C.project||!j)return;const s=C.project;J(!0),q(null);try{const d=(await O.syncSandboxProject(b,s.id,{teamId:s.teamId})).project,h=await O.updateLocalProjectAgentSetup(b,l.id,{linkedSandboxProject:{teamId:d.teamId,projectId:d.id,projectSlug:d.slug,projectName:d.name,sourceRepoUrl:a?.remoteUrl??l.linkedSandboxProject?.sourceRepoUrl??null,defaultBranch:d.defaultBranch,lastUploadedCommit:l.linkedSandboxProject?.lastUploadedCommit??null,lastUploadTransport:l.linkedSandboxProject?.lastUploadTransport??null,manifestPath:d.sandboxManifestPath,manifestHash:d.sandboxManifestHash,syncedAt:d.sandboxManifestSyncedAt,linkedAt:l.linkedSandboxProject?.linkedAt??new Date().toISOString()}});j(h.bootstrap),re(S=>[d,...S.filter(T=>T.id!==d.id)]),R(null)}catch(d){q(be(d))}finally{J(!1)}}async function Et(s){if(!b||!l||!C.project||!j)return;const d=C.project;J(!0),q(null);try{const h=(await O.upsertSandboxAgent(b,{teamId:d.teamId,projectId:d.id,name:s.agentName,selectedEntrypoint:{scope:"entire_manifest",name:null},triggerType:"manual",backgroundTaskPolicy:{},defaultWorkflowMode:"attempt",defaultResourcePolicy:{},metadata:{source:"openpond-app-local-project-agent-setup"}})).agent;let S=null,T=null;if(s.createTestRun){const L=await O.runSandboxAgent(b,h.id,{teamId:d.teamId,triggerType:"manual",metadata:{source:"openpond-app-local-project-agent-setup"}});S=L.sandbox??null,T=S?.id??L.run.sandboxId??null}const Q=await O.updateLocalProjectAgentSetup(b,l.id,{preferredSandboxAgentId:h.id});j(Q.bootstrap),xe(L=>[h,...L.filter(Ae=>Ae.id!==h.id)]),R(null),T&&await w?.({sandboxId:T,name:it(S)??`${h.name} sandbox`})}catch(h){q(be(h))}finally{J(!1)}}async function At(){if(!(!b||!C.agent)){J(!0),q(null);try{const s=await O.runSandboxAgent(b,C.agent.id,{teamId:C.agent.teamId,triggerType:"manual",metadata:{source:"openpond-app-local-project-agent-setup"}});await Ct(C.agent.teamId),R(null);const d=s.sandbox?.id??s.run.sandboxId;d&&await w?.({sandboxId:d,name:it(s.sandbox??null)??`${C.agent.name} sandbox`})}catch(s){q(be(s))}finally{J(!1)}}}const{gitActionItems:wt,sandboxActionItems:$t}=$n({canCreateSandboxProject:vt,canInitGit:Ve,defaultSandboxRepoUrl:r??"",gitWorkspace:pe,hasRemote:ee,isProjectWorkspace:ne,isSandboxWorkspace:G,managed:Ie,onOpenCommitDialog:M,onRunTerminalCommand:z,onWorkspaceToolAction:v,projectSandboxTemplate:f,projectSandboxTemplateValid:y,sandboxTemplateActionTargetCount:xt.length,sandboxTemplateServiceTargets:ht,sandboxResumeTarget:D?{id:D.id,runtimeId:D.runtimeId??null,teamId:D.teamId??null,projectId:D.projectId??null,state:D.state??null}:null,selectedApp:u,selectedProject:l,setSandboxCreateDialogOpen:Y,setSandboxRunActionDialogOpen:P,workspaceBusyValue:oe,workspaceReady:ke,workspaceState:a});if(!a)return null;function et(s){F(!1),s.onSelect()}return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:`workspace-environment-menu ${e==="dock"?"open-up":""} ${e==="topbar"?"topbar":""}`,ref:ie,children:[t.jsx("button",{type:"button",className:`environment-info-button ${e==="topbar"?"titlebar-icon":"composer-icon"} ${_?"active":""}`,title:"Environment","data-tooltip":"Environment","aria-label":"Environment","aria-haspopup":"menu","aria-expanded":_,onClick:()=>F(s=>!s),children:t.jsx(Zt,{size:16})}),_&&t.jsxs("div",{className:"environment-popover",role:"menu","aria-label":"Environment",children:[t.jsx("div",{className:"environment-popover-header",children:t.jsx("span",{children:"Environment"})}),ne&&l?t.jsxs("button",{type:"button",className:"environment-row",disabled:ce||!C.canAct||$,title:ce?"Loading Agent setup state":C.reason??"Set up this project as an Agent",onClick:()=>{ce||!C.canAct||(C.state==="missing_config"&&R("config"),C.state==="needs_project"&&R("connect"),C.state==="needs_sync"&&R("sync"),C.state==="needs_agent"&&R("agent"),C.state==="ready"&&R("run"),F(!1))},children:[t.jsx(we,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Agent setup"}),t.jsx("small",{children:ce?"Loading setup state":vn(C.state,C.reason)})]}),t.jsx("span",{className:"environment-row-action",children:$?"Working":ce?"Loading":C.actionLabel})]}):null,t.jsxs("button",{type:"button",className:`environment-row ${I?"active":""}`,disabled:!U||!H,onClick:()=>{F(!1),H?.()},children:[t.jsx(Vt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Changes"}),t.jsx("small",{children:He})]}),!G&&(Re||N)&&t.jsxs("span",{className:"environment-change-counts",children:[t.jsxs("span",{className:"diff-addition",children:["+",je]}),t.jsxs("span",{className:"diff-deletion",children:["-",qe]})]})]}),t.jsxs("div",{className:"environment-row static",children:[t.jsx(Yt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:yt}),t.jsx("small",{children:a.repoPath||a.workspacePath})]})]}),G?t.jsxs("div",{className:"environment-row static",title:_e,children:[t.jsx(Xt,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:"Idle cleanup"}),t.jsx("small",{children:_e})]})]}):null,t.jsxs("button",{type:"button",className:`environment-row ${B?"active":""}`,disabled:Ie||!pe||n||oe||!a.initialized,"aria-expanded":B,onClick:()=>ae(s=>!s),children:[t.jsx(Ke,{size:15}),t.jsxs("span",{children:[t.jsx("strong",{children:St}),t.jsx("small",{children:Ie?"Managed workspace":pe?"Branch":"Git not initialized"})]}),t.jsx(Jt,{size:13})]}),B&&t.jsxs("div",{className:"environment-branch-panel",children:[t.jsxs("label",{className:"environment-branch-search",children:[t.jsx(Kt,{size:13}),t.jsx("input",{ref:le,value:Z,placeholder:"Search branches",onChange:s=>fe(s.target.value)})]}),t.jsxs("div",{className:"environment-branch-list",children:[We.map(s=>{const d=s===a.currentBranch,h=n||a.dirty&&!d;return t.jsxs("button",{type:"button",className:d?"selected":"",disabled:h,role:"menuitemradio","aria-checked":d,title:h&&!d?"Commit or discard local changes before switching branches.":s,onClick:()=>{F(!1),d||V?.(s)},children:[t.jsx(Ke,{size:13}),t.jsxs("span",{children:[t.jsx("strong",{children:s}),d&&a.dirty&&t.jsxs("small",{children:["Uncommitted: ",a.changedFilesCount," ",a.changedFilesCount===1?"file":"files"]})]}),d&&t.jsx(Qt,{size:14})]},s)}),We.length===0&&t.jsx("div",{className:"environment-branch-empty",children:"No branches found"})]}),t.jsxs("button",{type:"button",className:"environment-branch-create",disabled:n||!a.initialized||!X,onClick:()=>{F(!1),X?.()},children:[t.jsx(Ke,{size:14}),t.jsx("span",{children:"Create branch"})]})]}),t.jsx("div",{className:"environment-section-title",children:"Git"}),wt.map(s=>t.jsxs("button",{type:"button",className:"environment-action",disabled:s.disabled,onClick:()=>et(s),children:[s.icon,t.jsx("span",{children:s.label})]},s.label)),t.jsx("div",{className:"environment-section-title",children:"Sandbox"}),$t.map(s=>t.jsxs("button",{type:"button",className:"environment-action",disabled:s.disabled,onClick:()=>et(s),children:[s.icon,t.jsx("span",{children:s.label})]},s.label))]})]}),K&&t.jsx(hn,{busy:oe,commitBeforeCreate:(Ue||pe&&ee)&&!!a?.dirty,defaultRepoUrl:Ee,projectName:l?.name??"sandbox template",templateManifest:l?.sandboxTemplate?.normalizedManifest??null,uploadBeforeCreate:Ue,onClose:()=>{oe||Y(!1)},onSubmit:s=>{Nt(s)}}),o&&t.jsx(jn,{busy:oe,projectName:l?.name??"sandbox template",templateManifest:l?.sandboxTemplate?.normalizedManifest??null,onClose:()=>{oe||P(!1)},onSubmit:s=>{Pt(s)}}),A==="config"&&l?t.jsx(zn,{busy:$,error:de,projectName:l.name,onClose:()=>!$&&R(null),onSubmit:s=>{It(s)}}):null,A==="connect"&&l&&Xe?t.jsx(Mn,{busy:$,error:de,defaultTeamId:Xe.teamId,projectName:l.name,sourceIdentity:a?.remoteUrl??"",defaultBranch:a?.currentBranch??"main",onClose:()=>!$&&R(null),onSubmit:s=>{Rt(s)}}):null,A==="sync"&&C.project?t.jsx(dt,{busy:$,error:de,title:"Sync Project",actionLabel:"Sync Project",summary:`${C.project.name} · ${C.project.sandboxManifestPath??Ne}`,onClose:()=>!$&&R(null),onSubmit:()=>{_t()}}):null,A==="agent"&&C.project?t.jsx(qn,{busy:$,error:de,defaultName:`${l?.name??C.project.name} Agent`,onClose:()=>!$&&R(null),onSubmit:s=>{Et(s)}}):null,A==="run"&&C.agent?t.jsx(dt,{busy:$,error:de,title:"Run Agent",actionLabel:"Run Agent",summary:C.agent.name,onClose:()=>!$&&R(null),onSubmit:()=>{At()}}):null]})}export{Yn as WorkspaceEnvironmentMenu,On as formatIdleTimeout,Ln as sandboxChangeLabel,Un as sandboxChangedFileCount,Dn as sandboxRuntimePolicyLabel};
@@ -1 +1 @@
1
- import{j as e}from"./index-DIaKfM8a.js";/* empty css */import{C as z}from"./cloud-upload-Dv6kFnfC.js";import{ai as j,L as _,X as D}from"./App-D2f8_mGk.js";import{G as h}from"./git-commit-horizontal-C1lQvfxe.js";import{U as B}from"./upload-giKOPnl1.js";function E({open:s,branch:l,filesChanged:i,additions:c,deletions:n,message:m,includeUnstaged:g,nextStep:a,draft:p,busy:t,canPush:u,canPublish:b,onMessageChange:f,onIncludeUnstagedChange:C,onNextStepChange:r,onDraftChange:N,onClose:v,onSubmit:k}){return s?e.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:e.jsxs("form",{className:"git-dialog commit-dialog","aria-label":"Commit changes",onSubmit:o=>{o.preventDefault(),k()},children:[e.jsx(x,{disabled:t,onClose:v}),e.jsx("div",{className:"git-dialog-icon",children:e.jsx(h,{size:18})}),e.jsx("h2",{children:"Commit your changes"}),e.jsxs("div",{className:"git-dialog-row",children:[e.jsx("span",{children:"Branch"}),e.jsxs("strong",{children:[e.jsx(j,{size:14}),l??"No branch"]})]}),e.jsxs("div",{className:"git-dialog-row",children:[e.jsx("span",{children:"Changes"}),e.jsxs("strong",{children:[i," ",i===1?"file":"files",e.jsxs("span",{className:"git-dialog-additions",children:["+",c]}),e.jsxs("span",{className:"git-dialog-deletions",children:["-",n]})]})]}),e.jsxs("label",{className:"git-dialog-toggle",children:[e.jsx("input",{checked:g,disabled:t,type:"checkbox",onChange:o=>C(o.target.checked)}),e.jsx("span",{}),"Include unstaged"]}),e.jsxs("label",{className:"git-dialog-field",children:[e.jsxs("span",{children:["Commit message",e.jsx("small",{children:"Leave blank to use an autogenerated message"})]}),e.jsx("textarea",{value:m,disabled:t,placeholder:"Update workspace",onChange:o=>f(o.target.value)})]}),e.jsxs("fieldset",{className:"git-dialog-next",children:[e.jsx("legend",{children:"Next steps"}),e.jsx(d,{active:a==="commit",icon:e.jsx(h,{size:14}),label:"Commit",disabled:t,onSelect:()=>r("commit")}),e.jsx(d,{active:a==="commit_push",icon:e.jsx(B,{size:14}),label:"Commit & push",disabled:t||!u,onSelect:()=>r("commit_push")}),b&&e.jsx(d,{active:a==="commit_publish",icon:e.jsx(z,{size:14}),label:"Commit & publish",disabled:t,onSelect:()=>r("commit_publish")}),e.jsx(d,{active:a==="commit_pr",icon:e.jsx(_,{size:14}),label:"Commit & create PR",disabled:!0,onSelect:()=>r("commit_pr")})]}),e.jsxs("div",{className:"git-dialog-footer",children:[e.jsxs("label",{className:"git-dialog-toggle draft-toggle",children:[e.jsx("input",{checked:p,disabled:t||a!=="commit_pr",type:"checkbox",onChange:o=>N(o.target.checked)}),e.jsx("span",{}),"Draft"]}),e.jsx("button",{className:"git-dialog-primary",disabled:t||i===0,type:"submit",children:"Continue"})]})]})}):null}function F({open:s,branchName:l,busy:i,onBranchNameChange:c,onSetPrefix:n,onClose:m,onSubmit:g}){return s?e.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:e.jsxs("form",{className:"git-dialog branch-dialog","aria-label":"Create branch",onSubmit:a=>{a.preventDefault(),g()},children:[e.jsx(x,{disabled:i,onClose:m}),e.jsx("div",{className:"git-dialog-icon",children:e.jsx(j,{size:18})}),e.jsx("h2",{children:"Work here"}),e.jsx("p",{children:"Create a branch to commit changes, push, and create a PR from this worktree."}),e.jsxs("label",{className:"git-dialog-field",children:[e.jsxs("span",{children:["Branch name",e.jsx("button",{className:"git-dialog-inline-action",disabled:i,type:"button",onClick:n,children:"Set prefix"})]}),e.jsx("input",{autoFocus:!0,disabled:i,value:l,onChange:a=>c(a.target.value)})]}),e.jsx("button",{className:"git-dialog-primary full",disabled:i||!l.trim(),type:"submit",children:"Create"})]})}):null}function d({active:s,icon:l,label:i,disabled:c,onSelect:n}){return e.jsxs("button",{"aria-pressed":s,className:s?"active":"",disabled:c,type:"button",onClick:n,children:[l,e.jsx("span",{children:i}),s&&e.jsx("span",{className:"git-dialog-check",children:"✓"})]})}function x({disabled:s,onClose:l}){return e.jsx("button",{className:"git-dialog-close",disabled:s,type:"button",onClick:l,children:e.jsx(D,{size:16})})}export{F as BranchDialog,E as CommitDialog};
1
+ import{j as e}from"./index-DOMrqhcz.js";/* empty css */import{C as z}from"./cloud-upload-BaQFNCTp.js";import{am as j,N as _,X as D}from"./App-BI-uOpnP.js";import{G as h}from"./git-commit-horizontal-CgGixL64.js";import{U as B}from"./upload-DnlgGS2x.js";function F({open:s,branch:l,filesChanged:i,additions:c,deletions:n,message:m,includeUnstaged:g,nextStep:a,draft:p,busy:t,canPush:u,canPublish:b,onMessageChange:f,onIncludeUnstagedChange:N,onNextStepChange:r,onDraftChange:C,onClose:v,onSubmit:k}){return s?e.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:e.jsxs("form",{className:"git-dialog commit-dialog","aria-label":"Commit changes",onSubmit:o=>{o.preventDefault(),k()},children:[e.jsx(x,{disabled:t,onClose:v}),e.jsx("div",{className:"git-dialog-icon",children:e.jsx(h,{size:18})}),e.jsx("h2",{children:"Commit your changes"}),e.jsxs("div",{className:"git-dialog-row",children:[e.jsx("span",{children:"Branch"}),e.jsxs("strong",{children:[e.jsx(j,{size:14}),l??"No branch"]})]}),e.jsxs("div",{className:"git-dialog-row",children:[e.jsx("span",{children:"Changes"}),e.jsxs("strong",{children:[i," ",i===1?"file":"files",e.jsxs("span",{className:"git-dialog-additions",children:["+",c]}),e.jsxs("span",{className:"git-dialog-deletions",children:["-",n]})]})]}),e.jsxs("label",{className:"git-dialog-toggle",children:[e.jsx("input",{checked:g,disabled:t,type:"checkbox",onChange:o=>N(o.target.checked)}),e.jsx("span",{}),"Include unstaged"]}),e.jsxs("label",{className:"git-dialog-field",children:[e.jsxs("span",{children:["Commit message",e.jsx("small",{children:"Leave blank to use an autogenerated message"})]}),e.jsx("textarea",{value:m,disabled:t,placeholder:"Update workspace",onChange:o=>f(o.target.value)})]}),e.jsxs("fieldset",{className:"git-dialog-next",children:[e.jsx("legend",{children:"Next steps"}),e.jsx(d,{active:a==="commit",icon:e.jsx(h,{size:14}),label:"Commit",disabled:t,onSelect:()=>r("commit")}),e.jsx(d,{active:a==="commit_push",icon:e.jsx(B,{size:14}),label:"Commit & push",disabled:t||!u,onSelect:()=>r("commit_push")}),b&&e.jsx(d,{active:a==="commit_publish",icon:e.jsx(z,{size:14}),label:"Commit & publish",disabled:t,onSelect:()=>r("commit_publish")}),e.jsx(d,{active:a==="commit_pr",icon:e.jsx(_,{size:14}),label:"Commit & create PR",disabled:!0,onSelect:()=>r("commit_pr")})]}),e.jsxs("div",{className:"git-dialog-footer",children:[e.jsxs("label",{className:"git-dialog-toggle draft-toggle",children:[e.jsx("input",{checked:p,disabled:t||a!=="commit_pr",type:"checkbox",onChange:o=>C(o.target.checked)}),e.jsx("span",{}),"Draft"]}),e.jsx("button",{className:"git-dialog-primary",disabled:t||i===0,type:"submit",children:"Continue"})]})]})}):null}function H({open:s,branchName:l,busy:i,onBranchNameChange:c,onSetPrefix:n,onClose:m,onSubmit:g}){return s?e.jsx("div",{className:"git-dialog-backdrop",role:"presentation",children:e.jsxs("form",{className:"git-dialog branch-dialog","aria-label":"Create branch",onSubmit:a=>{a.preventDefault(),g()},children:[e.jsx(x,{disabled:i,onClose:m}),e.jsx("div",{className:"git-dialog-icon",children:e.jsx(j,{size:18})}),e.jsx("h2",{children:"Work here"}),e.jsx("p",{children:"Create a branch to commit changes, push, and create a PR from this worktree."}),e.jsxs("label",{className:"git-dialog-field",children:[e.jsxs("span",{children:["Branch name",e.jsx("button",{className:"git-dialog-inline-action",disabled:i,type:"button",onClick:n,children:"Set prefix"})]}),e.jsx("input",{autoFocus:!0,disabled:i,value:l,onChange:a=>c(a.target.value)})]}),e.jsx("button",{className:"git-dialog-primary full",disabled:i||!l.trim(),type:"submit",children:"Create"})]})}):null}function d({active:s,icon:l,label:i,disabled:c,onSelect:n}){return e.jsxs("button",{"aria-pressed":s,className:s?"active":"",disabled:c,type:"button",onClick:n,children:[l,e.jsx("span",{children:i}),s&&e.jsx("span",{className:"git-dialog-check",children:"✓"})]})}function x({disabled:s,onClose:l}){return e.jsx("button",{className:"git-dialog-close",disabled:s,type:"button",onClick:l,children:e.jsx(D,{size:16})})}export{H as BranchDialog,F as CommitDialog};