@voobase/cli 0.1.2-nonprod.2104 → 0.1.2-nonprod.2120
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-bundle/index.mjs +9 -5
- package/package.json +6 -6
package/dist-bundle/index.mjs
CHANGED
|
@@ -2222,7 +2222,9 @@ function inferUpstreamPath(pathname: string, routeBasePath: string): string {
|
|
|
2222
2222
|
`));return}throw new Error("`platform asset tag` \u4EC5\u652F\u6301 `list`\u3001`add <asset-id> <label>`\u3001`remove <asset-id> <label>`\u3002")}function readStringOption(args,key){let value=args.options[key];return typeof value=="string"?value:void 0}function hasOption(args,key){return Object.prototype.hasOwnProperty.call(args.options,key)}function readCsvOption(args,key){return(readStringOption(args,key)??"").split(",").map(item=>item.trim()).filter(Boolean)}function readBooleanOption(args,key){let value=readStringOption(args,key);if(value!==void 0){if(value==="true")return!0;if(value==="false")return!1;throw new Error(`\`--${key}\` \u4EC5\u652F\u6301 true \u6216 false\u3002`)}}function readNumberOption(args,key){let value=readStringOption(args,key);if(value===void 0)return;let parsed=Number(value);if(!Number.isFinite(parsed))throw new Error(`\`--${key}\` \u9700\u8981\u6570\u5B57\u3002`);return Math.trunc(parsed)}function readMediaTypeOption(args){let value=readStringOption(args,"media-type");if(value){if(value==="image"||value==="video")return value;throw new Error("`--media-type` \u4EC5\u652F\u6301 image \u6216 video\u3002")}}function readOrientationOption(args){let value=readStringOption(args,"orientation");if(value){if(value==="landscape"||value==="portrait"||value==="square")return value;throw new Error("`--orientation` \u4EC5\u652F\u6301 landscape\u3001portrait\u3001square\u3002")}}function readVariantKindOption(args){let value=readStringOption(args,"variant");if(value){if(value==="thumbnail"||value==="sm"||value==="md"||value==="lg"||value==="cover")return value;throw new Error("`--variant` \u4EC5\u652F\u6301 thumbnail\u3001sm\u3001md\u3001lg\u3001cover\u3002")}}function pickRecommendedAnalysisSource(detail){let mdUrl=detail.variant_urls.md;if(mdUrl)return{kind:"md",url:mdUrl};let smUrl=detail.variant_urls.sm;if(smUrl)return{kind:"sm",url:smUrl};let thumbnailUrl=detail.variant_urls.thumbnail;return thumbnailUrl?{kind:"thumbnail",url:thumbnailUrl}:{kind:"original",url:detail.original_url}}function hasHelpFlag(args){return args.options.help===!0||args.options.h===!0}function formatVariantLines(variantUrls){let lines=Object.entries(variantUrls).filter(entry=>typeof entry[1]=="string"&&entry[1].length>0).map(([kind,url])=>`variant.${kind}: ${url}`);return lines.length>0?lines:["variant: -"]}function normalizeNullableCliText(value){let normalized=value?.trim()??"";return normalized||null}function buildAnalyzeUpdateTemplate(assetId){return[`platform asset update ${assetId} \\`,' --summary "..." \\',' --caption "..." \\',' --scene "..." \\',' --objects "..." \\',' --tags "..."'].join(`
|
|
2223
2223
|
`)}function flattenShellContinuation(template){return template.replace(/\s*\\\s*\n\s*/g," ").replace(/\s{2,}/g," ").trim()}function buildVariantFileName(originalFileName,variants,variantKind){let variant=variants.find(item=>item.variant_kind===variantKind),extension=variant?inferExtensionFromMimeType(variant.mime_type):extname2(originalFileName)||".bin";return`${basename2(originalFileName,extname2(originalFileName))}.${variantKind}${extension}`}function inferExtensionFromMimeType(mimeType){switch(mimeType){case"image/jpeg":return".jpg";case"image/png":return".png";case"image/webp":return".webp";case"image/gif":return".gif";case"image/svg+xml":return".svg";case"video/mp4":return".mp4";case"video/webm":return".webm";default:return".bin"}}function resolveOutputPath(explicitOutputPath,fileName){if(explicitOutputPath)return resolve3(explicitOutputPath);let directory=mkdtempSync(join(tmpdir(),"platform-asset-"));return join(directory,fileName)}function formatAssetError(error,action){return error instanceof PlatformApiError?new Error([`\u7D20\u6750 ${action} \u5931\u8D25\u3002`,`\u72B6\u6001\u7801: ${error.status}`,`\u9519\u8BEF\u7801: ${error.code??"-"}`,error.message].join(`
|
|
2224
2224
|
`)):error instanceof Error?error:new Error(`\u7D20\u6750 ${action} \u5931\u8D25\u3002`)}function formatAppCreateCheckoutError(input){let causeMessage=input.cause instanceof Error?input.cause.message:String(input.cause),retryCommand=["platform app checkout","--tenant",quoteCliArgument(input.tenantId),"--app",quoteCliArgument(input.appId),...input.targetDir?["--dir",quoteCliArgument(input.targetDir)]:[]].join(" ");return new Error(["\u4E91\u7AEF\u5E94\u7528\u5DF2\u7ECF\u521B\u5EFA\uFF0C\u4F46\u672C\u5730 checkout \u5931\u8D25\uFF1B\u4E91\u7AEF\u5E94\u7528\u672A\u56DE\u6EDA\u3002",`tenant_id: ${input.tenantId}`,`app_id: ${input.appId}`,`\u672C\u5730\u9519\u8BEF: ${causeMessage}`,"\u53EF\u4FEE\u590D\u672C\u5730\u76EE\u5F55\u95EE\u9898\u540E\u91CD\u8BD5\uFF1A",` ${retryCommand}`].join(`
|
|
2225
|
-
`))}function quoteCliArgument(value){return/^[A-Za-z0-9._:/-]+$/u.test(value)?value:JSON.stringify(value)}
|
|
2225
|
+
`))}function quoteCliArgument(value){return/^[A-Za-z0-9._:/-]+$/u.test(value)?value:JSON.stringify(value)}function normalizeOptionalString(value){let normalized=value?.trim();return normalized||void 0}function normalizeAppListPayload(tenantId,apps){let items=apps.map(app=>{let name=normalizeOptionalString(app.name)??app.id,displayName=normalizeOptionalString(app.display_name),templateKey=normalizeOptionalString(app.template_key)??normalizeOptionalString(app.module);return{app_id:app.id,name,...displayName?{display_name:displayName}:{},...templateKey?{template_key:templateKey}:{},lifecycle:app.app_lifecycle==="deleting"?"deleting":"active",publish_status:app.publish_status==="published"?"published":"unpublished",created_at:app.created_at}});return{tenant_id:tenantId,count:items.length,items}}function formatAppListText(payload){let lines=[`\u79DF\u6237: ${payload.tenant_id}`,`\u5E94\u7528\u6570: ${payload.count}`];return payload.items.length===0?lines.push("\u5F53\u524D\u79DF\u6237\u6682\u65E0\u5E94\u7528\u3002"):lines.push(...payload.items.map((item,index)=>{let displayName=item.display_name??item.name??item.app_id;return[`${index+1}. ${item.app_id}`,displayName,`template=${item.template_key??"-"}`,`lifecycle=${item.lifecycle}`,`publish=${item.publish_status}`,`created=${item.created_at||"-"}`].join(" ")})),`${lines.join(`
|
|
2226
|
+
`)}
|
|
2227
|
+
`}import{existsSync as existsSync12,mkdirSync as mkdirSync7,readdirSync as readdirSync4,readFileSync as readFileSync11,writeFileSync as writeFileSync7}from"node:fs";import{dirname as dirname8,join as join8,resolve as resolve8}from"node:path";import YAML2 from"yaml";import{createServer}from"node:http";import{createHash as createHash5,randomBytes as randomBytes3}from"node:crypto";import{chmodSync as chmodSync3,existsSync as existsSync10,mkdirSync as mkdirSync5,readdirSync as readdirSync2,readFileSync as readFileSync9,unlinkSync as unlinkSync4,writeFileSync as writeFileSync5}from"node:fs";import{join as join6}from"node:path";import{existsSync as existsSync6,mkdirSync,writeFileSync as writeFileSync2}from"node:fs";import{homedir}from"node:os";import{dirname as dirname4,isAbsolute,join as join3,relative,resolve as resolve5}from"node:path";import{fileURLToPath as fileURLToPath4}from"node:url";import{existsSync as existsSync4,readFileSync as readFileSync5}from"node:fs";import{dirname as dirname2,join as join2}from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";var AUTH_CLI_CLIENT_ID_KEYS=["AUTH_CLI_CLIENT_ID","LOGTO_CLI_APP_ID"],AUTH_CLI_REDIRECT_URI_KEYS=["AUTH_CLI_REDIRECT_URI","LOGTO_CLI_REDIRECT_URI"],AUTH_TENANT_CLIENT_ID_KEYS=["AUTH_TENANT_CLIENT_ID","LOGTO_TENANT_APP_ID","LOGTO_APP_ID"],AUTH_TENANT_REDIRECT_URI_KEYS=["AUTH_TENANT_REDIRECT_URI","LOGTO_TENANT_REDIRECT_URI"];function readTrimmedConfigValue(source,key){let value=source?.[key]?.trim();if(!(!value||/^<.+>$/.test(value)))return value}function readAuthConfigValue(keys,env=process.env){for(let key of keys){let fromEnv=readTrimmedConfigValue(env,key);if(fromEnv)return fromEnv}let defaults=getDistributionProfile().defaults??{};for(let key of keys){let fromDefaults=readTrimmedConfigValue(defaults,key);if(fromDefaults)return fromDefaults}}var defaultDeveloperProfile={name:"developer",defaults:{CONTROL_API_BASE_URL:"http://localhost:7001",PUBLIC_API_BASE_URL:"http://localhost:7007",RUNTIME_API_BASE_URL:"http://127.0.0.1.nip.io",OIDC_ISSUER:"http://localhost:3001/oidc",OIDC_AUDIENCE:"http://localhost:7001",LOGTO_CLI_REDIRECT_URI:"http://localhost:7300/callback",LOGTO_TENANT_REDIRECT_URI:"http://localhost:7102/callback"}},cachedProfile=null;function getDistributionProfile(){if(cachedProfile)return cachedProfile;let packageJsonPath=resolvePackageJsonPath();if(!packageJsonPath)return cachedProfile=defaultDeveloperProfile,cachedProfile;try{let packageJson=JSON.parse(readFileSync5(packageJsonPath,"utf8"));return cachedProfile=normalizeDistributionProfile(packageJson.platformDistributionProfile),cachedProfile}catch{return cachedProfile=defaultDeveloperProfile,cachedProfile}}function applyDistributionProfileDefaults(env=process.env){let profile=getDistributionProfile();for(let[key,value]of Object.entries(profile.defaults??{}))typeof value!="string"||value.trim().length===0||typeof env[key]=="string"&&env[key].trim().length>0||(env[key]=value);return profile}function getCliPackageVersion(){let packageJsonPath=resolvePackageJsonPath();if(!packageJsonPath)return"0.0.0";try{let packageJson=JSON.parse(readFileSync5(packageJsonPath,"utf8"));return typeof packageJson.version=="string"&&packageJson.version.trim().length>0?packageJson.version.trim():"0.0.0"}catch{return"0.0.0"}}function normalizeDistributionProfile(input){if(!input||input.name!=="developer"&&input.name!=="test-only"&&input.name!=="sandbox"&&input.name!=="nonprod"&&input.name!=="prod")return defaultDeveloperProfile;let defaults=input.name==="developer"?{...defaultDeveloperProfile.defaults}:{};for(let[key,value]of Object.entries(input.defaults??{}))typeof value=="string"&&value.trim().length>0&&(defaults[key]=value.trim());return{name:input.name,defaults}}function resolvePackageJsonPath(){let distDir=dirname2(fileURLToPath2(import.meta.url)),candidates=[join2(distDir,"..","package.json"),join2(distDir,"..","..","package.json")];for(let candidate of candidates)if(existsSync4(candidate))return candidate;return null}import{existsSync as existsSync5,readFileSync as readFileSync6,statSync}from"node:fs";import{dirname as dirname3,resolve as resolve4}from"node:path";import{fileURLToPath as fileURLToPath3}from"node:url";function stripQuotes(value){return value.startsWith('"')&&value.endsWith('"')||value.startsWith("'")&&value.endsWith("'")?value.slice(1,-1):value}function hasWorkspaceMarker(directory){return existsSync5(resolve4(directory,"pnpm-workspace.yaml"))}function getInvocationCwd(){let candidates=[process.env.PLATFORM_INVOCATION_CWD,process.env.INIT_CWD,process.env.PWD,process.cwd()];for(let candidate of candidates){if(!candidate||candidate.trim().length===0)continue;let resolved=resolve4(candidate);if(existsSync5(resolved))try{if(statSync(resolved).isDirectory())return resolved}catch{continue}}return resolve4(process.cwd())}function tryFindWorkspaceRoot(startDir=getInvocationCwd()){let current=resolve4(startDir);for(;;){if(hasWorkspaceMarker(current))return current;let parent=dirname3(current);if(parent===current)return null;current=parent}}function findWorkspaceRoot(startDir=getInvocationCwd()){return tryFindWorkspaceRoot(startDir)??resolve4(startDir)}function loadDotenvFiles(startDir=getInvocationCwd()){let workspaceRoot=findWorkspaceRoot(startDir),appRoot=resolve4(startDir),cliModuleRoot=resolve4(dirname3(fileURLToPath3(import.meta.url)),".."),cliWorkspaceRoot=findWorkspaceRoot(cliModuleRoot),developerLocalEnvFile=getDistributionProfile().name==="developer"?resolve4(process.env.PLATFORM_LOCAL_CLI_ENV_FILE?.trim()||resolve4(workspaceRoot,"TMP","local-cli.env")):null,candidates=[resolve4(workspaceRoot,".env"),resolve4(workspaceRoot,".env.local"),...developerLocalEnvFile?[developerLocalEnvFile]:[],resolve4(appRoot,".env"),resolve4(appRoot,".env.local"),resolve4(cliWorkspaceRoot,".env"),resolve4(cliWorkspaceRoot,".env.local"),resolve4(cliModuleRoot,".env"),resolve4(cliModuleRoot,".env.local")],visited=new Set;for(let filePath of candidates){if(visited.has(filePath)||(visited.add(filePath),!existsSync5(filePath)))continue;let lines=readFileSync6(filePath,"utf8").split(/\r?\n/u);for(let line of lines){let trimmed=line.trim();if(trimmed.length===0||trimmed.startsWith("#"))continue;let separatorIndex=trimmed.indexOf("=");if(separatorIndex<=0)continue;let key=trimmed.slice(0,separatorIndex).trim(),value=stripQuotes(trimmed.slice(separatorIndex+1).trim());process.env[key]||(process.env[key]=value)}}}var DEFAULT_STATE_DIR_NAME=".platform",LOCAL_DEVELOPER_STATE_DIR=join3("TMP","local-cli-state"),WORKSPACE_FALLBACK_STATE_DIR=join3("TMP","local-cli-state-fallback"),WORKSPACE_FALLBACK_MARKER=".state-fallback-active",activeFallbackStateDir=null,emittedFallbackWarnings=new Set,CliStateAccessError=class extends Error{operation;path;cause;constructor(operation,path3,cause){super([`\u65E0\u6CD5${operation} CLI \u672C\u5730\u72B6\u6001\u6587\u4EF6\uFF1A${path3}`,"\u8FD9\u901A\u5E38\u662F\u56E0\u4E3A\u5F53\u524D HOME / PLATFORM_STATE_DIR \u5BF9\u5E94\u76EE\u5F55\u4E0D\u53EF\u5199\uFF0C\u6216\u8FD0\u884C\u5728\u53D7\u9650\u6C99\u7BB1\u73AF\u5883\u4E2D\u3002","\u53EF\u5C1D\u8BD5\uFF1A","1. \u91CD\u65B0\u6267\u884C\u5E76\u786E\u8BA4\u5F53\u524D\u8D26\u53F7\u5BF9\u8BE5\u76EE\u5F55\u6709\u5199\u6743\u9650","2. \u663E\u5F0F\u8BBE\u7F6E `PLATFORM_STATE_DIR` \u6307\u5411\u4E00\u4E2A\u53EF\u5199\u76EE\u5F55","3. \u82E5\u5728\u9694\u79BB\u73AF\u5883\u4E2D\u8FD0\u884C\uFF0C\u53EF\u4E3A\u8BE5\u73AF\u5883\u5355\u72EC\u914D\u7F6E `HOME` \u6216 `PLATFORM_STATE_DIR`"].join(`
|
|
2226
2228
|
`)),this.operation=operation,this.path=path3,this.cause=cause,this.name="CliStateAccessError"}};function resolveDeveloperStateDir(){let cliModuleRoot=resolve5(dirname4(fileURLToPath4(import.meta.url)),".."),workspaceRoot=findWorkspaceRoot(cliModuleRoot);return resolve5(workspaceRoot,LOCAL_DEVELOPER_STATE_DIR)}function resolveWorkspaceFallbackStateDir(startDir=getInvocationCwd()){let workspaceRoot=tryFindWorkspaceRoot(startDir);return workspaceRoot?resolve5(workspaceRoot,WORKSPACE_FALLBACK_STATE_DIR):null}function resolveCliStateLocation(options={}){let startDir=options.startDir??getInvocationCwd(),workspaceRoot=tryFindWorkspaceRoot(startDir),createLocation=(dir,source)=>({dir,source,insideWorkspace:source==="developer"||source==="workspace-fallback"||(workspaceRoot?isPathInside(workspaceRoot,dir):!1)}),configured=options.configuredStateDir??process.env.PLATFORM_STATE_DIR?.trim()??"";if(configured)return createLocation(resolve5(configured),"configured");if(activeFallbackStateDir)return createLocation(activeFallbackStateDir,"workspace-fallback");if((options.distributionProfileName??getDistributionProfile().name)==="developer")return createLocation(resolveDeveloperStateDir(),"developer");let fallbackDir=resolveWorkspaceFallbackStateDir(startDir);return fallbackDir&&existsSync6(resolve5(fallbackDir,WORKSPACE_FALLBACK_MARKER))?createLocation(fallbackDir,"workspace-fallback"):createLocation(join3(options.homeDir??homedir(),DEFAULT_STATE_DIR_NAME),"home")}function isPathInside(parentDir,candidatePath){let relativePath=relative(resolve5(parentDir),resolve5(candidatePath));return relativePath===""||!relativePath.startsWith("..")&&!isAbsolute(relativePath)}function isCliStateAccessFailure(error){return error instanceof Error&&"code"in error&&typeof error.code=="string"&&["EACCES","EPERM","EROFS"].includes(error.code??"")}function activateWorkspaceFallback(startDir=getInvocationCwd()){let fallbackDir=resolveWorkspaceFallbackStateDir(startDir);return fallbackDir?(mkdirSync(fallbackDir,{recursive:!0}),writeFileSync2(resolve5(fallbackDir,WORKSPACE_FALLBACK_MARKER),`active
|
|
2227
2229
|
`,"utf8"),activeFallbackStateDir=fallbackDir,fallbackDir):null}function emitFallbackWarning(originalPath,fallbackDir){emittedFallbackWarnings.has(fallbackDir)||(emittedFallbackWarnings.add(fallbackDir),console.warn([`\u68C0\u6D4B\u5230 CLI state \u9ED8\u8BA4\u76EE\u5F55\u4E0D\u53EF\u5199\uFF1A${originalPath}`,`\u5DF2\u81EA\u52A8\u5207\u6362\u5230\u4ED3\u5E93\u5185\u672C\u5730\u72B6\u6001\u76EE\u5F55\uFF1A${fallbackDir}`,"\u5982\u9700\u56FA\u5B9A\u8BE5\u884C\u4E3A\uFF0C\u53EF\u663E\u5F0F\u8BBE\u7F6E `PLATFORM_STATE_DIR`\u3002"].join(`
|
|
2228
2230
|
`)))}function withCliStateFileWriteFallback(args){let primary=resolveCliStateLocation(args.resolution),primaryPath=join3(primary.dir,args.fileName);try{return args.write({filePath:primaryPath,stateDir:primary.dir})}catch(error){if(!isCliStateAccessFailure(error))throw error;let configuredStateDir=args.resolution?.configuredStateDir??process.env.PLATFORM_STATE_DIR?.trim();if(primary.source!=="home"||configuredStateDir?.trim())throw new CliStateAccessError(args.operation,primaryPath,error);try{let fallbackDir=activateWorkspaceFallback(args.resolution?.startDir);if(!fallbackDir)throw new CliStateAccessError(args.operation,primaryPath,error);emitFallbackWarning(primaryPath,fallbackDir);let fallbackPath=join3(fallbackDir,args.fileName);try{return args.write({filePath:fallbackPath,stateDir:fallbackDir})}catch(fallbackError){throw isCliStateAccessFailure(fallbackError)?new CliStateAccessError(args.operation,fallbackPath,fallbackError):fallbackError}}catch(fallbackError){throw fallbackError instanceof CliStateAccessError?fallbackError:isCliStateAccessFailure(fallbackError)?new CliStateAccessError(args.operation,primaryPath,fallbackError):fallbackError}}}function resolveCliStateDir(options={}){return resolveCliStateLocation(options).dir}function resolveCliStateFilePath(fileName){return join3(resolveCliStateDir(),fileName)}import{spawnSync}from"node:child_process";import{createHash as createHash3,randomBytes}from"node:crypto";import{chmodSync,existsSync as existsSync7,lstatSync as lstatSync2,mkdirSync as mkdirSync2,readFileSync as readFileSync7,renameSync,unlinkSync,writeFileSync as writeFileSync3}from"node:fs";import{join as join4}from"node:path";var CREDENTIAL_WARNING_STATE_FILE="credential-warning-state.json",DEFAULT_WARNING_INTERVAL_MS=1440*60*1e3,WINDOWS_ACL_SCRIPT=String.raw`
|
|
@@ -2741,7 +2743,7 @@ ${normalized}`}function countExecutableSqlStatements(sql){return stripSqlComment
|
|
|
2741
2743
|
`):process.stderr.write(`worker \u672A\u5B9E\u73B0: ${worker}
|
|
2742
2744
|
\u5F53\u524D\u5DF2\u5B9E\u73B0: ${[...implementedWorkers].join(", ")}
|
|
2743
2745
|
`),process.exitCode=1;return}await spawnControlApiWorker([worker,...serializeOptions(args.options)])}function printWorkerHelp(){process.stdout.write(["platform worker","","\u7528\u6CD5\uFF1A"," platform worker preview-retention [--once] [--dry-run] [--tenant <tenant-id>] [--app <app-id>] [--ttl-hours <n>] [--limit <n>] [--json]","","\u8BF4\u660E\uFF1A"," worker \u547D\u4EE4\u662F\u672C\u5730\u5F00\u53D1/\u8FD0\u7EF4\u5165\u53E3\uFF0C\u4F1A\u8F6C\u4EA4\u7ED9 @platform/control-api \u7684 worker \u5B9E\u73B0\u3002"," preview-retention \u9ED8\u8BA4\u4EE5\u524D\u53F0\u5E38\u9A7B worker \u8FD0\u884C\uFF1B\u52A0 --once \u65F6\u53EA\u6267\u884C\u4E00\u6B21\u3002",""].join(`
|
|
2744
|
-
`))}function serializeOptions(options){let result=[];for(let[key,value]of Object.entries(options))key==="help"||key==="h"||(result.push(`--${key}`),typeof value=="string"&&result.push(value));return result}async function spawnControlApiWorker(args){await new Promise((resolve20,reject)=>{let child=spawn4("corepack",["pnpm","--silent","--filter","@platform/control-api","worker",...args],{stdio:"inherit"});child.on("error",reject),child.on("exit",(code2,signal)=>{if(signal){reject(new Error(`control-api worker exited by signal ${signal}`));return}code2&&code2!==0&&(process.exitCode=code2),resolve20()})})}applyStoredEnvironmentProfile();applyDistributionProfileDefaults();loadDotenvFiles();var distributionProfile=getDistributionProfile(),cliPackageVersion=getCliPackageVersion();function persistActiveTenantSelection(tenant){let currentContext=loadStoredCliContext();persistCliContext({active_tenant_id:tenant.tenant_id,active_tenant_name:tenant.name,selected_app_tenant_id:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_tenant_id,selected_app_id:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_id,selected_app_env:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_env,selected_app_name:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_name,selected_app_display_name:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_display_name})}function currentInvocationDir(){return getInvocationCwd()}function parseArgs5(argv){let[command="help",...rest]=argv,options={},positionals=[];for(let index=0;index<rest.length;index+=1){let current=rest[index];if(current==="--help"){options.help=!0;continue}if(current==="-h"){options.h=!0;continue}if(!current.startsWith("--")){positionals.push(current);continue}let[key,inlineValue]=current.slice(2).split("=",2);if(inlineValue!==void 0){options[key]=inlineValue;continue}let next=rest[index+1];if(next&&!next.startsWith("--")){options[key]=next,index+=1;continue}options[key]=!0}return{command,rest:positionals,options}}function printHelp(){let envCommandLines=distributionProfile.name!=="developer"?[]:[" env use <profile> \u5207\u6362 CLI \u73AF\u5883 profile\uFF08\u5982 local / test\uFF09"," env current \u67E5\u770B\u5F53\u524D CLI \u73AF\u5883 profile"," env list \u67E5\u770B\u53EF\u7528 CLI \u73AF\u5883 profile"];process7.stdout.write(["platform <command>","","Commands:"," login \u5168\u5C40\u767B\u5F55\u5E76\u4FDD\u5B58\u51ED\u636E"," logout \u6E05\u7406\u672C\u5730\u767B\u5F55\u51ED\u636E\u4E0E\u8D26\u53F7\u4E0A\u4E0B\u6587"," credentials migrate \u8FC1\u79FB\u6216\u51C0\u5316\u65E7\u7248\u51ED\u636E"," version \u8F93\u51FA\u5F53\u524D CLI \u7248\u672C\u53F7"," app create \u5728\u4E91\u7AEF\u521B\u5EFA\u5E94\u7528\uFF0C\u5E76 checkout \u5230\u672C\u5730\u65B0\u76EE\u5F55"," app checkout \u4ECE\u4E91\u7AEF checkout \u5E94\u7528\u6E90\u7801\u526F\u672C\u5230\u672C\u5730\u65B0\u76EE\u5F55"," app submit \u5C06\u5F53\u524D\u672C\u5730\u6E90\u7801\u63D0\u4EA4\u4E3A\u65B0\u7684\u4E91\u7AEF\u6E90\u7801\u7248\u672C"," app version create \u5728\u5F53\u524D app \u4E0B\u57FA\u4E8E\u6307\u5B9A\u6A21\u677F\u521B\u5EFA\u65B0\u7684\u6E90\u7801\u7248\u672C\u9AA8\u67B6"," app version list \u67E5\u770B\u5E94\u7528\u7684\u6E90\u7801\u7248\u672C\u5217\u8868"," app versions \u67E5\u770B\u5E94\u7528\u7684\u6E90\u7801\u7248\u672C\u5217\u8868"," app status \u67E5\u770B\u5E94\u7528\u63A7\u5236\u9762\u603B\u89C8\uFF08\u542B Auth / DB / \u7248\u672C\u6982\u51B5\uFF09"," app diagnose \u67E5\u770B\u5E94\u7528\u662F\u5426\u5DF2 ready for runtime validation"," app preflight \u4E00\u6B21\u6027\u6267\u884C whoami / app current / app diagnose \u98CE\u683C\u68C0\u67E5"," app sync-platform-blocks \u540C\u6B65\u53CC\u6A21\u677F\u5E73\u53F0\u7EF4\u62A4\u533A\uFF08dry-run / adopt / apply / rollback --last\uFF09"," app import preprocess \u9884\u5904\u7406\u7B2C\u4E09\u65B9\u8BBE\u8BA1\u6E90\u7801\u5305\uFF0C\u751F\u6210 clean-source \u4E0E\u62A5\u544A"," app import stage \u628A clean-source \u4E0E\u62A5\u544A stage \u5230\u6A21\u677F\u5DE5\u4F5C\u533A"," app import merge \u628A\u4E0A\u6E38 src \u5B89\u5168\u5E76\u5165 src/imported-upstream/"," app scaffold \u6309\u9700\u6CE8\u5165\u672C\u5730 debug scaffold\uFF08auth/workflow/cms/db\uFF09"," app-library \u7BA1\u7406\u8F7B\u5E94\u7528\u8D44\u6E90\u5E93 example-app \u6761\u76EE"," app use \u517C\u5BB9\u8DEF\u5F84\uFF1A\u4E3A init/link/dev \u9009\u62E9\u76EE\u6807\u5E94\u7528"," app current \u67E5\u770B\u5F53\u524D\u5DF2\u9009\u5E94\u7528\u4E0A\u4E0B\u6587"," tenant use <id> \u8BBE\u7F6E\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587"," tenant current \u67E5\u770B\u5F53\u524D\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587",...envCommandLines," whoami \u8C03\u7528 Control API \u8F93\u51FA\u5F53\u524D\u4E3B\u4F53"," preview \u9ED8\u8BA4\u6253\u5F00\u5F53\u524D\u53EF\u7528 Preview\uFF1B\u751F\u6210\u8BF7\u7528 `platform preview generate`"," init [name] \u751F\u6210\u9879\u76EE\u9AA8\u67B6\uFF0C\u5E76\u81EA\u52A8\u5199\u5165\u5DF2\u9009\u5E94\u7528\u7ED1\u5B9A"," link \u7ED1\u5B9A tenant/app/env \u5230\u5F53\u524D\u5E94\u7528\u76EE\u5F55"," dev \u9ED8\u8BA4\u8F7B\u91CF\u5F00\u53D1\u5165\u53E3\uFF1A\u6CE8\u5165\u7ED1\u5B9A\u540E\u542F\u52A8\u672C\u5730\u5F00\u53D1\u6001"," dev push \u5C06\u5F53\u524D\u672C\u5730\u6E90\u7801\u8986\u76D6\u63A8\u9001\u5230\u4E91\u7AEF Dev Workspace"," dev preview generate \u57FA\u4E8E\u4E91\u7AEF Dev Workspace \u751F\u6210\u5DE5\u4F5C\u533A Preview"," auth \u7BA1\u7406 Auth \u57FA\u5EA7\u80FD\u529B\uFF08discover / configure / bind / inspect\uFF09"," cms \u7BA1\u7406 CMS \u57FA\u5EA7\u80FD\u529B\uFF08discover / configure / apply / inspect\uFF09"," asset \u7BA1\u7406\u79DF\u6237\u5171\u4EAB\u7D20\u6750\uFF08upload / list / folder / get / update / analyze / move / open / tag\uFF09"," blob \u7BA1\u7406 Object Storage Blob\uFF08upload / list / get / url\uFF09"," db \u67E5\u770B DB \u72B6\u6001\u3001\u8868\u7ED3\u6784\u4E0E\u53EA\u8BFB\u67E5\u8BE2"," data-form \u6821\u9A8C/\u7F16\u8BD1/apply/query Data Form schema \u4E0E\u8BB0\u5F55"," workflow \u7BA1\u7406 Workflow \u57FA\u5EA7\u80FD\u529B\uFF08template / definition / binding / runtime\uFF09"," notification \u7BA1\u7406 Notification \u57FA\u5EA7\u80FD\u529B\uFF08inbox / announce / delivery\uFF09"," publish \u7BA1\u7406\u5E94\u7528\u6B63\u5F0F\u53D1\u5E03\u72B6\u6001\u4E0E\u5F53\u524D\u90E8\u7F72\u7248\u672C"," resources \u6267\u884C\u8D44\u6E90 diff/apply/rollback"," logs \u67E5\u8BE2\u8FD0\u884C\u65F6\u65E5\u5FD7\uFF0C\u652F\u6301 --follow"," diagnostics \u5E73\u53F0\u672C\u5730\u8BCA\u65AD\uFF08control-api / credentials\uFF09"," worker \u542F\u52A8\u5E73\u53F0\u540E\u53F0 worker\uFF08preview-retention\uFF09","","Advanced commands:"," build \u9AD8\u7EA7\u8BCA\u65AD\u5165\u53E3\uFF1A\u53D1\u8D77\u548C\u67E5\u8BE2 build"," deploy \u8FC7\u6E21\u5165\u53E3\uFF1A\u9AD8\u7EA7\u53D1\u5E03\uFF08artifact / promote\uFF09"," rollback \u8FC7\u6E21\u5165\u53E3\uFF1A\u56DE\u6EDA\u5230\u76EE\u6807 release \u6216\u7248\u672C","","App commands:"," platform app create --tenant <tenant-id> --name <display-name> --dir <project-name> [--template frontend-app-vite|backend-app-node]"," platform app checkout --tenant <tenant-id> --app <app-id> --dir <project-name>"," platform app checkout --tenant <tenant-id> --app <app-id> --source-version <srcver>",' platform app submit --message "local iteration"',' platform app version create --message "switch template" --template backend-app-node'," platform app versions --tenant <tenant-id> --app <app-id>"," platform app status [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod]"," platform app sync-platform-blocks [--dry-run|--adopt|--apply|--rollback --last]"," platform app diagnose [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod]"," platform app import preprocess [--dir <third-party-source-dir>] [--dry-run]"," platform app import stage --preprocess <source-dir|.design-preprocess|reports|import-manifest.json>"," platform app import merge [--workspace-dir <template-workspace-dir>]"," platform app scaffold <auth-debug|workflow-debug|cms-debug|db-debug>"," platform app-library list"," platform app-library config init"," platform app-library inspect entry-demo"," platform app-library checkout entry-demo --dir ./example-app-demo",' platform app-library create --name "Data Form Verify" --summary "\u672C\u5730\u9A8C\u8BC1\u540E\u7684\u793A\u4F8B\u5E94\u7528"'," platform app-library submit entry-demo"," platform app use --tenant <tenant-id> --app <app-id> --env preview"," platform app current","","DB commands:"," platform db status"," platform db history --limit 10"," platform db migrate [--dry-run]"," platform db tables",' platform db query --sql "SELECT ... LIMIT 5"'," platform db open","","Auth commands:"," platform auth discover [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth configure [--tenant <tenant-id>] [--app <app-id>] --enable [--template <template>] [--user-store-id <id>] [--enable-admin-password|--disable-admin-password] [--enable-phone-sms-otp|--disable-phone-sms-otp] [--json]"," platform auth bind [--tenant <tenant-id>] [--app <app-id>] [--action bind|rebind|disable] [--user-store-id <id>] [--json]"," platform auth inspect [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth role list [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth role create [--tenant <tenant-id>] [--app <app-id>] --key <role-key> --name <display-name> [--description <text>] [--status active|disabled] [--json]"," platform auth role inspect [--tenant <tenant-id>] [--app <app-id>] --role <role-key> [--json]"," platform auth role update [--tenant <tenant-id>] [--app <app-id>] --role <role-key> [--name <display-name>] [--description <text> | --clear-description] [--status active|disabled] [--json]"," platform auth user-role list [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> [--json]"," platform auth user-role assign [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --roles role-a,role-b [--json]"," platform auth user-role replace [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --roles role-a,role-b [--json]"," platform auth user-role remove [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --role <role-key> [--json]","","CMS commands:"," platform cms discover [--collection <name>] [--json]"," platform cms configure collection --file <spec.json> [--json]"," platform cms configure item --file <item.json> [--item-id <item-id>] [--json]"," platform cms configure category --collection <name> --name <name> --slug <slug> [--parent-id <id>] [--order <n>] [--json]"," platform cms import markdown <file> [--collection <name>] [--item-id <item-id> | --item-id-prefix <prefix>] [--tags <label,label>] [--category-path <segment/segment>] [--cover-asset-id <asset-id>] [--publish | --publish-status draft|published|archived] [--skip-existing] [--dry-run] [--json]"," platform cms import url <url> [--collection <name>] [--item-id <item-id>] [--tags <label,label>] [--category-path <segment/segment>] [--publish | --publish-status draft|published|archived] [--skip-existing] [--no-assetize-images] [--dry-run] [--json]"," platform cms attach asset --collection <name> --item-id <id> --field <field-name> --asset-id <id[,id]> [--replace] [--json]"," platform cms ensure category --collection <name> --path <segment/segment> [--json]"," platform cms list items --collection <name> [--page <n>] [--page-size <n>] [--status draft|published|archived] [--category-id <id>] [--q <keyword>] [--json]"," platform cms batch update --collection <name> --item-id <id[,id]> [--category-id <id> | --clear-category] [--add-tags <label,label>] [--status draft|published|archived] [--json]"," platform cms apply schema --collection <name> --version <n> [--json]"," platform cms apply publish --collection <name> --item-id <id> --status draft|published|archived [--json]"," platform cms inspect schema --collection <name> [--json]"," platform cms inspect item --collection <name> --id <id> [--json]"," platform cms inspect delivery list --collection <name> [--page <n>] [--page-size <n>] [--tag <tag>] [--category-id <id>] [--json]"," platform cms inspect delivery get --collection <name> (--slug <slug> | --id <id>) [--json]"," platform cms inspect delivery categories --collection <name> [--json]","","Asset commands:"," platform asset upload <file-path> [--title <title>] [--folder-id <folder-id>]"," platform asset list [--q <keyword>] [--media-type image|video] [--folder-id <folder-id>] [--page <n>] [--limit <n>]"," platform asset folder list"," platform asset folder create <name> [--parent-folder-id <folder-id>]"," platform asset folder rename <folder-id> --name <name> [--parent-folder-id <folder-id> | --root]"," platform asset get <asset-id>"," platform asset move <asset-id> [--folder-id <folder-id> | --root]"," platform asset update <asset-id> [--title <title>] [--folder-id <folder-id> | --root] [--tags <label,label>]"," platform asset analyze <asset-id> [--json]"," platform asset open <asset-id> [--output <path>]"," platform asset download <asset-id> --variant thumbnail|sm|md|lg|cover [--output <path>]"," platform asset tag list [--asset <asset-id>]"," platform asset tag add <asset-id> <label>"," platform asset tag remove <asset-id> <label>","","Preview commands:"," platform preview"," platform preview open [--source-version <srcver>]"," platform preview generate [--source-version <srcver>]"," platform preview generate --from-build <build-id>","","Publish commands:"," platform publish"," platform publish status"," platform publish set [--source-version <srcver>] [--status published|unpublished]"," platform publish rollback <srcver>","","Workflow commands:"," platform workflow template list"," platform workflow template inspect --template <key>"," platform workflow definition list [--status draft|active|inactive]"," platform workflow definition inspect --definition <key>"," platform workflow definition create --definition <key> --app <app-id> [--template <template-key> | --object-type <type> --schema <json>]"," platform workflow binding list [--app <app-id>] [--definition <key>]"," platform workflow binding inspect --definition <key> [--target-id <id>]"," platform workflow binding update --definition <key> [--target-id <id>] --file <override.json>"," platform workflow role bind --definition <key> --app <app-id> --file <bindings.json> # \u4F4E\u5C42\u9AD8\u7EA7\u5165\u53E3"," platform workflow diagnose [--app <app-id>]"," platform workflow start --definition <key> --object-type <type> --object-id <id>"," platform workflow action --instance <instance-id> --action <action-key>"," platform workflow tasks [--status pending]"," platform workflow instance <instance-id>","","Notification commands:"," platform notification inbox list [--app <app-id>] [--type task_projection|announcement|notification|alert] [--status unread|read|dismissed|archived] [--limit <n>]"," platform notification inbox update <item-id> --status unread|read|dismissed|archived"," platform notification announce platform --tenant <tenant-id> --title <text> [--body <text>] [--level info|success|warning|error]"," platform notification announce app --tenant <tenant-id> --app <app-id> --title <text> [--body <text>] [--level info|success|warning|error]"," platform notification delivery [--app <app-id>] [--status pending|running|succeeded|failed|dead]"," platform notification end-user users --app <app-id>"," platform notification end-user inbox --app <app-id> --end-user <app-user-id> [--type task_projection|announcement|notification|alert] [--status unread|read|dismissed|archived] [--limit <n>]"," platform notification end-user unread --app <app-id> --end-user <app-user-id>"," platform notification end-user publish --app <app-id> --end-user <app-user-id> --title <text> [--body <text>] [--kind notification|alert|announcement]"," platform notification end-user announcement --app <app-id> --end-user <app-user-id> --title <text> --body <text>"," platform notification end-user reminder --app <app-id> --end-user <app-user-id> --title <text> --remind-at <ISO datetime> [--body <text>]","","Advanced release commands:"," platform deploy [--source-version <srcver>] [--prod]"," platform rollback <release-id|version>","","Advanced build commands:"," platform build run --source-version <srcver>"," platform build get <build-id>"," platform build events <build-id>"," platform build validate --app <app-id> --source-version <srcver>"," platform logs --follow"," platform diagnostics control-api [--json]"," platform diagnostics credentials [--json] [--strict]"," platform worker preview-retention [--once] [--dry-run] [--json]","","Resource commands:"," platform resources diff --base-snapshot <rsnap-id>"," platform resources apply --base-snapshot <rsnap-id>"," platform resources rollback <rsnap-id> --approve-id <approve-id>","","Examples:"," platform login"," platform login --pat <personal-access-token>"," platform env use local"," platform env use test"," platform env current",' platform app create --tenant t-default --name "\u6D3B\u52A8\u9080\u8BF7\u51FD" --dir invite-frontend',' platform app create --tenant t-default --name "\u62A5\u540D\u52A9\u624B" --dir signup-runtime --template backend-app-node',' platform app create --tenant t-default --name "\u8425\u9500\u9875" --dir landing-page --template frontend-app-vite',' platform app create --tenant t-default --name "\u4E1A\u52A1\u540E\u53F0" --dir ops-console --template backend-app-node'," platform app checkout --tenant t-default --app app-demo --dir app-demo"," platform app checkout --tenant t-default --app app-demo --source-version srcver-123",' platform app submit --message "local iteration"'," platform dev push"," platform dev preview generate"," platform dev preview open",' platform asset upload ./logo.png --title "\u54C1\u724C Logo"'," platform asset folder create \u54C1\u724C\u7D20\u6750"," platform asset folder rename asset-folder-123 --name \u54C1\u724C\u89C6\u89C9 --root"," platform asset folder list"," platform asset list --q logo --tag-ids tag-1,tag-2 --page 2"," platform asset get asset-123"," platform asset move asset-123 --folder-id asset-folder-123",' platform asset update asset-123 --title "\u9996\u9875 Hero \u56FE" --scene outdoor --tags hero,homepage'," platform asset analyze asset-123"," platform asset open asset-123"," platform asset download asset-123 --variant md"," platform asset tag list --asset asset-123"," platform asset tag add asset-123 logo"," platform asset tag remove asset-123 logo"," platform app versions --tenant t-default --app app-demo"," platform whoami --tenant t-default"," platform build get build-123"," platform build events build-123"," platform build run --source-version srcver-123"," platform build validate --app app-demo --source-version srcver-123"," platform preview"," platform preview open --source-version srcver-123"," platform preview generate"," platform preview generate --source-version srcver-123"," platform publish"," platform publish status"," platform publish set --status unpublished"," platform publish set --source-version srcver-123 --status published"," platform publish rollback srcver-122"," cd signup-lite && platform dev"," cd signup-lite && platform dev push"," cd signup-lite && platform dev preview generate"," cd signup-lite && platform dev preview open"," platform deploy --source-version srcver-123"," platform deploy --prod"," platform rollback v0.2.0","","Other examples:"," platform app current"," platform tenant use t-default"," platform tenant current"," platform db status"," platform db history --limit 10"," platform db tables",' platform db query --sql "SELECT * FROM example_items LIMIT 5"'," platform auth discover --app app-demo"," platform auth configure --app app-demo --enable --template email_magic_link_only"," platform auth configure --app app-demo --enable --template phone_sms_otp_only"," platform auth configure --app app-demo --enable --template email_magic_link_and_phone_sms_otp"," platform auth configure --app app-demo --enable --enable-phone-sms-otp"," platform auth bind --app app-checkin --action bind --user-store-id us_xxx"," platform auth inspect --app app-demo --json"," platform cms discover"," platform cms discover --collection article"," platform cms configure collection --file ./cms/article.collection.json"," platform cms configure item --file ./cms/article.item.json"," platform cms import markdown ./docs/post.md --collection article --tags cms,agent --category-path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03 --cover-asset-id asset-123 --publish"," platform cms import url https://zhuanlan.zhihu.com/p/488185988 --collection article --tags cms,url --dry-run"," platform cms import url https://example.com/post --collection article --no-assetize-images"," platform cms import markdown ./docs/articles --collection article --recursive --item-id-prefix article-doc --skip-existing"," platform cms import markdown ./docs/post.md --collection article --category-path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03 --dry-run --json"," platform cms import markdown ./docs/post.md --collection article --skip-existing --publish"," platform cms attach asset --collection article --item-id cms-item-123 --field cover --asset-id asset-123"," platform cms ensure category --collection article --path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03"," platform cms list items --collection article --status draft"," platform cms batch update --collection article --item-id item-a,item-b --category-id cms-category-123 --add-tags cms,cli --status published"," platform cms apply schema --collection article --version 1"," platform cms inspect schema --collection article --json"," platform cms inspect item --collection article --id cms-item-123"," platform cms inspect delivery list --collection article --tag cms"," platform cms inspect delivery get --collection article --slug introducing-cms-base"," platform resources diff --base-snapshot rsnap-123"," platform resources apply --base-snapshot rsnap-123"," platform resources rollback rsnap-122 --approve-id approve-123"," platform logs --follow","","Compatible path examples:"," platform app use --tenant t-default --app app-demo --env preview"," platform init demo-app"," platform link --tenant t-default --app app-demo --env preview"," platform dev --target tenant-workbench"," platform dev --remote-bindings"," platform dev --remote-bindings=db",""].join(`
|
|
2746
|
+
`))}function serializeOptions(options){let result=[];for(let[key,value]of Object.entries(options))key==="help"||key==="h"||(result.push(`--${key}`),typeof value=="string"&&result.push(value));return result}async function spawnControlApiWorker(args){await new Promise((resolve20,reject)=>{let child=spawn4("corepack",["pnpm","--silent","--filter","@platform/control-api","worker",...args],{stdio:"inherit"});child.on("error",reject),child.on("exit",(code2,signal)=>{if(signal){reject(new Error(`control-api worker exited by signal ${signal}`));return}code2&&code2!==0&&(process.exitCode=code2),resolve20()})})}applyStoredEnvironmentProfile();applyDistributionProfileDefaults();loadDotenvFiles();var distributionProfile=getDistributionProfile(),cliPackageVersion=getCliPackageVersion();function persistActiveTenantSelection(tenant){let currentContext=loadStoredCliContext();persistCliContext({active_tenant_id:tenant.tenant_id,active_tenant_name:tenant.name,selected_app_tenant_id:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_tenant_id,selected_app_id:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_id,selected_app_env:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_env,selected_app_name:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_name,selected_app_display_name:contextBelongsToDifferentTenant(currentContext,tenant.tenant_id)?void 0:currentContext?.selected_app_display_name})}function currentInvocationDir(){return getInvocationCwd()}function parseArgs5(argv){let[command="help",...rest]=argv,options={},positionals=[];for(let index=0;index<rest.length;index+=1){let current=rest[index];if(current==="--help"){options.help=!0;continue}if(current==="-h"){options.h=!0;continue}if(!current.startsWith("--")){positionals.push(current);continue}let[key,inlineValue]=current.slice(2).split("=",2);if(inlineValue!==void 0){options[key]=inlineValue;continue}let next=rest[index+1];if(next&&!next.startsWith("--")){options[key]=next,index+=1;continue}options[key]=!0}return{command,rest:positionals,options}}function printHelp(){let envCommandLines=distributionProfile.name!=="developer"?[]:[" env use <profile> \u5207\u6362 CLI \u73AF\u5883 profile\uFF08\u5982 local / test\uFF09"," env current \u67E5\u770B\u5F53\u524D CLI \u73AF\u5883 profile"," env list \u67E5\u770B\u53EF\u7528 CLI \u73AF\u5883 profile"];process7.stdout.write(["platform <command>","","Commands:"," login \u5168\u5C40\u767B\u5F55\u5E76\u4FDD\u5B58\u51ED\u636E"," logout \u6E05\u7406\u672C\u5730\u767B\u5F55\u51ED\u636E\u4E0E\u8D26\u53F7\u4E0A\u4E0B\u6587"," credentials migrate \u8FC1\u79FB\u6216\u51C0\u5316\u65E7\u7248\u51ED\u636E"," version \u8F93\u51FA\u5F53\u524D CLI \u7248\u672C\u53F7"," app create \u5728\u4E91\u7AEF\u521B\u5EFA\u5E94\u7528\uFF0C\u5E76 checkout \u5230\u672C\u5730\u65B0\u76EE\u5F55"," app checkout \u4ECE\u4E91\u7AEF checkout \u5E94\u7528\u6E90\u7801\u526F\u672C\u5230\u672C\u5730\u65B0\u76EE\u5F55"," app submit \u5C06\u5F53\u524D\u672C\u5730\u6E90\u7801\u63D0\u4EA4\u4E3A\u65B0\u7684\u4E91\u7AEF\u6E90\u7801\u7248\u672C"," app version create \u5728\u5F53\u524D app \u4E0B\u57FA\u4E8E\u6307\u5B9A\u6A21\u677F\u521B\u5EFA\u65B0\u7684\u6E90\u7801\u7248\u672C\u9AA8\u67B6"," app version list \u67E5\u770B\u5E94\u7528\u7684\u6E90\u7801\u7248\u672C\u5217\u8868"," app versions \u67E5\u770B\u5E94\u7528\u7684\u6E90\u7801\u7248\u672C\u5217\u8868"," app list \u67E5\u770B\u5F53\u524D\u79DF\u6237\u4E0B\u5168\u90E8\u53EF\u89C1\u5E94\u7528"," app status \u67E5\u770B\u5E94\u7528\u63A7\u5236\u9762\u603B\u89C8\uFF08\u542B Auth / DB / \u7248\u672C\u6982\u51B5\uFF09"," app diagnose \u67E5\u770B\u5E94\u7528\u662F\u5426\u5DF2 ready for runtime validation"," app preflight \u4E00\u6B21\u6027\u6267\u884C whoami / app current / app diagnose \u98CE\u683C\u68C0\u67E5"," app sync-platform-blocks \u540C\u6B65\u53CC\u6A21\u677F\u5E73\u53F0\u7EF4\u62A4\u533A\uFF08dry-run / adopt / apply / rollback --last\uFF09"," app import preprocess \u9884\u5904\u7406\u7B2C\u4E09\u65B9\u8BBE\u8BA1\u6E90\u7801\u5305\uFF0C\u751F\u6210 clean-source \u4E0E\u62A5\u544A"," app import stage \u628A clean-source \u4E0E\u62A5\u544A stage \u5230\u6A21\u677F\u5DE5\u4F5C\u533A"," app import merge \u628A\u4E0A\u6E38 src \u5B89\u5168\u5E76\u5165 src/imported-upstream/"," app scaffold \u6309\u9700\u6CE8\u5165\u672C\u5730 debug scaffold\uFF08auth/workflow/cms/db\uFF09"," app-library \u7BA1\u7406\u8F7B\u5E94\u7528\u8D44\u6E90\u5E93 example-app \u6761\u76EE"," app use \u517C\u5BB9\u8DEF\u5F84\uFF1A\u4E3A init/link/dev \u9009\u62E9\u76EE\u6807\u5E94\u7528"," app current \u67E5\u770B\u5F53\u524D\u5DF2\u9009\u5E94\u7528\u4E0A\u4E0B\u6587"," tenant use <id> \u8BBE\u7F6E\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587"," tenant current \u67E5\u770B\u5F53\u524D\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587",...envCommandLines," whoami \u8C03\u7528 Control API \u8F93\u51FA\u5F53\u524D\u4E3B\u4F53"," preview \u9ED8\u8BA4\u6253\u5F00\u5F53\u524D\u53EF\u7528 Preview\uFF1B\u751F\u6210\u8BF7\u7528 `platform preview generate`"," init [name] \u751F\u6210\u9879\u76EE\u9AA8\u67B6\uFF0C\u5E76\u81EA\u52A8\u5199\u5165\u5DF2\u9009\u5E94\u7528\u7ED1\u5B9A"," link \u7ED1\u5B9A tenant/app/env \u5230\u5F53\u524D\u5E94\u7528\u76EE\u5F55"," dev \u9ED8\u8BA4\u8F7B\u91CF\u5F00\u53D1\u5165\u53E3\uFF1A\u6CE8\u5165\u7ED1\u5B9A\u540E\u542F\u52A8\u672C\u5730\u5F00\u53D1\u6001"," dev push \u5C06\u5F53\u524D\u672C\u5730\u6E90\u7801\u8986\u76D6\u63A8\u9001\u5230\u4E91\u7AEF Dev Workspace"," dev preview generate \u57FA\u4E8E\u4E91\u7AEF Dev Workspace \u751F\u6210\u5DE5\u4F5C\u533A Preview"," auth \u7BA1\u7406 Auth \u57FA\u5EA7\u80FD\u529B\uFF08discover / configure / bind / inspect\uFF09"," cms \u7BA1\u7406 CMS \u57FA\u5EA7\u80FD\u529B\uFF08discover / configure / apply / inspect\uFF09"," asset \u7BA1\u7406\u79DF\u6237\u5171\u4EAB\u7D20\u6750\uFF08upload / list / folder / get / update / analyze / move / open / tag\uFF09"," blob \u7BA1\u7406 Object Storage Blob\uFF08upload / list / get / url\uFF09"," db \u67E5\u770B DB \u72B6\u6001\u3001\u8868\u7ED3\u6784\u4E0E\u53EA\u8BFB\u67E5\u8BE2"," data-form \u6821\u9A8C/\u7F16\u8BD1/apply/query Data Form schema \u4E0E\u8BB0\u5F55"," workflow \u7BA1\u7406 Workflow \u57FA\u5EA7\u80FD\u529B\uFF08template / definition / binding / runtime\uFF09"," notification \u7BA1\u7406 Notification \u57FA\u5EA7\u80FD\u529B\uFF08inbox / announce / delivery\uFF09"," publish \u7BA1\u7406\u5E94\u7528\u6B63\u5F0F\u53D1\u5E03\u72B6\u6001\u4E0E\u5F53\u524D\u90E8\u7F72\u7248\u672C"," resources \u6267\u884C\u8D44\u6E90 diff/apply/rollback"," logs \u67E5\u8BE2\u8FD0\u884C\u65F6\u65E5\u5FD7\uFF0C\u652F\u6301 --follow"," diagnostics \u5E73\u53F0\u672C\u5730\u8BCA\u65AD\uFF08control-api / credentials\uFF09"," worker \u542F\u52A8\u5E73\u53F0\u540E\u53F0 worker\uFF08preview-retention\uFF09","","Advanced commands:"," build \u9AD8\u7EA7\u8BCA\u65AD\u5165\u53E3\uFF1A\u53D1\u8D77\u548C\u67E5\u8BE2 build"," deploy \u8FC7\u6E21\u5165\u53E3\uFF1A\u9AD8\u7EA7\u53D1\u5E03\uFF08artifact / promote\uFF09"," rollback \u8FC7\u6E21\u5165\u53E3\uFF1A\u56DE\u6EDA\u5230\u76EE\u6807 release \u6216\u7248\u672C","","App commands:"," platform app create --tenant <tenant-id> --name <display-name> --dir <project-name> [--template frontend-app-vite|backend-app-node]"," platform app checkout --tenant <tenant-id> --app <app-id> --dir <project-name>"," platform app checkout --tenant <tenant-id> --app <app-id> --source-version <srcver>",' platform app submit --message "local iteration"',' platform app version create --message "switch template" --template backend-app-node'," platform app versions --tenant <tenant-id> --app <app-id>"," platform app list [--tenant <tenant-id>] [--json]"," platform app status [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod]"," platform app sync-platform-blocks [--dry-run|--adopt|--apply|--rollback --last]"," platform app diagnose [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod]"," platform app import preprocess [--dir <third-party-source-dir>] [--dry-run]"," platform app import stage --preprocess <source-dir|.design-preprocess|reports|import-manifest.json>"," platform app import merge [--workspace-dir <template-workspace-dir>]"," platform app scaffold <auth-debug|workflow-debug|cms-debug|db-debug>"," platform app-library list"," platform app-library config init"," platform app-library inspect entry-demo"," platform app-library checkout entry-demo --dir ./example-app-demo",' platform app-library create --name "Data Form Verify" --summary "\u672C\u5730\u9A8C\u8BC1\u540E\u7684\u793A\u4F8B\u5E94\u7528"'," platform app-library submit entry-demo"," platform app use --tenant <tenant-id> --app <app-id> --env preview"," platform app current","","DB commands:"," platform db status"," platform db history --limit 10"," platform db migrate [--dry-run]"," platform db tables",' platform db query --sql "SELECT ... LIMIT 5"'," platform db open","","Auth commands:"," platform auth discover [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth configure [--tenant <tenant-id>] [--app <app-id>] --enable [--template <template>] [--user-store-id <id>] [--enable-admin-password|--disable-admin-password] [--enable-phone-sms-otp|--disable-phone-sms-otp] [--json]"," platform auth bind [--tenant <tenant-id>] [--app <app-id>] [--action bind|rebind|disable] [--user-store-id <id>] [--json]"," platform auth inspect [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth role list [--tenant <tenant-id>] [--app <app-id>] [--json]"," platform auth role create [--tenant <tenant-id>] [--app <app-id>] --key <role-key> --name <display-name> [--description <text>] [--status active|disabled] [--json]"," platform auth role inspect [--tenant <tenant-id>] [--app <app-id>] --role <role-key> [--json]"," platform auth role update [--tenant <tenant-id>] [--app <app-id>] --role <role-key> [--name <display-name>] [--description <text> | --clear-description] [--status active|disabled] [--json]"," platform auth user-role list [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> [--json]"," platform auth user-role assign [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --roles role-a,role-b [--json]"," platform auth user-role replace [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --roles role-a,role-b [--json]"," platform auth user-role remove [--tenant <tenant-id>] [--app <app-id>] --user <app-user-id> --role <role-key> [--json]","","CMS commands:"," platform cms discover [--collection <name>] [--json]"," platform cms configure collection --file <spec.json> [--json]"," platform cms configure item --file <item.json> [--item-id <item-id>] [--json]"," platform cms configure category --collection <name> --name <name> --slug <slug> [--parent-id <id>] [--order <n>] [--json]"," platform cms import markdown <file> [--collection <name>] [--item-id <item-id> | --item-id-prefix <prefix>] [--tags <label,label>] [--category-path <segment/segment>] [--cover-asset-id <asset-id>] [--publish | --publish-status draft|published|archived] [--skip-existing] [--dry-run] [--json]"," platform cms import url <url> [--collection <name>] [--item-id <item-id>] [--tags <label,label>] [--category-path <segment/segment>] [--publish | --publish-status draft|published|archived] [--skip-existing] [--no-assetize-images] [--dry-run] [--json]"," platform cms attach asset --collection <name> --item-id <id> --field <field-name> --asset-id <id[,id]> [--replace] [--json]"," platform cms ensure category --collection <name> --path <segment/segment> [--json]"," platform cms list items --collection <name> [--page <n>] [--page-size <n>] [--status draft|published|archived] [--category-id <id>] [--q <keyword>] [--json]"," platform cms batch update --collection <name> --item-id <id[,id]> [--category-id <id> | --clear-category] [--add-tags <label,label>] [--status draft|published|archived] [--json]"," platform cms apply schema --collection <name> --version <n> [--json]"," platform cms apply publish --collection <name> --item-id <id> --status draft|published|archived [--json]"," platform cms inspect schema --collection <name> [--json]"," platform cms inspect item --collection <name> --id <id> [--json]"," platform cms inspect delivery list --collection <name> [--page <n>] [--page-size <n>] [--tag <tag>] [--category-id <id>] [--json]"," platform cms inspect delivery get --collection <name> (--slug <slug> | --id <id>) [--json]"," platform cms inspect delivery categories --collection <name> [--json]","","Asset commands:"," platform asset upload <file-path> [--title <title>] [--folder-id <folder-id>]"," platform asset list [--q <keyword>] [--media-type image|video] [--folder-id <folder-id>] [--page <n>] [--limit <n>]"," platform asset folder list"," platform asset folder create <name> [--parent-folder-id <folder-id>]"," platform asset folder rename <folder-id> --name <name> [--parent-folder-id <folder-id> | --root]"," platform asset get <asset-id>"," platform asset move <asset-id> [--folder-id <folder-id> | --root]"," platform asset update <asset-id> [--title <title>] [--folder-id <folder-id> | --root] [--tags <label,label>]"," platform asset analyze <asset-id> [--json]"," platform asset open <asset-id> [--output <path>]"," platform asset download <asset-id> --variant thumbnail|sm|md|lg|cover [--output <path>]"," platform asset tag list [--asset <asset-id>]"," platform asset tag add <asset-id> <label>"," platform asset tag remove <asset-id> <label>","","Preview commands:"," platform preview"," platform preview open [--source-version <srcver>]"," platform preview generate [--source-version <srcver>]"," platform preview generate --from-build <build-id>","","Publish commands:"," platform publish"," platform publish status"," platform publish set [--source-version <srcver>] [--status published|unpublished]"," platform publish rollback <srcver>","","Workflow commands:"," platform workflow template list"," platform workflow template inspect --template <key>"," platform workflow definition list [--status draft|active|inactive]"," platform workflow definition inspect --definition <key>"," platform workflow definition create --definition <key> --app <app-id> [--template <template-key> | --object-type <type> --schema <json>]"," platform workflow binding list [--app <app-id>] [--definition <key>]"," platform workflow binding inspect --definition <key> [--target-id <id>]"," platform workflow binding update --definition <key> [--target-id <id>] --file <override.json>"," platform workflow role bind --definition <key> --app <app-id> --file <bindings.json> # \u4F4E\u5C42\u9AD8\u7EA7\u5165\u53E3"," platform workflow diagnose [--app <app-id>]"," platform workflow start --definition <key> --object-type <type> --object-id <id>"," platform workflow action --instance <instance-id> --action <action-key>"," platform workflow tasks [--status pending]"," platform workflow instance <instance-id>","","Notification commands:"," platform notification inbox list [--app <app-id>] [--type task_projection|announcement|notification|alert] [--status unread|read|dismissed|archived] [--limit <n>]"," platform notification inbox update <item-id> --status unread|read|dismissed|archived"," platform notification announce platform --tenant <tenant-id> --title <text> [--body <text>] [--level info|success|warning|error]"," platform notification announce app --tenant <tenant-id> --app <app-id> --title <text> [--body <text>] [--level info|success|warning|error]"," platform notification delivery [--app <app-id>] [--status pending|running|succeeded|failed|dead]"," platform notification end-user users --app <app-id>"," platform notification end-user inbox --app <app-id> --end-user <app-user-id> [--type task_projection|announcement|notification|alert] [--status unread|read|dismissed|archived] [--limit <n>]"," platform notification end-user unread --app <app-id> --end-user <app-user-id>"," platform notification end-user publish --app <app-id> --end-user <app-user-id> --title <text> [--body <text>] [--kind notification|alert|announcement]"," platform notification end-user announcement --app <app-id> --end-user <app-user-id> --title <text> --body <text>"," platform notification end-user reminder --app <app-id> --end-user <app-user-id> --title <text> --remind-at <ISO datetime> [--body <text>]","","Advanced release commands:"," platform deploy [--source-version <srcver>] [--prod]"," platform rollback <release-id|version>","","Advanced build commands:"," platform build run --source-version <srcver>"," platform build get <build-id>"," platform build events <build-id>"," platform build validate --app <app-id> --source-version <srcver>"," platform logs --follow"," platform diagnostics control-api [--json]"," platform diagnostics credentials [--json] [--strict]"," platform worker preview-retention [--once] [--dry-run] [--json]","","Resource commands:"," platform resources diff --base-snapshot <rsnap-id>"," platform resources apply --base-snapshot <rsnap-id>"," platform resources rollback <rsnap-id> --approve-id <approve-id>","","Examples:"," platform login"," platform login --pat <personal-access-token>"," platform env use local"," platform env use test"," platform env current",' platform app create --tenant t-default --name "\u6D3B\u52A8\u9080\u8BF7\u51FD" --dir invite-frontend',' platform app create --tenant t-default --name "\u62A5\u540D\u52A9\u624B" --dir signup-runtime --template backend-app-node',' platform app create --tenant t-default --name "\u8425\u9500\u9875" --dir landing-page --template frontend-app-vite',' platform app create --tenant t-default --name "\u4E1A\u52A1\u540E\u53F0" --dir ops-console --template backend-app-node'," platform app list --tenant t-default --json"," platform app checkout --tenant t-default --app app-demo --dir app-demo"," platform app checkout --tenant t-default --app app-demo --source-version srcver-123",' platform app submit --message "local iteration"'," platform dev push"," platform dev preview generate"," platform dev preview open",' platform asset upload ./logo.png --title "\u54C1\u724C Logo"'," platform asset folder create \u54C1\u724C\u7D20\u6750"," platform asset folder rename asset-folder-123 --name \u54C1\u724C\u89C6\u89C9 --root"," platform asset folder list"," platform asset list --q logo --tag-ids tag-1,tag-2 --page 2"," platform asset get asset-123"," platform asset move asset-123 --folder-id asset-folder-123",' platform asset update asset-123 --title "\u9996\u9875 Hero \u56FE" --scene outdoor --tags hero,homepage'," platform asset analyze asset-123"," platform asset open asset-123"," platform asset download asset-123 --variant md"," platform asset tag list --asset asset-123"," platform asset tag add asset-123 logo"," platform asset tag remove asset-123 logo"," platform app versions --tenant t-default --app app-demo"," platform whoami --tenant t-default"," platform build get build-123"," platform build events build-123"," platform build run --source-version srcver-123"," platform build validate --app app-demo --source-version srcver-123"," platform preview"," platform preview open --source-version srcver-123"," platform preview generate"," platform preview generate --source-version srcver-123"," platform publish"," platform publish status"," platform publish set --status unpublished"," platform publish set --source-version srcver-123 --status published"," platform publish rollback srcver-122"," cd signup-lite && platform dev"," cd signup-lite && platform dev push"," cd signup-lite && platform dev preview generate"," cd signup-lite && platform dev preview open"," platform deploy --source-version srcver-123"," platform deploy --prod"," platform rollback v0.2.0","","Other examples:"," platform app current"," platform tenant use t-default"," platform tenant current"," platform db status"," platform db history --limit 10"," platform db tables",' platform db query --sql "SELECT * FROM example_items LIMIT 5"'," platform auth discover --app app-demo"," platform auth configure --app app-demo --enable --template email_magic_link_only"," platform auth configure --app app-demo --enable --template phone_sms_otp_only"," platform auth configure --app app-demo --enable --template email_magic_link_and_phone_sms_otp"," platform auth configure --app app-demo --enable --enable-phone-sms-otp"," platform auth bind --app app-checkin --action bind --user-store-id us_xxx"," platform auth inspect --app app-demo --json"," platform cms discover"," platform cms discover --collection article"," platform cms configure collection --file ./cms/article.collection.json"," platform cms configure item --file ./cms/article.item.json"," platform cms import markdown ./docs/post.md --collection article --tags cms,agent --category-path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03 --cover-asset-id asset-123 --publish"," platform cms import url https://zhuanlan.zhihu.com/p/488185988 --collection article --tags cms,url --dry-run"," platform cms import url https://example.com/post --collection article --no-assetize-images"," platform cms import markdown ./docs/articles --collection article --recursive --item-id-prefix article-doc --skip-existing"," platform cms import markdown ./docs/post.md --collection article --category-path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03 --dry-run --json"," platform cms import markdown ./docs/post.md --collection article --skip-existing --publish"," platform cms attach asset --collection article --item-id cms-item-123 --field cover --asset-id asset-123"," platform cms ensure category --collection article --path \u4EA7\u54C1\u66F4\u65B0/\u7248\u672C\u53D1\u5E03"," platform cms list items --collection article --status draft"," platform cms batch update --collection article --item-id item-a,item-b --category-id cms-category-123 --add-tags cms,cli --status published"," platform cms apply schema --collection article --version 1"," platform cms inspect schema --collection article --json"," platform cms inspect item --collection article --id cms-item-123"," platform cms inspect delivery list --collection article --tag cms"," platform cms inspect delivery get --collection article --slug introducing-cms-base"," platform resources diff --base-snapshot rsnap-123"," platform resources apply --base-snapshot rsnap-123"," platform resources rollback rsnap-122 --approve-id approve-123"," platform logs --follow","","Compatible path examples:"," platform app use --tenant t-default --app app-demo --env preview"," platform init demo-app"," platform link --tenant t-default --app app-demo --env preview"," platform dev --target tenant-workbench"," platform dev --remote-bindings"," platform dev --remote-bindings=db",""].join(`
|
|
2745
2747
|
`))}function printVersion(){process7.stdout.write(`v${cliPackageVersion}
|
|
2746
2748
|
`)}function normalizeAppTemplateOption(value){return normalizeAppTemplateKey(value)}function readRequiredEnv(key){let value=process7.env[key];if(!value||value.trim().length===0)throw new Error(`\u7F3A\u5C11\u73AF\u5883\u53D8\u91CF: ${key}`);return value.trim()}function resolveBrowserLoginConfig(){let cliClientId=readAuthConfigValue(AUTH_CLI_CLIENT_ID_KEYS),cliRedirectUri=readAuthConfigValue(AUTH_CLI_REDIRECT_URI_KEYS);if(cliClientId&&cliRedirectUri)return{clientId:cliClientId,redirectUri:cliRedirectUri,source:"cli-app"};let fallbackClientId=readAuthConfigValue(AUTH_TENANT_CLIENT_ID_KEYS),fallbackRedirectUri=readAuthConfigValue(AUTH_TENANT_REDIRECT_URI_KEYS);return!fallbackClientId||!fallbackRedirectUri?null:{clientId:fallbackClientId,redirectUri:fallbackRedirectUri,source:"workbench-fallback"}}function shouldFallbackToBrowserLogin(error){if(!(error instanceof Error))return!1;let message=error.message;return message.includes("OIDC discovery \u7F3A\u5C11 Device Flow \u7AEF\u70B9")||message.includes("device_code is not allowed for this client")||message.includes("grant-type:device_code is not allowed for this client")}function readOption2(args,key){let value=args.options[key];return typeof value=="string"?value:void 0}function hasFlag2(args,key){return args.options[key]===!0}function printDiagnosticsHelp(){process7.stdout.write(["platform diagnostics","","\u7528\u6CD5\uFF1A"," platform diagnostics control-api [--json]"," platform diagnostics credentials [--json] [--strict]","","\u8BF4\u660E\uFF1A"," \u8F93\u51FA control/runtime/public endpoint \u5206\u533A\u8BCA\u65AD\uFF0C\u4E0D\u6539\u53D8\u9ED8\u8BA4 URL\u3002"," runtime/public endpoint \u4EC5\u5728\u914D\u7F6E\u5B58\u5728\u4E14 capability allowlist \u547D\u4E2D\u65F6\u63A2\u6D4B\u3002"," credentials \u53EA\u8F93\u51FA\u5B58\u50A8\u540E\u7AEF\u3001state \u8DEF\u5F84\u548C\u6743\u9650\u5224\u65AD\uFF0C\u4E0D\u8BFB\u53D6\u6216\u8F93\u51FA token\u3002"," credentials warning \u9ED8\u8BA4\u9000\u51FA\u7801\u4E3A 0\uFF1B\u4EC5\u663E\u5F0F --strict \u8FD4\u56DE\u975E\u96F6\u3002","","\u73AF\u5883\u53D8\u91CF\uFF1A"," CONTROL_API_BASE_URL"," RUNTIME_API_BASE_URL"," PUBLIC_API_BASE_URL"," CONTROL_API_RUNTIME_ENDPOINT_CAPABILITIES",""].join(`
|
|
2747
2749
|
`))}async function runDiagnostics(args){let subcommand=args.rest[0]??"help";if(hasFlag2(args,"help")||hasFlag2(args,"h")||subcommand==="help"){printDiagnosticsHelp();return}if(subcommand==="credentials"){let diagnostics2=inspectStoredCredentialSecurity();args.options.json===!0?process7.stdout.write(`${JSON.stringify(diagnostics2,null,2)}
|
|
@@ -2782,13 +2784,14 @@ ${normalized}`}function countExecutableSqlStatements(sql){return stripSqlComment
|
|
|
2782
2784
|
`);return}process7.stdout.write((hasProjectContext?[`\u5F53\u524D\u5E94\u7528: ${sourceContext?.app_id}`,`\u5E94\u7528\u5C55\u793A\u540D: ${sourceContext?.app_display_name??sourceContext?.app_name??"-"}`,`\u79DF\u6237: ${sourceContext?.tenant_id??"-"}`,`\u73AF\u5883: ${sourceContext?.env??"preview"}`,`checkout \u57FA\u7EBF\u6E90\u7801\u7248\u672C: ${sourceContext?.base_source_version_id??"-"}`,`\u6700\u8FD1\u63D0\u4EA4\u6E90\u7801\u7248\u672C: ${sourceContext?.last_submitted_source_version_id??"-"}`,`\u6700\u8FD1 preview \u6E90\u7801\u7248\u672C: ${sourceContext?.last_preview_source_version_id??"-"}`,"\u4E0A\u4E0B\u6587\u6765\u6E90: \u5F53\u524D\u76EE\u5F55 .platform/source-context.json",`\u76EE\u5F55\u7ED1\u5B9A\u6587\u4EF6: ${sourceContextResult?.path??"-"}`,context?.selected_app_id?`\u5168\u5C40\u515C\u5E95\u4E0A\u4E0B\u6587: ${getCliContextPath()}`:"\u5168\u5C40\u515C\u5E95\u4E0A\u4E0B\u6587: -",""]:[`\u5F53\u524D\u5E94\u7528: ${context?.selected_app_id}`,`\u5E94\u7528\u5C55\u793A\u540D: ${context?.selected_app_display_name??context?.selected_app_name??"-"}`,`\u79DF\u6237: ${context?.selected_app_tenant_id??"-"}`,`\u73AF\u5883: ${context?.selected_app_env??"preview"}`,`checkout \u57FA\u7EBF\u6E90\u7801\u7248\u672C: ${sourceContext?.base_source_version_id??"-"}`,`\u6700\u8FD1\u63D0\u4EA4\u6E90\u7801\u7248\u672C: ${sourceContext?.last_submitted_source_version_id??"-"}`,`\u6700\u8FD1 preview \u6E90\u7801\u7248\u672C: ${sourceContext?.last_preview_source_version_id??"-"}`,"\u4E0A\u4E0B\u6587\u6765\u6E90: \u5168\u5C40 CLI context",`\u4E0A\u4E0B\u6587\u6587\u4EF6: ${getCliContextPath()}`,sourceContextResult?.path?`\u5F53\u524D\u76EE\u5F55 source-context: ${sourceContextResult.path}`:"\u5F53\u524D\u76EE\u5F55 source-context: -",""]).join(`
|
|
2783
2785
|
`));return}if(subcommand==="preflight"){let contextSummary=summarizePreflightAppContext(args),checks=[],credentialPath=readCredentialPathSafely(),credentials2=null,loginError=null;try{credentials2=await loadStoredCredentialsEnsuringFresh(),credentials2?checks.push({label:"CLI \u767B\u5F55\u6001",status:"ready",detail:credentialPath?`\u5DF2\u68C0\u6D4B\u5230\u53EF\u7528\u51ED\u636E (${credentialPath})`:"\u5DF2\u68C0\u6D4B\u5230\u53EF\u7528\u51ED\u636E"}):loginError="\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u672C\u5730\u51ED\u636E"}catch(error){loginError=error instanceof Error?error.message:String(error)}if(credentials2||checks.push({label:"CLI \u767B\u5F55\u6001",status:"blocked",detail:loginError??"\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u672C\u5730\u51ED\u636E"}),credentials2)try{let whoami=await fetchWhoAmI({baseUrl:getControlApiBaseUrl(),accessToken:selectApiToken(credentials2),tenantId:contextSummary.tenantId});checks.push({label:"\u5F53\u524D\u4E3B\u4F53",status:"ready",detail:`principal=${whoami.principal_type} tenant=${whoami.tenant_id??contextSummary.tenantId??"-"} roles=${whoami.tenant_roles.join(", ")||"-"}`})}catch(error){checks.push({label:"\u5F53\u524D\u4E3B\u4F53",status:"blocked",detail:error instanceof Error?error.message:String(error)})}else checks.push({label:"\u5F53\u524D\u4E3B\u4F53",status:"blocked",detail:"\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u51ED\u636E\uFF0C\u672A\u6267\u884C `platform whoami`"});checks.push({label:"\u5E94\u7528\u4E0A\u4E0B\u6587",status:contextSummary.status,detail:contextSummary.detail});let diagnoseRecommendations=[];if(credentials2&&contextSummary.tenantId&&contextSummary.appId)try{let sdk2=createTenantScopedSdk(credentials2,contextSummary.tenantId,{capability:"dashboard",requestClass:"control"}),snapshot=await collectAppControlPlaneSnapshot({sdk:sdk2,credentials:credentials2,tenantId:contextSummary.tenantId,appId:contextSummary.appId,env:contextSummary.env});await syncLocalControlPlaneSummary({sdk:sdk2,startDir:currentInvocationDir(),tenantId:contextSummary.tenantId,appId:contextSummary.appId});let statusPayload=buildAppStatusPayload({tenantId:contextSummary.tenantId,appId:contextSummary.appId,env:contextSummary.env,snapshot}),diagnosePayload=buildAppDiagnosePayload({tenantId:contextSummary.tenantId,appId:contextSummary.appId,env:contextSummary.env,statusPayload,bindingPath:contextSummary.bindingPath,sourceContextPath:contextSummary.sourceContextPath});diagnoseRecommendations=diagnosePayload.recommendations;let diagnoseSummaryStatus=summarizeCheckStatuses(Object.values(diagnosePayload.checks));checks.push({label:"\u5E94\u7528\u8BCA\u65AD",status:diagnoseSummaryStatus,detail:`auth=${diagnosePayload.checks.auth_runtime.status} db=${diagnosePayload.checks.database.status} workflow=${diagnosePayload.checks.workflow.status} runtime=${diagnosePayload.checks.preview_runtime.status}`})}catch(error){checks.push({label:"\u5E94\u7528\u8BCA\u65AD",status:"blocked",detail:error instanceof Error?error.message:String(error)})}else credentials2?checks.push({label:"\u5E94\u7528\u8BCA\u65AD",status:"blocked",detail:"\u5F53\u524D\u672A\u89E3\u6790\u51FA tenant/app\uFF0C\u4E0A\u4E0B\u6587\u4E0D\u5B8C\u6574\uFF0C\u672A\u6267\u884C `platform app diagnose`"}):checks.push({label:"\u5E94\u7528\u8BCA\u65AD",status:"blocked",detail:"\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u51ED\u636E\uFF0C\u672A\u6267\u884C `platform app diagnose`"});let recommendations=mergePreflightRecommendations([credentials2?"":"\u5148\u6267\u884C `platform login` \u6062\u590D CLI \u767B\u5F55\u6001\uFF0C\u518D\u6267\u884C `platform whoami` \u9A8C\u8BC1\u5F53\u524D\u4E3B\u4F53\u3002",contextSummary.status==="blocked"?"\u5148\u6267\u884C `platform app current` \u6838\u5BF9\u4E0A\u4E0B\u6587\uFF1B\u82E5\u5F53\u524D\u76EE\u5F55\u672A\u7ED1\u5B9A\uFF0C\u518D\u6267\u884C `platform app checkout --tenant <tenant-id> --app <app-id> --dir <project-name>` \u6216 `platform link --tenant <tenant-id> --app <app-id> --env preview`\u3002":"",contextSummary.status!=="blocked"?"\u5982\u9700\u5355\u72EC\u67E5\u770B\u5F53\u524D\u76EE\u5F55/\u5168\u5C40\u4E0A\u4E0B\u6587\u7EC6\u8282\uFF0C\u53EF\u6267\u884C `platform app current`\u3002":"",...diagnoseRecommendations.slice(0,3),credentials2&&contextSummary.tenantId&&contextSummary.appId?"\u82E5\u4EE5\u4E0A\u68C0\u67E5\u901A\u8FC7\uFF0C\u518D\u6267\u884C `platform dev` \u8FDB\u5165\u9ED8\u8BA4\u8F7B\u91CF\u5F00\u53D1\u8DEF\u5F84\uFF1B\u5982\u9700\u8FDC\u7AEF\u80FD\u529B\u8054\u8C03\uFF0C\u53EF\u5148\u8BD5 `platform dev --remote-bindings`\uFF1B\u82E5\u4F60\u786E\u8BA4\u9700\u8981\u5E73\u53F0 DB\uFF0C\u518D\u663E\u5F0F\u6267\u884C `platform dev --remote-bindings=db`\u3002":""]);if(args.options.json===!0){process7.stdout.write(`${JSON.stringify({tenant_id:contextSummary.tenantId??null,app_id:contextSummary.appId??null,env:contextSummary.env,checks:Object.fromEntries(checks.map(item=>[item.label,{status:item.status,detail:item.detail}])),recommendations},null,2)}
|
|
2784
2786
|
`);return}process7.stdout.write([`tenant/app/env: ${contextSummary.tenantId??"-"}/${contextSummary.appId??"-"}/${contextSummary.env}`,"","[Current State]",...checks.map(item=>`${item.label}: ${item.status} ${item.detail}`),"","[Recommended Actions]",...recommendations.map((item,index)=>`${index+1}. ${item}`),""].join(`
|
|
2785
|
-
`));return}if(!["use","create","checkout","submit","versions","status","diagnose","scaffold","preflight","sync-platform-blocks"].includes(subcommand))throw new Error(`\u672A\u77E5 app \u5B50\u547D\u4EE4: ${subcommand}`);if(subcommand==="scaffold"){let scaffold=args.rest[1]??readOption2(args,"type");if(!scaffold||!["auth-debug","workflow-debug","cms-debug","db-debug"].includes(scaffold))throw new Error("`platform app scaffold` \u76EE\u524D\u4EC5\u652F\u6301 `auth-debug`\u3001`workflow-debug`\u3001`cms-debug` \u6216 `db-debug`\u3002");let result=scaffoldAppDebugSurface(readOption2(args,"dir")??currentInvocationDir(),scaffold);process7.stdout.write([`\u5DF2\u6CE8\u5165 debug scaffold: ${scaffold}`,`\u5E94\u7528\u76EE\u5F55: ${result.appRoot}`,result.createdFiles.length>0?`\u65B0\u5EFA\u6587\u4EF6:
|
|
2787
|
+
`));return}if(!["use","create","checkout","submit","versions","list","status","diagnose","scaffold","preflight","sync-platform-blocks"].includes(subcommand))throw new Error(`\u672A\u77E5 app \u5B50\u547D\u4EE4: ${subcommand}`);if(subcommand==="scaffold"){let scaffold=args.rest[1]??readOption2(args,"type");if(!scaffold||!["auth-debug","workflow-debug","cms-debug","db-debug"].includes(scaffold))throw new Error("`platform app scaffold` \u76EE\u524D\u4EC5\u652F\u6301 `auth-debug`\u3001`workflow-debug`\u3001`cms-debug` \u6216 `db-debug`\u3002");let result=scaffoldAppDebugSurface(readOption2(args,"dir")??currentInvocationDir(),scaffold);process7.stdout.write([`\u5DF2\u6CE8\u5165 debug scaffold: ${scaffold}`,`\u5E94\u7528\u76EE\u5F55: ${result.appRoot}`,result.createdFiles.length>0?`\u65B0\u5EFA\u6587\u4EF6:
|
|
2786
2788
|
- ${result.createdFiles.join(`
|
|
2787
2789
|
- `)}`:"\u65B0\u5EFA\u6587\u4EF6: -",result.updatedFiles.length>0?`\u66F4\u65B0\u6587\u4EF6:
|
|
2788
2790
|
- ${result.updatedFiles.join(`
|
|
2789
2791
|
- `)}`:"\u66F4\u65B0\u6587\u4EF6: -",`\u8BBF\u95EE\u8DEF\u5F84: ${result.routePath}`,"\u8BF4\u660E: \u8FD9\u662F\u6309\u9700\u8054\u8C03\u7528\u811A\u624B\u67B6\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u51FA\u73B0\u5728\u6B63\u5F0F\u4E1A\u52A1\u9875\u91CC\u3002",""].join(`
|
|
2790
2792
|
`));return}if(subcommand==="sync-platform-blocks"){let rollback=hasFlag2(args,"rollback"),last=hasFlag2(args,"last");if(rollback&&!last)throw new Error("`platform app sync-platform-blocks --rollback` \u76EE\u524D\u53EA\u652F\u6301 `--last`\u3002");let result=runAppSyncPlatformBlocksCommand({cwd:readOption2(args,"dir")??currentInvocationDir(),apply:hasFlag2(args,"apply"),adopt:hasFlag2(args,"adopt"),rollbackLast:rollback&&last,verify:hasFlag2(args,"verify")});process7.stdout.write(hasFlag2(args,"json")?`${JSON.stringify(result,null,2)}
|
|
2791
|
-
`:formatAppSyncPlatformBlocksResult(result));return}let credentials=await loadStoredCredentialsEnsuringFresh();if(!credentials)throw new Error("\u672A\u627E\u5230\u672C\u5730\u51ED\u636E\uFF0C\u8BF7\u5148\u6267\u884C `platform login`\u3002");let sdk=createControlApiSdk({accessToken:selectApiToken(credentials),tenantId:resolveTenantContext(args),capability:"dashboard",requestClass:"control"});if(subcommand==="
|
|
2793
|
+
`:formatAppSyncPlatformBlocksResult(result));return}let credentials=await loadStoredCredentialsEnsuringFresh();if(!credentials)throw new Error("\u672A\u627E\u5230\u672C\u5730\u51ED\u636E\uFF0C\u8BF7\u5148\u6267\u884C `platform login`\u3002");let sdk=createControlApiSdk({accessToken:selectApiToken(credentials),tenantId:resolveTenantContext(args),capability:"dashboard",requestClass:"control"});if(subcommand==="list"){let tenantId2=resolveTenantContext(args);if(!tenantId2)throw new Error("`platform app list` \u9700\u8981 `--tenant` \u6216\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587\uFF1B\u8BF7\u5148\u6267\u884C `platform tenant use <tenant-id>`\u3002");let overview2=await sdk.getTenantOverview(),payload=normalizeAppListPayload(tenantId2,overview2.apps);process7.stdout.write(hasFlag2(args,"json")?`${JSON.stringify(payload,null,2)}
|
|
2794
|
+
`:formatAppListText(payload));return}if(subcommand==="create"){let tenantId2=resolveTenantContext(args),displayName=readOption2(args,"name")??args.rest[1];if(!tenantId2||!displayName?.trim())throw new Error("`platform app create` \u9700\u8981 `--tenant` \u6216\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587\uFF0C\u4EE5\u53CA `--name`\u3002");let templateKey=normalizeAppTemplateOption(readOption2(args,"template"))??DEFAULT_APP_TEMPLATE_KEY,created=await sdk.createTenantApp({name:displayName.trim(),slug:readOption2(args,"slug"),template_key:templateKey});persistCliContext({active_tenant_id:created.tenant_id,selected_app_tenant_id:created.tenant_id,selected_app_id:created.app_id,selected_app_env:"preview",selected_app_name:created.name,selected_app_display_name:created.display_name});let requestedTargetDir=readOption2(args,"dir"),checkout;try{checkout=await checkoutAppWorkspace({sdk,tenantId:created.tenant_id,appId:created.app_id,env:"preview",targetDir:requestedTargetDir})}catch(error){throw formatAppCreateCheckoutError({cause:error,tenantId:created.tenant_id,appId:created.app_id,targetDir:requestedTargetDir})}process7.stdout.write([`\u4E91\u7AEF\u5E94\u7528\u5DF2\u521B\u5EFA\uFF1A${created.display_name} (${created.app_id})`,`\u6A21\u677F\uFF1A${created.template_key}`,"\u4E0B\u4E00\u6B65\u5EFA\u8BAE\uFF1A",` 1. cd ${checkout.targetDir}`," 2. platform dev",""].join(`
|
|
2792
2795
|
`));return}if(subcommand==="checkout"){let tenantId2=resolveTenantContext(args),appId2=readOption2(args,"app")??args.rest[1],env2=readOption2(args,"env")??"preview",sourceVersionId=readOption2(args,"source-version");if(!tenantId2||!appId2)throw new Error("`platform app checkout` \u9700\u8981 `--tenant` \u6216\u9ED8\u8BA4\u79DF\u6237\u4E0A\u4E0B\u6587\uFF0C\u4EE5\u53CA `--app`\u3002");persistCliContext({active_tenant_id:tenantId2,selected_app_tenant_id:tenantId2,selected_app_id:appId2,selected_app_env:env2,selected_app_name:appId2});let checkout=await checkoutAppWorkspace({sdk,tenantId:tenantId2,appId:appId2,env:env2,targetDir:readOption2(args,"dir"),sourceVersionId});process7.stdout.write(["\u4E91\u7AEF\u6E90\u7801\u526F\u672C\u5DF2 checkout \u5230\u672C\u5730\u65B0\u76EE\u5F55\u3002","\u4E0B\u4E00\u6B65\u5EFA\u8BAE\uFF1A",` 1. cd ${checkout.targetDir}`," 2. platform dev",""].join(`
|
|
2793
2796
|
`));return}if(subcommand==="submit"){let binding=tryReadCurrentBinding2()?.binding,tenantId2=readOption2(args,"tenant")??binding?.tenant_id??resolveTenantContext(args),appId2=readOption2(args,"app")??binding?.app_id;if(!tenantId2||!appId2)throw new Error("`platform app submit` \u9700\u8981\u5728\u5DF2\u7ED1\u5B9A\u7684\u5E94\u7528\u76EE\u5F55\u6267\u884C\uFF0C\u6216\u663E\u5F0F\u4F20\u5165 `--tenant` \u4E0E `--app`\u3002");let checkedAppRoot=findAppRoot(currentInvocationDir());assertSourceWorkspaceCloudUploadPolicy(checkedAppRoot,"platform app submit");let{files,appRoot}=collectSourceWorkspaceFiles(checkedAppRoot),pathBaseViolations=detectPathBaseRuntimeViolations(files);if(readOption2(args,"template"))throw new Error("`platform app submit` \u4E0D\u652F\u6301 `--template`\u3002\u82E5\u4F60\u8981\u57FA\u4E8E\u65B0\u6A21\u677F\u521B\u5EFA\u7248\u672C\uFF0C\u8BF7\u6539\u7528 `platform app version create --template <template-key>`\u3002");if(pathBaseViolations.length>0){let examples=pathBaseViolations.slice(0,8).map(item=>`- ${item.path}:${item.line} ${item.snippet}`).join(`
|
|
2794
2797
|
`);throw new Error(["\u68C0\u6D4B\u5230 path-base \u9AD8\u98CE\u9669\u5199\u6CD5\uFF0C\u5DF2\u963B\u6B62\u63D0\u4EA4\u3002",'preview/prod \u9ED8\u8BA4\u4EE5\u8DEF\u5F84\u524D\u7F00\u90E8\u7F72\uFF0C\u6D4F\u89C8\u5668\u4FA7\u4E0D\u8981\u76F4\u63A5\u5199\u6839\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 `fetch(\'/api/...\')`\u3001`href="/..."`\u3001`src="/..."`\u3002',"\u8BF7\u6539\u7528 `buildRuntimePath(...)`\u3001`buildAuthUrl(...)`\uFF0C\u6216\u76F8\u5BF9\u8DEF\u5F84 `./api/...`\u3002","\u547D\u4E2D\u793A\u4F8B\uFF1A",examples].join(`
|
|
@@ -2805,13 +2808,14 @@ ${normalized}`}function countExecutableSqlStatements(sql){return stripSqlComment
|
|
|
2805
2808
|
`));return;case"sync-platform-blocks":process7.stdout.write(["platform app sync-platform-blocks","","\u7528\u6CD5\uFF1A"," platform app sync-platform-blocks [--dry-run]"," platform app sync-platform-blocks --adopt"," platform app sync-platform-blocks --apply [--verify]"," platform app sync-platform-blocks --verify [--json]"," platform app sync-platform-blocks --rollback --last","","\u4F5C\u7528\uFF1A"," \u5728\u5F53\u524D\u672C\u5730 app \u5DE5\u7A0B\u5185\u540C\u6B65\u53CC\u6A21\u677F\u5E73\u53F0\u7EF4\u62A4\u533A\u3002"," \u9ED8\u8BA4\u6267\u884C dry-run\uFF1B\u5386\u53F2 app \u5148\u7528 `--adopt` \u8865 lockfile\uFF0C\u518D\u6267\u884C `--apply`\u3002"," `--verify` \u4F1A\u8FDB\u7A0B\u5185\u68C0\u67E5\u5F53\u524D manifest\u3001lockfile \u4E0E\u6258\u7BA1\u6587\u4EF6\u662F\u5426\u4E00\u81F4\uFF0C\u4E0D\u4F9D\u8D56 Bash\u3002",""].join(`
|
|
2806
2809
|
`));return;case"version:create":process7.stdout.write(["platform app version create","","\u7528\u6CD5\uFF1A",' platform app version create [--message "local iteration"] --template <template-key> [--tenant <tenant-id>] [--app <app-id>]',"","\u4F5C\u7528\uFF1A"," \u5728\u5F53\u524D app \u4E0B\u57FA\u4E8E\u6307\u5B9A\u6A21\u677F\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u6E90\u7801\u7248\u672C\u9AA8\u67B6\u3002"," \u8FD9\u4E0D\u4F1A\u65B0\u5EFA app\uFF0C\u4E5F\u4E0D\u4F1A\u8FC1\u79FB\u4E1A\u52A1\u6570\u636E\uFF1B\u540C\u4E00\u4E2A app \u4E0B\u65E2\u6709 DB / \u7EC8\u7AEF\u7528\u6237\u7B49\u8D44\u6E90\u4F1A\u7EE7\u7EED\u590D\u7528\u3002"," \u5F53\u524D\u76EE\u5F55\u5DF2\u7ED1\u5B9A\u5E94\u7528\u65F6\uFF0C\u53EF\u76F4\u63A5\u6267\u884C\uFF0C\u65E0\u9700\u5148 `platform app use`\u3002",""].join(`
|
|
2807
2810
|
`));return;case"version:list":process7.stdout.write(["platform app version list","","\u7528\u6CD5\uFF1A"," platform app version list --tenant <tenant-id> --app <app-id>","","\u4F5C\u7528\uFF1A"," \u67E5\u770B\u5F53\u524D app \u4E0B\u5DF2\u6709\u6E90\u7801\u7248\u672C\u53CA\u5176\u6A21\u677F\u3002",""].join(`
|
|
2811
|
+
`));return;case"list":process7.stdout.write(["platform app list","","\u7528\u6CD5\uFF1A"," platform app list [--tenant <tenant-id>] [--json]","","\u4F5C\u7528\uFF1A"," \u67E5\u770B\u5F53\u524D\u79DF\u6237\u4E0B\u5168\u90E8\u53EF\u89C1\u5E94\u7528\uFF1B\u4E0D\u8981\u6C42\u5728\u5E94\u7528\u76EE\u5F55\u4E2D\u6267\u884C\u3002",""].join(`
|
|
2808
2812
|
`));return;case"versions":process7.stdout.write(["platform app versions","","\u7528\u6CD5\uFF1A"," platform app versions --tenant <tenant-id> --app <app-id>","","\u4F5C\u7528\uFF1A"," \u67E5\u770B\u5E94\u7528\u5DF2\u6709\u7684\u6E90\u7801\u7248\u672C\u5217\u8868\u3002",""].join(`
|
|
2809
2813
|
`));return;case"status":process7.stdout.write(["platform app status","","\u7528\u6CD5\uFF1A"," platform app status [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod] [--json]","","\u4F5C\u7528\uFF1A"," \u8F93\u51FA\u5E94\u7528\u63A7\u5236\u9762\u603B\u89C8\uFF0C\u5305\u62EC\u57FA\u7840\u4FE1\u606F\u3001Auth \u6982\u89C8\u3001Runtime \u6982\u89C8\u3001DB \u6982\u89C8\u4E0E\u6700\u65B0\u6E90\u7801\u7248\u672C\u3002",""].join(`
|
|
2810
2814
|
`));return;case"diagnose":process7.stdout.write(["platform app diagnose","","\u7528\u6CD5\uFF1A"," platform app diagnose [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod] [--json]","","\u4F5C\u7528\uFF1A"," \u9762\u5411\u63A7\u5236\u9762\u8F93\u51FA\u5F53\u524D\u5E94\u7528\u662F\u5426\u5DF2 ready for runtime validation\uFF0C\u5E76\u7ED9\u51FA\u4E0B\u4E00\u6B65\u52A8\u4F5C\u5EFA\u8BAE\u3002",""].join(`
|
|
2811
2815
|
`));return;case"preflight":process7.stdout.write(["platform app preflight","","\u7528\u6CD5\uFF1A"," platform app preflight [--tenant <tenant-id>] [--app <app-id>] [--env preview|prod] [--json]","","\u4F5C\u7528\uFF1A"," \u5C06 `platform whoami`\u3001`platform app current`\u3001`platform app diagnose` \u6536\u655B\u6210\u4E00\u6B21\u5F00\u5DE5\u524D\u68C0\u67E5\uFF0C\u5C3D\u91CF\u5728\u4E00\u4E2A\u8F93\u51FA\u91CC\u544A\u8BC9\u4F60\u5361\u5728\u54EA\u4E00\u6B65\u3002",""].join(`
|
|
2812
2816
|
`));return;case"import":printAppImportHelp();return;case"import:preprocess":printAppImportHelp("preprocess");return;case"import:stage":printAppImportHelp("stage");return;case"import:merge":printAppImportHelp("merge");return;case"scaffold":process7.stdout.write(["platform app scaffold","","\u7528\u6CD5\uFF1A"," platform app scaffold <auth-debug|workflow-debug|cms-debug|db-debug> [--dir <project-dir>]","","\u4F5C\u7528\uFF1A"," \u5728\u5F53\u524D\u672C\u5730\u5E94\u7528\u76EE\u5F55\u91CC\u6309\u9700\u6CE8\u5165 debug \u9875\u9762\u548C\u5BF9\u5E94\u8DEF\u7531\uFF0C\u4E0D\u4FEE\u6539\u6B63\u5F0F\u4E1A\u52A1\u9875\u5165\u53E3\u3002","","\u793A\u4F8B\uFF1A"," platform app scaffold auth-debug"," platform app scaffold workflow-debug"," platform app scaffold cms-debug"," platform app scaffold db-debug",""].join(`
|
|
2813
2817
|
`));return;case"use":process7.stdout.write(["platform app use","","\u7528\u6CD5\uFF1A"," platform app use --tenant <tenant-id> --app <app-id> [--env preview|prod]","","\u4F5C\u7528\uFF1A"," \u8BBE\u7F6E\u5F53\u524D CLI \u7684\u5E94\u7528\u4E0A\u4E0B\u6587\uFF0C\u5E38\u7528\u4E8E\u517C\u5BB9 init/link/dev \u8DEF\u5F84\u3002",""].join(`
|
|
2814
|
-
`));return;default:process7.stdout.write(["platform app","","\u53EF\u7528\u5B50\u547D\u4EE4\uFF1A"," platform app create"," platform app checkout"," platform app submit"," platform app versions"," platform app status"," platform app diagnose"," platform app preflight"," platform app import preprocess"," platform app import stage"," platform app import merge"," platform app scaffold"," platform app use"," platform app current",""].join(`
|
|
2818
|
+
`));return;default:process7.stdout.write(["platform app","","\u53EF\u7528\u5B50\u547D\u4EE4\uFF1A"," platform app create"," platform app checkout"," platform app submit"," platform app list"," platform app versions"," platform app status"," platform app diagnose"," platform app preflight"," platform app import preprocess"," platform app import stage"," platform app import merge"," platform app scaffold"," platform app use"," platform app current",""].join(`
|
|
2815
2819
|
`))}}function printDevHelp(){process7.stdout.write(getDevHelpLines().join(`
|
|
2816
2820
|
`))}function printLinkHelp(){process7.stdout.write(["platform link","","\u7528\u6CD5\uFF1A"," platform link --tenant <tenant-id> --app <app-id> [--env preview|prod]","","\u9002\u7528\u573A\u666F\uFF1A"," - \u5F53\u524D\u76EE\u5F55\u5DF2\u7ECF\u662F\u4E00\u4E2A\u5E94\u7528\u5DE5\u7A0B\uFF08\u5B58\u5728 `app.yaml`\uFF09\uFF0C\u4F46\u7F3A\u5C11 `.platform/source-context.json`"," - \u4F60\u628A\u5DF2 checkout / \u5DF2\u521D\u59CB\u5316\u7684\u672C\u5730\u5DE5\u7A0B\u79FB\u52A8\u5230\u65B0\u76EE\u5F55\u540E\uFF0C\u9700\u8981\u91CD\u65B0\u7ED1\u5B9A tenant/app/env"," - \u4F60\u8981\u5728\u73B0\u6709\u5DE5\u7A0B\u76EE\u5F55\u4E0A\u624B\u52A8\u5207\u6362\u5230\u53E6\u4E00\u4E2A app \u4E0A\u4E0B\u6587","","\u4E0D\u9002\u7528\u573A\u666F\uFF1A"," - \u5F53\u524D\u76EE\u5F55\u8FD8\u4E0D\u662F\u5E94\u7528\u5DE5\u7A0B\uFF1A\u8BF7\u5148\u6267\u884C `platform app checkout ...` \u6216 `platform init <project-name>`","","\u8BF4\u660E\uFF1A"," - `platform link` \u53EA\u8D1F\u8D23\u628A tenant/app/env \u7ED1\u5B9A\u5230\u5F53\u524D\u5E94\u7528\u76EE\u5F55"," - \u7ED1\u5B9A\u6210\u529F\u540E\u4F1A\u5199\u5165 `.platform/source-context.json`"," - \u7ED1\u5B9A\u5B8C\u6210\u540E\u53EF\u76F4\u63A5\u6267\u884C `platform dev`","","\u793A\u4F8B\uFF1A"," platform link --tenant t-default --app app-demo --env preview",""].join(`
|
|
2817
2821
|
`))}async function checkoutAppWorkspace(args){let sourceWorkspace=await args.sdk.getTenantAppSourceWorkspace(args.appId,{sourceVersionId:args.sourceVersionId});persistCliContext({active_tenant_id:args.tenantId,selected_app_tenant_id:sourceWorkspace.tenant_id,selected_app_id:sourceWorkspace.app_id,selected_app_env:args.env,selected_app_name:sourceWorkspace.name,selected_app_display_name:sourceWorkspace.display_name});let targetDir=args.targetDir??sourceWorkspace.default_directory,checkedOutAt=new Date().toISOString(),writtenFiles=checkoutSourceWorkspace(targetDir,sourceWorkspace.files,{tenant_id:sourceWorkspace.tenant_id,app_id:sourceWorkspace.app_id,env:args.env,workspace_name:loadStoredCliContext()?.active_tenant_name,app_name:sourceWorkspace.name,app_display_name:sourceWorkspace.display_name,validated_at:checkedOutAt,template_key:sourceWorkspace.template_key,default_directory:sourceWorkspace.default_directory,generated_from_template:sourceWorkspace.generated_from_template,base_source_version_id:sourceWorkspace.source_version_id,checked_out_at:checkedOutAt});return process7.stdout.write([`\u6E90\u7801\u76EE\u5F55: ${targetDir}`,`tenant/app/env: ${sourceWorkspace.tenant_id}/${sourceWorkspace.app_id}/${args.env}`,`\u6A21\u677F: ${sourceWorkspace.template_key}`,`\u6765\u6E90: ${sourceWorkspace.generated_from_template?"template scaffold":`source version ${sourceWorkspace.source_version_id}`}`,`\u5DF2\u5199\u5165\u6587\u4EF6: ${writtenFiles.length}`,""].join(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voobase/cli",
|
|
3
|
-
"version": "0.1.2-nonprod.
|
|
3
|
+
"version": "0.1.2-nonprod.2120",
|
|
4
4
|
"private": false,
|
|
5
5
|
"platformDistributionProfile": {
|
|
6
6
|
"name": "nonprod",
|
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
"bundleDependencies": [],
|
|
57
57
|
"platformDistributionBuild": {
|
|
58
58
|
"channel": "nonprod",
|
|
59
|
-
"version": "0.1.2-nonprod.
|
|
60
|
-
"sequence":
|
|
61
|
-
"gitSha": "
|
|
62
|
-
"fullGitSha": "
|
|
63
|
-
"buildId": "0.1.2-nonprod.
|
|
59
|
+
"version": "0.1.2-nonprod.2120",
|
|
60
|
+
"sequence": 2120,
|
|
61
|
+
"gitSha": "16b4caf",
|
|
62
|
+
"fullGitSha": "16b4caf80642c41981bad1e15a9bb8f32409835d",
|
|
63
|
+
"buildId": "0.1.2-nonprod.2120+16b4caf"
|
|
64
64
|
}
|
|
65
65
|
}
|