openpond 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/actions-command-F55CBR2K.js +2 -0
- package/dist/chunks/app-layer-GNYLOBCX.js +3 -0
- package/dist/chunks/app-server-runtime-VAGY4LQS.js +2 -0
- package/dist/chunks/apps-HZ5JGBDR.js +2 -0
- package/dist/chunks/chunk-22UARBPW.js +3 -0
- package/dist/chunks/chunk-3A7HZJNE.js +1 -0
- package/dist/chunks/chunk-3M53YXEI.js +2 -0
- package/dist/chunks/chunk-3NDRIQTI.js +2 -0
- package/dist/chunks/chunk-6FA3GG5B.js +33 -0
- package/dist/chunks/chunk-6MI4KKWF.js +2 -0
- package/dist/chunks/chunk-7D2LMRP7.js +2 -0
- package/dist/chunks/chunk-A42DFLOR.js +16 -0
- package/dist/chunks/chunk-AF57BF75.js +24 -0
- package/dist/chunks/chunk-BX4J2VDU.js +2 -0
- package/dist/chunks/chunk-BZMVB3GS.js +2 -0
- package/dist/chunks/chunk-CCJG7GLE.js +5 -0
- package/dist/chunks/chunk-CWQWV2T3.js +2 -0
- package/dist/chunks/chunk-DUA3QP6Y.js +19 -0
- package/dist/chunks/chunk-EAPFMACH.js +10 -0
- package/dist/chunks/chunk-EG3XB6M6.js +5 -0
- package/dist/chunks/chunk-ES2ISFJC.js +66 -0
- package/dist/chunks/chunk-FTQLQJQV.js +2 -0
- package/dist/chunks/chunk-FYCJSUFV.js +53 -0
- package/dist/chunks/chunk-GEANXBLX.js +2 -0
- package/dist/chunks/chunk-GLUWATL5.js +2 -0
- package/dist/chunks/chunk-GPZYIVFV.js +2199 -0
- package/dist/chunks/chunk-H7IWJN7L.js +17 -0
- package/dist/chunks/chunk-HZP5U2AA.js +3 -0
- package/dist/chunks/chunk-I5K74TOH.js +3 -0
- package/dist/chunks/chunk-I7G35U7K.js +2 -0
- package/dist/chunks/chunk-IR3YJWPW.js +7 -0
- package/dist/chunks/chunk-J7WZSLHS.js +18 -0
- package/dist/chunks/chunk-K35OOAW2.js +6 -0
- package/dist/chunks/chunk-KDXLNQNF.js +12 -0
- package/dist/chunks/chunk-KJYNLFWD.js +2872 -0
- package/dist/chunks/chunk-KV2IXO2T.js +6 -0
- package/dist/chunks/chunk-NVGMZ2IN.js +2 -0
- package/dist/chunks/chunk-OGPHXXCD.js +1 -0
- package/dist/chunks/chunk-RAKJWIYO.js +36 -0
- package/dist/chunks/chunk-RWSAGQTP.js +2 -0
- package/dist/chunks/chunk-SDO4FC4Q.js +2 -0
- package/dist/chunks/chunk-T5XCPX4P.js +3 -0
- package/dist/chunks/chunk-VYUMTRB3.js +5 -0
- package/dist/chunks/chunk-X37KMV27.js +1 -0
- package/dist/chunks/chunk-XAYIETBO.js +28 -0
- package/dist/chunks/chunk-XEOEKFG6.js +71 -0
- package/dist/chunks/chunk-ZVOO7FKM.js +2 -0
- package/dist/chunks/cli-UYTSZB4Y.js +2 -0
- package/dist/chunks/configuration-command-HAPIYG25.js +2 -0
- package/dist/chunks/continual-D75WA7E7.js +7 -0
- package/dist/chunks/core-commands-N37UZEVE.js +2 -0
- package/dist/chunks/database-X2CUV732.js +2 -0
- package/dist/chunks/desktop-test-V7FBEG7U.js +3 -0
- package/dist/chunks/dist-NKLXFA37.js +2 -0
- package/dist/chunks/extension-NEPOQ44P.js +5 -0
- package/dist/chunks/help-HC4N5ZQC.js +8 -0
- package/dist/chunks/module-ES6BEMUI-ZVL3F6NW.js +2 -0
- package/dist/chunks/module-asyncify-2EFITU5U-R7TVXNAE.js +2 -0
- package/dist/chunks/opchat-C7XRN4ZW.js +3 -0
- package/dist/chunks/organizations-LQGRZJ2V.js +2 -0
- package/dist/chunks/profile-UWM24A7R.js +3 -0
- package/dist/chunks/project-agent-2ME52ZJW.js +2 -0
- package/dist/chunks/sandbox-command-53L3ZICT.js +2 -0
- package/dist/chunks/sandbox-template-55HUM5H7.js +10 -0
- package/dist/chunks/src-EYJF2LWV.js +319 -0
- package/dist/chunks/src-VGW2UEMV.js +82 -0
- package/dist/chunks/taskset-PISBOILQ.js +2 -0
- package/dist/chunks/teams-bot-FHD2HCHN.js +3 -0
- package/dist/chunks/training-2NDOWH5S.js +2 -0
- package/dist/chunks/workspaces-CQFVCR7T.js +2 -0
- package/dist/cli.js +3 -109
- package/dist/index.js +1 -31230
- package/dist/sandbox-template/manifest.js +1 -18380
- package/dist/web/assets/App-BoJQRfeu.js +176 -0
- package/dist/web/assets/AppDialog-rdfmJsGF.js +1 -0
- package/dist/web/assets/AppTerminalPanel-CLW0kxtg.js +2 -0
- package/dist/web/assets/{AppsView-B1NUuAIf.js → AppsView-DxMXadnp.js} +1 -1
- package/dist/web/assets/{BrowserSidebar-DOvYxXeP.js → BrowserSidebar-BH_jl0JS.js} +1 -1
- package/dist/web/assets/{CartesianChart-pOrYpzBr.js → CartesianChart-oT_rMYpf.js} +1 -1
- package/dist/web/assets/{CollaborationTabs-CgbR-MBJ.js → CollaborationTabs-CukgFGE0.js} +1 -1
- package/dist/web/assets/{CommandMenu-CrIr4qUX.js → CommandMenu-2btBTgOF.js} +1 -1
- package/dist/web/assets/{CommunityView-CvAVQ_HZ.js → CommunityView-DMTREmN5.js} +1 -1
- package/dist/web/assets/{ComposerCreateImproveStrip-DybcKwwd.js → ComposerCreateImproveStrip-3tN55cg9.js} +1 -1
- package/dist/web/assets/GetStartedView-CMHL24_w.js +1 -0
- package/dist/web/assets/HostedModelLearningReview-CqkSelkC.js +1 -0
- package/dist/web/assets/HostedModelLearningSettings-xqd2lSW3.js +1 -0
- package/dist/web/assets/LabModelVersionDetailPage-Bpnya5DM.js +1 -0
- package/dist/web/assets/{LabSkillSidebar-CuaYrtiu.js → LabSkillSidebar-BKZjScr8.js} +1 -1
- package/dist/web/assets/LabsRoute-BhPFmA_Z.js +32 -0
- package/dist/web/assets/LabsRoute-C1FWCoYb.css +1 -0
- package/dist/web/assets/MainChatThread-Bosxokt-.js +2 -0
- package/dist/web/assets/MainPane-Di-Rwe7x.js +8 -0
- package/dist/web/assets/{MarkdownText-DOlVQR8a.js → MarkdownText-dK4SBPp_.js} +1 -1
- package/dist/web/assets/{Messages-DMubppta.js → Messages-ftYRMKYa.js} +6 -6
- package/dist/web/assets/{NativeSkillSidebar-DSFwZ-od.js → NativeSkillSidebar-Cwo7JdB2.js} +1 -1
- package/dist/web/assets/{NewExperienceSwitcher-Dj0ePIJ-.js → NewExperienceSwitcher-C1_JzTq2.js} +1 -1
- package/dist/web/assets/{NewProjectDialog-B8NQV-Ji.js → NewProjectDialog-CxP6v6YW.js} +1 -1
- package/dist/web/assets/{OutputsPage-D_LDYTgV.js → OutputsPage-DL21_Alp.js} +1 -1
- package/dist/web/assets/{ProjectsPage-xjDYPc_W.js → ProjectsPage-BO9VyvMA.js} +1 -1
- package/dist/web/assets/RightChatPanelStack-DaqAnzdR.js +1 -0
- package/dist/web/assets/{RightSidebarHomePanel-j0VckZUu.js → RightSidebarHomePanel-PbUG12AO.js} +1 -1
- package/dist/web/assets/{ScheduledWorkPage-1aT4bBY-.js → ScheduledWorkPage-BhL-cXML.js} +1 -1
- package/dist/web/assets/{SettingsView-BSpuMDpv.js → SettingsView-D6-s7G88.js} +7 -7
- package/dist/web/assets/TeamChatView-DbS1N-fo.js +3 -0
- package/dist/web/assets/{TerminalOverlay-CrSwUk2d.js → TerminalOverlay-CphyBXJR.js} +3 -3
- package/dist/web/assets/{TrainingCreationPanel-B4HMRwUg.js → TrainingCreationPanel-Czsdraix.js} +1 -1
- package/dist/web/assets/{TrainingDraftPanel-D4r1tN3I.js → TrainingDraftPanel-Bq3B5pUk.js} +1 -1
- package/dist/web/assets/{UsageSettingsSection-2aymqwIM.js → UsageSettingsSection-B74FNwaP.js} +5 -5
- package/dist/web/assets/{WorkSidebarPanel-B0X0OiR6.js → WorkSidebarPanel-BgaK4XSg.js} +1 -1
- package/dist/web/assets/WorkspaceDiffPanel-C3seHnVY.js +14 -0
- package/dist/web/assets/{WorkspaceEnvironmentMenu-OAfMEt7L.js → WorkspaceEnvironmentMenu-DPghQUdv.js} +3 -3
- package/dist/web/assets/{WorkspaceGitDialogs-YxcPH2Rq.js → WorkspaceGitDialogs-D8c6Okb_.js} +1 -1
- package/dist/web/assets/{WorkspaceMonacoEditor-COKTiQZl.js → WorkspaceMonacoEditor-2kjRFf4l.js} +36 -36
- package/dist/web/assets/{arrow-up-right-_TX-awvK.js → arrow-up-right-C5X-29oa.js} +1 -1
- package/dist/web/assets/chat-file-links-Bmz9kVct.js +1 -0
- package/dist/web/assets/chevron-up-NbP9vY4E.js +1 -0
- package/dist/web/assets/{clipboard-CyRSS8Sy.js → clipboard-fvHMXPWa.js} +1 -1
- package/dist/web/assets/{cloud-upload-uBJBUYTy.js → cloud-upload-BAycsdHL.js} +1 -1
- package/dist/web/assets/{cssMode-BrXSsZYs.js → cssMode-Yis679a5.js} +1 -1
- package/dist/web/assets/{folder-open-DktdZNW7.js → folder-open-bii4KUCv.js} +1 -1
- package/dist/web/assets/{folder-plus-DO06i9Vo.js → folder-plus-B0B7mUCx.js} +1 -1
- package/dist/web/assets/{git-commit-horizontal-zFSIkPs7.js → git-commit-horizontal-B6yTdtnB.js} +1 -1
- package/dist/web/assets/{htmlMode-X9UMFkjt.js → htmlMode-DHeBSKVF.js} +1 -1
- package/dist/web/assets/{index-UOGdfLzi.js → index-667pXXsu.js} +1 -1
- package/dist/web/assets/{index-ByQIHpc9.css → index-BGMzUaup.css} +1 -1
- package/dist/web/assets/{info-BEJXUqCD.js → info-NCOESX3I.js} +1 -1
- package/dist/web/assets/{jsonMode-DIsB-j2E.js → jsonMode-C4oxy1cU.js} +1 -1
- package/dist/web/assets/{lspLanguageFeatures-CmZ17KpA.js → lspLanguageFeatures-CLj3WGZW.js} +1 -1
- package/dist/web/assets/{minimize-2-DumTpFtE.js → minimize-2-DtI1vgd7.js} +1 -1
- package/dist/web/assets/{monaco.contribution-D6w5PJji.js → monaco.contribution-DZPgekIQ.js} +2 -2
- package/dist/web/assets/{monaco.contribution-DJ_NmcHu.js → monaco.contribution-Ddw-TznO.js} +2 -2
- package/dist/web/assets/{monaco.contribution-YVDfJcG4.js → monaco.contribution-DhVPJ-oY.js} +2 -2
- package/dist/web/assets/{monaco.contribution-LZEujgny.js → monaco.contribution-DrW6DjWP.js} +2 -2
- package/dist/web/assets/{play-CLFeH7CU.js → play-DB3XFAnG.js} +1 -1
- package/dist/web/assets/{python-Djbda_qZ.js → python-DLyUeEeL.js} +1 -1
- package/dist/web/assets/{refresh-cw-B4IpQ_7Q.js → refresh-cw-0zSLZtfp.js} +1 -1
- package/dist/web/assets/{save-BbTHztnA.js → save-BCZlshOA.js} +1 -1
- package/dist/web/assets/{square-BJrVbmz6.js → square-CRytZWR_.js} +1 -1
- package/dist/web/assets/{toggleHighContrast-BopU5W9S.js → toggleHighContrast-TXg0rI_R.js} +1 -1
- package/dist/web/assets/{tsMode-CH_0_YDX.js → tsMode-Bj1019AY.js} +1 -1
- package/dist/web/assets/{upload-UumVeufu.js → upload-CnE9u7GB.js} +1 -1
- package/dist/web/assets/{useLocalAgentSchedules-BRa23U7O.js → useLocalAgentSchedules-qI87RHVI.js} +1 -1
- package/dist/web/assets/{wifi-off-BWJWivn6.js → wifi-off-CfuwRBx7.js} +1 -1
- package/dist/web/assets/{workers-pTe8RvSI.js → workers-CXdUI7wU.js} +1 -1
- package/dist/web/assets/{yaml-DNLASORn.js → yaml-AP8aiwLm.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +4 -3
- package/dist/chunks/actions-command-6N5XWMR6.js +0 -185
- package/dist/chunks/app-layer-F3CGXB33.js +0 -216
- package/dist/chunks/app-server-runtime-RHO5TFUC.js +0 -23
- package/dist/chunks/apps-L5XCL7QY.js +0 -429
- package/dist/chunks/chunk-26AMV5ZI.js +0 -634
- package/dist/chunks/chunk-3EB7I67T.js +0 -630
- package/dist/chunks/chunk-3ELF4FXY.js +0 -96
- package/dist/chunks/chunk-3VEYNDHN.js +0 -669
- package/dist/chunks/chunk-4KA25HUP.js +0 -5648
- package/dist/chunks/chunk-4L3ZJS2T.js +0 -1207
- package/dist/chunks/chunk-6SMNG6YA.js +0 -1303
- package/dist/chunks/chunk-7RIGZB7N.js +0 -1148
- package/dist/chunks/chunk-A6G3PFA5.js +0 -2164
- package/dist/chunks/chunk-BVY5JYM6.js +0 -512
- package/dist/chunks/chunk-DLQQIWN2.js +0 -648
- package/dist/chunks/chunk-FJ2JGB2N.js +0 -1373
- package/dist/chunks/chunk-FQS2QL5F.js +0 -14522
- package/dist/chunks/chunk-G65WAOJV.js +0 -1643
- package/dist/chunks/chunk-JTHL5XJ2.js +0 -1838
- package/dist/chunks/chunk-K4TZEHAW.js +0 -602
- package/dist/chunks/chunk-KCRCIQPD.js +0 -66
- package/dist/chunks/chunk-KSRWKXRB.js +0 -12
- package/dist/chunks/chunk-MUMPWI4O.js +0 -92
- package/dist/chunks/chunk-NTK22KJD.js +0 -10707
- package/dist/chunks/chunk-OCBRPU2K.js +0 -629
- package/dist/chunks/chunk-PS37DB5F.js +0 -183
- package/dist/chunks/chunk-R3C3MNSI.js +0 -140
- package/dist/chunks/chunk-SMNFI2FU.js +0 -113
- package/dist/chunks/chunk-UACZUFIA.js +0 -47
- package/dist/chunks/chunk-UZMVNKXM.js +0 -1275
- package/dist/chunks/chunk-VT6BLHMB.js +0 -67198
- package/dist/chunks/chunk-W5GKHH77.js +0 -168
- package/dist/chunks/chunk-X6F4LBTQ.js +0 -832
- package/dist/chunks/chunk-X7ZG4TSW.js +0 -3063
- package/dist/chunks/chunk-XA4KBDMY.js +0 -13723
- package/dist/chunks/chunk-YVCYVDNP.js +0 -746
- package/dist/chunks/chunk-ZNQEROWP.js +0 -254
- package/dist/chunks/cli-D2MUUBEX.js +0 -23
- package/dist/chunks/configuration-command-NR6JYIUD.js +0 -187
- package/dist/chunks/continual-37CE4LLJ.js +0 -803
- package/dist/chunks/core-commands-SWGIOZLW.js +0 -50
- package/dist/chunks/database-DEYUZDIM.js +0 -20
- package/dist/chunks/desktop-test-QOS7G5NE.js +0 -148
- package/dist/chunks/dist-AKYCQNNF.js +0 -187
- package/dist/chunks/extension-HJUJBQAD.js +0 -9378
- package/dist/chunks/help-J6PZ23IC.js +0 -67
- package/dist/chunks/opchat-ABX5YBAT.js +0 -169
- package/dist/chunks/organizations-CPNC47DO.js +0 -806
- package/dist/chunks/profile-Q3HB5MIO.js +0 -1136
- package/dist/chunks/project-agent-YHUBX4OR.js +0 -516
- package/dist/chunks/sandbox-command-YFL5QTWX.js +0 -1661
- package/dist/chunks/sandbox-template-Z6P7NTNF.js +0 -1655
- package/dist/chunks/src-7XEENEBI.js +0 -3628
- package/dist/chunks/src-KBBIV4NT.js +0 -56125
- package/dist/chunks/taskset-2TRZBRRT.js +0 -66
- package/dist/chunks/teams-bot-WD33NLH5.js +0 -146
- package/dist/chunks/training-4XH37UZB.js +0 -17
- package/dist/chunks/workspaces-WG2MH2WE.js +0 -99
- package/dist/web/assets/App-C9aGkxVg.js +0 -173
- package/dist/web/assets/AppDialog-CK6_lg8c.js +0 -1
- package/dist/web/assets/AppTerminalPanel-BKqgX4sd.js +0 -2
- package/dist/web/assets/GetStartedView-DVInkexN.js +0 -1
- package/dist/web/assets/LabModelVersionDetailPage-NaaPElmM.js +0 -1
- package/dist/web/assets/LabsRoute-BRR6x3SX.js +0 -2
- package/dist/web/assets/LabsRoute-CGFgymTX.css +0 -1
- package/dist/web/assets/MainChatThread-BfkjCZB9.js +0 -2
- package/dist/web/assets/MainPane-Gw-YK38n.js +0 -8
- package/dist/web/assets/RightChatPanelStack-BktRQ9wg.js +0 -1
- package/dist/web/assets/TeamChatView-BPWJbDf1.js +0 -3
- package/dist/web/assets/WorkspaceDiffPanel-Pg7GL0br.js +0 -14
- package/dist/web/assets/chat-file-links-CWLsRYvW.js +0 -1
- package/dist/web/assets/chevron-up--mNnEqha.js +0 -1
- package/dist/web/assets/index-BEPmTPIA.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{a as e}from"./chunk-FTQLQJQV.js";import{createHash as d,randomUUID as u}from"node:crypto";function l(n){let t=n.explicitKey?.trim();if(t)return t;let r=n.sourceHead?.trim()||"unknown-source",s=n.targetProjectId?.trim()||"no-target-project",c=a(n.input).slice(0,16),i=`profile-push-run:${n.localHead}:${r}:${n.runtimeAgentId}:${s}:${c}`;return n.retry?`${i}:retry:${(n.randomId??u)()}`:i}e(l,"buildHostedRunIdempotencyKey");function a(n){return d("sha256").update(o(n)).digest("hex")}e(a,"hashStableJson");function o(n){return n===void 0?"undefined":n===null||typeof n!="object"?JSON.stringify(n)??"null":Array.isArray(n)?`[${n.map(t=>o(t)).join(",")}]`:`{${Object.entries(n).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${JSON.stringify(t)}:${o(r)}`).join(",")}}`}e(o,"stableJsonStringify");export{l as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{c as x}from"./chunk-ZVOO7FKM.js";import{c as m,f as R,g as S,h as T}from"./chunk-3M53YXEI.js";import{a}from"./chunk-FTQLQJQV.js";import{readFile as $}from"node:fs/promises";import{request as D}from"node:http";import{randomUUID as L}from"node:crypto";import H from"node:os";import U from"node:path";import{createInterface as _}from"node:readline/promises";var B="http://127.0.0.1:17874",J=new Set(["cancelled","completed","failed","succeeded"]);async function le(e,n,t={}){let r=n[0],o=n[1];if(!r||!["start","status","watch","logs","cancel","resume","artifacts","benchmark","create-project"].includes(r)||!o)throw new Error("usage: training <create-project|start|status|watch|logs|cancel|resume|artifacts|benchmark> <taskset-id|model-run-id|run-id|model-id>");if(n.length>2)throw new Error(`training ${r} accepts exactly one identifier`);let s=x(e)??process.env.OPENPOND_LOCAL_API_URL?.replace(/\/$/,"")??B,i=new A({baseUrl:s,request:t.request??await G(s)}),c=R(e.json);if(r==="create-project"){let f=await F({client:i,options:e,tasksetId:o});I(f,c);return}if(r==="benchmark"){await V({client:i,modelId:o,options:e,json:c,sleep:t.sleep});return}if(r==="resume"){let f=await i.modelRun(o,"resume","POST");I(f,c),await M({client:i,runId:o,json:c,intervalMs:T(e.intervalMs,"interval-ms")??2e3,sleep:t.sleep});return}if(r==="start"){await W({client:i,dependencies:t,json:c,modelRunId:o,options:e});return}if(r==="watch"){await M({client:i,runId:o,json:c,intervalMs:T(e.intervalMs,"interval-ms")??2e3,sleep:t.sleep});return}let p=r==="status"?"status":r==="logs"?"logs":r==="artifacts"?"artifacts":"cancel",u=await i.modelRun(o,p,r==="cancel"?"POST":"GET");I(u,c)}a(le,"runTrainingCommand");async function G(e){let n=new URL(e);if(n.protocol!=="http:"||!["127.0.0.1","localhost","::1"].includes(n.hostname))return fetch;let t=process.env.OPENPOND_HOME?.trim()||U.join(H.homedir(),".openpond","openpond-app"),r=(await $(U.join(t,"token"),"utf8")).trim();if(!r)throw new Error("OpenPond local capability token is empty.");return(async(o,s={})=>{let i=o instanceof Request?new URL(o.url):new URL(String(o)),c=new Headers(s.headers);c.set("authorization",`Bearer ${r}`);let p={};return c.forEach((u,f)=>{p[f]=u}),new Promise((u,f)=>{let b=!1,w=D(i,{method:s.method??"GET",headers:p},l=>{let j=[];l.on("data",g=>j.push(g)),l.once("error",y),l.once("end",()=>{if(b)return;b=!0;let g=new Headers;for(let[k,h]of Object.entries(l.headers))if(Array.isArray(h))for(let P of h)g.append(k,P);else h!==void 0&&g.set(k,h);u(new Response(new Uint8Array(Buffer.concat(j)),{status:l.statusCode??500,statusText:l.statusMessage,headers:g}))})}),y=a(l=>{b||(b=!0,f(l))},"rejectOnce");if(w.once("error",y),s.signal){let l=a(()=>w.destroy(s.signal?.reason instanceof Error?s.signal.reason:new Error("Training API request aborted.")),"abort");s.signal.aborted?l():s.signal.addEventListener("abort",l,{once:!0})}if(s.body!==void 0&&s.body!==null){if(typeof s.body!="string"&&!(s.body instanceof Uint8Array)){w.destroy(new Error("Local Training API supports string or byte request bodies."));return}w.write(s.body)}w.end()})})}a(G,"createLocalAuthenticatedRequest");var A=class{static{a(this,"TrainingApiClient")}baseUrl;request;constructor(n){this.baseUrl=n.baseUrl.replace(/\/$/,""),this.request=n.request??fetch}modelRun(n,t,r,o){return this.json(`/v1/training/model-runs/${encodeURIComponent(n)}/${t}`,r,o)}prepareModelProject(n,t){return this.json(`/v1/training/model-projects/${encodeURIComponent(n)}/training/prepare`,"POST",t)}startModelProject(n,t){return this.json(`/v1/training/model-projects/${encodeURIComponent(n)}/training/start`,"POST",t)}trainingState(){return this.json("/v1/training","GET")}startHarnessRefinerBenchmark(n,t){return this.json(`/v1/training/models/${encodeURIComponent(n)}/harness-refiner-benchmark`,"POST",t)}importTasksetDraftPackage(n){return this.json("/v1/training/taskset-drafts/import","POST",n)}publishTasksetDraft(n,t){return this.json(`/v1/training/taskset-drafts/${encodeURIComponent(n)}/publish`,"POST",t?{modelId:t}:{})}tasksetReadiness(n){return this.json("/v1/training/readiness","POST",{tasksetId:n})}deleteTasksetDraft(n){return this.json(`/v1/training/taskset-drafts/${encodeURIComponent(n)}`,"DELETE")}saveModelProject(n){return this.json("/v1/training/models","PUT",n)}async json(n,t,r){let o=await this.request(`${this.baseUrl}${n}`,{method:t,headers:r===void 0?{Accept:"application/json"}:{Accept:"application/json","Content-Type":"application/json"},body:r===void 0?void 0:JSON.stringify(r)}),s=await o.text(),i=null;if(s)try{i=JSON.parse(s)}catch{i=s}if(!o.ok){let c=i&&typeof i=="object"&&"error"in i&&typeof i.error=="string"?i.error:`${o.status} ${o.statusText}`.trim();throw new Error(`Training API request failed: ${c}`)}return i}};async function V(e){let n=await e.client.trainingState(),t=z(n,e.modelId),r=m(e.options,"provider")||"openpond",o=m(e.options,"model")||"openpond-chat",s=m(e.options,"reasoningEffort")||"high",i=S(e.options.maxSpend,"max-spend")??10;if(i<=0)throw new Error("max-spend must be greater than zero");if(R(e.options.detach))throw new Error("Harness Refiner benchmark runs must be watched to terminal state.");let c=await e.client.startHarnessRefinerBenchmark(e.modelId,{profileId:t.profileId,model:{providerId:r,modelId:o},reasoningEffort:s==="none"?"none":s,maximumSpendUsd:i});I(c,e.json);let p=d(c,"id");if(!p)throw new Error("Benchmark start did not return a Model Run id.");await M({client:e.client,runId:p,json:e.json,intervalMs:T(e.options.intervalMs,"interval-ms")??2e3,sleep:e.sleep})}a(V,"startHarnessRefinerBenchmark");function z(e,n){if(!e||typeof e!="object"||!("modelProjects"in e))throw new Error("Training state did not include Models.");let r=(Array.isArray(e.modelProjects)?e.modelProjects:[]).find(s=>s&&typeof s=="object"&&"id"in s&&s.id===n),o=r&&typeof r=="object"?d(r,"profileId"):null;if(!o)throw new Error(`Model ${n} was not found.`);return{profileId:o}}a(z,"modelProject");function d(e,n){if(!e||typeof e!="object"||!(n in e))return null;let t=e[n];return typeof t=="string"&&t?t:null}a(d,"objectString");async function F(e){let n=m(e.options,"recipe");if(!n)throw new Error("training create-project requires --recipe <versioned-recipe.json>");let t=await Q(n,"Training recipe"),r=await e.client.trainingState(),o=K(r,"tasksets",e.tasksetId,"Taskset"),s=m(e.options,"profile")||d(o,"profileId");if(!s)throw new Error(`The Taskset has no Profile id (received ${typeof o.profileId}: ${String(o.profileId)}).`);let i=d(o,"profileId");if(i!==s)throw new Error(`Taskset ${e.tasksetId} belongs to Profile ${i??"unknown"}, not ${s}.`);let c=m(e.options,"projectId")||`model_${L()}`,u=C(r,"modelProjects").find(E=>d(E,"id")===c),f=O(e.options,"rolloutPlacement",["local","remote"],"local"),b=O(e.options,"gpuPlacementObjective",["fast","balanced","economical"],"balanced"),w=O(e.options,"runPreset",["small","standard","custom","small_experiment"],"custom"),y=S(e.options.maxSpend,"max-spend")??null;if(y!==null&&y<0)throw new Error("max-spend must be non-negative");let l=T(e.options.retentionDays,"retention-days")??null;if(l!==null&&l<0)throw new Error("retention-days must be non-negative");let j=new Date().toISOString(),g=d(o,"contentHash"),k=q(o,"revision");if(!g||!k||k<1)throw new Error("The Taskset does not have an immutable published revision.");let h=d(t,"method");if(!h)throw new Error("Training recipe must declare its method.");let P=Y(t);if(u){let E=v(u,"trainingSetup"),N=v(E,"tasksetRef");if(d(N,"id")!==e.tasksetId||d(u,"profileId")!==s)throw new Error(`Model Project ${c} already exists for a different Profile or Taskset.`);if(v(E,"baseModel"))throw new Error(`Model Project ${c} already exists.`);return e.client.saveModelProject({...u,revision:q(u,"revision")??1,defaultBaseModel:P,trainingSetup:{...E,baseModel:P,recipe:t},updatedAt:j})}return e.client.saveModelProject({schemaVersion:"openpond.modelProject.v2",id:c,profileId:s,revision:1,name:m(e.options,"name")||d(o,"name")||"Managed Model",objective:m(e.options,"objective")||d(o,"objective"),defaultBaseModel:P,defaultDestinationId:m(e.options,"destination")||"openpond_managed",trainingSetup:{tasksetRef:{id:e.tasksetId,revision:k,contentHash:g},tasksetRelease:null,harnessRelease:null,baseModel:P,method:h,destinationId:m(e.options,"destination")||"openpond_managed",managedRolloutPlacement:f,managedGpuPlacementObjective:b,managedGpuRequirement:"any",runPreset:w,recipe:t,preferredMaximumSpendUsd:y,preferredRetentionDays:l},hosted:null,tasksetSyncs:[],createdAt:j,updatedAt:j})}a(F,"createManagedModelProject");function Y(e){let n=v(e,"baseModel"),t=d(n,"id"),r=d(n,"revision"),o=d(n,"tokenizerRevision"),s=d(n,"chatTemplateHash");if(!t||!r||!o||!s)throw new Error("Managed GRPO recipe must pin baseModel id, revision, tokenizerRevision, and chatTemplateHash.");return{schemaVersion:"openpond.baseModelPreference.v1",modelId:t,revision:r,tokenizerRevision:o,chatTemplateHash:s,modelAssetId:null,source:"managed"}}a(Y,"managedBasePreferenceFromRecipe");function K(e,n,t,r){let o=C(e,n).find(s=>d(s,"id")===t);if(!o)throw new Error(`${r} ${t} was not found.`);return o}a(K,"trainingStateRecord");function C(e,n){if(!e||typeof e!="object"||!(n in e))return[];let t=e[n];return Array.isArray(t)?t.filter(r=>!!r&&typeof r=="object"&&!Array.isArray(r)):[]}a(C,"trainingStateRecords");function q(e,n){if(!e||typeof e!="object"||!(n in e))return null;let t=e[n];return typeof t=="number"&&Number.isFinite(t)?t:null}a(q,"objectNumber");function v(e,n){if(!e||typeof e!="object"||!(n in e))return null;let t=e[n];return t&&typeof t=="object"&&!Array.isArray(t)?t:null}a(v,"objectRecord");function O(e,n,t,r){let o=m(e,n)||r;if(!t.includes(o))throw new Error(`${n} must be one of ${t.join(", ")}`);return o}a(O,"enumOption");async function Q(e,n){let t;try{t=JSON.parse(await $(e,"utf8"))}catch(r){throw new Error(`Could not read ${n} ${e}: ${r instanceof Error?r.message:String(r)}`)}if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${n} must be a JSON object.`);return t}a(Q,"readJsonObject");async function W(e){let n=S(e.options.maxSpend,"max-spend")??null;if(n!==null&&n<0)throw new Error("max-spend must be non-negative");let t=T(e.options.retentionDays,"retention-days")??null;if(t!==null&&t<=0)throw new Error("retention-days must be a positive integer");let r=m(e.options,"manifest"),o=r?await X(r):void 0,s=m(e.options,"comparisonSeriesEntry")||null,i={maximumSpendUsd:n,retentionDays:t},c=await e.client.prepareModelProject(e.modelRunId,i);if(e.json||(console.log("Preparation:"),console.log(JSON.stringify(c,null,2))),!(R(e.options.yes)||await Z(e.dependencies.confirm)))throw new Error("Training start cancelled.");let u=await e.client.startModelProject(e.modelRunId,{...i,exportApproved:R(e.options.exportApproved),manifest:o,comparisonSeriesEntryId:s});if(I(u,e.json),R(e.options.detach))return;let f=ee(u)??e.modelRunId;await M({client:e.client,runId:f,json:e.json,intervalMs:2e3,sleep:e.dependencies.sleep})}a(W,"startTraining");async function M(e){if(e.intervalMs<250)throw new Error("interval-ms must be at least 250");let n=e.sleep??(r=>new Promise(o=>setTimeout(o,r))),t="";for(;;){let r=await e.client.modelRun(e.runId,"status","GET"),o=JSON.stringify(r);if((e.json||o!==t)&&(I(r,e.json),t=o),J.has(ne(r)))return;await n(e.intervalMs)}}a(M,"watchTraining");async function X(e){let n;try{n=JSON.parse(await $(e,"utf8"))}catch(t){throw new Error(`Could not read Harness Run Manifest ${e}: ${t instanceof Error?t.message:String(t)}`)}if(!n||typeof n!="object"||Array.isArray(n))throw new Error("Harness Run Manifest must be a JSON object.");return n}a(X,"readManifest");async function Z(e){let n="Start this exact prepared training run? Downloads, provisioning, or spend may begin.";if(e)return e(n);if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("training start requires --yes when standard input is not interactive");let t=_({input:process.stdin,output:process.stdout});try{let r=await t.question(`${n} [y/N] `);return r.trim().toLowerCase()==="y"||r.trim().toLowerCase()==="yes"}finally{t.close()}}a(Z,"confirmStart");function ee(e){if(!e||typeof e!="object")return null;let n="job"in e?e.job:null;return!n||typeof n!="object"||!("id"in n)?null:typeof n.id=="string"?n.id:null}a(ee,"readRunId");function ne(e){return!e||typeof e!="object"?"":"state"in e&&typeof e.state=="string"?e.state:"status"in e&&typeof e.status=="string"?e.status:""}a(ne,"readStatus");function I(e,n){if(n){console.log(JSON.stringify(e));return}console.log(JSON.stringify(e,null,2))}a(I,"printResult");export{B as a,le as b,G as c,A as d};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{e as D,f as K,g as W}from"./chunk-ZVOO7FKM.js";import{h as $}from"./chunk-KDXLNQNF.js";import{Z as B,ca as L,da as x,ea as U,f as A,fa as C,g as I,ga as M,ha as N,ia as k,j as _,u as T}from"./chunk-CWQWV2T3.js";import{a as O,b as v}from"./chunk-GLUWATL5.js";import{f as y}from"./chunk-3M53YXEI.js";import{a as o}from"./chunk-FTQLQJQV.js";import{stdin as q,stdout as F}from"node:process";import{createInterface as oe}from"node:readline/promises";var ie=`${O}/settings/api-keys`;function se(e){let t=process.env.OPENPOND_API_KEY?.trim();if(t)return t;let n=e.apiKey?.trim();if(n)return n;let r=e.token?.trim();return r&&r.startsWith("opk_")?r:null}o(se,"resolveApiKey");async function ae(){if(!q.isTTY||!F.isTTY)throw new Error("OpenPond API key is required in non-interactive mode. Set OPENPOND_API_KEY or run `openpond login` in a terminal.");console.log("Open the OpenPond UI to create an API key:"),console.log(ie);let e=oe({input:q,output:F});try{let t=(await e.question("Paste your OpenPond API key: ")).trim();if(!t)throw new Error("API key is required");return t.startsWith("opk_")||console.log("warning: API keys usually start with opk_."),t}finally{e.close()}}o(ae,"promptForApiKey");async function H(e,t){let n=se(e);if(n)return n;let r=await ae();return await L({apiKey:r,baseUrl:t,activeProfile:e.activeProfile}),console.log("Saved account credentials to the encrypted OpenPond credential store."),r}o(H,"ensureApiKey");function ve(e){if(e.repoUrl)return e.repoUrl;if(e.gitHost&&e.gitOwner&&e.gitRepo)return`https://${e.gitHost}/${e.gitOwner}/${e.gitRepo}.git`;throw new Error("repoUrl missing from API response")}o(ve,"resolveRepoUrl");function Ae(e,t){let n=new URL(e),r=encodeURIComponent(t);return`${n.protocol}//x-access-token:${r}@${n.host}${n.pathname}`}o(Ae,"formatTokenizedRepoUrl");function Ie(e){let t=new URL(e);return`${t.protocol}//x-access-token:$OPENPOND_API_KEY@${t.host}${t.pathname}`}o(Ie,"formatTokenizedRepoUrlForPrint");function _e(e){return e.replace(/x-access-token:[^@]+@/g,"x-access-token:***@")}o(_e,"redactToken");function Te(e){let t=process.env.OPENPOND_BASE_URL;if(t)try{let n=new URL(t).hostname,r=new URL(e).hostname;n&&r&&n!==r&&(console.warn(`warning: repo host (${r}) does not match OPENPOND_BASE_URL (${n})`),console.warn("warning: verify your git host configuration matches OPENPOND_BASE_URL."))}catch{}}o(Te,"warnOnRepoHostMismatch");function Y(e){let t=e.split("/").filter(Boolean);if(t.length!==2)throw new Error("expected <handle>/<repo>");return{handle:t[0],repo:t[1]}}o(Y,"parseHandleRepo");function P(e){return(e||"").trim().toLowerCase()}o(P,"normalizeRepoName");async function ue(e){if(!e.forceRefresh){let n=await U({apiBase:e.apiBase,apiKey:e.apiKey,ttlMs:x});if(n)return n}let t=await _(e.apiBase,e.apiKey);return await C({apiBase:e.apiBase,apiKey:e.apiKey,apps:t}),t}o(ue,"fetchAppsWithCache");async function ke(e){if(!e.forceRefresh){let r=await M({apiBase:e.apiBase,apiKey:e.apiKey,ttlMs:x});if(r)return r}let t=await T(e.apiBase,e.apiKey),n=Array.isArray(t.tools)?t.tools:[];return await N({apiBase:e.apiBase,apiKey:e.apiKey,tools:n}),n}o(ke,"fetchToolsWithCache");async function De(e,t,n){let{handle:r,repo:s}=Y(n),i=await ue({apiBase:e,apiKey:t}),a=P(s),d=i.find(u=>u.handle&&u.handle!==r?!1:[u.repo,u.gitRepo,u.id].map(P).includes(a));if(!d)throw new Error(`app not found for ${r}/${s}`);return{app:d,handle:r,repo:s}}o(De,"resolveAppTarget");async function Ke(e){let t=e.intervalMs??5e3,n=e.timeoutMs??240*1e3,r=new Set,s=Date.now();for(;Date.now()-s<n;){let a=(await A(e.baseUrl,e.apiKey,e.deploymentId)).filter(u=>!r.has(u.id));for(let u of a)r.add(u.id);for(let u of a)console.log(`${e.prefix}${u.message}`);let d=await I(e.baseUrl,e.apiKey,e.deploymentId);if(d.status==="failed"){console.log(`${e.prefix}deployment failed`);return}if(d.status==="running"||d.status==="deployed"){console.log(`${e.prefix}deployment complete`);return}await new Promise(u=>setTimeout(u,t))}console.log(`${e.prefix}deployment still in progress`)}o(Ke,"pollDeploymentLogs");import{stdin as z,stdout as V}from"node:process";import{createInterface as G}from"node:readline/promises";async function X(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(String(t)));return Buffer.concat(e).toString("utf8").replace(/\r?\n$/,"")}o(X,"readAllStdin");function j(e){return new Promise((t,n)=>{let r=process.stdin,s=process.stderr,i="",a=r.isRaw;function d(){r.off("data",u),r.setRawMode&&r.setRawMode(a),r.pause(),s.write(`
|
|
3
|
+
`)}o(d,"cleanup");function u(p){let f=Buffer.isBuffer(p)?p:Buffer.from(p);for(let c of f){if(c===3){d(),n(new Error("secret prompt cancelled"));return}if(c===13||c===10){d(),t(i);return}if(c===127||c===8){i.length>0&&(i=i.slice(0,-1),s.write("\b \b"));continue}i+=Buffer.from([c]).toString("utf8"),s.write("*")}}o(u,"onData"),s.write(e),r.resume(),r.setRawMode&&r.setRawMode(!0),r.on("data",u)})}o(j,"readMaskedLine");async function Ye(e,t=!1){let n=G({input:z,output:V});try{let r=t?"[Y/n]":"[y/N]",s=(await n.question(`${e} ${r} `)).trim().toLowerCase();return s?s==="y"||s==="yes":t}finally{n.close()}}o(Ye,"promptConfirm");async function ze(e){let t=G({input:z,output:V});try{return(await t.question(`Local path (default: ${e}): `)).trim()||e}finally{t.close()}}o(ze,"promptForPath");var J=["readonly","attempt","feature","rollout","replay","template_build","scheduled_run","patch_only","hotfix","multi_feature_batch"],Z=["none","manual","auto_after_checks"],Q=[...k];function de(e,t){return(process.env.OPENPOND_SANDBOX_BASE_URL||process.env.OPENPOND_API_URL||e.apiBaseUrl||W(process.env.OPENPOND_BASE_URL||e.baseUrl)||v).replace(/\/$/,"")}o(de,"resolveSandboxBaseUrl");async function rt(e){let t=await ce(e),n=K(t),r=await H(t,n),s=D(e)||process.env.OPENPOND_SANDBOX_API_URL?.trim()||null,i=de(t,e);return $(s?{apiKey:r,sandboxApiUrl:s}:{apiKey:r,baseUrl:i})}o(rt,"resolveSandboxClient");async function ce(e){return B()}o(ce,"loadSandboxConfig");function ot(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw new Error("workflow-mode must be a non-empty value");let t=e.trim();if(!J.includes(t))throw new Error(`workflow-mode must be one of ${J.join(", ")}`);return t}o(ot,"parseSandboxWorkflowModeOption");function it(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw new Error("runtime-promotion-policy must be a non-empty value");let t=e.trim();if(!Z.includes(t))throw new Error(`runtime-promotion-policy must be one of ${Z.join(", ")}`);return t}o(it,"parseSandboxRuntimePromotionPolicyOption");function st(e){if(typeof e!="string"||!e.trim())return;let t=e.trim();if(!Q.includes(t))throw new Error(`runtime-profile-id must be one of ${Q.join(", ")}`);return t}o(st,"parseSandboxRuntimeProfileIdOption");function le(e){let t=ee(e.envRef,"env-ref").map(({name:i,value:a})=>({name:i,secretRef:a})),n=ee(e.envLiteral,"env-literal").map(({name:i,value:a})=>{if(fe(i)&&!y(e.allowPlainSecretEnv))throw new Error(`refusing plaintext value for secret-like env ${i}; create a sandbox secret and pass --env-ref ${i}=openpond://secret/...`);return{name:i,value:a}}),r=[...t,...n],s=new Set;for(let i of r){if(s.has(i.name))throw new Error(`duplicate sandbox env var: ${i.name}`);s.add(i.name)}return r}o(le,"parseSandboxEnvOptions");function at(e,t){let n=le(t),r=new Set(n.map(a=>a.name)),s=new Map(n.map(a=>[a.name,a]));for(let a of e.inputs.env)if(s.get(a.name)?.value!==void 0&&a.secret!==!1)throw new Error(`sandbox template env ${a.name} requires a secret ref. Pass --env-ref ${a.name}=openpond://secret/...`);let i=e.inputs.env.filter(a=>a.required&&!r.has(a.name)).map(a=>a.name);if(i.length>0)throw new Error(`missing required sandbox template env refs: ${i.join(", ")}. Pass --env-ref NAME=openpond://secret/...`);return n}o(at,"parseSandboxTemplateEnvOptions");function ee(e,t){return typeof e!="string"?[]:e.split(",").map(n=>n.trim()).filter(Boolean).map(n=>{let r=n.indexOf("=");if(r<=0)throw new Error(`${t} entries must use NAME=value`);let s=n.slice(0,r).trim(),i=n.slice(r+1).trim();if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(s))throw new Error(`${t} has invalid env name: ${s}`);if(!i)throw new Error(`${t} value is required for ${s}`);return{name:s,value:i}})}o(ee,"parseSandboxEnvAssignments");function fe(e){return/(?:SECRET|TOKEN|KEY|PASSWORD|PASSWD|PRIVATE|CREDENTIAL|DATABASE_URL|DSN)/i.test(e)}o(fe,"isSecretLikeEnvName");async function ut(e,t){if(typeof e.value=="string"||typeof e.secretValue=="string")throw new Error("sandbox secret values must be provided with --stdin or the masked prompt");if(y(e.stdin)){let s=await X();if(!s)throw new Error(`${t} read no secret value from stdin`);return s}if(!process.stdin.isTTY)throw new Error(`${t} requires --stdin when not running in a TTY`);let r=await j(`${t}: `);if(!r)throw new Error(`${t} cannot be empty`);return r}o(ut,"readSandboxSecretValue");function dt(e){return{id:e.id,teamId:e.teamId,name:e.name,scope:e.scope,status:e.status,secretRef:e.secretRef,currentVersion:e.currentVersion,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,attachedDestinations:e.attachments?.length??0}}o(dt,"summarizeSandboxSecret");import{Buffer as S}from"node:buffer";import{spawn as re}from"node:child_process";var pe=600*1e3,me=2*1024*1024;function b(e,t=[],n={}){return n.inherit&&n.terminateWhenStdoutIncludes!==void 0?Promise.reject(new Error("terminateWhenStdoutIncludes requires captured stdout")):n.terminateWhenStdoutIncludes===""?Promise.reject(new Error("terminateWhenStdoutIncludes must not be empty")):new Promise((r,s)=>{let i=re(e,t,{cwd:n.cwd,env:n.env?{...process.env,...n.env}:void 0,shell:n.shell,detached:n.detached??process.platform!=="win32",stdio:n.inherit?"inherit":[n.stdin===void 0?"ignore":"pipe","pipe","pipe"]}),a=new h(te(n)),d=new h(te(n)),u=!1,p=n.timeoutMs??pe,f,c,w=null,g=!1,R=o(()=>{f&&clearTimeout(f),c&&clearTimeout(c)},"clearTimers"),E=o(l=>{w!==null||g||(w=l,u=l==="timeout",f&&(clearTimeout(f),f=void 0),ne(i.pid,"SIGTERM"),c=setTimeout(()=>{i.exitCode===null&&i.signalCode===null&&ne(i.pid,"SIGKILL")},5e3))},"requestTermination");p>0&&(f=setTimeout(()=>{E("timeout")},p)),n.inherit||(i.stdout?.on("data",l=>{a.append(l);let m=n.terminateWhenStdoutIncludes;m!==void 0&&a.text().includes(m)&&E("output")}),i.stderr?.on("data",l=>{d.append(l)})),i.on("error",l=>{R(),g=!0,s(l)}),i.on("close",(l,m)=>{g||(g=!0,R(),r({code:l,signal:m,terminationReason:w??(m?"signal":"exit"),stdout:a.text(),stderr:d.text(),timedOut:u,stdoutTruncated:a.truncated,stderrTruncated:d.truncated}))}),n.stdin!==void 0&&i.stdin?.end(n.stdin)})}o(b,"runProcessCommand");var h=class{static{o(this,"BoundedOutput")}#t=[];#n;#e=0;truncated=!1;constructor(t){this.#n=t}append(t){let n=S.isBuffer(t)?t:S.from(t),r=this.#n-this.#e;if(r<=0){n.byteLength>0&&(this.truncated=!0);return}if(n.byteLength<=r){this.#t.push(n),this.#e+=n.byteLength;return}this.#t.push(n.subarray(0,r)),this.#e+=r,this.truncated=!0}text(){let t=S.concat(this.#t,this.#e).toString("utf8");return this.truncated?`${t}
|
|
4
|
+
[truncated after ${this.#n} bytes]
|
|
5
|
+
`:t}};function te(e){let t=e.maxOutputBytes??me;return Math.max(0,Math.floor(t))}o(te,"maxOutputBytes");function ne(e,t){if(e){if(process.platform==="win32"){let n=["/PID",String(e),"/T"];t==="SIGKILL"&&n.push("/F"),re("taskkill",n,{stdio:"ignore",windowsHide:!0}).unref();return}try{process.kill(-e,t)}catch(n){if(n.code!=="ESRCH")throw n}}}o(ne,"terminateProcessTree");async function ge(e,t,n={}){return b(e,t,{cwd:n.cwd,inherit:n.inherit,timeoutMs:n.timeoutMs,maxOutputBytes:n.maxOutputBytes,terminateWhenStdoutIncludes:n.terminateWhenStdoutIncludes})}o(ge,"runCommand");async function xt(e,t={}){let n=t.timeoutSeconds===void 0?void 0:t.timeoutSeconds*1e3;return b(e,[],{cwd:t.cwd,env:t.env,shell:!0,inherit:t.inherit,timeoutMs:n,maxOutputBytes:t.maxOutputBytes})}o(xt,"runShellCommand");async function Pt(e,t){let n=await ge("git",["remote","get-url",t],{cwd:e});if(n.code!==0)return null;let r=n.stdout.trim();return r.length>0?r:null}o(Pt,"getGitRemoteUrl");export{se as a,ae as b,H as c,ve as d,Ae as e,Ie as f,_e as g,Te as h,P as i,ue as j,ke as k,De as l,Ke as m,Ye as n,ze as o,rt as p,ot as q,it as r,st as s,le as t,at as u,ut as v,dt as w,b as x,ge as y,xt as z,Pt as A};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{a as W,b as X}from"./chunk-GLUWATL5.js";import{Ja as Y,Ka as q,Ua as L,ya as V,za as D}from"./chunk-FYCJSUFV.js";import{f as P,h as F}from"./chunk-H7IWJN7L.js";import{a as i}from"./chunk-FTQLQJQV.js";var I=class extends Error{constructor(n,o){super(`API request timed out after ${n}ms: ${o}`);this.timeoutMs=n;this.requestUrl=o;this.name="ApiTimeoutError"}timeoutMs;requestUrl;static{i(this,"ApiTimeoutError")}code="OPENPOND_API_TIMEOUT"},E=class extends Error{constructor(n,o){super(`API response exceeded ${n} bytes: ${o}`);this.maximumBytes=n;this.requestUrl=o;this.name="ApiResponseTooLargeError"}maximumBytes;requestUrl;static{i(this,"ApiResponseTooLargeError")}code="OPENPOND_API_RESPONSE_TOO_LARGE"},N=class extends Error{constructor(n,o,r,s=null){let a=s||o;super(`${r} failed: ${n}${a?` ${a}`:""}`);this.status=n;this.apiMessage=s;this.name="OpenPondApiError",this.code=o||"OPENPOND_API_ERROR"}status;apiMessage;static{i(this,"OpenPondApiError")}code};async function c(t,e,n,o={}){let{timeoutMs:r=3e4,maxResponseBytes:s=8388608,...a}=o,l=`${t}${n}`,p=new Headers(a.headers);p.set("Content-Type","application/json");let d=process.env.OPENPOND_API_KEY,g=e?.trim()||"",h=g.startsWith("opk_"),f=d||(h?g:null);f&&!p.has("openpond-api-key")&&p.set("openpond-api-key",f),e?p.set("Authorization",h?`ApiKey ${g}`:`Bearer ${e}`):d&&!p.has("Authorization")&&p.set("Authorization",`ApiKey ${d}`);let x=new AbortController,T=new I(r,l),O=r>0?setTimeout(()=>x.abort(T),r):null;O?.unref?.();let _=he(a.signal,x.signal,r),k=i(()=>{O&&clearTimeout(O)},"cleanup");try{let B=await fetch(l,{...a,headers:p,signal:_});return ge(B,{cleanup:k,maximumBytes:s,requestUrl:l,timeoutController:x,timeoutError:T})}catch(B){throw k(),x.signal.aborted?T:B}}i(c,"apiFetch");async function y(t,e){let n;try{let o=await t.text();n=o?JSON.parse(o):{}}catch(o){if(o instanceof I||o instanceof E)throw o;n={}}if(!t.ok){let o=typeof n.error=="string"?n.error:null,r=typeof n.message=="string"?n.message:null;throw new N(t.status,o,e,r)}return n}i(y,"readApiJson");function ge(t,e){if(!t.body)return e.cleanup(),t;let n=Number(t.headers.get("content-length"));if(e.maximumBytes>0&&Number.isFinite(n)&&n>e.maximumBytes)throw e.cleanup(),t.body.cancel(),new E(e.maximumBytes,e.requestUrl);let o=t.body.getReader(),r=0,s=new ReadableStream({async pull(a){try{let l=await o.read();if(l.done){e.cleanup(),a.close();return}if(r+=l.value.byteLength,e.maximumBytes>0&&r>e.maximumBytes){e.cleanup(),await o.cancel(),a.error(new E(e.maximumBytes,e.requestUrl));return}a.enqueue(l.value)}catch(l){e.cleanup(),a.error(e.timeoutController.signal.aborted?e.timeoutError:l)}},async cancel(a){e.cleanup(),await o.cancel(a)}});return new Response(s,{headers:t.headers,status:t.status,statusText:t.statusText})}i(ge,"boundedResponse");function he(t,e,n){return n<=0?t??void 0:t?AbortSignal.any([t,e]):e}i(he,"composedSignal");async function ye(t,e,n,o,r){let s=await c(t,e,`/v4/apps/${n}/commits`,{method:"POST",body:JSON.stringify({files:o,message:r})});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Commit failed: ${s.status} ${a}`)}return await s.json()}i(ye,"commitFiles");async function Re(t,e,n,o){let r=o?.environment??"production",s=await c(t,e,`/v4/apps/${n}/deployments`,{method:"POST",body:JSON.stringify({environment:r,...o?.commitSha?{commitSha:o.commitSha}:{},...o?.branch?{branch:o.branch}:{}})});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Deploy failed: ${s.status} ${a}`)}return await s.json()}i(Re,"deployApp");async function Pe(t,e,n,o){let r=await c(t,e,`/v4/apps/${encodeURIComponent(n)}/deployments/promote-preview`,{method:"POST",body:JSON.stringify(o)});return y(r,"Preview promotion")}i(Pe,"promotePreviewToProduction");async function Ae(t,e,n,o){let r=await c(t,e,`/v1/apps/${encodeURIComponent(n)}/lifecycle/start`,{method:"POST",body:JSON.stringify(o)});return y(r,"App lifecycle start")}i(Ae,"startAppLifecycle");async function Se(t,e,n){let o=await c(t,e,`/apps/deployments/${n}/logs`,{method:"GET"});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`Deployment logs failed: ${o.status} ${a}`)}let r=await o.json().catch(()=>({}));return(Array.isArray(r.logs)?r.logs:[]).map(a=>{let l=typeof a.createdAt=="string"?a.createdAt:a.createdAt instanceof Date?a.createdAt.toISOString():new Date().toISOString();return{id:typeof a.id=="string"?a.id:`${Math.random()}`,type:typeof a.type=="string"?a.type:void 0,message:typeof a.message=="string"?a.message:"",createdAt:l}})}i(Se,"getDeploymentLogs");async function we(t,e,n){let o=await c(t,e,`/apps/deployments/${n}/status`,{method:"GET"});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`Deployment status failed: ${o.status} ${s}`)}return{status:(await o.json().catch(()=>({}))).deployment?.status}}i(we,"getDeploymentStatus");async function xe(t,e,n,o){let r=new URLSearchParams;o?.status&&o.status.length>0&&r.set("status",o.status.join(",")),o?.createdAfter&&r.set("createdAfter",o.createdAfter),o?.branch&&r.set("branch",o.branch);let s=r.toString(),a=await c(t,e,`/apps/${n}/deployments/latest${s?`?${s}`:""}`,{method:"GET"});if(!a.ok){let p=await a.text().catch(()=>"");throw new Error(`Latest deployment lookup failed: ${a.status} ${p}`)}let l=await a.json().catch(()=>({}));return l.deployment?{id:l.deployment.id,status:l.deployment.status}:null}i(xe,"getLatestDeploymentForApp");async function be(t,e,n){let o=await c(t,e,`/apps/deployments/${n}`,{method:"GET"});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`Deployment fetch failed: ${o.status} ${s}`)}return(await o.json().catch(()=>({}))).deployment??null}i(be,"getDeploymentDetail");var Te=new URL(X).hostname,Oe=new URL(W).hostname;async function Ye(t,e,n){let o=new URLSearchParams;n?.handle&&o.set("handle",n.handle),typeof n?.limit=="number"&&Number.isFinite(n.limit)&&o.set("limit",String(Math.max(1,Math.floor(n.limit)))),typeof n?.offset=="number"&&Number.isFinite(n.offset)&&o.set("offset",String(Math.max(0,Math.floor(n.offset)))),typeof n?.includeScheduled=="boolean"&&o.set("includeScheduled",n.includeScheduled?"true":"false");let r=o.toString(),s=await c(t,e,`/apps/list${r?`?${r}`:""}`,{method:"GET"});if(!s.ok){let l=await s.text().catch(()=>"");throw new Error(`Apps list failed: ${s.status} ${l}`)}let a=await s.json().catch(()=>({}));return Array.isArray(a.apps)?a.apps:[]}i(Ye,"listApps");async function We(t,e,n){let o=await c(t,e,"/api/projects/local",{method:"POST",body:JSON.stringify(n)});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Create project failed: ${o.status} ${r}`)}return await o.json()}i(We,"createLocalProject");async function Xe(t,e,n){let o=await c(t,e,"/apps/repo/create",{method:"POST",body:JSON.stringify(n)});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Repo create failed: ${o.status} ${r}`)}return await o.json()}i(Xe,"createRepo");async function Qe(t,e,n,o){let r=await c(t,e,`/apps/${encodeURIComponent(n)}/code-visibility`,{method:"PATCH",body:JSON.stringify({codeVisibility:o})});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Code visibility update failed: ${r.status} ${s}`)}return await r.json()}i(Qe,"updateAppCodeVisibility");async function Ze(t,e,n,o){let r=await c(t,e,"/v4/apps/headless",{method:"POST",body:JSON.stringify({items:n,...o?{teamId:o}:{}})});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Headless create failed: ${r.status} ${s}`)}return await r.json()}i(Ze,"createHeadlessApps");async function et(t,e,n){let o=await c(t,e,`/v4/apps/${n}/template/status`,{method:"GET"});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Template status failed: ${o.status} ${r}`)}return await o.json()}i(et,"getTemplateStatus");async function tt(t,e,n){let o=await c(t,e,`/v4/apps/${n}/template/branches`,{method:"GET"});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Template branches failed: ${o.status} ${r}`)}return await o.json()}i(tt,"listTemplateBranches");async function nt(t,e,n,o){let r=await c(t,e,`/v4/apps/${n}/template/deploy-latest`,{method:"POST",body:JSON.stringify(o)});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Template deploy failed: ${r.status} ${s}`)}return await r.json()}i(nt,"deployLatestTemplate");async function ot(t,e,n,o){let r=await c(t,e,`/v4/apps/${n}/environment`,{method:"POST",body:JSON.stringify(o)});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Environment update failed: ${r.status} ${s}`)}return await r.json()}i(ot,"updateAppEnvironment");async function st(t,e,n){let o=await c(t,e,`/v4/apps/${n}/environment`,{method:"GET"});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Environment get failed: ${o.status} ${r}`)}return await o.json()}i(st,"getAppEnvironment");async function rt(t,e){let n=await c(t,e,"/api/tools/manifest",{method:"GET"});if(!n.ok){let o=await n.text().catch(()=>"");throw new Error(`Manifest fetch failed: ${n.status} ${o}`)}return await n.json()}i(rt,"fetchToolManifest");async function it(t,e){let n=await c(t,e,"/apps/tools",{method:"GET"});if(!n.ok){let o=await n.text().catch(()=>"");throw new Error(`Tools lookup failed: ${n.status} ${o}`)}return await n.json()}i(it,"listUserTools");async function at(t,e,n){let o=await c(t,e,`/apps/${encodeURIComponent(n)}/schedules`,{method:"GET"});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`Schedules lookup failed: ${o.status} ${s}`)}let r=await o.json().catch(()=>({}));return{schedules:Array.isArray(r.schedules)?r.schedules:[]}}i(at,"listAppSchedules");async function lt(t,e,n={}){let o=new URLSearchParams;n.domain&&o.set("domain",n.domain),n.opentoolVersion&&o.set("opentoolVersion",n.opentoolVersion),typeof n.limit=="number"&&o.set("limit",String(n.limit));for(let a of n.tags??[])o.append("tag",a);let r=o.toString(),s=await c(t,e,`/v1/opentool/recipes${r?`?${r}`:""}`,{method:"GET"});return y(s,"OpenTool recipe list")}i(lt,"listOpenToolRecipes");async function ct(t,e,n){let o=await c(t,e,"/v1/opentool/recipes/search",{method:"POST",body:JSON.stringify(n)});return y(o,"OpenTool recipe search")}i(ct,"searchOpenToolRecipes");async function ut(t,e,n){let o=new URLSearchParams;typeof n.includeExamples=="boolean"&&o.set("includeExamples",String(n.includeExamples)),typeof n.includeTests=="boolean"&&o.set("includeTests",String(n.includeTests)),n.opentoolVersion&&o.set("opentoolVersion",n.opentoolVersion);let r=o.toString(),s=await c(t,e,`/v1/opentool/recipes/${encodeURIComponent(n.id)}${r?`?${r}`:""}`,{method:"GET"});return y(s,"OpenTool recipe get")}i(ut,"getOpenToolRecipe");async function pt(t,e,n){let o=await c(t,e,"/v1/opentool/rules",{method:"POST",body:JSON.stringify(n)});return y(o,"OpenTool rules get")}i(pt,"getOpenToolRules");function H(t){let e=new URLSearchParams;typeof t=="number"&&Number.isFinite(t)&&e.set("limit",String(Math.max(1,Math.floor(t))));let n=e.toString();return n?`?${n}`:""}i(H,"buildLimitQuery");function Q(t){if(Array.isArray(t))return t;if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.logs)?e.logs:Array.isArray(e.runs)?e.runs:Array.isArray(e.scheduleRuns)?e.scheduleRuns:Array.isArray(e.items)?e.items:[]}i(Q,"normalizeScheduleExecutionLogs");async function dt(t,e,n,o){let r={...o?.preferredScheduleId?{preferredScheduleId:o.preferredScheduleId}:{},...o?.scheduleId?{scheduleId:o.scheduleId}:{},...o?.startAt?{startAt:o.startAt}:{},...o&&"endAt"in o?{endAt:o.endAt??null}:{}},s=await c(t,e,`/apps/${encodeURIComponent(n)}/schedules/start`,{method:"POST",body:JSON.stringify(r)});return y(s,"Schedule start")}i(dt,"startAppSchedules");async function ft(t,e,n){let o=await c(t,e,`/apps/${encodeURIComponent(n)}/schedules/stop`,{method:"POST",body:JSON.stringify({})});return y(o,"Schedule stop")}i(ft,"stopAppSchedules");async function mt(t,e){let n=await c(t,e,"/apps/schedules/current/stop",{method:"POST",body:JSON.stringify({})});return y(n,"Current schedule stop")}i(mt,"stopCurrentAppSchedules");async function gt(t,e,n){let o=await c(t,e,"/v1/schedules/run",{method:"POST",body:JSON.stringify({scheduleId:n.scheduleId})});return y(o,"Schedule run")}i(gt,"runScheduleNow");async function ht(t,e,n,o){let r=await c(t,e,`/apps/${encodeURIComponent(n)}/schedules/${encodeURIComponent(o)}`,{method:"DELETE"});return y(r,"Schedule delete")}i(ht,"deleteOrArchiveSchedule");async function yt(t,e,n,o){let r=await c(t,e,`/v1/schedules/${encodeURIComponent(n)}/execution-logs${H(o?.limit)}`,{method:"GET"}),s=await y(r,"Schedule execution logs");return{logs:Q(s)}}i(yt,"listScheduleExecutionLogs");async function Rt(t,e,n,o){let r=await c(t,e,`/v1/deployments/${encodeURIComponent(n)}/schedule-execution-logs${H(o?.limit)}`,{method:"GET"}),s=await y(r,"Deployment schedule execution logs");return{logs:Q(s)}}i(Rt,"listDeploymentScheduleExecutionLogs");async function Pt(t,e,n){let o=await c(t,e,`/v1/schedule-execution-logs/${encodeURIComponent(n)}`,{method:"GET"});return y(o,"Schedule execution log")}i(Pt,"getScheduleExecutionLog");async function At(t,e,n,o){let r=await c(t,e,`/v1/apps/${encodeURIComponent(n)}/execution-timeline${H(o?.limit)}`,{method:"GET"});return y(r,"App execution timeline")}i(At,"getAppExecutionTimeline");async function St(t,e,n){return c(t,e,"/apps/agent/create",{method:"POST",body:JSON.stringify(n)})}i(St,"createAgentFromPrompt");async function wt(t,e,n){let o=new URLSearchParams;n?.appId&&o.set("appId",n.appId);let r=o.toString(),s=await c(t,e,`/apps/performance${r?`?${r}`:""}`,{method:"GET"});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Performance lookup failed: ${s.status} ${a}`)}return await s.json()}i(wt,"getUserPerformance");async function xt(t,e,n){let o=new URLSearchParams({appId:n}),r=await c(t,e,`/apps/summary?${o.toString()}`,{method:"GET"});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Summary lookup failed: ${r.status} ${s}`)}return await r.json()}i(xt,"getAppRuntimeSummary");async function Ee(t,e){let n=await c(t,e,"/v1/account",{method:"GET"});if(!n.ok){let o=await n.text().catch(()=>"");throw new Error(`Account lookup failed: ${n.status} ${o}`)}return await n.json()}i(Ee,"getOpenPondAccount");async function bt(t,e){let n=new Date().toISOString(),o=Date.now(),r=t.replace(/\/$/,"");try{let s=await c(r,null,"/health",{method:"GET",headers:{Accept:"application/json"}}),a=Date.now()-o,l=await s.json().catch(()=>({})),p=null,d=null;if(e?.trim())try{let g=await Ee(r,e);p=!0,d=g.account}catch{p=!1}return{reachable:s.ok,authenticated:p,apiBase:r,latencyMs:a,status:s.status,service:typeof l.service=="string"?l.service:null,checkedAt:n,account:d,...s.ok?{}:{error:s.statusText||`HTTP ${s.status}`}}}catch(s){return{reachable:!1,authenticated:e?.trim()?!1:null,apiBase:r,latencyMs:Date.now()-o,status:null,service:null,checkedAt:n,error:s instanceof Error?s.message:String(s)}}}i(bt,"checkOpenPondApiHealth");async function Tt(t,e,n){let o=await c(t,e,"/apps/assistant/run",{method:"POST",body:JSON.stringify(n)});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Assistant run failed: ${o.status} ${r}`)}return await o.json()}i(Tt,"runAssistantMode");async function Ot(t,e,n){let o=await c(t,e,"/apps/agent/digest",{method:"POST",body:JSON.stringify(n)});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Agent digest failed: ${o.status} ${r}`)}return await o.json()}i(Ot,"postAgentDigest");async function Et(t,e,n){let o=await c(t,e,"/apps/tools/execute",{method:"POST",body:JSON.stringify(n)}),r=await o.text().catch(()=>""),s=null;try{s=r?JSON.parse(r):null}catch{s=r}return o.ok?{ok:!0,status:o.status,data:s}:{ok:!1,status:o.status,error:s&&typeof s=="object"&&"error"in s?String(s.error):r||o.statusText}}i(Et,"executeUserTool");async function Ct(t,e,n){let o=await c(t,e,"/apps/backtests/run",{method:"POST",body:JSON.stringify(n)});if(!o.ok){let r=await o.text().catch(()=>"");throw new Error(`Backtest run failed: ${o.status} ${r}`)}return await o.json()}i(Ct,"submitBacktestRun");async function kt(t,e,n){let o=n.query&&Object.keys(n.query).length>0?`?${new URLSearchParams(n.query).toString()}`:"",r=await c(t,e,`/apps/backtests/tx${o}`,{method:n.method,body:n.method==="POST"&&n.body!==void 0?JSON.stringify(n.body):void 0});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Backtests request failed: ${r.status} ${s}`)}return await r.json()}i(kt,"submitBacktestTx");async function Lt(t,e,n){let o=new URLSearchParams(n).toString(),r=await c(t,e,`/apps/backtests/detail?${o}`,{method:"GET"});if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`Backtest detail failed: ${r.status} ${s}`)}return await r.json()}i(Lt,"submitBacktestDetail");function Ce(t){let e=t.trim().replace(/^\/+/,"");return encodeURIComponent(e||"tool")}i(Ce,"normalizeToolPathSegment");function ke(t){let e=t.replace(/\/$/,""),n=process.env.OPENPOND_TOOL_URL;if(n)return n.replace(/\/$/,"");try{let o=new URL(e),r=o.hostname.toLowerCase(),s=r==="apps.openpond.live"?null:r===Te||r===Oe||r==="openpond.live"||r==="www.openpond.live"?"https://apps.openpond.live":null;if(s)return s;let a=r==="localhost"||r==="127.0.0.1",l=o.port||(o.protocol==="https:"?"443":"80");if(a&&l==="3000")return e}catch{}return e}i(ke,"resolveWorkerBaseUrl");async function It(t,e,n){let o=ke(t),r=Ce(n.toolName),a=`${n.deploymentId?`/${n.appId}/deployments/${n.deploymentId}`:`/${n.appId}`}/${r}`,l=new Headers(n.headers||{}),p=n.method??"POST",d=n.body===void 0||p==="GET"?void 0:JSON.stringify(n.body),g=await c(o,e,a,{method:p,body:d,headers:l}),h=await g.text().catch(()=>""),f=null;try{f=h?JSON.parse(h):null}catch{f=h}let x=f&&typeof f=="object"&&"ok"in f?!!f.ok:!0,T=g.ok&&x,O=f&&typeof f=="object"&&"status"in f&&Number(f.status)||g.status,_=f&&typeof f=="object"&&"error"in f?String(f.error):g.ok?void 0:h||g.statusText,k=f&&typeof f=="object"&&"data"in f?f.data:f;return{ok:T,status:O,data:k,error:_}}i(It,"executeHostedTool");import Le from"node:path";var U="default",Z=["apiKey","baseUrl","apiBaseUrl","chatApiBaseUrl","token","appId","conversationId"];function qt(){return Ie()}i(qt,"getConfigPath");function Ie(){return F(P()).config}i(Ie,"getGlobalConfigPath");function S(t,e){return Object.prototype.hasOwnProperty.call(t,e)}i(S,"hasOwn");function A(t){if(typeof t!="string")return null;let e=t.trim();return e.length>0?e:null}i(A,"normalizeHandle");function m(t){if(typeof t!="string")return null;let e=t.trim();return e?e.replace(/\/$/,""):null}i(m,"normalizeBaseUrl");function ie(t){let e=A(t);if(!e)throw new Error("profile handle must be non-empty");return e}i(ie,"requireHandle");function Ue(t){if(typeof t!="string")throw new Error("apiKey must be a non-empty string");let e=t.trim();if(!e)throw new Error("apiKey must be a non-empty string");return e}i(Ue,"requireApiKey");function C(t,e){let n=A(t),o=A(e);return!!(n&&o&&n.toLowerCase()===o.toLowerCase())}i(C,"handleEquals");function M(t,e,n){let o=m(n);return t.findIndex(r=>C(r.handle,e)?o?m(r.baseUrl)===o:!0:!1)}i(M,"findAccountIndex");function w(t){let e=A(t.handle)??U,n=m(t.baseUrl);return n?{handle:e,baseUrl:n}:{handle:e}}i(w,"selectorFromAccount");function b(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=A(typeof e.handle=="string"?e.handle:void 0);if(!n)return null;let o=m(typeof e.baseUrl=="string"?e.baseUrl:void 0);return o?{handle:n,baseUrl:o}:{handle:n}}i(b,"sanitizeActiveProfile");function G(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.repoPath=="string"?e.repoPath.trim():"",o=typeof e.profile=="string"&&e.profile.trim()?e.profile.trim():"default";if(!n)return;let r={repoPath:n,profile:o,mode:"local"};if(e.lastCheck&&typeof e.lastCheck=="object"&&!Array.isArray(e.lastCheck)){let s=e.lastCheck,a=s.command,l=s.status,p=s.checkedAt;(a==="inspect"||a==="build"||a==="validate"||a==="eval"||a==="run")&&(l==="passed"||l==="failed")&&typeof p=="string"&&(r.lastCheck={command:a,status:l,checkedAt:p,...typeof s.exitCode=="number"||s.exitCode===null?{exitCode:s.exitCode}:{},...typeof s.sourceHead=="string"||s.sourceHead===null?{sourceHead:s.sourceHead}:{}})}if(e.lastPush&&typeof e.lastPush=="object"&&!Array.isArray(e.lastPush)){let s=e.lastPush,a=s.status,l=s.pushedAt;(a==="pushed"||a==="failed")&&typeof l=="string"&&(r.lastPush={status:a,pushedAt:l,...typeof s.teamId=="string"||s.teamId===null?{teamId:s.teamId}:{},...typeof s.projectId=="string"||s.projectId===null?{projectId:s.projectId}:{},...typeof s.localHead=="string"||s.localHead===null?{localHead:s.localHead}:{},...typeof s.hostedHead=="string"||s.hostedHead===null?{hostedHead:s.hostedHead}:{},...typeof s.sourceRef=="string"||s.sourceRef===null?{sourceRef:s.sourceRef}:{},...s.promotionStatus==="uploaded"||s.promotionStatus==="hosted_source_materialized"||s.promotionStatus==="hosted_source_materialize_failed"||s.promotionStatus==="hosted_source_check_pending"||s.promotionStatus==="hosted_source_check_failed"||s.promotionStatus==="hosted_source_published"||s.promotionStatus==="hosted_source_publish_failed"||s.promotionStatus==="hosted_run_pending"||s.promotionStatus==="hosted_run_passed"||s.promotionStatus==="hosted_run_failed"||s.promotionStatus===null?{promotionStatus:s.promotionStatus}:{},...s.hostedRunStatus==="not_started"||s.hostedRunStatus==="running"||s.hostedRunStatus==="passed"||s.hostedRunStatus==="failed"||s.hostedRunStatus===null?{hostedRunStatus:s.hostedRunStatus}:{},...typeof s.hostedRunAgentId=="string"||s.hostedRunAgentId===null?{hostedRunAgentId:s.hostedRunAgentId}:{},...typeof s.hostedRunId=="string"||s.hostedRunId===null?{hostedRunId:s.hostedRunId}:{},...typeof s.hostedRunAt=="string"||s.hostedRunAt===null?{hostedRunAt:s.hostedRunAt}:{},...ee(s.hostedSourceMaterialization)?{hostedSourceMaterialization:ee(s.hostedSourceMaterialization)}:{},...te(s.hostedSourceCheck)?{hostedSourceCheck:te(s.hostedSourceCheck)}:{},...ne(s.hostedPublish)?{hostedPublish:ne(s.hostedPublish)}:{},...oe(s.hostedRun)?{hostedRun:oe(s.hostedRun)}:{},...typeof s.error=="string"||s.error===null?{error:s.error}:{}})}if(Array.isArray(e.profiles)){let s=e.profiles.flatMap(a=>{let l=G(a);if(!l)return[];let p=a,d=p.source==="github"||p.source==="openpond_git"?p.source:"local",g=typeof p.repositoryId=="string"&&p.repositoryId.trim()?p.repositoryId.trim():Le.resolve(l.repoPath);return[{source:d,repositoryId:g,repoPath:l.repoPath,profile:l.profile,...l.lastCheck?{lastCheck:l.lastCheck}:{},...l.lastPush?{lastPush:l.lastPush}:{}}]});s.length>0&&(r.profiles=s)}return r}i(G,"sanitizeLocalOpenPondProfile");function ee(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=v(e.status);return n?{status:n,...u(e,"agentId"),...u(e,"runtimeAgentId"),...u(e,"projectId"),...u(e,"sourceRoot"),...u(e,"sourceRef"),...u(e,"sourceCommitSha"),...u(e,"manifestHash"),...u(e,"manifestPath"),...u(e,"manifestSyncedAt"),...se(e,"fileCount"),...se(e,"totalBytes"),...u(e,"generatedManifestPath"),...j(e,"synthesizedOpenPondYaml"),...u(e,"uploadMetadataPath"),...R(e,"setupCommands"),...R(e,"validationCommands"),...u(e,"materializedAt"),...u(e,"error")}:null}i(ee,"sanitizeHostedMaterializationStatus");function te(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=v(e.status);return n?{status:n,...u(e,"agentId"),...u(e,"deployPlanStatus"),...j(e,"canRun"),...j(e,"canDeploy"),...u(e,"sourceRef"),...u(e,"sourceCommitSha"),...u(e,"manifestHash"),...u(e,"manifestPath"),...R(e,"setupCommands"),...R(e,"validationCommands"),...R(e,"requiredChecks"),...R(e,"evalNames"),...R(e,"blockedReasons"),...R(e,"staleReasons"),...u(e,"runtimeId"),...u(e,"sandboxId"),...R(e,"traceArtifactRefs"),...R(e,"evalResultArtifactRefs"),...R(e,"validatorArtifactRefs"),...u(e,"checkedAt"),...u(e,"error")}:null}i(te,"sanitizeHostedSourceCheckStatus");function ne(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=v(e.status);return n?{status:n,...u(e,"agentId"),...u(e,"snapshotId"),...u(e,"sourceRef"),...u(e,"sourceCommitSha"),...u(e,"manifestHash"),...u(e,"manifestPath"),...u(e,"buildStatus"),...u(e,"validationStatus"),...u(e,"evalStatus"),...u(e,"publishedAt"),...u(e,"error")}:null}i(ne,"sanitizeHostedPublishStatus");function oe(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=v(e.status);return n?{status:n,...u(e,"agentId"),...u(e,"runId"),...u(e,"runtimeId"),...u(e,"sandboxId"),...u(e,"sourceRef"),...u(e,"sourceCommitSha"),...u(e,"manifestHash"),...u(e,"setupGateStatus"),...R(e,"setupRequirementRefs"),...R(e,"artifactRefs"),...R(e,"traceArtifactRefs"),...R(e,"evalArtifactRefs"),...u(e,"startedAt"),...u(e,"completedAt"),...u(e,"error")}:null}i(oe,"sanitizeHostedRunSummary");function u(t,e){let n=t[e];return typeof n=="string"||n===null?{[e]:n}:{}}i(u,"nullableStringProp");function j(t,e){let n=t[e];return typeof n=="boolean"||n===null?{[e]:n}:{}}i(j,"nullableBooleanProp");function se(t,e){let n=t[e];return typeof n=="number"||n===null?{[e]:n}:{}}i(se,"nullableNumberProp");function R(t,e){let n=t[e];if(!Array.isArray(n))return{};let o=n.filter(r=>typeof r=="string");return{[e]:o}}i(R,"stringArrayProp");function v(t){return typeof t=="string"&&t.trim()?t.trim():null}i(v,"stringField");function ae(t,e){if(!C(t.handle,e.handle))return!1;let n=m(e.baseUrl);return n?m(t.baseUrl)===n:!m(t.baseUrl)}i(ae,"accountMatchesSelector");function $(t,e,n={}){let o=m(e.baseUrl);if(o)return M(t,e.handle,o);let r=t.findIndex(a=>ae(a,e));if(r!==-1)return r;let s=t.map((a,l)=>({account:a,index:l})).filter(({account:a})=>C(a.handle,e.handle));if(s.length>1&&n.requireUnambiguous)throw new Error(`multiple profiles found for ${e.handle}; pass --base-url to select one`);return s[0]?.index??-1}i($,"findAccountIndexForSelector");function ve(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n={};return typeof e.token=="string"&&(n.token=e.token),(typeof e.appId=="string"||e.appId===null)&&(n.appId=e.appId),(typeof e.conversationId=="string"||e.conversationId===null)&&(n.conversationId=e.conversationId),Object.keys(n).length>0?n:void 0}i(ve,"sanitizeSession");function $e(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=A(typeof e.handle=="string"?e.handle:void 0);if(!n)return null;let o={handle:n};typeof e.apiKey=="string"&&(o.apiKey=e.apiKey),typeof e.baseUrl=="string"&&(o.baseUrl=e.baseUrl),typeof e.apiBaseUrl=="string"&&(o.apiBaseUrl=e.apiBaseUrl),typeof e.chatApiBaseUrl=="string"&&(o.chatApiBaseUrl=e.chatApiBaseUrl),typeof e.environment=="string"&&(o.environment=e.environment);let r=ve(e.session);return r&&(o.session=r),o}i($e,"sanitizeAccount");function _e(t){let e={};return typeof t.token=="string"&&(e.token=t.token),(typeof t.appId=="string"||t.appId===null)&&(e.appId=t.appId),(typeof t.conversationId=="string"||t.conversationId===null)&&(e.conversationId=t.conversationId),Object.keys(e).length>0?e:void 0}i(_e,"extractLegacySession");function Be(t,e){let n={handle:e};typeof t.apiKey=="string"&&(n.apiKey=t.apiKey),typeof t.baseUrl=="string"&&(n.baseUrl=t.baseUrl),typeof t.apiBaseUrl=="string"&&(n.apiBaseUrl=t.apiBaseUrl),typeof t.chatApiBaseUrl=="string"&&(n.chatApiBaseUrl=t.chatApiBaseUrl);let o=_e(t);return o&&(n.session=o),n}i(Be,"extractLegacyAccount");function z(t){let e={};typeof t.lspEnabled=="boolean"&&(e.lspEnabled=t.lspEnabled),(t.executionMode==="local"||t.executionMode==="hosted")&&(e.executionMode=t.executionMode),(t.mode==="general"||t.mode==="builder")&&(e.mode=t.mode);let n=G(t.openpondProfile);n&&(e.openpondProfile=n);let o=[],r=Array.isArray(t.accounts)?t.accounts:[];for(let p of r){let d=$e(p);d&&M(o,d.handle,d.baseUrl)===-1&&o.push(d)}if(o.length===0){let p=b(t.activeProfile)?.handle||U;o.push(Be(t,p))}let s=b(t.activeProfile),a=s?$(o,s):-1,l=o[a===-1?0:a];return e.accounts=o,e.activeProfile=w(l),e}i(z,"normalizeGlobalConfig");function le(t,e,n){let o=t.accounts??[],r=m(n??process.env.OPENPOND_BASE_URL),s=A(e);if(s)return r?{handle:s,baseUrl:r}:{handle:s};let a=A(process.env.OPENPOND_ACCOUNT);if(a)return r?{handle:a,baseUrl:r}:{handle:a};let l=b(t.activeProfile);return l?r?{handle:l.handle,baseUrl:r}:l:o[0]?w(o[0]):{handle:U}}i(le,"resolveRequestedProfile");function ce(t,e,n){let o=m(n);if(o){let s=M(t,e,o);if(s!==-1)return t[s]}else{let s=t.filter(a=>C(a.handle,e));if(s.length>1)throw new Error(`multiple profiles found for ${e}; pass --base-url to select one`);if(s.length===1)return s[0]}let r={handle:e};return o&&(r.baseUrl=o),t.push(r),r}i(ce,"ensureAccount");function re(t){t.session&&Object.keys(t.session).length===0&&delete t.session}i(re,"cleanupAccount");function De(t,e,n,o){let r=n===null||n===void 0&&o.undefinedDeletes;switch(e){case"apiKey":{if(r){delete t.apiKey;return}typeof n=="string"&&(t.apiKey=n);return}case"baseUrl":{if(r){delete t.baseUrl;return}typeof n=="string"&&(t.baseUrl=n);return}case"apiBaseUrl":{if(r){delete t.apiBaseUrl;return}typeof n=="string"&&(t.apiBaseUrl=n);return}case"chatApiBaseUrl":{if(r){delete t.chatApiBaseUrl;return}typeof n=="string"&&(t.chatApiBaseUrl=n);return}case"token":case"appId":case"conversationId":{if(t.session||(t.session={}),r){delete t.session[e],re(t);return}(typeof n=="string"||n===null)&&(t.session[e]=n),re(t);return}}}i(De,"applyScopedKey");function ue(t,e,n){if(!Z.some(p=>S(e,p)))return!1;let r=t.accounts??[],s=b(e.activeProfile)??le(t),a=m(S(e,"baseUrl")?e.baseUrl??null:s.baseUrl??process.env.OPENPOND_BASE_URL),l=ce(r,s.handle,a);for(let p of Z)S(e,p)&&De(l,p,e[p],n);return t.accounts=r,t.activeProfile=w(l),!0}i(ue,"applyAccountPatch");function pe(t,e){if(S(e,"lspEnabled")&&(typeof e.lspEnabled=="boolean"?t.lspEnabled=e.lspEnabled:e.lspEnabled===null&&delete t.lspEnabled),S(e,"executionMode")&&(e.executionMode==="local"||e.executionMode==="hosted"?t.executionMode=e.executionMode:e.executionMode===null&&delete t.executionMode),S(e,"mode")&&(e.mode==="general"||e.mode==="builder"?t.mode=e.mode:e.mode===null&&delete t.mode),S(e,"activeProfile")){let n=b(e.activeProfile);if(n){let o=$(t.accounts??[],n);t.activeProfile=o===-1?n:w((t.accounts??[])[o])}else e.activeProfile===null&&delete t.activeProfile}if(S(e,"openpondProfile")){let n=G(e.openpondProfile);n?t.openpondProfile=n:e.openpondProfile===null&&delete t.openpondProfile}}i(pe,"applyTopLevelPatch");async function qe(t){let e=P();await L(e),await q(e,()=>t)}i(qe,"writeGlobalConfig");async function K(t){let e=P();return await L(e),await q(e,n=>{let o=z(n);return t(o),o})}i(K,"updateGlobalConfig");async function de(){let t=P();return await L(t),z(await Y(t))}i(de,"loadGlobalConfig");async function Nt(t={}){let e=await de(),n=e.accounts??[],o=le(e,t.account,t.baseUrl),r=$(n,o,{requireUnambiguous:!0}),s=r===-1?null:n[r],a=s?.session;return{...e,activeProfile:s?w(s):o,apiKey:s?.apiKey,baseUrl:s?.baseUrl,apiBaseUrl:s?.apiBaseUrl,chatApiBaseUrl:s?.chatApiBaseUrl,token:a?.token,appId:a?.appId,conversationId:a?.conversationId}}i(Nt,"loadConfig");async function fe(){let t=await de(),e=b(t.activeProfile);return(t.accounts??[]).map(n=>{let o=A(n.handle)??U;return{handle:o,baseUrl:m(n.baseUrl),apiBaseUrl:m(n.apiBaseUrl),chatApiBaseUrl:m(n.chatApiBaseUrl),environment:n.environment?.trim()||null,isActive:!!(e&&ae({...n,handle:o},e)),hasApiKey:!!n.apiKey?.trim(),hasSessionToken:!!n.session?.token?.trim(),sessionAppId:n.session?.appId??null,sessionConversationId:n.session?.conversationId??null}})}i(fe,"listConfiguredProfiles");async function Ht(t,e={}){let n=ie(t),o=m(e.baseUrl),r=-1;await K(a=>{let l=a.accounts??[];if(r=$(l,o?{handle:n,baseUrl:o}:{handle:n},{requireUnambiguous:!0}),r===-1)throw new Error(`profile not found: ${n}`);a.activeProfile=w(l[r])});let s=await fe();return s.find(a=>a.isActive)??s[r]}i(Ht,"setActiveProfile");async function jt(t){let e=ie(t.handle),n=Ue(t.apiKey),o=m(t.baseUrl),r=m(t.apiBaseUrl),s=m(t.chatApiBaseUrl),a={handle:e};await K(d=>{let g=d.accounts??[],h=ce(g,e,o);h.apiKey=n,o&&(h.baseUrl=o),r?h.apiBaseUrl=r:t.apiBaseUrl===null&&delete h.apiBaseUrl,s?h.chatApiBaseUrl=s:t.chatApiBaseUrl===null&&delete h.chatApiBaseUrl,t.environment===null?delete h.environment:typeof t.environment=="string"&&t.environment.trim()&&(h.environment=t.environment.trim()),d.accounts=g,a=w(h),t.setActive!==!1&&(d.activeProfile=a)});let p=(await fe()).find(d=>C(d.handle,a.handle)?o?m(d.baseUrl)===o:!0:!1);if(!p)throw new Error(`failed to save profile: ${e}`);return p}i(jt,"saveProfileApiKey");async function Mt(t){let e=z(t);pe(e,t),ue(e,t,{undefinedDeletes:!0}),await qe(e)}i(Mt,"saveConfig");async function Gt(t){await K(e=>{pe(e,t),ue(e,t,{undefinedDeletes:!1})})}i(Gt,"saveGlobalConfig");import{createHash as Ne}from"node:crypto";var He=3600*1e3;function J(t){return Ne("sha256").update(JSON.stringify([t.apiBase.replace(/\/$/,""),t.apiKey.trim()])).digest("hex")}i(J,"buildCacheKey");async function me(t,e){let n=await V(P(),t,J(e),{allowStale:!0});return!n||Date.now()-Date.parse(n.updatedAt)>=(e.ttlMs??He)?null:n.payload}i(me,"cached");async function nn(t){return me("cloud.apps",t)}i(nn,"getCachedApps");async function on(t){await D(P(),"cloud.apps",J(t),t.apps)}i(on,"setCachedApps");async function sn(t){return me("cloud.tools",t)}i(sn,"getCachedTools");async function rn(t){await D(P(),"cloud.tools",J(t),t.tools)}i(rn,"setCachedTools");var cn=["openpond-generic-v1","openpond-work-v1","openpond-coding-core-v1","openpond-agent-harness-v1"];export{c as a,ye as b,Re as c,Pe as d,Ae as e,Se as f,we as g,xe as h,be as i,Ye as j,We as k,Xe as l,Qe as m,Ze as n,et as o,tt as p,nt as q,ot as r,st as s,rt as t,it as u,at as v,lt as w,ct as x,ut as y,pt as z,dt as A,ft as B,mt as C,gt as D,ht as E,yt as F,Rt as G,Pt as H,At as I,St as J,wt as K,xt as L,Ee as M,bt as N,Tt as O,Ot as P,Et as Q,Ct as R,kt as S,Lt as T,ke as U,It as V,qt as W,K as X,de as Y,Nt as Z,fe as _,Ht as $,jt as aa,Mt as ba,Gt as ca,He as da,nn as ea,on as fa,sn as ga,rn as ha,cn as ia};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{a as Re,b as be,c as Ae,d as Ie}from"./chunk-3NDRIQTI.js";import{a as Oe}from"./chunk-6FA3GG5B.js";import{Y as O,ca as L}from"./chunk-CWQWV2T3.js";import{f as Ce}from"./chunk-H7IWJN7L.js";import{a as s}from"./chunk-FTQLQJQV.js";var z=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
|
+
`)),this.name="OpenPondProfileSetupRequiredError",this.details={error:"agent_source_setup_required",actionId:t,setupGate:n,missing:o,blockingSetupRequirements:n.blockingRequirements,setupRequirements:n.requirements}}};function J(e){let t=new Map;for(let a of e.sourceSetupRequirements??[]){let l=Rt(a);if(e.actionId&&l&&l!==e.actionId&&h(a.actionName)!==e.actionId&&h(a.sourceActionId)!==e.actionId)continue;let c=ve({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=ve({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&&!te(a.status)).length,i=n.filter(a=>te(a.status)).length;return{status:At(o),requirementCount:n.length,blockingCount:o.length,optionalMissingCount:r,readyCount:i,requirements:n,blockingRequirements:o}}s(J,"buildOpenPondProfileSetupGate");function ne(e,t){if(t.blockingRequirements.length>0)throw new z(e,t)}s(ne,"assertOpenPondProfileActionReady");function Ot(e){let t=e.actionId?`${e.actionId}: `:"",n=e.required?"required":"optional";return`${t}${e.label} (${n}, ${e.status})`}s(Ot,"formatOpenPondProfileSetupRequirement");function ve(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=bt(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&&!te(i)}}s(ve,"setupRequirementFromRecord");function Rt(e){return h(e.actionId)??h(e.sourceActionId)??h(e.actionName)}s(Rt,"setupRequirementActionId");function bt(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(bt,"setupStatus");function At(e){return e.length===0?"ready":e.some(t=>["blocked","unsupported","unsupported_dependency","stale"].includes(t.status))?"blocked":"setup_required"}s(At,"gateStatus");function te(e){return e==="ready"||e==="disabled"}s(te,"isReadyStatus");function h(e){return typeof e=="string"&&e.trim()?e.trim():null}s(h,"text");import{stat as $t}from"node:fs/promises";import ie from"node:path";import{spawn as It}from"node:child_process";import{existsSync as oe}from"node:fs";import{readFile as vt,rm as Kn,writeFile as xe}from"node:fs/promises";import re from"node:path";var _e=["**/node_modules/","**/.bun/","**/.env","**/.env.*","**/.openpond/traces/","**/.openpond/vendor/","**/.openpond/eval-results.json","**/.openpond/artifact-index.json","**/.openpond/source-upload-cache.json",""].join(`
|
|
4
|
+
`);async function Le(e){if(!oe(re.join(e,".git"))){let i=await R(e,["init","-b","main"]);if(i.code!==0)throw new Error(G("git init",i))}let t=re.join(e,".gitignore");if(oe(t)?await Et(t):await xe(t,_e,"utf8"),await xt(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(G("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(G("git commit",r))}s(Le,"ensureProfileGitRepo");async function Et(e){let t=await vt(e,"utf8").catch(()=>""),n=_e.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
|
+
`)||t.length===0?"":`
|
|
6
|
+
`;await xe(e,`${t}${o}${n.join(`
|
|
7
|
+
`)}
|
|
8
|
+
`,"utf8")}s(Et,"ensureProfileGitignoreRules");async function N(e){if(!oe(re.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?Lt(r.stdout):[],c=i?await _t(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:G("git status",r)}}s(N,"loadProfileGitState");async function Me(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(G("git add",o));let r=await R(e,["commit","-m",t]);if(r.code!==0)throw new Error(G("git commit",r));return{committed:!0,stdout:r.stdout,stderr:r.stderr,state:await N(e)}}s(Me,"commitProfileChanges");async function $e(e){return B(e,["rev-parse","HEAD"])}s($e,"profileGitHead");async function xt(e){return(await R(e,["rev-parse","--verify","HEAD"])).code===0}s(xt,"hasGitHead");async function _t(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(_t,"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 Lt(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:Ee(d),originalPath:g?Ee(g):null,indexStatus:l,worktreeStatus:c,status:r,category:Mt(l,c)}})}s(Lt,"parsePorcelainStatus");function Mt(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(Mt,"gitChangeCategory");function Ee(e){let t=e.trim();if(!t.startsWith('"')||!t.endsWith('"'))return t;try{return JSON.parse(t)}catch{return t.slice(1,-1)}}s(Ee,"unquoteGitPath");function G(e,t){return t.stderr.trim()||t.stdout.trim()||`${e} failed with exit code ${t.code??"unknown"}`}s(G,"gitFailureMessage");async function R(e,t,n={}){return new Promise((o,r)=>{let i=It("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 se=1500,Fe=8*1024*1024,ae=100*1024*1024,le=8,qt={maxFiles:se,maxFileBytes:Fe,maxTotalBytes:ae,concurrency:le},jt={mode:"single_json_payload",chunkingSupported:!1};async function Ft(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 je(d)&&!Tt(d)}).sort();if(n.length===0)throw new Error("No committed profile source files found to upload.");if(n.length>se)throw new Error(`Too many profile source files to upload: ${n.length} > ${se}`);let o=(await qe(n,le,async c=>{let d=ie.resolve(e,c),g=ie.relative(e,d).replace(/\\/g,"/");if(!je(g))throw new Error(`Profile source path escapes repo: ${c}`);let P=await $t(d);if(!P.isFile())return null;if(P.size>Fe)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>ae)throw new Error(`Profile source upload is too large: ${r} > ${ae}`);let i=await be(e),a=await qe(o,le,async c=>Ae(c,i));await Ie(e,a).catch(()=>{});let l=a.map(c=>c.entry);return{entries:l,fileCount:l.length,totalBytes:r,limits:qt,transport:jt}}s(Ft,"collectProfileSourceUploadEntries");async function qe(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(qe,"mapWithConcurrency");function je(e){return e.length>0&&!e.includes("\0")&&!ie.isAbsolute(e)&&!e.split(/[\\/]+/).some(t=>!t||t==="."||t==="..")}s(je,"isSafeProfileSourcePath");function Tt(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,"/")===Re)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(Tt,"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:Te(n?.canRun),canDeploy:Te(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 Gt(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(Gt,"hostedPublishStatusFromPayload");function Nt(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:Dt(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(Nt,"hostedRunSummaryFromPayload");function Ut(e){return e?.status?e.status==="succeeded"||e.status==="passed"?"passed":e.status==="failed"||e.status==="cancelled"?"failed":"running":"not_started"}s(Ut,"hostedRunStatusFromRunSummary");function Dt(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(Dt,"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 Te(e){return typeof e=="boolean"?e:null}s(Te,"booleanValue");function b(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(b,"textArray");import{createRequire as it}from"node:module";import{createHash as Qe,randomUUID as et}from"node:crypto";import{spawn as Pn}from"node:child_process";import{existsSync as k}from"node:fs";import{cp as hn,mkdir as E,readFile as st,readdir as at,rename as me,rm as Pe,symlink as yn,writeFile as D}from"node:fs/promises";import u from"node:path";function ce(e=null){return{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!0,error:e}}s(ce,"emptyProfileCatalogState");function ue(e=null){return{skillCount:0,generatedAt:null,stale:!0,error:e}}s(ue,"emptyProfileSkillCatalogState");function de(){return{status:"ready",requirementCount:0,blockingCount:0,optionalMissingCount:0,readyCount:0,requirements:[],blockingRequirements:[]}}s(de,"emptyProfileSetupGate");function W(){return{changedAgents:[],newAgents:[],deletedAgents:[],changedSkills:[],changedActions:[],changedExtensions:[],setupChanges:[],envRequirementChanges:[],files:[]}}s(W,"emptyProfileDiffSummary");function fe(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(fe,"emptyProfileSummary");import{existsSync as U}from"node:fs";import{readFile as Bt,stat as zt}from"node:fs/promises";import K from"node:path";var He=".openpond/agent-manifest.json",Ge=".openpond/action-registry.json",Jt=".openpond/source-upload-metadata.json",Wt=".openpond/agent-package-origin.json";async function De(e){return ze({agentId:"default",sourcePath:e,preferred:!0})}s(De,"loadProfileActionCatalog");async function Be(e){if(e.length===0)return{catalog:{actionCount:0,generatedAt:null,manifestPath:null,registryPath:null,stale:!0,error:"No profile agent sources are enabled."},actionCatalog:[],sourceSetupRequirements:[]};let t=[...e.filter(l=>l.preferred),...e.filter(l=>!l.preferred)],n=await Promise.all(t.map(ze)),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=Yt(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(Be,"loadProfileActionCatalogForSources");async function ze(e){let t=e.sourcePath,n=K.join(t,He),o=K.join(t,Ge),r=K.join(t,Jt),i=K.join(t,Wt);try{let a=await Y(n),l=await Y(o),c=await Y(r),d=w(await Y(i)),g=w(w(a)?.inputSchemas),P=Ue(w(c)?.setupRequirements)??[],x=Vt(P),S=new Map;for(let m of[...pe(w(a)?.actionCatalog),...pe(w(l)?.actions),...pe(w(a)?.actions)]){let $=p(m.id)??p(m.name);if(!$)continue;let C=S.get($),St=Xt({sourceRequirementsByAction:x,actionId:$,actionName:p(m.name)}),kt=Zt(Ue(m.setupRequirements)??C?.setupRequirements??[],St),Ct={id:$,agentId:e.agentId,sourcePath:t,sourceActionId:$,name:p(m.name)??C?.name??$,label:p(m.label)??C?.label??on($),description:p(m.description)??C?.description??null,visibility:p(m.visibility)??C?.visibility??"default",inputSchema:nn(m.inputSchema,g)??C?.inputSchema??null,outputSchema:Je(m.outputSchema)??C?.outputSchema??null,approvalPolicy:w(m.approvalPolicy)??C?.approvalPolicy??null,artifactPolicy:w(m.artifactPolicy)??C?.artifactPolicy??null,setupRequirements:kt,mcp:w(m.mcp)??C?.mcp??null,schedulePolicy:w(m.schedulePolicy)??C?.schedulePolicy??null,trace:Kt(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($,Ct)}let M=Array.from(S.values()).filter(m=>m.visibility!=="internal"&&m.visibility!=="debug"),H=[...a?[]:[He],...l?[]:[Ge]],_=await tn([n,o]);return{catalog:{actionCount:M.length,generatedAt:_,manifestPath:U(n)?n:null,registryPath:U(o)?o:null,stale:H.length>0,error:H.length>0?en(e,H):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(ze,"loadProfileActionCatalogSource");function Kt(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:Ne(t.validationReceiptIds),evalReceiptIds:Ne(t.evalReceiptIds)}}s(Kt,"mergeAgentPackageTrace");function Ne(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}s(Ne,"stringArray");function Yt(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(Yt,"latestIso");function Vt(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(Vt,"sourceSetupRequirementsByAction");function Xt(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(Xt,"setupRequirementsForActionSource");function Zt(e,t){if(t.length===0)return e;let n=[],o=new Set;for(let r of[...e,...t]){let i=Qt(r);o.has(i)||(o.add(i),n.push(r))}return n}s(Zt,"mergeSetupRequirements");function Qt(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(Qt,"setupRequirementIdentity");function en(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(en,"missingSourceArtifactsMessage");async function Y(e){return U(e)?JSON.parse(await Bt(e,"utf8")):null}s(Y,"readJsonIfExists");async function tn(e){let t=0;for(let n of e){if(!U(n))continue;let o=await zt(n);t=Math.max(t,o.mtimeMs)}return t>0?new Date(t).toISOString():null}s(tn,"latestMtime");function w(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(w,"asRecord");function pe(e){return Array.isArray(e)?e.filter(t=>!!w(t)):[]}s(pe,"records");function Ue(e){return Array.isArray(e)?e.filter(t=>!!w(t)):null}s(Ue,"recordArray");function p(e){return typeof e=="string"&&e.trim()?e.trim():null}s(p,"text");function Je(e){return p(e)??w(e)}s(Je,"schemaValue");function nn(e,t){let n=Je(e);return typeof n!="string"?n:w(t?.[n])??n}s(nn,"resolvedSchemaValue");function on(e){let t=e.replace(/[._-]+/g," ").trim();return t?t.replace(/\b\w/g,n=>n.toUpperCase()):e}s(on,"titleFromActionId");import{createHash as rn}from"node:crypto";import{existsSync as Ve}from"node:fs";import{readdir as Xe,readFile as sn,stat as an}from"node:fs/promises";import q from"node:path";var ge="skills",V="SKILL.md",We=8e4;async function Ze(e){let t=q.join(e,ge);if(!Ve(t))return{skillCatalog:Ke({stale:!1}),skills:[]};try{let n=await Xe(t,{withFileTypes:!0}),o=(await Promise.all(n.filter(i=>i.isDirectory()).map(i=>cn(e,i.name)))).sort((i,a)=>i.name.localeCompare(a.name)||i.path.localeCompare(a.path));dn(o);let r=await fn(e,o);return{skillCatalog:{skillCount:o.length,generatedAt:r,stale:!1,error:null},skills:o}}catch(n){return{skillCatalog:Ke({stale:!0,error:n instanceof Error?n.message:String(n)}),skills:[]}}}s(Ze,"loadProfileSkills");function ln(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=gn(i),l=Ye(a?.name),c=Ye(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(ln,"parseProfileSkillMarkdown");function Ke(e={}){return{skillCount:0,generatedAt:null,stale:e.stale??!0,error:e.error??null}}s(Ke,"emptyProfileSkillCatalogState");async function cn(e,t){let n=q.join(ge,t,V).replace(/\\/g,"/"),o=q.join(e,n),r=[],i=q.join(e,ge,t),a=await un(i),l="";Ve(o)?l=await sn(o,"utf8"):r.push(`Missing ${V}.`),l.length>We&&r.push(`Skill markdown exceeds the limit of ${We} characters.`);let c=ln(l);r.push(...c.messages);let d=c.name??t,g=c.description??"";return pn(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:mn(l),validationStatus:r.length>0?"error":"valid",validationMessages:r,resourceFiles:a.filter(P=>P!==V)}}s(cn,"loadProfileSkillDirectory");async function un(e){let t=[];async function n(o,r){let i=await Xe(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(un,"listPackageFiles");function dn(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(dn,"markDuplicateSkillNames");async function fn(e,t){let n=0;for(let o of t){let r=q.dirname(q.join(e,o.path)),i=[V,...o.resourceFiles];for(let a of i){let l=await an(q.join(r,a)).catch(()=>null);l?.isFile()&&(n=Math.max(n,l.mtimeMs))}}return n>0?new Date(n).toISOString():null}s(fn,"latestSkillMtime");function pn(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}s(pn,"isKebabCaseSkillName");function gn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}s(gn,"asRecord");function Ye(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}s(Ye,"text");function mn(e){return rn("sha256").update(e).digest("hex")}s(mn,"sha256Hex");var F="openpond-profile.json",wn="settings/profile.yaml",lt="default",A="default";function Sn(e,t){let n=e?.defaultAgent??A,o=e?.enabledAgents&&e.enabledAgents.length>0?e.enabledAgents:[n];return{...e??{},path:t,defaultAgent:n,enabledAgents:o}}s(Sn,"mergeProfileRepoManifestEntry");function Z(e,t,n){let o=I(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(Z,"mergeActiveLocalProfileConfig");function I(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(I,"profileConfigEntries");var kn=it(import.meta.url);function Cn(){return u.join(Ce(),"library","profiles","default-repo")}s(Cn,"defaultLocalProfileRepoPath");function ct(e=null){return{mode:"none",repoPath:null,activeProfile:null,sourcePath:null,manifestPath:null,agents:[],skills:[],evals:[],git:null,catalog:ce(e),skillCatalog:ue(e),actionCatalog:[],sourceSetupRequirements:[],setupGate:de(),diff:W(),hosted:null,summary:fe(e),lastCheck:null,error:e}}s(ct,"emptyProfileState");async function qo(e={}){let t=u.resolve(e.repoPath??Cn()),n=Se(e.profile),o=u.join("profiles",n),r=u.join(t,o),i=e.template??"blank-agent",a=i==="blank-profile";await E(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]=Sn(c.profiles[n],o),a&&(c.profiles[n].enabledAgents=[]),a?await E(r,{recursive:!0}):await An(r,i,!!e.force),await pt(r),await In(t,r,n,{includeDefaultAgent:!a}),await X(t,c),await Le(t);let d=(await O()).openpondProfile;return await L({openpondProfile:Z(d,t,n)}),j()}s(qo,"initLocalProfileRepo");async function jo(e,t,n){let o=u.resolve(e),r=await T(o),i=Se(t??r.defaultProfile);ke(r,o,i);let a=(await O()).openpondProfile,l=Z(a,o,i);return ut(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=Se(t??r.defaultProfile);ke(r,o,i);let a=(await O()).openpondProfile,l=Z(a,o,i);return ut(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}),Rn(he({repoPath:o,profile:i,source:n?.source,repositoryId:n?.repositoryId}))}s(Fo,"registerLocalProfileRepo");function ut(e,t,n,o){o&&(e.profiles=I(e).map(r=>u.resolve(r.repoPath)===t&&r.profile===n?{...r,source:o.source,repositoryId:o.repositoryId}:r))}s(ut,"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??A;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 X(i.repoPath,a),j()}s(To,"renameActiveProfileAgent");async function Ho(e){let t=e.agentPackage;if(Hn(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 Q(),o=n.state.sourcePath;await pt(o);let r=u.join(o,"agents");await E(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}.${et()}.installing`),c=u.join(r,`.${t.agentId}.${et()}.backup`),d=await T(n.config.repoPath),g=JSON.stringify(d),P=!1,x=!1;try{await Gn(l,t),a&&(await me(i,c),P=!0),await me(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 X(n.config.repoPath,d),P&&await Pe(c,{recursive:!0,force:!0})}catch(S){throw await Pe(l,{recursive:!0,force:!0}),x&&await Pe(i,{recursive:!0,force:!0}),P&&k(c)&&await me(c,i),JSON.stringify(d)!==g&&await X(n.config.repoPath,JSON.parse(g)).catch(()=>{}),S}return{state:await j(),agentId:t.agentId,versionId:t.versionId,digest:t.digest}}s(Ho,"installAgentPackageIntoActiveProfile");async function j(){let t=(await O()).openpondProfile;return t?we(t):ct()}s(j,"loadOpenPondProfileState");function he(e){return{source:e.source??"local",repositoryId:e.repositoryId?.trim()||u.resolve(e.repoPath),profileId:e.profile}}s(he,"openPondProfileRef");async function On(){let e=(await O()).openpondProfile;if(!e)return{lastUsed:null,profiles:[]};let t=I(e),n=await Promise.all(t.map(async o=>{let r=await we({repoPath:o.repoPath,profile:o.profile,mode:"local",...o.lastCheck?{lastCheck:o.lastCheck}:{},...o.lastPush?{lastPush:o.lastPush}:{}});return{ref:he(o),name:o.profile,repoPath:o.repoPath,sourcePath:r.sourcePath,state:r}}));return{lastUsed:he({repoPath:e.repoPath,profile:e.profile,source:I(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.source,repositoryId:I(e).find(o=>u.resolve(o.repoPath)===u.resolve(e.repoPath)&&o.profile===e.profile)?.repositoryId}),profiles:n}}s(On,"loadOpenPondProfileLibrary");async function Rn(e){if(!e)return j();let t=(await O()).openpondProfile,n=I(t).find(o=>o.source===e.source&&o.repositoryId===e.repositoryId&&o.profile===e.profileId);return n?we({repoPath:n.repoPath,profile:n.profile,mode:"local",...n.lastCheck?{lastCheck:n.lastCheck}:{},...n.lastPush?{lastPush:n.lastPush}:{}}):ct(`Profile "${e.profileId}" is not installed on this device.`)}s(Rn,"loadOpenPondProfileStateForRef");async function Go(e){let t=(await O()).openpondProfile,n=I(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:Z(t,n.repoPath,n.profile)}),j()}s(Go,"selectOpenPondProfile");async function No(e){let t=(await O()).openpondProfile;if(!t)return{lastUsed:null,profiles:[]};let n=I(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(I(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}:{}}}),On()}s(No,"removeOpenPondProfile");async function we(e){try{let t=await T(e.repoPath),n=ke(t,e.repoPath,e.profile),o=await xn(t,e.profile),r=gt({manifest:t,profile:e.profile,profileSourcePath:n,agents:o}),[i,a,l,c]=await Promise.all([N(e.repoPath),Be(r),Ze(n),_n(n,r)]),d=nt(e),g=qn(i,e.profile),P=J({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:ce(o),skillCatalog:ue(o),actionCatalog:[],sourceSetupRequirements:[],setupGate:de(),diff:W(),hosted:nt(e),summary:fe(o),lastCheck:e.lastCheck??null,error:o}}}s(we,"loadOpenPondProfileStateForConfig");async function Q(){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(Q,"requireActiveLocalProfile");async function Uo(e){let t=await Q(),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"?tt(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 De(r);ne(l,J({actionCatalog:c.actionCatalog,sourceSetupRequirements:c.sourceSetupRequirements,actionId:l}))}let a=await dt({command:e.command,args:e.command==="run"?i??tt(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 ft(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(Uo,"runProfileSdkCommand");async function dt(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 yt(n.command,o,{cwd:t,inherit:e.inherit,timeoutMs:e.timeoutMs,maxOutputBytes:e.maxOutputBytes});if(e.throwOnFailure!==!1&&r.code!==0){let i=wt(r,e.command);throw new Error(i||`${e.command} failed with exit code ${r.code??"unknown"}`)}return r}s(dt,"runAgentSdkProjectCommand");function tt(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(tt,"runCommandArgs");async function Do(e){let t=!e||e==="all"?["inspect","build","validate","eval"]:[e],n=await Q(),o=await T(n.config.repoPath),r=gt({manifest:o,profile:n.config.profile,profileSourcePath:n.state.sourcePath,agents:n.state.agents});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 bn({command:i,source:a,profileSourcePath:n.state.sourcePath,sourceCount:r.length})}}s(Do,"runProfileCheck");async function bn(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
|
+
[profile:${e.source.agentId}] ${e.command} ${o}`)}let n=await dt({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 ft(e.command,n.code),n.code!==0){let o=wt(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
|
+
`))}}s(bn,"runProfileCheckForSource");async function Bo(e){let t=await Q();if(!t.state.repoPath)throw new Error("Active OpenPond profile has no repo path.");let n=await Me(t.state.repoPath,e?.trim()||`Update OpenPond profile ${t.state.activeProfile??lt}`);return{committed:n.committed,stdout:n.stdout,stderr:n.stderr,state:await j()}}s(Bo,"commitActiveProfileChanges");async function zo(e){let t=(await O()).openpondProfile;if(!t)return;let n=I(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(zo,"saveProfilePushStatus");async function ft(e,t){let n=(await O()).openpondProfile;if(!n)return;let o=await $e(n.repoPath).catch(()=>null),r={command:e,status:t===0?"passed":"failed",checkedAt:new Date().toISOString(),exitCode:t,sourceHead:o},i=I(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(ft,"saveProfileCheckStatus");async function An(e,t,n){if(await E(e,{recursive:!0}),(await at(e)).length>0&&!n)return;let r=ee(),i=u.join(r,"templates",t);if(!k(i))throw new Error(`Unknown agent template "${t}".`);await hn(i,e,{recursive:!0,force:n,errorOnExist:!1}),await vn(e,r)}s(An,"ensureProfileSource");async function In(e,t,n,o={}){await E(u.join(e,"profiles"),{recursive:!0});for(let a of["agents","skills","actions","extensions","prompts","goals","evals","settings","traces"])await E(u.join(t,a),{recursive:!0});let r=u.join(t,wn);if(!k(r)){let a=o.includeDefaultAgent===!1?["agents: []"]:["agents:",` - id: ${A}`," path: agent/agent.ts"," enabled: true"];await D(r,["schema: openpond.profile.v1",`profile: ${n}`,...a,""].join(`
|
|
11
|
+
`),"utf8")}let i=u.join(t,"openpond.lock");k(i)||await D(i,`# OpenPond profile lockfile placeholder
|
|
12
|
+
`,"utf8")}s(In,"ensureProfileScaffoldFiles");async function vn(e,t){let n=u.join(e,"package.json"),o=await st(n,"utf8"),r=JSON.parse(o);r.dependencies={...r.dependencies??{},"openpond-agent-sdk":`file:${t}`},await D(n,`${JSON.stringify(r,null,2)}
|
|
13
|
+
`,"utf8")}s(vn,"rewriteTemplateSdkDependency");async function pt(e){if(!k(u.join(e,"package.json")))return;let t=ee();await En(t);let n=u.join(e,"node_modules"),o=u.join(n,"openpond-agent-sdk");await E(n,{recursive:!0}),k(o)||await yn(t,o,"dir")}s(pt,"ensureProfileDependencies");async function En(e){if(k(u.join(e,"dist","cli.js"))&&k(u.join(e,"dist","primitives","index.js")))return;let t=u.join(e,"scripts","build.ts");if(!k(t))throw new Error(`Resolved openpond-agent-sdk at ${e}, but built SDK files are missing.`);let n=await yt(process.execPath,[ht(e),t],{cwd:e});if(n.code!==0){let o=n.stderr.trim()||n.stdout.trim();throw new Error(o||`openpond-agent-sdk build failed with exit code ${n.code??"unknown"}`)}}s(En,"ensureAgentSdkBuilt");async function xn(e,t){let n=e.profiles[t];if(!n)return[];let o=n.defaultAgent??A,r=new Set(n.enabledAgents??[o]);return Array.from(r).map(i=>({id:i,name:n.agentNames?.[i]?.trim()||i,path:i===A?"agent/agent.ts":`agents/${i}`,enabled:!0}))}s(xn,"listProfileAgents");function gt(e){let t=e.manifest.profiles[e.profile]?.defaultAgent??A;return(e.agents.length>0?e.agents:[{id:A,name:A,path:"agent/agent.ts",enabled:!0}]).map(o=>({agentId:o.id,sourcePath:o.id===A?e.profileSourcePath:u.join(e.profileSourcePath,"agents",o.id),preferred:o.id===t}))}s(gt,"profileCatalogSources");async function _n(e,t){let n=new Map,o=[{root:u.join(e,"evals"),agentId:null},...t.flatMap(r=>[{root:u.join(r.sourcePath,"agent","evals"),agentId:r.agentId},{root:u.join(r.sourcePath,"evals"),agentId:r.agentId}])];for(let r of o)for(let i of await mt(r.root)){let a=u.relative(e,i).split(u.sep).join("/");n.has(a)||n.set(a,{id:a,name:u.basename(i).replace(/\.eval\.[^.]+$/i,"").replace(/\.[^.]+$/i,""),path:a,agentId:r.agentId,sourcePath:i})}return[...n.values()].sort((r,i)=>r.name.localeCompare(i.name)||r.path.localeCompare(i.path))}s(_n,"loadProfileEvals");async function mt(e){if(!k(e))return[];let t=[];for(let n of await at(e,{withFileTypes:!0})){let o=u.join(e,n.name);n.isDirectory()?t.push(...await mt(o)):n.isFile()&&/\.eval\.(?:[cm]?[jt]sx?)$/i.test(n.name)&&t.push(o)}return t}s(mt,"listEvalSourceFiles");function nt(e){let t=e.lastPush;return t?{teamId:t.teamId??null,projectId:t.projectId??null,sourceRef:t.sourceRef??null,sourceCommitSha:t.hostedHead??null,lastPushedAt:t.pushedAt,lastPushedLocalHead:t.localHead??null,lastPushedHostedHead:t.hostedHead??null,promotionStatus:t.promotionStatus??null,hostedRunStatus:t.hostedRunStatus??null,hostedRunAgentId:t.hostedRunAgentId??null,hostedRunId:t.hostedRunId??null,hostedRunAt:t.hostedRunAt??null,hostedSourceMaterialization:t.hostedSourceMaterialization??null,hostedSourceCheck:t.hostedSourceCheck??null,hostedPublish:t.hostedPublish??null,hostedRun:t.hostedRun??null}:null}s(nt,"hostedBindingFromConfig");function Ln(e){let t=e.actionCatalog.find(r=>r.id==="chat")?.id??e.actionCatalog.find(r=>r.name==="chat")?.id??e.actionCatalog.find(r=>r.id.endsWith(".chat"))?.id??null,n=!!(e.lastCheck&&e.lastCheck.status==="passed"&&e.lastCheck.sourceHead&&e.lastCheck.sourceHead===e.git.head&&!e.git.dirty&&!e.catalog.stale),o=Mn({catalog:e.catalog,git:e.git,lastCheck:e.lastCheck});return e.error?{state:"error",message:e.error,agentCount:e.agents.length,actionCount:e.actionCatalog.length,defaultAction:t,checkFresh:n,checkStaleReason:o,localHead:e.git.head,hostedHead:e.hosted?.sourceCommitSha??null}:e.git.isRepo?e.git.head?e.git.dirty?{state:"dirty",message:$n(e.diff),agentCount:e.agents.length,actionCount:e.actionCatalog.length,defaultAction:t,checkFresh:n,checkStaleReason:o,localHead:e.git.head,hostedHead:e.hosted?.sourceCommitSha??null}:{state:"ready",message:e.catalog.stale?"Profile source is clean; action catalog needs inspect/build.":"Profile source is clean.",agentCount:e.agents.length,actionCount:e.actionCatalog.length,defaultAction:t,checkFresh:n,checkStaleReason:o,localHead:e.git.head,hostedHead:e.hosted?.sourceCommitSha??null}:{state:"pending_commit",message:"Profile source is ready for its first commit.",agentCount:e.agents.length,actionCount:e.actionCatalog.length,defaultAction:t,checkFresh:!1,checkStaleReason:"Profile source has no committed head.",localHead:null,hostedHead:e.hosted?.sourceCommitSha??null}:{state:"error",message:"Profile source is not Git-backed.",agentCount:e.agents.length,actionCount:e.actionCatalog.length,defaultAction:t,checkFresh:!1,checkStaleReason:"Profile source is not Git-backed.",localHead:null,hostedHead:e.hosted?.sourceCommitSha??null}}s(Ln,"summarizeProfileState");function Mn(e){return e.catalog.error?`Catalog error: ${e.catalog.error}`:e.catalog.stale?"Action catalog artifacts are missing or stale.":e.lastCheck?e.lastCheck.status!=="passed"?`Last ${e.lastCheck.command} check failed.`:e.lastCheck.sourceHead?e.git.head&&e.lastCheck.sourceHead!==e.git.head?"Profile source changed since the last check.":e.git.dirty?"Profile has uncommitted source changes.":null:"Last check did not record a source head.":"Profile checks have not run."}s(Mn,"profileCheckStaleReason");function $n(e){let t=[];return e.changedAgents.length>0&&t.push(`${e.changedAgents.length} changed agent(s)`),e.newAgents.length>0&&t.push(`${e.newAgents.length} new agent(s)`),e.deletedAgents.length>0&&t.push(`${e.deletedAgents.length} deleted agent(s)`),e.changedSkills.length>0&&t.push(`${e.changedSkills.length} changed skill(s)`),e.changedActions.length>0&&t.push(`${e.changedActions.length} changed action(s)`),e.changedExtensions.length>0&&t.push(`${e.changedExtensions.length} changed extension(s)`),e.setupChanges.length>0&&t.push(`${e.setupChanges.length} setup change(s)`),e.envRequirementChanges.length>0&&t.push(`${e.envRequirementChanges.length} env requirement change(s)`),t.length>0?`Profile has ${t.join(", ")}.`:"Profile has uncommitted source changes."}s($n,"profileDirtyMessage");function qn(e,t){let n=W();n.files=e.files;let o=`profiles/${t}/`;for(let r of e.files){let i=r.path.replace(/\\/g,"/");if(i===F||i===".gitignore"){v(n.setupChanges,i);continue}if(!i.startsWith(o))continue;let a=i.slice(o.length);jn(n,r,a)}return n}s(qn,"summarizeProfileDiff");function jn(e,t,n){let o=n.split("/")[0]??"";if(o==="agent")ot(e,A,t.category);else if(o==="agents"){let r=n.split("/")[1];r&&ot(e,r,t.category)}else o==="skills"?v(e.changedSkills,n.split("/")[1]??n):o==="actions"?v(e.changedActions,n.split("/")[1]??n):o==="extensions"?v(e.changedExtensions,n.split("/")[1]??n):(o==="settings"||n==="package.json"||n==="openpond.yaml"||n==="openpond.lock")&&v(e.setupChanges,n);n.toLowerCase().includes("env")&&v(e.envRequirementChanges,n),n.startsWith(".openpond/")&&v(e.changedActions,"catalog")}s(jn,"classifyProfileFileChange");function ot(e,t,n){if(n==="added"||n==="untracked"){v(e.newAgents,t);return}if(n==="deleted"){v(e.deletedAgents,t);return}v(e.changedAgents,t)}s(ot,"addAgentChange");function v(e,t){!t||e.includes(t)||e.push(t)}s(v,"addUnique");function Se(e){let t=e?.trim();if(!t)return lt;if(!/^[a-zA-Z0-9._-]+$/.test(t))throw new Error("profile name may only contain letters, numbers, dots, underscores, and hyphens");return t}s(Se,"normalizeProfileName");function Fn(e){let t=e.trim().replace(/\s+/g," ");if(!t)throw new Error("Agent name is required.");if(t.length>80)throw new Error("Agent name must be 80 characters or fewer.");if(/[\u0000-\u001f\u007f]/.test(t))throw new Error("Agent name cannot contain control characters.");return t}s(Fn,"normalizeAgentDisplayName");function Tn(e,t){return{schema:"openpond.profileRepo.v1",defaultProfile:e,profiles:{[e]:{path:t,defaultAgent:A,enabledAgents:[A]}}}}s(Tn,"defaultProfileManifest");async function T(e){let t=u.join(e,F),n=await st(t,"utf8"),o=JSON.parse(n);if(o.schema!=="openpond.profileRepo.v1"||!o.profiles||typeof o.profiles!="object")throw new Error(`${t} is not an OpenPond profile repo manifest.`);return o}s(T,"readProfileManifest");async function X(e,t){await D(u.join(e,F),`${JSON.stringify(t,null,2)}
|
|
14
|
+
`,"utf8")}s(X,"writeProfileManifest");function ke(e,t,n){let o=e.profiles[n];if(!o)throw new Error(`Profile "${n}" was not found in ${u.join(t,F)}.`);let r=u.resolve(t,o.path);if(!k(r))throw new Error(`Profile source path does not exist: ${r}`);return r}s(ke,"profileSourcePath");function Hn(e){let t=0,n=new Set;for(let l of e.source.files){let c=Pt(l.path);if(n.has(c))throw new Error(`Agent package contains duplicate source path ${c}.`);n.add(c);let d=Buffer.from(l.contentsBase64,"base64");if(d.byteLength!==l.sizeBytes||Qe("sha256").update(d).digest("hex")!==l.sha256)throw new Error(`Agent package source checksum failed for ${c}.`);t+=d.byteLength}if(t!==e.source.totalSizeBytes)throw new Error("Agent package source size does not match its manifest.");let{digest:o,versionId:r,...i}=e,a=Qe("sha256").update(Nn(i)).digest("hex");if(a!==e.digest||e.versionId!==`agent-${a.slice(0,20)}`)throw new Error("Agent package content digest does not match its version.")}s(Hn,"verifyAgentPackageIntegrity");async function Gn(e,t){await E(e,{recursive:!0,mode:448});for(let o of t.source.files){let r=Pt(o.path),i=u.resolve(e,r);if(!i.startsWith(`${u.resolve(e)}${u.sep}`))throw new Error("Agent package source path escapes its install root.");await E(u.dirname(i),{recursive:!0,mode:448});let a=Buffer.from(o.contentsBase64,"base64");if(r==="package.json"){let l=JSON.parse(a.toString("utf8"));l.dependencies={...l.dependencies??{},"openpond-agent-sdk":`file:${ee()}`},a=Buffer.from(`${JSON.stringify(l,null,2)}
|
|
15
|
+
`,"utf8")}await D(i,a,{mode:384,flag:"wx"})}let n=u.join(e,".openpond","agent-package-origin.json");await E(u.dirname(n),{recursive:!0,mode:448}),await D(n,`${JSON.stringify({schema:"openpond.agent-package-origin.v1",agentId:t.agentId,versionId:t.versionId,digest:t.digest,validationReceiptIds:t.receipts.filter(o=>o.kind==="sdk_validation").map(o=>o.id),evalReceiptIds:t.receipts.filter(o=>o.kind==="sdk_eval").map(o=>o.id)},null,2)}
|
|
16
|
+
`,{mode:384,flag:"wx"})}s(Gn,"materializeAgentPackage");function Pt(e){let t=e.trim().replaceAll("\\","/"),n=u.posix.normalize(t);if(!n||n==="."||n===".."||n.startsWith("/")||n.startsWith("../")||n.split("/").some(o=>o===".."))throw new Error(`Agent package contains an invalid source path: ${e}.`);return n}s(Pt,"normalizeAgentPackagePath");function Nn(e){return JSON.stringify(ye(e))}s(Nn,"stableAgentPackageJson");function ye(e){return Array.isArray(e)?e.map(ye):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,ye(n)]))}s(ye,"sortAgentPackageJson");function ee(){let e=kn.resolve("openpond-agent-sdk/package.json");return u.dirname(e)}s(ee,"resolveAgentSdkRoot");function Un(){let e=ee(),t=u.join(e,"dist","cli.js");if(k(t))return{command:process.execPath,args:[t]};let n=u.join(e,"src","cli.ts");if(k(n))return{command:process.execPath,args:[ht(e),n]};throw new Error(`openpond-agent CLI was not found under ${e}`)}s(Un,"resolveAgentSdkCliLaunch");function ht(e){return it(u.join(e,"package.json")).resolve("tsx/cli")}s(ht,"resolveTsxCli");async function yt(e,t,n={}){return new Promise((o,r)=>{let i=Pn(e,t,{cwd:n.cwd,stdio:n.inherit?"inherit":"pipe"}),a="",l="",c=!1,d=!1,g=!1,P=n.timeoutMs??600*1e3,x=n.maxOutputBytes??2*1024*1024,S=P>0?setTimeout(()=>{g=!0,i.kill("SIGTERM")},P):null,M=P>0?setTimeout(()=>{g&&i.exitCode===null&&i.kill("SIGKILL")},P+5e3):null;n.inherit||(i.stdout?.on("data",_=>{let m=rt(a,String(_),x,c);a=m.text,c=m.truncated}),i.stderr?.on("data",_=>{let m=rt(l,String(_),x,d);l=m.text,d=m.truncated}));let H=s(()=>{S&&clearTimeout(S),M&&clearTimeout(M)},"clearTimers");i.on("error",_=>{H(),r(_)}),i.on("close",_=>{H(),o({code:_,stdout:a,stderr:l,timedOut:g,stdoutTruncated:c,stderrTruncated:d})})})}s(yt,"spawnCommand");function rt(e,t,n,o){if(o)return{text:e,truncated:!0};let r=`${e}${t}`;return Buffer.byteLength(r,"utf8")<=n?{text:r,truncated:!1}:{text:`${Buffer.from(r).subarray(0,Math.max(0,n)).toString("utf8")}
|
|
17
|
+
[truncated after ${n} bytes]
|
|
18
|
+
`,truncated:!0}}s(rt,"appendBoundedOutput");function wt(e,t){let n=e.stderr.trim()||e.stdout.trim(),o=[e.timedOut?`${t} timed out`:"",e.stdoutTruncated?"stdout truncated":"",e.stderrTruncated?"stderr truncated":""].filter(Boolean);return[n,...o].filter(Boolean).join(`
|
|
19
|
+
`)}s(wt,"commandFailureDetail");export{ln as a,z as b,J as c,ne as d,Ot as e,Ft as f,Ht as g,Gt as h,Nt as i,Ut as j,F as k,wn as l,lt as m,A as n,Sn as o,Z as p,Cn as q,ct as r,qo as s,jo as t,Fo as u,To as v,Ho as w,j as x,he as y,On as z,Rn as A,Go as B,No as C,Q as D,Uo as E,dt as F,Do as G,Bo as H,zo as I};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{a as k}from"./chunk-6FA3GG5B.js";import{b as e}from"./chunk-ES2ISFJC.js";import{a as r}from"./chunk-FTQLQJQV.js";var b=3e3,h=9999,l="openpond.yaml",ie="openpond-template-plan.json",M="openpond.sandboxTemplate.buildPlan.v1",C=["google","github","x"],S=new Set([22,2222,2375,2376,3108,5900,5901,6080,7818]),w=e.array(e.string().trim().min(1).max(1e3)).max(50),d=e.string().trim().min(1).max(4096).refine(N,{message:"path must be a relative workspace path"}),O=e.string().trim().min(1).max(500).refine(t=>!t.includes("\0")&&!/\s/.test(t),"image ref must be a single OCI reference"),D=e.string().trim().regex(/^sha256:[0-9a-f]{64}$/i),R=e.string().trim().min(1).max(500).refine(t=>t.startsWith("/")&&!t.includes("\0"),"workspaceRoot must be an absolute guest path"),$=e.object({ref:O,digest:D.optional(),registrySecretRef:e.string().trim().min(1).max(500).optional(),platform:e.literal("linux/amd64").optional(),workspaceRoot:R.optional()}).strict(),q=e.object({context:d.default("."),path:d.default("Dockerfile"),target:e.string().trim().min(1).max(191).optional(),buildArgs:e.record(e.string().max(191),e.string().max(500)).optional(),registrySecretRefs:e.array(e.string().trim().min(1).max(500)).max(10).optional(),platform:e.literal("linux/amd64").optional(),workspaceRoot:R.optional()}).strict(),L=e.object({base:e.string().trim().min(1).max(120).optional(),snapshot:e.string().trim().min(1).max(191).optional(),image:$.optional(),dockerfile:q.optional()}).strict().superRefine((t,a)=>{[t.base,t.snapshot,t.image,t.dockerfile].filter(Boolean).length!==1&&a.addIssue({code:e.ZodIssueCode.custom,message:"runtime must declare exactly one of base, snapshot, image, or dockerfile"})}),T=e.object({cpu:e.number().positive().max(8).optional(),memoryGb:e.number().positive().max(32).optional(),diskGb:e.number().positive().max(100).optional()}).strict(),V=e.object({provider:e.enum(C),scopes:e.array(e.string().trim().min(1).max(200)).max(100).default([]),capabilities:e.array(e.string().trim().min(1).max(200)).max(100).default([])}).strict(),z=e.object({models:e.array(e.string().trim().min(1).max(200)).max(100).default([]),scopes:e.array(e.string().trim().min(1).max(200)).max(100).default([])}).strict(),Z=e.object({opchat:z.optional()}).catchall(e.record(e.string(),e.unknown())).default({}),j=e.object({name:e.string().trim().regex(/^[A-Za-z_][A-Za-z0-9_-]*$/).max(63).optional(),mountPath:e.string().trim().min(1).max(256).optional(),storageGb:e.number().int().positive().max(100).optional(),deleteOnSandboxDelete:e.boolean().optional()}).strict(),E=e.object({port:e.number().int().min(b).max(h).refine(t=>!S.has(t),{message:"preview port is reserved"}),protocol:e.literal("http").default("http"),label:e.string().trim().min(1).max(80).optional(),access:e.enum(["private","public"]).default("private"),path:e.string().trim().min(1).max(512).refine(t=>t.startsWith("/"),{message:"preview path must start with /"}).default("/")}).strict(),_=e.object({command:e.string().trim().min(1).max(1e3),cwd:d.optional(),timeoutSeconds:e.number().int().positive().max(86400).optional(),requiresStart:e.boolean().default(!1),ports:e.array(E).max(20).default([]),artifactPaths:e.array(d).max(100).default([])}).strict(),I=_.extend({name:e.string().trim().min(1).max(80)}).strict(),F=e.object({name:e.string().trim().min(1).max(80).optional(),service:e.string().trim().min(1).max(80).optional(),port:e.number().int().min(b).max(h).refine(t=>!S.has(t),{message:"app MCP port is reserved"}),path:e.string().trim().min(1).max(512).refine(t=>t.startsWith("/"),{message:"app MCP path must start with /"}).default("/mcp")}).strict(),B=e.object({name:e.string().trim().min(1).max(80).optional(),port:e.number().int().min(b).max(h).refine(t=>!S.has(t),{message:"validation probe port is reserved"}),path:e.string().trim().min(1).max(512).refine(t=>t.startsWith("/"),{message:"validation probe path must start with /"}).default("/"),expectedStatus:e.number().int().min(100).max(599).default(200)}).strict(),W=e.record(e.string(),e.unknown()).refine(t=>t.type==="object","input schema must be a JSON schema object"),J=e.object({name:e.string().trim().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(191),required:e.boolean().default(!1),secret:e.boolean().default(!0),description:e.string().trim().max(500).optional()}).strict(),g=e.string().trim().min(1).max(120),G=e.object({name:e.string().trim().min(1).max(120),description:e.string().trim().max(500).optional(),cron:e.string().trim().min(1).max(500).optional(),rate:e.string().trim().min(1).max(500).optional(),once:g.optional(),scheduleType:e.enum(["rate","cron","once"]).optional(),scheduleExpression:e.string().trim().min(1).max(500).optional(),timezone:e.string().trim().min(1).max(100).optional(),enabled:e.boolean().default(!0),startAt:g.optional(),endAt:g.optional(),maxRuns:e.number().int().positive().nullable().optional(),runtimePolicy:e.enum(["run_and_stop","run_and_archive","run_and_delete","use_existing_running"]).default("run_and_stop"),action:e.string().trim().min(1).max(120).optional(),actionName:e.string().trim().min(1).max(120).optional(),command:e.string().trim().min(1).max(2e3).optional(),target:e.object({kind:e.enum(["start","action","service","command"]).optional(),name:e.string().trim().min(1).max(120).optional(),actionName:e.string().trim().min(1).max(120).optional(),command:e.string().trim().min(1).max(2e3).optional(),requiresStart:e.boolean().optional()}).strict().optional(),requiresStart:e.boolean().optional(),budget:e.object({maxUsd:e.string().trim().min(1).max(40).optional()}).strict().optional(),resources:T.optional(),quotas:e.record(e.string(),e.unknown()).optional(),lifecycle:e.record(e.string(),e.unknown()).optional(),retentionPolicy:e.record(e.string(),e.unknown()).optional(),env:e.array(e.object({name:e.string().trim().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(191),value:e.string().optional(),secretRef:e.string().optional()}).strict()).max(100).optional(),integrationLeases:e.array(e.record(e.string(),e.unknown())).max(20).optional(),metadata:e.record(e.string(),e.unknown()).optional()}).strict().superRefine((t,a)=>{[t.cron,t.rate,t.once,t.scheduleExpression].filter(m=>typeof m=="string"&&m.trim()).length!==1&&a.addIssue({code:e.ZodIssueCode.custom,path:["scheduleExpression"],message:"schedule must declare exactly one of cron, rate, once, or scheduleExpression"}),t.scheduleExpression&&!t.scheduleType&&a.addIssue({code:e.ZodIssueCode.custom,path:["scheduleType"],message:"scheduleType is required with scheduleExpression"});let i=t.command??t.target?.command??null,o=t.target?.name??null,s=t.actionName??t.action??t.target?.actionName??(t.target?.kind==="action"?o:null),c=t.target?.kind??(i?"command":"action");c==="action"&&!s&&a.addIssue({code:e.ZodIssueCode.custom,path:["action"],message:"schedule action target is required"}),c==="service"&&!o&&a.addIssue({code:e.ZodIssueCode.custom,path:["target","name"],message:"schedule service target name is required"}),c==="command"&&!i&&a.addIssue({code:e.ZodIssueCode.custom,path:["command"],message:"schedule command target is required"})}),v=e.object({schemaVersion:e.literal(1),name:e.string().trim().min(1).max(80).regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$/),version:e.string().trim().min(1).max(40),useCase:e.string().trim().min(1).max(80),description:e.string().trim().min(1).max(500),runtime:L,resources:T.optional(),setup:e.object({commands:w.default([])}).strict().default({commands:[]}),validation:e.object({commands:w.min(1),probes:e.array(B).max(20).default([])}).strict(),start:_,actions:e.array(I).max(20).default([]),services:e.array(I).max(20).default([]),schedules:e.array(G).max(20).default([]),mcp:e.object({endpoints:e.array(F).max(10).default([])}).strict().default({endpoints:[]}),volumes:e.array(j).max(5).default([]),integrations:e.object({requiredLeases:e.array(V).max(20).default([])}).strict().default({requiredLeases:[]}),permissions:Z,inputs:e.object({schema:W.default({type:"object"}),env:e.array(J).max(100).default([])}).strict().default({schema:{type:"object"},env:[]}),artifacts:e.object({paths:e.array(d).max(100).default([])}).strict().default({paths:[]}),network:e.object({egress:e.enum(["restricted","allow","block"]).default("restricted")}).strict().default({egress:"restricted"})}).strict().superRefine((t,a)=>{Q(t,a),y(a,t.volumes.flatMap(n=>n.name?[n.name]:[]),"volume names must be unique","volumes"),ee(t,a),te(t,a),ae(t,a),ne(t,a)}),me=e.object({path:e.string(),message:e.string(),code:e.string()});function K(t){let a;try{a=k.load(t)}catch(n){return{ok:!1,manifest:null,diagnostics:[{path:"$",code:"invalid_yaml",message:n instanceof Error?n.message:"Invalid YAML"}]}}return U(a)}r(K,"validateSandboxTemplateYaml");function U(t){if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,manifest:null,diagnostics:[{path:"$",code:"invalid_type",message:`${l} must be an object`}]};if(Object.prototype.hasOwnProperty.call(t,"databases"))return{ok:!1,manifest:null,diagnostics:[{path:"$.databases",code:"database_resources_removed",message:"managed database requests are unsupported for Firecracker sandbox templates; use a durable volume with SQLite or files instead"}]};let a=v.safeParse(t);return a.success?{ok:!0,manifest:a.data,diagnostics:[]}:{ok:!1,manifest:null,diagnostics:a.error.issues.map(n=>({path:H(n.path),code:n.code,message:n.message}))}}r(U,"validateSandboxTemplateManifest");function ce(t){let a=K(t);if(!a.ok)throw new Error(X(a.diagnostics));return a.manifest}r(ce,"parseSandboxTemplateYaml");function X(t){return t.map(a=>`${a.path}: ${a.message}`).join(`
|
|
3
|
+
`)}r(X,"formatSandboxTemplateDiagnostics");function pe(t){return v.parse(t)}r(pe,"defineSandboxTemplate");function de(t={}){return T.parse(t)}r(de,"sandboxTemplateResources");function le(t){return j.parse({...t,deleteOnSandboxDelete:t.deleteOnSandboxDelete??!1})}r(le,"sandboxTemplateDurableVolume");function ue(t,a={}){return E.parse({...a,port:t})}r(ue,"sandboxTemplatePreviewPort");function ge(t){let a=d.parse(t.targetPath),n=t.accept?.map(s=>s.trim()).filter(s=>s.length>0),i={targetPath:a,...n&&n.length>0?{accept:n}:{}},o={...t.title?.trim()?{title:t.title.trim()}:{},...t.description?.trim()?{description:t.description.trim()}:{},"x-openpond-upload":i};return t.multiple?{...o,"x-openpond-upload":{...i,multiple:!0},type:"array",items:{type:"string",format:"file"}}:{...o,type:"string",format:"file"}}r(ge,"sandboxTemplateFileInput");function A(t){return[{kind:"start",name:"start",...t.start,artifactPaths:f(t.start,t)},...t.actions.map(a=>({kind:"action",name:a.name,command:a.command,cwd:a.cwd,timeoutSeconds:a.timeoutSeconds,requiresStart:a.requiresStart,ports:a.ports,artifactPaths:f(a,t)})),...t.services.map(a=>({kind:"service",name:a.name,command:a.command,cwd:a.cwd,timeoutSeconds:a.timeoutSeconds,requiresStart:a.requiresStart,ports:a.ports,artifactPaths:f(a,t)}))]}r(A,"sandboxTemplateExecutableEntries");function Y(t){let a=A(t);return{template:{name:t.name,version:t.version,useCase:t.useCase,runtime:t.runtime},resources:t.resources??null,volumes:t.volumes,executables:a.map(n=>({kind:n.kind,name:n.name,command:n.command,cwd:n.cwd??null,timeoutSeconds:n.timeoutSeconds??null,requiresStart:n.requiresStart,ports:n.ports.map(i=>i.port),artifactPaths:n.artifactPaths})),ports:a.flatMap(n=>n.ports.map(i=>({executable:n.name,kind:n.kind,port:i.port,access:i.access,label:i.label??null}))),appMcpEndpoints:t.mcp.endpoints.map(n=>({name:n.name??null,service:n.service??null,port:n.port,path:n.path})),validation:{commands:t.validation.commands,probes:t.validation.probes},schedules:t.schedules}}r(Y,"sandboxTemplateBuildMetadata");function xe(t){return{kind:M,schemaVersion:1,manifestFile:t.manifestFile,projectRoot:t.projectRoot,manifest:t.manifest,metadata:Y(t.manifest),executables:A(t.manifest)}}r(xe,"sandboxTemplateBuildPlan");function fe(t){let a=t.name.trim()||"Sandbox Template",n=se(a),i=t.description?.trim()||`Local scaffold for ${a}.`;return{".gitignore":["node_modules","artifacts",".DS_Store",""].join(`
|
|
4
|
+
`),"README.md":[`# ${a}`,"","Local sandbox template scaffold.","","## Commands","","- `pnpm dev` starts the preview service on port 3000.","- `pnpm process` writes a sample artifact.",`- \`pnpm validate\` validates ${l}.`,""].join(`
|
|
5
|
+
`),"package.json":`${JSON.stringify({private:!0,type:"module",scripts:{dev:"node src/server.ts",process:"node scripts/process.ts",validate:`openpond sandbox-template validate --file ${l}`}},null,2)}
|
|
6
|
+
`,[l]:["schemaVersion: 1",`name: ${n}`,"version: 0.1.0","useCase: sandbox-template-scaffold",`description: ${i}`,"runtime:"," base: node-bun-workspace","resources:"," cpu: 1"," memoryGb: 1"," diskGb: 8","setup:"," commands:"," - mkdir -p artifacts","validation:"," commands:"," - test -f src/server.ts"," - test -f scripts/process.ts","start:"," command: pnpm process"," timeoutSeconds: 300"," ports: []"," artifactPaths:"," - artifacts/result.json","actions: []","schedules: []","services:"," - name: web"," command: pnpm dev"," timeoutSeconds: 3600"," ports:"," - port: 3000"," protocol: http"," label: web"," access: private"," path: /"," artifactPaths: []","inputs:"," env:"," - name: FOO_API_KEY"," required: false"," secret: true"," description: API key used by the sample action."," schema:"," type: object"," properties:"," subject:"," type: string"," title: Subject"," default: Example","artifacts:"," paths:"," - artifacts/result.json","network:"," egress: restricted",""].join(`
|
|
7
|
+
`),"src/server.ts":["import { createServer } from 'node:http';","","createServer((_request, response) => {"," response.setHeader('content-type', 'application/json');"," response.end(JSON.stringify({ ok: true, template: 'sandbox-template-scaffold' }));","}).listen(3000, '0.0.0.0');",""].join(`
|
|
8
|
+
`),"scripts/process.ts":["import { mkdir, writeFile } from 'node:fs/promises';","","const raw = process.env.OPENPOND_REPLAY_PARAMS_BASE64;","const params = raw ? JSON.parse(Buffer.from(raw, 'base64').toString('utf8')).input ?? {} : {};","await mkdir('artifacts', { recursive: true });","await writeFile('artifacts/result.json', JSON.stringify({ ok: true, input: params }, null, 2));","console.log('wrote artifacts/result.json');",""].join(`
|
|
9
|
+
`),"fixtures/input.txt":`Example input
|
|
10
|
+
`}}r(fe,"sandboxTemplateScaffoldFiles");function be(){return e.toJSONSchema(v)}r(be,"sandboxTemplateJsonSchema");function N(t){return!t.includes("\0")&&!t.startsWith("/")&&!t.split(/[\\/]+/).some(a=>a===".."||a==="")}r(N,"isSafeRelativeWorkspacePath");function H(t){return t.length===0?"$":`$${t.map(a=>typeof a=="number"?`[${a}]`:`.${String(a)}`).join("")}`}r(H,"formatIssuePath");function y(t,a,n,i){let o=new Set;for(let s of a){if(o.has(s)){t.addIssue({code:e.ZodIssueCode.custom,path:[i],message:n});return}o.add(s)}}r(y,"addDuplicateNameIssue");function Q(t,a){let n=["start",...t.actions.map(i=>i.name),...t.services.map(i=>i.name)];y(a,n,"start, action, and service names must be unique","actions")}r(Q,"validateExecutableNames");function ee(t,a){let n=x(t.inputs.schema.properties),i=new Set(t.volumes.map(o=>o.name).filter(o=>!!o));for(let[o,s]of Object.entries(n)){let c=x(s),m=x(c["x-openpond-upload"]??c.xOpenPondUpload),p=typeof m.targetPath=="string"&&m.targetPath.trim()?m.targetPath.trim():typeof m.path=="string"&&m.path.trim()?m.path.trim():"";if(!p)continue;let P=p.replace(/^workspace\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(!N(P)){a.addIssue({code:e.ZodIssueCode.custom,path:["inputs","schema","properties",o,"x-openpond-upload","targetPath"],message:"upload target must be a relative workspace path"});continue}let u=P.split("/");u[0]==="volumes"&&(!u[1]||!i.has(u[1]))&&a.addIssue({code:e.ZodIssueCode.custom,path:["inputs","schema","properties",o,"x-openpond-upload","targetPath"],message:"upload target references an undeclared volume"})}}r(ee,"validateInputSchemaUploadTargets");function te(t,a){y(a,t.inputs.env.map(n=>n.name),"env input names must be unique","inputs")}r(te,"validateEnvInputs");function ae(t,a){let n=new Map(t.services.map(o=>[o.name,new Set(o.ports.map(s=>s.port))])),i=new Set([...t.start.ports.map(o=>o.port),...t.services.flatMap(o=>o.ports.map(s=>s.port))]);for(let[o,s]of t.mcp.endpoints.entries()){if(s.service){let c=n.get(s.service);if(!c){a.addIssue({code:e.ZodIssueCode.custom,path:["mcp","endpoints",o,"service"],message:`app MCP service does not exist: ${s.service}`});continue}c.has(s.port)||a.addIssue({code:e.ZodIssueCode.custom,path:["mcp","endpoints",o,"port"],message:`app MCP port ${s.port} is not declared on service ${s.service}`});continue}i.has(s.port)||a.addIssue({code:e.ZodIssueCode.custom,path:["mcp","endpoints",o,"port"],message:`app MCP port ${s.port} is not declared on start or services`})}}r(ae,"validateMcpEndpoints");function ne(t,a){let n=new Set(t.actions.map(o=>o.name)),i=new Set(t.services.map(o=>o.name));for(let[o,s]of t.schedules.entries()){let c=s.command??s.target?.command??null;if(s.target?.kind==="command"||c)continue;let m=s.actionName??s.action??s.target?.actionName??(s.target?.kind==="action"?s.target?.name:null);if(m&&!n.has(m)&&a.addIssue({code:e.ZodIssueCode.custom,path:["schedules",o,"action"],message:`schedule action target does not exist: ${m}`}),s.target?.kind==="service"){let p=s.target.name??"";p&&!i.has(p)&&a.addIssue({code:e.ZodIssueCode.custom,path:["schedules",o,"target","name"],message:`schedule service target does not exist: ${p}`})}}}r(ne,"validateScheduleTargets");function x(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}r(x,"asRecord");function f(t,a){return t.artifactPaths.length>0?t.artifactPaths:a.artifacts.paths}r(f,"commandArtifactPaths");function se(t){return t.toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").slice(0,80)||"sandbox-template"}r(se,"slug");export{b as a,h as b,l as c,ie as d,M as e,v as f,me as g,K as h,U as i,ce as j,X as k,pe as l,de as m,le as n,ue as o,ge as p,A as q,Y as r,xe as s,fe as t,be as u};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
|
|
2
|
+
import{B as Q,D as ee,E as te,F as P,G as ne,H as oe,l as M,z as G}from"./chunk-NVGMZ2IN.js";import{a as j,b as y,c as w,h as Z,i as E,j as B}from"./chunk-KDXLNQNF.js";import{Ha as Y,db as $,wa as K,wb as F}from"./chunk-XAYIETBO.js";import{a as l}from"./chunk-HZP5U2AA.js";import{b as a}from"./chunk-ES2ISFJC.js";import{a as d}from"./chunk-FTQLQJQV.js";var we="openpond-chat",Pe=24,Oe=4e4,N=2e4,H="outputs",D="inputs/previous-outputs",de="inputs/.openpond-context.json",be=100,re=100,se=100*1024*1024,x=class{static{d(this,"OpenPondWorkClient")}#e;#n;#t;#o;constructor(e){this.#e=e.apiKey,this.#n=e.apiBaseUrl,this.#t=e.chatApiBaseUrl,this.#o=e.sandboxes}async run(e){let t=e.prompt.trim();if(!t)throw new Error("Work prompt is required");e.signal?.throwIfAborted();let o=d(async m=>e.onEvent?.(m),"emit"),n=e.cleanup??"keep",s=Re(n),i=null,c=null,f=!1,g=ae(e.maxSteps,1,100,Pe),p="";try{await o({type:"status",message:"Preparing sandbox"}),i=await this.#l(e),await o({type:"sandbox",sandboxId:i.id,state:i.state}),await this.#c(i.id,e.inputs??[]),c=await this.#p(i.id);let m=[{role:"system",content:xe(i.id,(e.inputs?.length??0)>0)},...(e.history??[]).map(h=>({...h})),{role:"user",content:t}];for(let h=1;h<=g;h+=1){e.signal?.throwIfAborted(),await o({type:"status",message:`Thinking \xB7 step ${h}`});let X=(await B({apiBaseUrl:this.#t,token:this.#e,model:e.model?.trim()||we,messages:m,tools:ke,toolChoice:"auto",signal:e.signal,metadata:{source:"openpond-sdk-work",sandboxId:i.id,apiBaseUrl:this.#n,...e.metadata}})).choices?.[0],W=X?.message?.content?.trim()??"",L=X?.message?.tool_calls??[];if(m.push({role:"assistant",content:W||null,...L.length>0?{tool_calls:L}:{}}),W&&(p=W,await o({type:"assistant",text:W})),L.length===0){let b=await this.#i(i.id,c);for(let U of b)await o({type:"output",output:U});f=!0,await this.#s(i.id,b,e,s,o);let A={sandboxId:i.id,text:p,steps:h,outputs:b,lifecycle:s};return await o({type:"done",...A}),A}for(let[b,A]of L.entries()){let U=await this.#u(i.id,A,b,e.timeoutSeconds,o);m.push(U)}}throw new Error(`Work did not finish within ${g} steps`)}catch(m){if(i&&c&&!f)try{let h=await this.#i(i.id,c);for(let V of h)await o({type:"output",output:V});await this.#s(i.id,h,e,s,o)}catch(h){ie(m,s,h)}throw ie(m,s),m}}async deleteSandbox(e){(await this.#o.get(e)).state!=="deleted"&&await this.#o.delete(e)}async#c(e,t){if(t.length===0)return;if(t.length>re)throw new Error(`Work inputs exceed the ${re} file limit`);if(t.reduce((i,c)=>i+Buffer.byteLength(c.contentsBase64,"base64"),0)>se)throw new Error(`Work inputs exceed the ${se} byte limit`);await this.#o.mkdir(e,{path:D,recursive:!0});let n=new Set,s=[];for(let[i,c]of t.entries()){let f=Se(c,i,n),g=`${D}/${f}`;await this.#o.uploadFileBase64(e,g,c.contentsBase64),s.push({id:c.id,path:g,name:c.name,mimeType:c.mimeType??null,checksumSha256:c.checksumSha256??null,revision:c.revision??null,metadata:c.metadata??{}})}await this.#o.uploadFile(e,de,JSON.stringify({version:1,files:s},null,2))}async#s(e,t,o,n,s){if(n.persistence.outputCount=t.length,t.length===0)n.persistence.status="not_needed";else if(o.persistOutput){n.persistence.status="running";for(let i of t){await s({type:"persistence",output:i,status:"started"});try{let c=Ce(this.#o,e,i);await o.persistOutput({output:i,download:c}),n.persistence.persistedCount+=1,await s({type:"persistence",output:i,status:"succeeded"})}catch(c){let f=k(c);throw n.persistence.status="failed",n.persistence.error=f,await s({type:"persistence",output:i,status:"failed",error:f}),(o.cleanup??"keep")!=="keep"&&await this.#r(e,"stop",n,s),c}}n.persistence.status="complete"}else{if((o.cleanup??"keep")==="delete"&&!o.discardOutputs)throw n.persistence.status="failed",n.persistence.error="Deleting a Work sandbox with outputs requires persistOutput or discardOutputs: true",await this.#r(e,"stop",n,s),new Error(n.persistence.error);n.persistence.status="not_requested"}await this.#r(e,o.cleanup??"keep",n,s)}async#r(e,t,o,n){if(t!=="keep"){o.cleanup.status="running",await n({type:"cleanup",policy:t,status:"started"});try{let s=t==="delete"?await this.#o.delete(e):(await this.#o.stop(e)).sandbox;o.cleanup.finalSandboxState=s.state,o.cleanup.status=t==="delete"&&s.state==="deleted"||t==="stop"&&s.state==="stopped"?"complete":"pending",await n({type:"cleanup",policy:t,status:o.cleanup.status,sandboxState:s.state})}catch(s){let i=k(s);throw o.cleanup.status="failed",o.cleanup.error=i,await n({type:"cleanup",policy:t,status:"failed",error:i}),s}}}downloadOutput(e,t){return this.#o.downloadFileResponse(e,typeof t=="string"?t:t.path)}async#p(e){return await this.#o.mkdir(e,{path:H,recursive:!0}),Ie(await this.#a(e))}async#i(e,t){return(await this.#a(e)).filter(n=>t.get(n.path)!==ce(n)).sort((n,s)=>n.path.localeCompare(s.path)).slice(0,be).map(ve)}async#a(e){return(await this.#o.listFiles(e,{path:H,recursive:!0,maxEntries:500})).files.filter(o=>o.type==="file"&&!pe(o.path).includes("/.openpond-"))}async#l(e){if(e.sandboxId){let n=await this.#o.get(e.sandboxId);if(n.state==="stopped")await this.#o.start(n.id,{async:!0});else if(n.state==="deleted"||n.state==="error")throw new Error(`Cannot resume sandbox ${n.id} in state ${n.state}`);return await this.#d(n.id,e.signal)}let t=e.budgetUsd?.trim()||"1.00",o=await this.#o.create({...e.repo?.trim()?{repo:e.repo.trim()}:{},runtimeProfileId:"openpond-work-v1",resources:{cpu:2,memoryGb:4,diskGb:16},budget:{maxUsd:t},quotas:{maxSpendUsd:t,maxDurationSeconds:3600,idleTimeoutSeconds:900,maxCommands:200,maxOpenPorts:4},metadata:{source:"openpond-sdk-work",...e.metadata}},{async:!0});return this.#d(o.id,e.signal)}async#d(e,t){let o=Date.now()+72e4,n=await this.#o.get(e);for(;Date.now()<o;){if(t?.throwIfAborted(),n.state==="running")return n;if(n.state==="error"||n.state==="deleted")throw new Error(`Sandbox ${n.id} entered ${n.state}${n.logs.length?`: ${n.logs.join(`
|
|
3
|
+
`)}`:""}`);await _e(2e3,t),n=await this.#o.get(e)}throw new Error(`Sandbox ${e} did not become ready before timeout`)}async#u(e,t,o,n,s){let i=t.id||`work_tool_${o}`,c=t.function?.name;if(c!=="run_command")return O(i,{error:`Unknown tool: ${c??"missing"}`});let f;try{f=JSON.parse(t.function?.arguments||"{}")}catch(p){return O(i,{error:`Invalid tool arguments: ${k(p)}`})}let g=typeof f.command=="string"?f.command.trim():"";if(!g)return O(i,{error:"command is required"});if(g.length>N){let p=`command exceeds the ${N} character limit`;return await s({type:"tool",toolCallId:i,command:g,status:"failed",output:p}),O(i,{status:"failed",error:p})}await s({type:"tool",toolCallId:i,command:g,status:"started"});try{let p=await this.#o.exec(e,{command:g,timeoutSeconds:ae(n,1,900,180)}),m=Ae(p.command.output,Oe),h=p.command.status==="succeeded"?"succeeded":"failed";return await s({type:"tool",toolCallId:i,command:g,status:h,output:m,exitCode:p.command.exitCode}),O(i,{status:p.command.status,exitCode:p.command.exitCode,output:m})}catch(p){if(p instanceof j)throw p;let m=k(p);return await s({type:"tool",toolCallId:i,command:g,status:"failed",output:m}),O(i,{status:"failed",error:m})}}},ke=[{type:"function",function:{name:"run_command",description:"Run a shell command inside the persistent OpenPond sandbox. Use standard shell tools to inspect, edit, build, and test files. Commands start in the repository workspace.",parameters:{type:"object",additionalProperties:!1,properties:{command:{type:"string",minLength:1,maxLength:N,description:"Shell command to execute."}},required:["command"]}}}];function xe(r,e){return["You are OpenPond Work, a careful coding agent operating in an isolated Linux sandbox.",`The active sandbox is ${r}.`,...e?[`Caller-provided durable files are staged under ${D}; structured metadata is in ${de}.`]:[],"Use run_command to inspect the workspace, edit files, and validate your work.",`Place completed user-facing files in ${H}. The runtime collects new and revised files there automatically when the turn completes.`,"Do the requested work completely. Preserve existing user changes and avoid destructive commands.","Keep the user informed with concise prose, but call tools whenever verification or file changes are needed.","Before finishing, run relevant tests and summarize the concrete result."].join(`
|
|
4
|
+
`)}d(xe,"systemPrompt");function Re(r){return{cleanupPolicy:r,persistence:{status:"not_requested",outputCount:0,persistedCount:0},cleanup:{status:"not_requested"}}}d(Re,"initialLifecycle");function Ce(r,e,t){let o=null;return()=>(o??=r.downloadFileResponse(e,{path:t.path,maxBytes:Math.max(1,t.sizeBytes)}).then(n=>{let s=Buffer.byteLength(n.file.contentsBase64,"base64");if(n.file.truncated||n.file.returnedBytes!==n.file.totalSizeBytes||s!==t.sizeBytes)throw new Error(`Output download was incomplete for ${t.name}`);return n}),o)}d(Ce,"lazyOutputDownload");function Se(r,e,t){let o=r.id.replace(/[^a-zA-Z0-9._-]+/g,"-").slice(0,80)||`input-${e+1}`,n=r.name.replace(/[^a-zA-Z0-9._-]+/g,"-").slice(-120)||"file",s=`${o}-${n}`,i=s,c=1;for(;t.has(i);)c+=1,i=`${s}-${c}`;return t.add(i),i}d(Se,"uniqueInputName");function ie(r,e,t){!r||typeof r!="object"||Object.assign(r,{workLifecycle:e,...t?{workFinalizationError:k(t)}:{}})}d(ie,"attachWorkFailure");function Ie(r){return new Map(r.map(e=>[e.path,ce(e)]))}d(Ie,"outputSignatures");function ce(r){return`${r.sizeBytes}:${r.updatedAt}`}d(ce,"outputSignature");function ve(r){let e=pe(r.path).split("/").at(-1)||r.path,t=We(e);return{path:r.path,name:e,mimeType:t,sizeBytes:r.sizeBytes,updatedAt:r.updatedAt,isBinary:r.isBinary??null,previewable:r.previewable??(t.startsWith("image/")||t==="application/pdf"||t.startsWith("text/"))}}d(ve,"workOutputFromFile");function pe(r){return r.replaceAll("\\","/")}d(pe,"normalizedOutputPath");function We(r){let e=r.toLowerCase().match(/\.[^.]+$/)?.[0]??"";return Le[e]??"application/octet-stream"}d(We,"workOutputMimeType");var Le=Object.freeze({".avif":"image/avif",".csv":"text/csv",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".gif":"image/gif",".html":"text/html",".jpeg":"image/jpeg",".jpg":"image/jpeg",".json":"application/json",".m4a":"audio/mp4",".md":"text/markdown",".mov":"video/quicktime",".mp3":"audio/mpeg",".mp4":"video/mp4",".pdf":"application/pdf",".png":"image/png",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".svg":"image/svg+xml",".tsv":"text/tab-separated-values",".txt":"text/plain",".wav":"audio/wav",".webm":"video/webm",".webp":"image/webp",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});function O(r,e){return{role:"tool",tool_call_id:r,content:JSON.stringify(e)}}d(O,"toolMessage");function ae(r,e,t,o){return Number.isFinite(r)?Math.min(t,Math.max(e,Math.floor(r))):o}d(ae,"boundedInteger");function Ae(r,e){return r.length<=e?r:`${r.slice(0,e)}
|
|
5
|
+
\u2026 output truncated by openpond-sdk`}d(Ae,"truncate");function k(r){return r instanceof Error?r.message:String(r)}d(k,"errorMessage");function _e(r,e){return new Promise((t,o)=>{if(e?.aborted){o(e.reason);return}let n=setTimeout(t,r);n.unref?.(),e?.addEventListener("abort",()=>{clearTimeout(n),o(e.reason)},{once:!0})})}d(_e,"sleep");import{promises as le}from"node:fs";var R=class{static{d(this,"OpenPondProjectActionsClient")}#e;#n;constructor(e){this.#e=e.apiKey,this.#n=e.apiBaseUrl.replace(/\/+$/,"")}async list(e){let t=await y(this.#n,this.#e,_(e.projectId,"releases",e.teamId));return(await w(t,"List Project Action releases")).releases}async catalog(e){let t=await y(this.#n,this.#e,_(e.projectId,"catalog",e.teamId));return(await w(t,"Get Project Action catalog")).catalog}async publish(e){let[t,o]=await Promise.all([le.readFile(e.build.bundlePath),le.readFile(e.build.runnerPath)]),n=await y(this.#n,this.#e,_(e.projectId,"releases",e.teamId),{method:"POST",body:JSON.stringify({sourceRef:e.sourceRef,sourceCommitSha:e.sourceCommitSha,bundleBase64:t.toString("base64"),runnerBase64:o.toString("base64"),registry:e.build.registry,manifest:e.build.manifest,metadata:e.metadata})});return(await w(n,"Publish Project Actions")).release}async run(e){let t=await y(this.#n,this.#e,_(e.projectId,`actions/${encodeURIComponent(e.actionId)}`,e.teamId),{method:"POST",body:JSON.stringify({input:e.value??{},releaseId:e.releaseId,idempotencyKey:e.idempotencyKey,callerType:e.callerType??"sdk",callerId:e.callerId}),signal:e.signal,timeoutMs:9e5});return(await w(t,"Run Project Action")).invocation}};function _(r,e,t){return`/v1/project-actions/${encodeURIComponent(r)}/${e}?teamId=${encodeURIComponent(t)}`}d(_,"projectActionPath");var S=class{static{d(this,"OpenPondProfileActionsClient")}#e;#n;constructor(e){this.#e=e.apiKey,this.#n=e.apiBaseUrl.replace(/\/+$/,"")}async catalog(e){let t=C(e.teamId,"teamId"),o=new URLSearchParams({teamId:t});e.profileId?.trim()&&o.set("profileId",e.profileId.trim()),e.profileName?.trim()&&o.set("profileName",e.profileName.trim());let n=await y(this.#n,this.#e,`/v1/profile/actions?${o.toString()}`);return(await w(n,"Get Profile Action catalog")).catalog}async run(e){let t=C(e.teamId,"teamId"),o=C(e.actionKey,"actionKey"),n=C(e.idempotencyKey,"idempotencyKey"),s=C(e.catalogVersion,"catalogVersion"),i=await y(this.#n,this.#e,`/v1/profile/actions/run?${new URLSearchParams({teamId:t}).toString()}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e.profileId?.trim()?{profileId:e.profileId.trim()}:{},...e.profileName?.trim()?{profileName:e.profileName.trim()}:{},actionKey:o,value:e.value??{},conversationId:e.conversationId??null,createConversation:e.createConversation,conversationTitle:e.conversationTitle??null,idempotencyKey:n,catalogVersion:s,externalCapabilityLeases:e.externalCapabilityLeases})});return w(i,"Run Profile Action")}};function C(r,e){let t=r.trim();if(!t)throw new Error(`${e} is required`);return t}d(C,"requiredValue");import{randomUUID as ue}from"node:crypto";var I=class{static{d(this,"OpenPondWorkflowsClient")}#e;#n;constructor(e){this.#e=e.apiKey,this.#n=e.apiBaseUrl.replace(/\/+$/,"")}async list(e={}){return this.#t("","List Workflows",{signal:e.signal})}async create(e,t={}){return this.#t("","Create Workflow",{method:"POST",body:JSON.stringify({...e,clientRequestId:e.clientRequestId?.trim()||ue()}),signal:t.signal})}async update(e,t,o={}){return this.#t(`/schedules/${encodeURIComponent(z(e,"scheduleId"))}`,"Update Workflow",{method:"PATCH",body:JSON.stringify(t),signal:o.signal})}async delete(e,t={}){return this.#t(`/schedules/${encodeURIComponent(z(e,"scheduleId"))}`,"Delete Workflow",{method:"DELETE",signal:t.signal})}async runNow(e,t={},o={}){return this.#t(`/schedules/${encodeURIComponent(z(e,"scheduleId"))}/run`,"Run Workflow",{method:"POST",body:JSON.stringify({clientRequestId:t.clientRequestId?.trim()||ue()}),signal:o.signal})}async#t(e,t,o={}){let n=await y(this.#n,this.#e,`/v1/saved-work${e}`,o);return w(n,t)}};function z(r,e){let t=r.trim();if(!t)throw new Error(`${e} is required`);return t}d(z,"requiredId");var T=a.object({id:l,scope:l,sourceId:l,name:a.string().trim().min(1).max(100),keyPrefix:a.string().min(1).max(100),createdAt:a.iso.datetime(),expiresAt:a.iso.datetime(),revokedAt:a.iso.datetime().nullable()}).strict(),me=a.string().regex(/^opk_key_[A-Za-z0-9]{16}_[A-Za-z0-9]{48}$/),q=a.discriminatedUnion("action",[a.object({action:a.literal("create"),scope:l,sourceId:l,name:a.string().trim().min(1).max(100),expiresAt:a.iso.datetime(),operationId:l,apiKey:me}).strict(),a.object({action:a.literal("list"),scope:l,sourceId:l,afterId:l.optional(),limit:a.number().int().min(1).max(100).default(30)}).strict(),a.object({action:a.literal("revoke"),scope:l,sourceId:l,id:l}).strict()]),ge=a.object({credential:T,apiKey:me}).strict(),he=a.object({items:a.array(T).max(100),nextCursor:l.nullable()}).strict(),fe=a.object({scope:l,sourceId:l}).strict(),ye=a.object({scope:l,source:$,taskDefinition:$,enabled:a.boolean(),allowedSplits:a.array(Y).min(1).max(4)}).strict();var Te=a.object({batchId:a.string().trim().min(1).max(500),modelProjectId:a.string().trim().min(1).max(500)}).strict(),qe=a.object({batchId:a.string().min(1),projectId:a.string().min(1),tasksetId:a.string().min(1),releaseId:a.string().min(1),revision:a.number().int().positive(),contentHash:a.string().regex(/^[a-f0-9]{64}$/)}).strict(),u=class extends Error{constructor(t,o,n,s){super(n);this.status=t;this.code=o;this.details=s;this.name="OpenPondLearningError"}status;code;details;static{d(this,"OpenPondLearningError")}},v=class{static{d(this,"OpenPondLearningClient")}#e;constructor(e){if(!e.apiKey.trim()||!e.scope.trim())throw new Error("Learning API key and scope are required.");let t=new URL(e.baseUrl);if(!["http:","https:"].includes(t.protocol)||t.username||t.password||t.search||t.hash)throw new Error("Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.");this.#e={...e,baseUrl:t.toString().replace(/\/+$/,"")}}async command(e,t={}){ee(e);let o=te.parse({scope:this.#e.scope,command:e}),n=oe.parse(await this.#t("commands",o,t));if(n.operationId!==e.operationId)throw new u(502,"operation_identity_mismatch","Learning response did not match the submitted operation.",null);return n}submitExample(e,t={}){return this.command({action:"submit_example",operationId:e.idempotencyKey,example:e},t)}submitFeedback(e,t={}){return this.command({action:"submit_feedback",operationId:e.idempotencyKey,feedback:e},t)}async get(e,t,o,n={}){let s=P.parse({action:"get",scope:this.#e.scope,kind:e,id:t,...o===void 0?{}:{revision:o}});return M[e].parse(await this.#t("read",s,n))}async inspectEvidence(e,t={}){let o=P.parse({action:"inspect_evidence",scope:this.#e.scope,evidence:e}),n=ne.parse(await this.#t("read",o,t));if(!F(n.evidence,e))throw new u(502,"evidence_identity_mismatch","Inspection did not match the requested evidence release.",null);return n}async inspectTaskQueue(e=null,t={}){let o=P.parse({action:"inspect_task_queue",scope:this.#e.scope,modelProjectId:e}),n=Q.parse(await this.#t("read",o,t));if(n.modelProjectId!==e)throw new u(502,"model_identity_mismatch","Task queue did not match the requested Model.",null);return n}async inspectPolicy(e,t={}){let o=P.parse({action:"inspect_policy",scope:this.#e.scope,policy:e}),n=G.parse(await this.#t("read",o,t));if(!F(n.policy,e))throw new u(502,"policy_identity_mismatch","Inspection did not match the requested policy release.",null);return n}async createSourceCredential(e,t={}){let o=q.parse({...e,action:"create",scope:this.#e.scope}),n=ge.parse(await this.#t("credentials",o,t));if(this.#n(n.credential,e.sourceId),n.apiKey!==e.apiKey||!e.apiKey.startsWith(`${n.credential.keyPrefix}_`))throw new u(502,"credential_identity_mismatch","Credential response did not match the prepared credential.",null);return n}async listSourceCredentials(e,t={},o={}){let n=q.parse({...t,action:"list",scope:this.#e.scope,sourceId:e}),s=he.parse(await this.#t("credentials",n,o));if(s.items.length>(t.limit??30))throw new u(502,"credential_page_invalid","Credential response exceeded the requested page size.",null);for(let i of s.items)this.#n(i,e);return s}async revokeSourceCredential(e,t,o={}){let n=q.parse({action:"revoke",scope:this.#e.scope,sourceId:e,id:t}),s=T.parse(await this.#t("credentials",n,o));if(this.#n(s,e),s.id!==t||s.revokedAt===null)throw new u(502,"credential_revocation_mismatch","Credential revocation did not match the requested credential.",null);return s}async sourceConfiguration(e,t={}){let o=fe.parse({scope:this.#e.scope,sourceId:e}),n=ye.parse(await this.#t("source-config",o,t));if(n.scope!==this.#e.scope||n.source.id!==e)throw new u(502,"source_identity_mismatch","Source configuration did not match the requested source.",null);return n}#n(e,t){if(e.scope!==this.#e.scope||e.sourceId!==t)throw new u(502,"credential_scope_mismatch","Credential response did not match the requested source.",null)}async list(e,t={},o={}){let n=P.parse({action:"list",scope:this.#e.scope,kind:e,...t});return a.object({items:a.array(M[e]).max(100),nextCursor:a.string().nullable()}).strict().parse(await this.#t("read",n,o))}async publishBatch(e,t={}){let o=Te.parse(e),n=qe.parse(await this.#t("publish-batch",{...o,scope:this.#e.scope},t));if(n.batchId!==o.batchId)throw new u(502,"batch_identity_mismatch","Published batch response did not match the requested batch.",null);return n}async#t(e,t,o){K(t,16777216);let n=await(this.#e.fetch??globalThis.fetch)(`${this.#e.baseUrl}/v1/learning/${e}`,{method:"POST",headers:{Authorization:`Bearer ${this.#e.apiKey}`,"Content-Type":"application/json",Accept:"application/json","X-OpenPond-Team-Id":this.#e.scope},body:JSON.stringify(t),signal:o.signal,redirect:"error"}),s=await Ue(n);if(!n.ok){let i=a.object({code:a.string().optional(),error:a.string().optional()}).passthrough().safeParse(s);throw new u(n.status,i.success?i.data.code??"learning_request_failed":"learning_request_failed",i.success?i.data.error??`Learning request failed (${n.status}).`:`Learning request failed (${n.status}).`,s)}return s}};async function Ue(r){let t=r.body?.getReader();if(!t)throw new u(r.status,"empty_response","Learning response was empty.",null);let o=new TextDecoder,n=0,s="";try{for(;;){let c=await t.read();if(c.done)break;if(n+=c.value.byteLength,n>16777216)throw new u(r.status,"response_too_large","Learning response exceeded 16 MiB; request a smaller page.",null);s+=o.decode(c.value,{stream:!0})}s+=o.decode();let i=JSON.parse(s);return K(i,16777216),i}finally{await t.cancel(),t.releaseLock()}}d(Ue,"readBoundedLearningResponse");var J=class{static{d(this,"OpenPondClient")}sandboxes;work;workflows;actions;profileActions;learning;constructor(e){let t=e.apiKey.trim();if(!t)throw new Error("OpenPond API key is required");let o=e.baseUrl?.trim()||"https://api.openpond.ai";this.learning=n=>new v({apiKey:t,baseUrl:o,scope:n}),this.sandboxes=Z({apiKey:t,baseUrl:o,sandboxApiUrl:e.sandboxApiUrl}),this.work=new x({apiKey:t,apiBaseUrl:o,chatApiBaseUrl:e.chatApiUrl?.trim()||E({apiBaseUrl:o,env:{}}),sandboxes:this.sandboxes}),this.workflows=new I({apiKey:t,apiBaseUrl:o}),this.actions=new R({apiKey:t,apiBaseUrl:o}),this.profileActions=new S({apiKey:t,apiBaseUrl:o})}};function qt(r){return new J(r)}d(qt,"createOpenPondClient");export{qt as a};
|