@ucloud-sdks/ucloud-sandbox-cli 0.1.0-beta.11 → 0.1.0-beta.12
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/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -241,7 +241,7 @@ X-Trace-ID: ${e}`}function RE(){return{async onResponse({response:t}){return dDe
|
|
|
241
241
|
`;continue}if(r.type==="ENV"){let n=[];for(let i=0;i<r.args.length;i+=2)n.push(`${r.args[i]}=${r.args[i+1]}`);e+=`ENV ${n.join(" ")}
|
|
242
242
|
`;continue}e+=`${r.type} ${r.args.join(" ")}
|
|
243
243
|
`}return this.startCmd&&(e+=`ENTRYPOINT ${this.startCmd}
|
|
244
|
-
`),e}async build(e,r){r.skipCache&&(this.force=!0),r.onBuildLogs?.(new Cn(new Date,"info",`Requesting build for template: ${r.alias}`));let{templateID:n,buildID:i}=await o$(e,{alias:r.alias,cpuCount:r.cpuCount??2,memoryMB:r.memoryMB??1024});r.onBuildLogs?.(new Cn(new Date,"info",`Template created with ID: ${n}, Build ID: ${i}`));let s=await this.instructionsWithHashes(),o=s.map(async(a,c)=>{if(a.type!=="COPY")return;let l=a.args.length>0?a.args[0]:null,d=a.filesHash??null;if(l===null||d===null)throw new Error("Source path and files hash are required");let f=a.forceUpload,p;c+1>=0&&c+1<this.stackTraces.length&&(p=this.stackTraces[c+1]);let{present:h,url:m}=await a$(e,{templateID:n,filesHash:d},p);f&&m!=null||h===!1&&m!=null?(await c$({fileName:l,fileContextPath:this.fileContextPath.toString(),url:m,ignorePatterns:[...this.fileIgnorePatterns,...Fv(this.fileContextPath.toString())],resolveSymlinks:a.resolveSymlinks??!1},p),r.onBuildLogs?.(new Cn(new Date,"info",`Uploaded '${l}'`))):r.onBuildLogs?.(new Cn(new Date,"info",`Skipping upload of '${l}', already cached`))});return await Promise.all(o),r.onBuildLogs?.(new Cn(new Date,"info","All file uploads completed")),r.onBuildLogs?.(new Cn(new Date,"info","Starting building...")),await l$(e,{templateID:n,buildID:i,template:this.serialize(s)}),{alias:r.alias,templateId:n,buildId:i}}async instructionsWithHashes(){return Promise.all(this.instructions.map(async(e,r)=>{if(e.type!=="COPY")return e;let n=e.args.length>0?e.args[0]:null,i=e.args.length>1?e.args[1]:null;if(n===null||i===null)throw new Error("Source path and destination path are required");let s;return r+1>=0&&r+1<this.stackTraces.length&&(s=this.stackTraces[r+1]),{...e,filesHash:await t$(n,i,this.fileContextPath.toString(),[...this.fileIgnorePatterns,...Ni==="browser"?[]:Fv(this.fileContextPath.toString())],e.resolveSymlinks??!1,s)}}))}serialize(e){let r={startCmd:this.startCmd,readyCmd:this.readyCmd,steps:e,force:this.force};return this.baseImage!==void 0&&(r.fromImage=this.baseImage),this.baseTemplate!==void 0&&(r.fromTemplate=this.baseTemplate),this.registryConfig!==void 0&&(r.fromImageRegistry=this.registryConfig),r}};function Bn(t){return new za(t)}Bn.build=za.build;Bn.buildInBackground=za.buildInBackground;Bn.getBuildStatus=za.getBuildStatus;Bn.toJSON=za.toJSON;Bn.toDockerfile=za.toDockerfile;var U2={};bu(U2,{author:()=>RNe,bin:()=>PNe,bugs:()=>ANe,default:()=>BNe,dependencies:()=>FNe,description:()=>xNe,devDependencies:()=>LNe,engines:()=>kNe,files:()=>MNe,homepage:()=>CNe,keywords:()=>vNe,license:()=>DNe,name:()=>yNe,publishConfig:()=>NNe,repository:()=>ONe,scripts:()=>wNe,sideEffects:()=>INe,version:()=>G2});var yNe="@ucloud-sdks/ucloud-sandbox-cli",G2="0.1.0-beta.
|
|
244
|
+
`),e}async build(e,r){r.skipCache&&(this.force=!0),r.onBuildLogs?.(new Cn(new Date,"info",`Requesting build for template: ${r.alias}`));let{templateID:n,buildID:i}=await o$(e,{alias:r.alias,cpuCount:r.cpuCount??2,memoryMB:r.memoryMB??1024});r.onBuildLogs?.(new Cn(new Date,"info",`Template created with ID: ${n}, Build ID: ${i}`));let s=await this.instructionsWithHashes(),o=s.map(async(a,c)=>{if(a.type!=="COPY")return;let l=a.args.length>0?a.args[0]:null,d=a.filesHash??null;if(l===null||d===null)throw new Error("Source path and files hash are required");let f=a.forceUpload,p;c+1>=0&&c+1<this.stackTraces.length&&(p=this.stackTraces[c+1]);let{present:h,url:m}=await a$(e,{templateID:n,filesHash:d},p);f&&m!=null||h===!1&&m!=null?(await c$({fileName:l,fileContextPath:this.fileContextPath.toString(),url:m,ignorePatterns:[...this.fileIgnorePatterns,...Fv(this.fileContextPath.toString())],resolveSymlinks:a.resolveSymlinks??!1},p),r.onBuildLogs?.(new Cn(new Date,"info",`Uploaded '${l}'`))):r.onBuildLogs?.(new Cn(new Date,"info",`Skipping upload of '${l}', already cached`))});return await Promise.all(o),r.onBuildLogs?.(new Cn(new Date,"info","All file uploads completed")),r.onBuildLogs?.(new Cn(new Date,"info","Starting building...")),await l$(e,{templateID:n,buildID:i,template:this.serialize(s)}),{alias:r.alias,templateId:n,buildId:i}}async instructionsWithHashes(){return Promise.all(this.instructions.map(async(e,r)=>{if(e.type!=="COPY")return e;let n=e.args.length>0?e.args[0]:null,i=e.args.length>1?e.args[1]:null;if(n===null||i===null)throw new Error("Source path and destination path are required");let s;return r+1>=0&&r+1<this.stackTraces.length&&(s=this.stackTraces[r+1]),{...e,filesHash:await t$(n,i,this.fileContextPath.toString(),[...this.fileIgnorePatterns,...Ni==="browser"?[]:Fv(this.fileContextPath.toString())],e.resolveSymlinks??!1,s)}}))}serialize(e){let r={startCmd:this.startCmd,readyCmd:this.readyCmd,steps:e,force:this.force};return this.baseImage!==void 0&&(r.fromImage=this.baseImage),this.baseTemplate!==void 0&&(r.fromTemplate=this.baseTemplate),this.registryConfig!==void 0&&(r.fromImageRegistry=this.registryConfig),r}};function Bn(t){return new za(t)}Bn.build=za.build;Bn.buildInBackground=za.buildInBackground;Bn.getBuildStatus=za.getBuildStatus;Bn.toJSON=za.toJSON;Bn.toDockerfile=za.toDockerfile;var U2={};bu(U2,{author:()=>RNe,bin:()=>PNe,bugs:()=>ANe,default:()=>BNe,dependencies:()=>FNe,description:()=>xNe,devDependencies:()=>LNe,engines:()=>kNe,files:()=>MNe,homepage:()=>CNe,keywords:()=>vNe,license:()=>DNe,name:()=>yNe,publishConfig:()=>NNe,repository:()=>ONe,scripts:()=>wNe,sideEffects:()=>INe,version:()=>G2});var yNe="@ucloud-sdks/ucloud-sandbox-cli",G2="0.1.0-beta.12",xNe="CLI for managing UCloud sandbox templates",CNe="https://ucloud.cn",DNe="MIT",RNe={name:"jason.mei"},ANe="https://github.com/ucloud/ucloud-sandbox-cli/issues",ONe={type:"git",url:"git+https://github.com/ucloud/ucloud-sandbox-cli.git",directory:"packages/cli"},NNe={access:"public"},vNe=["ucloud","ai-agents","agents","ai","code-interpreter","sandbox","code","cli","runtime","vm","nodejs","javascript","typescript"],INe=!1,wNe={prepublishOnly:"pnpm build",build:"tsc --noEmit --skipLibCheck && tsup --minify",dev:"tsup --watch",lint:"eslint src",format:"prettier --write src","test:interactive":"pnpm build && ./dist/index.js",test:"vitest run","test:watch":"vitest watch","test:coverage":"vitest run --coverage","check-deps":"knip","update-deps":"ncu -u && pnpm i","generate-ref":"./scripts/generate_sdk_ref.sh"},LNe={e2b:"file:./packages/js-sdk","@types/command-exists":"^1.2.3","@types/handlebars":"^4.1.0","@types/inquirer":"^9.0.7","@types/json2md":"^1.5.4","@types/node":"^20.19.19","@types/npmcli__package-json":"^4.0.4","@types/statuses":"^2.0.5","@types/update-notifier":"6.0.5","@vitest/coverage-v8":"^3.2.4",json2md:"^2.0.1",knip:"^5.43.6","npm-check-updates":"^16.14.6",tsup:"^8.4.0",typescript:"^5.2.2",vitest:"^3.2.4"},MNe=["dist","LICENSE","README.md","package.json"],PNe={"ucloud-sandbox-cli":"dist/index.js"},FNe={"@iarna/toml":"^2.2.5","@inquirer/prompts":"^7.9.0","@npmcli/package-json":"^5.2.1","async-listen":"^3.0.1",boxen:"^7.1.1",chalk:"^5.3.0","cli-highlight":"^2.1.11","command-exists":"^1.2.9",commander:"^11.1.0","console-table-printer":"^2.11.2","dockerfile-ast":"^0.6.1",handlebars:"^4.7.8",inquirer:"^12.10.0",open:"^9.1.0",statuses:"^2.0.1","strip-ansi":"^7.1.0","update-notifier":"^6.0.2",yup:"^1.3.2"},kNe={node:">=20"},BNe={name:yNe,version:G2,description:xNe,homepage:CNe,license:DNe,author:RNe,bugs:ANe,repository:ONe,publishConfig:NNe,keywords:vNe,sideEffects:INe,scripts:wNe,devDependencies:LNe,files:MNe,bin:PNe,dependencies:FNe,engines:kNe};u();u();var _w=K(Gte());u();var uf=K(require("path"));function qn(t){let e=process.cwd();return t?uf.isAbsolute(t)?t:uf.resolve(e,t):e}function Hte(t){return uf.relative(process.cwd(),t)}var $6e="#FFB766";function ET(t){let e=Ae(t.email),r=t.teamName?Ae(t.teamName):V6e("Log out and log in to get team name"),n=Ae(t.teamId);return`You are logged in as ${e},
|
|
245
245
|
Selected team: ${r} (${n})`}function $te(t,e){let r=Ae(t.name),n=Ae(t.teamID),i=t.teamID==e?ze(" (currently selected team)"):"";return`${r} (${n})${i}`}function nr(t,e){let r=gw(t.aliases),n=r?Ae(r):"",i=e?W6e(" <-> ")+Dt(e):"";return`${`${t.templateID} `}${n}${i}`.trim()}function V6e(t){return He.redBright(t)}function ic(t,e){return He.redBright(`${t?`${t}
|
|
246
246
|
`:""}${e?e.stack:""}
|
|
247
247
|
`)}function W6e(t){return He.dim(t)}function Ae(t){return He.bold(t)}function ze(t){return He.hex($6e)(t)}function ST(t){return He.blue(t)}function Ct(t){return He.blue(t)}function Dt(t){return t?Ct("./"+Hte(t)):""}function Vte(t){return He.blueBright(t)}function df(t){return He.underline(t)}function gw(t){if(t)return t.join(", ")}function bT(t){return _w.default(t,{language:"typescript",ignoreIllegals:!0})}function TT(t){return _w.default(t,{language:"python",ignoreIllegals:!0})}var z6e={topLeft:"",topRight:"",bottomLeft:"",bottomRight:"",top:"",bottom:"",left:"",right:""},qte=2,Yte=1;function ff(t,e,r){return ei(t,{borderStyle:{...z6e,top:"\u2500",bottom:r?"\u2500":""},titleAlignment:"center",float:"left",title:e?Ae(e):void 0,margin:{top:0,bottom:0,left:1,right:0},fullscreen:n=>[n,0],padding:{bottom:r?Yte:0,left:qte,right:qte,top:Yte}})}u();u();u();u();var Wte=K(require("os")),zte=K(require("path")),yT=K(require("fs")),Yn=zte.join(Wte.homedir(),".ucloud-sandbox-cli","config.json"),NDt=process.env.UCLOUD_SANDBOX_DOCS_BASE||`https://${process.env.UCLOUD_SANDBOX_DOMAIN||"sandbox.ucloudai.com"}/docs`;function Xr(){if(!yT.existsSync(Yn))return null;try{let t=yT.readFileSync(Yn,"utf8");return!t||t.trim()===""?null:JSON.parse(t)}catch{return null}}var xT=process.env.AGENTBOX_API_KEY,pf=process.env.AGENTBOX_ACCESS_TOKEN,jte=t=>{let e,r;switch(t){case"AGENTBOX_API_KEY":e="https://console.ucloud.cn/modelverse/experience/api-keys",r="API key";break;case"AGENTBOX_ACCESS_TOKEN":e="https://console.ucloud.cn/modelverse/experience/api-keys",r="access token";break}if(!e||!r)throw new Error(`Unknown key name: ${t}`);return ei(`You must be logged in to use this command. Run ${Ae("ucloud-sandbox-cli auth login")}.
|
|
@@ -375,7 +375,7 @@ Learn more about Template SDK: ${ze("https://sandbox.ucloudai.com/docs")}
|
|
|
375
375
|
`),!r.yes&&!await bf(`Do you really want to ${t?"publish":"unpublish"} ${s.length===1?"this template":"these templates"}?
|
|
376
376
|
\u26A0\uFE0F This will make the ${s.length===1?"template":"templates"} ${t?"public to everyone outside your team":"private to your team"}`)){console.log("Canceled");return}await Promise.all(s.map(async o=>{console.log(`- ${t?"Publishing":"Unpublishing"} sandbox template ${nr({...o,templateID:o.template_id},o.configPath)}`),await N$e(o.template_id,t)})),process.stdout.write(`
|
|
377
377
|
`)}catch(n){console.error(ic(n.message)),process.exit(1)}}var Fde=new We("publish").description("publish sandbox template").argument("[template]",`specify ${Ae("[template]")} to publish it. If you dont specify ${Ae("[template]")} the command will try to publish sandbox template defined by ${Ct(zn)}.`).addOption(An).addOption(bs).addOption(t_).addOption(Wo).alias("pb").option("-y, --yes","skip manual publish confirmation").action(Pde.bind(null,!0)),kde=new We("unpublish").description("unpublish sandbox template").argument("[template]",`specify ${Ae("[template]")} to unpublish it. If you don't specify ${Ae("[template]")} the command will try to unpublish sandbox template defined by ${Ct(zn)}.`).addOption(An).addOption(bs).addOption(t_).addOption(Wo).alias("upb").option("-y, --yes","skip manual unpublish confirmation").action(Pde.bind(null,!1));var Bde=new We("template").description("manage sandbox templates").alias("tpl").addCommand(Rne).addCommand(Dne,{hidden:!0}).addCommand(zne).addCommand(wde).addCommand(jne).addCommand(Fde).addCommand(kde).addCommand(Lde);u();u();u();var v$e=10;function Ude(){return{cols:process.stdout.columns,rows:process.stdout.rows}}async function dC(t){process.stdin.setRawMode(!0),process.stdout.setEncoding("utf-8");let e=await t.pty.create({onData:s=>{process.stdout.write(s)},...Ude(),timeoutMs:0}),r=new eP(async s=>{let o=Buffer.concat(s);await t.pty.sendInput(e.pid,o)},v$e),n=process.stdout.on("resize",()=>t.pty.resize(e.pid,Ude())),i=process.stdin.on("data",s=>{r.push(s)});r.start();try{await e.wait()}catch(s){if(s instanceof Id){if(s.exitCode===-1&&s.error==="signal: killed")return;if(s.exitCode===130){console.warn("Terminal session was killed by user");return}}throw s}finally{process.stdout.write(`
|
|
378
|
-
`),n.destroy(),i.destroy(),await r.stop(),process.stdin.setRawMode(!1)}}var eP=class{constructor(e,r){this.flushHandler=e;this.flushIntervalMs=r}queue=[];isFlushing=!1;intervalId;push(e){this.queue.push(e)}start(){this.intervalId=setInterval(async()=>{this.isFlushing||(this.isFlushing=!0,await this.flush(),this.isFlushing=!1)},this.flushIntervalMs)}async stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=void 0),await this.flush()}async flush(){if(this.queue.length===0)return;let e=this.queue.splice(0,this.queue.length);try{await this.flushHandler(e)}catch(r){console.error("Error sending input:",r)}}};var Gde=new We("connect").description("connect terminal to already running sandbox").argument("<sandboxID>",`connect to sandbox with ${Ae("<sandboxID>")}`).alias("cn").action(async t=>{try{let e=$n();t||(console.error("You need to specify sandbox ID"),process.exit(1)),await I$e({apiKey:e,sandboxID:t}),process.exit(0)}catch(e){console.error(e),process.exit(1)}});async function I$e({apiKey:t,sandboxID:e}){let r=await Kr.connect(e,{apiKey:t});console.log(`Terminal connecting to sandbox ${ze(`${r.sandboxId}`)}`),await dC(r),console.log(`Closing terminal connection to sandbox ${ze(r.sandboxId)}`)}u();var qde=K(oL());u();function Sg(t){return Object.values(t).map(e=>Ae(e)).join(", ")}var gu=(r=>(r.JSON="json",r.PRETTY="pretty",r))(gu||{}),w$e=1440*60*1e3;function Hde(t){let e=!0;async function r(){let n=new Date().getTime();for(;!(new Date().getTime()-n>=w$e||(e=await Xf(t),!e));)await cc(5e3)}return r(),()=>Xf}function L$e(t){return t.split("-")[0]}async function Xf(t){try{let e=$n();return(await Kr.getInfo(L$e(t),{apiKey:e})).state==="running"}catch{return!1}}function fC(t){let e;if(t&&t.length>0){let r={};t.split(",").map(n=>{let[i,s]=n.split("=");i&&s&&(r[i.trim()]=s.trim())}),e=r}return e}function M$e(t){if(t?.length===1){if(t?.includes("running"))return"Running sandboxes";if(t?.includes("paused"))return"Paused sandboxes"}return"Sandboxes"}var Yde=new We("list").description("list all sandboxes, by default it list only running ones").alias("ls").option("-s, --state <state>","filter by state, eg. running, paused. Defaults to running",t=>t.split(",")).option("-m, --metadata <metadata>","filter by metadata, eg. key1=value1").option("-l, --limit <limit>","limit the number of sandboxes returned",t=>parseInt(t)).option("-f, --format <format>","output format, eg. json, pretty").action(async t=>{try{let e=t.state||["running"],r=t.format||"pretty",n=await F$e({limit:t.limit,state:e,metadataRaw:t.metadata});r==="pretty"?P$e(n,e):r==="json"?console.log(JSON.stringify(n,null,2)):(console.error(`Unsupported output format: ${r}`),process.exit(1))}catch(e){console.error(e),process.exit(1)}});function P$e(t,e){if(!t?.length){console.log("No sandboxes found");return}new qde.Table({title:M$e(e),columns:[{name:"sandboxId",alignment:"left",title:"Sandbox ID"},{name:"templateId",alignment:"left",title:"Template ID",maxLen:20},{name:"name",alignment:"left",title:"Alias"},{name:"startedAt",alignment:"left",title:"Started at"},{name:"endAt",alignment:"left",title:"End at"},{name:"state",alignment:"left",title:"State"},{name:"cpuCount",alignment:"left",title:"vCPUs"},{name:"memoryMB",alignment:"left",title:"RAM MiB"},{name:"envdVersion",alignment:"left",title:"Envd version"},{name:"metadata",alignment:"left",title:"Metadata"}],disabledColumns:["clientID"],rows:t.map(n=>({...n,startedAt:new Date(n.startedAt).toLocaleString(),endAt:new Date(n.endAt).toLocaleString(),state:n.state.charAt(0).toUpperCase()+n.state.slice(1),metadata:JSON.stringify(n.metadata)})).sort((n,i)=>n.startedAt.localeCompare(i.startedAt)||n.sandboxId.localeCompare(i.sandboxId)),style:{headerTop:{left:"",right:"",mid:"",other:""},headerBottom:{left:"",right:"",mid:"",other:""},tableBottom:{left:"",right:"",mid:"",other:""},vertical:""},colorMap:{orange:"\x1B[38;5;216m"}}).printTable(),process.stdout.write(`
|
|
378
|
+
`),n.destroy(),i.destroy(),await r.stop(),process.stdin.setRawMode(!1)}}var eP=class{constructor(e,r){this.flushHandler=e;this.flushIntervalMs=r}queue=[];isFlushing=!1;intervalId;push(e){this.queue.push(e)}start(){this.intervalId=setInterval(async()=>{this.isFlushing||(this.isFlushing=!0,await this.flush(),this.isFlushing=!1)},this.flushIntervalMs)}async stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=void 0),await this.flush()}async flush(){if(this.queue.length===0)return;let e=this.queue.splice(0,this.queue.length);try{await this.flushHandler(e)}catch(r){console.error("Error sending input:",r)}}};var Gde=new We("connect").description("connect terminal to already running sandbox").argument("<sandboxID>",`connect to sandbox with ${Ae("<sandboxID>")}`).alias("cn").action(async t=>{try{let e=$n();t||(console.error("You need to specify sandbox ID"),process.exit(1)),await I$e({apiKey:e,sandboxID:t}),process.exit(0)}catch(e){console.error(e);let r=typeof e?.message=="string"?e.message:String(e);/unknown[_ ]error/i.test(r)&&console.error("Connection closed, it might be because the sandbox has reached the end of its lifecycle."),process.exit(1)}});async function I$e({apiKey:t,sandboxID:e}){let r=await Kr.connect(e,{apiKey:t});console.log(`Terminal connecting to sandbox ${ze(`${r.sandboxId}`)}`),await dC(r),console.log(`Closing terminal connection to sandbox ${ze(r.sandboxId)}`)}u();var qde=K(oL());u();function Sg(t){return Object.values(t).map(e=>Ae(e)).join(", ")}var gu=(r=>(r.JSON="json",r.PRETTY="pretty",r))(gu||{}),w$e=1440*60*1e3;function Hde(t){let e=!0;async function r(){let n=new Date().getTime();for(;!(new Date().getTime()-n>=w$e||(e=await Xf(t),!e));)await cc(5e3)}return r(),()=>Xf}function L$e(t){return t.split("-")[0]}async function Xf(t){try{let e=$n();return(await Kr.getInfo(L$e(t),{apiKey:e})).state==="running"}catch{return!1}}function fC(t){let e;if(t&&t.length>0){let r={};t.split(",").map(n=>{let[i,s]=n.split("=");i&&s&&(r[i.trim()]=s.trim())}),e=r}return e}function M$e(t){if(t?.length===1){if(t?.includes("running"))return"Running sandboxes";if(t?.includes("paused"))return"Paused sandboxes"}return"Sandboxes"}var Yde=new We("list").description("list all sandboxes, by default it list only running ones").alias("ls").option("-s, --state <state>","filter by state, eg. running, paused. Defaults to running",t=>t.split(",")).option("-m, --metadata <metadata>","filter by metadata, eg. key1=value1").option("-l, --limit <limit>","limit the number of sandboxes returned",t=>parseInt(t)).option("-f, --format <format>","output format, eg. json, pretty").action(async t=>{try{let e=t.state||["running"],r=t.format||"pretty",n=await F$e({limit:t.limit,state:e,metadataRaw:t.metadata});r==="pretty"?P$e(n,e):r==="json"?console.log(JSON.stringify(n,null,2)):(console.error(`Unsupported output format: ${r}`),process.exit(1))}catch(e){console.error(e),process.exit(1)}});function P$e(t,e){if(!t?.length){console.log("No sandboxes found");return}new qde.Table({title:M$e(e),columns:[{name:"sandboxId",alignment:"left",title:"Sandbox ID"},{name:"templateId",alignment:"left",title:"Template ID",maxLen:20},{name:"name",alignment:"left",title:"Alias"},{name:"startedAt",alignment:"left",title:"Started at"},{name:"endAt",alignment:"left",title:"End at"},{name:"state",alignment:"left",title:"State"},{name:"cpuCount",alignment:"left",title:"vCPUs"},{name:"memoryMB",alignment:"left",title:"RAM MiB"},{name:"envdVersion",alignment:"left",title:"Envd version"},{name:"metadata",alignment:"left",title:"Metadata"}],disabledColumns:["clientID"],rows:t.map(n=>({...n,startedAt:new Date(n.startedAt).toLocaleString(),endAt:new Date(n.endAt).toLocaleString(),state:n.state.charAt(0).toUpperCase()+n.state.slice(1),metadata:JSON.stringify(n.metadata)})).sort((n,i)=>n.startedAt.localeCompare(i.startedAt)||n.sandboxId.localeCompare(i.sandboxId)),style:{headerTop:{left:"",right:"",mid:"",other:""},headerBottom:{left:"",right:"",mid:"",other:""},tableBottom:{left:"",right:"",mid:"",other:""},vertical:""},colorMap:{orange:"\x1B[38;5;216m"}}).printTable(),process.stdout.write(`
|
|
379
379
|
`)}async function F$e({limit:t,state:e,metadataRaw:r}={}){let n=$n(),i=fC(r),s=t;(!t||t>100)&&(s=100);let o=t,a=[],c=Kr.list({apiKey:n,limit:s,query:{state:e,metadata:i}});for(;c.hasNext&&(!o||o>0);){let l=await c.nextItems();a.push(...l),t&&o&&(o-=l.length)}return a}u();async function $de(t,e){await Kr.kill(t,{apiKey:e})?console.log(`Sandbox ${Ae(t)} has been killed`):console.error(`Sandbox ${Ae(t)} wasn't found`)}var Vde=new We("kill").description("kill sandbox").argument("[sandboxIDs...]",`kill the sandboxes specified by ${Ae("[sandboxIDs...]")}`).alias("kl").option("-a, --all","kill all sandboxes").option("-s, --state <state>","when used with -a/--all flag, filter by state, eg. running, paused. Defaults to running",t=>t.split(",")).option("-m, --metadata <metadata>","when used with -a/--all flag, filter by metadata, eg. key1=value1").action(async(t,{all:e,state:r,metadata:n})=>{try{let i=$n(),s=r||["running"],o=fC(n);if((!t||t.length===0)&&!e&&(console.error(`You need to specify ${Ae("[sandboxIDs...]")} or use ${Ae("-a/--all")} flag`),process.exit(1)),e&&t&&t.length>0&&(console.error(`You cannot use ${Ae("-a/--all")} flag while specifying ${Ae("[sandboxIDs...]")}`),process.exit(1)),e){let a=0,c=Kr.list({apiKey:i,query:{state:s,metadata:o}});for(;c.hasNext;){let l=await c.nextItems();a+=l.length,await Promise.all(l.map(d=>$de(d.sandboxId,i)))}console.log(a===0?"No running sandboxes":`Killed ${a} running sandboxes`),process.exit(0)}else await Promise.all(t.map(a=>$de(a,i)))}catch(i){console.error(i),process.exit(1)}});u();var Wde=K(require("path"));var zde=K(require("fs"));function tP(t,e,r){return new We(t).description("create sandbox and connect terminal to it").argument("[template]",`create and connect to sandbox specified by ${Ae("[template]")}`).addOption(An).addOption(bs).alias(e).action(async(n,i)=>{r&&console.warn(`Warning: The '${t}' command is deprecated and will be removed in future releases. Please use 'ucloud-sandbox-cli sandbox create' instead.`);try{let s=$n(),o=n,a=qn(i.path),c=Js(a,i.config),l=zde.default.existsSync(c)?await Zs(c):void 0,d=Wde.relative(a,c);!o&&l&&(console.log(`Found sandbox template ${nr({templateID:l.template_id,aliases:l.template_name?[l.template_name]:void 0},d)}`),o=l.template_id),o||(console.error("You need to specify sandbox template ID or path to sandbox template config"),process.exit(1)),await k$e({apiKey:s,template:{templateID:o}}),process.exit(0)}catch(s){console.error(s),process.exit(1)}})}async function k$e({apiKey:t,template:e}){let r=await Kr.create(e.templateID,{apiKey:t}),n=setInterval(async()=>{await r.setTimeout(3e4)},5e3);console.log(`Terminal connecting to template ${nr(e)} with sandbox ID ${Ae(`${r.sandboxId}`)}`);try{await dC(r)}finally{clearInterval(n),await r.kill(),console.log(`Closing terminal connection to template ${nr(e)} with sandbox ID ${Ae(`${r.sandboxId}`)}`)}}u();var Kde=K(require("util"));var rP=(i=>(i.DEBUG="DEBUG",i.INFO="INFO",i.WARN="WARN",i.ERROR="ERROR",i))(rP||{});function B$e(t,e){if(!e)return!0;switch(e){case"DEBUG":return!0;case"INFO":return t==="INFO"||t==="WARN"||t==="ERROR";case"WARN":return t==="WARN"||t==="ERROR";case"ERROR":return t==="ERROR"}}function U$e(t){return t?t.replaceAll("Svc",""):""}var jde=new We("logs").description("show logs for sandbox").argument("<sandboxID>",`show logs for sandbox specified by ${Ae("<sandboxID>")}`).alias("lg").option("--level <level>",`filter logs by level (${Sg(rP)}). The logs with the higher levels will be also shown.`,"INFO").option("-f, --follow","keep streaming logs until the sandbox is closed").option("--format <format>",`specify format for printing logs (${Sg(gu)})`,"pretty").option("--loggers [loggers]","filter logs by loggers. Specify multiple loggers by separating them with a comma.",t=>t.split(",")).action(async(t,e)=>{try{let r=e?.level.toUpperCase();if(r&&!Object.values(rP).includes(r))throw new Error(`Invalid log level: ${r}`);let n=e?.format.toLowerCase();if(n&&!Object.values(gu).includes(n))throw new Error(`Invalid log format: ${n}`);let i=e?.follow?Hde(t):()=>!1,s,o=!0,a=!1;n==="pretty"&&console.log(`
|
|
380
380
|
Logs for sandbox ${Ae(t)}:`);do{let c=await H$e({sandboxID:t,start:s});c.length!==0&&a===!1&&(a=!0,process.stdout.write(`
|
|
381
381
|
`));for(let f of c)G$e(f.timestamp,f.line,r,n,e?.loggers??void 0);let l=await Xf(t);if(!l&&c.length===0&&o){n==="pretty"&&console.log(`
|