openpond 0.2.46 → 0.2.48
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/app-server.d.ts +157 -1
- package/dist/app-server.js +1 -1
- package/dist/chunks/{actions-command-I3NI75P2.js → actions-command-DSO6YOEE.js} +1 -1
- package/dist/chunks/{app-layer-B3SMVO4B.js → app-layer-RRFI27N4.js} +1 -1
- package/dist/chunks/app-server-runtime-RWO4KGPU.js +2 -0
- package/dist/chunks/{apps-OA2VX34V.js → apps-NELJL377.js} +1 -1
- package/dist/chunks/{chunk-4UTIEH5H.js → chunk-2SPZYBDN.js} +1 -1
- package/dist/chunks/{chunk-LL4QP2IM.js → chunk-2ZJJFBIA.js} +1 -1
- package/dist/chunks/{chunk-HP2D3W2B.js → chunk-42GOV5ZU.js} +3 -3
- package/dist/chunks/{chunk-PGKEDR3S.js → chunk-5CMKGD43.js} +1 -1
- package/dist/chunks/{chunk-D6MQTNJ3.js → chunk-7K72KS5C.js} +6 -6
- package/dist/chunks/{chunk-JBHAU7PH.js → chunk-7MXZJQS7.js} +137 -137
- package/dist/chunks/{chunk-YSYXIJ46.js → chunk-7QEE4PBI.js} +1 -1
- package/dist/chunks/{chunk-F2AG46CV.js → chunk-7YR6CBNU.js} +1 -1
- package/dist/chunks/{chunk-UWO34HP6.js → chunk-DALJMSJG.js} +2 -2
- package/dist/chunks/chunk-DFM5JTS2.js +2 -0
- package/dist/chunks/{chunk-33AO3P6X.js → chunk-DLZP22WV.js} +1 -1
- package/dist/chunks/{chunk-BKMGBIBT.js → chunk-EMKZVP7Z.js} +1 -1
- package/dist/chunks/chunk-EPY7M5XS.js +2 -0
- package/dist/chunks/{chunk-ZJY2L43W.js → chunk-HA7EFTPF.js} +1 -1
- package/dist/chunks/{chunk-HK3WGUKK.js → chunk-IKWDL3RB.js} +1 -1
- package/dist/chunks/chunk-IOQUF34U.js +2 -0
- package/dist/chunks/chunk-JCCU3VFK.js +2 -0
- package/dist/chunks/{chunk-ZC57DX6D.js → chunk-JDLAHVAJ.js} +1 -1
- package/dist/chunks/{chunk-WWABOVRW.js → chunk-LVL4TIAO.js} +2 -2
- package/dist/chunks/{chunk-IV7F74JJ.js → chunk-MASJQWA2.js} +1 -1
- package/dist/chunks/{chunk-XLDW5NN3.js → chunk-N3DEA6PG.js} +1 -1
- package/dist/chunks/{chunk-F5DUN73H.js → chunk-N5QNXMIS.js} +1 -1
- package/dist/chunks/{chunk-MCRA6ZGJ.js → chunk-NAZ26IZL.js} +1 -1
- package/dist/chunks/chunk-NHJ26KXF.js +518 -0
- package/dist/chunks/chunk-NNF6KCHD.js +3 -0
- package/dist/chunks/{chunk-5OGRWWEH.js → chunk-O7VGFMDO.js} +1 -1
- package/dist/chunks/{chunk-USWZ3KUC.js → chunk-PA7XP42P.js} +1 -1
- package/dist/chunks/{chunk-BQNK2NMB.js → chunk-PJM2G7SG.js} +1 -1
- package/dist/chunks/chunk-PNE3IETM.js +190 -0
- package/dist/chunks/chunk-PYABBF53.js +53 -0
- package/dist/chunks/{chunk-TYWBEJOA.js → chunk-Q4H3NUVW.js} +2 -2
- package/dist/chunks/{chunk-HO5L2FUU.js → chunk-QJRXTIOC.js} +1 -1
- package/dist/chunks/chunk-QRWPEW3Z.js +24 -0
- package/dist/chunks/{chunk-LZSY5IM3.js → chunk-QXVIIM4T.js} +1 -1
- package/dist/chunks/{chunk-6SJZXZNA.js → chunk-R3XFY7VL.js} +1 -1
- package/dist/chunks/{chunk-EWS7MXTM.js → chunk-RLZPX4YP.js} +1 -1
- package/dist/chunks/{chunk-VW7D3DRM.js → chunk-SDEDAHV6.js} +72 -67
- package/dist/chunks/{chunk-BUFQKDAW.js → chunk-T5LE6R5S.js} +1 -1
- package/dist/chunks/{chunk-L4BYPZ4U.js → chunk-TGIB24K4.js} +1 -1
- package/dist/chunks/{chunk-D6E7JBBQ.js → chunk-TIUSKRBP.js} +4 -4
- package/dist/chunks/{chunk-6WLJWRMF.js → chunk-UJ5EFSEC.js} +1 -1
- package/dist/chunks/chunk-VOIH2BQA.js +2162 -0
- package/dist/chunks/{chunk-KE5RH6JA.js → chunk-WITSXYEW.js} +1 -1
- package/dist/chunks/chunk-WV2APYWG.js +2 -0
- package/dist/chunks/chunk-XBCIBAXD.js +4 -0
- package/dist/chunks/chunk-XDMUD4FW.js +5 -0
- package/dist/chunks/{chunk-DNXKIIV7.js → chunk-XM26DGML.js} +1 -1
- package/dist/chunks/{chunk-OGXSE57Z.js → chunk-YIB3J4RC.js} +1 -1
- package/dist/chunks/{chunk-H6W55CQG.js → chunk-YL6VFJ4P.js} +1 -1
- package/dist/chunks/cli-ZLDLOKPL.js +2 -0
- package/dist/chunks/{configuration-command-MVZS625X.js → configuration-command-SA56RV5B.js} +1 -1
- package/dist/chunks/{connected-evidence-7LHUZ2UI.js → connected-evidence-IVSQZYIB.js} +1 -1
- package/dist/chunks/{continual-K5JNHNQH.js → continual-PKK2BOTB.js} +1 -1
- package/dist/chunks/core-commands-W5IGIITV.js +2 -0
- package/dist/chunks/{datasets-KDN2EXHE.js → datasets-KSO2UG6R.js} +1 -1
- package/dist/chunks/{desktop-test-WIOEKMPR.js → desktop-test-6HXFM7PO.js} +1 -1
- package/dist/chunks/{dist-JBE7DPFZ.js → dist-4HV2W6V4.js} +1 -1
- package/dist/chunks/{dist-3MTJ7VM6.js → dist-BLBZENVB.js} +1 -1
- package/dist/chunks/{evaluation-coordination-NGYHL7HG.js → evaluation-coordination-MOFBXRXN.js} +1 -1
- package/dist/chunks/{experiment-improvements-2M7GRGWS.js → experiment-improvements-TDHM6NEA.js} +1 -1
- package/dist/chunks/{experiments-B6CRZ3GI.js → experiments-HFPDFD4I.js} +1 -1
- package/dist/chunks/{extension-RZTMK3ON.js → extension-R373LYIB.js} +1 -1
- package/dist/chunks/{help-EISFHH2F.js → help-PEFQDDTA.js} +1 -1
- package/dist/chunks/{hosted-experiment-improvement-6CHH65DX.js → hosted-experiment-improvement-MGMZWTZY.js} +1 -1
- package/dist/chunks/hosted-harness-runtime-FZZLWLBR.js +2 -0
- package/dist/chunks/{hosted-profile-candidate-HYEISIAC.js → hosted-profile-candidate-LVNKOTKJ.js} +1 -1
- package/dist/chunks/hosted-profile-compiler-PQFIWO5B.js +2 -0
- package/dist/chunks/{hosted-profile-evaluation-control-LV6YXOG7.js → hosted-profile-evaluation-control-7B3RAZU2.js} +1 -1
- package/dist/chunks/{hosted-profile-evaluation-inspection-A62UYFEP.js → hosted-profile-evaluation-inspection-FPCV42DD.js} +1 -1
- package/dist/chunks/hosted-profile-evaluation-preparation-JROREZH3.js +3 -0
- package/dist/chunks/{human-review-J6JGNRBR.js → human-review-HRGGACEM.js} +1 -1
- package/dist/chunks/import-RSAQ44GG.js +4 -0
- package/dist/chunks/{learning-REL6GGNA.js → learning-FNBEIAY6.js} +1 -1
- package/dist/chunks/{opchat-CUZUU2WM.js → opchat-I7ZWJ5XK.js} +1 -1
- package/dist/chunks/{organizations-VT27V4B2.js → organizations-LFCZIH7E.js} +1 -1
- package/dist/chunks/{profile-N2E5ASHQ.js → profile-EPIX5QVK.js} +1 -1
- package/dist/chunks/{project-agent-XMXOBJSC.js → project-agent-DGOPMECP.js} +1 -1
- package/dist/chunks/{sandbox-command-NC665ZZ5.js → sandbox-command-Q5F6VUOS.js} +1 -1
- package/dist/chunks/{sandbox-template-OTP6S3RU.js → sandbox-template-7GICPIKJ.js} +1 -1
- package/dist/chunks/{src-WM35IF4W.js → src-DH5AQ4Z7.js} +1 -1
- package/dist/chunks/src-GKWEQK2T.js +329 -0
- package/dist/chunks/{taskset-COAPMTT3.js → taskset-LUG3ZU6J.js} +1 -1
- package/dist/chunks/{teams-bot-ACWJ7PJP.js → teams-bot-Z6RJGHME.js} +1 -1
- package/dist/chunks/{training-4JUK7YQV.js → training-XHE6FVII.js} +1 -1
- package/dist/chunks/{workspaces-WTPFRJMS.js → workspaces-XIQNPAP7.js} +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/web/agent-sources/SOURCES.md +11 -0
- package/dist/web/agent-sources/claude-code.svg +1 -0
- package/dist/web/agent-sources/codex.svg +1 -0
- package/dist/web/agent-sources/grok-build.svg +3 -0
- package/dist/web/agent-sources/hermes.png +0 -0
- package/dist/web/agent-sources/oh-my-pi.svg +11 -0
- package/dist/web/agent-sources/openclaw.svg +54 -0
- package/dist/web/agent-sources/opencode.svg +4 -0
- package/dist/web/agent-sources/pi.svg +6 -0
- package/dist/web/assets/App-BI-uOpnP.js +234 -0
- package/dist/web/assets/App-DkH8CeoI.css +1 -0
- package/dist/web/assets/{AppDialog-CaxeNfsu.js → AppDialog-1iGodoot.js} +1 -1
- package/dist/web/assets/{AppTerminalPanel-dtK0ZPer.js → AppTerminalPanel-udtBdWFn.js} +2 -2
- package/dist/web/assets/AppsView-BonAGiS8.css +1 -0
- package/dist/web/assets/AppsView-DhKsU4yi.js +1 -0
- package/dist/web/assets/BrowserSidebar-BnOyqIQT.js +1 -0
- package/dist/web/assets/{CartesianChart-Drfk6jTn.js → CartesianChart-C24DAywn.js} +1 -1
- package/dist/web/assets/{CollaborationTabs-Czh2noeb.js → CollaborationTabs-DgmOF5Fe.js} +1 -1
- package/dist/web/assets/{CommandMenu-D-M-xomh.js → CommandMenu-CUNGtHwS.js} +1 -1
- package/dist/web/assets/{CommunityView-BrdxUI5Z.js → CommunityView-CE7qeJnr.js} +1 -1
- package/dist/web/assets/{ComposerCreateImproveStrip-CJ8nkYJf.js → ComposerCreateImproveStrip-BixNsg2a.js} +1 -1
- package/dist/web/assets/{GetStartedView-u7Jw7YA1.js → GetStartedView-B8gCwmBX.js} +1 -1
- package/dist/web/assets/{HostedModelLearningReview-D0a2nwse.js → HostedModelLearningReview-CitgUNfC.js} +1 -1
- package/dist/web/assets/{HostedModelLearningSettings-CQQGyjxi.js → HostedModelLearningSettings-WUaqzNsa.js} +1 -1
- package/dist/web/assets/{LabModelVersionDetailPage-Cxlc4sSC.js → LabModelVersionDetailPage-Cx0kL69J.js} +1 -1
- package/dist/web/assets/{LabSkillSidebar-BnJkDb0c.js → LabSkillSidebar-DRggqZ1j.js} +1 -1
- package/dist/web/assets/LabsRoute-BujTZhqC.js +99 -0
- package/dist/web/assets/{MainChatThread-r_TYiTnW.js → MainChatThread-CyA_644R.js} +2 -2
- package/dist/web/assets/MainPane-LaEtxydD.js +19 -0
- package/dist/web/assets/{MarkdownText-BxPHz4je.js → MarkdownText-DJI5LwT0.js} +19 -19
- package/dist/web/assets/{NativeSkillSidebar-CCHK6kMG.js → NativeSkillSidebar-CkFpWxjd.js} +1 -1
- package/dist/web/assets/{NewExperienceSwitcher-CuKWTDZj.js → NewExperienceSwitcher-DXcRHHsu.js} +1 -1
- package/dist/web/assets/{NewProjectDialog-CS6sw2oD.js → NewProjectDialog-gDzX_ZIJ.js} +1 -1
- package/dist/web/assets/{OutputsPage-JDM5bfLJ.js → OutputsPage-J_k-_N82.js} +1 -1
- package/dist/web/assets/{ProjectsPage-B3zTBHOA.js → ProjectsPage-BsyZmvlg.js} +1 -1
- package/dist/web/assets/{RightChatPanelStack-L8S3yj1u.js → RightChatPanelStack-Bz8puMUB.js} +1 -1
- package/dist/web/assets/{RightSidebarHomePanel-BWJQKFUp.js → RightSidebarHomePanel-DmorYb6p.js} +1 -1
- package/dist/web/assets/ScheduledWorkPage-BFDzQUyL.js +1 -0
- package/dist/web/assets/SettingsView-BB7wCdbr.js +5 -0
- package/dist/web/assets/SettingsView-BnANbPLS.css +1 -0
- package/dist/web/assets/{TeamChatView-DakXCNQE.js → TeamChatView-CZ3b7rq2.js} +2 -2
- package/dist/web/assets/{TerminalOverlay-DaonK5C0.js → TerminalOverlay-Ck43Qri3.js} +1 -1
- package/dist/web/assets/{TrainingCreationPanel-CUvSsSwp.js → TrainingCreationPanel-ejqPZm3g.js} +1 -1
- package/dist/web/assets/{TrainingDraftPanel-DNivtVwd.js → TrainingDraftPanel-Cy2AQxxL.js} +1 -1
- package/dist/web/assets/{UsageSettingsSection-rbmuoPoE.js → UsageSettingsSection-B7nyMItm.js} +1 -1
- package/dist/web/assets/{WorkSidebarPanel-DrYt9xzv.js → WorkSidebarPanel-BfjAc097.js} +1 -1
- package/dist/web/assets/{WorkspaceDiffPanel-CThoTqe4.js → WorkspaceDiffPanel-D9hAV8l7.js} +5 -5
- package/dist/web/assets/{WorkspaceEnvironmentMenu-DeODKxvW.js → WorkspaceEnvironmentMenu-B-K9XgFB.js} +3 -3
- package/dist/web/assets/{WorkspaceGitDialogs-CBarJYF-.js → WorkspaceGitDialogs-BJVFx_L3.js} +1 -1
- package/dist/web/assets/{WorkspaceMonacoEditor-Hmu5m_sO.js → WorkspaceMonacoEditor-p-FWMXoZ.js} +3 -3
- package/dist/web/assets/{arrow-up-right-BV2IHfb9.js → arrow-up-right-CFGI2YSt.js} +1 -1
- package/dist/web/assets/{chunk-YTGRET2L-PKzEfYnf.js → chunk-UHVJOMWN-BAlur2vw.js} +1 -1
- package/dist/web/assets/{clipboard-DDIvAWKp.js → clipboard-DIIxBort.js} +1 -1
- package/dist/web/assets/{cloud-upload-Dv6kFnfC.js → cloud-upload-BaQFNCTp.js} +1 -1
- package/dist/web/assets/{cssMode-BK0jFqWW.js → cssMode-6LOkSggB.js} +1 -1
- package/dist/web/assets/{folder-open-B9ixJQJX.js → folder-open-DZSxfPtr.js} +1 -1
- package/dist/web/assets/{folder-plus-DqSKvtNB.js → folder-plus-21v4D_Vx.js} +1 -1
- package/dist/web/assets/{git-commit-horizontal-C1lQvfxe.js → git-commit-horizontal-CgGixL64.js} +1 -1
- package/dist/web/assets/{htmlMode-CCV301b6.js → htmlMode-B5uRraNd.js} +1 -1
- package/dist/web/assets/index-DJcUXSsN.css +1 -0
- package/dist/web/assets/{index-DIaKfM8a.js → index-DOMrqhcz.js} +2 -2
- package/dist/web/assets/{info-BEvaynAD.js → info-BGTcmow7.js} +1 -1
- package/dist/web/assets/{jsonMode-Co4pyN4F.js → jsonMode-D3m8N4Gi.js} +1 -1
- package/dist/web/assets/{lspLanguageFeatures-CSU0G5da.js → lspLanguageFeatures-DoyipLsB.js} +1 -1
- package/dist/web/assets/{minimize-2-DT8t8wwP.js → minimize-2-B01qSko4.js} +1 -1
- package/dist/web/assets/{monaco.contribution-Cr0AaHCD.js → monaco.contribution--U8v3jpa.js} +2 -2
- package/dist/web/assets/{monaco.contribution-DSBAb_PC.js → monaco.contribution-BJyfaGX2.js} +2 -2
- package/dist/web/assets/{monaco.contribution-CBwGIQY1.js → monaco.contribution-Bc22foTx.js} +2 -2
- package/dist/web/assets/{monaco.contribution-DUZrs1D-.js → monaco.contribution-DuRhJ6zU.js} +2 -2
- package/dist/web/assets/{monitor-DGqnfsK9.js → monitor-eZP8ZTHe.js} +1 -1
- package/dist/web/assets/{play-C1XWyKh6.js → play-CGsWFR_B.js} +1 -1
- package/dist/web/assets/{python-Z1foxLdf.js → python-BNrLZWud.js} +1 -1
- package/dist/web/assets/{save-CX2kF74j.js → save-BLgjrccP.js} +1 -1
- package/dist/web/assets/{square-DMkXeYeV.js → square-CI1qNtvE.js} +1 -1
- package/dist/web/assets/{toggleHighContrast-CRMVp779.js → toggleHighContrast-B_GcTCnw.js} +1 -1
- package/dist/web/assets/{tsMode-Czu8YAqh.js → tsMode-CmruH_ys.js} +1 -1
- package/dist/web/assets/{upload-giKOPnl1.js → upload-DnlgGS2x.js} +1 -1
- package/dist/web/assets/useLocalAgentSchedules-BBhGUfK-.js +1 -0
- package/dist/web/assets/useProviderSettings-Bw-csWbH.css +1 -0
- package/dist/web/assets/useProviderSettings-DfhdkKdC.js +5 -0
- package/dist/web/assets/{useSessionTurnCache-CUYFsu_W.js → useSessionTurnCache-BwscKl5i.js} +1 -1
- package/dist/web/assets/{wifi-off-DbDXaV1N.js → wifi-off-Dz-4EDCc.js} +1 -1
- package/dist/web/assets/{workers-Cno4XklJ.js → workers-Bi9u46cp.js} +1 -1
- package/dist/web/assets/{yaml-C28t_C6h.js → yaml-DVTkiRnh.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunks/app-server-runtime-FL2CHQU2.js +0 -2
- package/dist/chunks/chunk-4VKNBADF.js +0 -2
- package/dist/chunks/chunk-5ZZM3TUN.js +0 -24
- package/dist/chunks/chunk-6JBWHR6T.js +0 -5
- package/dist/chunks/chunk-FKCWOASO.js +0 -49
- package/dist/chunks/chunk-FOEUDMME.js +0 -2678
- package/dist/chunks/chunk-ICZEOMPO.js +0 -2
- package/dist/chunks/chunk-JO7GRBOG.js +0 -2
- package/dist/chunks/chunk-KUKOZJIR.js +0 -2
- package/dist/chunks/chunk-M7PBDRKC.js +0 -2
- package/dist/chunks/chunk-P653BXMY.js +0 -3
- package/dist/chunks/chunk-PMZH2TKS.js +0 -4
- package/dist/chunks/chunk-W4IL6TWB.js +0 -186
- package/dist/chunks/chunk-WVNN3RB2.js +0 -2
- package/dist/chunks/cli-5QR7QNQJ.js +0 -2
- package/dist/chunks/core-commands-J2SJM5I5.js +0 -2
- package/dist/chunks/hosted-harness-runtime-PAYMAXH7.js +0 -2
- package/dist/chunks/hosted-profile-compiler-KQREWJA5.js +0 -2
- package/dist/chunks/hosted-profile-evaluation-preparation-OR4OLYEX.js +0 -3
- package/dist/chunks/import-YHSX6SBZ.js +0 -4
- package/dist/chunks/src-TNWF3IC5.js +0 -329
- package/dist/web/assets/App-CdDQ-lXE.css +0 -1
- package/dist/web/assets/App-D2f8_mGk.js +0 -235
- package/dist/web/assets/AppsView-CzbB5pXp.css +0 -1
- package/dist/web/assets/AppsView-DwK1UBJP.js +0 -1
- package/dist/web/assets/BrowserSidebar-Cj9VnkgU.js +0 -1
- package/dist/web/assets/LabsRoute-hHwZNbqN.js +0 -99
- package/dist/web/assets/MainPane-DJcd4tPk.js +0 -19
- package/dist/web/assets/ScheduledWorkPage-qX12p4B0.js +0 -1
- package/dist/web/assets/SettingsView-0KMs-r2I.js +0 -9
- package/dist/web/assets/SettingsView-CVsuQeCZ.css +0 -1
- package/dist/web/assets/index-1cMIFBxZ.css +0 -1
- package/dist/web/assets/useLocalAgentSchedules-BHxWmOeC.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.sidebar-task-menu{position:fixed;z-index:1000;width:192px;max-height:calc(100vh - 16px);overflow-y:auto;padding:4px;border:0;border-radius:8px;background:var(--panel);color:var(--text);box-shadow:0 8px 24px #0006}.sidebar-task-menu button{display:flex;align-items:center;gap:8px;width:100%;min-height:32px;padding:6px 8px;border:0;border-radius:4px;background:transparent;color:inherit;font:inherit;font-size:12px;text-align:left;cursor:pointer}.sidebar-task-menu button:hover,.sidebar-task-menu button:focus-visible{background:#000;outline:none}.sidebar-task-menu .task-menu-done{border-top:1px solid var(--border);margin-top:4px}.sidebar-task-menu-trigger.is-open{opacity:1;pointer-events:auto}.sidebar-row.sidebar-task-row.has-running-dot .row-meta{align-self:center;margin-top:0}@media(hover:none){.sidebar-task-menu-trigger{opacity:1;pointer-events:auto}}.sidebar-row-actions.sidebar-task-menu-trigger{background:transparent;padding:0}.sidebar-task-row:hover .sidebar-task-menu-trigger .sidebar-row-action,.sidebar-task-row:focus-within .sidebar-task-menu-trigger .sidebar-row-action,.sidebar-task-menu-trigger.is-open .sidebar-row-action{background:var(--panel)}.sidebar .sidebar-row.sidebar-task-row{display:grid;grid-template-columns:24px minmax(0,1fr) auto;min-width:0;max-width:100%;gap:8px;border:1px solid var(--border);margin:4px 6px;width:calc(100% - 12px);border-radius:8px}.sidebar .sidebar-task-row .row-meta{position:static;display:flex;align-items:center;align-self:center;gap:2px;min-width:0;width:auto;height:auto}.sidebar .sidebar-task-row .row-meta-status{flex:0 0 auto}.sidebar .sidebar-task-row .sidebar-task-menu-trigger{position:static;transform:none;flex:0 0 auto}.sidebar-title-slot{display:flex;min-width:0;max-width:100%;align-items:center;gap:3px;overflow:hidden}.sidebar-source-slot,.conversation-source-icon{width:24px;flex:0 0 24px;display:inline-flex;align-items:center;justify-content:center}.conversation-source-icon{height:24px}.conversation-source-icon img{width:16px;height:16px;object-fit:contain}.conversation-source-icon{font-size:17px;color:var(--muted)}.sidebar .sidebar-task-row .row-label-shell{display:flex;flex-direction:column;align-items:flex-start;flex:1 1 0;min-width:0;max-width:100%;overflow:hidden}.sidebar .sidebar-task-row .sidebar-session-title-line,.sidebar .sidebar-task-row .sidebar-task-title{min-width:0;max-width:100%;overflow:hidden}.sidebar .sidebar-task-row .sidebar-task-title-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar .sidebar-child-toggle{position:static;flex:0 0 15px;width:15px}.sidebar-inbox-row{min-height:54px;padding-top:8px;padding-bottom:8px}.sidebar-inbox-project{display:flex;align-items:center;gap:5px;min-width:0;min-height:18px;max-width:100%;text-align:left;overflow:hidden;white-space:nowrap;color:var(--muted);font-size:11px;line-height:18px}.sidebar-inbox-project-name{overflow:hidden;text-overflow:ellipsis}.sidebar-inbox-project time{flex:0 0 auto}.sidebar-inbox-done{display:inline-grid;place-items:center;width:30px;height:30px;flex:0 0 auto;border:0;background:transparent;color:var(--muted);border-radius:7px}.sidebar-inbox-done:hover,.sidebar-inbox-done:focus-visible{background:#80808033;color:var(--text)}.sidebar-threads-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:10px 12px 5px;font-size:12px;color:var(--muted)}.sidebar-threads-header-actions{display:flex;gap:4px;align-items:center}.sidebar-threads-header .sidebar-icon.active{color:var(--text);background:#8080802e}.sidebar-thread-inbox .section-actions{opacity:1}.sidebar-inbox-date{margin:16px 12px 6px;font-size:12px;font-weight:500;color:var(--muted)}.sidebar-threads-header-actions{margin-left:auto}.native-setup-terminal{position:fixed;inset:auto 0 0;height:min(420px,70vh);z-index:120}.native-setup-terminal .guake-terminal-overlay{height:100%}.app-shell:has(>.desktop-navigation-rail){grid-template-columns:52px var(--sidebar-width) minmax(0,1fr)}.app-shell.sidebar-closed:has(>.desktop-navigation-rail){grid-template-columns:52px 0 minmax(0,1fr)}.app-shell .content-shell{grid-column:3}.desktop-navigation-rail{grid-column:1;grid-row:1;z-index:25;min-height:0;display:flex;flex-direction:column;align-items:center;gap:18px;padding:10px 6px;background:var(--shell-navigation-bg)}.app-shell>.sidebar{grid-column:2;grid-row:1}.app-shell:has(>.desktop-navigation-rail)>.sidebar-resize-handle{grid-column:2 / 3}.desktop-rail-destinations{display:flex;flex-direction:column;align-items:center;gap:7px;width:36px;flex:0 0 auto}.desktop-rail-button{width:36px;height:36px;border:0;border-radius:9px;display:grid;place-items:center;color:var(--muted);background:transparent}.desktop-rail-button:hover,.desktop-rail-button.active{background:#80808029;color:var(--text)}.desktop-rail-button:focus-visible{outline:2px solid var(--text);outline-offset:2px}.desktop-navigation-rail [data-rail-tooltip]{position:relative}.desktop-navigation-rail [data-rail-tooltip]:after{content:attr(data-rail-tooltip);position:absolute;z-index:60;left:calc(100% + 12px);top:50%;transform:translateY(-50%);padding:7px 10px;border:1px solid var(--border);border-radius:7px;background:var(--panel);color:var(--text);box-shadow:0 4px 16px #00000040;font-size:12px;font-weight:500;line-height:1.3;white-space:nowrap;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .1s ease,visibility .1s ease}.desktop-navigation-rail [data-rail-tooltip]:hover:after,.desktop-navigation-rail [data-rail-tooltip]:focus-visible:after{opacity:1;visibility:visible}.desktop-rail-account{margin-top:auto;width:36px}.desktop-rail-account .user-auth-trigger{width:36px;height:36px;padding:0;grid-template-columns:1fr;gap:0;place-items:center}.desktop-rail-account .user-auth-name{display:none}.desktop-rail-account .user-auth-menu{position:fixed;left:52px;bottom:12px;max-width:calc(100vw - 64px)}@media(max-width:980px){.app-shell.sidebar-open:has(>.desktop-navigation-rail),.app-shell.sidebar-closed:has(>.desktop-navigation-rail){grid-template-columns:52px 0 minmax(0,1fr)}.app-shell>.sidebar{position:absolute;grid-column:1 / -1;left:52px;top:0;bottom:0;max-width:calc(100vw - 52px)}.app-shell:has(>.desktop-navigation-rail)>.sidebar-resize-handle{grid-column:1 / -1;left:calc(52px + min(var(--sidebar-width),86vw,calc(100vw - 52px)))}}.human-review-inbox-control{position:relative;display:inline-grid;place-items:center;flex:0 0 32px;min-width:32px;overflow:visible}.human-review-inbox-control svg{flex-shrink:0}.human-review-inbox-count{position:absolute;top:-3px;right:-6px;min-width:15px;padding:1px 3px;border-radius:8px;background:var(--text);color:var(--bg);font-size:9px;line-height:12px;text-align:center}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s,j as h}from"./index-
|
|
1
|
+
import{r as s,j as h}from"./index-DOMrqhcz.js";import{fr as D}from"./App-BI-uOpnP.js";const p=[],m=new WeakMap,j=["button:not([disabled])","[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","summary","[tabindex]:not([tabindex='-1'])","[contenteditable='true']"].join(",");function B({ariaLabel:o,backdropClassName:a="training-dialog-backdrop",children:i,className:u,contained:t=!1,dismissDisabled:n=!1,initialFocusKey:e,inertExclusionSelector:f,onClose:g}){const l=s.useRef(null),R=s.useRef(Symbol("app-dialog")),b=s.useRef(null),E=s.useRef(n),y=s.useRef(g);E.current=n,y.current=g,s.useEffect(()=>{const r=R.current;b.current=document.activeElement instanceof HTMLElement?document.activeElement:null,p.push(r);const d=t?l.current?.closest(".main-pane")??null:null,w=L(l.current,d,f);function x(c){if(p.at(-1)===r){if(c.key==="Escape"){c.preventDefault(),c.stopPropagation(),E.current||y.current();return}c.key!=="Tab"||t||I(c,l.current)}}return document.addEventListener("keydown",x,!0),()=>{document.removeEventListener("keydown",x,!0);const c=p.lastIndexOf(r);c>=0&&p.splice(c,1),w();const A=b.current;A?.isConnected&&A.focus()}},[t,f]),s.useEffect(()=>{const r=window.requestAnimationFrame(()=>{const d=l.current;(d?.querySelector("[data-autofocus]")??d)?.focus()});return()=>window.cancelAnimationFrame(r)},[e]);function k(r){r.target===r.currentTarget&&!n&&g()}function v(r){r.key==="Escape"&&r.stopPropagation()}return h.jsx("div",{className:a,role:"presentation",onMouseDown:k,children:h.jsx("section",{ref:l,"aria-busy":n||void 0,"aria-label":o,"aria-modal":t?void 0:"true",className:u,role:"dialog",tabIndex:-1,onKeyDown:v,onMouseDown:r=>r.stopPropagation(),children:h.jsx(D,{children:i})})})}function F(o){return o?Array.from(o.querySelectorAll(j)).filter(a=>!a.hidden&&a.getAttribute("aria-hidden")!=="true"&&a.getClientRects().length>0):[]}function I(o,a){if(!a)return;const i=F(a);if(i.length===0){o.preventDefault(),a.focus();return}const u=i.indexOf(document.activeElement),t=o.shiftKey?u<=0?i.length-1:u-1:u<0||u===i.length-1?0:u+1;o.preventDefault(),i[t]?.focus()}function L(o,a=null,i){if(!o)return()=>{};const u=[];let t=o.parentElement??o;for(;t.parentElement&&t!==document.body;){const n=t.parentElement;for(const e of Array.from(n.children)){if(e===t||!(e instanceof HTMLElement)||i&&e.matches(i))continue;const f=m.get(e)??{count:0,ariaHidden:e.getAttribute("aria-hidden"),inert:e.inert};f.count+=1,m.set(e,f),u.push(e),e.inert=!0,e.setAttribute("aria-hidden","true")}if(t=n,a&&t===a)break}return()=>{for(const n of u.reverse()){const e=m.get(n);!e||--e.count>0||(m.delete(n),n.inert=e.inert,e.ariaHidden===null?n.removeAttribute("aria-hidden"):n.setAttribute("aria-hidden",e.ariaHidden))}}}export{B as A};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TerminalOverlay-
|
|
2
|
-
import{r,j as t,_ as m}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TerminalOverlay-Ck43Qri3.js","assets/index-DOMrqhcz.js","assets/index-DJcUXSsN.css","assets/App-BI-uOpnP.js","assets/App-DkH8CeoI.css","assets/TerminalOverlay-DwBiZLwk.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r,j as t,_ as m}from"./index-DOMrqhcz.js";const p=r.lazy(()=>m(()=>import("./TerminalOverlay-Ck43Qri3.js"),__vite__mapDeps([0,1,2,3,4,5])).then(e=>({default:e.TerminalOverlay})));function E({open:e,connection:a,scope:l,tabs:s,onTabsChange:n,cwd:i,appId:u,workspaceName:o,queuedCommand:f,onClose:d}){const[_,c]=r.useState(!1);return r.useEffect(()=>{e&&c(!0)},[e]),_?t.jsx(r.Suspense,{fallback:null,children:t.jsx(p,{open:e,connection:a,scope:l,tabs:s,onTabsChange:n,cwd:i,appId:u,workspaceName:o,queuedCommand:f,onClose:d})}):null}export{E as AppTerminalPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-learning-control{margin-top:auto;display:grid;gap:8px}.agent-learning-control-row{display:flex;align-items:center;gap:8px}.agent-learning-settings{background:transparent;border:0;color:inherit;padding:0;font-size:12px;text-align:left;cursor:pointer}.agent-learning-control-row>small{margin-left:auto}.agent-learning-dialog{width:min(760px,calc(100vw - 32px));max-height:90vh;overflow-y:auto}.agent-learning-form{display:grid;gap:18px}.agent-learning-form fieldset{border:0;padding:0;margin:0;min-width:0;display:grid;gap:14px}.agent-learning-form legend{margin:0 0 12px;font-size:13px;font-weight:500}.agent-learning-form label,.agent-learning-policy-picker,.agent-learning-control>label,.agent-learning-join>label{display:grid;gap:7px;font-size:13px;color:#c3c3c3}.agent-learning-form input:not([type=checkbox]),.agent-learning-form select,.agent-learning-policy-picker select,.agent-learning-control select,.agent-learning-join select{width:100%;min-width:0;min-height:34px;padding:7px 10px;border:1px solid #333;border-radius:6px;background:#191919;color:#eee}.agent-learning-policy-picker{margin-bottom:16px}.agent-learning-form p,.agent-learning-join p{margin:0;color:#a6a6a6;font-size:12px;line-height:1.5}.agent-learning-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.agent-learning-form .agent-learning-check{display:flex;align-items:center;gap:8px}.agent-learning-options{max-height:244px;overflow:auto;border:1px solid #333;border-radius:6px}.agent-learning-form .agent-learning-option{min-height:49px;display:flex;align-items:center;gap:10px;padding:8px 12px}.agent-learning-option+.agent-learning-option{border-top:1px solid #2d2d2d}.agent-learning-option>span{flex:1;min-width:0}.agent-learning-option small{display:block;color:#999;font-size:11px;overflow-wrap:anywhere}.agent-learning-option img{width:22px;height:22px;object-fit:contain}.agent-learning-option>small{text-transform:capitalize}.agent-learning-options>p{padding:14px}.agent-learning-form details{display:grid;gap:14px}.agent-learning-form details summary{margin-bottom:14px;font-size:13px;color:#bbb;cursor:pointer}.agent-learning-footer{justify-content:flex-end}.agent-learning-join{display:grid;gap:18px;width:min(520px,calc(100vw - 32px))}.agent-learning-join h2{font-size:16px;font-weight:500;margin:0;padding-right:20px}.agent-learning-join .settings-button-row{justify-content:flex-end}.agent-learning-discard{margin-bottom:18px;padding:12px 0}.agent-learning-discard p{font-size:13px}.agent-learning-control button:disabled{cursor:default;opacity:.5}@media(max-width:620px){.agent-learning-columns{grid-template-columns:minmax(0,1fr)}}.apps-workspace-view{min-width:0;overflow-y:auto;width:100%}.apps-page-tabs{display:flex;gap:8px;width:min(1120px,calc(100% - 48px));margin:24px auto 0}.apps-page-tabs button,.agent-connections-actions button,.agent-importer-footer button{border:0;border-radius:6px;padding:8px 12px;color:#b6b6b6;background:transparent}.apps-page-tabs button[aria-selected=true]{background:#252525;color:#f2f2f2}.connected-agents-view{width:min(1120px,calc(100% - 48px));margin:28px auto 40px;display:grid;gap:18px}.agent-connections-heading,.agent-connections-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}.agent-connections-heading h2{margin:0;font-size:18px;font-weight:500}.agent-connections-heading p{color:#a0a0a0;font-size:14px}.agent-more{position:relative}.agent-more-menu{position:absolute;right:0;top:100%;z-index:20;min-width:180px;padding:6px;border-radius:8px;background:#262626;box-shadow:0 8px 24px #0008}.agent-more-menu button{display:flex;align-items:center;gap:8px;width:100%}.agent-more-menu button:hover{background:#333}.agent-project-scope{display:flex;align-items:center;gap:12px;font-size:13px;color:#aaa}.agent-project-scope select{min-width:200px;max-width:100%}.connected-agents-view select,.agent-sync-form select{border:1px solid #333;border-radius:6px;background:#191919;color:#eee;min-height:34px;padding:6px 10px}.agent-connections-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:stretch}.agent-connection-card{min-width:0;display:flex;flex-direction:column;gap:14px;border-radius:8px;background:#191919;padding:14px}.agent-card-title{display:flex;align-items:center;gap:9px}.agent-card-title img{width:24px;height:24px;object-fit:contain}.agent-card-title span{flex:1}.agent-hide{border:0;background:transparent;color:#999;padding:3px;opacity:0}.agent-connection-card:hover .agent-hide,.agent-hide:focus-visible{opacity:1}.agent-connection-card small{color:#aaa;font-size:12px;overflow-wrap:anywhere}.agent-connection-card p{margin:0;color:#aaa;font-size:13px}.agent-connect-button{border:0;border-radius:6px;background:#007e9b;color:#fff;padding:8px 12px;align-self:center;cursor:pointer}.agent-connect-button:disabled{opacity:.5;cursor:default}.agent-card-sync{display:grid;gap:8px;flex:1;font-size:13px}.agent-card-sync>div{display:grid;gap:4px}.agent-learning-link{color:#67d9ee;font-size:12px;margin-top:auto;text-decoration:none}.agent-learning-link:hover{text-decoration:underline}.agent-importer-footer{display:flex;align-items:center;flex-wrap:wrap;gap:12px;color:#aaa;font-size:12px}.agent-importer-footer code{display:block;overflow-wrap:anywhere;margin-top:8px}.agent-conversation-setup{display:grid;gap:18px}.agent-conversation-setup p{margin:0}.agent-retained-connection{display:grid;gap:8px;padding:12px;border:1px solid #333;border-radius:8px;font-size:13px}.agent-retained-connection small,.agent-sync-form small{color:#aaa;overflow-wrap:anywhere}.agent-retained-connection progress{width:100%;accent-color:#08a3bd}.agent-conversation-setup .settings-button-row{flex-wrap:wrap}.agent-conversation-setup a{color:#67d9ee}.agent-source-path{overflow-wrap:anywhere}.agent-sync-form{display:grid;gap:12px}.agent-sync-form h3{margin:0;font-size:14px;font-weight:500}.agent-sync-form label{display:grid;gap:6px;font-size:13px}.agent-sync-form .agent-sync-checkbox,.agent-sync-checkbox{display:flex;align-items:center;gap:8px}.agent-sync-form select{width:100%;min-width:0}.agent-conversation-setup code{display:block;margin-top:8px;overflow-wrap:anywhere;font-size:12px}.provider-details-dialog:has(.agent-conversation-setup){max-height:85vh;overflow-y:auto}.provider-details-dialog [hidden]{display:none}@media(max-width:650px){.agent-connections-heading{align-items:flex-start;flex-direction:column}.agent-project-scope{align-items:stretch;flex-direction:column}.agent-connections-grid{grid-template-columns:minmax(0,1fr)}}.agent-account-link{border:0;padding:0;background:transparent;color:#67d9ee;text-align:left;font-size:13px;cursor:pointer}.agent-account-link:hover{text-decoration:underline}.connected-apps-view{display:grid;align-content:start;gap:20px;width:min(960px,calc(100% - 72px));min-width:0;justify-self:center;padding:42px 0 40px}.connected-apps-header{display:grid;grid-template-columns:minmax(0,1fr) 230px;align-items:start;gap:24px;min-width:0}.connected-apps-header h1,.connected-apps-hero h2{margin:0;color:#f4f4f5;letter-spacing:0}.connected-apps-header h1{font-size:24px;line-height:1.15;font-weight:650}.connected-apps-header p{margin:6px 0 0;color:#9b9b9b;font-size:14px;line-height:1.45}.connected-apps-search{position:relative;display:grid;min-width:0}.connected-apps-search svg{position:absolute;left:13px;top:50%;color:#6f6f6f;transform:translateY(-50%);pointer-events:none}.connected-apps-search input{width:100%;height:38px;min-width:0;border:1px solid rgba(255,255,255,.11);border-radius:999px;background:#050505;color:#f3f3f3;padding:0 14px 0 38px;font-size:13px;outline:none}.connected-apps-search input:focus{border-color:#ffffff3d}.connected-apps-hero{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:40px;min-width:0;overflow:hidden;border-radius:24px;background:linear-gradient(135deg,#a76b42,#8fb7d9 48%,#38a39d);padding:28px 32px}.connected-apps-hero-copy{display:grid;align-content:start;gap:0;max-width:390px;color:#fff}.connected-apps-hero-icon,.connected-apps-context-card,.connected-app-icon{display:grid;place-items:center}.connected-apps-hero-icon{width:44px;height:44px;border-radius:999px;background:#fff}.connected-apps-hero-icon .connected-app-icon{background:transparent}.connected-apps-hero h2{margin-top:46px;font-size:24px;line-height:1.2;font-weight:560}.connected-apps-hero p{margin:12px 0 0;color:#ffffffe6;font-size:14px;line-height:1.45}.connected-apps-context-card{align-content:start;justify-items:stretch;min-height:190px;border-radius:18px;background:#ffffffe6;color:#111;padding:18px;box-shadow:0 20px 42px #0000002e}.connected-apps-context-card strong{font-size:14px;line-height:1.2}.connected-apps-context-card div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:18px;font-size:12px}.connected-apps-context-card span{min-width:0;border-radius:7px;padding:8px 11px;color:#111}.connected-apps-context-card .files{background:#dff0fb}.connected-apps-context-card .chat{background:#cef8df}.connected-apps-context-card .oauth{background:#fff2bd}.connected-apps-context-card .mcp{background:#ece6fb}.connected-apps-filters{display:flex;flex-wrap:wrap;gap:10px}.connected-apps-filters button{height:36px;border:0;border-radius:999px;background:transparent;color:#d1d1d1;padding:0 17px;font-size:14px}.connected-apps-filters button:hover{background:#ffffff0f}.connected-apps-filters button.active{background:#ffffff1a;color:#fff}.connected-apps-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:44px;row-gap:2px;min-width:0}.connected-app-row{display:grid;grid-template-columns:minmax(0,1fr) max-content 20px;align-items:center;gap:14px;min-height:88px;min-width:0;border:0;border-radius:8px;background:transparent;color:inherit;padding:8px 6px;text-align:left;transition:background-color .14s ease}.connected-app-row:hover,.connected-app-row:focus-visible{background:#ffffff0e;outline:none}.connected-app-row>svg{color:#686868}.connected-app-row-main{display:grid;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:16px;min-width:0}.connected-app-icon{width:44px;height:44px;border-radius:999px;background:#050505}.connected-app-icon img{display:block;width:18px;height:18px;object-fit:contain}.connected-app-icon.app-google img,.connected-app-icon.app-slack img,.connected-app-icon.app-slack_oauth img,.connected-app-icon.app-microsoft_teams img,.connected-app-icon.app-microsoft_teams_oauth img{width:19px;height:19px}.connected-app-icon.app-mcp{background:#0f172a}.connected-app-icon.app-mcp img{width:22px;height:22px}.connected-app-copy,.connected-app-title{display:block;min-width:0}.connected-app-title{color:#f4f4f5;font-size:14px;line-height:1.25;font-weight:520}.connected-app-title strong,.connected-app-title span,.connected-app-copy>span:nth-child(2){display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connected-app-title span{margin-top:1px;color:#777;font-size:11px;font-weight:450}.connected-app-copy>span:nth-child(2){margin-top:3px;color:#777;font-size:13px;line-height:1.25}.connected-app-capability-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}.connected-app-capability-row span,.connected-app-dialog-capabilities span{max-width:100%;min-width:0;overflow:hidden;border:1px solid rgba(255,255,255,.08);border-radius:999px;background:#ffffff0a;color:#a7a7a7;padding:3px 7px;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.2}.connected-app-status-pill{min-width:86px;border-radius:999px;background:#ffffff0d;color:#a9a9a9;padding:5px 9px;text-align:center;white-space:nowrap;font-size:11px;line-height:1.2}.connected-app-status-pill.connected{background:#40c97821;color:#72df9b}.connected-app-status-pill.disconnected{background:#ffffff0a;color:#9d9d9d}.connected-apps-empty{grid-column:1 / -1;min-height:80px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.08);border-radius:8px;color:#888;font-size:13px}.connected-app-dialog-backdrop{position:fixed;inset:0;z-index:80;display:grid;place-items:center;background:#000000ad;padding:20px}.connected-app-dialog{position:relative;display:grid;gap:18px;width:min(480px,100%);max-height:calc(100vh - 40px);overflow:auto;border:1px solid rgba(255,255,255,.08);border-radius:18px;background:#292929;color:#f5f5f5;padding:32px 24px 24px;box-shadow:0 26px 70px #00000073}.connected-app-dialog-close{position:absolute;top:14px;right:14px;display:inline-grid;place-items:center;width:28px;height:28px;border:1px solid rgba(255,255,255,.1);border-radius:7px;background:#ffffff08;color:#b8b8b8;padding:0}.connected-app-dialog-close:hover{background:#ffffff0f;color:#fff}.connected-app-dialog-close:focus-visible{outline:2px solid rgba(255,255,255,.24);outline-offset:2px}.connected-app-dialog-identity,.connection-dots,.connected-app-approval,.connected-app-dialog-primary{display:flex;align-items:center;justify-content:center}.connected-app-dialog-identity{gap:14px;padding-top:2px}.openpond-mark{display:grid;place-items:center;width:56px;height:56px;border-radius:10px;background:#050505}.openpond-mark img{width:34px;height:34px;object-fit:contain}.connected-app-dialog-identity .connected-app-icon{width:56px;height:56px;border-radius:10px}.connected-app-dialog-identity .connected-app-icon img{width:25px;height:25px}.connection-dots{gap:5px}.connection-dots span{width:5px;height:5px;border-radius:999px;background:#ffffff29}.connected-app-dialog h2{margin:0;text-align:center;color:#fff;font-size:20px;line-height:1.2;letter-spacing:0}.connected-app-approval{gap:7px;color:#35d680;font-size:14px}.connected-app-dialog-body{overflow:hidden;border:1px solid rgba(255,255,255,.09);border-radius:14px}.connected-app-dialog-body section{padding:14px 16px}.connected-app-dialog-body section+section{border-top:1px solid rgba(255,255,255,.08)}.connected-app-dialog-body h3{margin:0 0 6px;color:#f0f0f0;font-size:13px;font-weight:650}.connected-app-dialog-body p{margin:0;color:#b8b8b8;font-size:12px;line-height:1.45}.connected-app-dialog-capabilities{display:flex;flex-wrap:wrap;gap:6px}.connected-app-dialog-primary{gap:7px;height:38px;border:0;border-radius:999px;background:#f5f5f5;color:#222;font-size:14px}.connected-app-dialog-primary:hover{background:#dedede}@media(max-width:840px){.connected-apps-view{width:min(100% - 28px,680px);padding-top:24px}.connected-apps-header,.connected-apps-hero,.connected-apps-list{grid-template-columns:minmax(0,1fr)}.connected-app-row{grid-template-columns:minmax(0,1fr) 20px}.connected-app-status-pill{grid-column:1 / -1;width:fit-content;margin-left:60px}.connected-apps-context-card{display:none}.connected-apps-hero h2{margin-top:30px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,r as h}from"./index-DOMrqhcz.js";import{O as je,X as te,bs as Ne,z as Z,bN as D,bP as X,bO as G,ca as be,cb as J,cc as fe,cd as Pe,ce as se,cf as me,cg as Ee,ch as oe,ci as ye,cj as Se,ck as Ae,cl as Re,u as _e,e as Le,aM as Te,an as Oe,P as Ue,cm as re,G as Fe,av as $e,g as Me,al as De,aB as ze,cn as He,o as Ke}from"./App-BI-uOpnP.js";import{a as de,u as Be,b as Je}from"./useProviderSettings-DfhdkKdC.js";import{a as Ge,s as qe}from"./MainPane-LaEtxydD.js";import"./save-BLgjrccP.js";import"./MarkdownText-DJI5LwT0.js";import"./cloud-upload-BaQFNCTp.js";import"./arrow-up-right-CFGI2YSt.js";import"./square-CI1qNtvE.js";import"./folder-open-DZSxfPtr.js";import"./play-CGsWFR_B.js";const ae=[{id:"openpond_chat",name:"Ponder Pal",icon:je},{id:"codex",name:"Codex",icon:"/agent-sources/codex.svg",provider:"codex"},{id:"claude_code",name:"Claude Code",icon:"/agent-sources/claude-code.svg",provider:"claude-code"},{id:"opencode",name:"OpenCode",icon:"/agent-sources/opencode.svg",provider:"opencode"},{id:"grok_build",name:"Grok Build",icon:"/agent-sources/grok-build.svg",provider:"grok-build"},{id:"hermes",name:"Hermes",icon:"/agent-sources/hermes.png"},{id:"pi",name:"Pi",icon:"/agent-sources/pi.svg"},{id:"openclaw",name:"OpenClaw",icon:"/agent-sources/openclaw.svg"},{id:"oh_my_pi",name:"Oh My Pi",icon:"/agent-sources/oh-my-pi.svg"}];function ke(n,a){return n.state==="disconnected"?"Disconnected":n.state==="paused"?"Paused":n.error?"Needs attention":a.running?n.backfill.stage!=="complete"?"Importing history":n.queued?"Uploading updates":"Watching for conversations":a.desiredState==="stopped"?"Importer stopped":"Importer offline"}function We({agent:n,account:a,native:t,inventory:s,projects:l,teamId:g,learningControl:o,connected:i,onHide:p,onManage:c}){const d=s?.collector.connections.filter(u=>u.source===n.id)??[],v=s?.sources.some(u=>u.source===n.id&&u.available&&u.capabilities.history);return e.jsxs("article",{className:"agent-connection-card","aria-label":n.name,children:[e.jsxs("div",{className:"agent-card-title",children:[e.jsx("img",{src:n.icon,alt:""}),e.jsx("span",{children:n.name}),e.jsx("button",{type:"button",className:"agent-hide","aria-label":`Hide ${n.name}`,onClick:p,children:e.jsx(te,{size:14})})]}),n.id==="openpond_chat"?e.jsxs(e.Fragment,{children:[e.jsx("small",{children:a?.state==="signed_in"?"Connected to OpenPond":"Sign in to OpenPond"}),e.jsx("p",{children:"Use Ponder Pal from the sidebar."}),e.jsx("button",{type:"button",className:"agent-account-link",onClick:()=>{Ne({kind:"settings",section:"account"})},children:"Account setup"})]}):e.jsxs(e.Fragment,{children:[e.jsx("small",{children:t?t.available?t.enabled?"Ready to chat":"Installed · chat disabled":t.lastError??"Check installation":"Conversation import"}),e.jsx("button",{type:"button",className:"agent-connect-button",disabled:!i,onClick:c,children:t?.available||d.length?"Manage":"Connect"}),e.jsx("div",{className:"agent-card-sync",children:d.length?d.map(u=>e.jsxs("div",{children:[e.jsx("span",{children:ke(u,s.collector)}),e.jsxs("small",{children:[l.find(_=>_.id===u.projectId&&u.teamId===g)?.content.name??u.projectId," ","· ",u.admitted," tasks"]}),u.teamId!==g?e.jsxs("small",{children:["Team: ",u.teamId]}):null,u.queued?e.jsxs("small",{children:[u.queued," updates queued"]}):null,u.lastAdmissionAt?e.jsxs("small",{children:["Last sync: ",new Date(u.lastAdmissionAt).toLocaleString()]}):null,u.error?e.jsx("small",{role:"alert",children:u.error}):null]},u.id)):e.jsx("small",{children:s?v?"History available · sync not connected":"No local history found":"Reading local setup…"})})]}),o]})}function Ve(n,a,t,s){const l=h.useRef({providers:a,onProvider:t});l.current={providers:a,onProvider:t};const g=JSON.stringify(["claude-code","opencode","grok-build"].map(o=>{const i=a?.providers[o];return[o,i?.binaryPath,i?.sourceHome,i?.enabled]}));h.useEffect(()=>{if(!n||!l.current.providers)return;let o=!1;const i=["claude-code","opencode","grok-build"].map(p=>{const c=l.current.providers?.providers[p],d=new AbortController,v=s>0?{promise:Z(n,`/v1/providers/${p}/native-setup`,{method:"POST",body:JSON.stringify({action:"check"}),signal:d.signal}),release:()=>d.abort()}:Ge(n,p,l.current.providers?.providers[p]);return v.promise.then(u=>{o||(s>0&&u.session&&!u.error&&qe(n,p,u,c),l.current.onProvider(p,u.settings))},()=>{}),v});return()=>{o=!0,i.forEach(p=>p.release())}},[n,g,s])}var F=G().trim().min(1).max(240),we=be().int().positive(),Qe=J(["dataset","evaluator","model","training_configuration","training_run","harness","environment","experiment","learning_policy","deployment"]),Xe=D({kind:Qe,resourceId:F,release:fe.nullable(),role:J(["training","validation","holdout","target","reward","evaluation","serving","source"])}).strict(),Ze=Pe("kind",[D({kind:se("model"),providerId:F,modelId:F,artifact:fe.nullable(),messages:X(D({role:J(["system","user","assistant"]),content:G().max(1e5)}).strict()).max(100)}).strict(),D({kind:se("harness"),profileRepositoryId:F,source:me}).strict(),D({kind:se("agent"),source:Ee}).strict(),D({kind:se("suite"),profileRepositoryId:F,suiteId:F,sources:X(me).min(1).max(1e3)}).strict().superRefine((n,a)=>{const t=n.sources[0],s=new Set;for(const[l,g]of n.sources.entries())s.has(g.definitionId)&&a.addIssue({code:"custom",path:["sources",l],message:"Suite definitions must be unique."}),s.add(g.definitionId),(g.profileId!==t.profileId||g.sourceRevision!==t.sourceRevision||g.catalogHash!==t.catalogHash||oe(g.harnessRelease)!==oe(t.harnessRelease))&&a.addIssue({code:"custom",path:["sources",l],message:"Suite checks must belong to the same pinned Profile source and Harness release."})})]),Ie=D({name:G().trim().min(1).max(200),description:G().max(1e4),targets:X(D({id:F,name:G().trim().min(1).max(200),target:Ze}).strict()).max(100),defaultTargetId:F.nullable(),resources:X(Xe).max(1e3)}).strict().superRefine((n,a)=>{new Set(n.targets.map(t=>t.id)).size!==n.targets.length&&a.addIssue({code:"custom",path:["targets"],message:"Target identities must be unique."}),n.defaultTargetId&&!n.targets.some(t=>t.id===n.defaultTargetId)&&a.addIssue({code:"custom",path:["defaultTargetId"],message:"Default target must belong to this Project."}),new Set(n.resources.map(t=>oe(t))).size!==n.resources.length&&a.addIssue({code:"custom",path:["resources"],message:"Resource links must be unique."})}),Ye=D({schemaVersion:se("openpond.trainingProject.v1"),id:F,teamId:F,creatorUserId:F,ownerScope:J(["workspace","personal"]).optional(),revision:we,content:Ie,archived:ye(),createdAt:G().datetime(),updatedAt:G().datetime()}).strict();D({operationId:F,id:F,expectedRevision:be().int().nonnegative(),content:Ie,ownerScope:J(["workspace","personal"]).optional()}).strict();D({operationId:F,expectedRevision:we,archived:ye()}).strict();var en=D({teamId:F,projects:X(Ye).max(100),nextCursor:F.nullable()}).strict();D({operation:J(["evaluate","train","enable_learning","accept_candidate","serve"]),support:J(["supported","unsupported"]),state:J(["ready","needs_setup","blocked"]),reasons:X(D({code:F,message:G().min(1).max(2e3),field:G().nullable(),action:J(["choose_target","choose_data","choose_evaluator","configure_runtime","request_access","configure_budget","wait","review_evidence"]).nullable()}).strict()).max(100)}).strict().superRefine((n,a)=>{n.state==="ready"&&(n.support!=="supported"||n.reasons.length)&&a.addIssue({code:"custom",message:"Ready operations must be supported with no blockers."}),n.state!=="ready"&&!n.reasons.length&&a.addIssue({code:"custom",message:"Unavailable operations must explain the next step."})});const ne=new WeakMap;function nn(n,a,t){const s=JSON.stringify([a?.activeProfile,a?.profile?.id,t]),l=n?ne.get(n)?.get(s):void 0,[g,o]=h.useState(null),[i,p]=h.useState(null),[c,d]=h.useState(!1),[v,u]=h.useState(0),_=a?.state==="signed_in"?g?.key===s&&g.connection===n?g.value:l:void 0;h.useEffect(()=>{if(!n||!t||a?.state!=="signed_in")return;const w=new AbortController;d(!0),p(null);async function S(){const C=[],P=new Set;let j;do{const f=en.parse(await Z(n,"/v1/training/evaluation-workspace",{method:"POST",body:JSON.stringify({teamId:t,operation:"projects",value:{cursor:j}}),signal:w.signal}));if(f.teamId!==t)throw new Error("The hosted project workspace changed. Refresh connections.");if(C.push(...f.projects.filter(A=>!A.archived)),j=f.nextCursor??void 0,j&&P.has(j))throw new Error("Project pagination stalled. Refresh connections.");j&&P.add(j)}while(j&&!w.signal.aborted);if(w.signal.aborted)return;let k=ne.get(n);k||(k=new Map,ne.set(n,k));const T=k.get(s)?.selected,N=T&&C.some(f=>f.id===T)?T:C.length===1?C[0].id:"",x={projects:C,selected:N};k.set(s,x),o({key:s,connection:n,value:x})}return S().catch(C=>{w.signal.aborted||p(C instanceof Error?C.message:"Unable to list hosted projects.")}).finally(()=>{w.signal.aborted||d(!1)}),()=>w.abort()},[n,s,t,a?.state,v]);const L=h.useCallback(w=>{if(!n)return;const S=ne.get(n)?.get(s);if(!S||!S.projects.some(P=>P.id===w))return;const C={...S,selected:w};ne.get(n).set(s,C),o({key:s,connection:n,value:C})},[n,s]);return{projects:_?.projects??[],projectId:_?.selected??"",select:L,error:i,loading:c,refresh:()=>u(w=>w+1)}}const ge=new WeakMap;function sn(n){const[a,t]=h.useState(null),[s,l]=h.useState(null),[g,o]=h.useState(!1),i=h.useRef(0),p=h.useRef(null),c=h.useCallback(async()=>{if(!n||p.current)return;const d=new AbortController;p.current=d;const v=i.current;o(!0);try{const u=await Z(n,"/v1/native-history/collector",{method:"POST",body:JSON.stringify({command:"inventory"}),signal:d.signal});if(v!==i.current||d.signal.aborted)return;ge.set(n,u),t({connection:n,value:u}),l(null)}catch(u){v===i.current&&!d.signal.aborted&&l(u instanceof Error?u.message:"Unable to read agent connections.")}finally{p.current===d&&(p.current=null),v===i.current&&o(!1)}},[n]);return h.useEffect(()=>{i.current++,l(null),c();const d=window.setInterval(()=>{document.hidden||c()},1e4),v=()=>{c()};return window.addEventListener("focus",v),()=>{i.current++,p.current?.abort(),p.current=null,window.clearInterval(d),window.removeEventListener("focus",v)}},[c]),{inventory:a?.connection===n?a.value:n?ge.get(n)??null:null,loading:g,error:s,refresh:c}}Se.extend(Re);function tn({agent:n,inventory:a,connection:t,account:s,teamId:l,projects:g,projectId:o,onRefresh:i,learningUrl:p}){const c=a?.sources.filter(r=>r.source===n.id)??[],[d,v]=h.useState(c.length===1?c[0].instanceId:""),[u,_]=h.useState(o),[L,w]=h.useState("week"),[S,C]=h.useState(!0),[P,j]=h.useState(null),[k,T]=h.useState(!1),[N,x]=h.useState(null),f=c.find(r=>r.instanceId===d)??(!d&&c.length===1?c[0]:void 0),A=a?.collector.connections.filter(r=>r.source===n.id)??[],K=s?.baseUrl??s?.activeProfile?.baseUrl,H=s?.apiBaseUrl;async function z(r,I){if(!(!t||k||P)){T(!0),x(null);try{const O=await Z(t,"/v1/native-history/collector",{method:"POST",body:JSON.stringify({command:r,...I?{connectionId:I}:{},...r==="connect"?{setup:{sourceInstanceId:f?.instanceId,teamId:l,projectId:u,accountBaseUrl:K,apiBaseUrl:H,range:L,keepSyncing:S}}:{}})});O.command?j(O.command):await i()}catch(O){x(O instanceof Error?O.message:"Unable to update this connection.")}finally{T(!1)}}}const m=k||P!==null;return e.jsxs("div",{className:"agent-conversation-setup provider-dialog-body",children:[e.jsxs("p",{children:["Sync saved ",n.name," conversations to an existing OpenPond project. Setup uses the OpenPond CLI and browser authorization."]}),A.map(r=>e.jsxs("section",{className:"agent-retained-connection","aria-label":`${n.name} sync connection`,children:[e.jsx("strong",{children:ke(r,a.collector)}),e.jsxs("span",{children:["Project:"," ",r.teamId===l?g.find(I=>I.id===r.projectId)?.content.name??r.projectId:r.projectId," ","· Team: ",r.teamId]}),e.jsx("small",{children:r.accountBaseUrl??"Hosted destination"}),e.jsx("small",{className:"agent-source-path",children:r.sourceRoot}),e.jsxs("span",{children:[r.admitted," tasks imported · ",r.queued," updates queued"]}),r.backfill.total>0&&r.backfill.stage!=="complete"?e.jsxs(e.Fragment,{children:[e.jsx("progress",{"aria-label":"History import progress",value:r.backfill.admitted+r.backfill.skipped,max:r.backfill.total}),e.jsxs("small",{children:[r.backfill.admitted+r.backfill.skipped," of"," ",r.backfill.total," conversations processed"]})]}):null,e.jsx("small",{children:r.lastAdmissionAt?`Last synced ${Se(r.lastAdmissionAt).fromNow()}`:"No uploads acknowledged yet"}),r.error?e.jsx("p",{role:"alert",children:r.error}):null,e.jsxs("div",{className:"settings-button-row",children:[r.state==="disconnected"?e.jsx("button",{type:"button",disabled:m,onClick:()=>{z("reconnect",r.id)},children:"Reconnect"}):e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",disabled:m,onClick:()=>{z(r.state==="paused"?"resume":"pause",r.id)},children:r.state==="paused"?"Resume":"Pause"}),e.jsx("button",{type:"button",disabled:m,onClick:()=>{window.confirm("Disconnect this conversation source? Imported data stays in its project.")&&z("disconnect",r.id)},children:"Disconnect"})]}),r.destinationLinks.tasks?e.jsx("a",{href:r.destinationLinks.tasks,target:"_blank",rel:"noreferrer",children:"View tasks"}):null,r.destinationLinks.conversations?e.jsx("a",{href:r.destinationLinks.conversations,target:"_blank",rel:"noreferrer",children:"View conversations"}):null]})]},r.id)),e.jsxs("form",{onSubmit:r=>{r.preventDefault(),z("connect")},className:"agent-sync-form",children:[e.jsx("h3",{children:A.length?"Add another connection":"Connect conversations"}),e.jsxs("label",{className:"agent-source-field",children:["Source installation",e.jsxs("select",{"aria-label":"Source installation",value:f?.instanceId??"",disabled:m,onChange:r=>v(r.target.value),children:[e.jsx("option",{value:"",children:"Select installation"}),c.map(r=>e.jsxs("option",{value:r.instanceId,disabled:!r.available||!r.capabilities.history,children:[r.root,r.available&&r.capabilities.history?"":" (unavailable)"]},r.instanceId))]})]}),f?.reason?e.jsx("small",{children:f.reason}):null,c.some(r=>r.available&&r.capabilities.history)?null:e.jsxs("small",{children:["No readable conversation history found."," ",n.provider?"Use Agent setup to check the installation, or create a conversation in this agent first.":"Open this agent and create a conversation, then refresh connections."]}),e.jsxs("label",{children:["Project",e.jsxs("select",{"aria-label":"Project",value:u,disabled:m||!l,onChange:r=>_(r.target.value),children:[e.jsx("option",{value:"",children:"Select project"}),g.map(r=>e.jsx("option",{value:r.id,children:r.content.name},r.id))]})]}),e.jsxs("label",{children:["Import history",e.jsxs("select",{"aria-label":"Import history",value:L,disabled:m,onChange:r=>w(r.target.value),children:[e.jsx("option",{value:"day",children:"Last day"}),e.jsx("option",{value:"week",children:"Last week"}),e.jsx("option",{value:"all",children:"All history"})]})]}),e.jsxs("label",{className:"agent-sync-checkbox",children:[e.jsx("input",{type:"checkbox",checked:S,disabled:m,onChange:r=>C(r.target.checked)}),"Keep syncing new conversations"]}),s?.state!=="signed_in"||!l?e.jsx("small",{children:"Sign in and select a default team in Account settings to choose a hosted project."}):null,e.jsx("button",{type:"submit",className:"agent-connect-button",disabled:m||!f?.available||!f.capabilities.history||!g.some(r=>r.id===u)||!l||!K||!H||s?.state!=="signed_in",children:k?"Opening setup…":"Connect conversations"})]}),p?e.jsx("a",{className:"agent-learning-link",href:p,target:"_blank",rel:"noreferrer",children:"Configure continual learning in Console"}):null,a?e.jsxs("details",{children:[e.jsx("summary",{children:"CLI setup"}),e.jsxs("small",{className:"agent-source-path",children:["Importer directory: ",a.directory]}),e.jsx("code",{children:a.statusCommand})]}):null,N?e.jsx("p",{role:"alert",children:N}):null,P&&t?e.jsx(Ae,{connection:t,command:P,onComplete:()=>{j(null),i()},onClose:()=>{j(null),i()}}):null]})}const U=n=>JSON.stringify([n.origin,n.sourceInstanceId]),xe=n=>({id:n.id,revision:n.revision,contentHash:n.contentHash});function Q(n,a,t,s,l){return Z(n,`/v1/conversation-learning/${t}?${new URLSearchParams({teamId:a})}`,{method:s===void 0?"GET":"POST",...s===void 0?{}:{body:JSON.stringify(s)},signal:l})}function an(n,a,t,s){const l=_e(),g=["native-conversation-learning",n?.serverUrl,t,a];return{...Le({queryKey:g,enabled:!!(n&&a&&s),queryFn:({signal:i})=>Q(n,a,"options",void 0,i),staleTime:15e3,refetchInterval:3e4}),refresh:()=>l.invalidateQueries({queryKey:g})}}function Ce(n,a,t,s,l){return Q(n,a,"policies",{...t?{id:t.id}:{},expectedRevision:t?.revision??0,configuration:s,enabled:l})}function le(n,a,t=[]){const s=a?.configuration;return{projectId:n,name:s?.name??"Continual learning",mode:s?.mode??"activate",definition:s?.definition??null,configurationId:s?.configuration?.id??"",trainingPolicyId:s?.learningPolicy?.id??"",graderIds:[],sourceKeys:[...new Set([...s?.sources.filter(l=>l.enabled).map(U)??[],...t.map(U)])],adapter:s?.adapter??{kind:"complete_text",qualitativeOnly:!0},generator:s?.generator??null,graderSelection:s?.graderSelection??(a?{mode:"manual"}:{mode:"auto",modelId:"gpt-6-luna",sampleSize:8,maximumOutputTokens:2048,maximumSpendUsd:1}),schedule:s?.schedule??{timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,hour:2,minute:0,endHour:6,endMinute:0},limits:s?.limits??{perCycleUsd:5,dailyUsd:5,monthlyUsd:25,gradeUsd:.2,maximumTasks:10,minimumExamples:5,maxGpuSeconds:10800,maximumAttempts:2,lookbackDays:30},exceptions:s?.exceptions??"block",minimumScore:s?.minimumScore??.8,selection:s?.selection??{maximumSourceShare:1,maximumFailureShare:1,maximumLengthShare:1,replayFraction:.2,auditFraction:.1},acceptance:s?.acceptance??{minimumCasesPerCheck:20,minimumImprovement:.05,windowCasesPerCheck:20},failurePolicy:s?.failurePolicy??{pauseAfterConsecutiveFailures:3},...s?.serving?{serving:s.serving}:{serving:{targetId:"",canarySeconds:120,rollbackOnRuntimeFailure:!0}}}}function ce(n,a){const t=n?.configurations.find(s=>s.id===a);return n?.trainingPolicies.filter(s=>s.modelProjectId===t?.portableProjectId&&s.training.recipe.id===`model-recipe-${t?.etag}`&&!s.id.startsWith("conversation-training-"))??[]}async function rn(n,a,t,s,l,g){const o=s.configurations.find(j=>j.id===t.configurationId),i=ce(s,t.configurationId).find(j=>j.id===t.trainingPolicyId);if(!t.name.trim())throw new Error("Enter a policy name.");if(!s.projects.some(j=>j.id===t.projectId))throw new Error("This owned Project is unavailable for continual learning.");if(t.configurationId&&(!o||!s.projects.find(j=>j.id===t.projectId)?.configurationIds.includes(o.id)))throw new Error("Choose a model configuration attached to this Project.");if(t.mode!=="evaluate"&&(!o||!i))throw new Error("Choose an owned model and its reviewed training setup.");if(t.limits.perCycleUsd>t.limits.dailyUsd||t.limits.dailyUsd>t.limits.monthlyUsd)throw new Error("Daily and monthly spending limits must cover the run limit.");if(t.limits.minimumExamples>t.limits.maximumTasks-Math.floor(t.limits.maximumTasks*(t.selection?.replayFraction??0)))throw new Error("Leave capacity for the minimum new examples after replay.");const p=s.sources.filter(j=>j.projectId===t.projectId&&t.sourceKeys.includes(U(j)));if(!p.length)throw new Error("Select a source agent for this Project.");const c=[...(l?.configuration.sources??[]).filter(j=>!p.some(k=>U(k)===U(j))).map(j=>({...j,enabled:!1})),...p.map(j=>({origin:j.origin,sourceInstanceId:j.sourceInstanceId,enabled:!0}))];let d=t.definition;if(o&&(l?.configuration.configuration?.id!==o.id||l.configuration.configuration.expectedEtag!==o.etag))d=await Q(n,a,"definitions",{projectId:t.projectId,configuration:{id:o.id,expectedRevision:o.revision,expectedEtag:o.etag}});else if(t.graderIds.length){const j=s.graders.flatMap(k=>k&&t.graderIds.includes(k.id)?[xe(k)]:[]);d=await Q(n,a,"definitions",{projectId:t.projectId,graders:j})}if(!d)throw new Error("Select evaluation rubrics or an existing task definition.");let v=t.serving;const u=s.servingTargets.find(j=>j.id===v?.targetId);if(t.mode==="activate"&&v?.targetId&&(!u||!u.enabled||u.projectId!==t.projectId))throw new Error("Select an available serving target in this Project.");if(t.mode==="activate"&&(!v?.targetId||u?.hostedPonder)&&(v={targetId:(await Q(n,a,"serving-targets",{action:"ensure_hosted_ponder",projectId:t.projectId,bindingId:s.ponderBindingId})).id,canarySeconds:v?.canarySeconds??120,rollbackOnRuntimeFailure:!0}),t.mode==="activate"&&!v?.targetId)throw new Error("Choose a serving target, or enable the policy to register hosted Ponder.");const{sourceKeys:_,configurationId:L,trainingPolicyId:w,graderIds:S,...C}=t,P={...C,name:t.name.trim(),definition:d,sources:c,configuration:o?{id:o.id,expectedRevision:o.revision,expectedEtag:o.etag}:null,learningPolicy:i?xe(i):null,...t.mode==="activate"?{serving:v}:{}};return t.mode!=="activate"&&delete P.serving,t.mode==="evaluate"&&delete P.acceptance,Ce(n,a,l,P,g)}function ln({draft:n,options:a,loading:t,onChange:s}){const l=a?.sources.filter(c=>c.projectId===n.projectId)??[],g=l.filter(c=>["active","paused"].includes(c.state)),o=g.length>0&&g.every(c=>n.sourceKeys.includes(U(c))),i=c=>s({...n,sourceKeys:c}),p=a?.graders.flatMap(c=>c?[c]:[])??[];return e.jsxs(e.Fragment,{children:[e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Source agents"}),e.jsxs("label",{className:"agent-learning-check",children:[e.jsx("input",{type:"checkbox",checked:o,disabled:!g.length,ref:c=>{c&&(c.indeterminate=!o&&g.some(d=>n.sourceKeys.includes(U(d))))},onChange:c=>i(c.target.checked?[...new Set([...n.sourceKeys,...g.map(U)])]:n.sourceKeys.filter(d=>!g.some(v=>U(v)===d)))}),"Select all"," ",e.jsxs("small",{children:["(",l.filter(c=>n.sourceKeys.includes(U(c))).length," selected)"]})]}),e.jsxs("div",{className:"agent-learning-options","aria-label":"Source agents",children:[l.map(c=>{const d=U(c),v=n.sourceKeys.includes(d),u=ae.find(L=>L.id===(c.origin.startsWith("native_")?"openpond_chat":c.origin)),_=c.origin==="native_chat"?"Ponder Pal Chat":c.origin==="native_work"?"Ponder Pal Work":u?.name??c.name;return e.jsxs("label",{className:"agent-learning-option",children:[e.jsx("input",{type:"checkbox",checked:v,disabled:!v&&!["active","paused"].includes(c.state),onChange:L=>i(L.target.checked?[...new Set([...n.sourceKeys,d])]:n.sourceKeys.filter(w=>w!==d))}),u?e.jsx("img",{src:u.icon,alt:""}):null,e.jsxs("span",{children:[_,e.jsx("small",{children:c.sourceInstanceId?c.name===c.origin?"Local connection":c.name:c.origin.startsWith("native_")?"Hosted conversations":"Uploaded history"})]}),e.jsx("small",{children:c.state})]},d)}),l.length?null:e.jsx("p",{role:"status",children:t?"Fetching source agents…":"Connect or import an agent into this Project first."})]}),e.jsx("p",{children:"Paused agents can use uploaded conversations. Selecting them leaves collection paused."})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Evaluation rubrics"}),n.configurationId?e.jsx("p",{children:"The training configuration pins the task definition and its rubrics. Choose grader selection in Preparation."}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"agent-learning-check",children:[e.jsx("input",{type:"checkbox",disabled:!p.length,checked:p.length>0&&p.every(c=>n.graderIds.includes(c.id)),onChange:c=>s({...n,graderIds:c.target.checked?p.map(d=>d.id):[]})}),"Select all ",e.jsxs("small",{children:["(",n.graderIds.length," selected)"]})]}),e.jsxs("div",{className:"agent-learning-options","aria-label":"Evaluation rubrics",children:[p.map(c=>e.jsxs("label",{className:"agent-learning-option",children:[e.jsx("input",{type:"checkbox",checked:n.graderIds.includes(c.id),onChange:d=>s({...n,graderIds:d.target.checked?[...n.graderIds,c.id]:n.graderIds.filter(v=>v!==c.id)})}),e.jsxs("span",{children:[c.name,e.jsxs("small",{children:["Version ",c.revision]})]})]},`${c.id}:${c.revision}`)),p.length?null:e.jsx("p",{role:"status",children:t?"Fetching evaluation rubrics…":"No owned evaluation rubrics are available."})]}),n.definition&&!n.graderIds.length?e.jsx("p",{children:"The saved task definition and rubrics remain unchanged."}):null,e.jsxs("label",{children:["Existing task definition",e.jsxs("select",{value:n.definition?.id??"",onChange:c=>{const d=a?.definitions.find(v=>v.id===c.target.value);s({...n,definition:d?{id:d.id,revision:d.revision,contentHash:d.contentHash}:null,graderIds:[]})},children:[e.jsx("option",{value:"",children:"Select a definition or choose rubrics above"}),n.definition&&!a?.definitions.some(c=>c.id===n.definition?.id)?e.jsx("option",{value:n.definition.id,children:"Saved task definition"}):null,a?.definitions.map(c=>e.jsxs("option",{value:c.id,children:[c.name," (version ",c.revision,")"]},c.id))]})]})]}),e.jsxs("label",{children:["Minimum verified score",e.jsx("input",{type:"number",min:0,max:1,step:.01,value:n.minimumScore,onChange:c=>s({...n,minimumScore:Number(c.target.value)})})]})]})]})}function on({draft:n,options:a,loading:t,onChange:s}){const l=a?.projects.find(i=>i.id===n.projectId)?.configurationIds??[],g=ce(a,n.configurationId),o=n.graderSelection??{mode:"manual"};return e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:["Mode",e.jsxs("select",{value:n.mode,onChange:i=>s({...n,mode:i.target.value}),children:[e.jsx("option",{value:"evaluate",children:"Evaluate only"}),e.jsx("option",{value:"train",children:"Train automatically, approve candidate"}),e.jsx("option",{value:"activate",children:"Train and activate automatically"})]})]}),e.jsxs("label",{children:["Model to train",e.jsxs("select",{value:n.configurationId,onChange:i=>{const p=i.target.value,c=ce(a,p);s({...n,configurationId:p,trainingPolicyId:c.length===1?c[0].id:"",adapter:p?{kind:"reference_text",inputPointer:"/prompt",match:"contained"}:{kind:"complete_text",qualitativeOnly:!0}})},children:[e.jsx("option",{value:"",children:t?"Fetching configurations…":"Select configuration"}),a?.configurations.filter(i=>l.includes(i.id)).map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),n.mode!=="evaluate"?e.jsxs("label",{children:["Reviewed training setup",e.jsxs("select",{value:n.trainingPolicyId,onChange:i=>s({...n,trainingPolicyId:i.target.value}),children:[e.jsx("option",{value:"",children:"Select reviewed setup"}),g.map(i=>e.jsxs("option",{value:i.id,children:["Reviewed setup (version ",i.revision,")"]},i.id))]})]}):null,n.configurationId?e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:["Task construction",e.jsxs("select",{value:n.adapter.kind,onChange:i=>s({...n,adapter:i.target.value==="reference_text"?{kind:"reference_text",inputPointer:"/prompt",match:"contained"}:{kind:"complete_text",qualitativeOnly:!0}}),children:[e.jsx("option",{value:"reference_text",children:"Match a published executable task"}),e.jsx("option",{value:"complete_text",children:"Complete text context and calibrated judges"})]})]}),n.adapter.kind==="reference_text"?e.jsxs("div",{className:"agent-learning-columns",children:[e.jsxs("label",{children:["Public task input field",e.jsx("input",{value:n.adapter.inputPointer,onChange:i=>s({...n,adapter:{kind:"reference_text",inputPointer:i.target.value,match:n.adapter.kind==="reference_text"?n.adapter.match:"contained"}})})]}),e.jsxs("label",{children:["Reference matching",e.jsxs("select",{value:n.adapter.match,onChange:i=>s({...n,adapter:{kind:"reference_text",inputPointer:n.adapter.kind==="reference_text"?n.adapter.inputPointer:"/prompt",match:i.target.value}}),children:[e.jsx("option",{value:"contained",children:"Contained"}),e.jsx("option",{value:"exact",children:"Exact"})]})]})]}):null,e.jsxs("label",{children:["Grader selection",e.jsxs("select",{value:o.mode,onChange:i=>s({...n,graderSelection:i.target.value==="auto"?{mode:"auto",modelId:"gpt-6-luna",sampleSize:8,maximumOutputTokens:2048,maximumSpendUsd:1}:{mode:"manual"}}),children:[e.jsx("option",{value:"auto",children:"Choose compatible rubrics automatically"}),e.jsx("option",{value:"manual",children:"Use the pinned rubrics"})]})]}),o.mode==="auto"?e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:["Selection model",e.jsxs("select",{value:o.modelId,onChange:i=>s({...n,graderSelection:{...o,modelId:i.target.value}}),children:[a?.generators.some(i=>i.id===o.modelId)?null:e.jsx("option",{value:o.modelId,children:o.modelId}),a?.generators.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),e.jsx("div",{className:"agent-learning-columns",children:[["sampleSize","Sample examples",1,30],["maximumOutputTokens","Output token limit",256,4096],["maximumSpendUsd","Selection spending limit ($)",.01,1e5]].map(([i,p,c,d])=>e.jsxs("label",{children:[p,e.jsx("input",{type:"number",min:c,max:d,step:i==="maximumSpendUsd"?.01:1,value:o[i],onChange:v=>s({...n,graderSelection:{...o,[i]:Number(v.target.value)}})})]},i))})]}):null]}):null,e.jsxs("label",{children:["Answer improvement model",e.jsxs("select",{value:n.generator?.modelId??"",onChange:i=>s({...n,generator:i.target.value?{modelId:i.target.value,maximumOutputTokens:n.generator?.maximumOutputTokens??2048,maximumSpendUsd:n.generator?.maximumSpendUsd??.1}:null}),children:[e.jsx("option",{value:"",children:"Use recorded answers only"}),a?.generators.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),n.generator?e.jsxs("div",{className:"agent-learning-columns",children:[e.jsxs("label",{children:["Per improved answer limit ($)",e.jsx("input",{type:"number",min:.01,step:.01,value:n.generator.maximumSpendUsd,onChange:i=>s({...n,generator:{...n.generator,maximumSpendUsd:Number(i.target.value)}})})]}),e.jsxs("label",{children:["Output token limit",e.jsx("input",{type:"number",min:256,max:16384,value:n.generator.maximumOutputTokens,onChange:i=>s({...n,generator:{...n.generator,maximumOutputTokens:Number(i.target.value)}})})]})]}):null,n.mode==="activate"?e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Serving authorization"}),e.jsxs("label",{children:["Serving target",e.jsxs("select",{value:n.serving?.targetId??"",onChange:i=>s({...n,serving:{targetId:i.target.value,canarySeconds:n.serving?.canarySeconds??120,rollbackOnRuntimeFailure:!0}}),children:[e.jsx("option",{value:"",children:"Ponder in this Project"}),a?.servingTargets.filter(i=>i.projectId===n.projectId&&i.enabled).map(i=>e.jsx("option",{value:i.id,children:i.hostedPonder?"Hosted Ponder":`${i.role} / ${i.roleTargetId}`},i.id))]})]}),e.jsxs("label",{children:["Runtime canary (seconds)",e.jsx("input",{type:"number",min:30,max:600,value:n.serving?.canarySeconds??120,onChange:i=>s({...n,serving:{targetId:n.serving?.targetId??"",canarySeconds:Number(i.target.value),rollbackOnRuntimeFailure:!0}})})]}),e.jsx("p",{children:"Saving authorizes the selected target. Failed runtime checks restore its prior model. Training runs only within the saved policy's schedule and limits."})]}):null]})}const ve=(n,a)=>n===void 0||a===void 0?"":`${String(n).padStart(2,"0")}:${String(a).padStart(2,"0")}`;function cn({draft:n,onChange:a}){const t=(s,l)=>a({...n,limits:{...n.limits,[s]:l}});return e.jsxs(e.Fragment,{children:[e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Run window"}),e.jsxs("div",{className:"agent-learning-columns",children:[e.jsxs("label",{children:["From",e.jsx("input",{type:"time",required:!0,value:ve(n.schedule.hour,n.schedule.minute),onChange:s=>{const[l,g]=s.target.value.split(":").map(Number);a({...n,schedule:{...n.schedule,hour:l,minute:g}})}})]}),e.jsxs("label",{children:["Until",e.jsx("input",{type:"time",value:ve(n.schedule.endHour,n.schedule.endMinute),onChange:s=>{const[l,g]=s.target.value.split(":").map(Number),{endHour:o,endMinute:i,...p}=n.schedule;a({...n,schedule:s.target.value?{...p,endHour:l,endMinute:g}:p})}})]})]}),e.jsxs("label",{children:["Timezone",e.jsx("input",{required:!0,value:n.schedule.timezone,onChange:s=>a({...n,schedule:{...n.schedule,timezone:s.target.value}})})]}),e.jsx("p",{children:"Queued learning starts within this window. A run already started may finish afterward."})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Maximum spending"}),e.jsx("p",{children:"These are limits, not prices. Evaluation, answer improvements and training count toward them."}),e.jsx("div",{className:"agent-learning-columns",children:[["perCycleUsd","Per run ($)"],["dailyUsd","Per day ($)"],["monthlyUsd","Per month ($)"]].map(([s,l])=>e.jsxs("label",{children:[l,e.jsx("input",{type:"number",required:!0,min:.01,max:1e5,step:.01,value:n.limits[s],onChange:g=>t(s,Number(g.target.value))})]},s))})]}),e.jsxs("details",{children:[e.jsx("summary",{children:"Advanced limits"}),e.jsxs("div",{className:"agent-learning-columns",children:[[["gradeUsd","Per evaluation ceiling ($)",0,1e3,.01],["maximumTasks","Maximum tasks",1,200,1],["minimumExamples","Minimum training examples",1,200,1],["maximumAttempts","Maximum correction attempts",1,5,1],["lookbackDays","Uploaded history window (days)",1,30,1]].map(([s,l,g,o,i])=>e.jsxs("label",{children:[l,e.jsx("input",{type:"number",required:!0,min:g,max:o,step:i,value:n.limits[s],onChange:p=>t(s,Number(p.target.value))})]},s)),e.jsxs("label",{children:["Maximum GPU session (hours)",e.jsx("input",{type:"number",required:!0,min:.01,max:3,step:.01,value:n.limits.maxGpuSeconds/3600,onChange:s=>t("maxGpuSeconds",Math.round(Number(s.target.value)*3600))})]}),e.jsxs("label",{children:["Pause after failed cycles",e.jsx("input",{type:"number",required:!0,min:1,max:20,value:n.failurePolicy?.pauseAfterConsecutiveFailures??3,onChange:s=>a({...n,failurePolicy:{pauseAfterConsecutiveFailures:Number(s.target.value)}})})]})]}),e.jsxs("label",{className:"agent-learning-check",children:[e.jsx("input",{type:"checkbox",checked:n.exceptions==="eligible_remainder",onChange:s=>a({...n,exceptions:s.target.checked?"eligible_remainder":"block"})}),"Use the independently verified remainder when exceptions occur"]})]}),e.jsxs("details",{children:[e.jsx("summary",{children:"Training data balance"}),e.jsx("div",{className:"agent-learning-columns",children:[["maximumSourceShare","Maximum from one agent",100],["maximumFailureShare","Maximum from one error type",100],["maximumLengthShare","Maximum from one conversation length",100],["replayFraction","Previously learned examples",50],["auditFraction","Examples checked for quality",100]].map(([s,l,g])=>e.jsxs("label",{children:[l," (%)",e.jsx("input",{type:"number",min:s.startsWith("maximum")?1:0,max:g,value:Math.round((n.selection?.[s]??0)*100),onChange:o=>a({...n,selection:{maximumSourceShare:1,maximumFailureShare:1,maximumLengthShare:1,replayFraction:.2,auditFraction:.1,...n.selection,[s]:Number(o.target.value)/100}})})]},s))})]}),n.mode!=="evaluate"?e.jsxs("details",{children:[e.jsx("summary",{children:"Checks before using the trained model"}),e.jsx("div",{className:"agent-learning-columns",children:[["windowCasesPerCheck","New examples per quality check",2,1e4],["minimumCasesPerCheck","Minimum paired examples",2,1e4],["minimumImprovement","Required improvement",1e-4,1]].map(([s,l,g,o])=>e.jsxs("label",{children:[l,e.jsx("input",{type:"number",min:g,max:o,step:s==="minimumImprovement"?.01:1,value:n.acceptance?.[s]??g,onChange:i=>a({...n,acceptance:{minimumCasesPerCheck:20,windowCasesPerCheck:20,minimumImprovement:.05,...n.acceptance,[s]:Number(i.target.value)}})})]},s))}),e.jsx("p",{children:"Current and trained models use the same unseen examples. Insufficient evidence keeps the current model active."})]}):null]})}function dn({connection:n,teamId:a,projectId:t,projectName:s,initialPolicy:l,bindings:g,query:o,onClose:i}){const[p,c]=h.useState(l),[d,v]=h.useState(()=>le(t,l,l?[]:g)),[u,_]=h.useState(!!o.data),[L,w]=h.useState(!1),[S,C]=h.useState(!1),[P,j]=h.useState(null),[k,T]=h.useState(l?.status==="enabled"||!l),[N,x]=h.useState("sources"),[f,A]=h.useState(!1),[K,H]=h.useState(null),z=h.useRef(u);z.current=u;const m=o.data?.policies.filter(y=>y.configuration.projectId===t)??[];h.useEffect(()=>{if(!o.data||z.current)return;const y=o.data.policies.find(M=>M.configuration.projectId===t&&M.status==="enabled")??o.data.policies.find(M=>M.configuration.projectId===t);c(y),v(le(t,y,y?[]:g)),T(y?.status==="enabled"||!y),_(!0)},[o.data,t,g]);const r=()=>{S||(L?A(!0):i())},I=de(r);function O(y){const M=m.find(B=>B.id===y);M&&(c(M),v(le(t,M)),T(M.status==="enabled"),w(!1),H(null),A(!1),j(null))}function R(y){v(y),w(!0)}async function q(){if(!(!o.data||!u||S||o.isError)){C(!0),j(null);try{await rn(n,a,d,o.data,p,k),await o.refresh(),w(!1),i()}catch(y){j(y instanceof Error?y.message:"Unable to save continual learning.")}finally{C(!1)}}}const W={draft:d,options:o.data,loading:o.isPending,onChange:R};return e.jsx("div",{className:"git-dialog-backdrop provider-dialog-backdrop",onMouseDown:r,children:e.jsxs("section",{ref:I,className:"git-dialog provider-details-dialog agent-learning-dialog",role:"dialog","aria-modal":"true","aria-label":"Continual learning",onMouseDown:y=>y.stopPropagation(),children:[e.jsx("button",{type:"button",className:"git-dialog-close","aria-label":"Close continual learning",disabled:S,onClick:r,children:e.jsx(te,{size:16})}),e.jsx("div",{className:"provider-dialog-header",children:e.jsxs("div",{children:[e.jsx("h2",{children:"Continual learning"}),e.jsx("span",{children:s})]})}),f?e.jsxs("div",{className:"agent-learning-discard",role:"alert",children:[e.jsx("p",{children:"Discard unsaved policy changes?"}),e.jsxs("div",{className:"settings-button-row",children:[e.jsx("button",{type:"button",onClick:()=>{A(!1),H(null)},children:"Keep editing"}),e.jsx("button",{type:"button",onClick:()=>K?O(K):i(),children:"Discard changes"})]})]}):null,m.length>1?e.jsxs("label",{className:"agent-learning-policy-picker",children:["Learning policy",e.jsx("select",{disabled:S,value:p?.id??"",onChange:y=>{L?(H(y.target.value),A(!0)):O(y.target.value)},children:m.map(y=>e.jsxs("option",{value:y.id,children:[y.configuration.name," (",y.status,")"]},y.id))})]}):null,e.jsx("div",{className:"surface-tabs provider-agent-tabs",role:"tablist","aria-label":"Continual learning settings",children:[["sources","Sources & rubrics"],["preparation","Preparation"],["schedule","Run window & budget"]].map(([y,M])=>e.jsx("button",{type:"button",id:`learning-tab-${y}`,role:"tab","aria-selected":N===y,"aria-controls":`learning-panel-${y}`,tabIndex:N===y?0:-1,onClick:()=>x(y),onKeyDown:B=>{const Y=["sources","preparation","schedule"],V=Y.indexOf(y);if(["ArrowLeft","ArrowRight","Home","End"].includes(B.key)){B.preventDefault();const ee=Y[B.key==="Home"?0:B.key==="End"?2:(V+(B.key==="ArrowRight"?1:2))%3];x(ee),document.getElementById(`learning-tab-${ee}`)?.focus()}},children:M},y))}),e.jsxs("form",{className:"agent-learning-form",onSubmit:y=>{y.preventDefault(),q()},children:[e.jsx("fieldset",{disabled:!u||S,children:e.jsxs("label",{children:["Policy name",e.jsx("input",{required:!0,maxLength:200,value:d.name,onChange:y=>R({...d,name:y.target.value})})]})}),e.jsx("div",{id:`learning-panel-${N}`,role:"tabpanel","aria-labelledby":`learning-tab-${N}`,children:e.jsx("fieldset",{disabled:!u||S,children:N==="sources"?e.jsx(ln,{...W}):N==="preparation"?e.jsx(on,{...W}):e.jsx(cn,{...W})})}),o.isPending?e.jsx("p",{role:"status",children:"Fetching available sources, rubrics and models…"}):null,o.isError?e.jsxs("p",{role:"alert",children:[o.error.message," ",e.jsx("button",{type:"button",onClick:()=>{o.refetch()},children:"Retry settings"})]}):null,P?e.jsx("p",{role:"alert",children:P}):null,e.jsxs("label",{className:"agent-learning-check",children:[e.jsx("input",{type:"checkbox",checked:k,disabled:!u||S,onChange:y=>{T(y.target.checked),w(!0)}}),"Enable this policy after saving"]}),e.jsx("p",{children:"Saving enables only the reviewed sources, schedule and limits. No training is dispatched by opening this dialog."}),e.jsxs("div",{className:"settings-button-row agent-learning-footer",children:[e.jsx("button",{type:"button",disabled:S,onClick:r,children:"Cancel"}),e.jsx("button",{type:"submit",className:"primary",disabled:!u||!o.data||o.isError||S||!d.sourceKeys.length,children:S?"Saving…":k?"Save and enable":"Save paused"})]})]})]})})}function un({agent:n,inventory:a,connection:t,teamId:s,projectId:l,projectName:g,query:o,signedIn:i}){const[p,c]=h.useState(!1),[d,v]=h.useState(null),[u,_]=h.useState(!1),[L,w]=h.useState(null),[S,C]=h.useState(""),P=h.useMemo(()=>new Set(a?.collector.connections.filter(m=>m.source===n.id&&m.teamId===s&&m.projectId===l&&m.state!=="disconnected").map(m=>m.sourceInstanceId)??[]),[a,n.id,s,l]),j=o.data?.sources.filter(m=>m.projectId===l&&(n.id==="openpond_chat"?["native_chat","native_work"].includes(m.origin)&&m.sourceInstanceId===null:m.origin===n.id&&m.sourceInstanceId!==null&&P.has(m.sourceInstanceId)))??[],k=[...new Set(j.flatMap(m=>m.sourceInstanceId?[m.sourceInstanceId]:[]))],T=k.includes(S)?S:k[0],N=j.filter(m=>m.sourceInstanceId===null||m.sourceInstanceId===T).map(m=>({origin:m.origin,sourceInstanceId:m.sourceInstanceId,enabled:!0})),x=o.data?.policies.filter(m=>m.configuration.projectId===l)??[],f=x.filter(m=>m.status==="enabled"&&m.configuration.sources.some(r=>r.enabled&&N.some(I=>U(I)===U(r)))),A=f[0]??x.find(m=>m.status==="enabled")??x[0],K=!!(t&&s&&l&&i&&o.data?.projects.some(m=>m.id===l));async function H(m,r){if(!t||!s||!o.data)return;let I={...m.configuration,sources:m.configuration.sources.map(R=>N.some(q=>U(q)===U(R))?{...R,enabled:r}:R)};if(r)for(const R of N)I.sources.some(q=>U(q)===U(R))||I.sources.push(R);const O=o.data.servingTargets.find(R=>R.id===I.serving?.targetId);if(r&&I.mode==="activate"&&I.serving?.targetId&&(!O||!O.enabled||O.projectId!==l))throw new Error("Review the policy's serving target before adding a source.");if(r&&I.mode==="activate"&&(!I.serving?.targetId||O?.hostedPonder)){const R=await Q(t,s,"serving-targets",{action:"ensure_hosted_ponder",projectId:l,bindingId:o.data.ponderBindingId});I={...I,serving:{targetId:R.id,canarySeconds:I.serving?.canarySeconds??120,rollbackOnRuntimeFailure:!0}}}return Ce(t,s,m,I,I.sources.some(R=>R.enabled))}async function z(m){if(!u){_(!0),w(null);try{if(m){const r=x.find(I=>I.id===d);if(!r)throw new Error("Refresh the learning policy before joining.");await H(r,!0),v(null)}else for(const r of f)await H(r,!1);await o.refresh()}catch(r){w(r instanceof Error?r.message:"Unable to update this learning source."),await o.refresh()}finally{_(!1)}}}return e.jsxs("div",{className:"agent-learning-control",children:[k.length>1?e.jsxs("label",{children:["Learning connection",e.jsx("select",{"aria-label":`${n.name} learning connection`,value:T,disabled:u,onChange:m=>C(m.target.value),children:k.map(m=>e.jsx("option",{value:m,children:j.find(r=>r.sourceInstanceId===m)?.name??"Local connection"},m))})]}):null,e.jsxs("div",{className:"agent-learning-control-row",children:[e.jsxs("label",{className:"provider-toggle",children:[e.jsx("input",{type:"checkbox","aria-label":`${n.name} continual learning`,checked:f.length>0,disabled:!K||!N.length||o.isPending||o.isError||u,onChange:m=>{if(m.target.checked){const r=x.find(I=>I.status==="enabled");r?v(r.id):c(!0)}else z(!1)}}),e.jsx("span",{"aria-hidden":"true"})]}),e.jsx("button",{type:"button",className:"agent-learning-settings",disabled:!t||!s||!l||!i||u,onClick:()=>c(!0),children:"Continual learning"}),e.jsx("small",{children:o.isError?"Needs attention":o.isPending?"Loading…":f.length?"On schedule":x.length?"Paused":"Off"})]}),l?!N.length&&o.data?e.jsx("small",{children:"Sync this agent to the selected Project to use its local connection."}):null:e.jsx("small",{children:"Select a hosted Project for continual learning."}),L?e.jsx("small",{role:"alert",children:L}):null,p&&t&&s?e.jsx(dn,{connection:t,teamId:s,projectId:l,projectName:g,initialPolicy:A,bindings:N,query:o,onClose:()=>c(!1)},l):null,d?e.jsx(pn,{policies:x.filter(m=>m.status==="enabled"),policyId:d,agentName:n.name,busy:u,error:L,onChoose:v,onClose:()=>{u||v(null)},onJoin:()=>{z(!0)}}):null]})}function pn({policies:n,policyId:a,agentName:t,busy:s,error:l,onChoose:g,onClose:o,onJoin:i}){const p=de(o),c=n.find(d=>d.id===a);return e.jsx("div",{className:"git-dialog-backdrop provider-dialog-backdrop",onMouseDown:o,children:e.jsxs("section",{ref:p,className:"git-dialog agent-learning-join",role:"dialog","aria-modal":"true","aria-label":"Add learning source",onMouseDown:d=>d.stopPropagation(),children:[e.jsx("button",{type:"button",className:"git-dialog-close",disabled:s,"aria-label":"Cancel",onClick:o,children:e.jsx(te,{size:16})}),e.jsxs("h2",{children:["Add ",t," to ",c?.configuration.name??"continual learning","?"]}),e.jsx("p",{children:"This agent will contribute conversations to the existing model, schedule and spending limits. Collection settings stay unchanged."}),n.length>1?e.jsxs("label",{children:["Existing policy",e.jsx("select",{value:a,disabled:s,onChange:d=>g(d.target.value),children:n.map(d=>e.jsx("option",{value:d.id,children:d.configuration.name},d.id))})]}):null,l?e.jsx("p",{role:"alert",children:l}):null,e.jsxs("div",{className:"settings-button-row",children:[e.jsx("button",{type:"button",disabled:s,onClick:o,children:"Cancel"}),e.jsx("button",{type:"button",className:"primary",disabled:s||!c,onClick:i,children:s?"Adding…":"Add agent"})]})]})})}function hn({connection:n,payload:a,onPayload:t,onToast:s}){const{inventory:l,error:g,loading:o,refresh:i}=sn(n),[p,c]=h.useState(null),[d,v]=h.useState(null),[u,_]=h.useState(!1),[L,w]=h.useState(0),S=`openpond-agent-cards:${JSON.stringify(a?.account.activeProfile??null)}`,[C,P]=h.useState(()=>{try{const b=JSON.parse(localStorage.getItem(S)??"null");return Array.isArray(b)?b.filter(E=>typeof E=="string"&&ae.some($=>$.id===E)):["oh_my_pi"]}catch{return["oh_my_pi"]}});h.useEffect(()=>{try{localStorage.setItem(S,JSON.stringify(C))}catch{}},[S,C]);const[j,k]=h.useState(!1),T=h.useRef(null);h.useEffect(()=>{if(!j)return;const b=$=>{T.current?.contains($.target)||k(!1)},E=$=>{$.key==="Escape"&&(k(!1),T.current?.querySelector("button")?.focus())};return document.addEventListener("pointerdown",b),document.addEventListener("keydown",E),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("keydown",E)}},[j]);const N=h.useRef({payload:a,onPayload:t});N.current={payload:a,onPayload:t};const x=h.useRef(!0);h.useEffect(()=>(x.current=!0,()=>{x.current=!1}),[]);const f=a?.account??null,A=a?.preferences.defaultTeamId??f?.accounts.find(b=>b.isActive)?.apiKeyAccess?.teamId??null,K=h.useCallback(b=>v(b),[]),H=h.useCallback(b=>{const E=N.current;x.current&&E.payload&&E.onPayload({...E.payload,providers:b})},[]),z=h.useCallback((b,E)=>{const $=N.current;if(!x.current||!$.payload)return;const ie=$.payload.providers,he={...$.payload,providers:{...ie,statuses:{...ie.statuses,[b]:E.statuses[b]},modelCaches:{...ie.modelCaches,[b]:E.modelCaches[b]}}};N.current={...$,payload:he},$.onPayload(he)},[]);Ve(n,a?.providers,z,L);const m=h.useCallback(b=>{const E=N.current;E.payload&&E.onPayload({...E.payload,preferences:b.preferences})},[]),r=Be({connection:n,onError:K,onPayload:t,onPreferences:m,onProviders:H,preferences:Te(a?.preferences),providers:a?.providers}),I=nn(n,f,A),{projects:O,projectId:R,loading:q,error:W}=I,y=an(n,A,JSON.stringify([f?.activeProfile??null,f?.profile?.id??null]),f?.state==="signed_in"),M=f?.baseUrl??f?.activeProfile?.baseUrl,B=M&&A?`${M.replace(/\/$/u,"")}/console/connections?${new URLSearchParams({teamId:A,...R?{project:R}:{}})}`:null;async function Y(b){if(!(!n||u)){_(!0),v(null);try{await Z(n,"/v1/native-history/collector",{method:"POST",body:JSON.stringify({command:b})}),await i()}catch(E){const $=E instanceof Error?E.message:"Importer action failed.";v($),s?.($,"error")}finally{_(!1)}}}const V=p?.provider,ee=V?a?.providers.statuses[V]:null,pe=p?e.jsx(tn,{agent:p,inventory:l,connection:n,account:f,teamId:A,projects:O,projectId:R,onRefresh:i,learningUrl:B},p.id):null;return e.jsxs("section",{className:"connected-agents-view","aria-label":"Connected agents",children:[e.jsxs("div",{className:"agent-connections-heading",children:[e.jsxs("div",{children:[e.jsx("h2",{children:"Connected agents"}),e.jsx("p",{children:"Use your installed agents and sync conversations with OpenPond."})]}),e.jsxs("div",{className:"agent-connections-actions",children:[e.jsx("button",{type:"button",disabled:o||!n,"aria-label":"Refresh agent connections",onClick:()=>{i(),I.refresh(),w(b=>b+1)},children:e.jsx(Oe,{size:15})}),e.jsxs("div",{className:"agent-more",ref:T,children:[e.jsx("button",{type:"button","aria-expanded":j,onClick:()=>k(b=>!b),children:"More agents"}),j?e.jsxs("div",{className:"agent-more-menu",children:[ae.filter(b=>C.includes(b.id)).map(b=>e.jsxs("button",{type:"button",onClick:()=>{P(E=>E.filter($=>$!==b.id)),k(!1)},children:[e.jsx(Ue,{size:14}),e.jsx("span",{children:b.name})]},b.id)),C.length===0?e.jsx("span",{children:"All agents shown"}):null]}):null]})]})]}),e.jsxs("label",{className:"agent-project-scope",children:["Project",e.jsxs("select",{"aria-label":"Connections project",value:R,disabled:!O.length,onChange:b=>I.select(b.target.value),children:[e.jsx("option",{value:"",children:q&&!O.length?"Fetching projects…":"Select project"}),O.map(b=>e.jsx("option",{value:b.id,children:b.content.name},b.id))]})]}),W?e.jsx("p",{role:"alert",children:W}):null,g?e.jsx("p",{role:"alert",children:g}):null,d?e.jsx("p",{role:"alert",children:d}):null,e.jsx("div",{className:"agent-connections-grid",children:ae.filter(b=>!C.includes(b.id)).map(b=>e.jsx(We,{agent:b,account:f,native:b.provider?a?.providers.statuses[b.provider]:null,inventory:l,projects:O,teamId:A,learningControl:e.jsx(un,{agent:b,inventory:l,connection:n,teamId:A,projectId:R,projectName:O.find(E=>E.id===R)?.content.name??"Selected Project",query:y,signedIn:f?.state==="signed_in"}),connected:!!n,onHide:()=>P(E=>[...E,b.id]),onManage:()=>c(b)},`${JSON.stringify([f?.activeProfile,f?.profile?.id])}:${A}:${R}:${b.id}`))}),l?e.jsxs("div",{className:"agent-importer-footer",children:[e.jsx("span",{children:l.collector.desiredState==="stopped"?"Importer stopped":l.collector.running?"Importer running":"Importer offline"}),e.jsx("button",{type:"button",disabled:u||!l.collector.running,onClick:()=>{Y("sync")},children:"Sync now"}),e.jsxs("button",{type:"button",disabled:u,onClick:()=>{Y(l.collector.running?"stop":"start")},children:[l.collector.running?"Stop":"Start"," importer"]}),e.jsxs("details",{children:[e.jsx("summary",{children:"CLI state"}),e.jsx("code",{children:l.statusCommand})]})]}):null,p&&V&&ee&&a?e.jsx(Je,{checkNativeProvider:r.checkNativeProvider,connection:n,account:f,codex:a.codex,providerId:V,providerBusy:r.providerBusy,settings:a.providers,status:ee,onClose:()=>c(null),onDeleteCredential:r.deleteProviderCredential,onRefreshModels:r.refreshProviderModels,onSaveConfig:r.saveProviderConfig,onSaveCredential:r.saveProviderCredential,onStartOpenAiSubscriptionAuth:r.startOpenAiSubscriptionAuth,onValidate:r.validateProvider,conversationPanel:pe}):p?e.jsx(mn,{agent:p,onClose:()=>c(null),children:pe}):null]})}function mn({agent:n,onClose:a,children:t}){const s=de(a);return e.jsx("div",{className:"git-dialog-backdrop provider-dialog-backdrop",onMouseDown:a,children:e.jsxs("section",{ref:s,className:"git-dialog provider-details-dialog agent-setup-dialog",role:"dialog","aria-modal":"true","aria-label":`${n.name} connection`,onMouseDown:l=>l.stopPropagation(),children:[e.jsx("button",{type:"button",className:"git-dialog-close","aria-label":"Close",onClick:a,children:e.jsx(te,{size:16})}),e.jsx("div",{className:"provider-dialog-header",children:e.jsxs("div",{children:[e.jsx("h2",{children:n.name}),e.jsx("span",{children:"Conversation syncing"})]})}),t]})})}const gn=["For agents","Featured","Productivity","Developer tools"],xn=new Set(["slack","google","github","mcp"]);function Un({account:n,connection:a,defaultTeamId:t,onToast:s,payload:l,onPayload:g}){const[o,i]=h.useState("agents"),p=h.useId(),[c,d]=h.useState(null),[v,u]=h.useState(""),[_,L]=h.useState("For agents"),[w,S]=h.useState(()=>re()),[C,P]=h.useState(null),j=n?.baseUrl??n?.activeProfile?.baseUrl??null,k=vn(t,C),T=h.useMemo(()=>w.filter(x=>fn(x,_)).filter(x=>yn(x,v)),[_,v,w]);h.useEffect(()=>{let x=!0;return!a||o!=="apps"?(S(re()),P(null),()=>{x=!1}):(Fe.connectedAppStatus(a,{status:"all"}).then(f=>{x&&(S(f.apps),P(f.teamId?.trim()||null))}).catch(f=>{x&&(console.warn("Unable to load connected app status.",f),S(re()),P(null))}),()=>{x=!1})},[a,o]);function N(x){const f=He({appId:x.id,baseUrl:j,teamId:k});kn(f).catch(A=>{s?.(A instanceof Error?A.message:String(A),"error")})}return e.jsxs("div",{className:"apps-workspace-view",children:[e.jsx("div",{className:"apps-page-tabs",role:"tablist","aria-label":"Apps pages",onKeyDown:x=>{if(!["ArrowLeft","ArrowRight","Home","End"].includes(x.key))return;x.preventDefault();const f=x.key==="Home"?"agents":x.key==="End"||o==="agents"?"apps":"agents";i(f),x.currentTarget.querySelector(`#${CSS.escape(`${p}-${f}`)}`)?.focus()},children:[{value:"agents",label:"Connections"},{value:"apps",label:"Apps"}].map(x=>e.jsx("button",{type:"button",role:"tab",id:`${p}-${x.value}`,"aria-controls":`${p}-${x.value}-panel`,tabIndex:o===x.value?0:-1,"aria-selected":o===x.value,onClick:()=>i(x.value),children:x.label},x.value))}),e.jsx("div",{role:"tabpanel",id:`${p}-${o}-panel`,"aria-labelledby":`${p}-${o}`,children:o==="agents"?e.jsx(hn,{connection:a,payload:l,onPayload:g,onToast:s},JSON.stringify([n?.activeProfile,t])):e.jsxs("section",{className:"connected-apps-view","aria-label":"Apps",children:[e.jsxs("div",{className:"connected-apps-header",children:[e.jsxs("div",{children:[e.jsx("h1",{children:"Apps"}),e.jsx("p",{children:"Connect apps that agents can use for chat, knowledge, files, and workflow actions."})]}),e.jsxs("label",{className:"connected-apps-search",children:[e.jsx($e,{size:15}),e.jsx("input",{"aria-label":"Search apps",onChange:x=>u(x.target.value),placeholder:"Search apps",type:"search",value:v})]})]}),e.jsxs("section",{className:"connected-apps-hero","aria-label":"App context",children:[e.jsxs("div",{className:"connected-apps-hero-copy",children:[e.jsx("span",{className:"connected-apps-hero-icon",children:e.jsx(ue,{appId:"github"})}),e.jsx("h2",{children:"Work with your apps"}),e.jsx("p",{children:"Bring repositories, documents, chat, calendars, and custom MCP tools into OpenPond."})]}),e.jsxs("div",{className:"connected-apps-context-card","aria-hidden":"true",children:[e.jsx("strong",{children:"Agent context"}),e.jsxs("div",{children:[e.jsx("span",{className:"files",children:"Files"}),e.jsx("span",{className:"chat",children:"Chat"}),e.jsx("span",{className:"oauth",children:"OAuth"}),e.jsx("span",{className:"mcp",children:"MCP"})]})]})]}),e.jsx("div",{className:"connected-apps-filters",role:"tablist","aria-label":"App categories",children:gn.map(x=>e.jsx("button",{"aria-selected":_===x,className:_===x?"active":"",onClick:()=>L(x),role:"tab",type:"button",children:x},x))}),e.jsxs("div",{className:"connected-apps-list",children:[T.map(x=>e.jsx(jn,{app:x,onSelect:()=>d(x)},x.id)),T.length===0?e.jsx("div",{className:"connected-apps-empty",children:"No apps match the current search."}):null]}),c?e.jsx(bn,{app:c,onClose:()=>d(null),onInstall:()=>N(c)}):null]})})]})}function vn(n,a){const t=n?.trim();return t||a?.trim()||null}function jn({app:n,onSelect:a}){return e.jsxs("button",{className:"connected-app-row",onClick:a,type:"button",children:[e.jsxs("span",{className:"connected-app-row-main",children:[e.jsx(ue,{appId:n.id}),e.jsxs("span",{className:"connected-app-copy",children:[e.jsxs("span",{className:"connected-app-title",children:[e.jsx("strong",{children:n.label}),e.jsxs("span",{children:[n.shortLabel!==n.label?n.shortLabel:n.category," / ",n.setupSurfaceLabel]})]}),e.jsx("span",{children:n.description}),e.jsxs("span",{className:"connected-app-capability-row",children:[n.capabilityLabels.slice(0,2).map(t=>e.jsx("span",{children:t},t)),n.capabilityLabels.length>2?e.jsxs("span",{children:["+",n.capabilityLabels.length-2]}):null]})]})]}),e.jsx("span",{className:`connected-app-status-pill ${n.status}`,children:n.statusLabel}),e.jsx(Me,{size:16})]})}function bn({app:n,onClose:a,onInstall:t}){const s=n.connections.filter(l=>l.status==="active");return e.jsx("div",{className:"connected-app-dialog-backdrop",role:"presentation",onMouseDown:l=>{l.target===l.currentTarget&&a()},children:e.jsxs("section",{className:"connected-app-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"connected-app-dialog-title",children:[e.jsx("button",{className:"connected-app-dialog-close",type:"button","aria-label":"Close app details",onClick:a,children:e.jsx(te,{size:17})}),e.jsxs("div",{className:"connected-app-dialog-identity",children:[e.jsx("span",{className:"openpond-mark",children:e.jsx("img",{alt:"",src:je})}),e.jsxs("span",{className:"connection-dots","aria-hidden":"true",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}),e.jsx(ue,{appId:n.id})]}),e.jsxs("h2",{id:"connected-app-dialog-title",children:["Connect ",n.label]}),e.jsxs("div",{className:"connected-app-approval",children:[e.jsx(De,{size:16}),e.jsx("span",{children:n.statusLabel})]}),e.jsxs("div",{className:"connected-app-dialog-body",children:[e.jsxs("section",{children:[e.jsx("h3",{children:n.setupSurfaceLabel}),e.jsx("p",{children:"The web flow shows the provider account, workspace, and requested access before anything is connected."})]}),e.jsxs("section",{children:[e.jsx("h3",{children:"Connected account"}),e.jsx("p",{children:wn(s)})]}),e.jsxs("section",{children:[e.jsx("h3",{children:"Available capabilities"}),e.jsx("div",{className:"connected-app-dialog-capabilities",children:n.capabilities.map(l=>e.jsx("span",{children:l.label},l.id))})]}),e.jsxs("section",{children:[e.jsx("h3",{children:"Sandbox lease policy"}),e.jsx("p",{children:n.leasePolicy.leaseable?`Leaseable for ${n.leasePolicy.defaultTtlSeconds??0} seconds with scoped proxy access.`:"Managed as setup or tool discovery; no OAuth lease is required."})]})]}),e.jsxs("button",{className:"connected-app-dialog-primary",type:"button",onClick:t,children:[e.jsx("span",{children:n.installLabel}),e.jsx(ze,{size:15})]})]})})}function ue({appId:n}){return e.jsx("span",{className:`connected-app-icon app-${n}`,children:e.jsx("img",{alt:"",src:Sn(n)})})}function fn(n,a){return a==="For agents"?!0:a==="Featured"?xn.has(n.id):a==="Productivity"?n.category==="Productivity"||n.category==="Chat":n.category==="Developer tools"||n.id==="mcp"}function yn(n,a){const t=a.trim().toLowerCase();return t?[n.id,n.label,n.shortLabel,n.category,n.description,n.providerFamily,n.setupSurface].some(s=>s.toLowerCase().includes(t)):!0}function Sn(n){return Ke(n)}async function kn(n){const a=window.openpond?.browser;if(a){const t=await a.openExternal({conversationId:"connected-apps",url:n});if(!t.ok)throw new Error(t.error??"Unable to open app setup.");return}window.open(n,"_blank","noopener,noreferrer")}function wn(n){return n.length===0?"No active OAuth connection for this setup surface.":n.map(a=>{const t=a.accountLabel??"Connected account";return a.workspaceLabel?`${t} / ${a.workspaceLabel}`:t}).join(", ")}export{Un as AppsView,jn as ConnectedAppRow,vn as connectedAppSetupTeamId};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as c,j as a}from"./index-DOMrqhcz.js";import{fu as v,aw as f,X as k,P as j,h as B,an as C,aB as g,bU as y}from"./App-BI-uOpnP.js";import{a as N}from"./MarkdownText-DJI5LwT0.js";import{S as T}from"./square-CI1qNtvE.js";const x=[];function P(r){const e=window.openpond?.browser,[b,l]=c.useState(()=>({conversationId:r,activeTabId:null,tabs:x}));c.useEffect(()=>{if(l({conversationId:r,activeTabId:null,tabs:x}),!e)return;let s=!1;e.getState({conversationId:r}).then(o=>{s||l(o)});const i=e.onState(o=>{o.conversationId===r&&l(o)});return()=>{s=!0,i()}},[e,r]);const u=c.useMemo(()=>b.tabs.find(s=>s.id===b.activeTabId)??null,[b.activeTabId,b.tabs]),t=c.useCallback(async(s,i={})=>{if(!e)return!1;const o=v(s,{explicitFile:i.explicitFile});return o?(i.newTab?await e.newTab({conversationId:r,url:o,explicitFile:i.explicitFile}):await e.open({conversationId:r,url:o,explicitFile:i.explicitFile}),!0):!1},[e,r]),n=u?{conversationId:r,tabId:u.id}:null;return{activeTab:u,available:!!e,bridge:e,state:b,back:()=>e&&n?e.back(n):Promise.resolve({ok:!1}),clearData:()=>e?e.clearData({conversationId:r}):Promise.resolve({ok:!1}),closeTab:s=>e?e.closeTab({conversationId:r,tabId:s}):Promise.resolve({ok:!1}),forward:()=>e&&n?e.forward(n):Promise.resolve({ok:!1}),newTab:s=>e?e.newTab({conversationId:r,url:s}):Promise.resolve({ok:!1}),open:t,openExternal:()=>e&&n?e.openExternal(n):Promise.resolve({ok:!1}),reload:()=>e&&n?e.reload(n):Promise.resolve({ok:!1}),snapshot:(s={})=>e?e.snapshot({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),moveCursor:s=>e?e.moveCursor({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),click:s=>e?e.click({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),typeText:s=>e?e.typeText({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),key:s=>e?e.key({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),scroll:s=>e?e.scroll({conversationId:r,...s}):Promise.resolve({ok:!1,output:"Desktop browser bridge unavailable."}),selectTab:s=>e?e.selectTab({conversationId:r,tabId:s}):Promise.resolve({ok:!1}),setBounds:s=>e?e.setBounds({conversationId:r,bounds:s}):Promise.resolve({ok:!1}),stop:()=>e&&n?e.stop(n):Promise.resolve({ok:!1})}}function E({activeTabId:r,tabs:e,onCloseTab:b,onNewTab:l,onSelectTab:u}){return a.jsxs("div",{className:"browser-tabs",role:"tablist","aria-label":"Browser tabs",children:[e.map(t=>a.jsxs("div",{className:`browser-tab ${t.id===r?"active":""}`,children:[a.jsx("span",{className:"browser-tab-favicon","aria-hidden":"true",children:t.faviconUrl?a.jsx("img",{alt:"",referrerPolicy:"no-referrer",src:t.faviconUrl}):a.jsx(f,{size:13})}),a.jsx("button",{type:"button",className:"browser-tab-main",role:"tab","aria-selected":t.id===r,title:t.url,onClick:()=>u(t.id),children:R(t)}),a.jsx("button",{type:"button",className:"browser-tab-close",title:"Close tab","aria-label":"Close tab",onClick:()=>b(t.id),children:a.jsx(k,{size:12})})]},t.id)),a.jsx("button",{type:"button",className:"browser-tab-add",title:"New tab","aria-label":"New tab",onClick:l,children:a.jsx(j,{size:14})})]})}function R(r){if(r.title?.trim())return r.title.trim();try{return new URL(r.url).host||r.url}catch{return r.url||"New tab"}}function z({activeTab:r,available:e,onBack:b,onClearData:l,onForward:u,onNavigate:t,onOpenExternal:n,onReload:s,onStop:i}){const[o,d]=c.useState(""),[p,m]=c.useState(!1);c.useEffect(()=>{d(r?.url??"")},[r?.url]);function h(w){w.preventDefault(),t(o)}return a.jsxs("div",{className:"browser-toolbar",children:[a.jsxs("div",{className:"browser-nav-actions",children:[a.jsx("button",{type:"button",title:"Back","aria-label":"Back",disabled:!r?.canGoBack,onClick:b,children:a.jsx(B,{size:15})}),a.jsx("button",{type:"button",title:"Forward","aria-label":"Forward",disabled:!r?.canGoForward,onClick:u,children:a.jsx(N,{size:15})}),a.jsx("button",{type:"button",title:r?.loading?"Stop":"Reload","aria-label":r?.loading?"Stop":"Reload",disabled:!r,onClick:r?.loading?i:s,children:r?.loading?a.jsx(T,{size:13}):a.jsx(C,{size:14})})]}),a.jsx("form",{className:"browser-address-form",onSubmit:h,children:a.jsx("input",{"aria-label":"Browser address",disabled:!e,placeholder:e?"Search or enter address":"Desktop browser unavailable",spellCheck:!1,value:o,onChange:w=>d(w.target.value)})}),a.jsxs("div",{className:"browser-panel-actions",children:[a.jsx("button",{type:"button",title:"Open external","aria-label":"Open external",disabled:!r,onClick:n,children:a.jsx(g,{size:14})}),a.jsxs("div",{className:"browser-menu-anchor",children:[a.jsx("button",{type:"button",title:"Browser actions","aria-label":"Browser actions",onClick:()=>m(w=>!w),children:a.jsx(y,{size:15})}),p&&a.jsx("div",{className:"browser-options-menu",role:"menu",children:a.jsx("button",{type:"button",role:"menuitem",onClick:()=>{m(!1),l()},children:"Clear Browser Data..."})})]})]})]})}function D({active:r,onBounds:e}){const b=c.useRef(null),l=c.useRef(null),u=c.useRef(null),t=c.useCallback(i=>{const o=i?`${i.x}:${i.y}:${i.width}:${i.height}`:"null";l.current!==o&&(l.current=o,e(i))},[e]),n=c.useCallback(()=>{const i=b.current;if(!r||!i){t(null);return}const o=i.getBoundingClientRect(),d=Math.max(0,Math.round(o.width)),p=Math.max(0,Math.round(o.height));if(d===0||p===0){t(null);return}t({x:Math.round(o.left),y:Math.round(o.top),width:d,height:p})},[r,t]),s=c.useCallback(()=>{u.current===null&&(u.current=window.requestAnimationFrame(()=>{u.current=null,n()}))},[n]);return c.useLayoutEffect(()=>{l.current=null,n();const i=b.current;if(!r||!i)return t(null),()=>t(null);const o=new ResizeObserver(s);return o.observe(i),window.addEventListener("resize",s),window.addEventListener("scroll",s,!0),()=>{u.current!==null&&(window.cancelAnimationFrame(u.current),u.current=null),o.disconnect(),window.removeEventListener("resize",s),window.removeEventListener("scroll",s,!0),t(null)}},[r,t,n,s]),a.jsx("div",{className:"browser-viewport",ref:b})}function U({conversationId:r,expanded:e,onResizeStart:b}){const l=P(r),u=c.useCallback(s=>{window.openpond?.browser?.setBounds({conversationId:r,bounds:s})},[r]),t=c.useCallback(s=>{l.open(s,{explicitFile:!0})},[l]),n=c.useCallback(()=>{window.confirm("Clear browser data for this conversation? Tabs, cookies, cache, and local storage for this conversation will be removed.")&&l.clearData()},[l]);return a.jsxs("aside",{className:`workspace-diff-panel browser-sidebar-panel ${e?"expanded":""}`,"aria-label":"Browser",children:[!e&&a.jsx("div",{className:"workspace-diff-resize-handle",role:"separator","aria-orientation":"vertical","aria-label":"Resize browser panel",onPointerDown:b}),a.jsx(E,{activeTabId:l.state.activeTabId,tabs:l.state.tabs,onCloseTab:s=>{l.closeTab(s)},onNewTab:()=>{l.newTab()},onSelectTab:s=>{l.selectTab(s)}}),a.jsx(z,{activeTab:l.activeTab,available:l.available,onBack:()=>{l.back()},onClearData:n,onForward:()=>{l.forward()},onNavigate:t,onOpenExternal:()=>{l.openExternal()},onReload:()=>{l.reload()},onStop:()=>{l.stop()}}),a.jsxs("div",{className:"browser-content",children:[l.available?l.state.tabs.length===0?a.jsxs("div",{className:"browser-empty-state",children:[a.jsx(f,{size:18}),a.jsx("span",{children:"Enter a URL to open a browser tab for this conversation."})]}):null:a.jsxs("div",{className:"browser-empty-state",children:[a.jsx(f,{size:18}),a.jsx("span",{children:"Desktop browser bridge unavailable."})]}),a.jsx(D,{active:l.available&&l.state.tabs.length>0,onBounds:u})]})]})}export{U as BrowserSidebar};
|