openpond 0.0.33 → 0.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{app-layer-CUQQUVJS.js → app-layer-GUF2CKYH.js} +3 -3
- package/dist/chunks/{apps-TAYMUCWX.js → apps-DIVHAUOV.js} +3 -3
- package/dist/chunks/{chunk-Y4F4XD5V.js → chunk-2GV3QBBZ.js} +1 -1
- package/dist/chunks/{chunk-FQW3AQVJ.js → chunk-2I5TZW66.js} +947 -525
- package/dist/chunks/{chunk-4HQURM3N.js → chunk-4Y25BACE.js} +1 -1
- package/dist/chunks/{chunk-XADW35CL.js → chunk-CRFB72X2.js} +3 -3
- package/dist/chunks/{chunk-D7MMLD4B.js → chunk-EY52SLOQ.js} +1 -1
- package/dist/chunks/{chunk-3UOLQG6N.js → chunk-FRPL5XPX.js} +1 -1
- package/dist/chunks/{chunk-4M4WAORL.js → chunk-GUGFYXFS.js} +4 -4
- package/dist/chunks/{chunk-GYZYZGKS.js → chunk-II2ERA2H.js} +2 -2
- package/dist/chunks/{chunk-OXQG773T.js → chunk-LUA5QGQP.js} +33 -33
- package/dist/chunks/{chunk-T5LV33QZ.js → chunk-NTRTK6C6.js} +2 -2
- package/dist/chunks/{chunk-D264OHTR.js → chunk-RLQGMSW7.js} +2 -2
- package/dist/chunks/{chunk-DCNAXREU.js → chunk-S3VA47DG.js} +3 -3
- package/dist/chunks/{chunk-PJXJ2HRT.js → chunk-SECNDLPQ.js} +997 -526
- package/dist/chunks/{chunk-W2DJR3FA.js → chunk-TXJ4TIDO.js} +1 -1
- package/dist/chunks/{chunk-RYUOC4A6.js → chunk-XIF53VR3.js} +1 -1
- package/dist/chunks/{chunk-3ZJIEA5F.js → chunk-YPK2W34Z.js} +1 -1
- package/dist/chunks/{chunk-EONKWOLU.js → chunk-ZZOTKXRD.js} +2 -2
- package/dist/chunks/{cli-ZOCP7X5M.js → cli-3AEIYSMD.js} +6 -6
- package/dist/chunks/{cli-ACFTSCMY.js → cli-HUVI6ELM.js} +4 -4
- package/dist/chunks/{core-commands-SYGK7K57.js → core-commands-2HUTKFHQ.js} +4 -4
- package/dist/chunks/{extend-Q5HZ7TMA.js → extend-PAJMXYKV.js} +9 -9
- package/dist/chunks/{harness-ZPBPQVAS.js → harness-UWAS2VAN.js} +3 -3
- package/dist/chunks/{help-3V3TRQNX.js → help-M7D2XAOX.js} +1 -1
- package/dist/chunks/{opchat-OUPMEFE5.js → opchat-FQ2CJVM6.js} +5 -5
- package/dist/chunks/{organizations-5CSLBDAW.js → organizations-L5N6LJ7O.js} +4 -4
- package/dist/chunks/{profile-OQYSXHOG.js → profile-KH5IKVNY.js} +7 -7
- package/dist/chunks/{project-agent-TBTWOUJF.js → project-agent-F4NHVRGY.js} +6 -6
- package/dist/chunks/{sandbox-command-HCHPY7KW.js → sandbox-command-DDXRQNB6.js} +4 -4
- package/dist/chunks/{sandbox-template-PNTOZ6W3.js → sandbox-template-5EEEQKR5.js} +5 -5
- package/dist/chunks/{src-3DC5AXBH.js → src-34FV42HE.js} +35256 -31871
- package/dist/chunks/{src-C6MXLDYQ.js → src-LHZWUSD7.js} +2 -2
- package/dist/chunks/{teams-bot-CQ76XI6T.js → teams-bot-HFWO5GOV.js} +3 -3
- package/dist/chunks/{workspaces-CYA4EXHX.js → workspaces-LO44JAC2.js} +2 -2
- package/dist/cli.js +10 -10
- package/dist/web/assets/AppDialog-T3j6O3yg.js +1 -0
- package/dist/web/assets/{AppsView-02DhR5FR.js → AppsView-70Qqf9eJ.js} +1 -1
- package/dist/web/assets/{BrowserSidebar-BbB1x4NN.js → BrowserSidebar-CdBLHdNW.js} +1 -1
- package/dist/web/assets/CloudWorkView-C5-jvlOo.js +1 -0
- package/dist/web/assets/{CommandMenu-CMAoQrQr.js → CommandMenu-B3Y4MvmT.js} +1 -1
- package/dist/web/assets/CommunityView-BHUJ9Hun.js +1 -0
- package/dist/web/assets/ComposerCreateImproveStrip-DeRI5XEO.js +1 -0
- package/dist/web/assets/GetStartedView-CIXScviw.js +1 -0
- package/dist/web/assets/GetStartedView-DBLdduwr.css +1 -0
- package/dist/web/assets/LabsRoute-Cs_R1fuu.js +3 -0
- package/dist/web/assets/MainChatThread-h7VSA_Rc.js +2 -0
- package/dist/web/assets/MakeAgentTutorialLearningPanel-r7jyZVc0.js +2 -0
- package/dist/web/assets/MarkdownText-E35C404I.js +7 -0
- package/dist/web/assets/Messages-BANZuAnA.js +10 -0
- package/dist/web/assets/NativeSkillSidebar-Qgccncuc.js +1 -0
- package/dist/web/assets/NativeSkillSidebar-T8KXjnUH.css +1 -0
- package/dist/web/assets/{NewProjectDialog-DgHx0SU8.js → NewProjectDialog-BowacUmA.js} +1 -1
- package/dist/web/assets/PostTrainingLearningPanel-oJu5qaHK.js +2 -0
- package/dist/web/assets/PostTrainingStatusPill-B9Eoc4s0.js +1 -0
- package/dist/web/assets/{ProfileSettingsSection-CqnfjiCl.css → ProfileSettingsSection-Cg4tKO-C.css} +1 -1
- package/dist/web/assets/ProfileSettingsSection-Dnh92gDH.js +1 -0
- package/dist/web/assets/RightChatPanelStack-pGwbt6Wy.js +1 -0
- package/dist/web/assets/SettingsView-Bjehxwt1.js +6 -0
- package/dist/web/assets/SettingsView-uHhQnazW.css +1 -0
- package/dist/web/assets/TeamChatView-Tn4X5cuY.js +3 -0
- package/dist/web/assets/{TerminalOverlay-CZxcEnIU.js → TerminalOverlay-DoX5LYzK.js} +11 -11
- package/dist/web/assets/TrainingCreationPanel-BLSf1Bnp.js +1 -0
- package/dist/web/assets/{TrainingDraftPanel-C1LwcFJe.js → TrainingDraftPanel-Da6uGu9y.js} +1 -1
- package/dist/web/assets/UsageSettingsSection-DKky0p47.js +59 -0
- package/dist/web/assets/UsageSettingsSection-O8VK0qBL.css +1 -0
- package/dist/web/assets/WorkspaceDiffPanel-DTRtW9n8.js +14 -0
- package/dist/web/assets/WorkspaceEnvironmentMenu-Ba4M8z1N.js +32 -0
- package/dist/web/assets/WorkspaceGitDialogs-CSepNOb8.js +1 -0
- package/dist/web/assets/{WorkspaceMonacoEditor-BB6RMJhI.js → WorkspaceMonacoEditor-LhFdzCRs.js} +3 -3
- package/dist/web/assets/activity-bW02ZsBD.js +1 -0
- package/dist/web/assets/{boxes-DuFpoIOg.js → boxes-B1dRA1pi.js} +1 -1
- package/dist/web/assets/chevron-up-CySy6WNq.js +1 -0
- package/dist/web/assets/circle-alert-DMHz5tj_.js +1 -0
- package/dist/web/assets/circle-x-DY8vKAKi.js +1 -0
- package/dist/web/assets/copy-DuHI1UZ_.js +1 -0
- package/dist/web/assets/{create-pipeline-request-CoUS3TxW.js → create-pipeline-request-CGBcdK9r.js} +2 -2
- package/dist/web/assets/credit-card-Bot0OuTl.js +1 -0
- package/dist/web/assets/{cssMode-BwBG931R.js → cssMode-BIjAothW.js} +1 -1
- package/dist/web/assets/git-branch-Cm02aNWq.js +1 -0
- package/dist/web/assets/{git-commit-horizontal-nYzHKpP_.js → git-commit-horizontal-FYILXW0v.js} +1 -1
- package/dist/web/assets/{htmlMode-kia19Vq-.js → htmlMode-zO2xLLgL.js} +1 -1
- package/dist/web/assets/index-B5AN29EO.js +177 -0
- package/dist/web/assets/index-BnwYyUgT.js +1 -0
- package/dist/web/assets/index-COGlKIJ4.css +1 -0
- package/dist/web/assets/{info-C19-C_Yo.js → info-DeuEU_RO.js} +1 -1
- package/dist/web/assets/{jsonMode-Bbnsi639.js → jsonMode-D2A3mj4n.js} +1 -1
- package/dist/web/assets/{lspLanguageFeatures-CQ7n1AnL.js → lspLanguageFeatures-aPSqvscU.js} +1 -1
- package/dist/web/assets/make-agent-tutorial-A2W9Ajwv.js +2 -0
- package/dist/web/assets/{monaco.contribution-B0hVTPtP.js → monaco.contribution-CHVe9CQ9.js} +2 -2
- package/dist/web/assets/{monaco.contribution-CckMti96.js → monaco.contribution-DAq6Jihl.js} +2 -2
- package/dist/web/assets/{monaco.contribution-B70DoKC2.js → monaco.contribution-Do3Jjslo.js} +2 -2
- package/dist/web/assets/{monaco.contribution-D0pzYjhS.js → monaco.contribution-KqCt1n9-.js} +2 -2
- package/dist/web/assets/{monitor-BiTzpoOs.js → monitor-DXvHWFeW.js} +1 -1
- package/dist/web/assets/{play-fYNcpLd1.js → play-BIHyH-Yu.js} +1 -1
- package/dist/web/assets/{python-KvnXMI5w.js → python-g3mtmU2J.js} +1 -1
- package/dist/web/assets/{refresh-cw-CLWf9Yye.js → refresh-cw-Daz0oqwK.js} +1 -1
- package/dist/web/assets/{reply-ChwFJtCP.js → reply-wu9DIBuK.js} +1 -1
- package/dist/web/assets/rotate-cw-D7q9GgNc.js +1 -0
- package/dist/web/assets/{save-Cf458B41.js → save-BVFY6VTI.js} +1 -1
- package/dist/web/assets/{toggleHighContrast-xBMYNCS6.js → toggleHighContrast-D9C_WUDu.js} +1 -1
- package/dist/web/assets/training-1du5QD-P.css +1 -0
- package/dist/web/assets/{tsMode-MD366RAt.js → tsMode-B4lEUN5X.js} +1 -1
- package/dist/web/assets/upload-DNbYB4Rl.js +1 -0
- package/dist/web/assets/{wifi-off-BmQZtHYT.js → wifi-off-C5QLifIJ.js} +1 -1
- package/dist/web/assets/{workers-DZmm4J7b.js → workers-CV4BZb_x.js} +1 -1
- package/dist/web/assets/{yaml-AYqrW6mK.js → yaml-3ah8oX43.js} +1 -1
- package/dist/web/courses/post-training/01-how-post-training-works-poster.webp +0 -0
- package/dist/web/courses/post-training/01-how-post-training-works.vtt +25 -0
- package/dist/web/courses/post-training/02-definitions-poster.webp +0 -0
- package/dist/web/courses/post-training/02-definitions.vtt +117 -0
- package/dist/web/courses/post-training/03-on-policy-off-policy-poster.webp +0 -0
- package/dist/web/courses/post-training/03-on-policy-off-policy.vtt +29 -0
- package/dist/web/courses/post-training/04-rewards-credit-assignment-poster.webp +0 -0
- package/dist/web/courses/post-training/04-rewards-credit-assignment.vtt +65 -0
- package/dist/web/courses/post-training/05-verifiable-rewards-rlvr-poster.webp +0 -0
- package/dist/web/courses/post-training/05-verifiable-rewards-rlvr.vtt +69 -0
- package/dist/web/courses/post-training/06-ppo-grpo-poster.webp +0 -0
- package/dist/web/courses/post-training/06-ppo-grpo.vtt +65 -0
- package/dist/web/courses/post-training/07-distillation-poster.webp +0 -0
- package/dist/web/courses/post-training/07-distillation.vtt +53 -0
- package/dist/web/courses/post-training/08-opsd-sdft-sdpo-poster.webp +0 -0
- package/dist/web/courses/post-training/08-opsd-sdft-sdpo.vtt +61 -0
- package/dist/web/courses/post-training/09-credible-experiments-poster.webp +0 -0
- package/dist/web/courses/post-training/09-credible-experiments.vtt +69 -0
- package/dist/web/courses/post-training/10-technical-appendix-poster.webp +0 -0
- package/dist/web/courses/post-training/10-technical-appendix.vtt +69 -0
- package/dist/web/courses/post-training/full-course-poster.webp +0 -0
- package/dist/web/courses/post-training/full-course.vtt +623 -0
- package/dist/web/courses/post-training/scripts/script_01.md +31 -0
- package/dist/web/courses/post-training/scripts/script_02.md +49 -0
- package/dist/web/courses/post-training/scripts/script_03.md +35 -0
- package/dist/web/courses/post-training/scripts/script_04.md +43 -0
- package/dist/web/courses/post-training/scripts/script_05.md +43 -0
- package/dist/web/courses/post-training/scripts/script_06.md +41 -0
- package/dist/web/courses/post-training/scripts/script_07.md +37 -0
- package/dist/web/courses/post-training/scripts/script_08.md +37 -0
- package/dist/web/courses/post-training/scripts/script_09.md +45 -0
- package/dist/web/courses/post-training/scripts/script_10.md +47 -0
- package/dist/web/index.html +2 -2
- package/dist/web/tutorials/how-to-make-an-agent-create-poster.png +0 -0
- package/dist/web/tutorials/how-to-make-an-agent-create.vtt +49 -0
- package/dist/web/tutorials/how-to-make-an-agent-improve-poster.png +0 -0
- package/dist/web/tutorials/how-to-make-an-agent-improve.vtt +45 -0
- package/dist/web/tutorials/how-to-make-an-agent-poster.png +0 -0
- package/dist/web/tutorials/how-to-make-an-agent-use-poster.png +0 -0
- package/dist/web/tutorials/how-to-make-an-agent-use.vtt +33 -0
- package/dist/web/tutorials/how-to-make-an-agent.vtt +125 -0
- package/dist/web/tutorials/what-is-an-openpond-agent-poster.png +0 -0
- package/dist/web/tutorials/what-is-an-openpond-agent.vtt +25 -0
- package/package.json +1 -1
- package/dist/web/assets/CloudWorkView-CrNjUam-.js +0 -1
- package/dist/web/assets/CommunityView-ClBQWVMx.js +0 -1
- package/dist/web/assets/ComposerCreateImproveStrip-SAzjMJxi.js +0 -1
- package/dist/web/assets/GetStartedView-C3ZrnEz5.css +0 -1
- package/dist/web/assets/GetStartedView-CImKDSgl.js +0 -1
- package/dist/web/assets/LabsRoute-CjsnD_ow.js +0 -3
- package/dist/web/assets/ProfileSettingsSection-Wms2nM8S.js +0 -1
- package/dist/web/assets/SettingsView-Bj4gTHxu.js +0 -63
- package/dist/web/assets/SettingsView-DwbGu8Kj.css +0 -1
- package/dist/web/assets/TeamChatView-Bn5s_CEO.js +0 -3
- package/dist/web/assets/TrainingCreationPanel-CDHWKB0z.js +0 -1
- package/dist/web/assets/WorkspaceDiffPanel-OXh-RfsO.js +0 -14
- package/dist/web/assets/WorkspaceEnvironmentMenu-DYsTZ1yS.js +0 -32
- package/dist/web/assets/WorkspaceGitDialogs-DW1YzZSC.js +0 -1
- package/dist/web/assets/index-5GiqJrAI.js +0 -1
- package/dist/web/assets/index-8H-GDlM5.css +0 -1
- package/dist/web/assets/index-Md3sZKuq.js +0 -192
- package/dist/web/assets/training-DSUEHclG.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.usage-settings{max-width:1120px;gap:34px;padding-bottom:72px}.usage-browser-proof-shell{width:min(1120px,calc(100vw - 64px));margin:0 auto;padding:52px 0 80px}.usage-settings .account-list,.usage-settings .settings-footnote{border-radius:8px}.usage-settings-title{justify-content:space-between;margin-bottom:2px}.usage-activity-overview{display:grid;gap:34px}.usage-profile-header{position:relative;display:grid;justify-items:center;gap:12px;padding-top:4px;text-align:center}.usage-profile-avatar{display:grid;place-items:center;width:76px;height:76px;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:50%;background:radial-gradient(circle at 34% 28%,rgba(91,141,239,.42),transparent 42%),linear-gradient(145deg,#25354a,#172130);color:#d8e8ff;font-size:24px;font-weight:620;box-shadow:0 12px 36px #00000038}.usage-profile-avatar img{width:100%;height:100%;object-fit:cover}.usage-profile-copy{display:grid;gap:6px}.usage-profile-copy h1{margin:0;color:var(--text);font-size:25px;font-weight:520;letter-spacing:-.02em}.usage-profile-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;color:var(--muted);font-size:13px}.usage-profile-badge{border:1px solid var(--border);border-radius:999px;padding:2px 7px;color:var(--muted-strong);font-size:11px}.usage-hero-metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));overflow:hidden;border:1px solid var(--border);border-radius:16px;background:#1818188f}.usage-hero-metric{position:relative;display:grid;gap:5px;justify-items:center;min-width:0;padding:14px 10px 13px;text-align:center}.usage-hero-metric+.usage-hero-metric:before{position:absolute;top:11px;bottom:11px;left:0;width:1px;background:#ffffff0f;content:""}.usage-hero-metric strong,.usage-hero-metric span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usage-hero-metric strong{color:#f1f3f5;font-size:14px;font-weight:520}.usage-hero-metric span{color:var(--muted);font-size:12px}.usage-activity-section,.usage-insight-section{min-width:0}.usage-activity-section{position:relative}.usage-section-heading{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:12px}.usage-section-heading>div:first-child{display:grid;gap:4px}.usage-section-heading h2,.usage-insight-section h2,.usage-details-title h2{margin:0;color:#f0f1f2;font-size:14px;font-weight:520}.usage-section-heading>div:first-child>span,.usage-details-title span{color:#757b82;font-size:11px}.usage-activity-mode{display:flex;align-items:center;gap:2px}.usage-activity-mode button{border:0;border-radius:6px;background:transparent;color:#7f8388;padding:4px 7px;font-size:12px}.usage-activity-mode button:hover{color:#c4c7ca}.usage-activity-mode button.active{background:#ffffff0d;color:#f2f2f2}.usage-activity-scroll{overflow-x:auto;padding-bottom:4px;scrollbar-width:none;-ms-overflow-style:none}.usage-activity-scroll::-webkit-scrollbar{display:none}.usage-activity-visualization{position:relative}.usage-activity-canvas{min-width:738px}.usage-heatmap{display:grid;grid-auto-columns:10px;grid-auto-flow:column;grid-template-rows:repeat(7,10px);gap:4px;height:94px}.usage-activity-cell{position:relative;width:10px;height:10px;border-radius:3px;background:#202326;transition:filter .12s ease,opacity .12s ease,transform .12s ease}.usage-activity-cell.has-activity{background:var(--usage-cell-gradient)}.usage-activity-cell.has-activity[data-level="1"]{opacity:.42}.usage-activity-cell.has-activity[data-level="2"]{opacity:.56}.usage-activity-cell.has-activity[data-level="3"]{opacity:.72}.usage-activity-cell.has-activity[data-level="4"]{opacity:.86}.usage-activity-cell.has-activity[data-level="5"]{opacity:1;box-shadow:0 0 8px #7f9cff38}.usage-activity-cell:not(.future):hover{z-index:2;filter:brightness(1.22) saturate(1.12);opacity:1;outline:1px solid rgba(255,255,255,.6);outline-offset:1px;transform:scale(1.38)}.usage-activity-cell.future{background:transparent}.usage-activity-months{display:grid;grid-template-columns:repeat(53,10px);column-gap:4px;margin-top:8px;color:#71777d;font-size:10px}.usage-activity-months span{overflow:visible;white-space:nowrap}.usage-day-tooltip{position:absolute;z-index:10;top:var(--usage-tooltip-top);left:var(--usage-tooltip-left);display:grid;gap:5px;width:min(250px,calc(100vw - 48px));border:1px solid rgba(255,255,255,.12);border-radius:10px;background:#131417f5;padding:10px 11px;pointer-events:none;box-shadow:0 14px 38px #00000061;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transform:translate(-50%,calc(-100% - 10px))}.usage-day-tooltip:after{position:absolute;top:100%;left:50%;width:8px;height:8px;border-right:1px solid rgba(255,255,255,.12);border-bottom:1px solid rgba(255,255,255,.12);background:#131417f5;content:"";transform:translate(-50%,-4px) rotate(45deg)}.usage-day-tooltip>strong{color:#f4f5f6;font-size:12px;font-weight:590}.usage-day-tooltip>span{color:#9ca3aa;font-size:11px}.usage-day-tooltip-models{display:grid;gap:5px;margin-top:4px;padding-top:7px;border-top:1px solid rgba(255,255,255,.07)}.usage-day-tooltip-models>div{display:grid;grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:7px}.usage-day-tooltip-models i,.usage-model-legend i{display:block;width:7px;height:7px;border-radius:2px;box-shadow:0 0 7px currentColor}.usage-day-tooltip-models small,.usage-day-tooltip-models em{min-width:0;overflow:hidden;font-size:10px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}.usage-day-tooltip-models small{color:#c8ccd0}.usage-day-tooltip-models em{color:#f1f2f3}.usage-model-legend{display:flex;flex-wrap:wrap;gap:7px 13px;margin-top:13px;color:#878e95;font-size:10px}.usage-model-legend>span{display:flex;align-items:center;gap:6px;overflow:hidden;max-width:240px;text-overflow:ellipsis;white-space:nowrap}.usage-activity-bars{display:grid;grid-template-columns:repeat(53,10px);align-items:end;column-gap:4px;height:94px}.usage-activity-bars>span{display:block;min-height:2px;border-radius:3px 3px 2px 2px;background:linear-gradient(180deg,#7fbcef,#365773)}.usage-activity-bars.cumulative>span{background:linear-gradient(180deg,#8ebfe4,#466884)}.usage-activity-loading{display:flex;align-items:center;justify-content:center;gap:8px;height:116px;color:var(--muted);font-size:12px}.usage-insight-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:42px}.usage-insight-section{display:grid;align-content:start;gap:12px}.usage-insight-list,.usage-model-mix{display:grid;gap:8px}.usage-insight-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,auto);align-items:center;gap:18px;min-height:24px}.usage-insight-row span{color:var(--muted);font-size:12px}.usage-insight-row strong{overflow:hidden;max-width:240px;color:#eceeef;font-size:12px;font-weight:500;text-align:right;text-overflow:ellipsis;white-space:nowrap}.usage-model-mix-row{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:8px;min-height:34px}.usage-model-mix-icon{width:8px;height:8px;border-radius:2px}.usage-model-mix-copy{position:relative;display:grid;gap:2px;min-width:0;padding-bottom:5px}.usage-model-mix-copy strong,.usage-model-mix-copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usage-model-mix-copy strong{color:#e9ebed;font-size:12px;font-weight:500}.usage-model-mix-copy span,.usage-model-mix-row>span{color:#777d83;font-size:10px}.usage-model-mix-copy i{position:absolute;right:0;bottom:0;left:0;height:2px;overflow:hidden;border-radius:2px;background:#ffffff0d}.usage-model-mix-copy i:after{display:block;width:var(--usage-model-share);height:100%;border-radius:inherit;background:var(--usage-model-color);content:""}.usage-model-mix-empty{display:flex;align-items:center;gap:8px;min-height:40px;color:var(--muted);font-size:12px}.usage-details-title{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-top:8px;padding-top:28px;border-top:1px solid var(--border)}.usage-details-title>div{display:grid;gap:5px}.usage-toolbar{display:flex;flex-wrap:wrap;align-items:end;gap:10px}.usage-range-control{display:inline-flex;flex-wrap:wrap;gap:3px;min-width:0;border:1px solid var(--border);border-radius:8px;background:#181818;padding:3px}.usage-range-control button{min-height:30px;border:0;border-radius:6px;background:transparent;color:#b8b8b8;padding:0 10px;font-size:12px}.usage-range-control button.active{background:#2a2a2a;color:#f5f5f5}.usage-range-control button:disabled,.usage-filter-control select:disabled{opacity:.55}.usage-filter-control{display:grid;gap:5px;min-width:150px}.usage-filter-control span{color:#9b9b9b;font-size:12px}.usage-filter-control select{height:38px;border:1px solid var(--border);border-radius:8px;outline:0;background:#181818;color:#f5f5f5;padding:0 10px;font-size:13px}.usage-filter-control select:focus{border-color:#fff3}.usage-load-state{padding:12px 14px}.usage-metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:8px}.usage-metric{display:grid;gap:5px;min-width:0;min-height:72px;border:1px solid var(--border);border-radius:8px;background:#181818;padding:12px}.usage-metric span{min-width:0;overflow:hidden;color:#9b9b9b;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.usage-metric strong{min-width:0;overflow:hidden;color:#f5f5f5;font-size:17px;font-weight:560;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap}.usage-panel{overflow:hidden}.usage-chart-frame{height:304px;min-height:304px;padding:8px 10px 6px 4px}.usage-chart-empty{display:flex;align-items:center;justify-content:center;gap:8px;height:260px;color:#9b9b9b;font-size:13px}.usage-chart-tooltip{display:grid;gap:6px;max-width:260px;border:1px solid var(--border);border-radius:8px;background:#181818;padding:10px;box-shadow:0 10px 28px #00000047}.usage-chart-tooltip strong{color:#f5f5f5;font-size:12px;font-weight:560}.usage-chart-tooltip div{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:7px}.usage-chart-tooltip div>span{width:8px;height:8px;border-radius:2px}.usage-chart-tooltip small,.usage-chart-tooltip em{min-width:0;overflow:hidden;color:#cfcfcf;font-size:11px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}.usage-chart-tooltip em{color:#f5f5f5}.usage-empty-state{display:grid;gap:5px;padding:16px}.usage-empty-state strong{color:#f5f5f5;font-size:13px;font-weight:560}.usage-empty-state span{color:#9b9b9b;font-size:12px}.usage-breakdown-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.usage-table-panel{overflow:hidden}.usage-table-scroll{overflow-x:auto}.usage-table{width:100%;min-width:720px;border-collapse:collapse}.usage-table-panel.compact .usage-table{min-width:360px}.usage-table th,.usage-table td{min-width:0;padding:11px 12px;border-top:1px solid rgba(255,255,255,.06);text-align:left;vertical-align:middle}.usage-table th{color:#8f8f8f;font-size:11px;font-weight:560;letter-spacing:0;white-space:nowrap}.usage-table td{color:#dedede;font-size:12px}.usage-table .align-end{text-align:right}.usage-primary-cell{display:grid;gap:2px;min-width:0;max-width:260px}.usage-primary-cell strong,.usage-primary-cell small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usage-primary-cell strong{color:#f5f5f5;font-size:12px;font-weight:560}.usage-primary-cell small{color:#9b9b9b;font-size:11px}.usage-source-action{width:28px;height:28px}.usage-table-empty{padding:16px;color:#9b9b9b;font-size:13px}.usage-table-footer{padding:10px 12px 12px;border-top:1px solid rgba(255,255,255,.06);color:#9b9b9b;font-size:12px}@media(max-width:920px){.usage-hero-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.usage-hero-metric:nth-child(4),.usage-hero-metric:nth-child(5){border-top:1px solid rgba(255,255,255,.06)}.usage-hero-metric:nth-child(4):before{display:none}.usage-breakdown-grid{grid-template-columns:1fr}.usage-filter-control{flex:1 1 160px}.usage-chart-frame{height:260px;min-height:260px}}@media(max-width:640px){.usage-activity-overview{gap:26px}.usage-hero-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.usage-hero-metric:nth-child(3){border-top:1px solid rgba(255,255,255,.06)}.usage-hero-metric:nth-child(3):before,.usage-hero-metric:nth-child(5):before{display:none}.usage-hero-metric:nth-child(4):before{display:block}.usage-hero-metric:last-child{grid-column:1 / -1}.usage-insight-grid{grid-template-columns:1fr;gap:28px}.usage-section-heading{align-items:start;flex-direction:column}.usage-toolbar{display:grid}.usage-range-control{width:100%}.usage-range-control button{flex:1 1 auto}}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./WorkspaceMonacoEditor-LhFdzCRs.js","./index-B5AN29EO.js","./index-COGlKIJ4.css","./WorkspaceMonacoEditor-BwKcXIZw.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{d as ye,j as e,W as Ye,aA as ws,r as l,u as ke,n as z,aB as xt,a0 as bt,K as _e,T as On,aC as Un,t as ut,F as Hn,aD as Vn,Y as Ms,aE as Gn,aF as Kn,J as qn,X as ks,k as Qn,M as Xn,S as Zn,aG as Yn,as as Jn,at as ea,aH as ta,Q as ys,aI as sa,aJ as Ot,aK as na,aL as zs,aM as aa,a1 as ia,ad as ra,aN as zt,aO as la,aP as Ut,aQ as ge,aR as oa,aS as Ss,aT as ca,aU as da,aV as ua}from"./index-B5AN29EO.js";import{M as fa,u as Ns,I as pa}from"./MarkdownText-E35C404I.js";import{C as Is}from"./circle-alert-DMHz5tj_.js";import{R as Ht}from"./refresh-cw-Daz0oqwK.js";import{t as ha,a as ma,m as xa,s as ba,d as ga,f as ja,b as va}from"./training-model-data-BXUCzS0p.js";import{I as Cs}from"./info-DeuEU_RO.js";import{S as wa}from"./save-BVFY6VTI.js";import{C as ka}from"./chevron-up-CySy6WNq.js";const ya=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M17 19H3",key:"z6ezky"}]],Sa=ye("text-align-start",ya);const Na=[["path",{d:"m17 11-5-5-5 5",key:"e8nh98"}],["path",{d:"m17 18-5-5-5 5",key:"2avn1x"}]],Ca=ye("chevrons-up",Na);const Ra=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]],$a=ye("columns-2",Ra);const Fa=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]],Ea=ye("file",Fa);const Aa=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}]],La=ye("panel-top",Aa);const Pa=[["path",{d:"m15 14 5-5-5-5",key:"12vg1m"}],["path",{d:"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13",key:"6uklza"}]],Da=ye("redo-2",Pa);const Ta=[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]],_a=ye("undo-2",Ta);function Ma({createRuntime:t,goalRuntime:s,subagentRuntime:n=null,onRunSubagentLifecycleAction:i}){const a=t?"Create/Improve Details":"Goal Details",c=t?X(t.run.state):n?.activeCount?n.label:s?.actionLabel??"No active goal";return e.jsxs("div",{className:"goal-details-view","aria-label":a,children:[e.jsxs("div",{className:"goal-details-header",children:[e.jsxs("div",{className:"goal-details-title",children:[e.jsx(Ye,{size:15,"aria-hidden":"true"}),e.jsx("span",{children:a})]}),e.jsx("span",{className:`goal-details-state ${si(t?.run.state??null)}`,children:c})]}),e.jsx("div",{className:"goal-details-body",children:t?e.jsx(za,{runtime:t}):s||n?e.jsx(Wa,{goalRuntime:s,subagentRuntime:n,onRunSubagentLifecycleAction:i}):e.jsx(ti,{})})]})}function za({runtime:t}){const s=t.run,n=s.plan,i=ws(n?.metadata)??ws(s.metadata),a=s.questions,c=a.filter(d=>d.status==="pending"),o=s.sourceRefs,u=s.checkRefs,f=s.state,p=s.target.kind==="agent"?s.target.defaultActionKey:null;return e.jsxs(e.Fragment,{children:[e.jsx(O,{title:"Current Work",children:e.jsx(Xe,{rows:[["State",X(f)],["Operation",s.operation],["Target",X(s.target.kind)],["Name",s.target.displayName??s.target.id??"Pending"],["Target ID",s.target.id??"Pending"],["Default action",p??n?.defaultChatAction.key??"Pending"],["Adapter",X(s.adapter.kind)],["Run",s.id],["Revision",String(s.revision)]]})}),e.jsx(O,{title:"Plan",children:n?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"goal-details-summary",children:n.summary}),e.jsx(Xe,{rows:[["Objective",n.objective],["Context",n.capturedContextSummary],["Status",X(n.status)],["Plan ID",n.id],["Run ID",n.runId],["Approval",n.approvalId??"Pending"],["Approved",n.approvedAt??"Not approved"]]})]}):c.length?e.jsx("p",{className:"goal-details-summary",children:"Waiting for answers before the model finalizes the Create plan."}):e.jsx("p",{className:"goal-details-summary",children:"The model is preparing the Create plan."})}),i?e.jsxs(O,{title:"Action Shape",children:[e.jsx(Xe,{rows:[["Mode",i.label],["Default action",i.defaultActionKey??"None"],["Direct action",i.directActionHint??"None planned"],["Artifacts",i.artifactPolicy]]}),e.jsx("p",{className:"goal-details-note",children:i.detail})]}):null,a.length?e.jsx(O,{title:"Questions",children:e.jsx("div",{className:"goal-details-list",children:a.map(d=>e.jsxs("article",{className:"goal-details-list-item",children:[e.jsxs("div",{children:[e.jsx("strong",{children:d.title}),e.jsx("span",{className:`goal-details-inline-state ${d.status}`,children:X(d.status)})]}),e.jsx("p",{children:d.prompt}),d.answer?e.jsxs("small",{children:["Answer: ",d.answer.label??d.answer.value]}):d.options.length?e.jsxs("small",{children:["Options: ",d.options.map(b=>b.label).join(", ")]}):null]},d.id))})}):null,n?.requirements.length?e.jsx(O,{title:"Setup Requirements",children:e.jsx("div",{className:"goal-details-list",children:n.requirements.map(d=>e.jsxs("article",{className:"goal-details-list-item",children:[e.jsxs("div",{children:[e.jsx("strong",{children:d.name}),e.jsx("span",{className:`goal-details-inline-state ${d.status}`,children:X(d.status)})]}),e.jsxs("small",{children:[X(d.kind),d.detail?`: ${d.detail}`:""]})]},`${d.kind}:${d.name}`))})}):null,n?.sourcePlan.length?e.jsx(O,{title:"Source Plan",children:e.jsx(dt,{refs:n.sourcePlan.map(d=>({id:`${d.operation}:${d.path}`,primary:d.path,secondary:`${X(d.operation)}: ${d.reason}`}))})}):null,n?.checks.length?e.jsx(O,{title:"Checks",children:e.jsx(dt,{refs:n.checks.map(d=>({id:d.name,primary:d.name,secondary:`${d.required?"Required":"Optional"}: ${d.command}`}))})}):null,o.length||u.length?e.jsx(O,{title:"Run Refs",children:e.jsx(dt,{refs:[...o.map(d=>({id:`source:${d}`,primary:d,secondary:"Source ref"})),...u.map(d=>({id:`check:${d}`,primary:d,secondary:"Check ref"}))]})}):null,e.jsx(Ia,{run:s}),s.blockedReason?e.jsx(O,{title:"Blocked",children:e.jsxs("div",{className:"goal-details-alert",children:[e.jsx(Is,{size:15}),e.jsx("span",{children:s.blockedReason})]})}):null,e.jsx(O,{title:"Raw State",children:e.jsxs("details",{className:"goal-details-raw",children:[e.jsx("summary",{children:"Show structured payload"}),e.jsx("pre",{children:JSON.stringify(s,null,2)})]})})]})}function Ia({run:t}){const s=[...t.context.attachments.map(a=>({id:`attachment:${a.id??a.name}`,primary:a.name,secondary:a.ref??a.mediaType??"Attachment"})),...t.context.apps.map(a=>({id:`app:${a.id}`,primary:a.name,secondary:a.required?"Required app context":"Optional app context"})),...t.context.tools.map(a=>({id:`tool:${a.name}`,primary:a.name,secondary:a.outputSummary??a.inputSummary??"Tool context"})),...t.context.targetRepoAssumptions.map(a=>({id:`target:${a}`,primary:a,secondary:"Target assumption"}))],n=t.workflowCapture,i=n?[...n.files.map(a=>({id:`workflow-file:${a}`,primary:a,secondary:"Captured file"})),...n.outputArtifacts.map(a=>({id:`workflow-artifact:${a}`,primary:a,secondary:"Output artifact"})),...n.traceRefs.map(a=>({id:`workflow-trace:${a}`,primary:a,secondary:"Trace"}))]:[];return!s.length&&!i.length?null:e.jsx(O,{title:"Context",children:e.jsx(dt,{refs:[...s,...i]})})}function Wa({goalRuntime:t,subagentRuntime:s,onRunSubagentLifecycleAction:n}){return e.jsxs(e.Fragment,{children:[t?e.jsxs(O,{title:"Goal",children:[e.jsx("p",{className:"goal-details-summary",children:t.objective}),e.jsx(Xe,{rows:[["Status",t.actionLabel],["Runtime",t.timeLabel],["Detail",t.detail]]})]}):null,s?e.jsx(Ba,{runtime:s,onRunSubagentLifecycleAction:n}):null,e.jsx(O,{title:"Raw State",children:e.jsxs("details",{className:"goal-details-raw",children:[e.jsx("summary",{children:"Show structured payload"}),e.jsx("pre",{children:JSON.stringify({goalRuntime:t,subagentRuntime:s},null,2)})]})})]})}function Ba({runtime:t,onRunSubagentLifecycleAction:s}){const[n,i]=l.useState(null),[a,c]=l.useState(null);ke(a);const o=async(u,f)=>{if(!s)return;const p=`${u}:${f}`;i(p),c(null);try{await s({runId:u,action:f})}catch(d){c(d instanceof Error?d.message:String(d))}finally{i(d=>d===p?null:d)}};return e.jsxs(e.Fragment,{children:[e.jsxs(O,{title:"Subagents",children:[e.jsx(Xe,{rows:[["Latest update",qa(t)],["Active",String(t.activeCount)],["Completed",String(t.completedCount)],["Failed",String(t.failedCount)],["Cancelled",String(t.cancelledCount)],["Paused",String(t.needsResumeCount)],["Terminal",String(t.terminalCount)],["Usage",Qa(t.usage.totalTokens,t.usage.requestCount)],["Evidence",String(t.evidenceRefs.length)],["Checks",String(t.testsRunCount)]]}),t.blockers.length>0?e.jsx("ul",{className:"goal-details-list compact",children:t.blockers.slice(0,4).map(u=>e.jsxs("li",{className:"goal-details-list-item",children:[e.jsx("span",{className:`goal-details-inline-state ${u.status}`,children:u.status}),e.jsxs("div",{children:[e.jsx("strong",{children:ft(u.roleId)}),e.jsx("p",{children:u.message})]})]},`${u.runId}:${u.message}`))}):null,e.jsx("ul",{className:"goal-details-list",children:t.runs.slice(0,8).map(u=>e.jsxs("li",{className:"goal-details-list-item",children:[e.jsx("span",{className:`goal-details-inline-state ${u.status}`,children:u.status}),e.jsxs("div",{children:[e.jsx("strong",{children:ft(u.roleId)}),e.jsx("p",{children:u.objective}),u.report?.summary?e.jsx("small",{children:u.report.summary}):null,s?e.jsx(Ua,{pendingAction:n,run:u,onRun:o}):null]})]},u.id))})]}),t.finalResults.length>0?e.jsx(Oa,{results:t.finalResults}):null]})}function Oa({results:t}){return e.jsx(O,{title:"Child Results",children:e.jsx("ol",{className:"goal-details-task-graph",children:t.slice(0,6).map(s=>e.jsxs("li",{className:"goal-details-task-node",children:[e.jsxs("div",{className:"goal-details-task-node-header",children:[e.jsx("span",{className:`goal-details-inline-state ${s.status}`,children:s.status}),e.jsxs("div",{children:[e.jsx("strong",{children:ft(s.roleId)}),e.jsx("small",{children:s.objective})]})]}),e.jsx("p",{children:s.summary}),e.jsxs("div",{className:"goal-details-task-node-meta",children:[e.jsxs("span",{children:[s.refs.length," refs"]}),e.jsxs("span",{children:[s.testsRun.length+s.validationAttempts.length," checks"]}),e.jsxs("span",{children:[s.blockers.length," blockers"]}),e.jsx("span",{children:s.confidence?`${X(s.confidence)} confidence`:"Confidence unknown"})]}),s.findings.length>0?e.jsxs("small",{children:["Findings: ",je(s.findings,3)]}):null,s.changedFiles.length>0?e.jsxs("small",{children:["Files: ",je(s.changedFiles,4)]}):null,s.testsRun.length>0?e.jsxs("small",{children:["Tests: ",je(s.testsRun,3)]}):null,s.validationAttempts.length>0?e.jsxs("small",{children:["Validation: ",je(s.validationAttempts,2)]}):null,s.refs.length>0?e.jsxs("small",{children:["Refs: ",je(s.refs.map(Xa),4)]}):null,s.blockers.length>0?e.jsxs("small",{children:["Blockers: ",je(s.blockers,3)]}):null,s.workspaceRetention?e.jsxs("small",{children:["Workspace: ",Ya(s.workspaceRetention)]}):null,s.importantMessages.length>0?e.jsxs("small",{children:["Messages: ",je(s.importantMessages.map(Za),2)]}):null]},s.runId))})})}function Ua({pendingAction:t,run:s,onRun:n}){const i=Ha(s);return i.length===0?null:e.jsx("div",{className:"goal-details-actions",children:i.map(a=>{const c=`${s.id}:${a}`,o=t===c;return e.jsx("button",{type:"button",disabled:!!t,onClick:()=>{n(s.id,a)},children:o?"Working...":Va(a)},a)})})}function Ha(t){const s=[],n=Ga(t),i=Ka(t);return n&&s.push("cleanup"),i&&s.push("archive"),s}function Va(t){return t==="cleanup"?"Clean":t==="archive"?"Archive":"Clean + archive"}function Ga(t){if(!Ws(t))return!1;const s=Ze(t.metadata);if(!s?.subagentWorkspace&&!s?.workspaceHandoff)return!1;const n=Ze(s.lifecycleCleanup),i=Ze(n?.workspaceCleanup),a=Bs(i?.status);return a!=="removed"&&a!=="deleted"&&a!=="retained"&&a!=="skipped"}function Ka(t){if(!t.childSessionId||!Ws(t))return!1;const s=Ze(Ze(t.metadata)?.childSessionArchive),n=Bs(s?.status);return n!=="archived"&&n!=="already_archived"}function Ws(t){return t.status==="completed"||t.status==="failed"||t.status==="cancelled"}function qa(t){const s=t.latestMeaningfulUpdate;return s?`${ft(s.roleId)} ${s.status}: ${s.message}`:"No structured update"}function Qa(t,s){if(t<=0&&s<=0)return"0 tokens";const n=`${s} ${s===1?"request":"requests"}`;return`${Ja(t)} tokens · ${n}`}function ft(t){return t.slice(0,1).toUpperCase()+t.slice(1).replace(/[-_]+/g," ")}function Xa(t){return`${t.kind}: ${t.label}`}function Za(t){return`${X(t.kind)}: ${t.body}`}function Ya(t){const s=t.expiresAt?`until ${ei(t.expiresAt)}`:"for inspection",n=t.trigger?` · ${X(t.trigger)}`:"";return`retained ${s}${n}`}function je(t,s){const n=t.slice(0,s),i=t.length-n.length;return i>0?`${n.join(", ")} +${i}`:n.join(", ")}function Ja(t){if(t<1e3)return String(t);if(t>=1e6){const n=t/1e6;return`${Rs(n,n<10?2:1)}M`}const s=t/1e3;return`${Rs(s,s<10?1:0)}k`}function ei(t){const s=new Date(t);return Number.isNaN(s.getTime())?t:s.toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function Rs(t,s){return t.toFixed(s).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")}function ti(){return e.jsxs("div",{className:"goal-details-empty",children:[e.jsx(Ye,{size:18}),e.jsx("span",{children:"No active Goal or Create workflow."})]})}function O({children:t,title:s}){return e.jsxs("section",{className:"goal-details-section",children:[e.jsx("h2",{children:s}),t]})}function Xe({rows:t}){return e.jsx("dl",{className:"goal-details-grid",children:t.map(([s,n])=>e.jsxs("div",{children:[e.jsx("dt",{children:s}),e.jsx("dd",{children:n})]},s))})}function dt({refs:t}){return e.jsx("ul",{className:"goal-details-ref-list",children:t.map(s=>e.jsxs("li",{children:[e.jsx("code",{title:s.primary,children:s.primary}),e.jsx("span",{children:s.secondary})]},s.id))})}function Ze(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function Bs(t){return typeof t=="string"&&t.trim()?t.trim():null}function X(t){return t.split(/[_-]/g).filter(Boolean).map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" ")}function si(t){return t==="ready_local"||t==="published_hosted"?"success":t==="blocked"||t==="failed"||t==="cancelled"?"danger":t==="awaiting_questions"||t==="awaiting_plan_approval"?"warning":"active"}function ni({sandboxId:t,connection:s}){const[n,i]=l.useState(null),[a,c]=l.useState([]),[o,u]=l.useState(null),[f,p]=l.useState(null),[d,b]=l.useState(null),[w,k]=l.useState(null);ke(d,{prefix:"Sandbox"}),ke(w,{prefix:"Sandbox integrations"});const C=n?.integrationLeases??[],I=l.useMemo(()=>a.filter(x=>x.status==="active"),[a]),T=l.useMemo(()=>ii(n),[n]),M=l.useCallback(async()=>{if(!s){b("OpenPond App server is not connected.");return}if(!t){i(null),c([]),b(null);return}u("summary"),b(null);try{const x=await z.sandbox(s,t),N=await z.integrationConnections(s,$s(x.sandbox));i(x.sandbox),c(N.connections),k(null)}catch(x){b(x instanceof Error?x.message:String(x))}finally{u(null)}},[s,t]),U=l.useCallback(async()=>{if(!(!s||!n)){p("load"),k(null);try{const[x,N]=await Promise.all([z.integrationConnections(s,$s(n)),z.sandboxIntegrationLeases(s,n.id)]);c(x.connections),i(N.sandbox)}catch(x){k(x instanceof Error?x.message:String(x))}finally{p(null)}}},[s,n]),W=l.useCallback(async x=>{if(!s||!n)return;const N=xt(x.provider),_=N?bt(N):null,P=_?.leasePolicy.allowedCapabilityIds??[];if(!N||!_?.leasePolicy.leaseable||P.length===0){k(`${se(x.provider)} cannot be attached to this sandbox.`);return}p(`attach:${x.id}`),k(null);try{const E=await z.attachSandboxIntegrationConnection(s,n.id,{connectionId:x.id,provider:x.provider,capabilities:P,...x.scopes.length>0?{scopes:x.scopes}:{},..._.leasePolicy.defaultTtlSeconds?{ttlSeconds:_.leasePolicy.defaultTtlSeconds}:{},required:!1});i(E.sandbox)}catch(E){k(E instanceof Error?E.message:String(E))}finally{p(null)}},[s,n]),G=l.useCallback(async x=>{if(!(!s||!n)){p(`remove:${x}`),k(null);try{const N=await z.removeSandboxIntegrationLease(s,n.id,x);i(N.sandbox)}catch(N){k(N instanceof Error?N.message:String(N))}finally{p(null)}}},[s,n]);return l.useEffect(()=>{M()},[M]),t?e.jsxs("div",{className:"sandbox-summary-tab",children:[e.jsxs("section",{className:"sandbox-workspace-section",children:[e.jsxs("div",{className:"sandbox-workspace-heading",children:[e.jsx("h3",{children:"Sandbox"}),e.jsxs("div",{className:"sandbox-workspace-heading-actions",children:[n?e.jsx("span",{children:n.state}):null,e.jsx("button",{type:"button",className:"diff-icon-button",title:"Refresh summary","aria-label":"Refresh summary",disabled:o!==null,onClick:()=>{M()},children:o==="summary"?e.jsx(_e,{className:"spinning",size:14}):e.jsx(Ht,{size:14})})]})]}),n?e.jsxs("dl",{className:"sandbox-workspace-kv",children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Sandbox"}),e.jsx("dd",{children:Fs(n.id)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Runtime"}),e.jsx("dd",{children:n.runtimeDriver})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Spend"}),e.jsxs("dd",{children:[It(n.reservation.capturedUsd)," / ",It(n.budget.maxUsd)]})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Reservation"}),e.jsx("dd",{children:n.reservation.status})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Idle cleanup"}),e.jsx("dd",{children:n.quotas?.idleTimeoutSeconds?`${Math.round(n.quotas.idleTimeoutSeconds/60)} min`:"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Updated"}),e.jsx("dd",{children:Os(n.updatedAt)})]}),T?e.jsxs("div",{children:[e.jsx("dt",{children:"Receipt"}),e.jsxs("dd",{children:[Fs(T.id)," / ",It(T.totalUsd)]})]}):null]}):e.jsxs("div",{className:"sandbox-workspace-loading",children:[o==="summary"?e.jsx(_e,{className:"spinning",size:16}):null,e.jsx("span",{children:o==="summary"?"Loading sandbox":"Sandbox unavailable"})]})]}),e.jsxs("section",{className:"sandbox-workspace-section",children:[e.jsxs("div",{className:"sandbox-workspace-heading",children:[e.jsx("h3",{children:"Integrations"}),e.jsxs("div",{className:"sandbox-workspace-heading-actions",children:[e.jsx("span",{children:C.length}),e.jsx("button",{type:"button",className:"diff-icon-button",title:"Refresh integrations","aria-label":"Refresh integrations",disabled:f!==null||!n,onClick:()=>{U()},children:f==="load"?e.jsx(_e,{className:"spinning",size:14}):e.jsx(Ht,{size:14})})]})]}),C.length>0?e.jsx("div",{className:"sandbox-workspace-integration-list",children:C.map(x=>e.jsxs("div",{className:"sandbox-workspace-integration-row",children:[e.jsxs("div",{className:"sandbox-workspace-integration-main",children:[e.jsx("span",{children:se(x.provider)}),e.jsxs("small",{children:[x.required?"required":"optional"," / ",oi(x)," / ",ai(x)]})]}),e.jsx("button",{type:"button",className:"diff-icon-button",title:`Revoke ${se(x.provider)} lease`,"aria-label":`Revoke ${se(x.provider)} lease`,disabled:f!==null,onClick:()=>{G(x.leaseId)},children:f===`remove:${x.leaseId}`?e.jsx(_e,{className:"spinning",size:14}):e.jsx(On,{size:14})}),e.jsxs("div",{className:"sandbox-workspace-chip-row",children:[x.capabilities.slice(0,5).map(N=>e.jsx("span",{children:li(x.provider,N)},N)),x.capabilities.length>5?e.jsxs("span",{children:["+",x.capabilities.length-5]}):null]})]},x.leaseId))}):e.jsx("p",{className:"sandbox-workspace-empty",children:"No active integration leases."}),I.length>0?e.jsx("div",{className:"sandbox-workspace-integration-list",children:I.map(x=>{const N=C.some(E=>E.provider===x.provider),P=ri(x)?.leasePolicy.allowedCapabilityIds.length??0;return e.jsxs("div",{className:"sandbox-workspace-integration-row compact",children:[e.jsxs("div",{className:"sandbox-workspace-integration-main",children:[e.jsx("span",{children:ci(x)}),e.jsx("small",{children:di(x,P)})]}),e.jsx("button",{type:"button",className:"diff-icon-button",title:N?`${se(x.provider)} already attached`:`Attach ${se(x.provider)}`,"aria-label":N?`${se(x.provider)} already attached`:`Attach ${se(x.provider)}`,disabled:N||f!==null||P===0,onClick:()=>{W(x)},children:f===`attach:${x.id}`?e.jsx(_e,{className:"spinning",size:14}):e.jsx(Un,{size:14})})]},x.id)})}):e.jsx("p",{className:"sandbox-workspace-empty",children:"No connected accounts available."})]})]}):e.jsx("div",{className:"sandbox-summary-tab",children:e.jsx("p",{className:"sandbox-workspace-empty",children:"No sandbox is attached yet."})})}function $s(t){return{status:"active"}}function ai(t){return t.proxyUrl?"runtime proxy available":"metadata only, no runtime proxy"}function ii(t){return t?.receipts?.at(-1)??null}function ri(t){const s=xt(t.provider);return s?bt(s):null}function se(t){const s=xt(t),n=s?bt(s):null;return n?n.label:t==="microsoft_teams"?"Microsoft Teams":t?t.replace(/_/g," "):"Integration"}function li(t,s){const n=xt(t);return(n?bt(n):null)?.capabilities.find(a=>a.id===s)?.label??s}function oi(t){return t.expiresAt?`expires ${Os(t.expiresAt)}`:"active"}function ci(t){const s=t.providerAccountName?.trim();return s?`${se(t.provider)} / ${s}`:se(t.provider)}function di(t,s){const n=[];return t.providerWorkspaceName&&n.push(t.providerWorkspaceName),n.push(`${s} lease ${s===1?"capability":"capabilities"}`),t.scopes.length>0&&n.push(`${t.scopes.length} ${t.scopes.length===1?"scope":"scopes"}`),n.join(" / ")}function Fs(t){return t.length>10?`${t.slice(0,8)}...`:t}function Os(t){if(!t)return"-";const s=new Date(t);return Number.isNaN(s.valueOf())?"-":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(s)}function It(t){const s=Number(t??0);return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:s>=10?2:4}).format(Number.isFinite(s)?s:0)}function ui({summary:t}){const s=ha(t.taskset),n=t.taskset.learningSignals.demonstrations.filter(o=>o.approved).length,i=t.taskset.tasks.filter(o=>o.split==="frozen_eval").length,a=t.plan?.recipe.method==="sft"||t.plan?.recipe.method==="grpo"?t.plan.recipe:null,c=ma(t.taskset,t.plan);return e.jsxs("div",{className:"training-sidebar-summary",children:[e.jsxs("header",{children:[e.jsx("h2",{children:xa(t.taskset.name)}),e.jsx("span",{children:t.job?ba(t.job.status):t.taskset.readiness?.ready?"Ready to train":"Needs review"})]}),e.jsxs("section",{children:[e.jsx("h3",{children:"Run"}),e.jsxs("dl",{children:[e.jsx(B,{label:"Primary recommendation",value:s.toUpperCase()}),e.jsx(B,{label:"Training stage",value:c}),e.jsx(B,{label:"Base model",value:a?.baseModel.id??"Not selected"}),e.jsx(B,{label:"Compute",value:t.plan?ga(t.plan.destinationId):"Not selected"}),e.jsx(B,{label:"Started",value:ja(t.job?.startedAt??null)}),e.jsx(B,{label:"Duration",value:va(t.job?.startedAt??null,t.job?.completedAt??null)})]})]}),e.jsxs("section",{children:[e.jsx("h3",{children:"Data"}),e.jsxs("dl",{children:[e.jsx(B,{label:"Training examples",value:String(n)}),e.jsx(B,{label:"Test examples",value:String(i)}),e.jsx(B,{label:"Dataset sources",value:String(t.taskset.sourceRefs.length)})]})]}),a?e.jsxs("section",{children:[e.jsx("h3",{children:"Recipe"}),e.jsxs("dl",{children:[a.method==="grpo"?e.jsx(B,{label:"RL loss",value:a.loss.method==="gspo-token"?"GSPO-token":a.loss.method.toUpperCase()}):null,e.jsx(B,{label:"LoRA rank",value:String(a.lora.rank)}),e.jsx(B,{label:"Learning rate",value:String(a.optimizer.learningRate)}),e.jsx(B,{label:"Optimizer steps",value:String(a.optimizer.maxSteps)}),e.jsx(B,{label:a.method==="grpo"?"Prompt length":"Sequence length",value:String(a.method==="grpo"?a.dataset.maxPromptTokens:a.dataset.maxSequenceLength)})]})]}):null,e.jsxs("section",{children:[e.jsx("h3",{children:"Result"}),e.jsxs("dl",{children:[e.jsx(B,{label:"Adapter",value:t.lineage?`${c} ready`:"Not created"}),e.jsx(B,{label:"Evaluation",value:t.lineage?.frozenEvaluationArtifactId?"Completed":"Not completed"}),e.jsx(B,{label:"Artifacts",value:String(t.artifacts.length)})]})]})]})}function B({label:t,value:s}){return e.jsxs("div",{children:[e.jsx("dt",{children:t}),e.jsx("dd",{children:s})]})}function fi(t){const s=Es("","","folder");for(const n of t){const i=n.endsWith("/"),a=n.split("/").filter(Boolean);if(a.length===0)continue;let c=s,o="";for(let u=0;u<a.length;u+=1){const f=a[u];o=o?`${o}/${f}`:f;const p=!i&&u===a.length-1?"file":"folder",d=`${p}:${f}`;let b=c.childMap.get(d);b||(b=Es(f,o,p),c.childMap.set(d,b),c.children.push(b)),c=b}}return Us(s.children)}function Es(t,s,n){return{name:t,path:s,type:n,children:[],childMap:new Map}}function Us(t){return t.sort((s,n)=>s.type!==n.type?s.type==="folder"?-1:1:s.name.localeCompare(n.name)).map(s=>({name:s.name,path:s.path,type:s.type,children:Us(s.children)}))}function pi({changedByPath:t,expandedFolderPaths:s,rootPath:n,repoFiles:i,selectedPath:a,onOpenFile:c,onToggleFolder:o}){const u=l.useMemo(()=>fi(i),[i]);return e.jsxs("div",{className:"workspace-file-tree-view",children:[e.jsxs("div",{className:"workspace-file-tree-header",children:[e.jsx(ut,{size:14}),e.jsx("strong",{title:n??void 0,children:n?n.split("/").at(-1):"Files"}),e.jsx("span",{children:i.length})]}),e.jsx("div",{className:"workspace-file-tree",children:u.map(f=>e.jsx(Hs,{changedByPath:t,expandedFolderPaths:s,node:f,rootPath:n,selectedPath:a,onOpenFile:c,onToggleFolder:o},`${f.type}:${f.path}`))})]})}function Hs({changedByPath:t,depth:s=0,expandedFolderPaths:n,node:i,rootPath:a,selectedPath:c,onOpenFile:o,onToggleFolder:u}){const f=a?`${a}/${i.path}`:i.path,p=i.type==="folder"&&n.has(f),d=t.get(f),b=2+s*11;return i.type==="folder"?e.jsxs("div",{className:"workspace-file-tree-node",children:[e.jsxs("button",{type:"button",className:"workspace-file-tree-row folder","aria-expanded":p,style:{paddingLeft:b},onClick:()=>u(f),children:[p?e.jsx(ut,{size:14}):e.jsx(Hn,{size:14}),e.jsx("span",{children:i.name})]}),p&&i.children.map(w=>e.jsx(Hs,{changedByPath:t,depth:s+1,expandedFolderPaths:n,node:w,rootPath:a,selectedPath:c,onOpenFile:o,onToggleFolder:u},`${w.type}:${w.path}`))]}):e.jsxs("button",{type:"button",className:`workspace-file-tree-row file ${d?"changed":""} ${c===f?"selected":""}`,style:{paddingLeft:b},onClick:()=>o(f),children:[e.jsx(Ea,{size:13}),e.jsx("span",{children:i.name}),d&&e.jsxs("small",{children:[e.jsxs("span",{className:"diff-addition",children:["+",d.additions]}),e.jsxs("span",{className:"diff-deletion",children:["-",d.deletions]})]})]})}function As({diff:t,expandedFolderPaths:s,rootPath:n,repoFiles:i,selectedPath:a,onOpenFile:c,onToggleFolder:o}){const u=t?.files??[],f=l.useMemo(()=>new Map(u.map(b=>[b.path,b])),[u]),p=n?.replace(/^\/+|\/+$/g,"")||null,d=l.useMemo(()=>{if(!p)return i;const b=`${p}/`;return i.filter(w=>w.startsWith(b)).map(w=>w.slice(b.length)).filter(Boolean)},[p,i]);return e.jsx("div",{className:"workspace-diff-files-view",children:e.jsx(pi,{changedByPath:f,expandedFolderPaths:s,rootPath:p,repoFiles:d,selectedPath:a,onOpenFile:c,onToggleFolder:o})})}function hi({collapsed:t,editorControlsVisible:s,hideWhiteSpace:n,loadFullFiles:i,renderMarkdown:a,wordDiffs:c,wordWrap:o,onClose:u,onCopyGitApply:f,onRefresh:p,onToggleCollapsed:d,onToggleEditorControlsVisible:b,onToggleHideWhiteSpace:w,onToggleLoadFullFiles:k,onToggleRenderMarkdown:C,onToggleWordDiffs:I,onToggleWordWrap:T}){return e.jsxs("div",{className:"workspace-diff-options-menu",role:"menu",children:[e.jsx(le,{icon:e.jsx(Ht,{size:14}),label:"Refresh",onClick:p,onClose:u}),e.jsx(le,{checked:o,icon:e.jsx(Vn,{size:14}),label:"Enable word wrap",onClick:T,onClose:u}),e.jsx(le,{checked:t,icon:e.jsx(Ca,{size:14}),label:"Collapse all diffs",onClick:d,onClose:u}),e.jsx("div",{className:"workspace-diff-menu-divider"}),e.jsx(le,{checked:s,icon:e.jsx(La,{size:14}),label:"Show editor controls",onClick:b,onClose:u}),e.jsx(le,{checked:a,icon:e.jsx(Ms,{size:14}),label:"Render Markdown",onClick:C,onClose:u}),e.jsx(le,{checked:!i,icon:e.jsx(Ye,{size:14}),label:"Show diffs first",onClick:k,onClose:u}),e.jsx(le,{checked:c,icon:e.jsx(Sa,{size:14}),label:"Enable word diffs",onClick:I,onClose:u}),e.jsx(le,{checked:n,icon:e.jsx(Gn,{size:14}),label:"Hide white space",onClick:w,onClose:u}),e.jsx(le,{icon:e.jsx(Kn,{size:14}),label:"Copy git apply command",onClick:f,onClose:u})]})}function le({checked:t,icon:s,label:n,onClick:i,onClose:a}){return e.jsxs("button",{type:"button",role:"menuitem",onClick:()=>{i?.(),a()},children:[s,e.jsx("span",{children:n}),t&&e.jsx(qn,{size:14})]})}function mi({addMenuOpen:t,expanded:s,filteredFiles:n,dirtyFilePaths:i,openFiles:a,goalDetailsAvailable:c,searchOpen:o,searchQuery:u,selectedPath:f,sideChatTabs:p=[],summaryAvailable:d,sourceStatus:b,sourceSwitcher:w,visibleTab:k,onCloseFileTab:C,onCloseSideChat:I,onCloseSearch:T,onOpenFile:M,onOpenBrowser:U,onOpenSearch:W,onOpenSideChat:G,onSearchQueryChange:x,onSelectFile:N,onSelectFiles:_,onSelectGoal:P,onSelectSummary:E,onSelectSideChat:J,onToggleAddMenu:D,onToggleExpanded:V}){const K=l.useRef(null);l.useEffect(()=>{if(!t&&!o)return;function g(){t&&D(),o&&T()}function q(oe){K.current?.contains(oe.target)||g()}function ie(oe){oe.key==="Escape"&&g()}return document.addEventListener("pointerdown",q),document.addEventListener("keydown",ie),()=>{document.removeEventListener("pointerdown",q),document.removeEventListener("keydown",ie)}},[t,T,D,o]);function ae(g){if(g.key==="Escape"){T();return}g.key==="Enter"&&n[0]&&M(n[0])}function A(g){if(!["ArrowRight","ArrowLeft","Home","End"].includes(g.key))return;const q=g.target;if(!(q instanceof HTMLButtonElement)||q.getAttribute("role")!=="tab")return;const ie=Array.from(g.currentTarget.querySelectorAll('button[role="tab"]')),oe=ie.indexOf(q);if(oe<0||ie.length===0)return;g.preventDefault();const ee=sa(oe,ie.length,g.key),Se=ie[ee];if(!Se)return;Se.focus(),Se.click();const Q=Se.id;Q&&window.requestAnimationFrame(()=>document.getElementById(Q)?.focus())}return e.jsxs("div",{className:"workspace-diff-topbar",children:[e.jsxs("div",{className:"workspace-diff-tabs",role:"tablist","aria-label":"Right sidebar views",onKeyDown:A,children:[c?e.jsxs("button",{type:"button",className:`workspace-diff-tab ${k==="goal"?"active":""}`,role:"tab","aria-selected":k==="goal",onClick:P,children:[e.jsx(Ye,{size:14}),e.jsx("span",{children:"Goal"})]}):null,d&&E?e.jsxs("button",{type:"button",className:`workspace-diff-tab ${k==="summary"?"active":""}`,role:"tab","aria-selected":k==="summary",onClick:E,children:[e.jsx(Cs,{size:14}),e.jsx("span",{children:"Summary"})]}):null,e.jsxs("button",{type:"button",className:`workspace-diff-tab ${k==="files"?"active":""}`,role:"tab",id:"right-sidebar-files-tab","aria-controls":"right-sidebar-files-panel","aria-selected":k==="files",tabIndex:k==="files"?0:-1,onClick:_,children:[e.jsx(ut,{size:14}),e.jsx("span",{children:"Files"})]}),a.map(g=>e.jsxs("div",{className:`workspace-diff-tab file ${k==="file"&&f===g.path?"active":""}`,children:[e.jsxs("button",{type:"button",className:"workspace-diff-tab-main",role:"tab","aria-selected":k==="file"&&f===g.path,title:g.path,onClick:()=>N(g.path),children:[e.jsx(Ye,{className:"workspace-diff-tab-icon",size:13}),i.has(g.path)&&e.jsx("span",{className:"workspace-diff-tab-dirty","aria-hidden":"true"}),e.jsx("span",{children:g.path.split("/").pop()})]}),e.jsx("button",{type:"button",className:"workspace-diff-tab-close",title:`Close ${g.path}`,onClick:q=>C(g.path,q),children:e.jsx(ks,{size:12})})]},g.path)),p.map(g=>e.jsxs("div",{className:"workspace-diff-tab right-chat-tab",children:[e.jsx("button",{type:"button",className:"workspace-diff-tab-main",role:"tab",id:`right-chat-tab-${g.id}`,"aria-controls":`right-chat-panel-${g.id}`,"aria-selected":!1,tabIndex:-1,title:g.title,onClick:()=>J?.(g.id),children:e.jsx("span",{children:g.title})}),I?e.jsx("button",{type:"button",className:"workspace-diff-tab-close",title:`Close ${g.title}`,"aria-label":`Close ${g.title}`,onClick:q=>{q.stopPropagation(),I(g.id)},children:e.jsx(ks,{size:12})}):null]},g.id)),e.jsxs("div",{className:"workspace-diff-add-anchor",ref:K,children:[e.jsx("button",{type:"button",className:`workspace-diff-add-tab ${t||o?"active":""}`,title:"Add","aria-label":"Add to right sidebar",onClick:D,children:e.jsx(Qn,{size:15})}),t&&e.jsxs("div",{className:"workspace-diff-add-menu",role:"menu",children:[G?e.jsxs("button",{type:"button",role:"menuitem",onClick:G,children:[e.jsx(Xn,{size:14}),e.jsx("span",{children:"New task"}),e.jsx("kbd",{})]}):null,e.jsxs("button",{type:"button",role:"menuitem",onClick:_,children:[e.jsx(ut,{size:14}),e.jsx("span",{children:"Files"}),e.jsx("kbd",{})]}),d&&E?e.jsxs("button",{type:"button",role:"menuitem",onClick:E,children:[e.jsx(Cs,{size:14}),e.jsx("span",{children:"Summary"}),e.jsx("kbd",{})]}):null,e.jsxs("button",{type:"button",role:"menuitem",onClick:W,children:[e.jsx(Zn,{size:14}),e.jsx("span",{children:"Open file"}),e.jsx("kbd",{children:"Ctrl+P"})]}),e.jsxs("button",{type:"button",role:"menuitem",onClick:U,children:[e.jsx(Yn,{size:14}),e.jsx("span",{children:"Browser"}),e.jsx("kbd",{children:"Ctrl+I"})]})]}),o&&e.jsxs("div",{className:"workspace-file-search-popover",children:[e.jsx("input",{autoFocus:!0,placeholder:"Search files",value:u,onChange:g=>x(g.target.value),onKeyDown:ae}),e.jsx("span",{children:"Files"}),e.jsx("div",{className:"workspace-file-search-results",children:n.length===0?e.jsx("small",{children:"Type to search for files"}):n.map(g=>e.jsx("button",{type:"button",onClick:()=>M(g),children:g},g))})]})]})]}),w||b?e.jsxs("div",{className:"workspace-diff-source-bar","aria-label":"Workspace source",children:[w?e.jsx("div",{className:"workspace-diff-source-toggle",role:"group","aria-label":"File source",children:w.options.map(g=>e.jsx("button",{type:"button",className:w.value===g.value?"active":"","aria-pressed":w.value===g.value,onClick:()=>w.onChange(g.value),children:g.label},g.value))}):null,b?e.jsx("span",{className:`workspace-diff-source-status ${b.tone}`,children:b.label}):null]}):null,e.jsx("button",{type:"button",className:"diff-icon-button",title:s?"Restore files panel":"Expand files panel","aria-label":s?"Restore files panel":"Expand files panel",onClick:V,children:s?e.jsx(Jn,{size:14}):e.jsx(ea,{size:14})})]})}function xi({canCheckActiveFile:t,canSaveActiveFile:s,collapsed:n,editorControlsVisible:i,editorDiagnosticStatus:a,editorDiagnosticsChecking:c,hideWhiteSpace:o,loadFullFiles:u,menuOpen:f,renderMarkdown:p,showEditorCommandBar:d,showRenderMarkdownToggle:b,splitView:w,wordDiffs:k,wordWrap:C,onCopyGitApply:I,onEditorCheck:T,onEditorRedo:M,onEditorSave:U,onEditorUndo:W,onRefresh:G,onToggleCollapsed:x,onToggleEditorControlsVisible:N,onToggleHideWhiteSpace:_,onToggleLoadFullFiles:P,onToggleMenu:E,onToggleRenderMarkdown:J,onToggleSplitView:D,onToggleWordDiffs:V,onToggleWordWrap:K}){return e.jsx("div",{className:"workspace-diff-toolbar",children:e.jsxs("div",{className:"workspace-diff-toolbar-actions",children:[e.jsxs("div",{className:"workspace-diff-menu-anchor",children:[e.jsx("button",{type:"button",className:"diff-icon-button",title:"Diff options","aria-haspopup":"menu","aria-expanded":f,onClick:()=>E(),children:e.jsx(ta,{size:15})}),f&&e.jsx(hi,{collapsed:n,editorControlsVisible:i,hideWhiteSpace:o,loadFullFiles:u,renderMarkdown:p,wordDiffs:k,wordWrap:C,onClose:()=>E(!1),onCopyGitApply:I,onRefresh:G,onToggleCollapsed:x,onToggleEditorControlsVisible:N,onToggleHideWhiteSpace:_,onToggleLoadFullFiles:P,onToggleRenderMarkdown:J,onToggleWordDiffs:V,onToggleWordWrap:K})]}),d&&e.jsxs("div",{className:"workspace-editor-command-bar","aria-label":"Editor controls",children:[e.jsx("button",{type:"button",className:"diff-icon-button",title:"Save file","aria-label":"Save file",disabled:!s,onClick:U,children:e.jsx(wa,{size:14})}),e.jsx("button",{type:"button",className:"diff-icon-button",title:"Undo","aria-label":"Undo",onClick:W,children:e.jsx(_a,{size:14})}),e.jsx("button",{type:"button",className:"diff-icon-button",title:"Redo","aria-label":"Redo",onClick:M,children:e.jsx(Da,{size:14})}),e.jsx("button",{type:"button",className:"diff-icon-button",title:"Check file","aria-label":"Check file",disabled:!t,onClick:T,children:c?e.jsx(_e,{className:"spinning",size:14}):e.jsx(ys,{size:14})}),a&&e.jsxs("span",{className:`workspace-editor-diagnostic-chip ${a.severity}`,children:[a.severity==="error"||a.severity==="warning"||a.severity==="unavailable"?e.jsx(Is,{size:13}):e.jsx(ys,{size:13}),e.jsx("span",{children:a.label})]})]}),b&&e.jsx("button",{type:"button",className:`diff-icon-button ${p?"active":""}`,title:p?"Show Markdown source":"Render Markdown","aria-label":p?"Show Markdown source":"Render Markdown","aria-pressed":p,onClick:J,children:e.jsx(Ms,{size:14})}),e.jsx("button",{type:"button",className:`diff-icon-button ${w?"active":""}`,title:w?"Show unified diff":"Show split diff","aria-label":w?"Show unified diff":"Show split diff","aria-pressed":w,onClick:D,children:e.jsx($a,{size:14})})]})})}const bi={cjs:"typescript",css:"css",html:"html",js:"typescript",json:"json",jsx:"typescript",md:"markdown",mjs:"typescript",py:"python",sh:"shell",ts:"typescript",tsx:"typescript",yaml:"yaml",yml:"yaml"};function Vt(t){const s=t.split("/").pop()?.toLowerCase()??"";if(s==="dockerfile")return"shell";if(s==="readme"||s==="readme.md")return"markdown";const n=s.includes(".")?s.split(".").pop()??"":"";return bi[n]??"text"}function gi(t,s){return t?s==="markdown"?ji(t):s==="json"?we(t,/("(?:\\.|[^"\\])*"(?=\s*:)|"(?:\\.|[^"\\])*"|[-]?\b\d+(?:\.\d+)?\b|\btrue\b|\bfalse\b|\bnull\b|[{}[\]:,])/g):s==="css"?we(t,/(\/\*.*?\*\/|#[\da-fA-F]{3,8}\b|--[\w-]+|[.#]?[\w-]+(?=\s*:)|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b\d+(?:\.\d+)?(?:px|rem|em|%|vh|vw)?\b|[{}():;,])/g):s==="html"?we(t,/(<!--.*?-->|<\/?[\w-]+|[\w:-]+(?==)|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|[<>/=])/g):s==="shell"?we(t,/(#.*$|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b(?:cd|cp|export|git|npm|pnpm|bun|yarn|rm|mkdir|test|if|then|fi|for|do|done|echo)\b|\$[\w_]+|&&|\|\||[|&;=])/g):s==="python"?we(t,/(#.*$|"""[\s\S]*?"""|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b(?:class|def|return|if|elif|else|for|while|try|except|finally|with|as|import|from|None|True|False|async|await|lambda|yield)\b|\b[A-Z][\w]*\b|\b\d+(?:\.\d+)?\b|[+\-*/%=<>!&|.:,()[\]{}]+)/g):we(t,/(\/\/.*$|\/\*.*?\*\/|`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b(?:abstract|as|async|await|boolean|break|case|catch|class|const|continue|default|else|enum|export|extends|false|finally|for|from|function|if|import|in|interface|let|new|null|number|of|return|string|switch|throw|true|try|type|undefined|void|while)\b|\b[A-Z][\w]*\b|\b\d+(?:\.\d+)?\b|[+\-*/%=<>!&|?:.,()[\]{}]+)/g):[{text:" ",kind:"plain"}]}function ji(t){return/^\s{0,3}#{1,6}\s/.test(t)?[{text:t,kind:"keyword"}]:/^\s*[-*+]\s/.test(t)?[{text:t,kind:"property"}]:we(t,/(`[^`]+`|\*\*[^*]+\*\*|\[[^\]]+\]\([^)]+\)|https?:\/\/\S+)/g)}function vi(t){return/^(\/\/|#|\/\*|<!--)/.test(t)?"comment":/^["'`]/.test(t)?"string":/^[-]?\d/.test(t)||/^#[\da-fA-F]{3,8}\b/.test(t)?"number":/^\b[A-Z]/.test(t)?"type":/^[.#]?[\w-]+$/.test(t)&&t.includes("-")?"property":/^(?:[{}()[\],.:;<>/=+\-*&|!?%]+)$/.test(t)?"operator":/^(?:--|\$)/.test(t)?"property":"keyword"}function we(t,s){const n=[];let i=0;for(const a of t.matchAll(s)){const c=a.index??0;c>i&&n.push({text:t.slice(i,c),kind:"plain"});const o=a[0];if(n.push({text:o,kind:vi(o)}),i=c+o.length,/^(\/\/|#|<!--)/.test(o))break}return i<t.length&&n.push({text:t.slice(i),kind:"plain"}),n.length>0?n:[{text:t,kind:"plain"}]}function pt({language:t,text:s}){return e.jsx(e.Fragment,{children:gi(s,t).map((n,i)=>e.jsx("span",{className:`syntax-token ${n.kind}`,children:n.text},`${i}-${n.text}`))})}const wi=`
|
|
3
|
+
|
|
4
|
+
[file truncated]`,ki=l.lazy(()=>ra(()=>import("./WorkspaceMonacoEditor-LhFdzCRs.js").then(t=>t.jc),__vite__mapDeps([0,1,2,3]),import.meta.url)),Wt=6,yi=18,ve=22,Ls=44,Si=160,Ps=12;function ht({path:t,workspaceName:s,workspaceRootPath:n,onSelectPath:i}){const a=zs(t,n),c=aa(a),o=c?Ni(a):s?.trim()||"Workspace",f=(c&&o!=="/"&&a.startsWith(`${o}/`)?a.slice(o.length+1):a).split("/").filter(Boolean),p=!!(i&&!c);return e.jsxs("span",{className:"workspace-file-breadcrumbs",title:c?a:`${o} > ${a}`,children:[i&&!c?e.jsx("button",{type:"button",onClick:()=>i(null),children:o}):e.jsx("span",{children:o}),f.map((d,b)=>{const w=b===f.length-1,k=f.slice(0,b+1).join("/");return e.jsxs("span",{className:"workspace-file-breadcrumb-segment",children:[e.jsx(ia,{size:13}),i&&p&&!w?e.jsx("button",{type:"button",onClick:()=>i(k),children:d}):e.jsx("span",{children:d})]},`${b}-${d}`)})]})}function Ni(t){const s=/^[A-Za-z]:\//.exec(t);return s?s[0].slice(0,-1):"/"}function Ci({collapsed:t=!1,diagnostics:s=[],draftContent:n,editable:i=!1,editorRef:a,error:c,file:o,hideWhiteSpace:u=!1,imageSrc:f,loading:p,loadFullFiles:d,onOpenImage:b,onSelectBreadcrumbPath:w,onDraftContentChange:k,onLspAction:C,onSave:I,renderMarkdown:T,saveError:M,saving:U=!1,splitView:W=!1,wordDiffs:G=!1,wordWrap:x,workspaceName:N,workspaceRootPath:_}){ke(c,{prefix:"File preview"}),ke(M,{prefix:"Save failed"});const P=n??o.content??"",E=l.useMemo(()=>P.split(`
|
|
5
|
+
`).slice(0,800),[P]),J=Vt(o.path),D=n!=null||o.content!=null,V=P.endsWith(wi),K=T&&D&&Ot(o.path),ae=D&&na(o.path)&&Ai(P);return f?e.jsxs("div",{className:"workspace-file-preview",children:[e.jsx("div",{className:"workspace-diff-file-heading",children:e.jsxs("div",{children:[e.jsx(ht,{path:o.path,workspaceName:N,workspaceRootPath:_,onSelectPath:w}),e.jsxs("span",{className:"diff-addition",children:["+",o.additions]}),e.jsxs("span",{className:"diff-deletion",children:["-",o.deletions]})]})}),e.jsx("div",{className:"workspace-file-image-stage",children:e.jsx("button",{type:"button",className:"workspace-file-image-button","aria-label":`Open image preview for ${o.path}`,onClick:b,children:e.jsx("img",{alt:o.path,decoding:"async",src:f})})})]}):!d&&o.patch||!D&&o.patch?W?e.jsx($i,{collapsed:t,file:o,hideWhiteSpace:u,onSelectBreadcrumbPath:w,wordDiffs:G,wordWrap:x,workspaceName:N,workspaceRootPath:_}):e.jsx(Ri,{collapsed:t,file:o,hideWhiteSpace:u,wordWrap:x,workspaceName:N,workspaceRootPath:_,onSelectBreadcrumbPath:w}):e.jsxs("div",{className:`workspace-file-preview ${x?"wrap":""}`,children:[e.jsxs("div",{className:"workspace-diff-file-heading",children:[e.jsxs("div",{children:[e.jsx(ht,{path:o.path,workspaceName:N,workspaceRootPath:_,onSelectPath:w}),e.jsxs("span",{className:"diff-addition",children:["+",o.additions]}),e.jsxs("span",{className:"diff-deletion",children:["-",o.deletions]})]}),U?e.jsx("span",{className:"workspace-file-save-state",children:"Saving"}):null]}),D?K?e.jsx("div",{className:"workspace-markdown-preview",children:e.jsx(fa,{content:P})}):ae?e.jsx(Fi,{file:o,contentBase64:P}):i&&!V?e.jsx(l.Suspense,{fallback:e.jsx("div",{className:"workspace-diff-code-empty",children:"Loading editor"}),children:e.jsx(ki,{diagnostics:s,filePath:o.path,onChange:A=>k?.(A),onLspAction:C,onSave:()=>I?.(),ref:a,value:P,wordWrap:x})}):e.jsx("div",{className:"workspace-file-code",children:E.map((A,g)=>e.jsxs("div",{className:"workspace-file-code-row",children:[e.jsx("span",{children:g+1}),e.jsx("code",{children:e.jsx(pt,{language:J,text:A||" "})})]},`${g}-${A}`))}):e.jsx("div",{className:"workspace-diff-code-empty",children:p?"Loading file content":"No file content available."})]})}function Ri({collapsed:t=!1,file:s,hideWhiteSpace:n=!1,wordWrap:i,workspaceName:a,workspaceRootPath:c,onSelectBreadcrumbPath:o}){const u=l.useMemo(()=>Gs(s.patch,n),[s.patch,n]),f=Vt(s.path);return e.jsxs("div",{className:`workspace-diff-preview ${i?"wrap":""}`,children:[e.jsx("div",{className:"workspace-diff-file-heading",children:e.jsxs("div",{children:[e.jsx(ht,{path:s.path,workspaceName:a??null,workspaceRootPath:c,onSelectPath:o}),e.jsxs("span",{className:"diff-addition",children:["+",s.additions]}),e.jsxs("span",{className:"diff-deletion",children:["-",s.deletions]})]})}),t?e.jsx("div",{className:"workspace-diff-code-empty",children:"Diff collapsed"}):e.jsx(Vs,{ariaLabel:`${s.path} diff`,className:"workspace-diff-code",emptyMessage:"No patch available.",rows:u,renderRow:(p,d)=>p.kind==="spacer"?e.jsx("div",{className:"workspace-diff-spacer",role:"row",children:p.label},`${p.label}-${d}`):e.jsxs("div",{className:`workspace-diff-code-row ${p.kind}`,role:"row",children:[e.jsx("span",{className:"workspace-diff-line-number",role:"cell",children:p.newLine||p.oldLine}),e.jsx("code",{role:"cell",children:e.jsx(pt,{language:f,text:p.newContent||p.oldContent||" "})})]},`${p.oldLine}-${p.newLine}-${d}`),wordWrap:i})]})}function $i({collapsed:t,file:s,hideWhiteSpace:n,wordDiffs:i,wordWrap:a,workspaceName:c,workspaceRootPath:o,onSelectBreadcrumbPath:u}){const f=l.useMemo(()=>Gs(s.patch,n),[s.patch,n]),p=Vt(s.path);return e.jsxs("div",{className:`workspace-diff-preview split ${a?"wrap":""} ${i?"word-diffs":""}`,children:[e.jsxs("div",{className:"workspace-diff-file-heading",children:[e.jsxs("div",{children:[e.jsx(ht,{path:s.path,workspaceName:c,workspaceRootPath:o,onSelectPath:u}),e.jsxs("span",{className:"diff-addition",children:["+",s.additions]}),e.jsxs("span",{className:"diff-deletion",children:["-",s.deletions]})]}),e.jsx(ka,{size:14})]}),t?e.jsx("div",{className:"workspace-diff-code-empty",children:"Diff collapsed"}):e.jsx(Vs,{ariaLabel:`${s.path} split diff`,className:"workspace-split-code",emptyMessage:"No patch available.",rows:f,renderRow:(d,b)=>d.kind==="spacer"?e.jsx("div",{className:"workspace-diff-spacer split",role:"row",children:d.label},`${d.label}-${b}`):e.jsxs("div",{className:`workspace-split-row ${d.kind}`,role:"row",children:[e.jsx("span",{className:"workspace-diff-line-number old",role:"cell",children:d.oldLine}),e.jsx("code",{className:"old",role:"cell",children:e.jsx(pt,{language:p,text:d.oldContent||" "})}),e.jsx("span",{className:"workspace-diff-line-number new",role:"cell",children:d.newLine}),e.jsx("code",{className:"new",role:"cell",children:e.jsx(pt,{language:p,text:d.newContent||" "})})]},`${d.oldLine}-${d.newLine}-${b}`),wordWrap:a})]})}function Fi({file:t,contentBase64:s}){const n=l.useMemo(()=>{const i=Li(s);if(!i)return null;const a=new Blob([new Uint8Array(i)],{type:Ei(t.path)});return URL.createObjectURL(a)},[s,t.path]);return l.useEffect(()=>()=>{n&&URL.revokeObjectURL(n)},[n]),n?e.jsxs("div",{className:"workspace-document-preview",children:[e.jsxs("div",{className:"workspace-document-preview-card",children:[e.jsx("strong",{children:t.path.split("/").pop()}),e.jsx("span",{children:"Word document"}),e.jsx("a",{href:n,download:t.path.split("/").pop()||"document",children:"Download document"})]}),e.jsx("iframe",{src:n,title:`${t.path} preview`})]}):e.jsx("div",{className:"workspace-diff-code-empty",children:"Document preview unavailable."})}function Ei(t){return/\.docx$/i.test(t)?"application/vnd.openxmlformats-officedocument.wordprocessingml.document":"application/msword"}function Ai(t){return t.length>0&&/^[A-Za-z0-9+/=\s]+$/.test(t)}function Li(t){try{const s=atob(t.replace(/\s/g,"")),n=new Uint8Array(s.length);for(let i=0;i<s.length;i+=1)n[i]=s.charCodeAt(i);return n}catch{return null}}function Vs({ariaLabel:t,className:s,emptyMessage:n,rows:i,renderRow:a,wordWrap:c}){const o=!c&&i.length>Si,{endIndex:u,offsetTop:f,scrollRef:p,startIndex:d,totalHeight:b}=Pi(i.length,o);return i.length===0?e.jsx("div",{className:s,role:"table","aria-label":t,children:e.jsx("div",{className:"workspace-diff-code-empty",children:n})}):o?e.jsx("div",{className:`${s} virtualized`,ref:p,role:"table","aria-label":t,"aria-rowcount":i.length,children:e.jsx("div",{className:"workspace-diff-virtual-spacer",style:{height:b},children:e.jsx("div",{className:"workspace-diff-virtual-window",style:{transform:`translateY(${f}px)`},children:i.slice(d,u).map((w,k)=>a(w,d+k))})})}):e.jsx("div",{className:s,role:"table","aria-label":t,children:i.map(a)})}function Pi(t,s){const n=l.useRef(null),[i,a]=l.useState({height:ve*Ls,scrollTop:0}),c=l.useCallback(()=>{const p=n.current;p&&a({height:p.clientHeight||ve*Ls,scrollTop:p.scrollTop})},[]);if(l.useEffect(()=>{if(!s)return;const p=n.current;if(!p)return;c();let d=0;const b=()=>{if(typeof window>"u"){c();return}window.cancelAnimationFrame(d),d=window.requestAnimationFrame(c)};p.addEventListener("scroll",b,{passive:!0});const w=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>b());return w?.observe(p),()=>{p.removeEventListener("scroll",b),w?.disconnect(),typeof window<"u"&&window.cancelAnimationFrame(d)}},[s,c]),!s)return{endIndex:t,offsetTop:0,scrollRef:n,startIndex:0,totalHeight:t*ve};const o=Math.ceil(i.height/ve),u=Math.max(0,Math.floor(i.scrollTop/ve)-Ps);return{endIndex:Math.min(t,u+o+Ps*2),offsetTop:u*ve,scrollRef:n,startIndex:u,totalHeight:t*ve}}function Gs(t,s){if(!t.trim())return[];const n=[];let i=0,a=0,c=null,o=null,u=!1,f=[];function p(){n.push(...Di(f)),f=[]}function d(){u&&(p(),c=i,o=a,u=!1)}for(const b of t.split(`
|
|
6
|
+
`)){const w=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(b);if(w){d();const I=Number(w[1]),T=Number(w[2]);if(c!==null&&o!==null){const M=Math.max(I-c,T-o,0);M>0&&n.push({kind:"spacer",label:Ks(M)})}i=I,a=T,u=!0;continue}if(b.startsWith("diff --git")||b.startsWith("index ")||b.startsWith("--- ")||b.startsWith("+++ ")||!u||b.startsWith("\\ No newline"))continue;const k=b.slice(1)||" ";if(s&&!k.trim())continue;if(b.startsWith("+")){p(),n.push({kind:"addition",oldLine:"",newLine:String(a||""),oldContent:"",newContent:k}),a+=1;continue}if(b.startsWith("-")){p(),n.push({kind:"deletion",oldLine:String(i||""),newLine:"",oldContent:k,newContent:""}),i+=1;continue}const C=b.startsWith(" ")?b.slice(1)||" ":b||" ";s&&!C.trim()||(f.push({kind:"context",oldLine:String(i||""),newLine:String(a||""),oldContent:C,newContent:C}),i+=1,a+=1)}return d(),n}function Di(t){if(t.length<yi)return t;const s=t.length-Wt*2;return s<=0?t:[...t.slice(0,Wt),{kind:"spacer",label:Ks(s)},...t.slice(-Wt)]}function Ks(t){return`${t} unmodified ${t===1?"line":"lines"}`}const mt=`
|
|
7
|
+
|
|
8
|
+
[file truncated]`,Ti="openpond.sandboxSourceReadback.v1";async function _i(t,s,n,i=[]){let a;try{a=await z.sandboxDownloadFile(t,s,n,{maxBytes:256*1024})}catch(o){const u=o instanceof Error?o.message:String(o);if(!Mi(u))throw o;const f=Wi(i,s,n);if(f)return f;const p=!!Gt(i,s)?.artifact,d=await z.sandbox(t,s).catch(()=>null);throw new Error(zi(n,d?.sandbox??null,u,{hasReadbackArtifact:p}))}const c=a.file.isBinary?a.file.contentsBase64||null:`${a.contents}${a.file.truncated?mt:""}`;return{path:a.file.path,status:"",additions:0,deletions:0,patch:"",content:c}}function Mi(t){return t.includes("sandbox_not_ready")&&t.includes("placement_stale")||t.includes("sandbox_not_running")}function zi(t,s,n="sandbox_not_ready:placement_stale",i={}){const a=s?Bi(s):null,c=t||"this file";if(i.hasReadbackArtifact)return`Sandbox file content is unavailable because the stopped runtime placement is stale. The latest source checkpoint has a saved readback artifact, but ${c} was not captured as text. Resume the sandbox to inspect it. ${n}`;if(!a)return`Sandbox file content is unavailable because the stopped runtime placement is stale. Resume the sandbox to inspect ${c}. ${n}`;const o=a.preservedSha?a.preservedSha.slice(0,12):null,u=a.sourceRef?` (${a.sourceRef})`:"";return`Sandbox file content is unavailable because the stopped runtime placement is stale. The latest source checkpoint is saved${o?` at ${o}`:""}${u}, but this Desktop app cannot read file bodies from preserved source refs yet. Resume the sandbox to inspect ${c}.`}function Ii(t,s){if(!s)return null;const n=Gt(t,s);if(!n)return null;const i=Qs(n.artifact),a=new Map;for(const u of Kt(i))a.set(u.path,u);for(const u of Xs(n.artifact)){const f=qs(n.artifact,u.path);f&&a.set(u.path,f)}const c=[...a.values()].sort((u,f)=>u.path.localeCompare(f.path)),o=[...new Set(c.map(u=>u.path))].sort((u,f)=>u.localeCompare(f));return{appId:s,repoPath:"",initialized:!0,dirty:!1,filesChanged:c.length,additions:c.reduce((u,f)=>u+f.additions,0),deletions:c.reduce((u,f)=>u+f.deletions,0),repoFiles:o,files:c,error:null,updatedAt:Me(ne(n.artifact)?.createdAt)??n.event.timestamp}}function Wi(t,s,n){if(!s)return null;const i=Gt(t,s);return i?qs(i.artifact,n):null}function Gt(t,s){for(let n=t.length-1;n>=0;n-=1){const i=t[n];if(i?.name!=="workspace_action_result")continue;const a=ne(i.data),c=ne(a?.sourcePreservation),o=ne(c?.sourceReadbackArtifact);if(o&&o.schemaVersion===Ti&&o.sandboxId===s)return{artifact:o,event:i}}return null}function qs(t,s){const n=Kt(Qs(t)).find(c=>c.path===s),i=Xs(t).find(c=>c.path===s);if(!n&&!i)return null;const a=typeof i?.content=="string"?`${i.content}${i.truncated?mt:""}`:null;return{path:i?.path??n?.path??s,status:n?.status??"M",additions:n?.additions??0,deletions:n?.deletions??0,patch:n?.patch??"",content:a}}function Qs(t){const s=ne(t.patch);return typeof s?.text=="string"?s.text:""}function Xs(t){return(Array.isArray(t.files)?t.files:[]).map(n=>{const i=ne(n),a=Me(i?.path);return a?{path:a,...typeof i?.content=="string"?{content:i.content}:{},...i?.truncated===!0?{truncated:!0}:{}}:null}).filter(n=>!!n)}function Bi(t){const s=ne(t.metadata)??{},n=ne(s.sourcePreservation)??ne(s.sourcePreserve),i=ne(s.sourceChangeDetection),a=Me(n?.preservedSha)??Me(i?.preservedSha)??null,c=Me(n?.sourceRef)??Me(i?.sourceRef)??(typeof t.repoRef=="string"?t.repoRef:null);return!a&&!c?null:{preservedSha:a,sourceRef:c}}function ne(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function Me(t){return typeof t=="string"&&t.trim()?t.trim():null}async function Oi(t,s,n,i){const a=await z.sandboxUploadFile(t,s,{path:n,contents:i});return await z.preserveSandboxSource(t,s,{message:"Auto-preserve source after right sidebar save"}),{path:a.file.path,status:"M",additions:0,deletions:0,patch:"",content:i}}function Ui(t){return t.filter(s=>s.type==="file").map(s=>s.path).sort((s,n)=>s.localeCompare(n))}function Hi(t,s){const n=new Map;for(const i of Kt(t?.diff??""))n.set(i.path,i);for(const i of Vi(s?.porcelain??""))n.has(i.path)||n.set(i.path,i);return[...n.values()].sort((i,a)=>i.path.localeCompare(a.path))}function Kt(t){const s=[];let n=null;const i=()=>{n&&(s.push({path:n.path,status:n.status,additions:n.additions,deletions:n.deletions,patch:n.patchLines.join(`
|
|
9
|
+
`),content:null}),n=null)};for(const a of t.split(`
|
|
10
|
+
`)){if(a.startsWith("diff --git ")){i(),n={path:Ki(a)??"changed-file",status:"M",additions:0,deletions:0,patchLines:[a]};continue}if(n){if(n.patchLines.push(a),a.startsWith("+++ ")){const c=Ds(a.slice(4));c&&(n.path=c);continue}if(a.startsWith("--- ")){const c=Ds(a.slice(4));c&&n.path==="changed-file"&&(n.path=c);continue}a.startsWith("new file mode ")&&(n.status="A"),a.startsWith("deleted file mode ")&&(n.status="D"),a.startsWith("rename to ")&&(n.status="R",n.path=a.slice(10).trim()||n.path),a.startsWith("+")&&!a.startsWith("+++")&&(n.additions+=1),a.startsWith("-")&&!a.startsWith("---")&&(n.deletions+=1)}}return i(),s}function Vi(t){const s=[];for(const n of t.split(`
|
|
11
|
+
`)){if(!n.trim())continue;const i=Gi(n);i&&s.push({path:i,status:n.slice(0,2).trim()||"M",additions:0,deletions:0,patch:"",content:null})}return s}function Gi(t){const s=t.slice(3).trim();return s?s.split(" -> ").pop()?.trim()||s:null}function Ki(t){const s=/^diff --git a\/(.+) b\/(.+)$/.exec(t.trim());return s?.[2]??s?.[1]??null}function Ds(t){const s=t.trim();return!s||s==="/dev/null"?null:s.startsWith("a/")||s.startsWith("b/")?s.slice(2):s}const Zs="openpond.workspace.editorControlsVisible";function qi(){try{return window.localStorage.getItem(Zs)==="true"}catch{return!1}}function Qi(t){try{window.localStorage.setItem(Zs,String(t))}catch{}}function Xi({activeDiagnostics:t,activeServers:s,editorDiagnosticsChecking:n,editorLspEnabled:i,showEditorCommandBar:a}){if(!a)return null;if(!i)return{label:"LSP off",severity:"unavailable"};if(n)return{label:"Checking",severity:"info"};const c=t.filter(p=>p.severity==="error").length;if(c>0)return{label:`${c} error${c===1?"":"s"}`,severity:"error"};const o=t.filter(p=>p.severity==="warning").length;if(o>0)return{label:`${o} warning${o===1?"":"s"}`,severity:"warning"};const u=t.length;if(u>0)return{label:`${u} note${u===1?"":"s"}`,severity:"info"};if(!s)return null;const f=s.find(p=>p.status!=="connected");return f?{label:f.id==="none"?"No LSP":`${f.id} unavailable`,severity:"unavailable"}:{label:"No issues",severity:"none"}}const Ts=3e3,Zi=2e3,_s=[],Yi=[];function fr({appId:t,workspaceKind:s,connection:n,runtimeEvents:i,diff:a,editorPreferences:c,loading:o,workspaceName:u,workspaceInitialized:f,workspaceError:p,expanded:d,fileRootPath:b,filesWithPreview:w=!1,openFileRequest:k,readOnly:C=!1,sideChatTabs:I,sourceSwitcher:T,tabRequest:M,viewState:U,onRefresh:W,onResizeStart:G,onToggleExpanded:x,onOpenBrowser:N,onViewStateChange:_,onCloseSideChat:P,onOpenSideChat:E,onSelectSideChat:J,goalDetails:D,sandboxFileSource:V,trainingSummary:K}){return e.jsx(nr,{appId:t,workspaceKind:s,connection:n,runtimeEvents:i??[],diff:a,editorPreferences:c??null,loading:o,workspaceName:u,workspaceInitialized:f,workspaceError:p,expanded:d,fileRootPath:b??null,filesWithPreview:w,openFileRequest:k,readOnly:C,sideChatTabs:I??[],sourceSwitcher:T??null,tabRequest:M??null,viewState:U??null,onRefresh:W,onResizeStart:G,onToggleExpanded:x,onOpenBrowser:N,onViewStateChange:_,onCloseSideChat:P,onOpenSideChat:E,onSelectSideChat:J,goalDetails:D??null,sandboxFileSource:V??null,trainingSummary:K??null})}function Ji(t,s,n,i){return t&&s?.content!=null?{...t,content:s.content}:s&&!t&&Bt(s)?s:t&&Bt(t)?t:s&&Bt(s)?s:t??s??n??Ut(i)}function Bt(t){return!!(t.patch||t.content!=null)}function er({changedFiles:t,checkpointStatus:s,dirty:n,error:i,loading:a,preservedReadback:c,sandboxMode:o,sourcePending:u}){if(u)return{label:"sandbox pending",tone:"loading"};if(a)return{label:"refreshing",tone:"loading"};if(o&&c&&s)return s;if(i)return{label:"status unavailable",tone:"error"};if(o&&s?.tone==="error"||o&&s&&!n&&t===0)return s;if(n||t>0){const f=Math.max(1,t),p=f===1?"change":"changes";return{label:o?`${f} unpreserved ${p}`:`${f} local ${p}`,tone:"dirty"}}return{label:o?"sandbox clean":"local clean",tone:"clean"}}function tr(t,s){if(!s)return null;for(let n=t.length-1;n>=0;n-=1){const i=t[n];if(i?.name!=="workspace_action_result")continue;const a=i.data&&typeof i.data=="object"&&!Array.isArray(i.data)?i.data:null,c=a?.sourcePreservation&&typeof a.sourcePreservation=="object"&&!Array.isArray(a.sourcePreservation)?a.sourcePreservation:null;if(c?.attempted===!0&&c.sandboxId===s)return c.ok!==!0?{label:"checkpoint failed",tone:"error"}:c.preserved===!0?{label:"checkpoint saved",tone:"clean"}:{label:"checkpoint clean",tone:"clean"}}return null}function sr(t){const s=t.split("/").filter(Boolean);return s.map((n,i)=>s.slice(0,i+1).join("/"))}function nr({appId:t,workspaceKind:s,connection:n,runtimeEvents:i,diff:a,editorPreferences:c,loading:o,workspaceName:u,workspaceInitialized:f,workspaceError:p,expanded:d,fileRootPath:b,filesWithPreview:w,openFileRequest:k,readOnly:C,sideChatTabs:I,sourceSwitcher:T,tabRequest:M,viewState:U,onRefresh:W,onResizeStart:G,onToggleExpanded:x,onOpenBrowser:N,onViewStateChange:_,onCloseSideChat:P,onOpenSideChat:E,onSelectSideChat:J,goalDetails:D,sandboxFileSource:V,trainingSummary:K}){const ae=U??ua(),[A,g]=l.useState(ae.activeTab),[q,ie]=l.useState(!1),[oe,ee]=l.useState(!1),[Se,Q]=l.useState(!1),[gt,qt]=l.useState(""),[Z,Je]=l.useState(()=>[...ae.openFilePaths]),[j,Ne]=l.useState(ae.selectedPath),[Qt,Ys]=l.useState(!1),[Xt,Js]=l.useState(!1),[Ce,en]=l.useState(!1),[jt,tn]=l.useState(!0),[Zt,sn]=l.useState(qi),[Yt,nn]=l.useState(!1),[Jt,an]=l.useState(!1),[es,rn]=l.useState(!1),[te,et]=l.useState({}),[ce,ze]=l.useState({}),[ts,vt]=l.useState(()=>new Set),[Ie,We]=l.useState(null),[ln,wt]=l.useState(!1),[ss,Be]=l.useState(null),[ns,kt]=l.useState({}),[on,yt]=l.useState({}),[cn,St]=l.useState(null),[dn,Re]=l.useState(null),[un,$e]=l.useState(null);ke(p,{prefix:"Workspace"}),ke(ss,{prefix:"Sandbox files"});const[Nt,Ct]=l.useState(null),[fn,Oe]=l.useState({}),[tt,Rt]=l.useState(null),[st,nt]=l.useState(null),[at,it]=l.useState(null),Y=c??da.editor,as=l.useRef(te),$t=l.useRef(zt(ae)),Ft=l.useRef(zt(ae)),is=l.useRef(null),Et=l.useRef(W),re=l.useRef(!1),Ue=l.useRef(null),He=l.useRef(0),de=l.useRef(null),Ve=l.useRef(null),F=V?.sandboxId?.trim()||null,S=!!V,Fe=!!K||S&&!!F,rt=S?`sandbox:${F??"pending"}`:`workspace:${t??"none"}`,rs=S?!!F:!!t,ls=l.useRef(rt),ue=!!(D?.createRuntime||D?.goalRuntime||D?.subagentRuntime),Ee=l.useCallback(async(r={})=>{if(S){if(!n){We(null),Be("OpenPond App server is not connected.");return}if(!F){We(null),Be(null);return}r.silent||wt(!0);try{const[h,m,y]=await Promise.allSettled([z.sandboxFiles(n,F,{recursive:!0,maxEntries:Zi}),z.sandboxGitStatus(n,F),z.sandboxGitDiff(n,F,{})]);if(h.status==="rejected")throw h.reason;const $=Ui(h.value.files),v=m.status==="fulfilled"?m.value.status:null,R=y.status==="fulfilled"?y.value.diff:null,L=Hi(R,v),Qe=L.reduce((_t,Mt)=>_t+Mt.additions,0),Bn=L.reduce((_t,Mt)=>_t+Mt.deletions,0);We({appId:F,repoPath:"",initialized:!0,dirty:v?!v.clean:L.length>0,filesChanged:L.length,additions:Qe,deletions:Bn,repoFiles:$,files:L,error:null,updatedAt:new Date().toISOString()}),Be(null)}catch(h){We(null),Be(h instanceof Error?h.message:String(h))}finally{r.silent||wt(!1)}}},[n,F,S]),os=l.useMemo(()=>Ii(i,F),[i,F]),cs=!!(Ie&&((Ie.files?.length??0)>0||(Ie.repoFiles?.length??0)>0)),pn=S&&!cs&&!!os,fe=S?cs?Ie:os??Ie:a,lt=fe?.repoPath??null,hn=l.useMemo(()=>tr(i,F),[i,F]),Ae=fe?.files??_s,ds=fe?.files??_s,he=l.useMemo(()=>new Map(ds.map(r=>[r.path,r])),[ds]),me=l.useMemo(()=>new Map(Ae.map(r=>[r.path,r])),[Ae]),Le=fe?.repoFiles??(Ae.length>0?Ae.map(r=>r.path):Yi),Pe=l.useMemo(()=>Ae.filter(r=>!la(r,Le)),[Le,Ae]),xe=l.useMemo(()=>at&&!Le.includes(at)?[at,...Le]:Le,[Le,at]),us=l.useMemo(()=>Z.map(r=>he.get(r)??te[r]??me.get(r)??Ut(r)),[he,me,te,Z]),ot=l.useMemo(()=>{const r={};for(const h of Z){if(ge(h))continue;const m=he.get(h)??te[h]??me.get(h)??Ut(h);m.content!=null&&(r[h]=m.content)}return r},[he,me,te,Z]),De=l.useMemo(()=>{const r=new Set;for(const[h,m]of Object.entries(ce))m.content!==m.savedContent&&r.add(h);return r},[ce]),mn=l.useMemo(()=>{const r=gt.trim().toLowerCase(),h=xe;return r?h.filter(m=>m.toLowerCase().includes(r)):h},[xe,gt]),At=l.useMemo(()=>({activeTab:A,openFilePaths:Z,selectedPath:j}),[A,Z,j]);l.useEffect(()=>{as.current=te},[te]),l.useEffect(()=>{Ue.current=tt},[tt]),l.useEffect(()=>{ze(r=>{let h=!1;const m={...r},y=new Set(Z),$=a?.updatedAt?Date.parse(a.updatedAt):null;for(const[v,R]of Object.entries(m))y.has(v)||R.content!==R.savedContent||(delete m[v],h=!0);for(const[v,R]of Object.entries(ot)){const L=m[v];if(!L){m[v]={content:R,savedContent:R},h=!0;continue}if(L.content===L.savedContent&&L.savedContent!==R){if(L.savedAt&&($===null||$<L.savedAt))continue;m[v]={content:R,savedContent:R},h=!0}}return h?m:r})},[a?.updatedAt,ot,Z]),l.useEffect(()=>{Et.current=W},[W]),l.useEffect(()=>{if(!U)return;const r=oa(U,lt);Ss($t.current,r)||($t.current=r,Ft.current=r,g(r.activeTab),Je(r.openFilePaths),Ne(r.selectedPath))},[U,lt]),l.useEffect(()=>{if(Ss(Ft.current,At))return;const r=zt(At);Ft.current=r,$t.current=r,_?.(r)},[At,_]),l.useEffect(()=>{C||S||!n||!t||!f||a||p||re.current||(re.current=!0,Promise.resolve(Et.current({silent:!0})).catch(()=>{}).finally(()=>{re.current=!1}))},[t,n,a,C,S,p,f]),l.useEffect(()=>(ls.current!==rt&&(ls.current=rt,de.current?.abort(new Error("lsp_diagnostics_source_changed")),de.current=null,Je([]),Ne(null),et({}),ze({}),vt(new Set),We(null),Be(null),wt(!1),kt({}),yt({}),St(null),Re(null),$e(null),Ct(null),Oe({}),Rt(null),nt(null),it(null)),()=>{de.current?.abort(new Error("lsp_diagnostics_unmounted")),de.current=null}),[rt]),l.useEffect(()=>{!k||is.current===k.id||rs&&(is.current=k.id,ct(k.path))},[rs,k]),l.useEffect(()=>{if(!S||(Ee(),!n||!F))return;let r=!1;async function h(){if(!(r||re.current)&&!(typeof document<"u"&&document.visibilityState==="hidden")){re.current=!0;try{await Ee({silent:!0})}finally{re.current=!1}}}const m=window.setInterval(()=>{h()},Ts),y=()=>{h()};return window.addEventListener("focus",y),()=>{r=!0,window.clearInterval(m),window.removeEventListener("focus",y)}},[n,Ee,F,S]),l.useEffect(()=>{if(C||S||!n||!t||!f)return;let r=!1;async function h(){if(!(r||re.current)&&!(typeof document<"u"&&document.visibilityState==="hidden")){re.current=!0;try{await Et.current({silent:!0})}catch{}finally{re.current=!1}}}const m=window.setInterval(()=>{h()},Ts),y=()=>{h()};return window.addEventListener("focus",y),()=>{r=!0,window.clearInterval(m),window.removeEventListener("focus",y)}},[t,n,C,S,f]),l.useEffect(()=>{if(S||!n||!t||s==="local_project"){it(null);return}let r=!1;return z.workspaceTemplateConfig(n,t).then(h=>{r||it(h.exists?h.configPath??ca:null)}).catch(()=>{r||it(null)}),()=>{r=!0}},[t,n,S,s]),l.useEffect(()=>{!j||xe.includes(j)||Z.includes(j)||Ne(Pe[0]?.path??null)},[Pe,Z,xe,j]),l.useEffect(()=>{D?.active&&ue&&g("goal")},[D?.active,ue]),l.useEffect(()=>{M&&g(M.tab)},[M]),l.useEffect(()=>{!ue&&A==="goal"&&g("files")},[A,ue]),l.useEffect(()=>{!Fe&&A==="summary"&&g("files")},[A,Fe]);const H=A==="file"||w&&A==="files"?j:null;l.useEffect(()=>{if(!n||!H)return;if(ge(H)){$e(null),Re(v=>v===H?null:v);return}const r=Nt?.path===H,h=Ge(H);if(C&&(h?.content!=null||h?.patch)){$e(null),Re(v=>v===H?null:v);return}if(!r&&(h?.content!=null||h?.patch&&!Ce)){$e(null),Re(v=>v===H?null:v);return}let m=!1;const y=as.current[H];return y?.content==null&&(Ce||!y?.patch)&&Re(H),$e(null),(S?F?_i(n,F,H,i):Promise.reject(new Error(V?.emptyMessage??"No sandbox filesystem is available.")):t?z.workspaceFile(n,t,H):Promise.reject(new Error("Workspace files are unavailable."))).then(v=>{m||et(R=>{const L=R[v.path];return L?.content===v.content&&L.patch===v.patch&&L.status===v.status?R:{...R,[v.path]:v}})}).catch(v=>{m||$e(v instanceof Error?v.message:String(v))}).finally(()=>{m||(Re(v=>v===H?null:v),Ct(v=>v&&v.id===Nt?.id&&v.path===H?null:v))}),()=>{m=!0}},[A,t,n,Nt,Ce,C,i,V?.emptyMessage,F,S,H]);function ct(r){const h=zs(r,lt);h&&(et(m=>{if(!(h in m))return m;const y={...m};return delete y[h],y}),Ct({id:Date.now(),path:h}),w||Je(m=>m.includes(h)?m:[...m,h]),Ne(h),g(w?"files":"file"),!S&&n&&t&&ge(h)&&nt(h),ee(!1),Q(!1),qt(""))}const xn=l.useCallback(()=>{sn(r=>{const h=!r;return Qi(h),h})},[]),Ge=r=>Ji(he.get(r),te[r],me.get(r),r),bn=l.useCallback((r,h)=>{ze(m=>{const y=m[r],$=y?.savedContent??ot[r]??Ge(r).content??"";return{...m,[r]:{content:h,savedContent:$,savedAt:y?.savedAt}}}),Oe(m=>{if(!(r in m))return m;const y={...m};return delete y[r],y})},[he,me,te,ot]),Te=l.useCallback(async(r,h={})=>{if(S||!n||!t||ge(r))return;const m=Ge(r),y=h.content??ce[r]?.content??m.content??void 0;if(y?.endsWith(mt))return;const $=He.current+1;He.current=$,de.current?.abort(new Error("lsp_diagnostics_superseded"));const v=new AbortController;de.current=v,St(r);try{const R=await z.workspaceLspTouch(n,t,{path:r,content:y,waitForDiagnostics:h.waitForDiagnostics??!0},{signal:v.signal});if($!==He.current)return;kt(L=>({...L,[R.path]:R.diagnostics})),yt(L=>({...L,[R.path]:R.servers}))}catch(R){if(v.signal.aborted||$!==He.current)return;const L=R instanceof Error?R.message:String(R);kt(Qe=>({...Qe,[r]:[]})),yt(Qe=>({...Qe,[r]:[{id:"lsp",root:"",status:"error",message:L}]}))}finally{if(de.current===v&&(de.current=null),v.signal.aborted)return;$===He.current&&St(R=>R===r?null:R)}},[t,n,he,me,ce,te,S]),gn=l.useCallback(async r=>{if(S||!n||!t)throw new Error("Workspace LSP is unavailable.");return z.workspaceLspAction(n,t,r)},[t,n,S]),Ke=l.useCallback(async r=>{if(!n||!t&&!F||Ue.current===r)return;const h=ce[r];if(!h||h.content===h.savedContent)return;const m=h.content,y=Date.now();Ue.current=r,Rt(r),Oe($=>{if(!(r in $))return $;const v={...$};return delete v[r],v});try{const $=S?await Oi(n,F,r,m):await z.saveWorkspaceFile(n,t,{path:r,content:m});et(v=>({...v,[$.path]:$})),ze(v=>{const R=v[r];return R?{...v,[r]:{content:R.content,savedContent:m,savedAt:y}}:v}),Y.languageServers!=="off"&&Y.checkOnSave&&await Te(r,{content:m,waitForDiagnostics:!0}),S?await Ee({silent:!0}):await W({silent:!0})}catch($){Oe(v=>({...v,[r]:$ instanceof Error?$.message:String($)}))}finally{Ue.current===r&&(Ue.current=null),Rt($=>$===r?null:$)}},[Y.checkOnSave,Y.languageServers,t,n,ce,W,Te,Ee,F,S]),fs=j?Ge(j):null,be=j?ce[j]?.content??fs?.content??null:null,jn=!!(fs?.patch&&!Ce),Lt=!!(!C&&A==="file"&&!jn&&j&&be!=null&&!ge(j)&&!(jt&&Ot(j))&&!be.endsWith(mt));l.useEffect(()=>{if(Y.languageServers==="off"||!Y.diagnosticsWhileEditing||!j||!Lt||be==null)return;const r=window.setTimeout(()=>{Te(j,{content:be,waitForDiagnostics:!0})},700);return()=>window.clearTimeout(r)},[Y.diagnosticsWhileEditing,Y.languageServers,Te,be,Lt,j]),l.useEffect(()=>{function r(h){!(h.ctrlKey||h.metaKey)||h.key.toLowerCase()!=="s"||A!=="file"||!j||(h.preventDefault(),De.has(j)&&Ke(j))}return window.addEventListener("keydown",r),()=>window.removeEventListener("keydown",r)},[A,De,Ke,j]);const vn=l.useCallback(()=>{j&&(Ve.current?Ve.current.save():Ke(j))},[Ke,j]),wn=l.useCallback(()=>{Ve.current?.undo()},[]),kn=l.useCallback(()=>{Ve.current?.redo()},[]),yn=l.useCallback(()=>{j&&Y.languageServers!=="off"&&Te(j,{content:be??void 0,waitForDiagnostics:!0})},[Y.languageServers,Te,be,j]);function Sn(r,h){if(h.stopPropagation(),!(De.has(r)&&!window.confirm(`Discard unsaved changes to ${r}?`))&&(De.has(r)&&(ze(m=>{if(!(r in m))return m;const y={...m};return delete y[r],y}),Oe(m=>{if(!(r in m))return m;const y={...m};return delete y[r],y})),Je(m=>m.filter(y=>y!==r)),j===r)){const m=us.find(y=>y.path!==r)??null;Ne(m?.path??Pe[0]?.path??null),m||g("files")}}function Nn(){g("files"),ee(!1),Q(!1)}function ps(r){vt(h=>{const m=new Set(h);return m.has(r)?m.delete(r):m.add(r),m})}function Cn(r){r&&vt(h=>{const m=new Set(h);for(const y of sr(r))m.add(y);return m}),g("files"),ee(!1),Q(!1)}function Rn(){const h=`git apply <<'PATCH'
|
|
12
|
+
${Pe.map(m=>m.patch).filter(Boolean).join(`
|
|
13
|
+
`)}
|
|
14
|
+
PATCH`;navigator.clipboard?.writeText(h)}const $n=Pe.length>0,Fn=xe.length>0,En=Z.length>0,An=ue||Fe||$n||Fn||En,pe=A==="goal"&&ue?"goal":A==="summary"&&Fe?"summary":A==="file"&&j?"file":"files",Ln=pe==="files"?"No files to show":"No local changes",Pn=s==="local_project"&&!f&&!p,hs=S?ln:o,ms=S?ss:p,Dn=er({changedFiles:fe?.filesChanged??Pe.length,checkpointStatus:hn,dirty:!!fe?.dirty,error:ms,loading:hs,preservedReadback:pn,sandboxMode:S,sourcePending:S&&!F}),Tn=hs?"Loading workspace files":ms?"Workspace files are unavailable":S&&!F?V?.emptyMessage??"No sandbox filesystem is available.":Pn?"Loading workspace files":f?Ln:"No local files to show",_n=!S&&j&&ge(j)?j:null,Mn=!S&&st&&ge(st)?st:null,Pt=Ns(n,t,_n),xs=Ns(n,t,Mn),bs=pe==="file"||w&&pe==="files"?j:null,zn=!!(bs&&Ot(bs)),gs=j?ns[j]??[]:[],js=j?on[j]??null:null,Dt=!!(j&&cn===j),Tt=Zt&&Lt,qe=!C&&!S&&Y.languageServers!=="off",In=l.useMemo(()=>Xi({activeDiagnostics:gs,activeServers:js,editorDiagnosticsChecking:Dt,editorLspEnabled:qe,showEditorCommandBar:Tt}),[gs,js,Dt,qe,Tt]),Wn=l.useCallback(async r=>{if(!n)throw new Error("OpenPond server connection is unavailable.");await z.runSubagentLifecycleAction(n,r.runId,{action:r.action,reason:"User requested from Goal details."}),await W({silent:!0})},[n,W]),vs=j?e.jsx(Ci,{diagnostics:qe?ns[j]??[]:[],draftContent:ce[j]?.content,editorRef:Ve,editable:!C&&!Pt,error:un,file:Ge(j),collapsed:Xt,hideWhiteSpace:Jt,imageSrc:Pt,loading:dn===j,loadFullFiles:Ce,saveError:fn[j]??null,saving:tt===j,onOpenImage:()=>{Pt&&nt(j)},onDraftContentChange:r=>bn(j,r),onLspAction:qe?gn:void 0,onSave:()=>{Ke(j)},onSelectBreadcrumbPath:Cn,renderMarkdown:jt,splitView:es,wordDiffs:Yt,wordWrap:Qt,workspaceName:u,workspaceRootPath:lt}):null;return e.jsxs(e.Fragment,{children:[e.jsxs("aside",{className:`workspace-diff-panel ${d?"expanded":""}`,id:"right-sidebar-files-panel",role:"tabpanel","aria-label":"Workspace diffs",children:[!d&&e.jsx("div",{className:"workspace-diff-resize-handle",role:"separator","aria-orientation":"vertical","aria-label":"Resize diff panel",onPointerDown:G}),e.jsx(mi,{addMenuOpen:oe,expanded:d,filteredFiles:mn,openFiles:us,dirtyFilePaths:De,goalDetailsAvailable:ue,searchOpen:Se,searchQuery:gt,selectedPath:j,sideChatTabs:I,summaryAvailable:Fe,sourceStatus:Dn,sourceSwitcher:T,visibleTab:pe,onCloseFileTab:Sn,onCloseSideChat:P,onCloseSearch:()=>Q(!1),onOpenFile:ct,onOpenBrowser:()=>{ee(!1),Q(!1),N()},onOpenSearch:()=>{ee(!1),Q(!0)},onOpenSideChat:E?()=>{ee(!1),Q(!1),E()}:void 0,onSearchQueryChange:qt,onSelectFile:r=>{Ne(r),g("file")},onSelectFiles:Nn,onSelectGoal:()=>g("goal"),onSelectSummary:()=>{g("summary"),ee(!1),Q(!1)},onSelectSideChat:J,onToggleAddMenu:()=>{ee(r=>!r),Q(!1)},onToggleExpanded:x}),pe==="goal"&&ue?e.jsx(Ma,{createRuntime:D?.createRuntime??null,goalRuntime:D?.goalRuntime??null,subagentRuntime:D?.subagentRuntime??null,onRunSubagentLifecycleAction:n?Wn:void 0}):pe==="summary"&&Fe?K?e.jsx(ui,{summary:K}):e.jsx(ni,{sandboxId:F,connection:n}):An?e.jsxs(e.Fragment,{children:[e.jsx(xi,{canSaveActiveFile:!!(!C&&j&&De.has(j)&&tt!==j),canCheckActiveFile:qe,collapsed:Xt,editorControlsVisible:Zt,editorDiagnosticStatus:In,editorDiagnosticsChecking:Dt,hideWhiteSpace:Jt,loadFullFiles:Ce,menuOpen:q,renderMarkdown:jt,showEditorCommandBar:Tt,showRenderMarkdownToggle:zn,splitView:es,wordDiffs:Yt,wordWrap:Qt,onCopyGitApply:Rn,onEditorCheck:yn,onEditorRedo:kn,onEditorSave:vn,onEditorUndo:wn,onRefresh:()=>{S?Ee():W()},onToggleCollapsed:()=>Js(r=>!r),onToggleEditorControlsVisible:xn,onToggleHideWhiteSpace:()=>an(r=>!r),onToggleLoadFullFiles:()=>en(r=>!r),onToggleMenu:r=>ie(h=>r??!h),onToggleRenderMarkdown:()=>tn(r=>!r),onToggleSplitView:()=>rn(r=>!r),onToggleWordDiffs:()=>nn(r=>!r),onToggleWordWrap:()=>Ys(r=>!r)}),pe==="files"&&(w?e.jsxs("div",{className:"workspace-diff-files-preview-layout",children:[e.jsx(As,{diff:fe,expandedFolderPaths:ts,rootPath:b,repoFiles:xe,selectedPath:j,onOpenFile:ct,onToggleFolder:ps}),vs??e.jsx("div",{className:"workspace-diff-files-preview-empty",children:"Select a file to review its changes."})]}):e.jsx(As,{diff:fe,expandedFolderPaths:ts,rootPath:b,repoFiles:xe,selectedPath:j,onOpenFile:ct,onToggleFolder:ps})),pe==="file"&&j&&vs]}):e.jsx("div",{className:"workspace-diff-empty",children:e.jsx("span",{children:Tn})})]}),e.jsx(pa,{open:!!xs,src:xs,title:st??"",onClose:()=>nt(null)})]})}export{fr as WorkspaceDiffPanel};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import{d as qt,ag as Ye,r as m,ah as Mt,ai as Ut,j as t,X as ut,E as Lt,aj as Ne,ak as Ot,af as Ft,Q as at,al as Bt,v as Dt,am as Gt,u as Tt,an as kt,ao as st,n as O,q as Ht,ap as Vt,aq as Xt,ar as Jt,S as Qt,J as Kt}from"./index-B5AN29EO.js";import{B as we}from"./boxes-B1dRA1pi.js";import{G as Je}from"./git-branch-Cm02aNWq.js";import{I as Zt}from"./info-DeuEU_RO.js";import{M as Yt}from"./monitor-DXvHWFeW.js";import{P as $e}from"./play-BIHyH-Yu.js";import{A as Wt}from"./activity-bW02ZsBD.js";import{G as en}from"./git-commit-horizontal-FYILXW0v.js";import{R as Qe}from"./refresh-cw-Daz0oqwK.js";import{U as rt}from"./upload-DNbYB4Rl.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=qt("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(ft(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",q=typeof c.title=="string"&&c.title.trim()?c.title.trim():xn(p);if(v){x.push({name:p,label:q,required:u.has(p),multiple:I==="array"||U.multiple===!0,accept:gn(U,c),targetPath:fn(U,p),targetNames:z});continue}(I==="string"||I==="number"||I==="integer"||I==="boolean")&&l.push({name:p,label:q,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:Ke(e.cpu)??1,memoryGb:Ke(e.memoryGb)??1,diskGb:Ke(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=ft(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 fn(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 Ke(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 bn(e,n){return[n,...e.slice(1)]}function ft(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??""),[q,V]=m.useState(N?.timeoutSeconds?String(N.timeoutSeconds):""),[X,f]=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,be]=m.useState({}),Q=p.volumes[0]??null,[Y,o]=m.useState(p.volumes.length>0||p.fileInputs.length>0),[P,A]=m.useState(Q?.name??"volume"),[R,$]=m.useState(Q?.mountPath??"/workspace/volumes/volume"),[J,ce]=m.useState(String(Q?.storageGb??8)),[Pe,de]=m.useState(!(Q?.deleteOnSandboxDelete??!1)),[M,ze]=m.useState(p.schedules),qe=p.entrypoints.find(r=>r.name===I)??N,se=qe?.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(q),ke=!q.trim()||Number.isInteger(le)&&le>0&&le<=86400,oe=!ue||Number.isInteger(D)&&D>=Mt&&D<=Ut&&se.some(r=>r.port===D),Ie=Number.isFinite(he)&&he>0,ne=!Y||Number.isInteger(ie)&&ie>0,G=M.every(r=>!r.enabled||!!r.scheduleExpression.trim()),W=Fe(p.scalarInputs,I),je=Fe(p.fileInputs,I),Me=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)&&Me&&G&&oe;function He(r){H(r);const b=p.entrypoints.find(E=>E.name===r);if(!b)return;v(b.command),V(b.timeoutSeconds?String(b.timeoutSeconds):"");const y=b.ports[0]??null;me(y?String(y.port):""),xe(!!y)}function _e(r,b){F(y=>({...y,[r]:b}))}function pe(r,b){ae(y=>({...y,[r]:b}))}function Ve(r,b){const y=Array.from(b.target.files??[]);be(E=>({...E,[r.name]:r.multiple?y:y.slice(0,1)}))}function ee(r,b){ze(y=>y.map((E,ge)=>ge===r?{...E,...b}: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:q.trim()&&Number.isInteger(le)?le:qe?.timeoutSeconds??null,uploads:je.flatMap(b=>{const y=Z[b.name]??[];return y.length>0?[{inputName:b.name,label:b.label,targetPath:b.targetPath,multiple:b.multiple,files:y}]:[]}),resources:p.resources,volumes:Y?bn(p.volumes,{...P.trim()?{name:P.trim()}:{},...R.trim()?{mountPath:R.trim()}:{},...Number.isInteger(ie)&&ie>0?{storageGb:ie}:{},deleteOnSandboxDelete:!Pe}):[],schedules:M.filter(b=>b.enabled),openPreview:ue,previewPort:ue?D:null,previewLabel:se.find(b=>b.port===D)?.label??"web",previewAccess:se.find(b=>b.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=>f(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:q,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:b=>_e(r.name,b.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:b=>_e(r.name,b.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:b=>Ve(r,b)})]},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 b=B[r.name]??"",y=r.required&&!b.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:b,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,M.length>0?t.jsxs("div",{className:"sandbox-start-schedules",children:[t.jsx("div",{className:"sandbox-start-section-title",children:"Schedules"}),M.map((r,b)=>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(b,{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(b,{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(b,{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(b,{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:Me?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,""]))),[q,V]=m.useState({}),X=Fe(u.scalarInputs,c),f=Fe(u.fileInputs,c),j=p==="sandbox"?u.envInputs:[],w=X.every(o=>!o.required||!!(I[o.name]??"").trim()),_=f.every(o=>!o.required||(q[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 be(o,P){v(A=>({...A,[o]:P}))}function Q(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:f.flatMap(P=>{const A=q[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)),f.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=>Q(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:$=>be(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 bt(e,n){const a=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent";return n==="cron"?`name: ${a}
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
useCase: scheduled_report
|
|
4
|
+
start:
|
|
5
|
+
command: pnpm report
|
|
6
|
+
schedules:
|
|
7
|
+
- name: daily-report
|
|
8
|
+
command: pnpm report
|
|
9
|
+
cron: "0 9 * * *"`:n==="background"?`name: ${a}
|
|
10
|
+
version: 0.1.0
|
|
11
|
+
useCase: background_worker
|
|
12
|
+
start:
|
|
13
|
+
command: pnpm worker
|
|
14
|
+
services:
|
|
15
|
+
- name: worker
|
|
16
|
+
command: pnpm worker`:n==="resources"?`name: ${a}
|
|
17
|
+
version: 0.1.0
|
|
18
|
+
useCase: resource_profile
|
|
19
|
+
resources:
|
|
20
|
+
cpu: 1
|
|
21
|
+
memoryGb: 2
|
|
22
|
+
diskGb: 16
|
|
23
|
+
start:
|
|
24
|
+
command: pnpm start`:`name: ${a}
|
|
25
|
+
version: 0.1.0
|
|
26
|
+
useCase: action
|
|
27
|
+
start:
|
|
28
|
+
command: pnpm start
|
|
29
|
+
actions:
|
|
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='${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 fe(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:q,selectedProject:V,setSandboxCreateDialogOpen:X,setSandboxRunActionDialogOpen:f,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(en,{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(Qe,{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:()=>f(!0)},...z.map(Q=>({icon:t.jsx(Bt,{size:14}),label:`Dev ${Q.name} locally`,disabled:x||j||!w||!I||!V?.sandboxTemplate?.rootPath||!N,onSelect:()=>N?.(_n(V?.sandboxTemplate?.rootPath??"","dev",Q.name))})),{icon:t.jsx(we,{size:14}),label:"Start sandbox",disabled:x||j||!w||!e,onSelect:()=>X(!0)}],ae=[{icon:t.jsx(Qe,{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(Wt,{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(Dt,{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(Gt,{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",...q?.name?{appName:q.name}:{}}})},{icon:t.jsx(Qe,{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:bt(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 qn({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,q]=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:f=>c(f.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:f=>I(f.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:f=>q(f.target.value),disabled:e})]})]}),t.jsxs("label",{children:[t.jsx("span",{children:"Source identity"}),t.jsx("input",{value:H,onChange:f=>z(f.target.value),disabled:e})]}),t.jsxs("label",{className:"agent-setup-check",children:[t.jsx("input",{type:"checkbox",checked:V,onChange:f=>X(f.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 Mn({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 ea({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:q,onWorkspaceBranchChange:V,onWorkspaceBranchCreate:X,connection:f,onBootstrap:j,onOpenSandboxWorkspace:w}){const[_,F]=m.useState(!1),[B,ae]=m.useState(!1),[Z,be]=m.useState(""),[Q,Y]=m.useState(!1),[o,P]=m.useState(!1),[A,R]=m.useState(null),[$,J]=m.useState(!1),[ce,Pe]=m.useState(!1),[de,M]=m.useState(null),[ze,qe]=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,Me=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),b=!!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&&b&&!jt,vt=ne&&b&&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(!f||!_||!ne)return;let s=!1;return Pe(!0),M(null),O.organizations(f).then(async d=>{if(s)return;const h=d.organizations.map(Ht).filter(L=>!!L).filter(L=>L.status==="active");qe(h);const S=st(h,p);if(!S)return;const[T,K]=await Promise.all([O.listSandboxProjects(f,{teamId:S.teamId}),O.listSandboxAgents(f,{teamId:S.teamId})]);s||(re(T.projects),xe(K.agents))}).catch(d=>{s||M(fe(d))}).finally(()=>{s||Pe(!1)}),()=>{s=!0}},[f,p,ne,_]),m.useEffect(()=>{if(!_||!G||!f||!W){me({status:"idle",changedFiles:0,error:null});return}let s=!1;return me(d=>({status:"loading",changedFiles:d.changedFiles,error:null})),O.sandboxGitStatus(f,W).then(d=>{s||me({status:"ready",changedFiles:Un(d.status?.porcelain??""),error:null})}).catch(d=>{s||me({status:"error",changedFiles:0,error:fe(d)})}),()=>{s=!0}},[f,G,_,W]),m.useEffect(()=>{if(!_||!G||!f||!W){he(null);return}let s=!1;return O.sandbox(f,W).then(d=>{s||he(d.sandbox)}).catch(()=>{s||he(null)}),()=>{s=!0}},[f,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 K=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(K){for(const k of s.schedules)if(!(await v("sandbox_schedule_create",Pn(k,K)))?.ok)return}Y(!1)}}async function Pt(s){if(!v)return;const d={},h=[];for(const S of s.uploads){const T=[];for(const K of S.files){const L=lt(S.targetPath,K.name),Ae=await ct(K);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(!f||!s)return;const[d,h]=await Promise.all([O.listSandboxProjects(f,{teamId:s}),O.listSandboxAgents(f,{teamId:s})]);re(d.projects),xe(h.agents)}async function It(s){if(!(!v||!l)){J(!0),M(null);try{if(!(await v("create_sandbox_template_scaffold",{manifestOnly:!0,manifestContent:bt(s.name,s.preset),name:s.name,preset:s.preset,manifestPath:s.manifestPath}))?.ok)return;R(null)}catch(d){M(fe(d))}finally{J(!1)}}}async function Rt(s){if(!f||!l||!j)return;const d=s.teamId;J(!0),M(null);try{const h=In(s.sourceType,s.sourceIdentity);let S=(await O.upsertSandboxProject(f,{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(f,S.id,{teamId:d})).project);const T=await O.updateLocalProjectAgentSetup(f,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(K=>[S,...K.filter(L=>L.id!==S.id)]),R(null)}catch(h){M(fe(h))}finally{J(!1)}}async function _t(){if(!f||!l||!C.project||!j)return;const s=C.project;J(!0),M(null);try{const d=(await O.syncSandboxProject(f,s.id,{teamId:s.teamId})).project,h=await O.updateLocalProjectAgentSetup(f,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){M(fe(d))}finally{J(!1)}}async function Et(s){if(!f||!l||!C.project||!j)return;const d=C.project;J(!0),M(null);try{const h=(await O.upsertSandboxAgent(f,{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(f,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 K=await O.updateLocalProjectAgentSetup(f,l.id,{preferredSandboxAgentId:h.id});j(K.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){M(fe(h))}finally{J(!1)}}async function At(){if(!(!f||!C.agent)){J(!0),M(null);try{const s=await O.runSandboxAgent(f,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){M(fe(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:q,onRunTerminalCommand:z,onWorkspaceToolAction:v,projectSandboxTemplate:b,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:["-",Me]})]})]}),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(Je,{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(Qt,{size:13}),t.jsx("input",{ref:le,value:Z,placeholder:"Search branches",onChange:s=>be(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(Je,{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(Kt,{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(Je,{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))]})]}),Q&&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(qn,{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(Mn,{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{ea as WorkspaceEnvironmentMenu,On as formatIdleTimeout,Ln as sandboxChangeLabel,Un as sandboxChangedFileCount,Dn as sandboxRuntimePolicyLabel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,ae as z,af as _,X as D}from"./index-B5AN29EO.js";/* empty css */import{G as j}from"./git-branch-Cm02aNWq.js";import{G as h}from"./git-commit-horizontal-FYILXW0v.js";import{U as B}from"./upload-DNbYB4Rl.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: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 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};
|