@doubao-dev/cli 0.0.27 → 0.0.28
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/2168.js
CHANGED
|
@@ -19,7 +19,7 @@ Expecting one of '${r.join("', '")}'`);return this._lifeCycleHooks[e]?this._life
|
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr("\n"),this.outputHelp({error:!0}));let r=t||{},i=r.exitCode||1,n=r.code||"commander.error";this._exit(i,n,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in p.env){let t=e.attributeName();(void 0===this.getOptionValue(t)||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,p.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new W(this.options),t=e=>void 0!==this.getOptionValue(e)&&!["default","implied"].includes(this.getOptionValueSource(e));this.options.filter(r=>void 0!==r.implied&&t(r.attributeName())&&e.valueFromOption(this.getOptionValue(r.attributeName()),r)).forEach(e=>{Object.keys(e.implied).filter(e=>!t(e)).forEach(t=>{this.setOptionValueWithSource(t,e.implied[t],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let r=e=>{let t=e.attributeName(),r=this.getOptionValue(t),i=this.options.find(e=>e.negate&&t===e.attributeName()),n=this.options.find(e=>!e.negate&&t===e.attributeName());return i&&(void 0===i.presetArg&&!1===r||void 0!==i.presetArg&&r===i.presetArg)?i:n||e},i=e=>{let t=r(e),i=t.attributeName();return"env"===this.getOptionValueSource(i)?`environment variable '${t.envVar}'`:`option '${t.flags}'`},n=`error: ${i(e)} cannot be used with ${i(t)}`;this.error(n,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let r=[],i=this;do{let e=i.createHelp().visibleOptions(i).filter(e=>e.long).map(e=>e.long);r=r.concat(e),i=i.parent}while(i&&!i._enablePositionalOptions);t=K(e,r)}let r=`error: unknown option '${e}'${t}`;this.error(r,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,r=e.length,i=this.parent?` for '${this.name()}'`:"",n=e.join(", "),o=`error: too many arguments${i}. Expected ${t} argument${1===t?"":"s"} but got ${r}: ${n}.`;this.error(o,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let r=[];this.createHelp().visibleCommands(this).forEach(e=>{r.push(e.name()),e.alias()&&r.push(e.alias())}),t=K(e,r)}let r=`error: unknown command '${e}'${t}`;this.error(r,{code:"commander.unknownCommand"})}version(e,t,r){if(void 0===e)return this._version;this._version=e,t=t||"-V, --version",r=r||"output the version number";let i=this.createOption(t,r);return this._versionOptionName=i.attributeName(),this._registerOption(i),this.on("option:"+i.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
20
20
|
`),this._exit(0,"commander.version",e)}),this}description(e,t){return void 0===e&&void 0===t?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return void 0===e?this._summary:(this._summary=e,this)}alias(e){if(void 0===e)return this._aliases[0];let t=this;if(0!==this.commands.length&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw Error("Command alias can't be the same as its name");let r=this.parent?._findCommand(e);if(r){let t=[r.name()].concat(r.aliases()).join("|");throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}return t._aliases.push(e),this}aliases(e){return void 0===e?this._aliases:(e.forEach(e=>this.alias(e)),this)}usage(e){if(void 0===e){if(this._usage)return this._usage;let e=this.registeredArguments.map(e=>B(e));return[].concat(this.options.length||null!==this._helpOption?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?e:[]).join(" ")}return this._usage=e,this}name(e){return void 0===e?this._name:(this._name=e,this)}helpGroup(e){return void 0===e?this._helpGroupHeading??"":(this._helpGroupHeading=e,this)}commandsGroup(e){return void 0===e?this._defaultCommandGroup??"":(this._defaultCommandGroup=e,this)}optionsGroup(e){return void 0===e?this._defaultOptionGroup??"":(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=J.basename(e,J.extname(e)),this}executableDir(e){return void 0===e?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),r=this._getOutputContext(e);t.prepareContext({error:r.error,helpWidth:r.helpWidth,outputHasColors:r.hasColors});let i=t.formatHelp(this,t);return r.hasColors?i:this._outputConfiguration.stripColor(i)}_getOutputContext(e){let t,r,i,n=!!(e=e||{}).error;return n?(t=e=>this._outputConfiguration.writeErr(e),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(t=e=>this._outputConfiguration.writeOut(e),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:n,write:e=>(r||(e=this._outputConfiguration.stripColor(e)),t(e)),hasColors:r,helpWidth:i}}outputHelp(e){let t;"function"==typeof e&&(t=e,e=void 0);let r=this._getOutputContext(e),i={error:r.error,write:r.write,command:this};this._getCommandAndAncestors().reverse().forEach(e=>e.emit("beforeAllHelp",i)),this.emit("beforeHelp",i);let n=this.helpInformation({error:r.error});if(t&&"string"!=typeof(n=t(n))&&!Buffer.isBuffer(n))throw Error("outputHelp callback must return a string or a Buffer");r.write(n),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",i),this._getCommandAndAncestors().forEach(e=>e.emit("afterAllHelp",i))}helpOption(e,t){return"boolean"==typeof e?e?(null===this._helpOption&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null:(this._helpOption=this.createOption(e??"-h, --help",t??"display help for command"),(e||t)&&this._initOptionGroup(this._helpOption)),this}_getHelpOption(){return void 0===this._helpOption&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(p.exitCode??0);0===t&&e&&"function"!=typeof e&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let r=["beforeAll","before","after","afterAll"];if(!r.includes(e))throw Error(`Unexpected value for position to addHelpText.
|
|
21
21
|
Expecting one of '${r.join("', '")}'`);let i=`${e}Help`;return this.on(i,e=>{let r;(r="function"==typeof t?t({error:e.error,command:e.command}):t)&&e.write(`${r}
|
|
22
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}}function Q(e){return e.map(e=>{let t,r;if(!e.startsWith("--inspect"))return e;let i="127.0.0.1",n="9229";return(null!==(r=e.match(/^(--inspect(-brk)?)$/))?t=r[1]:null!==(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))?(t=r[1],/^\d+$/.test(r[3])?n=r[3]:i=r[3]):null!==(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))&&(t=r[1],i=r[3],n=r[4]),t&&"0"!==n)?`${t}=${i}:${parseInt(n)+1}`:e})}function Z(){return!p.env.NO_COLOR&&"0"!==p.env.FORCE_COLOR&&"false"!==p.env.FORCE_COLOR&&(!!p.env.FORCE_COLOR||void 0!==p.env.CLICOLOR_FORCE||void 0)}new Y;let ee={authBaseUrl:"https://developer.doubao.com",apiBaseUrl:"https://developer.doubao.com",authAllowedOrigins:["https://developer.doubao.com"],excludeCommands:[],requestHeaders:{}},et=new Set(["x-tt-env","x-use-ppe"]),er=(r=ee,{authBaseUrl:(i=(l=process.env.DBX_BUILD_BASE_DOMAIN?ea(function(e){let t=e.trim();if(/^http:\/\//i.test(t))throw Error("DBX build config baseDomain must use https");return/^https:\/\//i.test(t)?t:`https://${t}`}(process.env.DBX_BUILD_BASE_DOMAIN),"baseDomain"):void 0,{authBaseUrl:process.env.DBX_BUILD_AUTH_BASE_URL?ea(process.env.DBX_BUILD_AUTH_BASE_URL,"authBaseUrl"):l,apiBaseUrl:process.env.DBX_BUILD_API_BASE_URL?ea(process.env.DBX_BUILD_API_BASE_URL,"apiBaseUrl"):l,authAllowedOrigins:process.env.DBX_BUILD_AUTH_ALLOWED_ORIGINS?el(process.env.DBX_BUILD_AUTH_ALLOWED_ORIGINS):void 0,excludeCommands:process.env.DBX_BUILD_EXCLUDE_COMMANDS?el(process.env.DBX_BUILD_EXCLUDE_COMMANDS):void 0,requestHeaders:process.env.DBX_BUILD_REQUEST_HEADERS_JSON?function(e){let t=JSON.parse(e);if("object"!=typeof t||null===t||Array.isArray(t))throw Error("DBX_BUILD_REQUEST_HEADERS_JSON must be a JSON object");let r={};for(let[e,i]of Object.entries(t)){let t=e.toLowerCase();if(et.has(t)){if("string"!=typeof i)throw Error(`DBX_BUILD_REQUEST_HEADERS_JSON header ${t} must have a string value`);r[t]=i}}return r}(process.env.DBX_BUILD_REQUEST_HEADERS_JSON):void 0})).authBaseUrl??r.authBaseUrl,apiBaseUrl:i.apiBaseUrl??r.apiBaseUrl,authAllowedOrigins:[...r.authAllowedOrigins,...i.authAllowedOrigins??[]],excludeCommands:i.excludeCommands??r.excludeCommands,requestHeaders:{...r.requestHeaders,...i.requestHeaders??{}}});function ei(){var e;return{baseUrl:ea(er.authBaseUrl,"authBaseUrl"),allowedOrigins:[...new Set([es((e=er).authBaseUrl,"authBaseUrl"),es(e.apiBaseUrl,"apiBaseUrl"),...e.authAllowedOrigins.map(e=>es(e,"authAllowedOrigins"))])],requestHeaders:er.requestHeaders}}function en(){return ea(er.apiBaseUrl,"apiBaseUrl")}function eo(e){return e.replace(/\/+$/,"")}function ea(e,t){let r;try{r=new URL(eo(e))}catch{throw Error(`DBX build config ${t} must be an absolute HTTPS URL`)}if("https:"!==r.protocol)throw Error(`DBX build config ${t} must use https`);return eo(r.toString())}function es(e,t){return new URL(ea(e,t)).origin}function el(e){return"string"==typeof e?e.split(",").map(e=>e.trim()).filter(Boolean):Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):[]}let eu=JSON.parse('{"UU":"@doubao-dev/cli"}').UU;function ec(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}let ed="0.0.
|
|
22
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}}function Q(e){return e.map(e=>{let t,r;if(!e.startsWith("--inspect"))return e;let i="127.0.0.1",n="9229";return(null!==(r=e.match(/^(--inspect(-brk)?)$/))?t=r[1]:null!==(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))?(t=r[1],/^\d+$/.test(r[3])?n=r[3]:i=r[3]):null!==(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))&&(t=r[1],i=r[3],n=r[4]),t&&"0"!==n)?`${t}=${i}:${parseInt(n)+1}`:e})}function Z(){return!p.env.NO_COLOR&&"0"!==p.env.FORCE_COLOR&&"false"!==p.env.FORCE_COLOR&&(!!p.env.FORCE_COLOR||void 0!==p.env.CLICOLOR_FORCE||void 0)}new Y;let ee={authBaseUrl:"https://developer.doubao.com",apiBaseUrl:"https://developer.doubao.com",authAllowedOrigins:["https://developer.doubao.com"],excludeCommands:[],requestHeaders:{}},et=new Set(["x-tt-env","x-use-ppe"]),er=(r=ee,{authBaseUrl:(i=(l=process.env.DBX_BUILD_BASE_DOMAIN?ea(function(e){let t=e.trim();if(/^http:\/\//i.test(t))throw Error("DBX build config baseDomain must use https");return/^https:\/\//i.test(t)?t:`https://${t}`}(process.env.DBX_BUILD_BASE_DOMAIN),"baseDomain"):void 0,{authBaseUrl:process.env.DBX_BUILD_AUTH_BASE_URL?ea(process.env.DBX_BUILD_AUTH_BASE_URL,"authBaseUrl"):l,apiBaseUrl:process.env.DBX_BUILD_API_BASE_URL?ea(process.env.DBX_BUILD_API_BASE_URL,"apiBaseUrl"):l,authAllowedOrigins:process.env.DBX_BUILD_AUTH_ALLOWED_ORIGINS?el(process.env.DBX_BUILD_AUTH_ALLOWED_ORIGINS):void 0,excludeCommands:process.env.DBX_BUILD_EXCLUDE_COMMANDS?el(process.env.DBX_BUILD_EXCLUDE_COMMANDS):void 0,requestHeaders:process.env.DBX_BUILD_REQUEST_HEADERS_JSON?function(e){let t=JSON.parse(e);if("object"!=typeof t||null===t||Array.isArray(t))throw Error("DBX_BUILD_REQUEST_HEADERS_JSON must be a JSON object");let r={};for(let[e,i]of Object.entries(t)){let t=e.toLowerCase();if(et.has(t)){if("string"!=typeof i)throw Error(`DBX_BUILD_REQUEST_HEADERS_JSON header ${t} must have a string value`);r[t]=i}}return r}(process.env.DBX_BUILD_REQUEST_HEADERS_JSON):void 0})).authBaseUrl??r.authBaseUrl,apiBaseUrl:i.apiBaseUrl??r.apiBaseUrl,authAllowedOrigins:[...r.authAllowedOrigins,...i.authAllowedOrigins??[]],excludeCommands:i.excludeCommands??r.excludeCommands,requestHeaders:{...r.requestHeaders,...i.requestHeaders??{}}});function ei(){var e;return{baseUrl:ea(er.authBaseUrl,"authBaseUrl"),allowedOrigins:[...new Set([es((e=er).authBaseUrl,"authBaseUrl"),es(e.apiBaseUrl,"apiBaseUrl"),...e.authAllowedOrigins.map(e=>es(e,"authAllowedOrigins"))])],requestHeaders:er.requestHeaders}}function en(){return ea(er.apiBaseUrl,"apiBaseUrl")}function eo(e){return e.replace(/\/+$/,"")}function ea(e,t){let r;try{r=new URL(eo(e))}catch{throw Error(`DBX build config ${t} must be an absolute HTTPS URL`)}if("https:"!==r.protocol)throw Error(`DBX build config ${t} must use https`);return eo(r.toString())}function es(e,t){return new URL(ea(e,t)).origin}function el(e){return"string"==typeof e?e.split(",").map(e=>e.trim()).filter(Boolean):Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):[]}let eu=JSON.parse('{"UU":"@doubao-dev/cli"}').UU;function ec(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}let ed="0.0.28",ep=u("node:os"),eh=J.join(ep.homedir(),".dbx","token"),em=J.join(ep.homedir(),".doubao","token"),ef={};function eg(e={}){let t={...ef,...e},r=function(e,t){let r;try{r=new URL(ey(e))}catch{throw Error(`${t} must be an absolute HTTPS URL`)}if("https:"!==r.protocol)throw Error(`${t} must use https`);return ey(r.toString())}(t.baseUrl??"https://developer.doubao.com","baseUrl"),i=t.tokenPath??eh;return{...t,baseUrl:r,allowedOrigins:function(e,t){let r=new Set([new URL(t).origin]);for(let t of e??[]){let e;try{e=new URL(t)}catch{throw Error(`allowedOrigins entries must be absolute HTTPS origins: ${t}`)}if("https:"!==e.protocol)throw Error(`allowedOrigins entries must use https: ${t}`);r.add(e.origin)}return[...r]}(t.allowedOrigins,r),tokenPath:i,legacyTokenPath:t.tokenPath?void 0:em,requestHeaders:new Headers(t.requestHeaders)}}function ey(e){return e.replace(/\/+$/,"")}let ew=u("node:crypto"),eb=(0,V.promisify)(z.execFile),e_="byted-doubao-open-dbx-cli",ev="dbx-cli",eO="aes-256-gcm";class eE extends Error{constructor(e){super(e),this.name="CredentialStoreError"}}class eA{constructor(e,t){this.primary=e,this.fallback=t}async get(e){let t;try{let t=await this.primary.get(e);if(t)return t}catch(e){t=e}try{let t=await this.fallback.get(e);if(t)return t}catch(e){if(t)throw new eE(`Failed to read token from system credential store (${ej(t)}); encrypted-file fallback also failed: ${ej(e)}`);throw e}if(t)throw t instanceof Error?t:new eE(`Failed to read token from system credential store: ${String(t)}`)}async set(e,t){let r;try{await this.primary.set(e,t)}catch(e){r=e}try{await this.fallback.set(e,t)}catch(e){if(r)throw new eE(`Failed to write token to system credential store (${ej(r)}) and encrypted-file fallback (${ej(e)})`);throw e}}async delete(e){let t;try{await this.primary.delete(e)}catch(e){t=e}try{await this.fallback.delete(e)}catch(e){if(t)throw new eE(`Failed to delete token from system credential store (${ej(t)}) and encrypted-file fallback (${ej(e)})`);throw e}}}class eS{constructor(e={}){this.baseDir=e.baseDir??("darwin"===process.platform?J.join(ep.homedir(),"Library","Application Support",ev):"win32"===process.platform?J.join(process.env.APPDATA||J.join(ep.homedir(),"AppData","Roaming"),ev):J.join(process.env.XDG_DATA_HOME||J.join(ep.homedir(),".local","share"),ev))}async get(e){var t,r;let i,n,o=this.credentialFilePath(e);try{i=await X.promises.readFile(o,"utf8")}catch(e){if(eI(e)&&"ENOENT"===e.code)return;throw new eE(`Failed to read encrypted token file: ${ej(e)}`)}try{n=JSON.parse(i)}catch(e){throw new eE(`Encrypted token file is not valid JSON: ${ej(e)}`)}if(!((t=n)&&"object"==typeof t&&1===t.version&&t.algorithm===eO&&"string"==typeof t.iv&&"string"==typeof t.authTag&&"string"==typeof t.ciphertext))throw new eE("Encrypted token file has an unsupported format");let a=await this.readMasterKey();try{let t=ew.createDecipheriv(eO,a,Buffer.from(n.iv,"base64url"));return t.setAAD(Buffer.from((r=e,`${e_}:${r}`),"utf8")),t.setAuthTag(Buffer.from(n.authTag,"base64url")),Buffer.concat([t.update(Buffer.from(n.ciphertext,"base64url")),t.final()]).toString("utf8")}catch(e){throw new eE(`Failed to decrypt encrypted token file: ${ej(e)}`)}}async set(e,t){var r;let i=await this.readOrCreateMasterKey(),n=ew.randomBytes(12),o=ew.createCipheriv(eO,i,n);o.setAAD(Buffer.from((r=e,`${e_}:${r}`),"utf8"));let a=Buffer.concat([o.update(t,"utf8"),o.final()]),s={version:1,algorithm:eO,iv:n.toString("base64url"),authTag:o.getAuthTag().toString("base64url"),ciphertext:a.toString("base64url")};await eT(this.credentialFilePath(e),`${JSON.stringify(s,null,2)}
|
|
23
23
|
`)}async delete(e){try{await X.promises.unlink(this.credentialFilePath(e))}catch(e){if(!eI(e)||"ENOENT"!==e.code)throw new eE(`Failed to delete encrypted token file: ${ej(e)}`)}}masterKeyPath(){return J.join(this.baseDir,"master.key")}credentialFilePath(e){let t=ew.createHash("sha256").update(e).digest("hex");return J.join(this.baseDir,"credentials",`${t}.json`)}async readMasterKey(){try{var e=await X.promises.readFile(this.masterKeyPath(),"utf8");let t=Buffer.from(e.trim(),"base64url");if(32!==t.length)throw new eE("Encrypted token master key has an unsupported format");return t}catch(e){if(eI(e)&&"ENOENT"===e.code)throw new eE("Encrypted token master key is missing");if(e instanceof eE)throw e;throw new eE(`Failed to read encrypted token master key: ${ej(e)}`)}}async readOrCreateMasterKey(){try{return await this.readMasterKey()}catch(e){if(!(e instanceof eE)||!e.message.includes("master key is missing"))throw e}let e=ew.randomBytes(32);try{return await eT(this.masterKeyPath(),`${e.toString("base64url")}
|
|
24
24
|
`),e}catch(e){if(eI(e)&&"EEXIST"===e.code)return this.readMasterKey();throw new eE(`Failed to write encrypted token master key: ${ej(e)}`)}}}class e${async get(e){try{let{stdout:t}=await eb("security",["find-generic-password","-a",e,"-s",e_,"-w"]);return String(t).replace(/\n$/,"")}catch(e){if(ex(e))return;throw new eE(`Failed to read token from macOS Keychain: ${ej(e)}`)}}async set(e,t){try{await eb("security",["add-generic-password","-a",e,"-s",e_,"-w",t,"-U"])}catch(e){throw new eE(`Failed to write token to macOS Keychain: ${ej(e)}`)}}async delete(e){try{await eb("security",["delete-generic-password","-a",e,"-s",e_])}catch(e){if(ex(e))return;throw new eE(`Failed to delete token from macOS Keychain: ${ej(e)}`)}}}class eC{async get(e){try{let{stdout:t}=await eb("secret-tool",["lookup","service",e_,"account",e]);return String(t).replace(/\n$/,"")}catch(e){if(ek(e))return;throw new eE(`Failed to read token from Secret Service: ${ej(e)}`)}}async set(e,t){try{var r,i,n;await (r="secret-tool",i=["store","--label","Doubao Open CLI token","service",e_,"account",e],n=t,new Promise((e,t)=>{let o=(0,z.spawn)(r,i,{stdio:["pipe","ignore","pipe"]}),a="";o.stderr.setEncoding("utf8"),o.stderr.on("data",e=>{a+=String(e)}),o.on("error",t),o.on("close",i=>{0===i?e():t(Error(a.trim()||`${r} exited with code ${i}`))}),o.stdin.end(n)}))}catch(e){throw new eE(`Failed to write token to Secret Service: ${ej(e)}`)}}async delete(e){try{await eb("secret-tool",["clear","service",e_,"account",e])}catch(e){if(ek(e))return;throw new eE(`Failed to delete token from Secret Service: ${ej(e)}`)}}}async function eT(e,t){let r=J.dirname(e);await X.promises.mkdir(r,{recursive:!0,mode:448}),"win32"!==process.platform&&await X.promises.chmod(r,448);let i=J.join(r,`.${J.basename(e)}.${process.pid}.${Date.now()}.tmp`);try{await X.promises.writeFile(i,t,{mode:384,flag:"wx"}),"win32"!==process.platform&&await X.promises.chmod(i,384),await X.promises.rename(i,e),"win32"!==process.platform&&await X.promises.chmod(e,384)}finally{try{await X.promises.unlink(i)}catch{}}}function ex(e){let t=eP(e),r=eU(e);return(1===t||44===t)&&(r.includes("could not be found")||r.includes("The specified item could not be found"))}function ek(e){let t=eP(e),r=eU(e);return 1===t&&(r.includes("could not be found")||r.includes("No matching items")||""===r.trim())}function eP(e){return"object"==typeof e&&null!==e&&"code"in e?e.code:void 0}function eU(e){return"object"==typeof e&&null!==e&&"stderr"in e?String(e.stderr??""):""}function eI(e){return e instanceof Error&&"code"in e}function ej(e){if("object"==typeof e&&null!==e&&"stderr"in e){let t=String(e.stderr??"").trim();if(t)return t}return e instanceof Error&&e.message?e.message:String(e)}class eD extends Error{constructor(e,t){super(e),this.code=t,this.name="AuthError"}}class eH extends eD{constructor(e="Not logged in"){super(e,"NOT_LOGGED_IN"),this.name="NotLoggedInError"}}class eM extends eD{constructor(e="Login token has expired"){super(e,"TOKEN_EXPIRED"),this.name="TokenExpiredError"}}class eN extends eD{constructor(e,t="DEVICE_AUTH_FAILED",r={}){super(e,t),this.name="DeviceAuthError",this.logId=r.logId}}function eR(e){let t=function(e){let t=e.split(".")[1];if(t)try{let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e.padEnd(e.length+(4-e.length%4)%4,"="),i=Buffer.from(r,"base64").toString("utf8"),n=JSON.parse(i);return n&&"object"==typeof n?n:void 0}catch{return}}(e),r=t?.uid??t?.sub;return"string"==typeof r&&r.length>0?r:"number"==typeof r&&Number.isFinite(r)?String(r):void 0}async function eB(e,t={}){let r,i=process.env.DBX_ACCESS_TOKEN?.trim()||void 0;if(i)return{accessToken:i,tokenType:"Bearer",expiresAt:0xf4865700,baseUrl:t.envTokenBaseUrl??""};let n=await eK(e);if(void 0===n)return eq(e,t);try{r=JSON.parse(n)}catch(e){return}if(eG(r)){if(!t.allowExpired&&eL(r))return void await eF(e,t);let i=await ez(t).get(r.credentialAccount);if(!i)throw new eE("Stored login metadata exists, but the token credential is missing or inaccessible. Run dbx auth login again from a terminal that can access the credential store.");return{accessToken:i,tokenType:r.tokenType,expiresAt:r.expiresAt,baseUrl:r.baseUrl}}if(eW(r))return!t.allowExpired&&eL(r)?void await eF(e,t):(await eV(e,r,t),r)}async function eV(e,t,r={}){let i={version:2,storage:"keychain",credentialAccount:eJ(e),tokenType:t.tokenType,expiresAt:t.expiresAt,baseUrl:t.baseUrl};await ez(r).set(i.credentialAccount,t.accessToken),await X.promises.mkdir(J.dirname(e),{recursive:!0,mode:448}),"win32"!==process.platform&&await X.promises.chmod(J.dirname(e),448);let n=`${e}.${process.pid}.${Date.now()}.tmp`;await X.promises.writeFile(n,`${JSON.stringify(i,null,2)}
|
|
25
25
|
`,{mode:384}),"win32"!==process.platform&&await X.promises.chmod(n,384),await X.promises.rename(n,e),"win32"!==process.platform&&await X.promises.chmod(e,384)}async function eF(e,t={}){let r=await eK(e);if(void 0!==r)try{let i=JSON.parse(r);eG(i)?await ez(t).delete(i.credentialAccount):await ez(t).delete(eJ(e))}catch{}try{await X.promises.unlink(e)}catch(e){if(!eX(e)||"ENOENT"!==e.code)throw e}}function eL(e,t=Math.floor(Date.now()/1e3)){return e.expiresAt<=t}function eW(e){return!!e&&"object"==typeof e&&"string"==typeof e.accessToken&&e.accessToken.length>0&&"string"==typeof e.tokenType&&e.tokenType.length>0&&"number"==typeof e.expiresAt&&Number.isFinite(e.expiresAt)&&"string"==typeof e.baseUrl&&e.baseUrl.length>0}function eG(e){return!!e&&"object"==typeof e&&2===e.version&&"keychain"===e.storage&&"string"==typeof e.credentialAccount&&e.credentialAccount.length>0&&"string"==typeof e.tokenType&&e.tokenType.length>0&&"number"==typeof e.expiresAt&&Number.isFinite(e.expiresAt)&&"string"==typeof e.baseUrl&&e.baseUrl.length>0}async function eK(e){try{return await X.promises.readFile(e,"utf8")}catch(e){eX(e)&&e.code;return}}async function eq(e,t){let r;if(!t.legacyTokenPath||J.resolve(t.legacyTokenPath)===J.resolve(e))return;let i=await eK(t.legacyTokenPath);if(void 0!==i){try{r=JSON.parse(i)}catch{return}if(eW(r))return!t.allowExpired&&eL(r)?void await eF(t.legacyTokenPath,t):(await eV(e,r,t),await eF(t.legacyTokenPath,t),r)}}function ez(e){let t;return e.credentialStore??(t=new eS,"darwin"===process.platform?new eA(new e$,t):"linux"===process.platform?new eA(new eC,t):t)}function eJ(e){let t=ew.createHash("sha256").update(J.resolve(e)).digest("hex").slice(0,32);return`token:${t}`}function eX(e){return e instanceof Error&&"code"in e}async function eY(t={}){let r=eg(t),i=r.fetch??fetch,n=r.sleep??e5,o=await e0(i,r.baseUrl,r.requestHeaders),a=e7(r.baseUrl,o.user_code);r.onVerification?.({userCode:o.user_code,verificationUrl:a,expiresIn:o.expires_in,interval:o.interval});let s=Math.max(1,o.interval),l=Date.now()+1e3*o.expires_in;for(;Date.now()<l;){await n(1e3*s);let t=await e1(i,r.baseUrl,o.device_code,r.requestHeaders);if(r.onPoll?.({status:t.status,interval:s}),t.status!==e.Pending){if(t.status===e.SlowDown){s+=Math.max(1,o.interval);continue}if(t.status===e.Expired)throw new eN("Device authorization expired","DEVICE_AUTH_EXPIRED");if(t.status===e.Invalid)throw new eN("Device authorization is invalid","DEVICE_AUTH_INVALID");if(t.status===e.Authorized){if(!t.access_token)throw new eN("Authorization response did not include an access token");let e=e6(t,r.baseUrl);return await eV(r.tokenPath,e,{credentialStore:r.credentialStore}),{accessToken:e.accessToken,tokenType:e.tokenType,expiresAt:e.expiresAt,baseUrl:e.baseUrl,uid:eR(e.accessToken),tokenPath:r.tokenPath}}throw new eN(`Unexpected authorization status: ${String(t.status)}`)}}throw new eN("Device authorization timed out","DEVICE_AUTH_EXPIRED")}async function eQ(e={}){let t=eg(e),r=t.fetch??fetch,i=await e0(r,t.baseUrl,t.requestHeaders),n=e7(t.baseUrl,i.user_code);return t.onVerification?.({userCode:i.user_code,verificationUrl:n,expiresIn:i.expires_in,interval:i.interval}),{userCode:i.user_code,deviceCode:i.device_code,verificationUrl:n,expiresIn:i.expires_in,interval:i.interval}}async function eZ(t,r={}){let i=eg(r),n=i.fetch??fetch,o=i.sleep??e5,a=i.baseUrl,s=i.requestHeaders,l=5,u=Date.now()+6e5;for(;Date.now()<u;){await o(1e3*l);let r=await e1(n,a,t,s);if(i.onPoll?.({status:r.status,interval:l}),r.status!==e.Pending){if(r.status===e.SlowDown){l+=5;continue}if(r.status===e.Expired)throw new eN("Device authorization expired","DEVICE_AUTH_EXPIRED");if(r.status===e.Invalid)throw new eN("Device authorization is invalid","DEVICE_AUTH_INVALID");if(r.status===e.Authorized){if(!r.access_token)throw new eN("Authorization response did not include an access token");let e=e6(r,a);return await eV(i.tokenPath,e,{credentialStore:i.credentialStore}),{accessToken:e.accessToken,tokenType:e.tokenType,expiresAt:e.expiresAt,baseUrl:e.baseUrl,uid:eR(e.accessToken),tokenPath:i.tokenPath}}throw new eN(`Unexpected authorization status: ${String(r.status)}`)}}throw new eN("Device authorization timed out","DEVICE_AUTH_EXPIRED")}async function e0(e,t,r){let i=await e(`${t}/app_developer/oauth/device/code`,{method:"POST",headers:e4(r),body:JSON.stringify({client_name:"dbx-cli"})}),n=await e2(i),o=e3(n);if(!o||!o.device_code||!o.user_code||"number"!=typeof o.expires_in||"number"!=typeof o.interval)throw new eN(`Device code response is malformed (HTTP ${i.status}): ${JSON.stringify(n)}`);return o}async function e1(t,r,i,n){let o=await t(`${r}/app_developer/oauth/token`,{method:"POST",headers:e4(n),body:JSON.stringify({device_code:i})}),a=await e2(o),s=e3(a);if(s?.access_token)return{status:e.Authorized,access_token:s.access_token,token_type:s.token_type,expires_in:s.expires_in,expires_at:s.expires_at};if(!s||"number"!=typeof s.status)throw new eN(`Token response is malformed (HTTP ${o.status}): ${JSON.stringify(a)}`);return s}async function e2(e){var t;let r,i=e.headers.get("x-tt-logid")??void 0;try{r=await e.json()}catch{throw new eN(`Auth server returned non-JSON response with status ${e.status}${e8(i)}`,"DEVICE_AUTH_FAILED",{logId:i})}let n=function(e){if(e&&"object"==typeof e)return"string"==typeof e.log_id&&e.log_id?e.log_id:void 0}(r)??i;if(!e.ok)throw new eN(`Auth server returned HTTP ${e.status}: ${JSON.stringify(r)}${e8(n)}`,"DEVICE_AUTH_FAILED",{logId:n});let o=(t=r)&&"object"==typeof t&&"number"==typeof t.code&&0!==t.code?{code:t.code,message:"string"==typeof t.message?t.message:"Unknown error",logId:"string"==typeof t.log_id?t.log_id:void 0}:null;if(o)throw new eN(`Auth server error (code ${o.code}): ${o.message}${e8(o.logId??n)}`,"DEVICE_AUTH_FAILED",{logId:o.logId??n});return r}function e8(e){return e?` [log_id: ${e}]`:""}function e3(e){return e&&"object"==typeof e&&"data"in e?e.data:e}function e4(e){let t=new Headers(e);return t.set("Content-Type","application/json"),t}function e6(e,t){let r=Math.floor(Date.now()/1e3);return{accessToken:e.access_token??"",tokenType:e.token_type??"Bearer",expiresAt:"number"==typeof e.expires_at?e.expires_at:r+(e.expires_in??0),baseUrl:t}}function e5(e){return new Promise(t=>{setTimeout(t,e)})}function e7(e,t){let r=new URL(e).host,i=new URL(`https://${r}/oauth/device`);return i.searchParams.set("user_code",t),i.toString()}async function e9(e={}){let t,r=eg(e);try{t=await eB(r.tokenPath,{envTokenBaseUrl:r.baseUrl,credentialStore:r.credentialStore,legacyTokenPath:r.legacyTokenPath})}catch(e){if(e instanceof eE)return{loggedIn:!1,tokenPath:r.tokenPath,baseUrl:r.baseUrl,credentialError:{code:"CREDENTIAL_STORE_UNAVAILABLE",message:e.message}};throw e}if(!t)return{loggedIn:!1,tokenPath:r.tokenPath};let i=await te(e.fetch??fetch,r.baseUrl,t,r.requestHeaders);return i?{loggedIn:!0,uid:i.userId,name:i.name,avatar:i.avatar,expiresAt:t.expiresAt,tokenPath:r.tokenPath,baseUrl:r.baseUrl}:{loggedIn:!1,expiresAt:t.expiresAt,tokenPath:r.tokenPath,baseUrl:r.baseUrl}}async function te(e,t,r,i){let n=new Headers(i);n.set("Authorization",`${r.tokenType||"Bearer"} ${r.accessToken}`);let o=await e(`${t.replace(/\/+$/,"")}/app_developer/api/user/basic`,{method:"GET",headers:n});if(!o.ok)return;let a=await o.json();if(0===a.code){var s;return{userId:"string"==typeof(s=a.data?.user_id)&&s.length>0?s:"number"==typeof s&&Number.isFinite(s)?String(s):void 0,name:a.data?.name,avatar:a.data?.avatar}}}async function tt(e={}){return eY(ta(e))}async function tr(e={}){return eQ(ta(e))}async function ti(e,t={}){return eZ(e,ta(t))}async function tn(e={}){return e9(ta(e))}function to(t){switch(t){case e.Pending:return"Waiting for authorization...";case e.SlowDown:return"Server requested slower polling; waiting longer...";case e.Authorized:return"Authorization completed.";case e.Expired:return"Authorization expired.";case e.Invalid:return"Authorization is invalid.";default:return`Authorization status: ${String(t)}`}}function ta(e){var t,r,i;let n,o=ei();return{...e,baseUrl:o.baseUrl,allowedOrigins:(t=o.allowedOrigins,[...new Set([...t??[],...e.allowedOrigins??[]])]),requestHeaders:(r=o.requestHeaders,i=e.requestHeaders,n=new Headers(r),i&&new Headers(i).forEach((e,t)=>{n.set(t,e)}),n)}}async function ts(){try{let e=await tn({fetch:(e,t)=>fetch(e,{...t,signal:AbortSignal.timeout(3e3)})});!n&&e.loggedIn&&e.uid&&(o=e.uid)}catch{}}async function tl(e){await tm({name:"cli_command",params:{...tf(e),cli_command:e.command,cli_output_mode:e.outputMode}})}async function tu(e){await tm({name:"cli_dev_action",params:{...tf(e),cli_action:e.action,cli_dev_session_id:e.devSessionId,cli_action_sequence:Math.max(1,Math.round(e.actionSequence))}})}async function tc(e,t){let r=performance.now();try{let i=await t();return await tu({...e,durationMs:performance.now()-r,status:"success"}),i}catch(t){throw await tu({...e,durationMs:performance.now()-r,error:t,status:tp(t)}),t}}async function td(){try{await n?.flush(3e3)}catch{}}function tp(e){let t=th(e);return"user_cancelled"===t?"cancelled":"timeout_error"===t?"timeout":"failed"}function th(e){let t=ec(e)?e:void 0,r=e instanceof Error?e.name.toLowerCase():"",i=(e instanceof Error?e.message:String(e)).toLowerCase(),n="string"==typeof t?.code?t.code.toLowerCase():"";return t?.exitCode===2||n.startsWith("commander.")?"usage_error":"aborterror"===r||/cancel(?:led|ed)|用户取消/.test(i)?"user_cancelled":/timeout|timed out|超时/.test(`${r} ${n} ${i}`)?"timeout_error":/auth|credential|login|access token|token (?:expired|invalid)|登录|鉴权|认证/.test(i)?"auth_error":/device|debug router|二维码|扫码|真机|设备连接/.test(i)?"device_connection_error":/econn|enet|enotfound|eai_again|fetch|network|socket|网络/.test(`${n} ${i}`)?"network_error":/enoent|eacces|eperm|enotdir|eisdir/.test(n)?"filesystem_error":/manifest|config|yaml|配置/.test(i)?"config_error":/validat|schema|invalid|校验|无效/.test(i)?"validation_error":/build|compile|rspack|构建|编译/.test(i)?"build_error":/dependency|module not found|package|依赖/.test(i)?"dependency_error":/service|daemon|moleculer|服务/.test(i)?"service_error":"unknown_error"}async function tm(e){if("test"!==process.env.NODE_ENV)try{n??=new I(o),await n.upload(e)}catch{}}function tf(e){var t;let r,i=function(){let e=process.env.npm_config_user_agent;if(!e)return{name:"unknown"};let[t=""]=e.split(" "),[r="unknown",i]=t.split("/"),n="npm"===r&&"exec"===process.env.npm_command?"npx":r;return{name:["npm","npx","pnpm"].includes(n)?n:"unknown",...i?{version:i}:{}}}();return{cli_status:e.status,cli_duration_ms:Math.max(0,Math.round(e.durationMs)),cli_version:ed,cli_package_name:eu,cli_run_env:process.env.CI?"ci":"local",cli_os_name:process.platform,cli_node_version:process.version,cli_package_manager:i.name,...e.appId?{cli_app_id:e.appId}:{},...i.version?{cli_package_manager_version:i.version}:{},...void 0!==e.error?{cli_error_type:e.errorType??th(e.error),cli_error_message:(r=(t=e.error)instanceof Error?t.message:String(t),(0,V.stripVTControlCharacters)(r||"Unknown error").split(process.cwd()).join("<project>").split((0,ep.homedir)()).join("<home>").replace(/([?&](?:access_?token|token|code)=)[^&\s]+/gi,"$1<redacted>").replace(/(authorization:\s*bearer\s+)\S+/gi,"$1<redacted>").slice(0,1024)),...e.errorStage?{cli_error_stage:e.errorStage}:{}}:{}}}(t=e||(e={}))[t.Pending=1]="Pending",t[t.Authorized=2]="Authorized",t[t.Expired=3]="Expired",t[t.Invalid=4]="Invalid",t[t.SlowDown=5]="SlowDown";let tg=u("node:url"),ty=(e,t)=>{let r=t_(tw(e));if("string"!=typeof r)throw TypeError(`${t} must be a string or a file URL: ${r}.`);return r},tw=e=>tb(e)?e.toString():e,tb=e=>"string"!=typeof e&&e&&Object.getPrototypeOf(e)===String.prototype,t_=e=>e instanceof URL?(0,tg.fileURLToPath)(e):e,tv=(e,t=[],r={})=>{let i=ty(e,"First argument"),[n,o]=y(t)?[[],t]:[t,r];if(!Array.isArray(n))throw TypeError(`Second argument must be either an array of arguments or an options object: ${n}`);if(n.some(e=>"object"==typeof e&&null!==e))throw TypeError(`Second argument must be an array of strings: ${n}`);let a=n.map(String),s=a.find(e=>e.includes("\0"));if(void 0!==s)throw TypeError(`Arguments cannot contain null bytes ("\\0"): ${s}`);if(!y(o))throw TypeError(`Last argument must be an options object: ${o}`);return[i,a,o]},tO=u("node:string_decoder"),{toString:tE}=Object.prototype,tA=e=>"[object Uint8Array]"===tE.call(e),tS=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),t$=new TextEncoder,tC=new TextDecoder,tT=e=>1===e.length&&tA(e[0])?e[0]:tk(tx(e)),tx=e=>e.map(e=>"string"==typeof e?t$.encode(e):e),tk=e=>{let t=new Uint8Array(tP(e)),r=0;for(let i of e)t.set(i,r),r+=i.length;return t},tP=e=>{let t=0;for(let r of e)t+=r.length;return t},tU=({templates:e,expressions:t,tokens:r,index:i,template:n})=>{if(void 0===n)throw TypeError(`Invalid backslash sequence: ${e.raw[i]}`);let{nextTokens:o,leadingWhitespaces:a,trailingWhitespaces:s}=tI(n,e.raw[i]),l=tH(r,o,a);if(i===t.length)return l;let u=t[i];return tH(l,Array.isArray(u)?u.map(e=>tM(e)):[tM(u)],s)},tI=(e,t)=>{if(0===t.length)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let r=[],i=0,n=tj.has(t[0]);for(let n=0,o=0;n<e.length;n+=1,o+=1){let a=t[o];if(tj.has(a))i!==n&&r.push(e.slice(i,n)),i=n+1;else if("\\"===a){let e=t[o+1];"\n"===e?(n-=1,o+=1):"u"===e&&"{"===t[o+2]?o=t.indexOf("}",o+3):o+=tD[e]??1}}let o=i===e.length;return o||r.push(e.slice(i)),{nextTokens:r,leadingWhitespaces:n,trailingWhitespaces:o}},tj=new Set([" "," ","\r","\n"]),tD={x:3,u:5},tH=(e,t,r)=>r||0===e.length||0===t.length?[...e,...t]:[...e.slice(0,-1),`${e.at(-1)}${t[0]}`,...t.slice(1)],tM=e=>{let t=typeof e;if("string"===t)return e;if("number"===t)return String(e);if(y(e)&&("stdout"in e||"isMaxBuffer"in e))return tN(e);if(e instanceof z.ChildProcess||"[object Promise]"===Object.prototype.toString.call(e))throw TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.");throw TypeError(`Unexpected "${t}" in template expression`)},tN=({stdout:e})=>{if("string"==typeof e)return e;if(tA(e))return tC.decode(e);if(void 0===e)throw TypeError('Missing result.stdout in template expression. This is probably due to the previous subprocess\' "stdout" option.');throw TypeError(`Unexpected "${typeof e}" stdout in template expression`)},tR=e=>tB.includes(e),tB=[p.stdin,p.stdout,p.stderr],tV=["stdin","stdout","stderr"],tF=e=>tV[e]??`stdio[${e}]`,tL=(e,t)=>{let r=Array.from({length:tW(e)+1});return tQ(tG(e[t],r,t),t)},tW=({stdio:e})=>Array.isArray(e)?Math.max(e.length,tV.length):tV.length,tG=(e,t,r)=>y(e)?tK(e,t,r):t.fill(e),tK=(e,t,r)=>{for(let i of Object.keys(e).sort(tq))for(let n of tJ(i,r,t))t[n]=e[i];return t},tq=(e,t)=>tz(e)<tz(t)?1:-1,tz=e=>"stdout"===e||"stderr"===e?0:"all"===e?2:1,tJ=(e,t,r)=>{if("ipc"===e)return[r.length-1];let i=tX(e);if(void 0===i||0===i)throw TypeError(`"${t}.${e}" is invalid.
|
package/dist/app.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{authorizedFetch as t,getApiUrl as o,configuredFetch as a}from"./2168.js";
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{authorizedFetch as t,getApiUrl as o,configuredFetch as a}from"./2168.js";let i="Doubao Agentic Service",n="doubao-agentic-service-development",r="doubao-agentic-service",p="doubao-agentic-service.zip";class s extends Error{operation;serviceCode;serviceMessage;httpStatus;logId;constructor(e){var t;super(void 0!==(t=e).httpStatus?`${t.operation} failed: HTTP ${t.httpStatus} ${t.httpStatusText??""}`.trim():void 0!==t.serviceCode?`${t.operation} failed: [${t.serviceCode}] ${t.serviceMessage??"unknown error"}`:`${t.operation} failed: ${t.serviceMessage??"unknown error"}`),this.name="GatewayResponseError",this.operation=e.operation,this.serviceCode=e.serviceCode,this.serviceMessage=e.serviceMessage,this.httpStatus=e.httpStatus,this.logId=e.logId}}async function d(e,t){let o=e.headers.get("x-tt-logid")??void 0;if(!e.ok)throw new s({operation:t,httpStatus:e.status,httpStatusText:e.statusText,logId:o});let a=await e.json();if("number"!=typeof a.code)throw new s({operation:t,serviceMessage:"invalid gateway response: missing numeric code",logId:a.log_id??o});if(0!==a.code)throw new s({operation:t,serviceCode:a.code,serviceMessage:a.message??"unknown error",logId:a.log_id??o});return a}let c=/^\d+\.\d+\.\d+$/;function u(e){let t=e?.trim();if(t){if(!c.test(t))throw Error(`--app-version-tag 的值 ${JSON.stringify(t)} 格式不正确。请使用三段由点分隔的纯数字,例如 1.2.3;不要添加 v 前缀或 -beta 等预发布后缀。`);return t}}async function l(e){return d(await t(o(`/app_developer/api/sandbox/app/get?sandbox_project_id=${encodeURIComponent(e)}`),{method:"GET"}),"Get sandbox app")}async function f(e,a,i="manifest"){return d(await t(o("/app_developer/api/yaml/verify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({yaml:e,mode:a,yaml_type:i})}),"Verify YAML")}async function v(e){let a=o(`/app_developer/api/apps/${encodeURIComponent(e)}/app_versions`);return d(await t(a,{method:"GET"}),"List mini app versions")}async function m(a){let{readFile:i}=await import("node:module").then(function(t){return e.t(t.createRequire(import.meta.url)("node:fs/promises"),22)}),n=await i(a.filePath),r=o(`/app_developer/api/apps/${encodeURIComponent(a.appKey)}/draft/upload?source_type=${a.sourceType}`);return d(await t(r,{method:"POST",headers:{"Content-Type":a.contentType??"application/zip","Content-Length":String(n.byteLength)},body:new Blob([n],{type:a.contentType??"application/zip"})}),"Upload agentic service version draft package")}async function g(e){let a=o(`/app_developer/api/apps/${encodeURIComponent(e.appKey)}/draft/source_code/upload/start`);return d(await t(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sha256:e.sha256})}),"Start agentic service version draft source code uploading")}async function h(e){let a=o(`/app_developer/api/apps/${encodeURIComponent(e.appKey)}/draft/source_code/upload/finish`);return d(await t(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({upload_token:e.uploadToken,size:e.size,sha256:e.sha256})}),"Finish agentic service version draft source code uploading")}async function y(t){let[{readFile:o},{createHash:i}]=await Promise.all([import("node:module").then(function(t){return e.t(t.createRequire(import.meta.url)("node:fs/promises"),22)}),import("node:module").then(function(t){return e.t(t.createRequire(import.meta.url)("node:crypto"),22)})]),n=await o(t.filePath),r=i("sha256").update(n).digest("hex"),p=(await g({appKey:t.appKey,sha256:r})).data;if(!p?.upload_url||!p.upload_token)throw Error("Start agentic service version draft source code uploading failed: missing upload session");let s=await a(p.upload_url,{method:"PUT",headers:p.upload_headers??{},body:new Blob([n])});if(!s.ok)throw Error(`Upload agentic service version draft source code to TOS failed: HTTP ${s.status} ${s.statusText}`);return h({appKey:t.appKey,uploadToken:p.upload_token,size:n.byteLength,sha256:r})}async function _(e,a={}){let i=u(a.appVersionTag),n=o(`/app_developer/api/apps/${encodeURIComponent(e)}/draft/submit`);return d(await t(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_config_version:process.env.PROJECT_CONFIG_VERSION,app_version_tag:i,dbx_version:"miniapp-version-v2"})}),"Submit agentic service version draft")}async function T(e,a){let i=o(`/app_developer/api/apps/${encodeURIComponent(e)}/app_versions/${encodeURIComponent(a)}/artifact`);return d(await t(i,{method:"GET"}),"Get agentic service version artifact")}export{i as AGENTIC_SERVICE_DISPLAY_NAME,n as AGENTIC_SERVICE_SKILL_NAME,r as DEFAULT_FRONTEND_DIRECTORY,p as FRONTEND_ARCHIVE_FILENAME,s as GatewayResponseError,T as getMiniAppVersionArtifact,l as getSandboxApp,v as listMiniAppVersions,u as normalizeAppVersionTag,_ as submitMiniAppVersionDraft,m as uploadMiniAppVersionDraftPackage,y as uploadMiniAppVersionDraftSourceCode,f as verifyYAML};
|
package/dist/init.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./ora.js";import"./yaml.js";import{auth_login as t,collectChoiceValues as r,version_version as i,command_Command as n,option_Option as s,types_TokenStatus as o,formatPollStatus as a,runCommand as l,getAuthStatus as p,execa as d}from"./2168.js";import{AGENTIC_SERVICE_SKILL_NAME as c,AGENTIC_SERVICE_DISPLAY_NAME as u,DEFAULT_FRONTEND_DIRECTORY as h}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./ora.js";import"./yaml.js";import{auth_login as t,collectChoiceValues as r,version_version as i,command_Command as n,option_Option as s,types_TokenStatus as o,formatPollStatus as a,runCommand as l,getAuthStatus as p,execa as d}from"./2168.js";import{AGENTIC_SERVICE_SKILL_NAME as c,AGENTIC_SERVICE_DISPLAY_NAME as u,DEFAULT_FRONTEND_DIRECTORY as h}from"./app.js";import{source as f}from"./4594.js";import{resolveProjectLayout as m}from"./project-layout.js";import{writeDbxConfig as g,updateDbxConfigSkills as _}from"./dbx.js";import{INIT_AGENT_IDS as y,selectInitAgents as b,selectGitInitialization as S,inputProjectDirectory as w}from"./prompts.js";import{fetchSandboxAppCredentials as v}from"./sandbox.js";import{installSkills as x}from"./skills~2.js";import{openUrlInBrowser as k}from"./browser.js";import{SUPPORTED_AGENTS as j}from"./skills~1.js";var $={};e.r($),e.d($,{default:()=>en});let E=e("node:fs");var A=e.n(E);let P=e("node:path");var C=e.n(P);let R=new Set(["node_modules",".git"]);async function N(e){var t;let r=e.appId.trim();if(!r)throw Error("frontend scaffold requires a sandbox AppID");let i=e.directory?.trim()||".",n=C().resolve(e.projectPath),s=C().resolve(n,i),o=(t=s,C().basename(t)||h),a=!!(e.overwriteExisting&&(0,E.existsSync)(s));a&&s!==n&&(e.onStatus?.("clearing_existing_directory"),function(e){if(!(0,E.statSync)(e).isDirectory())throw Error(`frontend scaffold target is not a directory: ${e}`);for(let t of(0,E.readdirSync)(e))R.has(t)||(0,E.rmSync)(C().join(e,t),{recursive:!0,force:!0});(0,E.mkdirSync)(e,{recursive:!0})}(s)),e.onStatus?.("creating_scaffold");let{create:l}=await import("./@byted-doubao-apps/create.js");return await l({template:"starter",projectDir:s,public:!0,appId:r,name:u,packageName:o,overwrite:!0,git:e.initializeGit??!1,login:!0}),{directory:i,path:s,app_id:r,template:"starter",package_name:o,overwritten:a}}let K=`这是一个豆包智能服务工程,请结合 ${c} Skill 进行开发`,I=e("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js");var U=e.n(I);class M{options;spinner;constructor(e){this.options=e}header(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold.cyan(e):`== ${e} ==`;this.options.log(t)}card(e,t){if(!this.options.enabled)return;let r=Math.max(...t.map(([e])=>e.length),0),i=[` ${e} `,...t.map(([e,t])=>` ${e.padEnd(r)} ${t} `)],n=Math.max(...i.map(e=>e.length)),s=`+${"-".repeat(n)}+`;for(let e of[s,...i.map((e,t)=>{let r=`${e}${" ".repeat(n-e.length)}`;return`|${0===t&&this.options.useSpinner?f.bold(r):r}|`}),s])this.options.log(this.options.useSpinner?f.cyan(e):e)}section(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold(e):e;this.options.log(t)}blank(){this.options.enabled&&this.options.log("")}info(e,t){this.options.enabled&&this.options.log(function(e,t,r){if(void 0===t)return` ${e}`;let i=r?f.cyan(e):e;return` ${i}: ${t}`}(e,t,this.options.useSpinner))}note(e){this.options.enabled&&this.options.log(` - ${e}`)}warn(e){this.options.enabled&&(this.stopActive(),this.options.warn(e))}startStep(e){if(this.options.enabled){if(this.stopActive(),this.options.useSpinner){this.spinner=U()({text:e,color:"cyan",stream:process.stderr}).start();return}this.options.log(T("run",e,this.options.useSpinner))}}updateStep(e){if(this.options.enabled){if(!this.spinner)return void this.options.log(T("run",e,this.options.useSpinner));this.spinner.text=e}}succeedStep(e){if(this.options.enabled){if(this.spinner){this.spinner.succeed(e),this.spinner=void 0;return}this.options.log(T("ok",e,this.options.useSpinner))}}warnStep(e){if(this.options.enabled){if(this.spinner){this.spinner.warn(e),this.spinner=void 0;return}this.options.warn(T("warn",e,this.options.useSpinner))}}failStep(e){if(this.options.enabled){if(this.spinner){this.spinner.fail(e),this.spinner=void 0;return}this.options.warn(T("fail",e,this.options.useSpinner))}}stopActive(){this.spinner&&(this.spinner.stop(),this.spinner=void 0)}}function O(){return!!(process.stderr.isTTY&&!process.env.CI)}function T(e,t,r){let i=`[${e}]`;if(!r)return` ${i} ${t}`;let n="ok"===e?f.green:"warn"===e?f.yellow:"fail"===e?f.red:f.cyan;return` ${n(i)} ${t}`}let D=e("node:util"),V=["@swc/core","@speedy-js/esbuild","core-js","crc64-ecma182.js","esbuild"],q=["@byted-lynx/js-check-"],H={commandVersion:async e=>(await d(e,["--version"],{env:process.env,stdio:["ignore","pipe","pipe"]})).stdout.trim(),pnpmInstall:async(e,t={})=>W(["install"],e,{streamOutput:t.streamOutput??!1}),pnpmApproveBuilds:async(e,t)=>W("all"===t?["approve-builds","--all"]:["approve-builds",...t],e,{streamOutput:!1})};async function z(e=H){try{return{version:await e.commandVersion("npm")}}catch{throw Error("npm not found in PATH. dbx init requires npm. Please install Node.js/npm and retry.")}}async function G(e=H){try{return{version:await e.commandVersion("pnpm")}}catch{throw Error("pnpm not found in PATH. dbx init requires pnpm. Install pnpm and retry.")}}async function F(e,t={}){let r=t.runner??H,i=t.autoApproveBuilds??"known",n=0;try{return n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!1,approved_builds:[]}}catch(a){let s;if(!1===i||!((s=Q(a)).includes("ERR_PNPM_IGNORED_BUILDS")||s.includes("Ignored build scripts:")))return Y(e,n,a);let o=function(e,t){var r;let i;if(t.pnpmVersion&&!L(t.pnpmVersion,"10.1.0"))return null;let n=(r=Q(e),(i=(0,D.stripVTControlCharacters)(r).match(/Ignored build scripts:\s*([\s\S]*?)(?:\n\s*\n|\nRun\s+"pnpm approve-builds"|$)/))?i[1].split(",").map(e=>(function(e){if(!e)return null;if(e.startsWith("@")){let t=e.indexOf("@",1);return t>0?e.slice(0,t):e}let t=e.lastIndexOf("@");return t>0?e.slice(0,t):e})(e.trim().replace(/[.。]$/,""))).filter(e=>!!e):[]),s="all-pending"===t.mode?n:n.filter(B);return s.length>0?[...new Set(s)]:"all-pending"===t.mode&&t.pnpmVersion&&L(t.pnpmVersion,"10.32.0")?"all":null}(a,{mode:i,pnpmVersion:t.pnpmVersion});if(!o)return Y(e,n,a);try{return await r.pnpmApproveBuilds(e,o),n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!0,approved_builds:"all"===o?["*"]:[...o]}}catch(t){return Y(e,n,t,{approvedBuilds:"all"===o?["*"]:[...o]})}}}function B(e){return V.includes(e)||q.some(t=>e.startsWith(t))}function L(e,t){let r=J(e),i=J(t);if(!r||!i)return!1;for(let e=0;e<r.length&&!(r[e]>i[e]);e+=1)if(r[e]<i[e])return!1;return!0}function J(e){let t=e.trim().match(/^v?(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Y(e,t,r,i={}){return{dependencies_installed:!1,install_attempts:t,recovered_from_ignored_builds:!1,approved_builds:i.approvedBuilds??[],install_warning:`pnpm install did not complete in ${e}: ${X(r)}`}}async function W(e,t,r){var i;let n=d("pnpm",[...e],{cwd:t,env:process.env,stdio:["ignore","pipe","pipe"],all:!0});return r.streamOutput&&n.all?.pipe(process.stderr),{stdout:(i=await n).stdout??"",stderr:i.stderr??"",all:i.all??[i.stdout,i.stderr].filter(Boolean).join("\n")}}function X(e){if(e&&"object"==typeof e&&"shortMessage"in e){let t=e.shortMessage;if("string"==typeof t&&t.length>0)return t}return e instanceof Error&&e.message?e.message:String(e)}function Q(e){let t=[X(e)];return e&&"object"==typeof e&&("string"==typeof e.all&&t.push(e.all),"string"==typeof e.stdout&&t.push(e.stdout),"string"==typeof e.stderr&&t.push(e.stderr)),t.filter(Boolean).join("\n")}let Z=e("node:url"),ee=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),et="__DBX_APP_KEY__";function er(e){let t=C().dirname((0,Z.fileURLToPath)(import.meta.url)),r=C().join(t,"templates",e);if(!A().existsSync(r))throw Error(`dbx init template not found: ${e}`);return A().readFileSync(r,"utf8")}let ei="项目文件夹名";function en(){return new n("init").description("创建一个新的 dbx 项目").argument("[directory]","要创建的新项目目录名").option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).addOption(new s("--agent <agent>","要初始化的 Agent,可重复传入;universal 会自动包含").default([]).argParser(r(y))).option("--no-install-deps","创建前端脚手架后不安装依赖").option("--git","在项目根目录初始化 Git 仓库").option("--schema","输出 dbx init 的机器可读参数契约;不执行初始化",!1).addHelpText("after",`
|
|
2
2
|
Examples:
|
|
3
3
|
${ea().map(e=>` ${e}`).join("\n")}`).action(async(e,t,r)=>l(r,r=>new es(r).run(e,t)))}class es{context;initReporter;constructor(e){this.context=e}jsonEnabled(){return this.context.json}log(e){this.context.log(e)}warn(e){this.context.warn(e)}async run(e,t){var r,n,s,o,a,l,p,d,c,u,h;let f,y,b,S,w,v,k,$;if(t.schema)return this.emitSchema();let P=!process.env.DBX_PROMPT_DISABLED&&!this.context.json&&process.stdin.isTTY&&process.stderr.isTTY,R=await eo(e,P);!function(e){try{(0,E.lstatSync)(e)}catch(e){var t;if("object"==typeof(t=e)&&null!==t&&"code"in t&&"ENOENT"===t.code)return;throw e}throw Error(`dbx init target directory already exists: ${e}. Choose a new directory name.`)}(R);let N={authMode:P?"login":"require",installFrontendDependencies:t.installDeps,yes:t.yes},I=await this.collectInitPlan(t,P);this.initReporter=new M({enabled:!this.jsonEnabled(),useSpinner:O(),log:e=>this.log(e),warn:e=>this.warn(e)}),this.jsonEnabled()||this.emitInitStart(R,I);try{let e;f=await this.ensureRequiredRuntime(),y=await this.ensureAuthenticated(N.authMode),b=await this.executeFrontendProjectPlan(R,I.frontend,N.installFrontendDependencies),this.reporter().startStep("project artifacts: ensuring manifest.yaml and runtime Skill layout"),S=function(e,t={}){let r=m(e,{kind:t.layout}),i=r.root,n=r.manifestPath,s=C().join(r.skillDirectory,"SKILL.md"),o=r.skillResolution;if("invalid"===o.layout)throw Error(o.error);let a={app_key:"",layout:r.kind,manifest_path:n,skill_path:s,created:[],preserved:[]};return A().existsSync(n)?(function(e,t){if(!A().statSync(e).isFile())throw Error(`project artifact path must be a file: ${t}`)}(n,"manifest.yaml"),a.app_key=function(e){var t;let r=ee.qg(A().readFileSync(e,"utf8")),i=(t=r,"object"!=typeof t||null===t||Array.isArray(t))?void 0:r.app_key;if("string"==typeof i&&i.trim())return i.trim();throw Error(`manifest app_key is required: ${e}`)}(n),a.preserved.push(C().relative(i,n))):(a.app_key=t.appKey?.trim()||"db_app_xxxxxx",A().mkdirSync(C().dirname(n),{recursive:!0}),A().writeFileSync(n,function(e){let t=er("manifest.yaml");if(2!==t.split(et).length)throw Error(`dbx init manifest template must contain exactly one ${et}`);return t.replace(et,JSON.stringify(e))}(a.app_key),"utf8"),a.created.push(C().relative(i,n))),"resolved"===o.layout?a.preserved.push(...o.entries.map(e=>C().relative(i,e.absolutePath))):(A().mkdirSync(C().dirname(s),{recursive:!0}),A().writeFileSync(s,er(C().join("skill","SKILL.md")),"utf8"),a.created.push(C().relative(i,s))),a}(R,{appKey:b.scaffold.app_id,layout:"root"}),this.reporter().succeedStep(`project artifacts: created ${S.created.length}, preserved ${S.preserved.length}`),e=C().resolve(R,"README.md"),A().writeFileSync(e,er("README.md"),"utf8"),this.reporter().startStep("project files: writing .dbx/config.json and AGENTS.md"),g(R,I.agents,{frontendDirectory:b.directory}),w=function(e){let t=C().resolve(e,"AGENTS.md");if(!(0,E.existsSync)(t))return(0,E.writeFileSync)(t,`${K}
|
|
4
4
|
`,"utf8"),{path:t,created:!0,updated:!1,already_present:!1};let r=(0,E.readFileSync)(t,"utf8");if(r.includes(K))return{path:t,created:!1,updated:!1,already_present:!0};let i=0===r.length||r.endsWith("\n")?"":"\n";return(0,E.writeFileSync)(t,`${r}${i}${K}
|
package/dist/upload.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import"./3768.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./2168.js";import{uploadMiniAppVersionDraftPackage as s,verifyYAML as a,submitMiniAppVersionDraft as o,uploadMiniAppVersionDraftSourceCode as l}from"./app.js";import{remoteFileName as
|
|
2
|
-
... output truncated ...`}let
|
|
3
|
-
${(
|
|
4
|
-
endpoint: ${
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import"./3768.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./2168.js";import{uploadMiniAppVersionDraftPackage as s,verifyYAML as a,submitMiniAppVersionDraft as o,uploadMiniAppVersionDraftSourceCode as l,normalizeAppVersionTag as p}from"./app.js";import{remoteFileName as u,sourceTypeForWorkspaceFileType as d,describeWorkspaceUpload as c,resolveAppKey as f}from"./workspace.js";import{requireRuntimeSkillEntries as _,resolveProjectLayout as m}from"./project-layout.js";import{miniAppVersionDetailUrl as h}from"./portal.js";var g={};e.r(g),e.d(g,{__testOnly:()=>en,default:()=>R,resolveBusinessTemplatesFile:()=>A});let y=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function v(e){if(!t(e))return;let r=t(e.mcp_server)?e.mcp_server:void 0,i=r?.end_point;return"string"==typeof i&&i.trim()?i:void 0}function w(e,t,r){return{checked:!0,endpoint:e,cloud_reachable:!1,reason:t,message:r}}function b(e){let t=e.split(".");if(4!==t.length)return;let r=t.map(e=>Number(e));if(!r.some(e=>!Number.isInteger(e)||e<0||e>255))return r}let E=e("node:fs"),k=e("node:util");async function I(e,t={}){let r=L(e),i={cwd:r};try{await S({action:"build",appDir:r,appId:t.appId})}catch(e){throw new $(r,e,i)}return i}async function U(e,t){let r=L(e),i={cwd:r,output_dir:t},n="";try{i.archive_path=n=(await S({action:"cloudPackage",appDir:r,outputDir:t})).archivePath||""}catch(e){throw new P(r,e,i)}if(!n)throw new P(r,Error("DoubaoAppsSDK.cloudPackage did not return an archive path"),i);return n}function L(e){if(!(0,E.existsSync)(e))throw Error(`frontend_code path not found: ${e}`);if((0,E.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);return(0,E.realpathSync)(e)}async function S(e){let r,i,n,s,a=process.cwd(),o={CI:process.env.CI,FORCE_COLOR:process.env.FORCE_COLOR,NO_COLOR:process.env.NO_COLOR},l=(r=[],i=[],n=process.stdout.write,s=process.stderr.write,process.stdout.write=C(r),process.stderr.write=C(i),{result(){let e=x({stdout:r.join(""),stderr:i.join("")});return{...e,...e.stdout||e.stderr?{output:M([e.stdout,e.stderr].filter(Boolean).join("\n"))}:{}}},restore(){process.stdout.write=n,process.stderr.write=s}});try{process.chdir(e.appDir),process.env.CI="true",process.env.FORCE_COLOR="0",process.env.NO_COLOR="1";let{DoubaoAppsSDK:t}=await import("./sdk.js"),r=new t(e.appDir);if("build"===e.action)return await r.build(e.appId?{appId:e.appId}:void 0),l.result();let i=await r.cloudPackage({outputDir:e.outputDir});return{...l.result(),archivePath:i}}catch(r){let e=l.result();throw t(r)&&Object.assign(r,e),r}finally{l.restore(),process.chdir(a),function(e){for(let[t,r]of Object.entries(e))void 0===r?delete process.env[t]:process.env[t]=r}(o)}}function C(e){return(t,r,i)=>{e.push("string"==typeof t?t:Buffer.from(t).toString("string"==typeof r?r:"utf8"));let n="function"==typeof r?r:i;return n?.(),!0}}function x(e){let t=M(e.stdout),r=M(e.stderr),i=M(e.output);return{...t?{stdout:t}:{},...r?{stderr:r}:{},...i?{output:i}:{}}}class $ extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=j(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=O(r?.output||s.output||o||a),p={code:"frontend_build_check_failed",cwd:r?.cwd||e,...void 0===s.exitCode?{}:{exit_code:s.exitCode},...s.signal?{signal:s.signal}:{},...s.shortMessage?{short_message:s.shortMessage}:{},...s.originalMessage?{original_message:s.originalMessage}:{},...l?{output:l}:{}};super((n=(i=p).output||i.stderr||i.stdout||i.short_message||i.original_message||"unknown build failure",["frontend build check failed",`cwd: ${i.cwd}`,"build output:",n].join("\n"))),this.name="FrontendBuildCheckError",this.details=p}}class P extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=j(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=O(r?.output||s.output||o||a),p={code:"frontend_package_failed",cwd:r?.cwd||e,output_dir:r?.output_dir??"",...r?.archive_path?{archive_path:r.archive_path}:{},...void 0===s.exitCode?{}:{exit_code:s.exitCode},...s.signal?{signal:s.signal}:{},...s.shortMessage?{short_message:s.shortMessage}:{},...s.originalMessage?{original_message:s.originalMessage}:{},...l?{output:l}:{}};super((n=(i=p).output||i.stderr||i.stdout||i.short_message||i.original_message||"unknown package failure",["frontend package failed",`cwd: ${i.cwd}`,"package output:",n].join("\n"))),this.name="FrontendPackageError",this.details=p}}function j(e){if(!t(e))return{output:String(e)};let r=x({stdout:e.stdout,stderr:e.stderr,output:e.all??e.output}),i=!!(r.stdout||r.stderr||r.output);return{exitCode:"number"==typeof e.exitCode?e.exitCode:void 0,signal:"string"==typeof e.signal?e.signal:void 0,shortMessage:i||"string"!=typeof e.shortMessage?void 0:e.shortMessage,originalMessage:"string"==typeof e.originalMessage?e.originalMessage:i||"string"!=typeof e.message?void 0:e.message,...r}}function M(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):"string"==typeof e?e:"";return(0,k.stripVTControlCharacters)(t).replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map(e=>e.trimEnd()).join("\n").trim()||void 0}function O(e){let t,r=M(e);if(!r)return;let i=(t=[r.search(/(^|\n)error\s+Build error:/i),r.search(/(^|\n)Build error:/i),r.search(/(^|\n)File:\s/i),r.search(/(^|\n)\s*[×x]\s+.*TS\d+:/i)].filter(e=>e>=0)).length>0?Math.min(...t):-1,n=i>=0?r.slice(i).trim():r;return n.length<=4e3?n:`${n.slice(0,4e3).trimEnd()}
|
|
2
|
+
... output truncated ...`}let F=e("node:path");function R(){return new i("upload").description("上传产物并触发云构建").option("--app-id <app-id>","兼容参数;必须与 manifest.app_key 一致").option("--app-version-tag <tag>","显式指定正式版本 Tag,格式为 x.y.z(例如 1.2.3)").option("--project <path>","项目路径;默认使用当前目录",".").option("--manifest <path>","manifest.yaml 路径;默认按项目布局自动解析").option("--skill <path>","Skill 目录路径;显式目录优先,相对路径按 --project 解析;未传默认 skill/,递归打包所有 SKILL.md").option("--frontend-code <path>","前端源码目录路径;默认按项目布局自动解析").option("--business-templates <path>","business-templates.yaml 路径;默认读取项目根目录同名文件").option("--business-templates-only","仅上传业务模板,不构建或提交其他产物",!1).option("--keep-packages","上传后保留本次打包生成的临时包,用于调试",!1).action(async(e,t)=>r(t,t=>z(t,e)))}async function z(e,r){let i=p(r.appVersionTag);if(r.businessTemplatesOnly&&i)throw Error("--app-version-tag cannot be used with --business-templates-only because this mode does not submit a version");let s=m(r.project),a=K(r.project,r.manifest,s.manifestPath),l=K(r.project,r.skill,s.skillDirectory),u=K(r.project,r.frontendCode,(0,F.resolve)(r.project,s.frontendDirectory)),d=f(r.project,r.appId,a);if(e.targetAppId=d,r.businessTemplatesOnly)return B(e,d,r);let c=r.keepPackages,_=W(),g="",k="",U="",L="",S=[],C=[];try{var x,$,P,j,M;let t,s,p,f=[],m=await I(u,{appId:d});P=a,j=_,et(P,"manifest"),t=(0,F.join)(j,"manifest.yaml"),(0,E.copyFileSync)(P,t),g=t,C.push(G({type:"manifest",file:g}));let O=await Z(g),R=A(r);R&&(L=N(R,_),C.push(G({type:"business_templates",file:L})));let z=L?await J(L):void 0;S=T(r.project,_),C.push(...S.map(G));let K=(x=(0,E.readFileSync)(g,"utf8"),$=O.manifest,(s=v(function(e){try{return y.qg(e)}catch{return}}(x))??v($))?function(e){let t,r=e.trim();try{t=new URL(r)}catch{return w(r,"invalid_url","manifest.mcp_server.end_point must be a valid http(s) URL.")}if("http:"!==t.protocol&&"https:"!==t.protocol)return w(r,"invalid_protocol","manifest.mcp_server.end_point must use http:// or https://.");let i=function(e){if(!e)return"empty_hostname";if("localhost"===e||e.endsWith(".localhost"))return"localhost";if(e.endsWith(".local")||e.endsWith(".lan")||e.endsWith(".internal"))return"private_hostname";if(!e.includes(".")&&!e.includes(":"))return"unqualified_hostname";let t=b(e)??function(e){let t="::ffff:";if(!e.startsWith(t))return;let r=e.slice(t.length),i=b(r);if(i)return i;let n=r.split(":");if(2!==n.length)return;let s=n.map(e=>Number.parseInt(e,16));if(s.some((e,t)=>!/^[0-9a-f]{1,4}$/i.test(n[t])||!Number.isInteger(e)||e<0||e>65535))return;let[a,o]=s;return[a>>8,255&a,o>>8,255&o]}(e);return t?function(e){let[t,r]=e;return 10===t?"private_ipv4":127===t?"loopback_ipv4":172===t&&r>=16&&r<=31||192===t&&168===r?"private_ipv4":169===t&&254===r?"link_local_ipv4":100===t&&r>=64&&r<=127?"carrier_grade_nat_ipv4":0===t?"reserved_ipv4":192===t&&0===e[1]&&2===e[2]||198===t&&51===e[1]&&100===e[2]||203===t&&0===e[1]&&113===e[2]?"documentation_ipv4":198===t&&(18===r||19===r)?"benchmark_ipv4":t>=224?"reserved_ipv4":void 0}(t):e.includes(":")?function(e){if("::1"===e||"0:0:0:0:0:0:0:1"===e)return"loopback_ipv6";let t=Number.parseInt(e.split(":")[0]||"0",16);if(Number.isFinite(t)){if((65024&t)==64512)return"unique_local_ipv6";if((65472&t)==65152)return"link_local_ipv6"}}(e):void 0}(t.hostname.replace(/^\[/,"").replace(/\]$/,"").toLowerCase());return i?w(r,i,"manifest.mcp_server.end_point points to a local or private network address that cloud build and real devices cannot reach."):{checked:!0,endpoint:r,cloud_reachable:!0}}(s):{checked:!1,cloud_reachable:!1,reason:"mcp_endpoint_missing",message:"manifest.mcp_server.end_point is missing"});if(K.checked&&!K.cloud_reachable&&process.stderr.write(`[WARNING]
|
|
3
|
+
${(p=K.endpoint??"(missing)",`manifest.mcp_server.end_point may not be reachable from cloud build or real devices.
|
|
4
|
+
endpoint: ${p}
|
|
5
5
|
reason: ${K.reason??"unknown"}
|
|
6
6
|
|
|
7
7
|
Impact:
|
|
@@ -10,5 +10,5 @@ Impact:
|
|
|
10
10
|
|
|
11
11
|
Action:
|
|
12
12
|
Set manifest.mcp_server.end_point to an http(s) MCP URL reachable from the cloud/device environment before release.`)}
|
|
13
|
-
`),
|
|
14
|
-
${["package sizes:",...r.map(e=>` ${e.type}: ${e.file_name} (${e.file_size_human})`)].join("\n")}`),i}(e,
|
|
13
|
+
`),f.push(await q(d,{type:"manifest",file:g})),L){let e={type:"business_templates",file:L};f.push(await q(d,e))}for(let e of S)f.push(await q(d,e));let B=await H(l,_);k=B.file,C.push(G({type:"skill",file:k}));let W=function(e,t){let r,i=(0,E.readFileSync)(e);if(i.byteLength<22||(r=i.readUInt32LE(0),0x4034b50!==r&&0x6054b50!==r&&0x8074b50!==r))throw Error(`invalid skill zip: ${e} is not a zip file`);let n=ei(i),s=t.map(e=>e.relativePath),a=s.filter(e=>!n.includes(e));if(a.length>0)throw Error(`invalid skill zip: missing discovered Skill entries: ${a.join(", ")}`);return{valid:!0,file_name:(0,F.basename)(e),skill_paths:s}}(k,B.skills);f.push(await q(d,{type:"skill",file:k})),U=await D(u,_),C.push(G({type:"frontend_code",file:U})),f.push(await q(d,{type:"frontend_code",file:U}));let V=await o(d,{appVersionTag:i}),Q=V.data?.version_tag||(M=f,M.find(e=>e.version_tag)?.version_tag??""),X={app_id:d,version_tag:Q,status:"submitted",submitted:!0,build_triggered:!0,uploaded_artifacts:f.map(e=>e.type),packages:C,business_template_sync_result:f.find(e=>"business_templates"===e.type)?.business_template_sync_result,next:{status_command:`dbx app artifacts status --app-id ${d} --version-tag ${Q} --poll`,version_detail_url:h(d,Q)},...c?{kept_packages:{temp_dir:_,manifest:g,skill_zip:k,frontend_code_zip:U,...L?{business_templates:L}:{},...Object.fromEntries(S.map(e=>[e.type,e.file]))}}:{},...e.debug?{debug:{frontend_build_check:m,manifest:O,...z?{business_templates:z}:{},skill:W,uploads:f,endpoints:{manifest_validate:{method:"POST",path:"/app_developer/api/yaml/verify"},upload:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/upload"},source_code_upload_start:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/source_code/upload/start"},source_code_tos_upload:{method:"PUT",path:"<upload_url>"},source_code_upload_finish:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/source_code/upload/finish"},submit:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/submit"}}}}:{},log_id:V.log_id??n()??""};for(let t of(e.log("artifacts uploaded and build triggered"),e.log(`app_id: ${d}`),e.log(`version_tag: ${Q}`),e.log(`status: ${X.status}`),e.log(`next: ${X.next.status_command}`),e.log(`version detail: ${X.next.version_detail_url}`),e.log("package sizes:"),C))e.log(` ${t.type}: ${t.file_name} (${t.file_size_human})`);return c&&e.log(`kept packages: ${_}`),X}catch(e){throw function(e,r){let i=e instanceof Error?e:Error(String(e));if(0===r.length)return i;let n=r.map(e=>({...e})),s=i.details;return i.details=t(s)?{...s,package_sizes:n}:{...void 0===s?{}:{cause:s},package_sizes:n},i.message.includes("package sizes:")||(i.message=`${i.message}
|
|
14
|
+
${["package sizes:",...r.map(e=>` ${e.type}: ${e.file_name} (${e.file_size_human})`)].join("\n")}`),i}(e,C)}finally{c||(0,E.rmSync)(_,{recursive:!0,force:!0})}}function K(e,t,r){return t?.trim()?(0,F.resolve)(e,t.trim()):r}async function B(e,t,r){let i=A(r);if(!i)throw Error(`business_templates file not found: ${(0,F.resolve)(r.project,"business-templates.yaml")}`);let s=W(),a=N(i,s);try{let i=await J(a),o=await q(t,{type:"business_templates",file:a}),l={app_id:t,status:"uploaded",submitted:!1,build_triggered:!1,uploaded_artifacts:[o.type],packages:[G({type:"business_templates",file:a})],business_template_validation:i,business_template_sync_result:o.business_template_sync_result,log_id:n()??"",...r.keepPackages?{kept_packages:{temp_dir:s,business_templates:a}}:{}};return e.log("business templates uploaded"),e.log(`app_id: ${t}`),l}finally{r.keepPackages||(0,E.rmSync)(s,{recursive:!0,force:!0})}}function N(e,t){et(e,"business_templates");let r=(0,F.join)(t,"business-templates.yaml");return(0,E.copyFileSync)(e,r),r}function T(e,t){let r=m(e);return[{type:"events",file:r.eventsPath},{type:"tools",file:r.toolsPath}].flatMap(e=>{if(!(0,E.existsSync)(e.file))return[];et(e.file,e.type);let r=(0,F.join)(t,u(e.type));return(0,E.copyFileSync)(e.file,r),[{type:e.type,file:r}]})}function A(e){if(e.businessTemplates){let t=(0,F.resolve)(e.project,e.businessTemplates.trim());return et(t,"business_templates"),t}let t=m(e.project).businessTemplatesPath;return(0,E.existsSync)(t)&&(0,E.statSync)(t).isFile()?t:""}async function H(e,t){let r=_(e),i=(0,F.join)(t,"skill.zip");return function(e,t){let r=[],i=[],n=0;for(let t of e){let e=t.data,s=Buffer.from(t.zipPath),a=function(e){let t=0xffffffff;for(let r of e)t=t>>>8^V[(t^r)&255];return(0xffffffff^t)>>>0}(e),o=Buffer.alloc(30);o.writeUInt32LE(0x4034b50,0),o.writeUInt16LE(20,4),o.writeUInt16LE(2048,6),o.writeUInt16LE(0,8),o.writeUInt16LE(0,10),o.writeUInt16LE(0,12),o.writeUInt32LE(a,14),o.writeUInt32LE(e.length,18),o.writeUInt32LE(e.length,22),o.writeUInt16LE(s.length,26),o.writeUInt16LE(0,28),r.push(o,s,e);let l=Buffer.alloc(46);l.writeUInt32LE(0x2014b50,0),l.writeUInt16LE(20,4),l.writeUInt16LE(20,6),l.writeUInt16LE(2048,8),l.writeUInt16LE(0,10),l.writeUInt16LE(0,12),l.writeUInt16LE(0,14),l.writeUInt32LE(a,16),l.writeUInt32LE(e.length,20),l.writeUInt32LE(e.length,24),l.writeUInt16LE(s.length,28),l.writeUInt16LE(0,30),l.writeUInt16LE(0,32),l.writeUInt16LE(0,34),l.writeUInt16LE(0,36),l.writeUInt32LE(0,38),l.writeUInt32LE(n,42),i.push(l,s),n+=o.length+s.length+e.length}let s=n,a=Buffer.concat(i),o=Buffer.alloc(22);o.writeUInt32LE(0x6054b50,0),o.writeUInt16LE(0,4),o.writeUInt16LE(0,6),o.writeUInt16LE(e.length,8),o.writeUInt16LE(e.length,10),o.writeUInt32LE(a.length,12),o.writeUInt32LE(s,16),o.writeUInt16LE(0,20),(0,E.writeFileSync)(t,Buffer.concat([...r,a,o]))}(r.map(e=>({zipPath:e.relativePath,data:Buffer.from(e.content)})),i),{file:i,skills:r}}async function D(e,t){if(function(e,t){if(!(0,E.existsSync)(e))throw Error(`${t} path not found: ${e}`)}(e,"frontend_code"),(0,E.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);let r=await U(e,t);return et(r,"frontend_code"),r}function W(){let e=(0,F.join)("/tmp","dbx","artifacts-upload");return(0,E.mkdirSync)(e,{recursive:!0}),(0,E.mkdtempSync)((0,F.join)(e,"upload-"))}let V=function(){let e=[];for(let t=0;t<256;t+=1){let r=t;for(let e=0;e<8;e+=1)r=1&r?0xedb88320^r>>>1:r>>>1;e[t]=r>>>0}return e}();async function q(e,t){if("frontend_code"===t.type){let r=await l({appKey:e,filePath:t.file});return{...c(t),source_type:d(t.type),version_tag:r.data?.version_tag??""}}let r=await s({appKey:e,sourceType:d(t.type),filePath:t.file,contentType:er(t.type)});return{...c(t),source_type:d(t.type),version_tag:r.data?.version_tag??"",business_template_sync_result:r.data?.business_template_sync_result}}function G(e){let t=c(e);return{type:t.type,file_name:t.file_name,file_size:t.file_size,file_size_human:function(e){let t=["B","KiB","MiB","GiB"],r=e,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return 0===i?`${e} B`:`${r>=10?r.toFixed(1):r.toFixed(2)} ${t[i]}`}(t.file_size)}}async function Z(e){return Q(e,"manifest","manifest")}async function J(e){return Q(e,"business templates","business_templates")}async function Q(e,t,r){let i=await a((0,E.readFileSync)(e,"utf8"),"strict",r),s=i.data,o={valid:!!s?.success,manifest:s?.manifest,errors:X(s?.errors??[]),warnings:X(s?.warnings??[]),log_id:i.log_id??n()??""};if(!o.valid)throw new Y(t,o);return{...o,valid:!0}}function X(e){return e.map(e=>({code:e.code,path:e.path,message:e.message}))}class Y extends Error{result;exitCode=1;logId;details;constructor(e,t){super(ee(e,t.errors)),this.result=t,this.logId=t.log_id,this.details=t}}function ee(e,t){return 0===t.length?`${e} validation failed`:[`${e} validation failed`,`${e} validation errors:`,...t.map(e=>` - [${e.code}] ${e.path}: ${e.message}`)].join("\n")}function et(e,t){if(!(0,E.existsSync)(e)||!(0,E.statSync)(e).isFile())throw Error(`${t} file not found: ${e}`)}function er(e){return"manifest"===e||"business_templates"===e?"application/x-yaml":"events"===e||"tools"===e?"application/json":"application/zip"}function ei(e){let t=function(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(0x6054b50===e.readUInt32LE(r))return r;return -1}(e);if(t<0)return[];let r=e.readUInt32LE(t+12),i=e.readUInt32LE(t+16),n=Math.min(e.length,i+r),s=[],a=i;for(;a+46<=n&&0x2014b50===e.readUInt32LE(a);){let t=e.readUInt16LE(a+28),r=e.readUInt16LE(a+30),i=e.readUInt16LE(a+32),n=a+46,o=n+t;s.push(e.toString("utf8",n,o)),a=o+r+i}return s}let en={contentTypeFor:er,ManifestValidationError:class extends Y{constructor(e){super("manifest",e)}},formatManifestValidationFailure:function(e){return ee("manifest",e)},prepareOptionalJsonArtifacts:T,listZipEntries:ei,prepareSkillZip:H};export{g as upload_namespaceObject};
|
package/dist/workspace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./yaml.js";import
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./yaml.js";import{FRONTEND_ARCHIVE_FILENAME as t}from"./app.js";import{resolveProjectLayout as r}from"./project-layout.js";import{isRecord as s}from"./2168.js";let i=e("node:crypto"),n=e("node:fs"),o=e("node:path"),a=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function p(e,t,s){let i=s??r(e).manifestPath;if(!(0,n.existsSync)(i)){if(t)return t;throw Error(`missing AppID: manifest file not found: ${i}`)}let o=l(i);if(t&&t!==o)throw Error(`AppID mismatch: --app-id is ${t}, but manifest.app_key is ${o}. Update the resolved Manifest; it is the single source of truth.`);return o}function l(e){let t;if(!(0,n.statSync)(e).isFile())throw Error(`missing AppID: manifest path is not a file: ${e}`);try{t=a.qg((0,n.readFileSync)(e,"utf8"))}catch(r){let t=r instanceof Error?r.message:String(r);throw Error(`invalid manifest.yaml: ${e}: ${t}`)}let r=s(t)?t.app_key:void 0;if("string"==typeof r&&r.trim())return r.trim();throw Error(`missing AppID: write app_key in ${e}`)}function m(e){let t=(0,n.readFileSync)(e.file),r=(0,n.statSync)(e.file);return{type:e.type,file:e.file,file_name:(0,o.basename)(e.file),file_size:r.size,sha256:(0,i.createHash)("sha256").update(t).digest("hex"),remote_file_name:_(e.type),replaced:!0}}function _(e){switch(e){case"manifest":return"manifest.yaml";case"skill":return"skill.zip";case"frontend_code":return t;case"business_templates":return"business-templates.yaml";case"events":return"events.json";case"tools":return"tools.json"}}function f(e){switch(e){case"manifest":return 2;case"skill":return 3;case"frontend_code":return 1;case"business_templates":return 4;case"events":return 5;case"tools":return 6}}export{m as describeWorkspaceUpload,l as readManifestAppKey,_ as remoteFileName,p as resolveAppKey,f as sourceTypeForWorkspaceFileType};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doubao-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"description": "Doubao Dev CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"node-loader": "2.1.0",
|
|
46
46
|
"rimraf": "5.0.10",
|
|
47
47
|
"typescript": "6.0.3",
|
|
48
|
-
"@byted-doubao-apps/cli": "0.0.
|
|
48
|
+
"@byted-doubao-apps/cli": "0.0.28"
|
|
49
49
|
},
|
|
50
50
|
"optionalDependencies": {
|
|
51
51
|
"@doubao-dev/security-tasm": "0.0.22",
|
|
@@ -651,6 +651,8 @@ dbx app artifacts upload \
|
|
|
651
651
|
|
|
652
652
|
该命令会校验 manifest、把 skill 目录临时打成 zip、调用前端打包命令生成源码包、上传三类必需产物,并在项目根目录存在 `events.json` 或 `tools.json` 时上传相应可选产物,最后触发云构建。临时产物会放在 `/tmp/dbx/artifacts-upload/upload-*`,上传完成或失败后由 CLI 清理。从输出中记录 `version_tag` 和 `log_id`。
|
|
653
653
|
|
|
654
|
+
如果用户显式指定正式版本 Tag,在命令中追加 `--app-version-tag <x.y.z>`。该值必须是 `1.2.3` 形式的三段纯数字,不能带 `v` 前缀或预发布后缀;未指定时不要代填。该 Tag 只随最终提交请求发送,不参与上传开始、TOS 上传或上传完成请求。
|
|
655
|
+
|
|
654
656
|
上传云构建前确认 `manifest.mcp_server.end_point` 是公网可访问 URL。若当前配置仍是本地或内网 endpoint,停止真实上传并要求用户提供可用于云构建的公网 MCP URL。
|
|
655
657
|
|
|
656
658
|
### 轮询构建状态
|
package/dist/agentic-service.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"node:module";let e="Doubao Agentic Service",E="doubao-agentic-service-development",o="doubao-agentic-service",i="doubao-agentic-service.zip";export{e as AGENTIC_SERVICE_DISPLAY_NAME,E as AGENTIC_SERVICE_SKILL_NAME,o as DEFAULT_FRONTEND_DIRECTORY,i as FRONTEND_ARCHIVE_FILENAME};
|