openpond 0.2.44 → 0.2.46
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/RELEASE.md +16 -13
- package/dist/app-server.d.ts +20954 -11829
- package/dist/app-server.js +1 -1
- package/dist/chunks/actions-command-I3NI75P2.js +2 -0
- package/dist/chunks/{app-layer-7SPLENWD.js → app-layer-B3SMVO4B.js} +1 -1
- package/dist/chunks/app-server-runtime-FL2CHQU2.js +2 -0
- package/dist/chunks/apps-OA2VX34V.js +2 -0
- package/dist/chunks/{chunk-PEYA2Q7Q.js → chunk-33AO3P6X.js} +3 -3
- package/dist/chunks/chunk-4UTIEH5H.js +16 -0
- package/dist/chunks/chunk-4VKNBADF.js +2 -0
- package/dist/chunks/{chunk-ANVOHBUV.js → chunk-5OGRWWEH.js} +1 -1
- package/dist/chunks/chunk-5ZZM3TUN.js +24 -0
- package/dist/chunks/chunk-6JBWHR6T.js +5 -0
- package/dist/chunks/{chunk-DXAZUJPA.js → chunk-6SJZXZNA.js} +1 -1
- package/dist/chunks/chunk-6WLJWRMF.js +2 -0
- package/dist/chunks/chunk-BKMGBIBT.js +2 -0
- package/dist/chunks/chunk-BQNK2NMB.js +21 -0
- package/dist/chunks/chunk-BUFQKDAW.js +2 -0
- package/dist/chunks/chunk-D6E7JBBQ.js +19 -0
- package/dist/chunks/chunk-D6MQTNJ3.js +9 -0
- package/dist/chunks/chunk-DNXKIIV7.js +3 -0
- package/dist/chunks/{chunk-OI2N2636.js → chunk-EWS7MXTM.js} +1 -1
- package/dist/chunks/chunk-F2AG46CV.js +2 -0
- package/dist/chunks/{chunk-CR6CDOKS.js → chunk-F5DUN73H.js} +2 -2
- package/dist/chunks/chunk-FKCWOASO.js +49 -0
- package/dist/chunks/chunk-FOEUDMME.js +2678 -0
- package/dist/chunks/chunk-H6W55CQG.js +2 -0
- package/dist/chunks/chunk-HK3WGUKK.js +17 -0
- package/dist/chunks/{chunk-ZEVARU6J.js → chunk-HO5L2FUU.js} +1 -1
- package/dist/chunks/chunk-HP2D3W2B.js +42 -0
- package/dist/chunks/chunk-ICZEOMPO.js +2 -0
- package/dist/chunks/{chunk-X2B4MN6W.js → chunk-IV7F74JJ.js} +1 -1
- package/dist/chunks/chunk-JBHAU7PH.js +2409 -0
- package/dist/chunks/chunk-JO7GRBOG.js +2 -0
- package/dist/chunks/{chunk-KPDWQCF6.js → chunk-KE5RH6JA.js} +1 -1
- package/dist/chunks/chunk-KUKOZJIR.js +2 -0
- package/dist/chunks/chunk-L4BYPZ4U.js +22 -0
- package/dist/chunks/{chunk-2CXJK2M3.js → chunk-LL4QP2IM.js} +1 -1
- package/dist/chunks/{chunk-Z2BYC6TP.js → chunk-LZSY5IM3.js} +1 -1
- package/dist/chunks/chunk-M7PBDRKC.js +2 -0
- package/dist/chunks/{chunk-OJVIH7J6.js → chunk-MCRA6ZGJ.js} +1 -1
- package/dist/chunks/chunk-NPOHW5OU.js +2 -0
- package/dist/chunks/{chunk-KIGN4FI6.js → chunk-OGXSE57Z.js} +1 -1
- package/dist/chunks/{chunk-HZP5U2AA.js → chunk-P653BXMY.js} +1 -1
- package/dist/chunks/{chunk-YF6IDYTS.js → chunk-PGKEDR3S.js} +1 -1
- package/dist/chunks/chunk-PMZH2TKS.js +4 -0
- package/dist/chunks/chunk-TYWBEJOA.js +3 -0
- package/dist/chunks/chunk-USWZ3KUC.js +2 -0
- package/dist/chunks/chunk-UWO34HP6.js +33 -0
- package/dist/chunks/{chunk-Z6ZR5O3J.js → chunk-VW7D3DRM.js} +2 -2
- package/dist/chunks/chunk-W4IL6TWB.js +186 -0
- package/dist/chunks/chunk-WVNN3RB2.js +2 -0
- package/dist/chunks/{chunk-RAWEO7SJ.js → chunk-WWABOVRW.js} +2 -2
- package/dist/chunks/{chunk-B3O2GAQH.js → chunk-XLDW5NN3.js} +1 -1
- package/dist/chunks/chunk-YSYXIJ46.js +8 -0
- package/dist/chunks/{chunk-V62BHD5G.js → chunk-ZC57DX6D.js} +1 -1
- package/dist/chunks/{chunk-W5NQ2DI7.js → chunk-ZJY2L43W.js} +3 -3
- package/dist/chunks/cli-5QR7QNQJ.js +2 -0
- package/dist/chunks/{configuration-command-LDPUCHVH.js → configuration-command-MVZS625X.js} +1 -1
- package/dist/chunks/connected-evidence-7LHUZ2UI.js +2 -0
- package/dist/chunks/{continual-MHMPLLUZ.js → continual-K5JNHNQH.js} +3 -3
- package/dist/chunks/core-commands-J2SJM5I5.js +2 -0
- package/dist/chunks/datasets-KDN2EXHE.js +2 -0
- package/dist/chunks/desktop-test-WIOEKMPR.js +3 -0
- package/dist/chunks/dist-3MTJ7VM6.js +2 -0
- package/dist/chunks/{dist-ELWB75PL.js → dist-JBE7DPFZ.js} +1 -1
- package/dist/chunks/evaluation-coordination-NGYHL7HG.js +2 -0
- package/dist/chunks/experiment-improvements-2M7GRGWS.js +2 -0
- package/dist/chunks/experiments-B6CRZ3GI.js +2 -0
- package/dist/chunks/{extension-JEUZZJ5X.js → extension-RZTMK3ON.js} +1 -1
- package/dist/chunks/{help-4F4QGL4C.js → help-EISFHH2F.js} +1 -1
- package/dist/chunks/hosted-experiment-improvement-6CHH65DX.js +3 -0
- package/dist/chunks/hosted-harness-runtime-PAYMAXH7.js +2 -0
- package/dist/chunks/hosted-profile-candidate-HYEISIAC.js +3 -0
- package/dist/chunks/hosted-profile-compiler-KQREWJA5.js +2 -0
- package/dist/chunks/hosted-profile-evaluation-control-LV6YXOG7.js +2 -0
- package/dist/chunks/hosted-profile-evaluation-inspection-A62UYFEP.js +3 -0
- package/dist/chunks/hosted-profile-evaluation-preparation-OR4OLYEX.js +3 -0
- package/dist/chunks/human-review-J6JGNRBR.js +2 -0
- package/dist/chunks/import-YHSX6SBZ.js +4 -0
- package/dist/chunks/learning-REL6GGNA.js +2 -0
- package/dist/chunks/opchat-CUZUU2WM.js +3 -0
- package/dist/chunks/organizations-VT27V4B2.js +2 -0
- package/dist/chunks/{profile-ESULTWDN.js → profile-N2E5ASHQ.js} +1 -1
- package/dist/chunks/project-agent-XMXOBJSC.js +2 -0
- package/dist/chunks/sandbox-command-NC665ZZ5.js +2 -0
- package/dist/chunks/{sandbox-template-7WHGNVM6.js → sandbox-template-OTP6S3RU.js} +1 -1
- package/dist/chunks/src-TNWF3IC5.js +329 -0
- package/dist/chunks/{src-A3OVZOSV.js → src-WM35IF4W.js} +5 -5
- package/dist/chunks/taskset-COAPMTT3.js +2 -0
- package/dist/chunks/{teams-bot-YMCDLBGT.js → teams-bot-ACWJ7PJP.js} +1 -1
- package/dist/chunks/training-4JUK7YQV.js +2 -0
- package/dist/chunks/{workspaces-ZZ7R5BUL.js → workspaces-WTPFRJMS.js} +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/web/assets/App-CdDQ-lXE.css +1 -0
- package/dist/web/assets/App-D2f8_mGk.js +235 -0
- package/dist/web/assets/{AppDialog-CV3ddujB.js → AppDialog-CaxeNfsu.js} +1 -1
- package/dist/web/assets/{AppTerminalPanel-dhbGOO_K.js → AppTerminalPanel-dtK0ZPer.js} +2 -2
- package/dist/web/assets/{AppsView-Bxa-9BF2.js → AppsView-DwK1UBJP.js} +1 -1
- package/dist/web/assets/BrowserSidebar-Cj9VnkgU.js +1 -0
- package/dist/web/assets/{CartesianChart-BOxN-Su1.js → CartesianChart-Drfk6jTn.js} +1 -1
- package/dist/web/assets/{CollaborationTabs-DTmJvNJx.js → CollaborationTabs-Czh2noeb.js} +1 -1
- package/dist/web/assets/{CommandMenu-DggN2ygj.js → CommandMenu-D-M-xomh.js} +1 -1
- package/dist/web/assets/CommunityView-BrdxUI5Z.js +1 -0
- package/dist/web/assets/ComposerCreateImproveStrip-CJ8nkYJf.js +1 -0
- package/dist/web/assets/GetStartedView-u7Jw7YA1.js +1 -0
- package/dist/web/assets/HostedModelLearningReview-D0a2nwse.js +1 -0
- package/dist/web/assets/HostedModelLearningSettings-CQQGyjxi.js +1 -0
- package/dist/web/assets/LabModelVersionDetailPage-Cxlc4sSC.js +1 -0
- package/dist/web/assets/LabSkillSidebar-BnJkDb0c.js +1 -0
- package/dist/web/assets/LabsRoute-ACN76d2j.css +1 -0
- package/dist/web/assets/LabsRoute-hHwZNbqN.js +99 -0
- package/dist/web/assets/MainChatThread-r_TYiTnW.js +2 -0
- package/dist/web/assets/MainPane-DJcd4tPk.js +19 -0
- package/dist/web/assets/MainPane-DOWsSew1.css +1 -0
- package/dist/web/assets/{MarkdownText-BhzHRq1J.js → MarkdownText-BxPHz4je.js} +1 -1
- package/dist/web/assets/{NativeSkillSidebar-LU-PhEhW.js → NativeSkillSidebar-CCHK6kMG.js} +1 -1
- package/dist/web/assets/{NewExperienceSwitcher-Bi_gpHLG.js → NewExperienceSwitcher-CuKWTDZj.js} +1 -1
- package/dist/web/assets/{NewProjectDialog-B8pWvSkq.js → NewProjectDialog-CS6sw2oD.js} +1 -1
- package/dist/web/assets/OutputsPage-JDM5bfLJ.js +1 -0
- package/dist/web/assets/{ProjectsPage-Ca8_iEWu.js → ProjectsPage-B3zTBHOA.js} +1 -1
- package/dist/web/assets/RightChatPanelStack-L8S3yj1u.js +1 -0
- package/dist/web/assets/{RightSidebarHomePanel-6pygznxX.js → RightSidebarHomePanel-BWJQKFUp.js} +1 -1
- package/dist/web/assets/ScheduledWorkPage-qX12p4B0.js +1 -0
- package/dist/web/assets/SettingsView-0KMs-r2I.js +9 -0
- package/dist/web/assets/SettingsView-CVsuQeCZ.css +1 -0
- package/dist/web/assets/{TeamChatView-BGLCPTen.js → TeamChatView-DakXCNQE.js} +1 -1
- package/dist/web/assets/{TerminalOverlay-DHkS2cVJ.js → TerminalOverlay-DaonK5C0.js} +12 -12
- package/dist/web/assets/{TrainingCreationPanel-Dneamjzh.js → TrainingCreationPanel-CUvSsSwp.js} +1 -1
- package/dist/web/assets/{TrainingDraftPanel-Cfh59jLZ.js → TrainingDraftPanel-DNivtVwd.js} +1 -1
- package/dist/web/assets/{UsageSettingsSection-C9l1KY-O.js → UsageSettingsSection-rbmuoPoE.js} +1 -1
- package/dist/web/assets/WorkSidebarPanel-DrYt9xzv.js +1 -0
- package/dist/web/assets/WorkspaceDiffPanel-CThoTqe4.js +14 -0
- package/dist/web/assets/WorkspaceEnvironmentMenu-DeODKxvW.js +32 -0
- package/dist/web/assets/{WorkspaceGitDialogs-mE3Og6Zo.js → WorkspaceGitDialogs-CBarJYF-.js} +1 -1
- package/dist/web/assets/{WorkspaceMonacoEditor-DPZ0n0G9.js → WorkspaceMonacoEditor-Hmu5m_sO.js} +3 -3
- package/dist/web/assets/{arrow-up-right-DU2KsZD-.js → arrow-up-right-BV2IHfb9.js} +1 -1
- package/dist/web/assets/chunk-YTGRET2L-PKzEfYnf.js +1 -0
- package/dist/web/assets/{clipboard-g2b4_k81.js → clipboard-DDIvAWKp.js} +1 -1
- package/dist/web/assets/{cloud-upload-P2bDOPsQ.js → cloud-upload-Dv6kFnfC.js} +1 -1
- package/dist/web/assets/{cssMode-CPbPVAUt.js → cssMode-BK0jFqWW.js} +1 -1
- package/dist/web/assets/{folder-open-BmsONNsr.js → folder-open-B9ixJQJX.js} +1 -1
- package/dist/web/assets/{folder-plus-B18NgUxy.js → folder-plus-DqSKvtNB.js} +1 -1
- package/dist/web/assets/{git-commit-horizontal-enxGCV_e.js → git-commit-horizontal-C1lQvfxe.js} +1 -1
- package/dist/web/assets/{htmlMode-DiV88uQv.js → htmlMode-CCV301b6.js} +1 -1
- package/dist/web/assets/index-1cMIFBxZ.css +1 -0
- package/dist/web/assets/{index-vfpCN9zy.js → index-DIaKfM8a.js} +2 -2
- package/dist/web/assets/{info-DmuSBIYe.js → info-BEvaynAD.js} +1 -1
- package/dist/web/assets/{jsonMode-BaeOjuKU.js → jsonMode-Co4pyN4F.js} +1 -1
- package/dist/web/assets/{lspLanguageFeatures-D8To0CQA.js → lspLanguageFeatures-CSU0G5da.js} +1 -1
- package/dist/web/assets/{minimize-2-C2xnEzCe.js → minimize-2-DT8t8wwP.js} +1 -1
- package/dist/web/assets/{monaco.contribution-JW3MxX6k.js → monaco.contribution-CBwGIQY1.js} +2 -2
- package/dist/web/assets/{monaco.contribution-DgTFvG2Q.js → monaco.contribution-Cr0AaHCD.js} +2 -2
- package/dist/web/assets/{monaco.contribution-bytkwn0O.js → monaco.contribution-DSBAb_PC.js} +2 -2
- package/dist/web/assets/{monaco.contribution-DbrACt99.js → monaco.contribution-DUZrs1D-.js} +2 -2
- package/dist/web/assets/{monitor-mtHVW7gU.js → monitor-DGqnfsK9.js} +1 -1
- package/dist/web/assets/play-C1XWyKh6.js +1 -0
- package/dist/web/assets/{python-DAPe0Urm.js → python-Z1foxLdf.js} +1 -1
- package/dist/web/assets/{save-B2eVAjW6.js → save-CX2kF74j.js} +1 -1
- package/dist/web/assets/{square-16bX2k2i.js → square-DMkXeYeV.js} +1 -1
- package/dist/web/assets/{toggleHighContrast-Ce0YhEQg.js → toggleHighContrast-CRMVp779.js} +1 -1
- package/dist/web/assets/{tsMode-CnvMmHz6.js → tsMode-Czu8YAqh.js} +1 -1
- package/dist/web/assets/{upload-COPbAaD-.js → upload-giKOPnl1.js} +1 -1
- package/dist/web/assets/{useLocalAgentSchedules-C-Wjm5HK.js → useLocalAgentSchedules-BHxWmOeC.js} +1 -1
- package/dist/web/assets/{useSessionTurnCache-BfVbncMB.js → useSessionTurnCache-CUYFsu_W.js} +1 -1
- package/dist/web/assets/{wifi-off-C9iLbCC-.js → wifi-off-DbDXaV1N.js} +1 -1
- package/dist/web/assets/{workers-BXh_u8Fr.js → workers-Cno4XklJ.js} +1 -1
- package/dist/web/assets/{yaml-CRSr9x6_.js → yaml-C28t_C6h.js} +1 -1
- package/dist/web/index.html +2 -2
- package/docs/command-reference.md +99 -0
- package/package.json +4 -3
- package/dist/chunks/actions-command-5IEZEP6W.js +0 -2
- package/dist/chunks/app-server-runtime-NQ2BYPGK.js +0 -2
- package/dist/chunks/apps-XQ7PHJTD.js +0 -2
- package/dist/chunks/chunk-36RCXSEJ.js +0 -2
- package/dist/chunks/chunk-3QC2DDQ5.js +0 -2
- package/dist/chunks/chunk-3XDFNA7W.js +0 -2
- package/dist/chunks/chunk-4S4WH65X.js +0 -3
- package/dist/chunks/chunk-4TMC5F2P.js +0 -5
- package/dist/chunks/chunk-65BW2QXY.js +0 -2
- package/dist/chunks/chunk-65QCNUGE.js +0 -659
- package/dist/chunks/chunk-6XF4GI35.js +0 -2
- package/dist/chunks/chunk-ALZRXBEC.js +0 -33
- package/dist/chunks/chunk-ARJUNUH6.js +0 -5
- package/dist/chunks/chunk-CEEZ7Y2J.js +0 -2
- package/dist/chunks/chunk-DZVVGU6K.js +0 -8
- package/dist/chunks/chunk-HY2Q7EDK.js +0 -4
- package/dist/chunks/chunk-IT4AT6LB.js +0 -42
- package/dist/chunks/chunk-KRC2S5QF.js +0 -5
- package/dist/chunks/chunk-L6HCBIAU.js +0 -2
- package/dist/chunks/chunk-LNEOLOK2.js +0 -13
- package/dist/chunks/chunk-MTJNKRXL.js +0 -22
- package/dist/chunks/chunk-NM2GYDPA.js +0 -19
- package/dist/chunks/chunk-OMM4ZO7E.js +0 -2182
- package/dist/chunks/chunk-OQPFFKU6.js +0 -2
- package/dist/chunks/chunk-QID62K65.js +0 -2400
- package/dist/chunks/chunk-YOOPTMQK.js +0 -3
- package/dist/chunks/cli-OJU6NQSA.js +0 -2
- package/dist/chunks/core-commands-UZL5RF2M.js +0 -2
- package/dist/chunks/datasets-42AZHVSV.js +0 -13
- package/dist/chunks/desktop-test-DI76HKS7.js +0 -3
- package/dist/chunks/dist-6YP37XI5.js +0 -2
- package/dist/chunks/experiments-Z3S35BYN.js +0 -2
- package/dist/chunks/hosted-harness-runtime-VZNYNQ6T.js +0 -2
- package/dist/chunks/hosted-profile-compiler-JXLPR7SX.js +0 -2
- package/dist/chunks/hosted-profile-evaluation-control-Q54YXXIM.js +0 -2
- package/dist/chunks/hosted-profile-evaluation-inspection-7WESM3ZH.js +0 -3
- package/dist/chunks/hosted-profile-evaluation-preparation-QP24PYBL.js +0 -3
- package/dist/chunks/opchat-UFWWVJL6.js +0 -3
- package/dist/chunks/organizations-SBBIOF6O.js +0 -2
- package/dist/chunks/project-agent-IBHUQ3JX.js +0 -2
- package/dist/chunks/sandbox-command-PAJAIMWM.js +0 -2
- package/dist/chunks/src-5MJSO3UD.js +0 -326
- package/dist/chunks/taskset-BZYQT65N.js +0 -2
- package/dist/chunks/training-7PST5HZU.js +0 -2
- package/dist/web/assets/App-6AQXN2SM.js +0 -226
- package/dist/web/assets/App-7h_oHCFd.css +0 -1
- package/dist/web/assets/BrowserSidebar-BLwL2FOG.js +0 -1
- package/dist/web/assets/CommunityView-CuDrYOIf.js +0 -1
- package/dist/web/assets/ComposerCreateImproveStrip-BrduENlL.js +0 -1
- package/dist/web/assets/GetStartedView-Db1IEWzv.js +0 -1
- package/dist/web/assets/HostedModelLearningReview-kofNdPAe.js +0 -1
- package/dist/web/assets/HostedModelLearningSettings-6ij3nwWD.js +0 -1
- package/dist/web/assets/LabModelVersionDetailPage-C7Maqcit.js +0 -1
- package/dist/web/assets/LabSkillSidebar-Bz0U-Nmw.js +0 -1
- package/dist/web/assets/LabsRoute-Ch1N-e2S.js +0 -52
- package/dist/web/assets/LabsRoute-Dw6-12kt.css +0 -1
- package/dist/web/assets/MainChatThread-BJbhZOvs.js +0 -2
- package/dist/web/assets/MainPane-Cs2Kng_k.js +0 -19
- package/dist/web/assets/OutputsPage-BkGI0kHp.js +0 -1
- package/dist/web/assets/RightChatPanelStack-DjEdxsq8.js +0 -1
- package/dist/web/assets/ScheduledWorkPage-BSiOxxAH.js +0 -1
- package/dist/web/assets/SettingsView-1XN7KLBl.js +0 -9
- package/dist/web/assets/SettingsView-C7av3zwv.css +0 -1
- package/dist/web/assets/WorkSidebarPanel-CEnO-Txp.js +0 -1
- package/dist/web/assets/WorkspaceDiffPanel-BiuQBflC.js +0 -14
- package/dist/web/assets/WorkspaceEnvironmentMenu-Dr-E0c1j.js +0 -32
- package/dist/web/assets/index-B9VSiz_z.css +0 -1
- package/dist/web/assets/refresh-cw-Dvm_Pq3U.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
-
import{e as g,g as $,h as O,i as C}from"./chunk-
|
|
2
|
+
import{e as g,g as $,h as O,i as C}from"./chunk-TYWBEJOA.js";import{a as w}from"./chunk-3M53YXEI.js";import{a as r}from"./chunk-FTQLQJQV.js";var L=Symbol("openpondCliOptionValues"),a=class extends Error{static{r(this,"CliUsageError")}exitCode=2;constructor(t){super(t),this.name="CliUsageError"}},K=new Set(["maxOutputBytes","timeoutSec"]);function k(n){let t=[...n],o="",i={},e={},u=[];for(;t.length>0;){let s=t.shift();if(s==="--"){u.push(...t);break}if(s.startsWith("--")){let f=s.indexOf("="),c=f>=0?s.slice(2,f):s.slice(2),p=N(c),d=f>=0?s.slice(f+1):P(t,p,o);h(i,e,p,d,o)}else _(s)?y(s,t,i,e):o?u.push(s):o=s}return Object.defineProperty(i,L,{value:e,enumerable:!1,configurable:!1,writable:!1}),V(o,i),{command:o,options:i,rest:u}}r(k,"parseArgs");function N(n){return n.replace(/-([a-z])/g,(t,o)=>o.toUpperCase())}r(N,"normalizeCliOptionKey");function _(n){return/^-[^-].*/.test(n)&&!S(n)}r(_,"isShortOptionToken");function y(n,t,o,i){let e=n.slice(1);if(!e)return;let u=e.indexOf("="),s=u>=0?e.slice(0,u):e,f=u>=0?e.slice(u+1):null;if(s.length!==1){for(let d of s){let m=g[d];if(!m)throw new a(`unknown short option -${d}`);if(C(m)!=="boolean")throw new a(`short option -${d} requires its own value`);h(o,i,m,"true")}return}let c=g[s];if(!c)throw new a(`unknown short option -${s}`);let p=f??P(t,c);h(o,i,c,p)}r(y,"parseShortOptionToken");function P(n,t,o){let i=I(t,o);if(i==="boolean")return n[0]&&x(n[0])?n.shift():"true";if(i){let e=n.shift();if(e===void 0||R(e)&&!S(e))throw e!==void 0&&n.unshift(e),new a(`${l(t)} must be ${b(i)}`);return e}return n[0]&&!n[0].startsWith("--")?n.shift():"true"}r(P,"readOptionValue");function h(n,t,o,i,e){T(o,i,e),n[o]=i,(t[o]??=[]).push(i)}r(h,"setParsedOption");function T(n,t,o){let i=I(n,o);if(i){if(i==="boolean"){if(!x(t))throw new a(`${l(n)} must be a boolean`);return}if(t.trim().length===0||t==="true")throw new a(`${l(n)} must be ${b(i)}`);if(i==="number"||i==="integer"){let e=Number(t);if(!Number.isFinite(e))throw new a(`${l(n)} must be ${b(i)}`);if(i==="integer"&&!Number.isInteger(e))throw new a(`${l(n)} must be an integer`);if(i==="integer"&&K.has(n)&&e<=0)throw new a(`${l(n)} must be a positive integer`);return}if(i==="json")try{w(t,l(n))}catch(e){throw new a(e instanceof Error?e.message:String(e))}}}r(T,"validateParsedOptionValue");function I(n,t){return t?O(t,n):C(n)}r(I,"typedOptionKind");function l(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}r(l,"cliOptionLabel");function E(n){return n==="json"?"JSON value":n}r(E,"optionKindLabel");function b(n){let t=E(n);return/^[aeiou]/i.test(t)?`an ${t}`:`a ${t}`}r(b,"optionKindPhrase");function x(n){return/^(true|false|1|0|yes|no)$/i.test(n)}r(x,"isBooleanLiteral");function R(n){return n.startsWith("-")&&n!=="-"}r(R,"isOptionLike");function S(n){return/^-\d+(?:\.\d+)?$/.test(n)}r(S,"isNegativeNumber");function V(n,t){let o=n?$(n):null;for(let i of Object.keys(t))if(!O(n,i)){let e=l(i),u=o?` for ${o.name}`:"";throw new a(`unknown option --${e}${u}`)}}r(V,"validateCommandOptions");export{a,k as b};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{L as r}from"./chunk-6JBWHR6T.js";import{r as o}from"./chunk-JO7GRBOG.js";import{l as t}from"./chunk-BQNK2NMB.js";import{e as a}from"./chunk-P653BXMY.js";import{b as e}from"./chunk-ES2ISFJC.js";var s=e.object({profileRef:r,manifest:o,metric:t,gradeRefs:e.array(a),receiptRefs:e.array(a),passRate:e.number().min(0).max(1),passed:e.boolean(),completedAt:e.string().datetime(),contentHash:e.string().regex(/^[a-f0-9]{64}$/)}).strict();export{s as a};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
-
import{a as be,b as Ae,c as Ie,d as ve}from"./chunk-
|
|
2
|
+
import{a as be,b as Ae,c as Ie,d as ve}from"./chunk-ZC57DX6D.js";import{a as Re}from"./chunk-6FA3GG5B.js";import{c as O,i as L}from"./chunk-6SJZXZNA.js";import{f as Oe}from"./chunk-H7IWJN7L.js";import{a as s}from"./chunk-FTQLQJQV.js";var W=class extends Error{static{s(this,"OpenPondProfileSetupRequiredError")}code="agent_source_setup_required";details;constructor(t,n){let o=n.blockingRequirements.map(r=>r.label);super(["agent_source_setup_required",`Profile action ${t} has unresolved required setup.`,o.length?`Missing setup: ${o.join(", ")}`:""].filter(Boolean).join(`
|
|
3
3
|
`)),this.name="OpenPondProfileSetupRequiredError",this.details={error:"agent_source_setup_required",actionId:t,setupGate:n,missing:o,blockingSetupRequirements:n.blockingRequirements,setupRequirements:n.requirements}}};function K(e){let t=new Map;for(let a of e.sourceSetupRequirements??[]){let l=bt(a);if(e.actionId&&l&&l!==e.actionId&&h(a.actionName)!==e.actionId&&h(a.sourceActionId)!==e.actionId)continue;let c=Ee({record:a,source:"source_upload_metadata",actionId:l});c&&t.set(c.ref,c)}for(let a of e.actionCatalog)if(!(e.actionId&&a.id!==e.actionId&&a.name!==e.actionId))for(let l of a.setupRequirements??[]){let c=Ee({record:l,source:"action_catalog",actionId:a.id});c&&t.set(c.ref,c)}let n=Array.from(t.values()),o=n.filter(a=>a.blocking),r=n.filter(a=>!a.required&&!ne(a.status)).length,i=n.filter(a=>ne(a.status)).length;return{status:It(o),requirementCount:n.length,blockingCount:o.length,optionalMissingCount:r,readyCount:i,requirements:n,blockingRequirements:o}}s(K,"buildOpenPondProfileSetupGate");function oe(e,t){if(t.blockingRequirements.length>0)throw new W(e,t)}s(oe,"assertOpenPondProfileActionReady");function Rt(e){let t=e.actionId?`${e.actionId}: `:"",n=e.required?"required":"optional";return`${t}${e.label} (${n}, ${e.status})`}s(Rt,"formatOpenPondProfileSetupRequirement");function Ee(e){let t=e.source==="action_catalog"&&h(e.record.source)==="source_upload_metadata"?"source_upload_metadata":e.source,n=h(e.record.kind)??h(e.record.type),o=h(e.record.label)??h(e.record.name)??h(e.record.key)??h(e.record.provider)??h(e.record.tool)??h(e.record.command)??h(e.record.packageName)??h(e.record.path)??h(e.record.repo)??h(e.record.url)??h(e.record.id)??n??"setup requirement",r=e.record.required!==!1,i=At(e.record);return{ref:[t,e.actionId??"source",n??"requirement",o].join(":"),source:t,actionId:e.actionId,kind:n,label:o,status:i,required:r,blocking:r&&!ne(i)}}s(Ee,"setupRequirementFromRecord");function bt(e){return h(e.actionId)??h(e.sourceActionId)??h(e.actionName)}s(bt,"setupRequirementActionId");function At(e){let t=h(e.status)??h(e.state);return t?t==="satisfied"||t==="connected"||t==="provided"?"ready":t:typeof e.satisfied=="boolean"?e.satisfied?"ready":"setup_required":typeof e.ready=="boolean"&&e.ready?"ready":"setup_required"}s(At,"setupStatus");function It(e){return e.length===0?"ready":e.some(t=>["blocked","unsupported","unsupported_dependency","stale"].includes(t.status))?"blocked":"setup_required"}s(It,"gateStatus");function ne(e){return e==="ready"||e==="disabled"}s(ne,"isReadyStatus");function h(e){return typeof e=="string"&&e.trim()?e.trim():null}s(h,"text");import{stat as qt}from"node:fs/promises";import se from"node:path";import{spawn as vt}from"node:child_process";import{existsSync as re}from"node:fs";import{readFile as Et,rm as Kn,writeFile as _e}from"node:fs/promises";import ie from"node:path";var Le=["**/node_modules/","**/.bun/","**/.env","**/.env.*","**/.openpond/traces/","**/.openpond/vendor/","**/.openpond/eval-results.json","**/.openpond/artifact-index.json","**/.openpond/source-upload-cache.json",""].join(`
|
|
4
4
|
`);async function Me(e){if(!re(ie.join(e,".git"))){let i=await R(e,["init","-b","main"]);if(i.code!==0)throw new Error(H("git init",i))}let t=ie.join(e,".gitignore");if(re(t)?await xt(t):await _e(t,Le,"utf8"),await _t(e))return;let n=await N(e);if(!n.dirty&&n.files.length===0)return;let o=await R(e,["add","-A"]);if(o.code!==0)throw new Error(H("git add",o));let r=await R(e,["commit","-m","Initialize OpenPond profile"],{env:{...process.env,GIT_AUTHOR_NAME:process.env.GIT_AUTHOR_NAME||"OpenPond",GIT_AUTHOR_EMAIL:process.env.GIT_AUTHOR_EMAIL||"openpond@example.invalid",GIT_COMMITTER_NAME:process.env.GIT_COMMITTER_NAME||"OpenPond",GIT_COMMITTER_EMAIL:process.env.GIT_COMMITTER_EMAIL||"openpond@example.invalid"}});if(r.code!==0&&!/nothing to commit/i.test(r.stdout+r.stderr))throw new Error(H("git commit",r))}s(Me,"ensureProfileGitRepo");async function xt(e){let t=await Et(e,"utf8").catch(()=>""),n=Le.split(/\r?\n/).map(r=>r.trim()).filter(Boolean).filter(r=>!t.split(/\r?\n/).some(i=>i.trim()===r));if(n.length===0)return;let o=t.endsWith(`
|
|
5
5
|
`)||t.length===0?"":`
|
|
6
6
|
`;await _e(e,`${t}${o}${n.join(`
|
|
7
7
|
`)}
|
|
8
|
-
`,"utf8")}s(xt,"ensureProfileGitignoreRules");async function N(e){if(!re(ie.join(e,".git")))return{isRepo:!1,branch:null,head:null,shortHead:null,dirty:!1,upstream:null,ahead:null,behind:null,remoteUrl:null,files:[],error:null};let t=await R(e,["rev-parse","--is-inside-work-tree"]);if(t.code!==0||t.stdout.trim()!=="true")return{isRepo:!1,branch:null,head:null,shortHead:null,dirty:!1,upstream:null,ahead:null,behind:null,remoteUrl:null,files:[],error:t.stderr.trim()||t.stdout.trim()||"not a Git work tree"};let[n,o,r,i,a]=await Promise.all([B(e,["branch","--show-current"]),B(e,["rev-parse","HEAD"]),R(e,["status","--porcelain=v1","-uall"]),B(e,["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"]),B(e,["remote","get-url","origin"])]),l=r.code===0?Mt(r.stdout):[],c=i?await Lt(e):{ahead:null,behind:null},d=o||null;return{isRepo:!0,branch:n||null,head:d,shortHead:d?d.slice(0,12):null,dirty:l.length>0,upstream:i,ahead:c.ahead,behind:c.behind,remoteUrl:a,files:l,error:r.code===0?null:H("git status",r)}}s(N,"loadProfileGitState");async function $e(e,t){let n=await N(e);if(!n.isRepo)throw new Error(n.error??"Active OpenPond profile source is not a Git repo.");if(!n.dirty)return{committed:!1,stdout:"",stderr:"",state:n};let o=await R(e,["add","-A"]);if(o.code!==0)throw new Error(H("git add",o));let r=await R(e,["commit","-m",t]);if(r.code!==0)throw new Error(H("git commit",r));return{committed:!0,stdout:r.stdout,stderr:r.stderr,state:await N(e)}}s($e,"commitProfileChanges");async function qe(e){return B(e,["rev-parse","HEAD"])}s(qe,"profileGitHead");async function _t(e){return(await R(e,["rev-parse","--verify","HEAD"])).code===0}s(_t,"hasGitHead");async function Lt(e){let t=await R(e,["rev-list","--left-right","--count","@{u}...HEAD"]);if(t.code!==0)return{ahead:null,behind:null};let[n,o]=t.stdout.trim().split(/\s+/),r=n?Number.parseInt(n,10):Number.NaN,i=o?Number.parseInt(o,10):Number.NaN;return{ahead:Number.isFinite(i)?i:null,behind:Number.isFinite(r)?r:null}}s(Lt,"loadAheadBehind");async function B(e,t){let n=await R(e,t);return n.code!==0?null:n.stdout.trim()||null}s(B,"gitText");function Mt(e){return e.split(/\r?\n/).map(t=>t.trimEnd()).filter(Boolean).map(t=>{let n=t[0]??" ",o=t[1]??" ",r=`${n}${o}`.trim()||"changed",i=t.slice(3),a=i.split(" -> "),l=n===" "?null:n,c=o===" "?null:o,d=a.length===2?a[1]:i,g=a.length===2?a[0]:null;return{path:xe(d),originalPath:g?xe(g):null,indexStatus:l,worktreeStatus:c,status:r,category:$t(l,c)}})}s(Mt,"parsePorcelainStatus");function $t(e,t){return e==="?"&&t==="?"?"untracked":e==="R"||t==="R"?"renamed":e==="A"||t==="A"?"added":e==="D"||t==="D"?"deleted":e==="M"||t==="M"?"modified":"changed"}s($t,"gitChangeCategory");function xe(e){let t=e.trim();if(!t.startsWith('"')||!t.endsWith('"'))return t;try{return JSON.parse(t)}catch{return t.slice(1,-1)}}s(xe,"unquoteGitPath");function H(e,t){return t.stderr.trim()||t.stdout.trim()||`${e} failed with exit code ${t.code??"unknown"}`}s(H,"gitFailureMessage");async function R(e,t,n={}){return new Promise((o,r)=>{let i=vt("git",t,{cwd:e,env:n.env,stdio:"pipe"}),a="",l="";i.stdout?.on("data",c=>{a+=String(c)}),i.stderr?.on("data",c=>{l+=String(c)}),i.on("error",r),i.on("close",c=>{o({code:c,stdout:a,stderr:l})}),n.input!==void 0?i.stdin?.end(n.input):i.stdin?.end()})}s(R,"runGitCommand");var ae=1500,Te=8*1024*1024,le=100*1024*1024,ce=8,jt={maxFiles:ae,maxFileBytes:Te,maxTotalBytes:le,concurrency:ce},Ft={mode:"single_json_payload",chunkingSupported:!1};async function Tt(e){let t=await R(e,["ls-files","-z"]);if(t.code!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"git ls-files failed for profile source upload");let n=t.stdout.split("\0").map(c=>c.trim()).filter(Boolean).filter(c=>{let d=c.replace(/\\/g,"/");return Fe(d)&&!Gt(d)}).sort();if(n.length===0)throw new Error("No committed profile source files found to upload.");if(n.length>ae)throw new Error(`Too many profile source files to upload: ${n.length} > ${ae}`);let o=(await je(n,ce,async c=>{let d=se.resolve(e,c),g=se.relative(e,d).replace(/\\/g,"/");if(!Fe(g))throw new Error(`Profile source path escapes repo: ${c}`);let P=await qt(d);if(!P.isFile())return null;if(P.size>Te)throw new Error(`Profile source file is too large: ${c} (${P.size} bytes)`);return{path:g,absolutePath:d,size:P.size,mtimeMs:Math.trunc(P.mtimeMs),ctimeMs:Math.trunc(P.ctimeMs)}})).filter(c=>c!==null),r=0;for(let c of o)if(r+=c.size,r>le)throw new Error(`Profile source upload is too large: ${r} > ${le}`);let i=await Ae(e),a=await je(o,ce,async c=>Ie(c,i));await ve(e,a).catch(()=>{});let l=a.map(c=>c.entry);return{entries:l,fileCount:l.length,totalBytes:r,limits:jt,transport:Ft}}s(Tt,"collectProfileSourceUploadEntries");async function je(e,t,n){let o=new Array(e.length),r=0,i=Math.max(1,Math.min(t,e.length));return await Promise.all(Array.from({length:i},async()=>{for(;r<e.length;){let a=r;r+=1,o[a]=await n(e[a],a)}})),o}s(je,"mapWithConcurrency");function Fe(e){return e.length>0&&!e.includes("\0")&&!se.isAbsolute(e)&&!e.split(/[\\/]+/).some(t=>!t||t==="."||t==="..")}s(Fe,"isSafeProfileSourcePath");function Gt(e){return e.split(/[\\/]+/).some((t,n,o)=>{let r=t.toLowerCase();if(r===".git"||r==="node_modules"||r===".bun"||r===".env"||r.startsWith(".env.")||e.replace(/\\/g,"/")===be)return!0;if(r!==".openpond")return!1;let i=o[n+1]?.toLowerCase();return i==="goals"||i==="traces"||i==="vendor"||i==="eval-results.json"||i==="artifact-index.json"})}s(Gt,"shouldSkipProfileSourcePath");function Ht(e){let t=y(e.checkResult),n=y(t?.deployPlan)??y(e.deployPlan),o=y(n?.source),r=y(n?.checks),i=y(t?.sourceCheckStatus);return{status:e.status,agentId:e.agentId,deployPlanStatus:f(n?.status),canRun:Ge(n?.canRun),canDeploy:Ge(n?.canDeploy),sourceRef:f(o?.sourceRef),sourceCommitSha:f(o?.sourceCommitSha),manifestHash:f(o?.manifestHash),manifestPath:f(o?.manifestPath),setupCommands:b(r?.setupCommands),validationCommands:b(r?.validationCommands),requiredChecks:b(r?.requiredChecks),evalNames:b(r?.evalNames),blockedReasons:b(n?.blockedReasons),staleReasons:b(n?.staleReasons),runtimeId:f(i?.latestRuntimeId),sandboxId:f(i?.latestSandboxId),traceArtifactRefs:b(i?.traceArtifactRefs),evalResultArtifactRefs:b(i?.evalResultArtifactRefs),validatorArtifactRefs:b(i?.validatorArtifactRefs),checkedAt:e.checkedAt??new Date().toISOString(),error:e.error??null}}s(Ht,"hostedSourceCheckStatusFromPayload");function Nt(e){let t=y(e.publishResult),n=y(t?.activeManifestSnapshot)??y(t?.manifestSnapshot)??y(t?.snapshot);return{status:e.status??"published",agentId:e.agentId,snapshotId:f(n?.id),sourceRef:f(n?.sourceRef),sourceCommitSha:f(n?.sourceCommitSha),manifestHash:f(n?.manifestHash),manifestPath:f(n?.manifestPath),buildStatus:f(n?.buildStatus),validationStatus:f(n?.validationStatus),evalStatus:f(n?.evalStatus),publishedAt:f(t?.publishedAt)??f(n?.publishedAt),error:e.error??null}}s(Nt,"hostedPublishStatusFromPayload");function Ut(e){let t=y(e.runResult),n=y(t?.run),o=y(n?.runtimeSource),r=y(n?.metadata),i=y(r?.sourceSummary),a=y(r?.setupGate),l=y(r?.responseSummary),c=y(r?.traceSummary),d=y(r?.evalSummary);return{status:f(n?.status)??(e.error?"failed":"running"),agentId:f(n?.agentId)??e.agentId,runId:f(n?.id),runtimeId:f(n?.runtimeId),sandboxId:f(n?.sandboxId),sourceRef:f(o?.sourceRef)??f(i?.sourceRef)??f(r?.sourceRef),sourceCommitSha:f(o?.sourceCommitSha)??f(i?.sourceCommitSha)??f(r?.hostedHead),manifestHash:f(o?.manifestHash)??f(i?.manifestHash),setupGateStatus:f(a?.status),setupRequirementRefs:Bt(a),artifactRefs:b(l?.artifactRefs),traceArtifactRefs:b(c?.artifactRefs),evalArtifactRefs:b(d?.artifactRefs),startedAt:f(n?.createdAt),completedAt:f(n?.completedAt),error:e.error??null}}s(Ut,"hostedRunSummaryFromPayload");function Dt(e){return e?.status?e.status==="succeeded"||e.status==="passed"?"passed":e.status==="failed"||e.status==="cancelled"?"failed":"running":"not_started"}s(Dt,"hostedRunStatusFromRunSummary");function Bt(e){return e?(Array.isArray(e.requirements)?e.requirements:Array.isArray(e.blockingRequirements)?e.blockingRequirements:[]).map(n=>{let o=y(n);return f(o?.ref)??f(o?.id)??f(o?.label)}).filter(n=>!!n):[]}s(Bt,"setupRequirementRefs");function y(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(y,"record");function f(e){return typeof e=="string"&&e.trim()?e.trim():null}s(f,"text");function Ge(e){return typeof e=="boolean"?e:null}s(Ge,"booleanValue");function b(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(b,"textArray");import{createRequire as st}from"node:module";import{createHash as et,randomUUID as tt}from"node:crypto";import{spawn as hn}from"node:child_process";import{existsSync as k}from"node:fs";import{cp as yn,mkdir as v,readFile as at,readdir as lt,rename as Pe,rm as he,symlink as wn,writeFile as D}from"node:fs/promises";import u from"node:path";function ue(e=null){return{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!0,error:e}}s(ue,"emptyProfileCatalogState");function de(e=null){return{skillCount:0,generatedAt:null,stale:!0,error:e}}s(de,"emptyProfileSkillCatalogState");function fe(){return{status:"ready",requirementCount:0,blockingCount:0,optionalMissingCount:0,readyCount:0,requirements:[],blockingRequirements:[]}}s(fe,"emptyProfileSetupGate");function Y(){return{changedAgents:[],newAgents:[],deletedAgents:[],changedSkills:[],changedActions:[],changedExtensions:[],setupChanges:[],envRequirementChanges:[],files:[]}}s(Y,"emptyProfileDiffSummary");function pe(e=null){return{state:e?"error":"none",message:e??"No active OpenPond profile.",agentCount:0,actionCount:0,defaultAction:null,checkFresh:!1,checkStaleReason:e??"No active profile.",localHead:null,hostedHead:null}}s(pe,"emptyProfileSummary");import{existsSync as U}from"node:fs";import{readFile as zt,stat as Jt}from"node:fs/promises";import V from"node:path";var He=".openpond/agent-manifest.json",Ne=".openpond/action-registry.json",Wt=".openpond/source-upload-metadata.json",Kt=".openpond/agent-package-origin.json";async function Be(e){return Je({agentId:"default",sourcePath:e,preferred:!0})}s(Be,"loadProfileActionCatalog");async function ze(e){if(e.length===0)return{catalog:{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!1,error:null},actionCatalog:[],sourceSetupRequirements:[]};let t=[...e.filter(l=>l.preferred),...e.filter(l=>!l.preferred)],n=await Promise.all(t.map(Je)),o=new Map,r=[];for(let l of n)for(let c of l.actionCatalog){let d=o.has(c.id)?`${c.agentId??"agent"}.${c.sourceActionId??c.id}`:c.id,g=d===c.id?c:{...c,id:d};o.set(d,g),r.push(g)}let i=Vt(n.map(l=>l.catalog.generatedAt)),a=n.map(l=>l.catalog.error).filter(Boolean);return{catalog:{actionCount:r.length,generatedAt:i,manifestPath:n.find(l=>l.catalog.manifestPath)?.catalog.manifestPath??null,registryPath:n.find(l=>l.catalog.registryPath)?.catalog.registryPath??null,stale:n.some(l=>l.catalog.stale),error:a.length>0?a.join("; "):null},actionCatalog:r,sourceSetupRequirements:n.flatMap(l=>l.sourceSetupRequirements)}}s(ze,"loadProfileActionCatalogForSources");async function Je(e){let t=e.sourcePath,n=V.join(t,He),o=V.join(t,Ne),r=V.join(t,Wt),i=V.join(t,Kt);try{let a=await X(n),l=await X(o),c=await X(r),d=w(await X(i)),g=w(w(a)?.inputSchemas),P=De(w(c)?.setupRequirements)??[],x=Xt(P),S=new Map;for(let m of[...ge(w(a)?.actionCatalog),...ge(w(l)?.actions),...ge(w(a)?.actions)]){let $=p(m.id)??p(m.name);if(!$)continue;let C=S.get($),kt=Zt({sourceRequirementsByAction:x,actionId:$,actionName:p(m.name)}),Ct=Qt(De(m.setupRequirements)??C?.setupRequirements??[],kt),Ot={id:$,agentId:e.agentId,sourcePath:t,sourceActionId:$,name:p(m.name)??C?.name??$,label:p(m.label)??C?.label??rn($),description:p(m.description)??C?.description??null,visibility:p(m.visibility)??C?.visibility??"default",inputSchema:on(m.inputSchema,g)??C?.inputSchema??null,outputSchema:We(m.outputSchema)??C?.outputSchema??null,approvalPolicy:w(m.approvalPolicy)??C?.approvalPolicy??null,artifactPolicy:w(m.artifactPolicy)??C?.artifactPolicy??null,setupRequirements:Ct,mcp:w(m.mcp)??C?.mcp??null,schedulePolicy:w(m.schedulePolicy)??C?.schedulePolicy??null,trace:Yt(w(m.trace)??C?.trace??null,d),implementation:w(m.implementation)??C?.implementation??null,invokesModel:typeof m.invokesModel=="boolean"?m.invokesModel:C?.invokesModel};S.set($,Ot)}let M=Array.from(S.values()).filter(m=>m.visibility!=="internal"&&m.visibility!=="debug"),G=[...a?[]:[He],...l?[]:[Ne]],_=await nn([n,o]);return{catalog:{actionCount:M.length,generatedAt:_,manifestPath:U(n)?n:null,registryPath:U(o)?o:null,stale:G.length>0,error:G.length>0?tn(e,G):null},actionCatalog:M,sourceSetupRequirements:P}}catch(a){return{catalog:{actionCount:0,generatedAt:null,manifestPath:U(n)?n:null,registryPath:U(o)?o:null,stale:!0,error:a instanceof Error?a.message:String(a)},actionCatalog:[],sourceSetupRequirements:[]}}}s(Je,"loadProfileActionCatalogSource");function Yt(e,t){if(!t)return e;let n=p(t.versionId),o=p(t.digest);return!n||!o?e:{...e??{},agentVersionId:n,agentPackageDigest:o,validationReceiptIds:Ue(t.validationReceiptIds),evalReceiptIds:Ue(t.evalReceiptIds)}}s(Yt,"mergeAgentPackageTrace");function Ue(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(Ue,"stringArray");function Vt(e){let t=0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&(t=Math.max(t,o))}return t>0?new Date(t).toISOString():null}s(Vt,"latestIso");function Xt(e){let t=new Map;for(let n of e){let o=[p(n.actionId),p(n.sourceActionId),p(n.actionName)].filter(r=>!!r);for(let r of o){let i=t.get(r)??[];i.push(n),t.set(r,i)}}return t}s(Xt,"sourceSetupRequirementsByAction");function Zt(e){return[...e.sourceRequirementsByAction.get(e.actionId)??[],...e.actionName&&e.actionName!==e.actionId?e.sourceRequirementsByAction.get(e.actionName)??[]:[]].map(n=>({...n,source:"source_upload_metadata"}))}s(Zt,"setupRequirementsForActionSource");function Qt(e,t){if(t.length===0)return e;let n=[],o=new Set;for(let r of[...e,...t]){let i=en(r);o.has(i)||(o.add(i),n.push(r))}return n}s(Qt,"mergeSetupRequirements");function en(e){return[p(e.actionId)??p(e.sourceActionId)??p(e.actionName)??"",p(e.kind)??p(e.type)??"",p(e.name)??p(e.key)??p(e.provider)??p(e.tool)??p(e.command)??p(e.packageName)??p(e.path)??p(e.repo)??p(e.url)??p(e.id)??""].join(":")}s(en,"setupRequirementIdentity");function tn(e,t){return[`Profile agent ${e.agentId} at ${e.sourcePath} is missing SDK catalog artifact(s): ${t.join(", ")}.`,"Run `openpond profile check --kind all` after source materialization so each enabled profile agent has inspect/build artifacts."].join(" ")}s(tn,"missingSourceArtifactsMessage");async function X(e){return U(e)?JSON.parse(await zt(e,"utf8")):null}s(X,"readJsonIfExists");async function nn(e){let t=0;for(let n of e){if(!U(n))continue;let o=await Jt(n);t=Math.max(t,o.mtimeMs)}return t>0?new Date(t).toISOString():null}s(nn,"latestMtime");function w(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(w,"asRecord");function ge(e){return Array.isArray(e)?e.filter(t=>!!w(t)):[]}s(ge,"records");function De(e){return Array.isArray(e)?e.filter(t=>!!w(t)):null}s(De,"recordArray");function p(e){return typeof e=="string"&&e.trim()?e.trim():null}s(p,"text");function We(e){return p(e)??w(e)}s(We,"schemaValue");function on(e,t){let n=We(e);return typeof n!="string"?n:w(t?.[n])??n}s(on,"resolvedSchemaValue");function rn(e){let t=e.replace(/[._-]+/g," ").trim();return t?t.replace(/\b\w/g,n=>n.toUpperCase()):e}s(rn,"titleFromActionId");import{createHash as sn}from"node:crypto";import{existsSync as Xe}from"node:fs";import{readdir as Ze,readFile as an,stat as ln}from"node:fs/promises";import q from"node:path";var me="skills",Z="SKILL.md",Ke=8e4;async function Qe(e){let t=q.join(e,me);if(!Xe(t))return{skillCatalog:Ye({stale:!1}),skills:[]};try{let n=await Ze(t,{withFileTypes:!0}),o=(await Promise.all(n.filter(i=>i.isDirectory()).map(i=>un(e,i.name)))).sort((i,a)=>i.name.localeCompare(a.name)||i.path.localeCompare(a.path));fn(o);let r=await pn(e,o);return{skillCatalog:{skillCount:o.length,generatedAt:r,stale:!1,error:null},skills:o}}catch(n){return{skillCatalog:Ye({stale:!0,error:n instanceof Error?n.message:String(n)}),skills:[]}}}s(Qe,"loadProfileSkills");function cn(e){let t=[],n=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/.exec(e);if(!n)return{name:null,description:null,body:e.trim(),messages:["SKILL.md must start with YAML frontmatter bounded by ---."]};let o=n[1]??"",r=(n[2]??"").trim(),i;try{i=Oe.load(o)}catch(d){t.push(`SKILL.md frontmatter is invalid YAML: ${d instanceof Error?d.message:String(d)}`)}let a=mn(i),l=Ve(a?.name),c=Ve(a?.description);return l||t.push("Skill frontmatter must include a non-empty name."),c||t.push("Skill frontmatter must include a non-empty description."),r||t.push("Skill body must be non-empty markdown."),{name:l,description:c,body:r,messages:t}}s(cn,"parseProfileSkillMarkdown");function Ye(e={}){return{skillCount:0,generatedAt:null,stale:e.stale??!0,error:e.error??null}}s(Ye,"emptyProfileSkillCatalogState");async function un(e,t){let n=q.join(me,t,Z).replace(/\\/g,"/"),o=q.join(e,n),r=[],i=q.join(e,me,t),a=await dn(i),l="";Xe(o)?l=await an(o,"utf8"):r.push(`Missing ${Z}.`),l.length>Ke&&r.push(`Skill markdown exceeds the limit of ${Ke} characters.`);let c=cn(l);r.push(...c.messages);let d=c.name??t,g=c.description??"";return gn(d)||r.push("Skill name must be lowercase kebab-case."),d!==t&&r.push(`Skill name must match its directory name (${t}).`),{name:d,description:g,path:n,scope:"profile",enabled:r.length===0,sourcePath:e,charCount:l.length,sourceHash:Pn(l),validationStatus:r.length>0?"error":"valid",validationMessages:r,resourceFiles:a.filter(P=>P!==Z)}}s(un,"loadProfileSkillDirectory");async function dn(e){let t=[];async function n(o,r){let i=await Ze(o,{withFileTypes:!0});await Promise.all(i.map(async a=>{let l=r?`${r}/${a.name}`:a.name;a.isDirectory()?await n(q.join(o,a.name),l):a.isFile()&&t.push(l)}))}return s(n,"visit"),await n(e,""),t.sort()}s(dn,"listPackageFiles");function fn(e){let t=new Map;for(let n of e)t.set(n.name,(t.get(n.name)??0)+1);for(let n of e)(t.get(n.name)??0)<=1||(n.enabled=!1,n.validationStatus="error",n.validationMessages=[...n.validationMessages,`Duplicate skill name: ${n.name}`])}s(fn,"markDuplicateSkillNames");async function pn(e,t){let n=0;for(let o of t){let r=q.dirname(q.join(e,o.path)),i=[Z,...o.resourceFiles];for(let a of i){let l=await ln(q.join(r,a)).catch(()=>null);l?.isFile()&&(n=Math.max(n,l.mtimeMs))}}return n>0?new Date(n).toISOString():null}s(pn,"latestSkillMtime");function gn(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}s(gn,"isKebabCaseSkillName");function mn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(mn,"asRecord");function Ve(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}s(Ve,"text");function Pn(e){return sn("sha256").update(e).digest("hex")}s(Pn,"sha256Hex");var F="openpond-profile.json",Sn="settings/profile.yaml",ct="default",E="default";function kn(e,t){let n=e?.defaultAgent??E,o=e?.enabledAgents&&e.enabledAgents.length>0?e.enabledAgents:[n];return{...e??{},path:t,defaultAgent:n,enabledAgents:o}}s(kn,"mergeProfileRepoManifestEntry");function ee(e,t,n){let o=A(e);if(e){let l=o.findIndex(d=>u.resolve(d.repoPath)===u.resolve(e.repoPath)&&d.profile===e.profile),c={source:o[l]?.source??"local",repositoryId:o[l]?.repositoryId??u.resolve(e.repoPath),repoPath:u.resolve(e.repoPath),profile:e.profile,...e.lastCheck?{lastCheck:e.lastCheck}:{},...e.lastPush?{lastPush:e.lastPush}:{}};l>=0?o[l]=c:o.push(c)}let r=o.findIndex(l=>u.resolve(l.repoPath)===u.resolve(t)&&l.profile===n),i=r>=0?o[r]:{source:"local",repositoryId:u.resolve(t),repoPath:u.resolve(t),profile:n};return r<0&&o.push(i),{repoPath:u.resolve(t),profile:n,mode:"local",profiles:o,...i.lastCheck?{lastCheck:i.lastCheck}:{},...i.lastPush?{lastPush:i.lastPush}:{}}}s(ee,"mergeActiveLocalProfileConfig");function A(e){if(!e)return[];let t=e.profiles?.map(n=>({...n}))??[];return t.some(n=>u.resolve(n.repoPath)===u.resolve(e.repoPath)&&n.profile===e.profile)||t.push({source:"local",repositoryId:u.resolve(e.repoPath),repoPath:u.resolve(e.repoPath),profile:e.profile,...e.lastCheck?{lastCheck:e.lastCheck}:{},...e.lastPush?{lastPush:e.lastPush}:{}}),t}s(A,"profileConfigEntries");var Cn=st(import.meta.url);function On(){return u.join(Re(),"library","profiles","default-repo")}s(On,"defaultLocalProfileRepoPath");function ut(e=null){return{mode:"none",repoPath:null,activeProfile:null,sourcePath:null,manifestPath:null,agents:[],skills:[],evals:[],git:null,catalog:ue(e),skillCatalog:de(e),actionCatalog:[],sourceSetupRequirements:[],setupGate:fe(),diff:Y(),hosted:null,summary:pe(e),lastCheck:null,error:e}}s(ut,"emptyProfileState");async function qo(e={}){let t=u.resolve(e.repoPath??On()),n=ke(e.profile),o=u.join("profiles",n),r=u.join(t,o),i=e.template??"blank-agent",a=i==="blank-profile";await v(t,{recursive:!0});let l=k(u.join(t,F)),c=await T(t).catch(()=>Tn(n,o));if(a&&l&&c.profiles[n])throw new Error(`Profile "${n}" already exists in ${t}.`);c.defaultProfile=c.defaultProfile||n,c.profiles[n]=kn(c.profiles[n],o),a&&(c.profiles[n].enabledAgents=[]),a?await v(r,{recursive:!0}):await In(r,i,!!e.force),await pt(r),await vn(t,r,n,{includeDefaultAgent:!a}),await Q(t,c),await Me(t);let d=(await O()).openpondProfile;return await L({openpondProfile:ee(d,t,n)}),j()}s(qo,"initLocalProfileRepo");async function jo(e,t,n){let o=u.resolve(e),r=await T(o),i=ke(t??r.defaultProfile);Ce(r,o,i);let a=(await O()).openpondProfile,l=ee(a,o,i);return dt(l,o,i,n),await L({openpondProfile:l}),j()}s(jo,"loadLocalProfileRepo");async function Fo(e,t,n){let o=u.resolve(e),r=await T(o),i=ke(t??r.defaultProfile);Ce(r,o,i);let a=(await O()).openpondProfile,l=ee(a,o,i);return dt(l,o,i,n),a&&(l.repoPath=a.repoPath,l.profile=a.profile,l.lastCheck=a.lastCheck,l.lastPush=a.lastPush),await L({openpondProfile:l}),bn(ye({repoPath:o,profile:i,source:n?.source,repositoryId:n?.repositoryId}))}s(Fo,"registerLocalProfileRepo");function dt(e,t,n,o){o&&(e.profiles=A(e).map(r=>u.resolve(r.repoPath)===t&&r.profile===n?{...r,source:o.source,repositoryId:o.repositoryId}:r))}s(dt,"applyProfileIdentity");async function To(e,t){let n=e.trim(),o=Fn(t);if(!n)throw new Error("Agent ID is required.");let i=(await O()).openpondProfile;if(!i)throw new Error("No active local Profile.");let a=await T(i.repoPath),l=a.profiles[i.profile];if(!l)throw new Error(`Profile "${i.profile}" was not found.`);let c=l.defaultAgent??E;if(!(l.enabledAgents??[c]).includes(n))throw new Error(`Agent "${n}" was not found in Profile "${i.profile}".`);let g={...l.agentNames??{}};return o===n?delete g[n]:g[n]=o,Object.keys(g).length?l.agentNames=g:delete l.agentNames,await Q(i.repoPath,a),j()}s(To,"renameActiveProfileAgent");async function Go(e){let t=e.agentPackage;if(Gn(t),!/^[a-z0-9][a-z0-9._-]{0,190}$/.test(t.agentId))throw new Error("Agent package ID is not safe for a local Profile.");let n=await te(),o=n.state.sourcePath;await pt(o);let r=u.join(o,"agents");await v(r,{recursive:!0});let i=u.join(r,t.agentId),a=k(i);if(a&&e.overwrite!==!0)throw new Error(`Agent "${t.agentId}" already exists. Confirm replacement to install this version.`);let l=u.join(r,`.${t.agentId}.${tt()}.installing`),c=u.join(r,`.${t.agentId}.${tt()}.backup`),d=await T(n.config.repoPath),g=JSON.stringify(d),P=!1,x=!1;try{await Hn(l,t),a&&(await Pe(i,c),P=!0),await Pe(l,i),x=!0;let S=d.profiles[n.config.profile];if(!S)throw new Error(`Profile "${n.config.profile}" was not found.`);let M=new Set(S.enabledAgents??[]);M.add(t.agentId),S.enabledAgents=[...M],S.defaultAgent||(S.defaultAgent=t.agentId),S.agentNames={...S.agentNames??{},[t.agentId]:t.title},await Q(n.config.repoPath,d),P&&await he(c,{recursive:!0,force:!0})}catch(S){throw await he(l,{recursive:!0,force:!0}),x&&await he(i,{recursive:!0,force:!0}),P&&k(c)&&await Pe(c,i),JSON.stringify(d)!==g&&await Q(n.config.repoPath,JSON.parse(g)).catch(()=>{}),S}return{state:await j(),agentId:t.agentId,versionId:t.versionId,digest:t.digest}}s(Go,"installAgentPackageIntoActiveProfile");async function j(){let t=(await O()).openpondProfile;return t?z(t):ut()}s(j,"loadOpenPondProfileState");function ye(e){return{source:e.source??"local",repositoryId:e.repositoryId?.trim()||u.resolve(e.repoPath),profileId:e.profile}}s(ye,"openPondProfileRef");async function Rn(){let e=(await O()).openpondProfile;if(!e)return{lastUsed:null,profiles:[]};let t=A(e),n=await Promise.all(t.map(async o=>{let r=await z({repoPath:o.repoPath,profile:o.profile,mode:"local",...o.lastCheck?{lastCheck:o.lastCheck}:{},...o.lastPush?{lastPush:o.lastPush}:{}});return{ref:ye(o),name:o.profile,repoPath:o.repoPath,sourcePath:r.sourcePath,state:r}}));return{lastUsed:ye({repoPath:e.repoPath,profile:e.profile,source:A(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.source,repositoryId:A(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.repositoryId}),profiles:n}}s(Rn,"loadOpenPondProfileLibrary");async function bn(e){if(!e)return j();let t=(await O()).openpondProfile,n=A(t).find(o=>o.source===e.source&&o.repositoryId===e.repositoryId&&o.profile===e.profileId);return n?z({repoPath:n.repoPath,profile:n.profile,mode:"local",...n.lastCheck?{lastCheck:n.lastCheck}:{},...n.lastPush?{lastPush:n.lastPush}:{}}):ut(`Profile "${e.profileId}" is not installed on this device.`)}s(bn,"loadOpenPondProfileStateForRef");async function Ho(e){let t=(await O()).openpondProfile,n=A(t).find(o=>o.source===e.source&&o.repositoryId===e.repositoryId&&o.profile===e.profileId);if(!n)throw new Error(`Profile "${e.profileId}" is not installed on this device.`);return await L({openpondProfile:ee(t,n.repoPath,n.profile)}),j()}s(Ho,"selectOpenPondProfile");async function No(e){let t=(await O()).openpondProfile;if(!t)return{lastUsed:null,profiles:[]};let n=A(t).filter(i=>i.source!==e.source||i.repositoryId!==e.repositoryId||i.profile!==e.profileId);if(n.length===0)return await L({openpondProfile:null}),{lastUsed:null,profiles:[]};let r=u.resolve(t.repoPath)===u.resolve(A(t).find(i=>i.source===e.source&&i.repositoryId===e.repositoryId&&i.profile===e.profileId)?.repoPath??"")&&t.profile===e.profileId?n[0]:n.find(i=>u.resolve(i.repoPath)===u.resolve(t.repoPath)&&i.profile===t.profile)??n[0];return await L({openpondProfile:{repoPath:r.repoPath,profile:r.profile,mode:"local",profiles:n,...r.lastCheck?{lastCheck:r.lastCheck}:{},...r.lastPush?{lastPush:r.lastPush}:{}}}),Rn()}s(No,"removeOpenPondProfile");async function Uo(e,t){return z({mode:"local",repoPath:e,profile:t})}s(Uo,"inspectOpenPondProfileSource");async function z(e){try{let t=await T(e.repoPath),n=Ce(t,e.repoPath,e.profile),o=await xn(t,e.profile),r=mt({manifest:t,profile:e.profile,profileSourcePath:n,agents:o}),[i,a,l,c]=await Promise.all([N(e.repoPath),ze(r),Qe(n),_n(n,r)]),d=ot(e),g=qn(i,e.profile),P=K({actionCatalog:a.actionCatalog,sourceSetupRequirements:a.sourceSetupRequirements}),x=Ln({agents:o,actionCatalog:a.actionCatalog,catalog:a.catalog,diff:g,git:i,hosted:d,lastCheck:e.lastCheck??null,error:null});return{mode:"local",repoPath:e.repoPath,activeProfile:e.profile,sourcePath:n,manifestPath:u.join(e.repoPath,F),agents:o,skills:l.skills,evals:c,git:i,catalog:a.catalog,skillCatalog:l.skillCatalog,actionCatalog:a.actionCatalog,sourceSetupRequirements:a.sourceSetupRequirements,setupGate:P,diff:g,hosted:d,summary:x,lastCheck:e.lastCheck??null,error:null}}catch(t){let n=await N(e.repoPath).catch(()=>null),o=t instanceof Error?t.message:String(t);return{mode:"local",repoPath:e.repoPath,activeProfile:e.profile,sourcePath:null,manifestPath:u.join(e.repoPath,F),agents:[],skills:[],evals:[],git:n,catalog:ue(o),skillCatalog:de(o),actionCatalog:[],sourceSetupRequirements:[],setupGate:fe(),diff:Y(),hosted:ot(e),summary:pe(o),lastCheck:e.lastCheck??null,error:o}}}s(z,"loadOpenPondProfileStateForConfig");async function Do(e){return z({repoPath:u.resolve(e.repoPath),profile:e.profileId,mode:"local"})}s(Do,"loadOpenPondProfileStateFromSource");async function te(){let e=(await O()).openpondProfile;if(!e)throw new Error("No active OpenPond profile. Run `openpond init` or `openpond profile load --path <dir>`.");let t=await j();if(t.error)throw new Error(t.error);if(!t.sourcePath)throw new Error("Active OpenPond profile has no source path.");return{config:e,state:t}}s(te,"requireActiveLocalProfile");async function Bo(e){let t=await te(),n=e.command==="run"?e.args??[]:[],o=e.command==="run"?t.state.actionCatalog.find(l=>l.id===n[0]):null,r=u.resolve(e.cwd??o?.sourcePath??t.state.sourcePath),i=e.command==="run"?nt(r,e.args??[],o?.sourceActionId??null):null;if(e.command==="run"&&i){let l=i[0],c=u.resolve(t.state.sourcePath)===r?{actionCatalog:t.state.actionCatalog,sourceSetupRequirements:t.state.sourceSetupRequirements}:await Be(r);oe(l,K({actionCatalog:c.actionCatalog,sourceSetupRequirements:c.sourceSetupRequirements,actionId:l}))}let a=await ft({command:e.command,args:e.command==="run"?i??nt(r,e.args??[]):e.args,cwd:r,inherit:e.inherit,throwOnFailure:!1});if((e.command==="inspect"||e.command==="build"||e.command==="validate"||e.command==="eval")&&await Se(e.command,a.code),a.code!==0){let l=a.stderr.trim()||a.stdout.trim();throw new Error(l||`${e.command} failed with exit code ${a.code??"unknown"}`)}return a}s(Bo,"runProfileSdkCommand");async function ft(e){let t=u.resolve(e.cwd),n=Un(),o=e.command==="run"?[...n.args,e.command,...e.args??[]]:[...n.args,e.command,"--cwd",t,...e.args??[]],r=await wt(n.command,o,{cwd:t,inherit:e.inherit,timeoutMs:e.timeoutMs,maxOutputBytes:e.maxOutputBytes});if(e.throwOnFailure!==!1&&r.code!==0){let i=St(r,e.command);throw new Error(i||`${e.command} failed with exit code ${r.code??"unknown"}`)}return r}s(ft,"runAgentSdkProjectCommand");function nt(e,t,n=null){let[o,...r]=t;if(!o||o.startsWith("--"))throw new Error("run requires an action name");return[n??o,"--cwd",e,...r]}s(nt,"runCommandArgs");async function zo(e){let t=!e||e==="all"?["inspect","build","validate","eval"]:[e],n=await te(),o=await T(n.config.repoPath),r=mt({manifest:o,profile:n.config.profile,profileSourcePath:n.state.sourcePath,agents:n.state.agents});if(r.length===0){if(t.some(i=>i!=="inspect"&&i!=="build"&&i!=="validate"&&i!=="eval"))throw new Error("check kind must be one of inspect, build, validate, eval, all");await Se("validate",0);return}for(let i of t){if(i!=="inspect"&&i!=="build"&&i!=="validate"&&i!=="eval")throw new Error("check kind must be one of inspect, build, validate, eval, all");for(let a of r)await An({command:i,source:a,profileSourcePath:n.state.sourcePath,sourceCount:r.length})}}s(zo,"runProfileCheck");async function An(e){let t=e.command==="inspect"||e.command==="validate"||e.command==="eval"?["--json"]:[];if(e.sourceCount>1){let o=u.relative(e.profileSourcePath,e.source.sourcePath)||".";console.log(`
|
|
8
|
+
`,"utf8")}s(xt,"ensureProfileGitignoreRules");async function N(e){if(!re(ie.join(e,".git")))return{isRepo:!1,branch:null,head:null,shortHead:null,dirty:!1,upstream:null,ahead:null,behind:null,remoteUrl:null,files:[],error:null};let t=await R(e,["rev-parse","--is-inside-work-tree"]);if(t.code!==0||t.stdout.trim()!=="true")return{isRepo:!1,branch:null,head:null,shortHead:null,dirty:!1,upstream:null,ahead:null,behind:null,remoteUrl:null,files:[],error:t.stderr.trim()||t.stdout.trim()||"not a Git work tree"};let[n,o,r,i,a]=await Promise.all([B(e,["branch","--show-current"]),B(e,["rev-parse","HEAD"]),R(e,["status","--porcelain=v1","-uall"]),B(e,["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"]),B(e,["remote","get-url","origin"])]),l=r.code===0?Mt(r.stdout):[],c=i?await Lt(e):{ahead:null,behind:null},d=o||null;return{isRepo:!0,branch:n||null,head:d,shortHead:d?d.slice(0,12):null,dirty:l.length>0,upstream:i,ahead:c.ahead,behind:c.behind,remoteUrl:a,files:l,error:r.code===0?null:H("git status",r)}}s(N,"loadProfileGitState");async function $e(e,t){let n=await N(e);if(!n.isRepo)throw new Error(n.error??"Active OpenPond profile source is not a Git repo.");if(!n.dirty)return{committed:!1,stdout:"",stderr:"",state:n};let o=await R(e,["add","-A"]);if(o.code!==0)throw new Error(H("git add",o));let r=await R(e,["commit","-m",t]);if(r.code!==0)throw new Error(H("git commit",r));return{committed:!0,stdout:r.stdout,stderr:r.stderr,state:await N(e)}}s($e,"commitProfileChanges");async function qe(e){return B(e,["rev-parse","HEAD"])}s(qe,"profileGitHead");async function _t(e){return(await R(e,["rev-parse","--verify","HEAD"])).code===0}s(_t,"hasGitHead");async function Lt(e){let t=await R(e,["rev-list","--left-right","--count","@{u}...HEAD"]);if(t.code!==0)return{ahead:null,behind:null};let[n,o]=t.stdout.trim().split(/\s+/),r=n?Number.parseInt(n,10):Number.NaN,i=o?Number.parseInt(o,10):Number.NaN;return{ahead:Number.isFinite(i)?i:null,behind:Number.isFinite(r)?r:null}}s(Lt,"loadAheadBehind");async function B(e,t){let n=await R(e,t);return n.code!==0?null:n.stdout.trim()||null}s(B,"gitText");function Mt(e){return e.split(/\r?\n/).map(t=>t.trimEnd()).filter(Boolean).map(t=>{let n=t[0]??" ",o=t[1]??" ",r=`${n}${o}`.trim()||"changed",i=t.slice(3),a=i.split(" -> "),l=n===" "?null:n,c=o===" "?null:o,d=a.length===2?a[1]:i,g=a.length===2?a[0]:null;return{path:xe(d),originalPath:g?xe(g):null,indexStatus:l,worktreeStatus:c,status:r,category:$t(l,c)}})}s(Mt,"parsePorcelainStatus");function $t(e,t){return e==="?"&&t==="?"?"untracked":e==="R"||t==="R"?"renamed":e==="A"||t==="A"?"added":e==="D"||t==="D"?"deleted":e==="M"||t==="M"?"modified":"changed"}s($t,"gitChangeCategory");function xe(e){let t=e.trim();if(!t.startsWith('"')||!t.endsWith('"'))return t;try{return JSON.parse(t)}catch{return t.slice(1,-1)}}s(xe,"unquoteGitPath");function H(e,t){return t.stderr.trim()||t.stdout.trim()||`${e} failed with exit code ${t.code??"unknown"}`}s(H,"gitFailureMessage");async function R(e,t,n={}){return new Promise((o,r)=>{let i=vt("git",t,{cwd:e,env:n.env,stdio:"pipe"}),a="",l="";i.stdout?.on("data",c=>{a+=String(c)}),i.stderr?.on("data",c=>{l+=String(c)}),i.on("error",r),i.on("close",c=>{o({code:c,stdout:a,stderr:l})}),n.input!==void 0?i.stdin?.end(n.input):i.stdin?.end()})}s(R,"runGitCommand");var ae=1500,Te=8*1024*1024,le=100*1024*1024,ce=8,jt={maxFiles:ae,maxFileBytes:Te,maxTotalBytes:le,concurrency:ce},Ft={mode:"single_json_payload",chunkingSupported:!1};async function Tt(e){let t=await R(e,["ls-files","-z"]);if(t.code!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"git ls-files failed for profile source upload");let n=t.stdout.split("\0").map(c=>c.trim()).filter(Boolean).filter(c=>{let d=c.replace(/\\/g,"/");return Fe(d)&&!Gt(d)}).sort();if(n.length===0)throw new Error("No committed profile source files found to upload.");if(n.length>ae)throw new Error(`Too many profile source files to upload: ${n.length} > ${ae}`);let o=(await je(n,ce,async c=>{let d=se.resolve(e,c),g=se.relative(e,d).replace(/\\/g,"/");if(!Fe(g))throw new Error(`Profile source path escapes repo: ${c}`);let P=await qt(d);if(!P.isFile())return null;if(P.size>Te)throw new Error(`Profile source file is too large: ${c} (${P.size} bytes)`);return{path:g,absolutePath:d,size:P.size,mtimeMs:Math.trunc(P.mtimeMs),ctimeMs:Math.trunc(P.ctimeMs)}})).filter(c=>c!==null),r=0;for(let c of o)if(r+=c.size,r>le)throw new Error(`Profile source upload is too large: ${r} > ${le}`);let i=await Ae(e),a=await je(o,ce,async c=>Ie(c,i));await ve(e,a).catch(()=>{});let l=a.map(c=>c.entry);return{entries:l,fileCount:l.length,totalBytes:r,limits:jt,transport:Ft}}s(Tt,"collectProfileSourceUploadEntries");async function je(e,t,n){let o=new Array(e.length),r=0,i=Math.max(1,Math.min(t,e.length));return await Promise.all(Array.from({length:i},async()=>{for(;r<e.length;){let a=r;r+=1,o[a]=await n(e[a],a)}})),o}s(je,"mapWithConcurrency");function Fe(e){return e.length>0&&!e.includes("\0")&&!se.isAbsolute(e)&&!e.split(/[\\/]+/).some(t=>!t||t==="."||t==="..")}s(Fe,"isSafeProfileSourcePath");function Gt(e){return e.split(/[\\/]+/).some((t,n,o)=>{let r=t.toLowerCase();if(r===".git"||r==="node_modules"||r===".bun"||r===".env"||r.startsWith(".env.")||e.replace(/\\/g,"/")===be)return!0;if(r!==".openpond")return!1;let i=o[n+1]?.toLowerCase();return i==="goals"||i==="traces"||i==="vendor"||i==="eval-results.json"||i==="artifact-index.json"})}s(Gt,"shouldSkipProfileSourcePath");function Ht(e){let t=y(e.checkResult),n=y(t?.deployPlan)??y(e.deployPlan),o=y(n?.source),r=y(n?.checks),i=y(t?.sourceCheckStatus);return{status:e.status,agentId:e.agentId,deployPlanStatus:f(n?.status),canRun:Ge(n?.canRun),canDeploy:Ge(n?.canDeploy),sourceRef:f(o?.sourceRef),sourceCommitSha:f(o?.sourceCommitSha),manifestHash:f(o?.manifestHash),manifestPath:f(o?.manifestPath),setupCommands:b(r?.setupCommands),validationCommands:b(r?.validationCommands),requiredChecks:b(r?.requiredChecks),evalNames:b(r?.evalNames),blockedReasons:b(n?.blockedReasons),staleReasons:b(n?.staleReasons),runtimeId:f(i?.latestRuntimeId),sandboxId:f(i?.latestSandboxId),traceArtifactRefs:b(i?.traceArtifactRefs),evalResultArtifactRefs:b(i?.evalResultArtifactRefs),validatorArtifactRefs:b(i?.validatorArtifactRefs),checkedAt:e.checkedAt??new Date().toISOString(),error:e.error??null}}s(Ht,"hostedSourceCheckStatusFromPayload");function Nt(e){let t=y(e.publishResult),n=y(t?.activeManifestSnapshot)??y(t?.manifestSnapshot)??y(t?.snapshot);return{status:e.status??"published",agentId:e.agentId,snapshotId:f(n?.id),sourceRef:f(n?.sourceRef),sourceCommitSha:f(n?.sourceCommitSha),manifestHash:f(n?.manifestHash),manifestPath:f(n?.manifestPath),buildStatus:f(n?.buildStatus),validationStatus:f(n?.validationStatus),evalStatus:f(n?.evalStatus),publishedAt:f(t?.publishedAt)??f(n?.publishedAt),error:e.error??null}}s(Nt,"hostedPublishStatusFromPayload");function Ut(e){let t=y(e.runResult),n=y(t?.run),o=y(n?.runtimeSource),r=y(n?.metadata),i=y(r?.sourceSummary),a=y(r?.setupGate),l=y(r?.responseSummary),c=y(r?.traceSummary),d=y(r?.evalSummary);return{status:f(n?.status)??(e.error?"failed":"running"),agentId:f(n?.agentId)??e.agentId,runId:f(n?.id),runtimeId:f(n?.runtimeId),sandboxId:f(n?.sandboxId),sourceRef:f(o?.sourceRef)??f(i?.sourceRef)??f(r?.sourceRef),sourceCommitSha:f(o?.sourceCommitSha)??f(i?.sourceCommitSha)??f(r?.hostedHead),manifestHash:f(o?.manifestHash)??f(i?.manifestHash),setupGateStatus:f(a?.status),setupRequirementRefs:Bt(a),artifactRefs:b(l?.artifactRefs),traceArtifactRefs:b(c?.artifactRefs),evalArtifactRefs:b(d?.artifactRefs),startedAt:f(n?.createdAt),completedAt:f(n?.completedAt),error:e.error??null}}s(Ut,"hostedRunSummaryFromPayload");function Dt(e){return e?.status?e.status==="succeeded"||e.status==="passed"?"passed":e.status==="failed"||e.status==="cancelled"?"failed":"running":"not_started"}s(Dt,"hostedRunStatusFromRunSummary");function Bt(e){return e?(Array.isArray(e.requirements)?e.requirements:Array.isArray(e.blockingRequirements)?e.blockingRequirements:[]).map(n=>{let o=y(n);return f(o?.ref)??f(o?.id)??f(o?.label)}).filter(n=>!!n):[]}s(Bt,"setupRequirementRefs");function y(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(y,"record");function f(e){return typeof e=="string"&&e.trim()?e.trim():null}s(f,"text");function Ge(e){return typeof e=="boolean"?e:null}s(Ge,"booleanValue");function b(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(b,"textArray");import{createRequire as st}from"node:module";import{createHash as et,randomUUID as tt}from"node:crypto";import{spawn as hn}from"node:child_process";import{existsSync as k}from"node:fs";import{cp as yn,mkdir as v,readFile as at,readdir as lt,rename as Pe,rm as he,symlink as wn,writeFile as D}from"node:fs/promises";import u from"node:path";function ue(e=null){return{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!0,error:e}}s(ue,"emptyProfileCatalogState");function de(e=null){return{skillCount:0,generatedAt:null,stale:!0,error:e}}s(de,"emptyProfileSkillCatalogState");function fe(){return{status:"ready",requirementCount:0,blockingCount:0,optionalMissingCount:0,readyCount:0,requirements:[],blockingRequirements:[]}}s(fe,"emptyProfileSetupGate");function Y(){return{changedAgents:[],newAgents:[],deletedAgents:[],changedSkills:[],changedActions:[],changedExtensions:[],setupChanges:[],envRequirementChanges:[],files:[]}}s(Y,"emptyProfileDiffSummary");function pe(e=null){return{state:e?"error":"none",message:e??"No active OpenPond profile.",agentCount:0,actionCount:0,defaultAction:null,checkFresh:!1,checkStaleReason:e??"No active profile.",localHead:null,hostedHead:null}}s(pe,"emptyProfileSummary");import{existsSync as U}from"node:fs";import{readFile as zt,stat as Jt}from"node:fs/promises";import V from"node:path";var He=".openpond/agent-manifest.json",Ne=".openpond/action-registry.json",Wt=".openpond/source-upload-metadata.json",Kt=".openpond/agent-package-origin.json";async function Be(e){return Je({agentId:"default",sourcePath:e,preferred:!0})}s(Be,"loadProfileActionCatalog");async function ze(e){if(e.length===0)return{catalog:{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!1,error:null},actionCatalog:[],sourceSetupRequirements:[]};let t=[...e.filter(l=>l.preferred),...e.filter(l=>!l.preferred)],n=await Promise.all(t.map(Je)),o=new Map,r=[];for(let l of n)for(let c of l.actionCatalog){let d=o.has(c.id)?`${c.agentId??"agent"}.${c.sourceActionId??c.id}`:c.id,g=d===c.id?c:{...c,id:d};o.set(d,g),r.push(g)}let i=Vt(n.map(l=>l.catalog.generatedAt)),a=n.map(l=>l.catalog.error).filter(Boolean);return{catalog:{actionCount:r.length,generatedAt:i,manifestPath:n.find(l=>l.catalog.manifestPath)?.catalog.manifestPath??null,registryPath:n.find(l=>l.catalog.registryPath)?.catalog.registryPath??null,stale:n.some(l=>l.catalog.stale),error:a.length>0?a.join("; "):null},actionCatalog:r,sourceSetupRequirements:n.flatMap(l=>l.sourceSetupRequirements)}}s(ze,"loadProfileActionCatalogForSources");async function Je(e){let t=e.sourcePath,n=V.join(t,He),o=V.join(t,Ne),r=V.join(t,Wt),i=V.join(t,Kt);try{let a=await X(n),l=await X(o),c=await X(r),d=w(await X(i)),g=w(w(a)?.inputSchemas),P=De(w(c)?.setupRequirements)??[],x=Xt(P),S=new Map;for(let m of[...ge(w(a)?.actionCatalog),...ge(w(l)?.actions),...ge(w(a)?.actions)]){let $=p(m.id)??p(m.name);if(!$)continue;let C=S.get($),kt=Zt({sourceRequirementsByAction:x,actionId:$,actionName:p(m.name)}),Ct=Qt(De(m.setupRequirements)??C?.setupRequirements??[],kt),Ot={id:$,agentId:e.agentId,sourcePath:t,sourceActionId:$,name:p(m.name)??C?.name??$,label:p(m.label)??C?.label??rn($),description:p(m.description)??C?.description??null,visibility:p(m.visibility)??C?.visibility??"default",inputSchema:on(m.inputSchema,g)??C?.inputSchema??null,outputSchema:We(m.outputSchema)??C?.outputSchema??null,approvalPolicy:w(m.approvalPolicy)??C?.approvalPolicy??null,artifactPolicy:w(m.artifactPolicy)??C?.artifactPolicy??null,setupRequirements:Ct,mcp:w(m.mcp)??C?.mcp??null,schedulePolicy:w(m.schedulePolicy)??C?.schedulePolicy??null,trace:Yt(w(m.trace)??C?.trace??null,d),implementation:w(m.implementation)??C?.implementation??null,invokesModel:typeof m.invokesModel=="boolean"?m.invokesModel:C?.invokesModel};S.set($,Ot)}let M=Array.from(S.values()).filter(m=>m.visibility!=="internal"&&m.visibility!=="debug"),G=[...a?[]:[He],...l?[]:[Ne]],_=await nn([n,o]);return{catalog:{actionCount:M.length,generatedAt:_,manifestPath:U(n)?n:null,registryPath:U(o)?o:null,stale:G.length>0,error:G.length>0?tn(e,G):null},actionCatalog:M,sourceSetupRequirements:P}}catch(a){return{catalog:{actionCount:0,generatedAt:null,manifestPath:U(n)?n:null,registryPath:U(o)?o:null,stale:!0,error:a instanceof Error?a.message:String(a)},actionCatalog:[],sourceSetupRequirements:[]}}}s(Je,"loadProfileActionCatalogSource");function Yt(e,t){if(!t)return e;let n=p(t.versionId),o=p(t.digest);return!n||!o?e:{...e??{},agentVersionId:n,agentPackageDigest:o,validationReceiptIds:Ue(t.validationReceiptIds),evalReceiptIds:Ue(t.evalReceiptIds)}}s(Yt,"mergeAgentPackageTrace");function Ue(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(Ue,"stringArray");function Vt(e){let t=0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&(t=Math.max(t,o))}return t>0?new Date(t).toISOString():null}s(Vt,"latestIso");function Xt(e){let t=new Map;for(let n of e){let o=[p(n.actionId),p(n.sourceActionId),p(n.actionName)].filter(r=>!!r);for(let r of o){let i=t.get(r)??[];i.push(n),t.set(r,i)}}return t}s(Xt,"sourceSetupRequirementsByAction");function Zt(e){return[...e.sourceRequirementsByAction.get(e.actionId)??[],...e.actionName&&e.actionName!==e.actionId?e.sourceRequirementsByAction.get(e.actionName)??[]:[]].map(n=>({...n,source:"source_upload_metadata"}))}s(Zt,"setupRequirementsForActionSource");function Qt(e,t){if(t.length===0)return e;let n=[],o=new Set;for(let r of[...e,...t]){let i=en(r);o.has(i)||(o.add(i),n.push(r))}return n}s(Qt,"mergeSetupRequirements");function en(e){return[p(e.actionId)??p(e.sourceActionId)??p(e.actionName)??"",p(e.kind)??p(e.type)??"",p(e.name)??p(e.key)??p(e.provider)??p(e.tool)??p(e.command)??p(e.packageName)??p(e.path)??p(e.repo)??p(e.url)??p(e.id)??""].join(":")}s(en,"setupRequirementIdentity");function tn(e,t){return[`Profile agent ${e.agentId} at ${e.sourcePath} is missing SDK catalog artifact(s): ${t.join(", ")}.`,"Run `openpond profile check --kind all` after source materialization so each enabled profile agent has inspect/build artifacts."].join(" ")}s(tn,"missingSourceArtifactsMessage");async function X(e){return U(e)?JSON.parse(await zt(e,"utf8")):null}s(X,"readJsonIfExists");async function nn(e){let t=0;for(let n of e){if(!U(n))continue;let o=await Jt(n);t=Math.max(t,o.mtimeMs)}return t>0?new Date(t).toISOString():null}s(nn,"latestMtime");function w(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(w,"asRecord");function ge(e){return Array.isArray(e)?e.filter(t=>!!w(t)):[]}s(ge,"records");function De(e){return Array.isArray(e)?e.filter(t=>!!w(t)):null}s(De,"recordArray");function p(e){return typeof e=="string"&&e.trim()?e.trim():null}s(p,"text");function We(e){return p(e)??w(e)}s(We,"schemaValue");function on(e,t){let n=We(e);return typeof n!="string"?n:w(t?.[n])??n}s(on,"resolvedSchemaValue");function rn(e){let t=e.replace(/[._-]+/g," ").trim();return t?t.replace(/\b\w/g,n=>n.toUpperCase()):e}s(rn,"titleFromActionId");import{createHash as sn}from"node:crypto";import{existsSync as Xe}from"node:fs";import{readdir as Ze,readFile as an,stat as ln}from"node:fs/promises";import q from"node:path";var me="skills",Z="SKILL.md",Ke=8e4;async function Qe(e){let t=q.join(e,me);if(!Xe(t))return{skillCatalog:Ye({stale:!1}),skills:[]};try{let n=await Ze(t,{withFileTypes:!0}),o=(await Promise.all(n.filter(i=>i.isDirectory()).map(i=>un(e,i.name)))).sort((i,a)=>i.name.localeCompare(a.name)||i.path.localeCompare(a.path));fn(o);let r=await pn(e,o);return{skillCatalog:{skillCount:o.length,generatedAt:r,stale:!1,error:null},skills:o}}catch(n){return{skillCatalog:Ye({stale:!0,error:n instanceof Error?n.message:String(n)}),skills:[]}}}s(Qe,"loadProfileSkills");function cn(e){let t=[],n=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/.exec(e);if(!n)return{name:null,description:null,body:e.trim(),messages:["SKILL.md must start with YAML frontmatter bounded by ---."]};let o=n[1]??"",r=(n[2]??"").trim(),i;try{i=Re.load(o)}catch(d){t.push(`SKILL.md frontmatter is invalid YAML: ${d instanceof Error?d.message:String(d)}`)}let a=mn(i),l=Ve(a?.name),c=Ve(a?.description);return l||t.push("Skill frontmatter must include a non-empty name."),c||t.push("Skill frontmatter must include a non-empty description."),r||t.push("Skill body must be non-empty markdown."),{name:l,description:c,body:r,messages:t}}s(cn,"parseProfileSkillMarkdown");function Ye(e={}){return{skillCount:0,generatedAt:null,stale:e.stale??!0,error:e.error??null}}s(Ye,"emptyProfileSkillCatalogState");async function un(e,t){let n=q.join(me,t,Z).replace(/\\/g,"/"),o=q.join(e,n),r=[],i=q.join(e,me,t),a=await dn(i),l="";Xe(o)?l=await an(o,"utf8"):r.push(`Missing ${Z}.`),l.length>Ke&&r.push(`Skill markdown exceeds the limit of ${Ke} characters.`);let c=cn(l);r.push(...c.messages);let d=c.name??t,g=c.description??"";return gn(d)||r.push("Skill name must be lowercase kebab-case."),d!==t&&r.push(`Skill name must match its directory name (${t}).`),{name:d,description:g,path:n,scope:"profile",enabled:r.length===0,sourcePath:e,charCount:l.length,sourceHash:Pn(l),validationStatus:r.length>0?"error":"valid",validationMessages:r,resourceFiles:a.filter(P=>P!==Z)}}s(un,"loadProfileSkillDirectory");async function dn(e){let t=[];async function n(o,r){let i=await Ze(o,{withFileTypes:!0});await Promise.all(i.map(async a=>{let l=r?`${r}/${a.name}`:a.name;a.isDirectory()?await n(q.join(o,a.name),l):a.isFile()&&t.push(l)}))}return s(n,"visit"),await n(e,""),t.sort()}s(dn,"listPackageFiles");function fn(e){let t=new Map;for(let n of e)t.set(n.name,(t.get(n.name)??0)+1);for(let n of e)(t.get(n.name)??0)<=1||(n.enabled=!1,n.validationStatus="error",n.validationMessages=[...n.validationMessages,`Duplicate skill name: ${n.name}`])}s(fn,"markDuplicateSkillNames");async function pn(e,t){let n=0;for(let o of t){let r=q.dirname(q.join(e,o.path)),i=[Z,...o.resourceFiles];for(let a of i){let l=await ln(q.join(r,a)).catch(()=>null);l?.isFile()&&(n=Math.max(n,l.mtimeMs))}}return n>0?new Date(n).toISOString():null}s(pn,"latestSkillMtime");function gn(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}s(gn,"isKebabCaseSkillName");function mn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(mn,"asRecord");function Ve(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}s(Ve,"text");function Pn(e){return sn("sha256").update(e).digest("hex")}s(Pn,"sha256Hex");var F="openpond-profile.json",Sn="settings/profile.yaml",ct="default",E="default";function kn(e,t){let n=e?.defaultAgent??E,o=e?.enabledAgents&&e.enabledAgents.length>0?e.enabledAgents:[n];return{...e??{},path:t,defaultAgent:n,enabledAgents:o}}s(kn,"mergeProfileRepoManifestEntry");function ee(e,t,n){let o=A(e);if(e){let l=o.findIndex(d=>u.resolve(d.repoPath)===u.resolve(e.repoPath)&&d.profile===e.profile),c={source:o[l]?.source??"local",repositoryId:o[l]?.repositoryId??u.resolve(e.repoPath),repoPath:u.resolve(e.repoPath),profile:e.profile,...e.lastCheck?{lastCheck:e.lastCheck}:{},...e.lastPush?{lastPush:e.lastPush}:{}};l>=0?o[l]=c:o.push(c)}let r=o.findIndex(l=>u.resolve(l.repoPath)===u.resolve(t)&&l.profile===n),i=r>=0?o[r]:{source:"local",repositoryId:u.resolve(t),repoPath:u.resolve(t),profile:n};return r<0&&o.push(i),{repoPath:u.resolve(t),profile:n,mode:"local",profiles:o,...i.lastCheck?{lastCheck:i.lastCheck}:{},...i.lastPush?{lastPush:i.lastPush}:{}}}s(ee,"mergeActiveLocalProfileConfig");function A(e){if(!e)return[];let t=e.profiles?.map(n=>({...n}))??[];return t.some(n=>u.resolve(n.repoPath)===u.resolve(e.repoPath)&&n.profile===e.profile)||t.push({source:"local",repositoryId:u.resolve(e.repoPath),repoPath:u.resolve(e.repoPath),profile:e.profile,...e.lastCheck?{lastCheck:e.lastCheck}:{},...e.lastPush?{lastPush:e.lastPush}:{}}),t}s(A,"profileConfigEntries");var Cn=st(import.meta.url);function On(){return u.join(Oe(),"library","profiles","default-repo")}s(On,"defaultLocalProfileRepoPath");function ut(e=null){return{mode:"none",repoPath:null,activeProfile:null,sourcePath:null,manifestPath:null,agents:[],skills:[],evals:[],git:null,catalog:ue(e),skillCatalog:de(e),actionCatalog:[],sourceSetupRequirements:[],setupGate:fe(),diff:Y(),hosted:null,summary:pe(e),lastCheck:null,error:e}}s(ut,"emptyProfileState");async function qo(e={}){let t=u.resolve(e.repoPath??On()),n=ke(e.profile),o=u.join("profiles",n),r=u.join(t,o),i=e.template??"blank-agent",a=i==="blank-profile";await v(t,{recursive:!0});let l=k(u.join(t,F)),c=await T(t).catch(()=>Tn(n,o));if(a&&l&&c.profiles[n])throw new Error(`Profile "${n}" already exists in ${t}.`);c.defaultProfile=c.defaultProfile||n,c.profiles[n]=kn(c.profiles[n],o),a&&(c.profiles[n].enabledAgents=[]),a?await v(r,{recursive:!0}):await In(r,i,!!e.force),await pt(r),await vn(t,r,n,{includeDefaultAgent:!a}),await Q(t,c),await Me(t);let d=(await O()).openpondProfile;return await L({openpondProfile:ee(d,t,n)}),j()}s(qo,"initLocalProfileRepo");async function jo(e,t,n){let o=u.resolve(e),r=await T(o),i=ke(t??r.defaultProfile);Ce(r,o,i);let a=(await O()).openpondProfile,l=ee(a,o,i);return dt(l,o,i,n),await L({openpondProfile:l}),j()}s(jo,"loadLocalProfileRepo");async function Fo(e,t,n){let o=u.resolve(e),r=await T(o),i=ke(t??r.defaultProfile);Ce(r,o,i);let a=(await O()).openpondProfile,l=ee(a,o,i);return dt(l,o,i,n),a&&(l.repoPath=a.repoPath,l.profile=a.profile,l.lastCheck=a.lastCheck,l.lastPush=a.lastPush),await L({openpondProfile:l}),bn(ye({repoPath:o,profile:i,source:n?.source,repositoryId:n?.repositoryId}))}s(Fo,"registerLocalProfileRepo");function dt(e,t,n,o){o&&(e.profiles=A(e).map(r=>u.resolve(r.repoPath)===t&&r.profile===n?{...r,source:o.source,repositoryId:o.repositoryId}:r))}s(dt,"applyProfileIdentity");async function To(e,t){let n=e.trim(),o=Fn(t);if(!n)throw new Error("Agent ID is required.");let i=(await O()).openpondProfile;if(!i)throw new Error("No active local Profile.");let a=await T(i.repoPath),l=a.profiles[i.profile];if(!l)throw new Error(`Profile "${i.profile}" was not found.`);let c=l.defaultAgent??E;if(!(l.enabledAgents??[c]).includes(n))throw new Error(`Agent "${n}" was not found in Profile "${i.profile}".`);let g={...l.agentNames??{}};return o===n?delete g[n]:g[n]=o,Object.keys(g).length?l.agentNames=g:delete l.agentNames,await Q(i.repoPath,a),j()}s(To,"renameActiveProfileAgent");async function Go(e){let t=e.agentPackage;if(Gn(t),!/^[a-z0-9][a-z0-9._-]{0,190}$/.test(t.agentId))throw new Error("Agent package ID is not safe for a local Profile.");let n=await te(),o=n.state.sourcePath;await pt(o);let r=u.join(o,"agents");await v(r,{recursive:!0});let i=u.join(r,t.agentId),a=k(i);if(a&&e.overwrite!==!0)throw new Error(`Agent "${t.agentId}" already exists. Confirm replacement to install this version.`);let l=u.join(r,`.${t.agentId}.${tt()}.installing`),c=u.join(r,`.${t.agentId}.${tt()}.backup`),d=await T(n.config.repoPath),g=JSON.stringify(d),P=!1,x=!1;try{await Hn(l,t),a&&(await Pe(i,c),P=!0),await Pe(l,i),x=!0;let S=d.profiles[n.config.profile];if(!S)throw new Error(`Profile "${n.config.profile}" was not found.`);let M=new Set(S.enabledAgents??[]);M.add(t.agentId),S.enabledAgents=[...M],S.defaultAgent||(S.defaultAgent=t.agentId),S.agentNames={...S.agentNames??{},[t.agentId]:t.title},await Q(n.config.repoPath,d),P&&await he(c,{recursive:!0,force:!0})}catch(S){throw await he(l,{recursive:!0,force:!0}),x&&await he(i,{recursive:!0,force:!0}),P&&k(c)&&await Pe(c,i),JSON.stringify(d)!==g&&await Q(n.config.repoPath,JSON.parse(g)).catch(()=>{}),S}return{state:await j(),agentId:t.agentId,versionId:t.versionId,digest:t.digest}}s(Go,"installAgentPackageIntoActiveProfile");async function j(){let t=(await O()).openpondProfile;return t?z(t):ut()}s(j,"loadOpenPondProfileState");function ye(e){return{source:e.source??"local",repositoryId:e.repositoryId?.trim()||u.resolve(e.repoPath),profileId:e.profile}}s(ye,"openPondProfileRef");async function Rn(){let e=(await O()).openpondProfile;if(!e)return{lastUsed:null,profiles:[]};let t=A(e),n=await Promise.all(t.map(async o=>{let r=await z({repoPath:o.repoPath,profile:o.profile,mode:"local",...o.lastCheck?{lastCheck:o.lastCheck}:{},...o.lastPush?{lastPush:o.lastPush}:{}});return{ref:ye(o),name:o.profile,repoPath:o.repoPath,sourcePath:r.sourcePath,state:r}}));return{lastUsed:ye({repoPath:e.repoPath,profile:e.profile,source:A(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.source,repositoryId:A(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.repositoryId}),profiles:n}}s(Rn,"loadOpenPondProfileLibrary");async function bn(e){if(!e)return j();let t=(await O()).openpondProfile,n=A(t).find(o=>o.source===e.source&&o.repositoryId===e.repositoryId&&o.profile===e.profileId);return n?z({repoPath:n.repoPath,profile:n.profile,mode:"local",...n.lastCheck?{lastCheck:n.lastCheck}:{},...n.lastPush?{lastPush:n.lastPush}:{}}):ut(`Profile "${e.profileId}" is not installed on this device.`)}s(bn,"loadOpenPondProfileStateForRef");async function Ho(e){let t=(await O()).openpondProfile,n=A(t).find(o=>o.source===e.source&&o.repositoryId===e.repositoryId&&o.profile===e.profileId);if(!n)throw new Error(`Profile "${e.profileId}" is not installed on this device.`);return await L({openpondProfile:ee(t,n.repoPath,n.profile)}),j()}s(Ho,"selectOpenPondProfile");async function No(e){let t=(await O()).openpondProfile;if(!t)return{lastUsed:null,profiles:[]};let n=A(t).filter(i=>i.source!==e.source||i.repositoryId!==e.repositoryId||i.profile!==e.profileId);if(n.length===0)return await L({openpondProfile:null}),{lastUsed:null,profiles:[]};let r=u.resolve(t.repoPath)===u.resolve(A(t).find(i=>i.source===e.source&&i.repositoryId===e.repositoryId&&i.profile===e.profileId)?.repoPath??"")&&t.profile===e.profileId?n[0]:n.find(i=>u.resolve(i.repoPath)===u.resolve(t.repoPath)&&i.profile===t.profile)??n[0];return await L({openpondProfile:{repoPath:r.repoPath,profile:r.profile,mode:"local",profiles:n,...r.lastCheck?{lastCheck:r.lastCheck}:{},...r.lastPush?{lastPush:r.lastPush}:{}}}),Rn()}s(No,"removeOpenPondProfile");async function Uo(e,t){return z({mode:"local",repoPath:e,profile:t})}s(Uo,"inspectOpenPondProfileSource");async function z(e){try{let t=await T(e.repoPath),n=Ce(t,e.repoPath,e.profile),o=await xn(t,e.profile),r=mt({manifest:t,profile:e.profile,profileSourcePath:n,agents:o}),[i,a,l,c]=await Promise.all([N(e.repoPath),ze(r),Qe(n),_n(n,r)]),d=ot(e),g=qn(i,e.profile),P=K({actionCatalog:a.actionCatalog,sourceSetupRequirements:a.sourceSetupRequirements}),x=Ln({agents:o,actionCatalog:a.actionCatalog,catalog:a.catalog,diff:g,git:i,hosted:d,lastCheck:e.lastCheck??null,error:null});return{mode:"local",repoPath:e.repoPath,activeProfile:e.profile,sourcePath:n,manifestPath:u.join(e.repoPath,F),agents:o,skills:l.skills,evals:c,git:i,catalog:a.catalog,skillCatalog:l.skillCatalog,actionCatalog:a.actionCatalog,sourceSetupRequirements:a.sourceSetupRequirements,setupGate:P,diff:g,hosted:d,summary:x,lastCheck:e.lastCheck??null,error:null}}catch(t){let n=await N(e.repoPath).catch(()=>null),o=t instanceof Error?t.message:String(t);return{mode:"local",repoPath:e.repoPath,activeProfile:e.profile,sourcePath:null,manifestPath:u.join(e.repoPath,F),agents:[],skills:[],evals:[],git:n,catalog:ue(o),skillCatalog:de(o),actionCatalog:[],sourceSetupRequirements:[],setupGate:fe(),diff:Y(),hosted:ot(e),summary:pe(o),lastCheck:e.lastCheck??null,error:o}}}s(z,"loadOpenPondProfileStateForConfig");async function Do(e){return z({repoPath:u.resolve(e.repoPath),profile:e.profileId,mode:"local"})}s(Do,"loadOpenPondProfileStateFromSource");async function te(){let e=(await O()).openpondProfile;if(!e)throw new Error("No active OpenPond profile. Run `openpond init` or `openpond profile load --path <dir>`.");let t=await j();if(t.error)throw new Error(t.error);if(!t.sourcePath)throw new Error("Active OpenPond profile has no source path.");return{config:e,state:t}}s(te,"requireActiveLocalProfile");async function Bo(e){let t=await te(),n=e.command==="run"?e.args??[]:[],o=e.command==="run"?t.state.actionCatalog.find(l=>l.id===n[0]):null,r=u.resolve(e.cwd??o?.sourcePath??t.state.sourcePath),i=e.command==="run"?nt(r,e.args??[],o?.sourceActionId??null):null;if(e.command==="run"&&i){let l=i[0],c=u.resolve(t.state.sourcePath)===r?{actionCatalog:t.state.actionCatalog,sourceSetupRequirements:t.state.sourceSetupRequirements}:await Be(r);oe(l,K({actionCatalog:c.actionCatalog,sourceSetupRequirements:c.sourceSetupRequirements,actionId:l}))}let a=await ft({command:e.command,args:e.command==="run"?i??nt(r,e.args??[]):e.args,cwd:r,inherit:e.inherit,throwOnFailure:!1});if((e.command==="inspect"||e.command==="build"||e.command==="validate"||e.command==="eval")&&await Se(e.command,a.code),a.code!==0){let l=a.stderr.trim()||a.stdout.trim();throw new Error(l||`${e.command} failed with exit code ${a.code??"unknown"}`)}return a}s(Bo,"runProfileSdkCommand");async function ft(e){let t=u.resolve(e.cwd),n=Un(),o=e.command==="run"?[...n.args,e.command,...e.args??[]]:[...n.args,e.command,"--cwd",t,...e.args??[]],r=await wt(n.command,o,{cwd:t,inherit:e.inherit,timeoutMs:e.timeoutMs,maxOutputBytes:e.maxOutputBytes});if(e.throwOnFailure!==!1&&r.code!==0){let i=St(r,e.command);throw new Error(i||`${e.command} failed with exit code ${r.code??"unknown"}`)}return r}s(ft,"runAgentSdkProjectCommand");function nt(e,t,n=null){let[o,...r]=t;if(!o||o.startsWith("--"))throw new Error("run requires an action name");return[n??o,"--cwd",e,...r]}s(nt,"runCommandArgs");async function zo(e){let t=!e||e==="all"?["inspect","build","validate","eval"]:[e],n=await te(),o=await T(n.config.repoPath),r=mt({manifest:o,profile:n.config.profile,profileSourcePath:n.state.sourcePath,agents:n.state.agents});if(r.length===0){if(t.some(i=>i!=="inspect"&&i!=="build"&&i!=="validate"&&i!=="eval"))throw new Error("check kind must be one of inspect, build, validate, eval, all");await Se("validate",0);return}for(let i of t){if(i!=="inspect"&&i!=="build"&&i!=="validate"&&i!=="eval")throw new Error("check kind must be one of inspect, build, validate, eval, all");for(let a of r)await An({command:i,source:a,profileSourcePath:n.state.sourcePath,sourceCount:r.length})}}s(zo,"runProfileCheck");async function An(e){let t=e.command==="inspect"||e.command==="validate"||e.command==="eval"?["--json"]:[];if(e.sourceCount>1){let o=u.relative(e.profileSourcePath,e.source.sourcePath)||".";console.log(`
|
|
9
9
|
[profile:${e.source.agentId}] ${e.command} ${o}`)}let n=await ft({command:e.command,args:t,cwd:e.source.sourcePath,inherit:!1,throwOnFailure:!1});if(n.stdout.trim()&&console.log(n.stdout.trim()),n.stderr.trim()&&console.error(n.stderr.trim()),await Se(e.command,n.code),n.code!==0){let o=St(n,e.command);throw new Error([`Profile check failed for enabled agent ${e.source.agentId} at ${e.source.sourcePath}.`,o||`${e.command} failed with exit code ${n.code??"unknown"}`].join(`
|
|
10
10
|
`))}}s(An,"runProfileCheckForSource");async function Jo(e){let t=await te();if(!t.state.repoPath)throw new Error("Active OpenPond profile has no repo path.");let n=await $e(t.state.repoPath,e?.trim()||`Update OpenPond profile ${t.state.activeProfile??ct}`);return{committed:n.committed,stdout:n.stdout,stderr:n.stderr,state:await j()}}s(Jo,"commitActiveProfileChanges");async function Wo(e){let t=(await O()).openpondProfile;if(!t)return;let n=A(t).map(o=>u.resolve(o.repoPath)===u.resolve(t.repoPath)&&o.profile===t.profile?{...o,lastPush:e}:o);await L({openpondProfile:{...t,lastPush:e,profiles:n}})}s(Wo,"saveProfilePushStatus");async function Se(e,t){let n=(await O()).openpondProfile;if(!n)return;let o=await qe(n.repoPath).catch(()=>null),r={command:e,status:t===0?"passed":"failed",checkedAt:new Date().toISOString(),exitCode:t,sourceHead:o},i=A(n).map(a=>u.resolve(a.repoPath)===u.resolve(n.repoPath)&&a.profile===n.profile?{...a,lastCheck:r}:a);await L({openpondProfile:{...n,lastCheck:r,profiles:i}})}s(Se,"saveProfileCheckStatus");async function In(e,t,n){if(await v(e,{recursive:!0}),(await lt(e)).length>0&&!n)return;let r=J(),i=u.join(r,"templates",t);if(!k(i))throw new Error(`Unknown agent template "${t}".`);await yn(i,e,{recursive:!0,force:n,errorOnExist:!1}),await En(e,r)}s(In,"ensureProfileSource");async function vn(e,t,n,o={}){if(await v(u.join(e,"profiles"),{recursive:!0}),o.includeDefaultAgent===!1)return;for(let a of["agents","skills","workflows","actions","extensions","prompts","goals","evals","settings","traces"])await v(u.join(t,a),{recursive:!0});let r=u.join(t,Sn);k(r)||await D(r,["schema: openpond.profile.v1",`profile: ${n}`,"agents:",` - id: ${E}`," path: agent/agent.ts"," enabled: true",""].join(`
|
|
11
11
|
`),"utf8");let i=u.join(t,"openpond.lock");k(i)||await D(i,`# OpenPond profile lockfile placeholder
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{a as Ie,b as W,c as x,g as ve,h as oe}from"./chunk-JO7GRBOG.js";import{l as S}from"./chunk-P653BXMY.js";import{a as u}from"./chunk-FTQLQJQV.js";var Se={codex:"Codex",claude_code:"Claude Code",hermes:"Hermes",openclaw:"OpenClaw",opencode:"OpenCode",grok_build:"Grok Build",pi:"Pi",oh_my_pi:"Oh My Pi"},T=32*1024*1024;import{homedir as bt}from"node:os";import{realpath as Ce,stat as le,readdir as It,readFile as vt}from"node:fs/promises";import{resolve as de,join as k,isAbsolute as St}from"node:path";import{opendir as gt,readFile as yt,stat as K}from"node:fs/promises";import{basename as wt,dirname as _t,join as O,resolve as ae}from"node:path";function Ne(t,e){let s=e.HERMES_HOME?.trim();if(s){let i=s.replace(/\$(\w+)|\$\{([^}]+)\}/gu,(o,a,r)=>e[a||r]??o);return ae(i==="~"?t:i.startsWith("~/")?O(t,i.slice(2)):i)}let n=e.HERMES_DATA_DIR_SUFFIX||"";return process.platform==="win32"?O(e.LOCALAPPDATA?.trim()||O(t,"AppData","Local"),`hermes${n}`):O(t,`.hermes${n}`)}u(Ne,"hermesHome");var Te=u(t=>K(t).then(e=>e.isDirectory()).catch(()=>!1),"isDirectory"),Oe=u(t=>K(t).then(e=>e.isFile()).catch(()=>!1),"isFile");async function ce(t,e){let s=[],n=await gt(t).catch(()=>null);if(!n)return s;let i=0;for await(let o of n){if(++i>100)throw new Error("More than 100 profile entries. Select the exact --source-path.");o.isDirectory()&&!o.isSymbolicLink()&&e(o.name)&&s.push(o.name)}return s.sort()}u(ce,"profileNames");async function Ae(t){if(wt(_t(t))==="profiles")return[{root:t}];let e=O(t,"profiles");try{let s=await ce(e,a=>/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(a)),n=[];for(let a of s)await K(O(e,".deleted",a)).then(()=>!0).catch(()=>!1)||await Oe(O(e,a,"state.db"))&&n.push({root:O(e,a)});let i="",o=O(t,"active_profile");if(await K(o).then(a=>a.isFile()&&a.size<=1024).catch(()=>!1)&&(i=(await yt(o,"utf8")).replace(/^\uFEFF/u,"").trim().toLowerCase()),i&&i!=="default"){if(!/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(i))return[{root:t,reason:"Hermes active profile is invalid. Select the exact --source-path."}];let a=n.findIndex(r=>r.root===O(e,i));a<0?n.unshift({root:O(e,i),reason:"Hermes active profile has no retained live state database. Select a profile explicitly."}):n.unshift(...n.splice(a,1))}return(await Oe(O(t,"state.db"))||!n.length)&&n.push({root:t}),n}catch(s){return[{root:t,reason:s instanceof Error?s.message:"Cannot inventory Hermes profiles. Select the exact --source-path."}]}}u(Ae,"hermesLocations");function Y(t){return/^[a-z0-9][a-z0-9._-]{0,63}$/u.test(t)&&!t.endsWith(".")&&!/^(?:con|prn|aux|nul|com[0-9]|lpt[0-9])(?:\.|$)/iu.test(t)}u(Y,"validOmpProfile");async function Re(t,e){let s=O(t,e.PI_CONFIG_DIR||".omp"),n=(e.OMP_PROFILE!==void 0?e.OMP_PROFILE:e.PI_PROFILE)?.trim();if(n&&n!=="default"&&!Y(n))return[{root:s,reason:"Oh My Pi profile is invalid. Select the exact --source-path."}];if(e.PI_CODING_AGENT_SESSION_DIR)return[{root:ae(e.PI_CODING_AGENT_SESSION_DIR)}];let i=(process.platform==="linux"||process.platform==="darwin")&&e.XDG_DATA_HOME?O(e.XDG_DATA_HOME,"omp"):void 0;async function o(a){let r=a?O(s,"profiles",a,"agent"):O(s,"agent"),l=e.PI_PROFILE?.trim(),c=l&&Y(l)?O(s,"profiles",l,"agent"):void 0,p=!a&&e.PI_CODING_AGENT_DIR&&e.PI_CODING_AGENT_DIR!==c?ae(e.PI_CODING_AGENT_DIR):void 0,d=i&&(a?O(i,"profiles",a):i);return{root:(!p||p===r)&&d&&await Te(d)?d:p||r}}if(u(o,"location"),n||e.OMP_PROFILE!==void 0||e.PI_PROFILE!==void 0||e.PI_CODING_AGENT_DIR)return[await o(n&&n!=="default"?n:void 0)];try{let a=new Set(await ce(O(s,"profiles"),Y));if(i)for(let l of await ce(O(i,"profiles"),Y))a.add(l);let r=[await o()];for(let l of[...a].sort()){let c=await o(l);await Te(O(c.root,"sessions"))&&r.push(c)}return r}catch(a){return[{root:s,reason:a instanceof Error?a.message:"Cannot inventory Oh My Pi profiles. Select the exact --source-path."}]}}u(Re,"ompLocations");async function Rs(t){let e=t.home??bt(),s=t.environment??process.env,n={codex:s.CODEX_HOME||k(e,".codex"),claude_code:s.CLAUDE_CONFIG_DIR||k(e,".claude"),hermes:Ne(e,s),openclaw:s.OPENCLAW_STATE_DIR||k(e,".openclaw"),opencode:k(s.XDG_DATA_HOME||k(e,".local/share"),"opencode"),grok_build:s.GROK_HOME||k(e,".grok"),pi:s.PI_CODING_AGENT_DIR||k(e,".pi/agent"),oh_my_pi:k(e,".omp/agent")},i=n.pi,o=!1;if(s.PI_CODING_AGENT_SESSION_DIR)n.pi=de(s.PI_CODING_AGENT_SESSION_DIR);else if(!t.locations?.pi)try{let r=k(i,"settings.json");if((await le(r)).size<=1024*1024){let l=JSON.parse(await vt(r,"utf8"));typeof l.sessionDir=="string"&&l.sessionDir.trim()&&(St(l.sessionDir)?n.pi=l.sessionDir:o=!0)}}catch{}let a=[];for(let r of Object.keys(Se)){let l=t.locations?.[r]?[{root:t.locations[r]}]:r==="hermes"?await Ae(de(n.hermes)):r==="oh_my_pi"?await Re(e,s):[{root:n[r]}];for(let c of l){let p=de(c.root),d=!1,E=!1;try{p=await Ce(p);let h=await le(p);E=h.isFile(),d=h.isDirectory()||E}catch{}if(c.reason&&(d=!1),r==="openclaw"&&d&&!E){let h=k(p,"agents"),_=await It(h,{withFileTypes:!0}).catch(()=>[]),y=[];for(let f of _.slice(0,100)){if(!f.isDirectory()||f.isSymbolicLink())continue;let m=k(h,f.name,"agent","openclaw-agent.sqlite");await le(m).then(b=>b.isFile()).catch(()=>!1)&&y.push(await Ce(m))}if(y.length){for(let f of y)a.push({source:r,root:f,machineId:t.machineId,instanceId:`native-${S([t.machineId,r,f]).slice(0,40)}`,acquisition:"sqlite",available:!0,capabilities:{history:!0,live:!0,nativeResume:!1}});continue}}if(r==="pi"&&o&&!t.locations?.pi){a.push({source:r,root:p,machineId:t.machineId,instanceId:`native-${S([t.machineId,r,p]).slice(0,40)}`,acquisition:"files",available:!1,capabilities:{history:!1,live:!1,nativeResume:!1},reason:"Pi config uses a working-directory-relative sessionDir. Select its resolved directory with --source-path."});continue}a.push({source:r,root:p,machineId:t.machineId,instanceId:`native-${S([t.machineId,r,p]).slice(0,40)}`,acquisition:E&&!/\.(?:db|sqlite)$/u.test(p)?"files":r==="hermes"||r==="opencode"||r==="openclaw"&&E?"sqlite":r==="openclaw"?"bundle":"files",available:d,capabilities:{history:d,live:d&&(r!=="openclaw"||E),nativeResume:!1},...d?{}:{reason:c.reason??"Source location is missing or unreadable. Select a custom location."}})}}return a.filter((r,l)=>a.findIndex(c=>c.instanceId===r.instanceId)===l)}u(Rs,"discoverSources");import{open as Ft,lstat as $t,readdir as Pt,readFile as Ht,realpath as Qe,stat as tt}from"node:fs/promises";import{basename as z,dirname as jt,isAbsolute as ue,join as Q,relative as Bt,resolve as qt,sep as Wt}from"node:path";import{zstdDecompressSync as Gt}from"node:zlib";function A(t,e="milliseconds"){if(typeof t!="number"&&typeof t!="string")return null;let s=new Date(typeof t=="number"&&e==="seconds"?t*1e3:t);return Number.isFinite(s.getTime())?s.toISOString():null}u(A,"connectedTimestamp");function Tt(t){return{path:t.path,contentHash:S(t.text),sizeBytes:new TextEncoder().encode(t.text).length}}u(Tt,"connectedFileIdentity");function R(t){if(t.events.length+(t.unmappedEvents?.length??0)>x.events)throw new Error("connected_event_limit");let e=t.events.map((r,l)=>({...r,sequence:l}));if(new Set(e.map(r=>r.id)).size!==e.length)throw new Error("connected_duplicate_event");let s=e.flatMap((r,l)=>r.kind==="message"&&r.role==="user"?[l]:[]);if(!s.length)throw new Error("The session has no retained user request.");if(s.length+(t.includeConversation===!1?0:1)>x.boundaries)throw new Error("connected_boundary_limit");let n=`family-${S([t.origin,...t.acquisition?[t.acquisition.sourceInstanceId]:[],t.parentSessionId??t.sessionId]).slice(0,32)}`,i=s.map((r,l)=>{let c=s[l+1]??e.length,p=e.slice(r+1,c),d=p.filter(oe).at(-1),E=p.filter(I=>I.kind==="tool_call"||I.kind==="tool_result"),h=new Set(E.filter(I=>I.kind==="tool_call").map(I=>I.callId)),_=new Set(E.filter(I=>I.kind==="tool_result").map(I=>I.callId)),y=E.some(I=>!I.callId)||[...h].some(I=>!_.has(I))||[..._].some(I=>!h.has(I)),f=[...p].reverse().find(I=>I.kind==="terminal"),m=f&&typeof f.content=="object"&&f.content!==null&&!Array.isArray(f.content)?f.content.status:null,b=e.slice(0,r+1).some(I=>I.kind==="compaction"),N=p.some(I=>I.kind==="unknown");return{id:`case-${S([t.origin,...t.acquisition?[t.acquisition.sourceInstanceId]:[],t.sessionId,t.branchId??null,e[r].id]).slice(0,40)}`,familyKey:n,projection:"turn",requestEventId:e[r].id,start:r,end:c,inputHash:S(e.slice(0,r+1)),outputHash:d?S(d.content):null,revisionHash:S(p),terminal:m==="completed"||m==="failed"||m==="cancelled"?m:"unknown",coverage:{answer:!!d,context:t.contextComplete===!1?"unknown":b?"compacted":"retained",process:E.length?y||N?"partial":"retained":N?"partial":"absent",artifacts:p.some(I=>I.kind==="artifact")?"references_only":"absent",replay:"unavailable",gaps:[...d?[]:["No recorded assistant answer."],...t.contextComplete===!1?["The source omits preceding context."]:[],...b?["Earlier context was compacted by the source."]:[],...y?["Tool call/result correlation is incomplete."]:[],...N?["Some source events have no supported process mapping."]:[],...f?[]:["No terminal receipt was recorded."],"No resettable execution environment was admitted."]}}});if(t.includeConversation!==!1){let r=i[0],l=i.at(-1),c=e.slice(r.start+1),p=c.filter(oe);i.push({...r,id:`conversation-${S([t.origin,...t.acquisition?[t.acquisition.sourceInstanceId]:[],t.sessionId,t.branchId??null]).slice(0,40)}`,projection:"conversation",end:e.length,outputHash:p.length?S(p.map(d=>d.content)):null,revisionHash:S(c),terminal:l.terminal,coverage:{...r.coverage,answer:p.length>0,process:i.some(d=>d.coverage.process==="partial")?"partial":i.some(d=>d.coverage.process==="retained")?"retained":"absent",context:i.some(d=>d.coverage.context==="unknown")?"unknown":i.some(d=>d.coverage.context==="compacted")?"compacted":"retained",artifacts:i.some(d=>d.coverage.artifacts==="references_only")?"references_only":"absent",gaps:[...new Set(i.flatMap(d=>d.coverage.gaps))].slice(0,100)}})}let o={schemaVersion:Ie,normalizerVersion:W,origin:t.origin,sessionId:t.sessionId,branchId:t.branchId??null,parentSessionId:t.parentSessionId??null,exporterVersion:t.exporterVersion??null,sourceFiles:t.files.map(Tt).sort((r,l)=>r.path.localeCompare(l.path)),...t.acquisition?{acquisition:t.acquisition}:{},events:e,unmappedEvents:(t.unmappedEvents??[]).map((r,l)=>({...r,sequence:l})),boundaries:i,warnings:t.warnings??[]},a=ve.parse({...o,contentHash:S(o)});if(new TextEncoder().encode(JSON.stringify(a)).length>x.decodedBytes)throw new Error("connected_normalized_size_limit");return a}u(R,"normalizeConnectedSession");function F(t){let e=t.text.replace(/^\uFEFF/u,"").split(/\r?\n/u);if(e.length>x.events+1)throw new Error("connected_event_limit");return e.flatMap((s,n)=>{if(!s.trim())return[];if(new TextEncoder().encode(s).length>x.lineBytes)throw new Error(`Source line ${n+1} exceeds the limit.`);let i;try{i=JSON.parse(s)}catch{throw new Error(`Invalid JSON on line ${n+1}.`)}if(!i||typeof i!="object"||Array.isArray(i))throw new Error(`Unsupported record on line ${n+1}.`);return[i]})}u(F,"connectedJsonLines");function g(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:{}}u(g,"object");function w(t){return{sequence:0,occurredAt:null,role:null,callId:null,parentId:null,usage:null,...t}}u(w,"event");function v(t){return JSON.parse(JSON.stringify(t??null))}u(v,"json");function L(t,e,s="reported_invocation"){let n=g(t),i=u((...c)=>{let p=c.find(d=>typeof d=="number"&&Number.isSafeInteger(d)&&d>=0);return typeof p=="number"?p:null},"number"),o=i(n.input_tokens,n.prompt_tokens),a=i(n.output_tokens,n.completion_tokens),r=i(n.cache_read_input_tokens,n.cached_input_tokens,g(n.input_tokens_details).cached_tokens),l=i(n.total_tokens);return o===null&&a===null&&r===null&&l===null?null:{invocationId:e,inputTokens:o,outputTokens:a,cachedInputTokens:r,totalTokens:l,provenance:s}}u(L,"sourceUsage");function xe(t,e){let s=new Set(e.map(c=>g(c.params).sessionId).filter(c=>typeof c=="string"));if(s.size!==1)throw new Error("Grok Build updates must identify exactly one retained session.");let n=[],i=new Set,o=new Map,a=null,r=null,l=!0;for(let c of e){let p=g(c.params),d=g(p.update),E=g(p._meta),h=d.sessionUpdate;if(typeof E.eventId!="string"||i.has(E.eventId))throw new Error("Grok Build updates require unique native event IDs.");i.add(E.eventId);let _=E.eventId,y=A(E.agentTimestampMs??(typeof c.timestamp=="number"?c.timestamp*1e3:null)),f=g(d.content);if(h==="user_message_chunk"){if(f.type!=="text"||typeof f.text!="string")throw new Error("Grok user content type requires a qualified adapter.");!a||l?(a=w({id:_,kind:"message",role:"user",occurredAt:y,content:f.text}),n.push(a),r=null,l=!1):a.content=String(a.content)+f.text}else if(h==="agent_message_chunk"){if(f.type!=="text"||typeof f.text!="string"){n.push(w({id:_,kind:"unknown",occurredAt:y,content:v(d)}));continue}r?r.content=String(r.content)+f.text:(r=w({id:_,kind:"message",role:"assistant",occurredAt:y,content:f.text}),n.push(r))}else if(h==="tool_call"||h==="tool_call_update"){let m=typeof d.toolCallId=="string"?d.toolCallId:null;if(!m){n.push(w({id:_,kind:"unknown",occurredAt:y,content:v(d)}));continue}let b=o.get(m);b?d.rawInput!==void 0&&(b.content=v({title:d.title,input:d.rawInput})):(b=w({id:`${_}:call`,kind:"tool_call",callId:m,occurredAt:y,content:v({title:d.title,input:d.rawInput})}),o.set(m,b),n.push(b)),(d.status==="completed"||d.status==="failed")&&n.push(w({id:`${_}:result`,kind:"tool_result",role:"tool",callId:m,occurredAt:y,content:v({status:d.status,output:d.rawOutput,content:d.content})}))}else if(h==="turn_completed"){let m=g(d.usage),b=typeof d.prompt_id=="string"?d.prompt_id:_;n.push(w({id:_,kind:"terminal",occurredAt:y,content:{status:d.stop_reason==="end_turn"?"completed":d.stop_reason==="cancelled"?"cancelled":"failed"},usage:L({input_tokens:m.inputTokens,output_tokens:m.outputTokens,cached_input_tokens:m.cachedReadTokens,total_tokens:m.totalTokens},b)})),l=!0,r=null,a=null}else h!=="agent_thought_chunk"&&n.push(w({id:_,kind:"unknown",occurredAt:y,content:v(d)}))}return R({origin:"grok_build",sessionId:String([...s][0]),files:[t],events:n,contextComplete:!1,warnings:["Grok retained ACP updates omit system context and encrypted reasoning. Tool coverage reflects only logged updates."]})}u(xe,"parseGrokBuildSession");function Le(t,e,s,n){let i=e.filter(m=>m.type==="session"),o=i[0];if(i.length!==1||!o||!(s==="openclaw"?[3,4].includes(Number(o.version)):o.version===3)||typeof o.id!="string")throw new Error("Unsupported native session tree version.");let a,l=(s!=="openclaw"?e:e.map(m=>{if(m.type==="session")return m;if(m.type==="leaf"){if(typeof m.targetId!="string")throw new Error("OpenClaw leaf control does not select a retained entry.");return a=m.targetId,m}if(typeof m.id!="string")throw new Error("OpenClaw transcript entry is missing its native identity.");let b=m.parentId===void 0?a??null:m.parentId;return m.appendMode!=="side"&&(a=m.id),{...m,parentId:b}})).filter(m=>m.type!=="session"&&m.type!=="title"&&m.type!=="leaf"),c=new Map,p=new Set;for(let m of l){if(typeof m.id!="string"||c.has(m.id))throw new Error("Session tree has missing or duplicate entry identities.");c.set(m.id,m),typeof m.parentId=="string"&&p.add(m.parentId)}n??=a;let d=[...c.keys()].filter(m=>!p.has(m));if(!n&&d.length!==1)throw new Error("Select a branch leaf for this branched session.");let E=n??d[0];if(!E||!c.has(E))throw new Error("The selected session branch is unavailable.");let h=[],_=new Set,y=E;for(;y;){if(_.has(y))throw new Error("Session branch contains a cycle.");_.add(y);let m=c.get(y);if(!m)throw new Error("Session branch has a missing ancestor.");h.push(m),y=typeof m.parentId=="string"?m.parentId:null}h.reverse();let f=[];for(let m of h){let b=String(m.id),N={occurredAt:A(m.timestamp),parentId:typeof m.parentId=="string"?m.parentId:null};if(m.type==="compaction"||m.type==="branch_summary"){f.push(w({...N,id:b,kind:"compaction",content:v({summary:m.summary,firstKeptEntryId:m.firstKeptEntryId})}));continue}if(m.type!=="message")continue;let I=g(m.message),M=I.role;if(M==="toolResult"){f.push(w({...N,id:b,kind:"tool_result",role:"tool",callId:typeof I.toolCallId=="string"?I.toolCallId:null,content:v({content:I.content,isError:I.isError===!0})}));continue}if(M!=="user"&&M!=="assistant"&&M!=="system"){f.push(w({...N,id:b,kind:"unknown",content:v({role:M,content:I.content})}));continue}let be=Array.isArray(I.content)?I.content.map(g):[],re=typeof I.content=="string"?I.content:be.filter(j=>j.type==="text").map(j=>String(j.text??"")).join(`
|
|
3
|
+
`),J=g(I.usage),ie=L({input_tokens:J.input,output_tokens:J.output,cached_input_tokens:J.cacheRead,total_tokens:J.totalTokens},b);re||M!=="assistant"?f.push(w({...N,id:b,kind:"message",role:M,content:M==="system"&&!re&&I.sections?v(I.sections):re,usage:ie})):ie&&f.push(w({...N,id:`${b}:usage`,kind:"usage",content:null,usage:ie}));for(let[j,U]of be.entries())U.type==="toolCall"?f.push(w({...N,id:`${b}:call:${j}`,kind:"tool_call",callId:typeof U.id=="string"?U.id:null,content:v({name:U.name,arguments:U.arguments})})):U.type!=="text"&&U.type!=="thinking"&&f.push(w({...N,id:`${b}:block:${j}`,kind:"unknown",content:v(U)}));M==="assistant"&&["stop","error","aborted"].includes(String(I.stopReason))&&f.push(w({...N,id:`${b}:terminal`,kind:"terminal",content:{status:I.stopReason==="stop"?"completed":I.stopReason==="aborted"?"cancelled":"failed"}}))}return R({origin:s,sessionId:o.id,branchId:null,...s==="openclaw"?{contextComplete:!1}:{},files:[t],events:f,exporterVersion:`session-v${o.version}`,warnings:["Only the selected branch is included. Private provider payloads and credential metadata are excluded."]})}u(Le,"parsePiSession");function ke(t,e){let s=g(e),n=g(s.info);if(typeof n.id!="string"||!Array.isArray(s.messages))throw new Error("OpenCode requires its native JSON session export (info and messages).");let i=[];for(let o of s.messages){let a=g(o),r=g(a.info),l=g(r.time);if(typeof r.id!="string"||r.sessionID!==n.id||!Array.isArray(a.parts))throw new Error("OpenCode message identity does not match its session.");let c=r.role;if(c!=="user"&&c!=="assistant")throw new Error("Unsupported OpenCode message role.");let p={occurredAt:A(l.created),parentId:typeof r.parentID=="string"?r.parentID:null},d=a.parts.map(g);if(d.some(f=>f.sessionID!==n.id||f.messageID!==r.id||typeof f.id!="string"))throw new Error("OpenCode part identity does not match its message.");let E=d.filter(f=>f.type==="text").map(f=>String(f.text??"")).join(`
|
|
4
|
+
`),h=g(r.tokens),_=g(h.cache),y=L({input_tokens:h.input,output_tokens:h.output,cached_input_tokens:_.read,total_tokens:h.total},r.id);E||c==="user"?i.push(w({...p,id:r.id,kind:"message",role:c,content:E,usage:y})):y&&i.push(w({...p,id:`${r.id}:usage`,kind:"usage",content:null,usage:y}));for(let f of d){let m=String(f.id);if(f.type==="tool"){let b=g(f.state),N=typeof f.callID=="string"?f.callID:null;i.push(w({...p,id:`${m}:call`,kind:"tool_call",callId:N,content:v({name:f.tool,arguments:b.input})})),(b.status==="completed"||b.status==="error")&&i.push(w({...p,id:`${m}:result`,kind:"tool_result",role:"tool",callId:N,content:v({output:b.output,error:b.error,status:b.status})}))}else f.type==="compaction"?i.push(w({...p,id:m,kind:"compaction",content:v(f)})):["text","reasoning","step-start","step-finish"].includes(String(f.type))||i.push(w({...p,id:m,kind:"unknown",content:v(f)}))}c==="assistant"&&(r.finish==="stop"||r.error)&&i.push(w({...p,id:`${r.id}:terminal`,kind:"terminal",content:{status:r.error?"failed":"completed"}}))}return R({origin:"opencode",sessionId:n.id,parentSessionId:typeof n.parentID=="string"?n.parentID:null,exporterVersion:typeof n.version=="string"?n.version:null,files:[t],events:i,warnings:["Source-reported usage is not an OpenPond billing receipt."]})}u(ke,"parseOpenCodeSession");var pe="codex-native-authorization-v1",Ot=pe;function De(t){let e=[],s=u((o,a,r)=>{let l={policy:Ot,sourcePath:o,sourceHash:S(a),entries:r};return e.push(l),l},"omit"),n=u((o,a)=>o.replace(/<permissions instructions>[\s\S]*?<\/permissions instructions>/gu,r=>r.replace(/^## Approved command prefixes\r?\n[\s\S]*?(?=^## |<\/permissions instructions>)/gmu,l=>{let c=s(a,l,null);return`## Approved command prefixes
|
|
5
|
+
[Native authorization rules omitted; policy ${c.policy}; source hash ${c.sourceHash}]
|
|
6
|
+
`})),"permissionsText"),i=g(t.payload);if(t.type==="response_item"&&i.type==="message"&&["system","developer"].includes(String(i.role))){let o=typeof i.content=="string"?n(i.content,"/payload/content"):Array.isArray(i.content)?i.content.map((a,r)=>{let l=g(a);return typeof l.text=="string"?{...l,text:n(l.text,`/payload/content/${r}/text`)}:a}):i.content;return{row:{...t,payload:{...i,content:o}},omissions:e}}if(t.type==="world_state"){let o=g(i.state),a=g(o.permissions);if(Array.isArray(a.approved_command_prefixes)){let r=s("/payload/state/permissions/approved_command_prefixes",a.approved_command_prefixes,a.approved_command_prefixes.length);return{row:{...t,payload:{...i,state:{...o,permissions:{...a,approved_command_prefixes:{omitted:"native_authorization_state",...r}}}}},omissions:e}}}return{row:t,omissions:e}}u(De,"projectCodexAuthorization");function Me(t,e){let s=g(e.find(a=>a.type==="session_meta")?.payload);if(typeof s.id!="string")throw new Error("This is not a supported Codex rollout: session_meta.id is missing.");let n=[],i=null,o=0;for(let[a,r]of e.entries()){let l=De(r);o+=l.omissions.length;let c=g(l.row.payload);if(r.type==="session_meta")continue;if(r.type==="turn_context"){i=typeof c.turn_id=="string"?c.turn_id:i;continue}let d={id:typeof c.id=="string"?c.id:`codex-event-${S([a,r]).slice(0,32)}`,occurredAt:A(r.timestamp),parentId:i};if(r.type==="response_item")c.type==="message"&&["user","assistant","system","developer"].includes(String(c.role))?n.push(w({...d,kind:"message",role:c.role==="developer"?"system":c.role,content:v(c.content)})):c.type==="function_call"||c.type==="custom_tool_call"?n.push(w({...d,kind:"tool_call",callId:typeof c.call_id=="string"?c.call_id:null,content:v(c)})):c.type==="function_call_output"||c.type==="custom_tool_call_output"?n.push(w({...d,kind:"tool_result",role:"tool",callId:typeof c.call_id=="string"?c.call_id:null,content:v(c.output)})):n.push(w({...d,kind:"unknown",content:v(c)}));else if(r.type==="compacted")n.push(w({...d,kind:"compaction",content:v(c)}));else if(r.type==="event_msg"){if(["user_message","agent_message","agent_reasoning","task_started"].includes(String(c.type)))continue;if(c.type==="task_complete"||c.type==="turn_aborted")n.push(w({...d,kind:"terminal",content:{status:c.type==="task_complete"?"completed":"cancelled",source:v(c)}}));else if(c.type==="token_count"){let E=g(c.info),h=L(E.total_token_usage,`codex-cumulative:${s.id}:${a}`,"reported_cumulative");n.push(w({...d,kind:"usage",usage:h,content:v(c)}))}else n.push(w({...d,kind:"unknown",content:v(c)}))}else n.push(w({...d,kind:"unknown",content:v(l.row)}))}return R({origin:"codex",sessionId:s.id,parentSessionId:typeof s.forked_from_id=="string"?s.forked_from_id:null,exporterVersion:typeof s.cli_version=="string"?s.cli_version:null,files:[t],events:n,warnings:["Codex cumulative usage is retained as reported totals and is not summed as billed invocations.","Referenced files are unavailable unless separately admitted.",...o?[`Codex native authorization state excluded by codex-native-authorization-v1 from ${o} locations. Omission markers retain source-section hashes; sourceFiles retains original byte hashes. Other conversation evidence is unchanged and still requires privacy admission.`]:[]]})}u(Me,"parseCodexSession");function G(t){let e=t.filter(p=>(p.type==="user"||p.type==="assistant")&&typeof p.uuid=="string"),s=new Set(e.flatMap(p=>typeof p.sessionId=="string"?[p.sessionId]:[]));if(s.size!==1||!e.length)throw new Error("A supported Claude Code transcript must identify one session with UUID messages.");let n=[...s][0],i=t.filter(p=>typeof p.uuid=="string"&&p.sessionId===n),o=new Map(i.map(p=>[p.uuid,p]));if(o.size!==i.length)throw new Error("Claude Code transcript contains duplicate message UUIDs.");let a=new Set(i.flatMap(p=>typeof p.parentUuid=="string"?[p.parentUuid]:[])),r=i.filter(p=>!a.has(p.uuid));if(!r.length)throw new Error("Claude Code transcript has no selectable branch leaf.");function l(p){let d=o.get(p);if(!d)throw new Error("The selected Claude Code branch leaf is missing.");let E=[],h=new Set,_=!1;for(;d;){let y=d.uuid;if(h.has(y))throw new Error("Claude Code branch contains a parent cycle.");h.add(y),E.unshift(d);let f=d.parentUuid;if(typeof f!="string")break;d=o.get(f),d||(_=!0)}return{chain:E,missingParent:_,chainHash:S(E)}}u(l,"select");function c(){if(r.length>256)throw new Error("This transcript exceeds the 256-branch inspection limit.");return r.map(p=>{let d=l(p.uuid),E=d.chain.filter(f=>f.type==="user"||f.type==="assistant"),h=E.at(-1),_=g(h?.message).content,y=typeof _=="string"?_:Array.isArray(_)?_.flatMap(f=>typeof g(f).text=="string"?[g(f).text]:[]).join(" "):"";return{leafId:p.uuid,chainHash:d.chainHash,title:y.slice(0,180),updatedAt:A(h?.timestamp),messages:E.length}})}return u(c,"branches"),{sessionId:n,leaves:r,select:l,branches:c}}u(G,"claudeGraph");function Ue(t,e,s){let n=G(e);if(!s&&n.leaves.length!==1)throw new Error("This transcript has multiple branches. Select a branch leaf UUID before importing.");let{chain:i,missingParent:o}=n.select(s??n.leaves[0].uuid),a=[];for(let r of i){if(r.type!=="user"&&r.type!=="assistant")continue;let l=g(r.message),c=l.content,p={occurredAt:A(r.timestamp),parentId:typeof r.parentUuid=="string"?r.parentUuid:null},d=r.type==="user"?"user":"assistant",E=Array.isArray(c)?c:[{type:"text",text:c}],h=E.filter(_=>g(_).type==="text");h.length&&a.push(w({...p,id:r.uuid,kind:"message",role:d,content:v(h)})),d==="assistant"&&l.usage&&a.push(w({...p,id:`${r.uuid}:usage`,kind:"usage",content:v(l.usage),usage:L(l.usage,typeof l.id=="string"?l.id:r.uuid)}));for(let[_,y]of E.entries()){let f=g(y);if(f.type==="text"||f.type==="thinking"||f.type==="redacted_thinking")continue;let m=`${r.uuid}:${_}`;f.type==="tool_use"?a.push(w({...p,id:m,kind:"tool_call",callId:typeof f.id=="string"?f.id:null,content:v(f)})):f.type==="tool_result"?a.push(w({...p,id:m,kind:"tool_result",role:"tool",callId:typeof f.tool_use_id=="string"?f.tool_use_id:null,content:v(f)})):a.push(w({...p,id:m,kind:"unknown",content:v(f)}))}l.stop_reason==="end_turn"&&a.push(w({...p,id:`${r.uuid}:terminal`,kind:"terminal",content:{status:"completed"}}))}return e.some(r=>r.type==="system"&&r.subtype==="compact_boundary")&&a.unshift(w({id:`compaction-${S(e.filter(r=>r.subtype==="compact_boundary")).slice(0,32)}`,kind:"compaction",content:{source:"claude_compact_boundary"}})),R({origin:"claude_code",sessionId:n.sessionId,branchId:null,parentSessionId:typeof i[0]?.parentSessionId=="string"?i[0].parentSessionId:null,exporterVersion:typeof i.at(-1)?.version=="string"?i.at(-1).version:null,files:[t],events:a,contextComplete:!o,warnings:[...o?["The transcript omits an ancestor; complete context is unavailable."]:[],...i.some(r=>r.isSidechain)?["This is a subagent/sidechain transcript; parent context is not implicitly imported."]:[],"Claude Code transcript schema is internal; only the declared message shapes are normalized."]})}u(Ue,"parseClaudeSession");function Fe(t,e){let s=[];for(let[n,i]of t.entries()){let o=g(i),a=typeof o.entryId=="string"?o.entryId:typeof o.id=="string"?o.id:typeof o.id=="number"&&Number.isSafeInteger(o.id)?String(o.id):typeof o.message_id=="string"?o.message_id:`${e}-${S([n,o]).slice(0,32)}`,r={occurredAt:A(o.timestamp,e==="hermes"?"seconds":"milliseconds"),parentId:typeof o.parentId=="string"?o.parentId:null};if(o.role==="tool"){s.push(w({...r,id:a,kind:"tool_result",role:"tool",callId:typeof o.tool_call_id=="string"?o.tool_call_id:null,content:v(o.content)}));continue}if(!["user","assistant","system"].includes(String(o.role))){s.push(w({...r,id:a,kind:"unknown",content:v(o)}));continue}if(s.push(w({...r,id:a,kind:"message",role:o.role,content:v(o.content),usage:L(o.usage,a)})),Array.isArray(o.tool_calls))for(let[l,c]of o.tool_calls.entries()){let p=g(c);s.push(w({...r,id:`${a}:call:${l}`,kind:"tool_call",callId:typeof p.id=="string"?p.id:null,content:v(p)}))}(o.finish_reason==="stop"||o.stop_reason==="end_turn")&&s.push(w({...r,id:`${a}:terminal`,kind:"terminal",content:{status:"completed"}}))}return s}u(Fe,"historyEvents");function $e(t,e){let s=typeof e.id=="string"?e.id:typeof e.session_id=="string"?e.session_id:null;if(!s||!Array.isArray(e.messages))throw new Error("Hermes requires a full-session export with id or session_id and messages.");if(e.message_count!==void 0&&e.message_count!==e.messages.length)throw new Error("Hermes full-session message count differs from the retained messages.");let n=Array.isArray(e.lineage_session_ids)?e.lineage_session_ids.find(o=>typeof o=="string"&&o):null,i=Fe(e.messages,"hermes");return typeof e.system_prompt=="string"&&e.system_prompt.trim()&&i.unshift(w({id:`hermes-system-${S(e.system_prompt).slice(0,32)}`,kind:"message",role:"system",content:e.system_prompt})),R({origin:"hermes",sessionId:s,parentSessionId:typeof n=="string"?n:typeof e.parent_session_id=="string"?e.parent_session_id:null,exporterVersion:typeof e.version=="string"?e.version:null,files:[t],events:i,warnings:["Reported usage is not an OpenPond billing receipt.","Exporter redaction and missing tools/artifacts remain evidence gaps.",...e.session_id&&!e.id?["This is a Hermes session backup. Exporter version and terminal receipts may be unavailable."]:[]]})}u($e,"parseHermesEvidence");function Pe(t){let e=u(d=>{let E=t.find(h=>h.path===d);if(!E)throw new Error(`OpenClaw bundle is missing ${d}.`);return E},"read"),s=g(JSON.parse(e("manifest.json").text)),n=g(JSON.parse(e("session-branch.json").text)),i=e("events.jsonl"),o=F(i);if(s.traceSchema!=="openclaw-trajectory"||s.schemaVersion!==1||typeof s.sessionId!="string"||typeof s.traceId!="string")throw new Error("Unsupported OpenClaw trajectory manifest.");if(s.leafId!==n.leafId||s.eventCount!==o.length||o.some(d=>d.traceSchema!==s.traceSchema||d.schemaVersion!==1||d.sessionId!==s.sessionId||d.traceId!==s.traceId))throw new Error("OpenClaw bundle identity/count does not match its manifest.");if(!Array.isArray(n.entries))throw new Error("OpenClaw active branch entries are missing.");if(n.header&&g(n.header).id!==s.sessionId)throw new Error("OpenClaw branch header differs from the manifest session.");let a=new Set,r=[];for(let[d,E]of n.entries.entries()){let h=g(E);if(typeof h.id!="string"||a.has(h.id)||d>0&&h.parentId!==g(n.entries[d-1]).id)throw new Error("OpenClaw active branch is duplicate, incomplete or unordered.");a.add(h.id),h.type==="message"&&r.push({...g(h.message),entryId:h.id,parentId:h.parentId??null,timestamp:h.timestamp??g(h.message).timestamp})}if(n.entries.length&&g(n.entries.at(-1)).id!==n.leafId)throw new Error("OpenClaw branch does not reach its leaf.");let l=Fe(r,"openclaw"),c=[],p=new Set;for(let[d,E]of o.entries()){if(!Number.isSafeInteger(E.seq)||E.seq<0||p.has(E.seq)||d>0&&Number(o[d-1].seq)>=Number(E.seq))throw new Error("OpenClaw events have invalid/duplicate/unordered sequences.");p.add(E.seq),c.push(w({id:`trajectory:${s.traceId}:${E.seq}`,kind:"unknown",occurredAt:A(E.ts),content:v(E)}))}return R({origin:"openclaw",sessionId:s.sessionId,files:t,events:l,unmappedEvents:c,exporterVersion:typeof s.openclawVersion=="string"?s.openclawVersion:null,warnings:["Raw trajectory events are retained; unqualified event types are not advertised as complete process grading.",...Array.isArray(s.warnings)?s.warnings.map(d=>typeof g(d).message=="string"?String(g(d).message).slice(0,500):"The source exporter reports incomplete evidence."):[]].slice(0,100)})}u(Pe,"parseOpenClawEvidence");function kn(t){return t==="codex"?`${W}/${pe}`:W}u(kn,"agentImportNormalizerRevision");function He(t){if(!t.files.length||t.files.length>x.files)throw new Error("Choose between 1 and 100 source files.");let e=new Set,s=0;for(let r of t.files){if(r.path.length>500||r.path.startsWith("/")||r.path.includes("\\")||r.path.split("/").some(l=>!l||l==="."||l==="..")||e.has(r.path))throw new Error("Unsafe or duplicate source file path.");e.add(r.path),s+=new TextEncoder().encode(r.text).length}if(s>x.decodedBytes)throw new Error("Decoded source files exceed 64 MiB.");let n=[],i=[],o=u((r,l)=>{try{n.push(...l().map(c=>t.acquisition?R({origin:c.origin,sessionId:c.sessionId,branchId:c.branchId,parentSessionId:c.parentSessionId,exporterVersion:c.exporterVersion,files:t.files.filter(p=>c.sourceFiles.some(d=>d.path===p.path)),events:c.events,unmappedEvents:c.unmappedEvents,warnings:c.warnings,contextComplete:!c.boundaries.some(p=>p.coverage.context==="unknown"),acquisition:t.acquisition}):c))}catch(c){i.push({file:r,message:c instanceof Error?c.message:"Unsupported session."})}},"attempt");if(t.source==="openclaw"&&t.files.some(r=>r.path.endsWith("manifest.json")))o("manifest.json",()=>{let r=t.files[0].path.split("/")[0],l=!t.files.some(c=>c.path==="manifest.json")&&t.files.every(c=>c.path.startsWith(`${r}/`))?t.files.map(c=>({...c,path:c.path.slice(r.length+1)})):t.files;return[Pe(l)]});else for(let r of t.files)o(r.path,()=>{if(t.source==="opencode")return[ke(r,JSON.parse(r.text))];let l;if(t.source==="hermes"&&r.path.endsWith(".json")){let c=JSON.parse(r.text.replace(/^\uFEFF/u,""));if(!c||typeof c!="object"||Array.isArray(c))throw new Error("Hermes session backup must be one JSON object.");l=[c]}else l=F(r);if(t.source==="grok_build")return[xe(r,l)];if(t.source==="pi"||t.source==="oh_my_pi"||t.source==="openclaw")return[Le(r,l,t.source,t.branchLeafId)];if(t.source==="codex")return[Me(r,l)];if(t.source==="claude_code")return[Ue(r,l,t.branchLeafId)];if(t.source==="hermes")return l.map(c=>$e(r,c));throw new Error("Unsupported source adapter.")});if(n.length>x.sessions||n.reduce((r,l)=>r+l.events.length+l.unmappedEvents.length,0)>x.events||n.reduce((r,l)=>r+l.boundaries.length,0)>x.boundaries)throw new Error("Import exceeds the session/event/boundary limit.");let a=new Map;for(let r of n){let l=JSON.stringify([r.origin,r.sessionId,r.branchId]),c=a.get(l);if(c&&c!==r.contentHash)throw new Error("The same session has different contents in this selection. Choose one export.");a.set(l,r.contentHash)}return{schemaVersion:"openpond.agentImportPreview.v1",source:t.source,sourceHash:S({source:t.source,files:[...t.files].sort((r,l)=>r.path.localeCompare(l.path)),branchLeafId:t.branchLeafId??null}),sessions:n.filter((r,l)=>n.findIndex(c=>c.contentHash===r.contentHash)===l),issues:i}}u(He,"previewAgentImport");import{DatabaseSync as Mt}from"node:sqlite";import{join as Ut}from"node:path";import{DatabaseSync as kt}from"node:sqlite";import{zstdDecompressSync as ze}from"node:zlib";import{createHash as Dt}from"node:crypto";import{createHash as Nt}from"node:crypto";import{readFileSync as At,realpathSync as je,statSync as Rt}from"node:fs";import{basename as Ct,dirname as Be,join as qe,relative as xt,sep as We}from"node:path";import{zstdDecompressSync as Lt}from"node:zlib";function Ge(t,e,s){let n=t.prepare("SELECT generation,archive_name,archive_sha256,event_count,raw_bytes,archive_bytes,last_seq,storage,length(archive_blob) AS blob_bytes FROM session_transcript_cold_archives WHERE session_id=?").get(s);if(!n)return null;if(Number(n.archive_bytes)>T||Number(n.raw_bytes)>T||Number(n.event_count)>1e5)throw new Error("OpenClaw cold archive exceeds the retained size limit.");let i;if(n.storage==="sqlite"){if(Number(n.blob_bytes)!==Number(n.archive_bytes))throw new Error("OpenClaw cold archive size differs from its receipt.");let E=t.prepare("SELECT archive_blob FROM session_transcript_cold_archives WHERE session_id=?").get(s);if(!(E.archive_blob instanceof Uint8Array))throw new Error("OpenClaw cold archive is unavailable.");i=E.archive_blob}else if(n.storage==="file"){let E=String(n.archive_name);if(!/^[a-f0-9]{64}\.jsonl\.zst$/.test(E))throw new Error("Invalid OpenClaw cold archive name.");let h=Be(e.root),_=Ct(h)==="agent"?qe(Be(h),"sessions"):h,y=je(_),f=je(qe(_,"cold",E)),m=xt(y,f);if(m===".."||m.startsWith(`..${We}`)||m.startsWith(We))throw new Error("OpenClaw cold archive leaves the selected agent directory.");let b=Rt(f);if(!b.isFile()||b.size!==Number(n.archive_bytes))throw new Error("OpenClaw cold archive size differs from its receipt.");i=At(f)}else throw new Error("Unsupported OpenClaw cold archive storage.");if(i.length!==Number(n.archive_bytes)||Nt("sha256").update(i).digest("hex")!==n.archive_sha256)throw new Error("OpenClaw cold archive checksum differs from its receipt.");let o=Lt(i,{maxOutputLength:T}),a=new TextDecoder("utf8",{fatal:!0}).decode(o).trimEnd().split(`
|
|
7
|
+
`),r=JSON.parse(a.shift()??"null");if(r?.kind!=="header"||r.version!==1||r.sessionId!==s||r.generation!==n.generation)throw new Error("OpenClaw cold archive identity differs from its receipt.");let l=[],c=-1,p=0;for(let E of a){let h=JSON.parse(E);if(!["event","identity","active","index","fts"].includes(h?.kind))throw new Error("Unsupported OpenClaw cold archive record.");if(h.kind==="event"){if(!Number.isSafeInteger(h.row?.seq)||h.row.seq<=c||typeof h.row.event_json!="string")throw new Error("Invalid OpenClaw cold archive event sequence.");c=h.row.seq,p+=Buffer.byteLength(h.row.event_json),l.push(h.row.event_json)}}if(l.length!==Number(n.event_count)||c!==Number(n.last_seq)||p+l.length-1!==Number(n.raw_bytes))throw new Error("OpenClaw cold archive contents differ from its receipt.");let d=JSON.parse(l[0]??"null");if(d?.type!=="session"||d.id!==s)throw new Error("OpenClaw transcript identity differs from selected session.");return{path:`${s}.jsonl`,text:l.join(`
|
|
8
|
+
`)+`
|
|
9
|
+
`}}u(Ge,"readOpenClawColdArchive");function Xe(t){let e=new kt(t.root,{readOnly:!0,allowExtension:!1,enableDoubleQuotedStringLiterals:!1});return e.exec("PRAGMA query_only=ON; PRAGMA busy_timeout=1000; BEGIN"),e}u(Xe,"open");function Z(t,e){return!!t.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?").get(e)}u(Z,"has");function Ve(t,e){let s=Xe(t);try{let n=Z(s,"session_transcript_archives")?"UNION ALL SELECT session_id AS id,created_at AS updated,archive_sha256 AS revision FROM session_transcript_archives":"",i=Z(s,"session_transcript_cold_archives")?"UNION ALL SELECT session_id AS id,archived_at AS updated,archive_sha256 AS revision FROM session_transcript_cold_archives":"",o=s.prepare(`SELECT id,MAX(updated) AS updated,MAX(revision) AS revision FROM (
|
|
10
|
+
SELECT session_id AS id,MAX(created_at) AS updated,CAST(MAX(seq) AS TEXT) AS revision FROM transcript_events GROUP BY session_id
|
|
11
|
+
${n} ${i}) WHERE id > ? GROUP BY id ORDER BY id LIMIT ?`).all(e.cursor??"",e.limit+1),a=o.slice(0,e.limit).map(r=>({nativeSessionId:String(r.id),sourceInstanceId:t.instanceId,path:String(r.id),title:String(r.id),cwd:null,updatedAt:new Date(Number(r.updated)||0).toISOString()}));return{items:a,nextCursor:o.length>e.limit?a.at(-1).nativeSessionId:null}}finally{s.close()}}u(Ve,"listOpenClawSessions");function Je(t,e){let s=Xe(t);try{if(Z(s,"session_transcript_cold_archives")){let c=Ge(s,t,e);if(c)return c}if(!s.prepare("SELECT 1 FROM transcript_events WHERE session_id=? LIMIT 1").get(e)){if(!Z(s,"session_transcript_archives"))throw new Error("OpenClaw archive is unavailable.");let c=s.prepare("SELECT archive_name,length(archive_blob) AS bytes FROM session_transcript_archives WHERE session_id=? ORDER BY created_at DESC LIMIT 1").get(e);if(!c||Number(c.bytes)>T)throw new Error("OpenClaw archive is missing or exceeds the retained byte limit.");let p=s.prepare("SELECT archive_blob,archive_sha256,encoding FROM session_transcript_archives WHERE archive_name=? AND session_id=?").get(String(c.archive_name),e);if(!(p.archive_blob instanceof Uint8Array)||Dt("sha256").update(p.archive_blob).digest("hex")!==p.archive_sha256)throw new Error("OpenClaw archive checksum differs from its retained receipt.");if(p.encoding!=="zstd"&&p.encoding!=="identity")throw new Error("Unsupported OpenClaw archive encoding.");let d=p.encoding==="zstd"?ze(p.archive_blob,{maxOutputLength:T}):p.archive_blob,E=new TextDecoder("utf8",{fatal:!0}).decode(d),h=JSON.parse(E.split(`
|
|
12
|
+
`,1)[0]);if(h.type!=="session"||h.id!==e)throw new Error("OpenClaw archive identity differs from selected session.");return{path:`${e}.jsonl`,text:E}}let i=s.prepare("SELECT COUNT(*) AS n,SUM(COALESCE(event_utf8_bytes,length(CAST(event_json AS BLOB)),0)) AS bytes FROM transcript_events WHERE session_id=?").get(e);if(Number(i.n)>1e5||Number(i.bytes)>T)throw new Error("OpenClaw transcript exceeds the retained size limit.");let o=s.prepare("SELECT seq,event_json,event_zstd,event_utf8_bytes FROM transcript_events WHERE session_id=? ORDER BY seq LIMIT 100001").all(e),a=0,r=o.map(c=>{let p;if(typeof c.event_json=="string")p=c.event_json;else{if(!(c.event_zstd instanceof Uint8Array)||Number(c.event_utf8_bytes)>T)throw new Error("Unsupported OpenClaw compressed transcript record.");let d=ze(c.event_zstd,{maxOutputLength:T});if(d.length!==Number(c.event_utf8_bytes))throw new Error("OpenClaw compressed transcript size differs from its receipt.");p=new TextDecoder("utf8",{fatal:!0}).decode(d)}if(a+=Buffer.byteLength(p),a>T)throw new Error("OpenClaw transcript exceeds retained size limit.");return p});if(!r.length)throw new Error("OpenClaw transcript is unavailable.");let l=JSON.parse(r[0]);if(l.type!=="session"||l.id!==e)throw new Error("OpenClaw transcript identity differs from selected session.");return{path:`${e}.jsonl`,text:r.join(`
|
|
13
|
+
`)+`
|
|
14
|
+
`}}finally{s.close()}}u(Je,"readOpenClawSession");function Ye(t){let e=t.root.endsWith(".db")?t.root:Ut(t.root,t.source==="opencode"?"opencode.db":"state.db"),s=new Mt(e,{readOnly:!0,allowExtension:!1,enableDoubleQuotedStringLiterals:!1});return s.exec("PRAGMA query_only=ON; PRAGMA busy_timeout=1000; BEGIN"),s}u(Ye,"open");function Ke(t,e){if(t.source==="openclaw")return Ve(t,e);let s=Ye(t);try{let n=e.since?Date.parse(e.since):0,i=t.source==="opencode"?s.prepare("SELECT id,title,directory AS cwd,time_updated AS updated, time_updated || ':' || COALESCE((SELECT MAX(time_updated) FROM message WHERE session_id=session.id),0) || ':' || COALESCE((SELECT MAX(time_updated) FROM part WHERE session_id=session.id),0) || ':' || (SELECT COUNT(*) FROM part WHERE session_id=session.id) AS revision FROM session WHERE id > ? AND time_updated >= ? ORDER BY id LIMIT ?").all(e.cursor??"",n,e.limit+1):s.prepare("SELECT id,title,cwd,MAX(COALESCE(last_activity_at,0),started_at) * 1000 AS updated FROM sessions WHERE id > ? AND MAX(COALESCE(last_activity_at,0),started_at) * 1000 >= ? ORDER BY id LIMIT ?").all(e.cursor??"",n,e.limit+1),o=i.slice(0,e.limit).map(a=>({nativeSessionId:String(a.id),sourceInstanceId:t.instanceId,path:String(a.id),title:typeof a.title=="string"?a.title:String(a.id),cwd:typeof a.cwd=="string"?a.cwd:null,updatedAt:new Date(Number(a.updated)).toISOString(),storageRevision:t.source==="opencode"?String(a.revision):void 0}));return{items:o,nextCursor:i.length>e.limit?o.at(-1).nativeSessionId:null}}finally{s.close()}}u(Ke,"listDatabaseSessions");function Ze(t,e){if(t.source==="openclaw")return Je(t,e);let s=Ye(t);try{let n;if(t.source==="opencode"){let o=s.prepare("SELECT id,title,directory,parent_id,version,time_created,time_updated FROM session WHERE id = ?").get(e);if(!o)throw new Error("Native session is unavailable.");let a=s.prepare("SELECT (SELECT COALESCE(SUM(length(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(length(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS bytes").get(e,e);if(Number(a?.bytes)>T)throw new Error("Native session exceeds the retained byte limit.");let r=s.prepare("SELECT id,data FROM message WHERE session_id = ? ORDER BY time_created,id LIMIT 100001").all(e);if(r.length>1e5)throw new Error("Native session exceeds the event limit.");let l=0,c=r.map(p=>{if(l+=Buffer.byteLength(String(p.data)),l>T)throw new Error("Native session exceeds the retained byte limit.");let d=s.prepare("SELECT id,data FROM part WHERE session_id = ? AND message_id = ? ORDER BY time_created,id LIMIT 100001").all(e,String(p.id));if(d.length>1e5)throw new Error("Native parts exceed the event limit.");return{info:{...JSON.parse(String(p.data)),id:p.id,sessionID:e},parts:d.map(E=>{if(l+=Buffer.byteLength(String(E.data)),l>T)throw new Error("Native session exceeds the retained byte limit.");return{...JSON.parse(String(E.data)),id:E.id,sessionID:e,messageID:p.id}})}});n={info:{...o,parentID:o.parent_id,time:{created:o.time_created,updated:o.time_updated}},messages:c}}else{let o=s.prepare("SELECT id,title,parent_session_id,system_prompt FROM sessions WHERE id = ?").get(e);if(!o)throw new Error("Native session is unavailable.");let a=s.prepare("SELECT COALESCE(SUM(length(CAST(COALESCE(content,'') AS BLOB))+length(CAST(COALESCE(tool_calls,'') AS BLOB))),0) AS bytes FROM messages WHERE session_id=? AND active=1").get(e);if(Number(a?.bytes)>T)throw new Error("Native session exceeds the retained byte limit.");let r=s.prepare("SELECT id,role,content,tool_call_id,tool_calls,timestamp,finish_reason,compacted FROM messages WHERE session_id = ? AND active = 1 ORDER BY id LIMIT 100001").all(e);if(r.length>1e5)throw new Error("Native session exceeds the event limit.");let l=0;n={...o,messages:r.map(c=>{if(l+=Buffer.byteLength(JSON.stringify(c)),l>T)throw new Error("Native session exceeds the retained byte limit.");return{...c,tool_calls:typeof c.tool_calls=="string"?JSON.parse(c.tool_calls):null}}),message_count:r.length}}let i=JSON.stringify(n);if(Buffer.byteLength(i)>T)throw new Error("Native session exceeds the retained byte limit.");return{path:`${e}.json`,text:i}}finally{s.close()}}u(Ze,"readDatabaseSession");async function st(t,e,s=!0){let n=await Qe(t.root),i=await Qe(qt(n,e)),o=Bt(n,i);if(o.startsWith(`..${Wt}`)||o===".."||ue(o))throw new Error("History path is outside the selected source.");if(s&&(await tt(i)).size>T)throw new Error("Source file exceeds 32 MiB.");return i}u(st,"selectedPath");async function X(t,e){let s=await st(t,e),n=await Ht(s);if(n.byteLength>T)throw new Error("Source changed beyond the retained limit.");let i=s.endsWith(".zst")?Gt(n,{maxOutputLength:64*1024*1024}):n,o=new TextDecoder("utf-8",{fatal:!0}).decode(i);if(s.endsWith(".jsonl")&&o&&!o.endsWith(`
|
|
15
|
+
`)){let a=o.lastIndexOf(`
|
|
16
|
+
`);try{JSON.parse(o.slice(a+1))}catch{return o.slice(0,a+1)}}return o}u(X,"readSelectedFile");async function zt(t){if((await $t(t.root)).isFile())return[""];let e=t.source==="codex"?["sessions","archived_sessions"]:t.source==="grok_build"?["sessions"]:t.source==="claude_code"?["projects"]:t.source==="pi"||t.source==="oh_my_pi"?["sessions"]:[""],s=[];async function n(i,o){if(o>12)throw new Error("Selected history exceeds directory depth limit.");let a;try{a=await Pt(Q(t.root,i),{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return;throw r}for(let r of a){let l=Q(i,r.name);if(!r.isSymbolicLink()&&(r.isDirectory()?await n(l,o+1):r.isFile()&&(t.source==="openclaw"?r.name==="manifest.json":t.source==="grok_build"?r.name==="updates.jsonl":/\.jsonl(?:\.zst)?$/u.test(r.name))&&s.push(l),s.length>1e4))throw new Error("Select a narrower source directory (more than 10,000 history files).")}}u(n,"walk");for(let i of e)await n(i,0);return!s.length&&e[0]!==""&&await n("",0),s.sort()}u(zt,"pathsBelow");function et(t,e){return(e||t.root).endsWith(".json")}u(et,"sessionFileJson");async function pr(t,e={}){if(!t.available||!t.capabilities.history)throw new Error(t.reason??"Native history is unavailable.");let s=e.limit??50;if(!Number.isInteger(s)||s<1||s>100||e.since&&!Number.isFinite(Date.parse(e.since)))throw new Error("Invalid history page or date range.");if(t.acquisition==="sqlite")return Ke(t,{...e,limit:s});let n=await zt(t),i=[];for(let o of n)if(!(e.cursor&&o<=e.cursor)){try{let a=await tt(Q(t.root,o));if(e.since&&a.mtimeMs<Date.parse(e.since))continue;let r;if(t.acquisition!=="bundle"&&!et(t,o)&&t.source!=="hermes"&&!(o||t.root).endsWith(".zst")){let y=await Ft(await st(t,o,!1),"r");try{let f=Buffer.alloc(262144),m=await y.read(f,0,f.length,0),b=f.subarray(0,m.bytesRead).toString("utf8"),N=b.lastIndexOf(`
|
|
17
|
+
`);if(r=b,!b.endsWith(`
|
|
18
|
+
`))try{JSON.parse(b.slice(N+1))}catch{r=b.slice(0,N+1)}}finally{await y.close()}}else r=await X(t,o);let l=t.acquisition==="bundle"||et(t,o)?[g(JSON.parse(r))]:r.split(/\r?\n/u).filter(Boolean).slice(0,t.source==="claude_code"?void 0:12).map(y=>g(JSON.parse(y))),c=l.find(y=>y.type==="session"||y.type==="session_meta")??l[0]??{},p=c.type==="session_meta"?g(c.payload):t.source==="grok_build"?g(c.params):t.source==="opencode"?g(c.info):c,d=typeof p.id=="string"?p.id:typeof p.sessionId=="string"?p.sessionId:z(o).replace(/\.jsonl(?:\.zst)?$/u,""),h=(t.source==="claude_code"?l.find(y=>y.sessionId===d&&y.type==="user"&&typeof y.cwd=="string"&&ue(y.cwd)):void 0)?.cwd??p.cwd,_=d;if(t.source==="grok_build"&&o.endsWith("updates.jsonl"))try{let y=g(JSON.parse(await X(t,Q(jt(o),"summary.json")))),f=g(y.info);f.id===d&&(h=f.cwd,typeof y.generated_title=="string"&&(_=y.generated_title.slice(0,500)))}catch{}i.push({nativeSessionId:d,sourceInstanceId:t.instanceId,path:o,title:_,cwd:typeof h=="string"&&ue(h)?h:null,updatedAt:a.mtime.toISOString(),storageRevision:[a.dev,a.ino,a.size,a.mtimeMs,a.ctimeMs].join(":")})}catch(a){if(a.code==="ENOENT")continue;i.push({nativeSessionId:z(o||t.root),sourceInstanceId:t.instanceId,path:o,title:z(o||t.root),cwd:null,updatedAt:new Date(0).toISOString(),issue:a instanceof Error?a.message:"Unable to inspect native session"})}if(i.length>s)break}return{items:i.slice(0,s),nextCursor:i.length>s?i[s-1].path:null}}u(pr,"listSessions");async function ur(t,e){if(t.source!=="claude_code")return{revision:"",branches:[]};if(e.issue)throw new Error(e.issue);if(e.sourceInstanceId!==t.instanceId)throw new Error("Native session belongs to another selected source.");let s=await X(t,e.path),n=G(F({path:z(e.path),text:s}));if(n.sessionId!==e.nativeSessionId)throw new Error("Native session changed identity.");return{revision:S(s),branches:n.branches()}}u(ur,"inspectSessionBranches");async function fr(t,e,s={}){if(e.issue)throw new Error(e.issue);if(e.sourceInstanceId!==t.instanceId)throw new Error("Native session belongs to another selected source.");let n;if(t.acquisition==="sqlite")n=[Ze(t,e.nativeSessionId)];else if(t.acquisition==="bundle"){let o=e.path.slice(0,-13);n=await Promise.all(["manifest.json","events.jsonl","session-branch.json"].map(async a=>({path:a,text:await X(t,`${o}${a}`)})))}else n=[{path:z(e.path||t.root).replace(/\.zst$/u,""),text:await X(t,e.path)}];if(s.expectedBranchRevision&&!s.branchLeafId)throw new Error("Choose a branch before supplying its revision.");if(t.source==="claude_code"){let o=n[0],a=G(F(o));if(a.sessionId!==e.nativeSessionId)throw new Error("Native session changed identity.");if(s.branchAnchor){if(s.branchLeafId||s.expectedBranchRevision)throw new Error("Choose either a frozen branch snapshot or a followed branch anchor.");if(a.select(s.branchAnchor.leafId).chainHash!==s.branchAnchor.chainHash)throw new Error("The selected branch history changed. Review and select it again before syncing.");let l=a.leaves.filter(c=>a.select(c.uuid).chain.some(p=>p.uuid===s.branchAnchor.leafId));if(l.length!==1)throw new Error("The selected branch diverged. Pause this connection and choose its branch again.");s={...s,branchLeafId:l[0].uuid}}if(s.expectedBranchRevision&&S(o.text)!==s.expectedBranchRevision)throw new Error("This conversation changed. Refresh its branches and choose again.");if(s.branchLeafId){if(!a.leaves.some(r=>r.uuid===s.branchLeafId))throw new Error("The selected Claude branch is no longer a leaf. Refresh and choose again.");n=[{...o,text:a.select(s.branchLeafId).chain.map(r=>JSON.stringify(r)).join(`
|
|
19
|
+
`)+`
|
|
20
|
+
`}]}}else if(s.expectedBranchRevision||s.branchAnchor)throw new Error("Branch revision selection is only supported for Claude Code.");let i=He({source:t.source,files:n,acquisition:{machineId:t.machineId,sourceInstanceId:t.instanceId},...s});if(i.issues.length)throw new Error(i.issues.map(o=>o.message).join("; "));if(t.acquisition==="sqlite"&&i.sessions.some(o=>o.sessionId!==e.nativeSessionId))throw new Error("Native session changed identity.");return{files:n,preview:i,branchLeafId:s.branchLeafId}}u(fr,"readSession");import{DatabaseSync as Xt}from"node:sqlite";import{mkdir as Vt,chmod as rt}from"node:fs/promises";import{join as Jt}from"node:path";var ee={reconcileMs:3e4,heartbeatMs:1e4,staleMs:6e4,maxPending:1e4,maxBytes:1073741824,batchCases:20,batchBytes:1048576};function gr(t,e){if(e.id!==t.id||e.teamId!==t.teamId||e.projectId!==t.projectId||e.machineId!==t.source.machineId||e.sourceInstanceId!==t.source.instanceId||e.sourceRoot!==t.source.root||e.source!==t.source.source)throw new Error("The hosted destination belongs to another source or workspace.");return{taskDatasetId:e.taskDatasetId,conversationDatasetId:e.conversationDatasetId}}u(gr,"collectorDestinations");function nt(t){let e={tasks:null,conversations:null};if(!t.accountBaseUrl||!t.destinations)return e;let s;try{s=new URL(t.accountBaseUrl)}catch{return e}if(s.protocol!=="https:"&&!(s.protocol==="http:"&&["localhost","127.0.0.1"].includes(s.hostname))||s.username||s.password||s.search||s.hash||s.pathname!=="/")return e;let n=u(i=>i?`${s.origin}/console/datasets/${encodeURIComponent(i)}/tasks?project=${encodeURIComponent(t.projectId)}&connection=${encodeURIComponent(t.id)}`:null,"link");return{tasks:n(t.destinations.taskDatasetId),conversations:n(t.destinations.conversationDatasetId)}}u(nt,"collectorDestinationLinks");var te=class{static{u(this,"CollectorProgress")}database;constructor(e){this.database=e,e.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS backfills(connection_id TEXT PRIMARY KEY,discovered INTEGER NOT NULL DEFAULT 0);
|
|
22
|
+
CREATE TABLE IF NOT EXISTS backfill_units(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,state TEXT NOT NULL,error TEXT,PRIMARY KEY(connection_id,session_key));
|
|
23
|
+
CREATE TABLE IF NOT EXISTS backfill_operations(operation_id TEXT PRIMARY KEY,connection_id TEXT NOT NULL,session_key TEXT NOT NULL,admitted INTEGER NOT NULL DEFAULT 0);
|
|
24
|
+
`)}reset(e){for(let s of["backfill_operations","backfill_units","backfills"])this.database.prepare(`DELETE FROM ${s} WHERE connection_id=?`).run(e)}select(e,s){this.database.prepare("INSERT OR IGNORE INTO backfills(connection_id) VALUES(?)").run(e),this.database.prepare("SELECT discovered FROM backfills WHERE connection_id=?").get(e)?.discovered||this.database.prepare("INSERT OR IGNORE INTO backfill_units VALUES(?,?,'reading',NULL)").run(e,s)}tracks(e,s){let n=this.database.prepare("SELECT state FROM backfill_units WHERE connection_id=? AND session_key=?").get(e,s);return n?.state==="reading"||n?.state==="error"}queued(e,s,n){this.tracks(s,n)&&this.database.prepare("INSERT OR IGNORE INTO backfill_operations VALUES(?,?,?,0)").run(e,s,n)}retained(e,s,n){if(!this.tracks(e,s))return;let i=this.database.prepare("SELECT id FROM pending WHERE connection_id=? AND json_extract(payload,'$.sessionKey')=?").all(e,n);for(let o of i)this.queued(String(o.id),e,s)}read(e,s,n){if(!this.tracks(e,s))return;let i=this.database.prepare("SELECT COUNT(*) AS n FROM backfill_operations WHERE connection_id=? AND session_key=? AND admitted=0").get(e,s);this.database.prepare("UPDATE backfill_units SET state=?,error=NULL WHERE connection_id=? AND session_key=?").run(Number(i?.n)?"queued":n?"complete":"skipped",e,s)}failed(e,s,n){this.tracks(e,s)&&this.database.prepare("UPDATE backfill_units SET state='error',error=? WHERE connection_id=? AND session_key=?").run(n.slice(0,500),e,s)}discovered(e){this.database.prepare("INSERT INTO backfills VALUES(?,1) ON CONFLICT(connection_id) DO UPDATE SET discovered=1").run(e)}acknowledge(e){let s=this.database.prepare("SELECT connection_id,session_key FROM backfill_operations WHERE operation_id=?").get(e);if(!s)return;this.database.prepare("UPDATE backfill_operations SET admitted=1 WHERE operation_id=?").run(e);let n=this.database.prepare("SELECT COUNT(*) AS n FROM backfill_operations WHERE connection_id=? AND session_key=? AND admitted=0").get(s.connection_id,s.session_key);Number(n?.n)||this.database.prepare("UPDATE backfill_units SET state='complete' WHERE connection_id=? AND session_key=? AND state='queued'").run(s.connection_id,s.session_key)}status(e){let s=this.database.prepare("SELECT discovered FROM backfills WHERE connection_id=?").get(e),n=this.database.prepare("SELECT state,COUNT(*) AS n FROM backfill_units WHERE connection_id=? GROUP BY state").all(e),i=u(a=>Number(n.find(r=>r.state===a)?.n??0),"count"),o=n.reduce((a,r)=>a+Number(r.n),0);return{stage:s?.discovered?i("error")?"attention":i("reading")?"reading":i("queued")?"uploading":"complete":"discovering",total:o,admitted:i("complete"),skipped:i("skipped"),failed:i("error")}}};var B=class t{static{u(this,"CollectorStore")}database;progress;constructor(e){this.database=e,this.progress=new te(e)}static async open(e){await Vt(e,{recursive:!0,mode:448}),await rt(e,448);let s=Jt(e,"collector.sqlite"),n=new Xt(s);return await rt(s,384),n.exec(`PRAGMA journal_mode=WAL; PRAGMA synchronous=FULL; PRAGMA busy_timeout=1000;
|
|
25
|
+
CREATE TABLE IF NOT EXISTS settings(key TEXT PRIMARY KEY,value TEXT NOT NULL);
|
|
26
|
+
CREATE TABLE IF NOT EXISTS connections(id TEXT PRIMARY KEY,config TEXT NOT NULL,admitted INTEGER NOT NULL DEFAULT 0,error TEXT);
|
|
27
|
+
CREATE TABLE IF NOT EXISTS admitted_boundaries(connection_id TEXT NOT NULL,boundary_id TEXT NOT NULL,PRIMARY KEY(connection_id,boundary_id));
|
|
28
|
+
CREATE TABLE IF NOT EXISTS source_scans(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,revision TEXT NOT NULL,PRIMARY KEY(connection_id,session_key));
|
|
29
|
+
CREATE TABLE IF NOT EXISTS checkpoints(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,boundary_id TEXT NOT NULL,revision TEXT NOT NULL,PRIMARY KEY(connection_id,session_key,boundary_id));
|
|
30
|
+
CREATE TABLE IF NOT EXISTS pending(id TEXT PRIMARY KEY,connection_id TEXT NOT NULL,payload TEXT NOT NULL,bytes INTEGER NOT NULL,attempts INTEGER NOT NULL DEFAULT 0,retry_at INTEGER NOT NULL DEFAULT 0,created_at INTEGER NOT NULL);
|
|
31
|
+
INSERT OR IGNORE INTO settings VALUES('desiredState','stopped');`),new t(n)}close(){this.database.close()}setting(e){let s=this.database.prepare("SELECT value FROM settings WHERE key=?").get(e);return typeof s?.value=="string"?s.value:null}set(e,s){this.database.prepare("INSERT INTO settings VALUES(?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(e,s)}connections(){return this.database.prepare("SELECT config FROM connections ORDER BY id").all().map(e=>JSON.parse(String(e.config)))}put(e){this.database.exec("BEGIN IMMEDIATE");try{let s=this.connections().find(i=>i.id===e.id);if(s&&s.revision>e.revision){this.database.exec("COMMIT");return}let n=!!s&&(s.source.instanceId!==e.source.instanceId||s.projectId!==e.projectId||s.teamId!==e.teamId||s.apiBaseUrl!==e.apiBaseUrl||s.account!==e.account);if(n&&(e={...e,destinations:void 0}),s&&(n||s.since!==e.since)){this.progress.reset(e.id),this.database.prepare("DELETE FROM settings WHERE key=?").run(`errors:${e.id}`),this.database.prepare("DELETE FROM settings WHERE key=?").run(`syncAcknowledged:${e.id}`),e={...e,completedSyncRevision:0},this.error(e.id,null);for(let i of["source_scans","checkpoints","pending"])this.database.prepare(`DELETE FROM ${i} WHERE connection_id=?`).run(e.id);n&&(this.database.prepare("DELETE FROM admitted_boundaries WHERE connection_id=?").run(e.id),this.database.prepare("UPDATE connections SET admitted=0 WHERE id=?").run(e.id),this.database.prepare("DELETE FROM settings WHERE key=?").run(`lastAdmission:${e.id}`))}else s&&(e={...e,requestedSyncRevision:Math.max(s.requestedSyncRevision??0,e.requestedSyncRevision??0),completedSyncRevision:Math.max(s.completedSyncRevision??0,e.completedSyncRevision??0)});this.database.prepare("INSERT INTO connections(id,config) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET config=excluded.config").run(e.id,JSON.stringify(e)),this.database.exec("COMMIT")}catch(s){throw this.database.exec("ROLLBACK"),s}}error(e,s){this.database.prepare("UPDATE connections SET error=? WHERE id=?").run(s?.slice(0,500)??null,e)}queued(e){return Number((e?this.database.prepare("SELECT COUNT(*) AS n FROM pending WHERE connection_id=?").get(e):this.database.prepare("SELECT COUNT(*) AS n FROM pending").get())?.n??0)}sourceChanged(e,s,n){return this.database.prepare("SELECT revision FROM source_scans WHERE connection_id=? AND session_key=?").get(e,s)?.revision!==n}scanned(e,s,n){this.database.prepare("INSERT INTO source_scans VALUES(?,?,?) ON CONFLICT(connection_id,session_key) DO UPDATE SET revision=excluded.revision").run(e,s,n)}changed(e,s,n,i){return this.database.prepare("SELECT revision FROM checkpoints WHERE connection_id=? AND session_key=? AND boundary_id=?").get(e,s,n)?.revision!==i}enqueue(e,s,n){let i=JSON.stringify(e),o=Buffer.byteLength(i);this.database.exec("BEGIN IMMEDIATE");try{let a=this.database.prepare("SELECT COUNT(*) AS count,COALESCE(SUM(bytes),0) AS bytes FROM pending").get();if(Number(a.count)>=ee.maxPending||Number(a.bytes)+o>ee.maxBytes)throw new Error("Buffer full. Restore connectivity before acquiring more history.");this.database.prepare("INSERT OR IGNORE INTO pending(id,connection_id,payload,bytes,created_at) VALUES(?,?,?,?,?)").run(e.operationId,e.connectionId,i,o,Date.now());let r=this.database.prepare("INSERT INTO checkpoints VALUES(?,?,?,?) ON CONFLICT(connection_id,session_key,boundary_id) DO UPDATE SET revision=excluded.revision");for(let l of s)r.run(e.connectionId,e.sessionKey,l.id,l.revision);n&&this.progress.queued(e.operationId,e.connectionId,n),this.database.exec("COMMIT")}catch(a){throw this.database.exec("ROLLBACK"),a}}next(e){let s=this.database.prepare("SELECT payload,attempts FROM pending WHERE connection_id=? AND retry_at <= ? ORDER BY created_at,id LIMIT 1").get(e,Date.now());return s?{entry:JSON.parse(String(s.payload)),attempts:Number(s.attempts)}:null}acknowledge(e){this.database.exec("BEGIN IMMEDIATE");try{let s=this.database.prepare("DELETE FROM pending WHERE id=?").run(e.operationId);if(Number(s.changes)>0){this.progress.acknowledge(e.operationId),this.set(`lastAdmission:${e.connectionId}`,new Date().toISOString());let n=0,i=this.database.prepare("INSERT OR IGNORE INTO admitted_boundaries VALUES(?,?)");for(let o of e.boundaryIds)n+=Number(i.run(e.connectionId,o).changes);this.database.prepare("UPDATE connections SET admitted=admitted+? WHERE id=?").run(n,e.connectionId)}this.database.exec("COMMIT")}catch(s){throw this.database.exec("ROLLBACK"),s}}retry(e,s){let n=Math.min(6e4,1e3*2**Math.min(s,6));this.database.prepare("UPDATE pending SET attempts=?,retry_at=? WHERE id=?").run(s+1,Date.now()+n+Math.floor(Math.random()*Math.max(1,n/5)),e)}status(){let e=this.setting("heartbeatAt"),s=Number(this.setting("pid"))||null,n=!1;try{s&&(process.kill(s,0),n=!0)}catch{}return{schemaVersion:1,running:n&&!!e&&Date.now()-Date.parse(e)<ee.staleMs,desiredState:this.setting("desiredState")==="running"?"running":"stopped",pid:s,heartbeatAt:e,connections:this.database.prepare("SELECT id,config,admitted,error FROM connections ORDER BY id").all().map(i=>{let o=JSON.parse(String(i.config));return{id:String(i.id),state:o.state,projectId:o.projectId,source:o.source.source,queued:this.queued(String(i.id)),admitted:Number(i.admitted),error:typeof i.error=="string"?i.error:null,backfill:this.progress.status(String(i.id)),pendingBytes:Number(this.database.prepare("SELECT COALESCE(SUM(bytes),0) AS bytes FROM pending WHERE connection_id=?").get(String(i.id))?.bytes??0),lastAdmissionAt:this.setting(`lastAdmission:${i.id}`),requestedSyncRevision:o.requestedSyncRevision??0,completedSyncRevision:o.completedSyncRevision??0,acknowledgedSyncRevision:Number(this.setting(`syncAcknowledged:${i.id}`))||0,destinationLinks:nt(o)}})}}};import{randomUUID as os}from"node:crypto";import{createHash as Yt}from"node:crypto";import{constants as P}from"node:fs";import{chmod as at,copyFile as Kt,lstat as H,mkdir as Zt,mkdtemp as Qt,open as Ee,realpath as se,rename as es,rm as ct}from"node:fs/promises";import{dirname as it,isAbsolute as ts,join as $,relative as ss,resolve as ns,sep as rs}from"node:path";var lt="appimage-runtime",is='const p=require("node:path");const u=require("node:url");const entry=p.join(process.env.APPDIR,"resources","cli","cli.js");process.argv.splice(1,0,entry);import(u.pathToFileURL(entry).href);';async function me(t){let e=ns(t);for(let n=e;;n=it(n)){let i=await H(n).catch(o=>{if(o.code==="ENOENT")return null;throw o});if(i&&(!i.isDirectory()||i.isSymbolicLink()))throw new Error("Collector runtime storage must use real directories.");if(it(n)===n)break}await Zt(e,{recursive:!0,mode:448});let s=await H(e);if(!s.isDirectory()||s.isSymbolicLink()||s.uid!==process.getuid())throw new Error("Collector runtime storage must belong to the current user.");await at(e,448)}u(me,"privateDirectory");async function he(t){let e=Yt("sha256"),s=await Ee(t,P.O_RDONLY|P.O_NOFOLLOW);try{for await(let n of s.createReadStream({autoClose:!1}))e.update(n)}finally{await s.close()}return e.digest("hex")}u(he,"digest");async function fe(t){let e=await Ee(t,P.O_RDONLY|P.O_NOFOLLOW);try{await e.sync()}finally{await e.close()}}u(fe,"sync");async function ot(t,e){let s=await H(t);if(!s.isFile()||s.isSymbolicLink()||s.uid!==process.getuid()||(s.mode&511)!==320||await he(t)!==e)throw new Error("Retained AppImage runtime failed its ownership or integrity check.")}u(ot,"verify");async function dt(t,e=process.env){if(process.platform!=="linux"||!e.APPIMAGE||!e.APPDIR)return null;let s=await se(e.APPDIR),n=await se(t.executable),i=ss(s,n);if(ts(i)||i===".."||i.startsWith(`..${rs}`))return null;let o=t.args[0];if(!o||await se(o)!==$(s,"resources","cli","cli.js"))throw new Error("AppImage collection requires its bundled CLI entrypoint.");let a=await se(e.APPIMAGE),r=await H(a);if(!r.isFile()||r.size>1024*1024*1024)throw new Error("AppImage runtime is unavailable or exceeds the retained size limit.");let l=Buffer.alloc(11),c=await Ee(a,P.O_RDONLY|P.O_NOFOLLOW);try{await c.read(l,0,l.length,0)}finally{await c.close()}if(!l.subarray(0,4).equals(Buffer.from([127,69,76,70]))||!l.subarray(8,11).equals(Buffer.from([65,73,2])))throw new Error("Collector runtime must be a type-2 AppImage.");let p=await he(a);await me(t.directory);let d=$(t.directory,lt);await me(d);let E=$(d,p),h=$(E,"openpond.AppImage"),_=await H(E).catch(y=>{if(y.code==="ENOENT")return null;throw y});if(_){if(!_.isDirectory()||_.isSymbolicLink()||_.uid!==process.getuid()||(_.mode&511)!==448)throw new Error("Retained runtime directory is not private.");await ot(h,p)}else{let y=await Qt($(d,".stage-"));try{let f=$(y,"openpond.AppImage");await Kt(a,f,P.COPYFILE_EXCL),await at(f,320);let m=await H(a);if(r.dev!==m.dev||r.ino!==m.ino||r.size!==m.size||r.mtimeMs!==m.mtimeMs||await he(f)!==p)throw new Error("AppImage changed while preparing the collector runtime; retry installation.");await fe(f),await fe(y);try{await es(y,E)}catch(b){if(!["EEXIST","ENOTEMPTY"].includes(b.code??""))throw b}await ot(h,p),await fe(d)}finally{await ct(y,{recursive:!0,force:!0})}}return{executable:h,args:["-e",is,"--",...t.args.slice(1)]}}u(dt,"retainAppImageRuntime");async function pt(t){let e=$(t,lt),s=await H(e).catch(n=>{if(n.code==="ENOENT")return null;throw n});if(s){if(await me(t),!s.isDirectory()||s.isSymbolicLink()||s.uid!==process.getuid())throw new Error("Refusing to remove unowned collector runtime storage.");await ct(e,{recursive:!0})}}u(pt,"removeAppImageRuntimes");import{execFile as as}from"node:child_process";import{promisify as cs}from"node:util";import{mkdir as ge,writeFile as ne,rm as V,rename as ls}from"node:fs/promises";import{homedir as mt}from"node:os";import{isAbsolute as ut,join as D}from"node:path";var ht=cs(as),C=u(async(t,e)=>{await ht(t,e,{timeout:15e3,maxBuffer:16384,windowsHide:!0})},"command"),q=u(t=>t.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,"""),"xml"),ft=u(t=>`"${t.replace(/\\/gu,"\\\\").replace(/"/gu,'\\"').replace(/%/gu,"%%").replace(/\$/gu,"$$")}"`,"systemd");function we(t){return`openpond-import-${S(t).slice(0,16)}`}u(we,"identity");async function Gr(t,e){let s=await B.open(t);try{s.put(e)}finally{s.close()}}u(Gr,"configureCollector");async function _e(t){let e=await B.open(t);try{return e.status()}finally{e.close()}}u(_e,"collectorStatus");async function ye(t,e,s){let n=await B.open(t);try{if(e==="start"||e==="stop")n.set("desiredState",e==="start"?"running":"stopped");else if(e==="sync")n.set("syncNow","yes");else{let i=n.connections().find(o=>o.id===s);if(!i)throw new Error("Select a retained connection.");n.put({...i,state:e==="pause"?"paused":e==="resume"?"active":"disconnected"})}return n.status()}finally{n.close()}}u(ye,"controlCollector");async function zr(t){if(!ut(t.directory)||!ut(t.executable)||[t.directory,t.executable,...t.args].some(a=>/[\r\n\0]/u.test(a)))throw new Error("Collector service requires absolute paths and single-line arguments.");let e=await dt(t);e&&(t={...t,...e,environment:{...t.environment,ELECTRON_RUN_AS_NODE:"1",APPIMAGE_EXTRACT_AND_RUN:"1"}});let s=Object.entries(t.environment??{});if(s.some(([a,r])=>!["OPENPOND_HOME","ELECTRON_RUN_AS_NODE","APPIMAGE_EXTRACT_AND_RUN"].includes(a)||typeof r!="string"||/[\r\n\0]/u.test(r)))throw new Error("Unsupported service environment setting.");let n=t.home??mt(),i=we(t.directory),o=[...t.args,"import","service","run","--collector-dir",t.directory];if(process.platform==="linux"){let a=D(n,".config/systemd/user");await ge(a,{recursive:!0,mode:448}),await ds(D(a,`${i}.service`),`[Unit]
|
|
32
|
+
Description=OpenPond conversation importer
|
|
33
|
+
After=network-online.target
|
|
34
|
+
[Service]
|
|
35
|
+
Type=simple
|
|
36
|
+
${s.map(([r,l])=>`Environment=${ft(`${r}=${l}`)}`).join(`
|
|
37
|
+
`)}
|
|
38
|
+
ExecStart=${[t.executable,...o].map(ft).join(" ")}
|
|
39
|
+
Restart=on-failure
|
|
40
|
+
RestartSec=5
|
|
41
|
+
UMask=0077
|
|
42
|
+
NoNewPrivileges=true
|
|
43
|
+
[Install]
|
|
44
|
+
WantedBy=default.target
|
|
45
|
+
`,{mode:384}),await C("systemctl",["--user","daemon-reload"]),await C("systemctl",["--user","enable",`${i}.service`])}else if(process.platform==="darwin"){let a=D(n,"Library/LaunchAgents");await ge(a,{recursive:!0,mode:448});let r=D(a,`${i}.plist`),l=!1;try{await C("launchctl",["print",`gui/${process.getuid()}/${i}`]),l=!0}catch{}l&&await C("launchctl",["bootout",`gui/${process.getuid()}/${i}`]),await ne(r,`<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key><string>${i}</string><key>ProgramArguments</key><array>${[t.executable,...o].map(c=>`<string>${q(c)}</string>`).join("")}</array><key>EnvironmentVariables</key><dict>${s.map(([c,p])=>`<key>${q(c)}</key><string>${q(p)}</string>`).join("")}</dict><key>RunAtLoad</key><true/><key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict><key>ThrottleInterval</key><integer>5</integer></dict></plist>`,{mode:384}),await C("launchctl",["bootstrap",`gui/${process.getuid()}`,r])}else if(process.platform==="win32"){let a=(await ht("whoami",[],{timeout:5e3,maxBuffer:1024})).stdout.trim(),r=D(t.directory,"scheduled-task.xml");await ge(t.directory,{recursive:!0});let l=u(d=>`"${d.replace(/(\\*)"/gu,'$1$1\\"').replace(/(\\+)$/u,"$1$1")}"`,"quoted"),c=D(t.directory,"start-collector.ps1"),p=u(d=>`'${d.replace(/'/gu,"''")}'`,"ps");await ne(c,`${s.map(([d,E])=>`$env:${d} = ${p(E)}`).join(`
|
|
46
|
+
`)}
|
|
47
|
+
& ${[t.executable,...o].map(p).join(" ")}
|
|
48
|
+
exit $LASTEXITCODE
|
|
49
|
+
`,{mode:384}),await ne(r,`<?xml version="1.0"?><Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"><Triggers><LogonTrigger><Enabled>true</Enabled><UserId>${q(a)}</UserId></LogonTrigger></Triggers><Principals><Principal id="Owner"><UserId>${q(a)}</UserId><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals><Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>false</StopIfGoingOnBatteries><ExecutionTimeLimit>PT0S</ExecutionTimeLimit><RestartOnFailure><Interval>PT1M</Interval><Count>999</Count></RestartOnFailure></Settings><Actions Context="Owner"><Exec><Command>powershell.exe</Command><Arguments>${q(["-NoProfile","-NonInteractive","-File",c].map(l).join(" "))}</Arguments></Exec></Actions></Task>`,{mode:384}),await C("schtasks",["/Create","/TN",i,"/XML",r,"/F"])}else throw new Error("This OS has no qualified per-user supervisor. Run the collector in the foreground.");return{name:i,platform:process.platform,status:await _e(t.directory)}}u(zr,"installCollectorService");async function Xr(t,e=mt()){await ye(t,"stop");let s=we(t);if(process.platform==="linux")await C("systemctl",["--user","disable","--now",`${s}.service`]),await V(D(e,".config/systemd/user",`${s}.service`),{force:!0}),await C("systemctl",["--user","daemon-reload"]);else if(process.platform==="darwin")await C("launchctl",["bootout",`gui/${process.getuid()}/${s}`]),await V(D(e,"Library/LaunchAgents",`${s}.plist`),{force:!0});else if(process.platform==="win32")await C("schtasks",["/End","/TN",s]),await C("schtasks",["/Delete","/TN",s,"/F"]),await V(D(t,"scheduled-task.xml"),{force:!0}),await V(D(t,"start-collector.ps1"),{force:!0});else throw new Error("No per-user supervisor is available.");return process.platform==="linux"&&await pt(t),_e(t)}u(Xr,"uninstallCollectorService");async function Vr(t){await ye(t,"start");let e=we(t);try{if(process.platform==="linux")await C("systemctl",["--user","restart",`${e}.service`]);else if(process.platform==="darwin")await C("launchctl",["kickstart","-k",`gui/${process.getuid()}/${e}`]);else if(process.platform==="win32")await C("schtasks",["/Run","/TN",e]);else throw new Error("No per-user supervisor is available.")}catch(s){throw await ye(t,"stop"),s}return _e(t)}u(Vr,"startCollectorService");async function ds(t,e,s){let n=`${t}.${os()}.tmp`;try{await ne(n,e,{...s,flag:"wx"}),await ls(n,t)}finally{await V(n,{force:!0})}}u(ds,"atomicServiceFile");import{homedir as ps}from"node:os";import{join as Et,resolve as us}from"node:path";import{randomUUID as fs}from"node:crypto";import{mkdir as ms,open as hs,readFile as Es}from"node:fs/promises";function gs(t=process.env.OPENPOND_HOME||Et(ps(),".openpond")){return us(t,"conversation-importer")}u(gs,"collectorDirectory");async function ti(t=gs()){await ms(t,{recursive:!0,mode:448});let e=Et(t,"machine-id");try{let n=await hs(e,"wx",384);try{await n.writeFile(fs()),await n.sync()}finally{await n.close()}}catch(n){if(n.code!=="EEXIST")throw n}let s=(await Es(e,"utf8")).trim();if(!/^[a-f0-9-]{36}$/u.test(s))throw new Error("Collector machine identity is invalid; restore its retained state.");return s}u(ti,"collectorMachineId");export{Se as a,Rs as b,kn as c,pr as d,ur as e,fr as f,ee as g,gr as h,B as i,Gr as j,_e as k,ye as l,zr as m,Xr as n,Vr as o,gs as p,ti as q};
|