@doubao-dev/cli 0.0.25 → 0.0.27
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 +60 -0
- package/dist/{4091.js → 2611.js} +14 -14
- package/dist/275.js +25 -0
- package/dist/2932.js +1 -1
- package/dist/318.js +1 -1
- package/dist/3768.js +1 -0
- package/dist/3974.js +10 -10
- package/dist/4594.js +7 -0
- package/dist/4931.js +2 -2
- package/dist/{react.js → 6831.js} +1 -1
- package/dist/7410.js +1 -1
- package/dist/@byted-doubao-apps/create.js +1 -1
- package/dist/@byted-doubao-apps/login.js +1 -1
- package/dist/@byted-doubao-apps/login~1.js +1 -1
- package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
- package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
- package/dist/@byted-hdt/cli.js +1 -1
- package/dist/@inquirer/select.js +1 -1
- package/dist/agentic-service.js +1 -0
- package/dist/app.js +1 -1
- package/dist/assets/web-sdk-debugger/index.html +1 -1
- package/dist/assets/web-sdk-debugger/static/css/index.cc3b255797.css +1 -0
- package/dist/assets/web-sdk-debugger/static/js/index.1448a806d8.js +26 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
- package/dist/browser.js +1 -1
- package/dist/check.js +1 -0
- package/dist/dbx.js +2 -2
- package/dist/demo-server.js +3 -3
- package/dist/demo.js +2 -0
- package/dist/dev-config.js +2 -2
- package/dist/dev-service-client.js +1 -25
- package/dist/dev-shell.js +1 -1
- package/dist/dev.js +10 -10
- package/dist/gen-explore.js +1 -1
- package/dist/gen-trajectory.js +1 -1
- package/dist/get.js +1 -1
- package/dist/init.js +4 -4
- package/dist/ink.js +3 -3
- package/dist/json-file.js +1 -1
- package/dist/login.js +1 -1
- package/dist/main.js +1 -1
- package/dist/manifest-mcp-config.js +1 -1
- package/dist/ora.js +1 -1
- package/dist/portal.js +1 -1
- package/dist/project-layout.js +1 -1
- package/dist/prompt.js +7 -7
- package/dist/prompts.js +1 -1
- package/dist/report.js +1 -1
- package/dist/run-registry.js +1 -1
- package/dist/run.js +122 -122
- package/dist/sandbox.js +1 -1
- package/dist/scan.js +1 -1
- package/dist/sdk.js +20 -20
- package/dist/sdk~1.js +20 -20
- package/dist/server.js +4 -4
- package/dist/simulator-client.js +1 -1
- package/dist/skill.js +1 -1
- package/dist/skills.js +1 -1
- package/dist/skills~2.js +2 -2
- package/dist/status.js +2 -2
- package/dist/status~1.js +1 -1
- package/dist/stop.js +1 -1
- package/dist/templates/README.md +1 -1
- package/dist/update.js +1 -1
- package/dist/upgrade.js +1 -1
- package/dist/upload.js +6 -6
- package/dist/workspace.js +1 -1
- package/dist/yaml.js +2 -2
- package/package.json +2 -2
- package/skills/dbx-eval/SKILL.md +2 -2
- package/skills/doubao-agentic-service-development/SKILL.md +8 -8
- package/skills/doubao-agentic-service-development/references/auth.md +2 -2
- package/skills/doubao-agentic-service-development/references/business-template-debug.md +3 -3
- package/skills/doubao-agentic-service-development/references/dev-debug.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +175 -15
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/03-/350/207/252/345/256/232/344/271/211/351/200/232/344/277/241.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +221 -7
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +20 -20
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/12-/344/270/232/345/212/241/350/203/275/345/212/233.md +3 -4
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/25-/346/227/240/351/232/234/347/242/215.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/26-/345/237/272/347/241/200/344/277/241/346/201/257.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/28-/345/211/252/350/264/264/346/235/277.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/common-errors.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/groups.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/quick-reference.md +7 -3
- package/skills/doubao-agentic-service-development/references/frontend-dev.md +3 -3
- package/skills/doubao-agentic-service-development/references/generate-skill.md +1 -1
- package/skills/doubao-agentic-service-development/references/local-debug/simulator-eval.md +26 -22
- package/skills/doubao-agentic-service-development/references/manifest-guide.md +3 -3
- package/skills/doubao-agentic-service-development/references/mcp-protocol.md +1 -1
- package/skills/doubao-agentic-service-development/references/overview.md +2 -3
- package/skills/doubao-agentic-service-development/references/service-notice.md +1 -3
- package/skills/doubao-agentic-service-development/references/task-management.md +1 -3
- package/dist/1664.js +0 -66
- package/dist/assets/web-sdk-debugger/static/css/index.3fba1d83fd.css +0 -1
- package/dist/assets/web-sdk-debugger/static/js/index.c19e6628b4.js +0 -26
- package/dist/dbx-demo.js +0 -2
- package/dist/eval.js +0 -1
- package/dist/validate.js +0 -1
- /package/dist/{4091.js.LICENSE.txt → 2611.js.LICENSE.txt} +0 -0
- /package/dist/{dev-service-client.js.LICENSE.txt → 275.js.LICENSE.txt} +0 -0
- /package/dist/{react.js.LICENSE.txt → 6831.js.LICENSE.txt} +0 -0
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import{sanitizeProgressFailure as t,sanitizeDetailField as r}from"./3974.js";import{openUrlInBrowser as a}from"./browser.js";import{command_Command as s,runCommand as n}from"./2168.js";import{readJsonIfExists as i}from"./json-file.js";import{runFullPipeline as o,resolvePipelineRunConfig as l,configureEvalRunOptions as c,installTwoStageSignalHandler as d,progressFailure as p,EvalRunStoppedError as u,reapEvalDescendantsSync as m}from"./run.js";var h={};e.r(h),e.d(h,{__testOnly:()=>z,default:()=>R});class f{runId;skillName;outputDir;now;startedAt;phases=[];details=[];events=[];listeners=new Set;cases=[];status="initializing";finishedAt;error;report;totalCases=0;sequence=0;nextDetailId=1;constructor(e){this.runId=e.runId,this.skillName=e.skillName,this.outputDir=e.outputDir,this.now=e.now??(()=>new Date),this.startedAt=this.now().toISOString()}start(){}setStatus(e,t){if(this.status=e,this.error=t,"stopped"===e){let e=this.now().toISOString();for(let t of this.phases)if("running"===t.status)for(let r of(t.status="stopped",t.finishedAt=e,t.tasks))"running"===r.status&&(r.status="stopped",r.finishedAt=e)}("completed"===e||"failed"===e||"stopped"===e)&&(this.finishedAt=this.now().toISOString()),this.emit("run.status",{status:e,error:t})}setReport(e){this.report=e,this.emit("report.ready",{summary:e.summary})}getReport(){return this.report}phaseStart(e){let t=this.now().toISOString(),r=this.phases.find(t=>t.id===e.id);r?Object.assign(r,e,{status:"running",startedAt:t,finishedAt:void 0,summary:void 0,reason:void 0,hint:void 0}):this.phases.push({...e,status:"running",startedAt:t,tasks:[]}),this.emit("phase.started",{...e})}phaseDone(e,t={}){let r=this.requirePhase(e);r.status="done",r.finishedAt=this.now().toISOString(),r.summary=t.summary,this.emit("phase.completed",{id:e,...t})}phaseFail(e,r){let a=t(r),s=this.requirePhase(e);s.status="failed",s.finishedAt=this.now().toISOString(),s.reason=a.reason,s.hint=a.hint,this.emit("phase.failed",{id:e,...a})}taskStart(e){let t=this.requirePhase(e.phaseId),r=this.now().toISOString(),a=t.tasks.find(t=>t.id===e.id);a?Object.assign(a,e,{status:"running",startedAt:r,finishedAt:void 0,summary:void 0,reason:void 0,hint:void 0,metadata:void 0}):t.tasks.push({...e,status:"running",startedAt:r}),this.emit("task.started",{...e})}taskUpdate(e,t){let r=this.requireTask(e);t.label&&(r.label=t.label),t.technicalName&&(r.technicalName=t.technicalName),void 0!==t.metadata&&(r.metadata=structuredClone(t.metadata)),this.emit("task.updated",{id:e,...t})}taskDone(e,t={}){let r=this.requireTask(e);r.status="done",r.finishedAt=this.now().toISOString(),r.summary=t.summary,this.emit("task.completed",{id:e,...t})}taskFail(e,r){let a=t(r),s=this.requireTask(e);s.status="failed",s.finishedAt=this.now().toISOString(),s.reason=a.reason,s.hint=a.hint,this.emit("task.failed",{id:e,...a})}failActive(e){let r=t(e),a=[...this.phases].reverse().find(e=>"running"===e.status);if(!a)return;let s=[...a.tasks].reverse().find(e=>"running"===e.status);s&&(s.status="failed",s.finishedAt=this.now().toISOString(),s.reason=r.reason,s.hint=r.hint,this.emit("task.failed",{id:s.id,...r})),this.phaseFail(a.id,r)}detail(e){let t=(e.fields??[]).map(([e,t])=>r(e,t)),a={id:String(this.nextDetailId),timestamp:this.now().toISOString(),title:e.title,technicalName:e.technicalName,fields:t.map(([e,t])=>[e,function(e){let t;if("string"==typeof e)t=e;else if(void 0===e)t="-";else try{t=JSON.stringify(e)}catch{t=String(e)}let r=t.replace(/\s+/g," ").trim();return r.length<=500?r:`${r.slice(0,499)}…`}(t)])};this.nextDetailId+=1,this.details.push(a),this.details.length>100&&this.details.splice(0,this.details.length-100),this.emit("detail",a)}updateRun(e){void 0!==e.totalCases&&(this.totalCases=e.totalCases);let t={...e,cases:e.cases?.map(e=>({...e,intent:e.label}))};t.cases&&(this.cases=t.cases.map(e=>({...e}))),this.emit("run.updated",t)}stop(){}snapshot(){let e=this.caseSnapshots(),t=e.filter(e=>["passed","failed","stopped"].includes(e.status)),r=e.filter(e=>"passed"===e.status).length,a=this.finishedAt?new Date(this.finishedAt).getTime():this.now().getTime();return{runId:this.runId,skillName:this.skillName,outputDir:this.outputDir,status:this.status,startedAt:this.startedAt,finishedAt:this.finishedAt,elapsedMs:Math.max(0,a-new Date(this.startedAt).getTime()),error:this.error?{...this.error}:void 0,sequence:this.sequence,totalCases:this.totalCases,completedCases:t.length,passedCases:r,progress:this.progress(e),phases:this.phases.map(g),cases:e,details:this.details.map(v),reportAvailable:!!this.report,reportSummary:this.report?{...this.report.summary}:void 0}}eventsAfter(e){return 0===this.events.length||e>=this.sequence?[]:e<(this.events[0]?.sequence??this.sequence)-1?void 0:this.events.filter(t=>t.sequence>e).map(b)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emit(e,t){let r={sequence:++this.sequence,timestamp:this.now().toISOString(),type:e,payload:t&&"object"==typeof t?structuredClone(t):t};for(let e of(this.events.push(r),this.events.length>2e3&&this.events.splice(0,this.events.length-2e3),this.listeners))e(b(r))}caseSnapshots(){let e=new Map(this.phases.flatMap(e=>e.tasks).filter(e=>e.id.startsWith("rollout:")).map(e=>[e.id.slice(8),e]));return this.cases.map(t=>{let r=e.get(t.id);if(!r)return{...t,status:"stopped"===this.status?"stopped":"waiting"};if("failed"===r.status)return{...t,status:"failed",summary:r.reason};if("stopped"===r.status)return{...t,status:"stopped",summary:"Evaluation stopped"};if("done"===r.status){let e=r.summary?.startsWith("PASS")??!1;return{...t,status:e?"passed":"failed",summary:r.summary}}return{...t,status:"scorer"===r.technicalName?"scoring":"running",summary:r.label}})}progress(e){let t=0;for(let[r,a]of Object.entries({preflight:5,analysis:20,"case-generation":15,rollout:50,veto:5,report:5})){let s=this.phases.find(e=>e.id===r);if(s?.status==="done")t+=a;else if("rollout"===r&&(s?.status==="running"||s?.status==="stopped")){let r=e.filter(e=>["passed","failed"].includes(e.status)).length;t+=this.totalCases>0?a*(r/this.totalCases):0}}return Math.max(0,Math.min(100,Math.round(t)))}requirePhase(e){let t=this.phases.find(t=>t.id===e);if(!t)throw Error(`progress phase not found: ${e}`);return t}requireTask(e){let t=this.phases.flatMap(e=>e.tasks).find(t=>t.id===e);if(!t)throw Error(`progress task not found: ${e}`);return t}}function g(e){return{...e,tasks:e.tasks.map(e=>({...e,metadata:void 0===e.metadata?void 0:structuredClone(e.metadata)}))}}function v(e){return{...e,fields:e.fields.map(([e,t])=>[e,t])}}function b(e){return{...e,payload:e.payload&&"object"==typeof e.payload?structuredClone(e.payload):e.payload}}let x=e("node:crypto"),y=e("node:fs"),k=e("node:http"),w=e("node:path"),S=e("node:url"),C=new Set(["127.0.0.1","localhost","::1"]);async function I(e){var t,r,s;let n=function(e="127.0.0.1"){let t=e.trim().toLowerCase();if(!C.has(t))throw Error(`dbx eval server only accepts loopback hosts: ${[...C].join(", ")}`);return t}(e.host),i=function(e=0){if(!Number.isInteger(e)||e<0||e>65535)throw Error(`Invalid eval server port: ${e}`);return e}(e.port),o=e.controlToken??(0,x.randomBytes)(24).toString("hex"),l=function(e=15e3){if(!Number.isFinite(e)||!Number.isInteger(e)||e<1||e>3e4)throw Error(`Invalid eval server heartbeat interval: ${e}. Expected 1-30000ms.`);return e}(e.heartbeatIntervalMs);(0,y.mkdirSync)(e.outputDir,{recursive:!0});let c=(0,y.realpathSync)(e.outputDir),d=new Set,p=(0,x.randomBytes)(18).toString("base64"),u=e.openDirectory??(e=>a(e)),m=(0,k.createServer)((t,r)=>{T({request:t,response:r,hub:e.hub,outputRoot:c,controlToken:o,nonce:p,clients:d,heartbeatIntervalMs:l,onStop:e.onStop,openDirectory:u}).catch(e=>{r.headersSent?r.end():_(r,500,{error:e instanceof Error?e.message:String(e)})})});await (t=m,r=i,s=n,new Promise((e,a)=>{function n(e){t.removeListener("listening",i),a(e)}function i(){t.removeListener("error",n),e()}t.once("error",n),t.once("listening",i),t.listen(r,s)}));let h=m.address();if(!h||"string"==typeof h)throw await N(m),Error("Eval server did not expose a TCP address");let f="127.0.0.1"===n||"localhost"===n?"localhost":`[${h.address}]`;return{url:`http://${f}:${h.port}`,host:n,port:h.port,controlToken:o,async close(){for(let e of d)e.end();d.clear(),await N(m)}}}async function T(e){let{request:t,response:r,hub:a,outputRoot:s,controlToken:n,nonce:i,clients:o,heartbeatIntervalMs:l,onStop:c,openDirectory:d}=e,p=new URL(t.url??"/","http://localhost"),u=p.pathname;if("GET"===t.method&&"/"===u){var m,h;let e,t=(e=JSON.stringify((m={controlToken:n,nonce:i}).controlToken),`<!doctype html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
@@ -1203,10 +1203,10 @@ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";imp
|
|
|
1203
1203
|
reconcileTimer = setInterval(reconcile, RECONCILE_INTERVAL_MS);
|
|
1204
1204
|
</script>
|
|
1205
1205
|
</body>
|
|
1206
|
-
</html>`);r.writeHead(200,(h=i,{"Cache-Control":"no-store","Content-Security-Policy":`default-src 'self'; script-src 'nonce-${h}'; style-src 'nonce-${h}'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'`,"Content-Type":"text/html; charset=utf-8","Referrer-Policy":"no-referrer","X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY"})),r.end(t);return}if("GET"===t.method&&"/api/run"===u)return void
|
|
1206
|
+
</html>`);r.writeHead(200,(h=i,{"Cache-Control":"no-store","Content-Security-Policy":`default-src 'self'; script-src 'nonce-${h}'; style-src 'nonce-${h}'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'`,"Content-Type":"text/html; charset=utf-8","Referrer-Policy":"no-referrer","X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY"})),r.end(t);return}if("GET"===t.method&&"/api/run"===u)return void _(r,200,a.snapshot());if("GET"===t.method&&"/api/report"===u){let e=a.getReport();return e?void _(r,200,e):void _(r,404,{error:"report is not available"})}"GET"===t.method&&"/api/events"===u?function(e,t,r,a,s,n){var i;let o;e.socket.setKeepAlive(!0,n),e.socket.setNoDelay(!0),t.writeHead(200,{"Cache-Control":"no-cache, no-store",Connection:"keep-alive","Content-Type":"text/event-stream; charset=utf-8","X-Accel-Buffering":"no"}),t.write("retry: 1500\n\n"),a.add(t);let l=Number.isFinite(o=Number.parseInt((Array.isArray(i=e.headers["last-event-id"]??s??void 0)?i[0]:i)??"0",10))&&o>=0?o:0,c=r.eventsAfter(l);if(void 0===c)t.write("event: snapshot.required\ndata: {}\n\n");else for(let e of c)A(t,e);let d=r.subscribe(e=>A(t,e)),p=setInterval(()=>{t.destroyed||(t.write("event: heartbeat\n"),t.write(`data: ${JSON.stringify({timestamp:new Date().toISOString()})}
|
|
1207
1207
|
|
|
1208
|
-
`))},n);p.unref?.();let u=!1,m=()=>{u||(u=!0,clearInterval(p),d(),a.delete(t))};e.once("close",m),t.once("close",m),t.once("error",m)}(t,r,a,o,p.searchParams.get("lastEventId"),l):"POST"===t.method&&"/api/run/stop"===u?H(t,n)?(await c(),
|
|
1208
|
+
`))},n);p.unref?.();let u=!1,m=()=>{u||(u=!0,clearInterval(p),d(),a.delete(t))};e.once("close",m),t.once("close",m),t.once("error",m)}(t,r,a,o,p.searchParams.get("lastEventId"),l):"POST"===t.method&&"/api/run/stop"===u?H(t,n)?(await c(),_(r,202,{status:a.snapshot().status})):_(r,403,{error:"invalid control token"}):"POST"===t.method&&"/api/artifacts/open"===u?H(t,n)?(await d((0,S.pathToFileURL)(s).href),_(r,202,{opened:!0})):_(r,403,{error:"invalid control token"}):"GET"===t.method&&u.startsWith("/artifacts/")?function(e,t,r){let a,s;try{a=decodeURIComponent(r)}catch{_(e,400,{error:"invalid artifact path encoding"});return}if(!a||a.includes("\0"))return _(e,400,{error:"invalid artifact path"});let n=(0,w.resolve)(t,a);if(!E(t,n)||!(0,y.existsSync)(n))return _(e,404,{error:"artifact not found"});try{s=(0,y.realpathSync)(n)}catch{_(e,404,{error:"artifact not found"});return}if(!E(t,s))return _(e,403,{error:"artifact path escapes output directory"});let i=(0,y.statSync)(s);i.isFile()?(e.writeHead(200,{"Cache-Control":"no-store","Content-Length":i.size,"Content-Type":function(e){switch((0,w.extname)(e).toLowerCase()){case".html":return"text/html; charset=utf-8";case".json":return"application/json; charset=utf-8";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".svg":return"image/svg+xml";case".log":case".txt":return"text/plain; charset=utf-8";default:return"application/octet-stream"}}(s),"X-Content-Type-Options":"nosniff"}),(0,y.createReadStream)(s).pipe(e)):_(e,404,{error:"artifact is not a file"})}(r,s,u.slice(11)):_(r,404,{error:"not found"})}function A(e,t){e.destroyed||(e.write(`id: ${t.sequence}
|
|
1209
1209
|
`),e.write(`event: ${t.type}
|
|
1210
1210
|
`),e.write(`data: ${JSON.stringify(t)}
|
|
1211
1211
|
|
|
1212
|
-
`))}function E(e,t){let r=(0,w.relative)(e,t);return""===r||!r.startsWith(`..${w.sep}`)&&".."!==r}function H(e,t){let r=e.headers["x-dbx-run-token"],a=Array.isArray(r)?r[0]:r;if(!a)return!1;let s=Buffer.from(a),n=Buffer.from(t);return s.length===n.length&&(0,x.timingSafeEqual)(s,n)}function
|
|
1212
|
+
`))}function E(e,t){let r=(0,w.relative)(e,t);return""===r||!r.startsWith(`..${w.sep}`)&&".."!==r}function H(e,t){let r=e.headers["x-dbx-run-token"],a=Array.isArray(r)?r[0]:r;if(!a)return!1;let s=Buffer.from(a),n=Buffer.from(t);return s.length===n.length&&(0,x.timingSafeEqual)(s,n)}function _(e,t,r){e.writeHead(t,{"Cache-Control":"no-store","Content-Type":"application/json; charset=utf-8","X-Content-Type-Options":"nosniff"}),e.end(JSON.stringify(r))}function N(e){return e.listening?new Promise((t,r)=>{e.close(e=>{e?r(e):t()})}):Promise.resolve()}function R(){return c(new s("server").description("Run one evaluation with a live localhost progress and report page")).option("--host <host>","Loopback host","127.0.0.1").option("--port <port>","Local server port (defaults to an available port)").option("--no-open","Do not open the browser automatically",!0).action(async(e,t)=>n(t,async r=>{let s=await l(e,t,["host","port","open"]);r.targetAppId=s.app.appId,e.resume||r.log("评测配置已加载");let n=new f({runId:s.runId,skillName:s.skill.name,outputDir:s.outputDir}),i=new AbortController,c=()=>{let e=n.snapshot().status;"stopping"!==e&&"stopped"!==e&&"completed"!==e&&"failed"!==e&&(n.setStatus("stopping"),i.abort(new u))},d=await I({hub:n,outputDir:s.outputDir,host:e.host,port:L(e.port),onStop:c});if(r.log(`DBX Eval Web: ${d.url}`),r.log("评测产物将保存到项目输出目录"),r.log("Stop server: Ctrl+C"),M(e.open))try{await a(d.url)}catch(e){r.warn(`Unable to open browser automatically: ${e.message}. Open ${d.url} manually.`)}n.setStatus("running");let p=o(s,{progress:n,signal:i.signal}).then(e=>{n.setReport(e),n.setStatus("completed")}).catch(e=>{e instanceof u||i.signal.aborted?n.setStatus("stopped"):(n.setStatus("failed",O(e,s.outputDir)),process.exitCode=1)});await D({requestStop:c,pipelineSettled:p,closeServer:()=>d.close(),status:()=>n.snapshot().status})}))}function L(e){if(void 0===e||""===e.trim())return 0;if(!/^\d+$/.test(e.trim()))throw Error(`Invalid --port "${e}". Expected an integer.`);let t=Number.parseInt(e,10);if(!Number.isInteger(t)||t<0||t>65535)throw Error(`Invalid --port "${e}". Expected 0-65535.`);return t}function M(e){return!1!==e}function O(e,t){let r=p(e);if(!t)return r;let a=i((0,w.join)(t,"failure.json"));return a?{...r,reason:P(a.message)||r.reason,hint:a.hint||r.hint,errorType:a.error_type||r.errorType,backend:a.backend||r.backend,transport:a.transport||r.transport,httpStatus:a.http_status??r.httpStatus,code:a.code||r.code,logId:a.log_id||r.logId,retryable:a.retryable??r.retryable,attempts:a.attempts??r.attempts,partialContentReceived:a.partial_content_received??r.partialContentReceived,streamEvent:a.stream_event||r.streamEvent}:r}function P(e){if(!e?.trim())return"";let t=e.replace(/\s+/g," ").trim();return t.length>240?`${t.slice(0,237)}...`:t}async function D(e){let t,r=new Promise(e=>{t=e}),a=d({abortController:{abort:e.requestStop},onFirstSignal:r=>{process.exitCode=r,e.pipelineSettled.then(()=>e.closeServer()).finally(()=>t?.())},forceExit:e=>{m(),process.exit(e)}});try{await r}finally{a.dispose(),await e.closeServer().catch(()=>void 0)}}let z={failureFromError:O,parsePort:L,shouldOpenBrowser:M,summarizeFailureReason:P};export{h as server_namespaceObject};
|
package/dist/simulator-client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{configuredFetch as t,http_getApiBaseUrl as e}from"./
|
|
1
|
+
import"node:module";import{configuredFetch as t,http_getApiBaseUrl as e}from"./2168.js";async function r(r){var _,d,c;let p,u={requestID:"",answer:"",toolCalls:[],cards:[],traceEvents:[],streamErrors:[]},m=await t(`${s(r.gatewayOrigin||e())}/app_developer/simulator/chat`,{method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream"},body:JSON.stringify((_=r.evalCase,d=r.manifestYAML,c=r.mcp,p=_.app_name||_.app_key,{app_id:_.app_key,scene:"dbx_simulator_eval",history_messages:_.history_messages??[],message:{role:"USER",content:_.query},client:{platform:"cli",locale:"zh-CN",timezone:new Intl.DateTimeFormat().resolvedOptions().timeZone||"Asia/Shanghai"},ext:{dbx_simulator_eval:"true",stateless_context:"client_history"},max_step:_.max_step??15,mini_apps:[{app_key:_.app_key,app_name:p,skills:_.skills,manifest:{app_key:_.app_key,app_name:p,raw_manifest_yaml:d},mcp_servers:[{server_id:_.mcp?.server_id||c.server_id,name:_.mcp?.name||c.name,description:_.mcp?.description||c.description||"",tools:c.tools}]}],web_capabilities:{supports_debug_event:!0}}))});if(u.logID=m.headers.get("x-tt-logid")||void 0,!m.ok||!m.body)throw await m.body?.cancel(),new i(`chat failed: HTTP ${m.status}`,u.logID);try{await o(m.body,async t=>{var e,o,s,i,n;let _,d,c;if(e=u,o=t,o?.ack?.request_id&&(e.requestID=o.ack.request_id),o?.request_id&&!e.requestID&&(e.requestID=o.request_id),o?.trace?.trace_id&&(e.traceID=o.trace.trace_id),t?.text_delta?.delta&&(u.answer+=String(t.text_delta.delta)),t?.trace_event&&u.traceEvents.push({name:(s=t.trace_event).name,status:s.status,summary:s.summary,tool_name:s.tool_name,error:s.error}),t?.card_delta&&u.cards.push((_=(i=t.card_delta).card||{},c=(d=function(t){if("string"==typeof t)try{return JSON.parse(t)}catch{return}}(_.props_json)||{}).extra||{},{widget_id:d.widget_id,entity_id:d.entity_id,template:c["doubao/outputTemplate"],card_id:i.card_id||_.card_id,card_type:_.card_type})),t?.stream_error&&u.streamErrors.push(t.stream_error),t?.tool_call){let e=(n=t.tool_call,{tool_call_id:String(n.tool_call_id||""),tool_name:String(n.tool_name||""),server_id:n.server_id,app_key:n.app_key,arguments_json:n.arguments_json,status:n.status});try{let t=await r.callbacks.onToolCall(e,u.requestID),o=await a({gatewayOrigin:r.gatewayOrigin,requestID:u.requestID,traceID:u.traceID,toolCall:e,result:t});u.toolCalls.push({toolCall:e,result:t,report:o}),r.callbacks.onToolReported?.(e,o)}catch(t){u.toolCalls.push({toolCall:e}),u.streamErrors.push({code:"tool_call_or_report_failed",message:t?.message||String(t),tool_name:e.tool_name,tool_call_id:e.tool_call_id,log_id:l(t,"logId")||l(t,"log_id")})}}})}catch(e){let t=new n(e?.message||String(e),u,u.logID);throw t.cause=e,t}return u}async function a(r){let a=Date.now(),o=await t(`${s(r.gatewayOrigin||e())}/app_developer/simulator/tool/report`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({request_id:r.requestID,tool_call_id:r.toolCall.tool_call_id,server_id:r.toolCall.server_id||"",tool_name:r.toolCall.tool_name,status:"SUCCESS",app_key:r.toolCall.app_key,result:{tool_call_id:r.toolCall.tool_call_id,content:r.result.content||"",structured_json:JSON.stringify(r.result.structured||{})},raw_result_text:r.result.raw_result_text||r.result.content||"",raw_mcp_result_json:r.result.raw_mcp_result_json||"",miniapp:r.result.miniapp,timing:{started_at_ms:a,ended_at_ms:Date.now(),duration_ms:Date.now()-a,attempt:1},trace:{trace_id:r.traceID,component:"dbx_simulator_eval",stage:"tool_report",sampled:!0},ext:{reported_by:"dbx_simulator_eval"}})}),l=await o.text();if(!o.ok)throw new i(`tool report failed: HTTP ${o.status}`,o.headers.get("x-tt-logid")||void 0);return l?JSON.parse(l):{}}async function o(t,e){let r=t.getReader(),a=new TextDecoder,o="";for(;;){let{done:t,value:s}=await r.read();if(t)break;let l=(o+=a.decode(s,{stream:!0})).split("\n\n");for(let t of(o=l.pop()||"",l)){let r=function(t){let e=t.split(/\r?\n/).filter(t=>t.startsWith("data:")).map(t=>t.slice(5).trimStart()).join("\n");if(e)try{return JSON.parse(e)}catch(t){throw Error(`invalid simulator SSE data: ${t?.message||String(t)}`)}}(t);r&&await e(r)}}}function s(t){return t.replace(/\/+$/,"")}function l(t,e){if("object"!=typeof t||null===t||Array.isArray(t))return;let r=t[e];return"string"==typeof r&&r?r:void 0}class i extends Error{logId;constructor(t,e){super(t),this.logId=e}}class n extends Error{state;logId;cause;constructor(t,e,r){super(t),this.state=e,this.logId=r}}export{i as SimulatorHTTPError,n as SimulatorStreamError,r as runSimulatorStream};
|
package/dist/skill.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./3768.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as r}from"./2168.js";import{updateDbxConfigSkills as i}from"./dbx.js";import{selectInitAgents as n,INIT_AGENT_IDS as a}from"./prompts.js";import{installSkillsToRoots as _,listBundledSkills as c}from"./skills~2.js";import{scanInstalledSkillRoots as S}from"./scan.js";import{SUPPORTED_AGENTS as g}from"./skills~1.js";let k=t("node:path"),p="dbx-eval",d={listBundledSkills:c,scanInstalledSkillRoots:S,installSkillsToRoots:_,updateDbxConfigSkills:i,selectAgents:n,isInteractive:()=>!!process.stdin.isTTY&&!!process.stderr.isTTY};async function f(t,l,o=d){var s,r,i;let n=(0,k.resolve)(t.projectPath),a=o.listBundledSkills();a.includes(p)||l.error(`当前 CLI 未打包 ${p} Skill,无法补装。请升级或重新安装 dbx CLI。`);let _=o.scanInstalledSkillRoots(n,a),c=_.length>0,S=c?(s=_,r=t,i=l,r.agent.length>0&&i.warn("检测到已初始化的 Skill 目录,将向全部已发现目录补装 dbx-eval;--agent 不生效。"),{targetRoots:s,skillNames:[p]}):await m(n,t,l,o),g=await o.installSkillsToRoots({targetRoots:S.targetRoots,skillNames:S.skillNames,cwd:n,cliVersion:e,yes:t.yes});return o.updateDbxConfigSkills(n,g.skillNames,{source:"bundled",skillsVersion:g.skillsVersion,cliVersion:e}),function(t,e){if(t.json)return;let l="backfill"===e.branch?`已为存量项目补装 ${p}`:"已完成 Skill 初始化";for(let o of(t.log(l),t.log(`project: ${e.projectPath}`),t.log(`skills: ${e.skillNames.join(", ")}`),t.log("targets:"),e.targetRoots))t.log(` - ${o}`)}(l,{projectPath:n,branch:c?"backfill":"first-install",targetRoots:S.targetRoots,skillNames:g.skillNames}),{success:!0,branch:c?"backfill":"first-install",project_path:n,target_roots:S.targetRoots,skills:g.skillNames,skills_version:g.skillsVersion,hosted_root:g.hostedRoot}}async function m(t,e,l,o){let s,r=function(t){let e=Array.from(new Set(t.map(t=>t.trim()).filter(Boolean)));if(0===e.length)return;let l=new Set(a),o=e.filter(t=>!l.has(t));if(o.length>0)throw Error(`不支持的 Agent: ${o.join(", ")}。支持: ${a.join(", ")}。`);return u(e)}(e.agent);return r?s=r:o.isInteractive()?s=u(await o.selectAgents()):l.error("当前项目尚未初始化 Skill,且处于非交互环境。请通过 --agent <id> 指定目标 Agent。"),{targetRoots:s.map(t=>{let e=g.find(e=>e.id===t);return e?.projectPath??""})}}function u(t){return Array.from(new Set(["universal",...t]))}export default function(){return new o("skill").description("为存量项目补装 dbx-eval Skill;未初始化时按选择的 Agent 安装全部内置 Skills").option("--project-path <path>","dbx project path",".").addOption(new s("--agent <agent>","未初始化项目要安装的 Agent,可重复传入;universal 会自动包含").default([]).argParser(r(a))).option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).action(async(t,e)=>l(e,e=>f(t,e)))};export{f as executeEvalSkill};
|
package/dist/skills.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as s}from"./rslib-runtime.js";import{version_version as o,command_Command as
|
|
1
|
+
import"node:module";import{__webpack_require__ as s}from"./rslib-runtime.js";import"./3768.js";import{version_version as o,command_Command as r,runCommand as l}from"./2168.js";import{updateDbxConfigSkills as t,readDbxConfig as e}from"./dbx.js";import{installSkillsToRoots as i,listBundledSkills as _}from"./skills~2.js";import{scanInstalledSkillRoots as n}from"./scan.js";import{SUPPORTED_AGENTS as m}from"./skills~1.js";let a=s("node:fs");async function c(s){let o=process.cwd();if(!a.existsSync(".dbx/config.json"))return;let r=e(o),l=_(),c=m.find(s=>s.host===r.host),S=await i({targetRoots:[".agents/skills/",...c?[c.projectPath]:[],...n(o,l)],cwd:o,cliVersion:s,yes:!0});return t(o,S.skillNames,{source:"bundled",skillsVersion:S.skillsVersion,cliVersion:s}),S}export default function(){return new r("skills").description("管理内置开发 skills").addCommand(new r("sync").description("同步内置开发 skills").action(async(s,r)=>l(r,async s=>{let r=await c(o);return r?r.skillNames.length?(s.log(`已同步 ${r.skillNames.length} 个内置开发 skill。`),{skills:r.skillNames}):s.error("未找到内置开发 Skill。"):s.error("当前目录不是 dbx 项目。")})))};export{c as syncProjectSkills};
|
package/dist/skills~2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./
|
|
2
|
-
原因: ${r.message}`:"";super(`${e}${t}`),this.cause=r,this.name="SkillsInstallError"}}let
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import{SUPPORTED_AGENTS as r}from"./skills~1.js";let t=e("node:path");var n=e.n(t);let i=e("node:url"),l=n().dirname((0,i.fileURLToPath)(import.meta.url)),o=n().resolve(l,"../skills"),s=e("node:fs"),c=e("node:os");class a extends Error{cause;constructor(e,r){let t=r?`
|
|
2
|
+
原因: ${r.message}`:"";super(`${e}${t}`),this.cause=r,this.name="SkillsInstallError"}}let u=".dbx",f="skills";function S(){return s.existsSync(o)?s.readdirSync(o).filter(e=>{let r=t.join(o,e);return s.statSync(r).isDirectory()&&s.existsSync(t.join(r,"SKILL.md"))}).sort():[]}function h(e){let r,n,i,l=(r=g(e),n=t.join(c.homedir(),u,f,"versions",g(e)),0===(i=S()).length||p(o,n),{skillNames:i,bundledRoot:o,hostedRoot:n,skillsVersion:r}),s=t.join(c.homedir(),u,f,"current");return l.skillNames.length>0&&p(l.hostedRoot,s),{...l,currentRoot:s}}async function d(e){let{agents:t,...n}=e;if(0===t.length)throw Error("至少需要选择一个 Agent");let i=[];for(let e of t){let t=r.find(r=>r.id===e);t&&i.push(t.projectPath)}return y({targetRoots:i,...n})}async function y(e){var r,n,i,l,o;let S,d,y,p,{targetRoots:g,skillNames:j,cwd:v,cliVersion:$,yes:E=!1,onDiscovered:b,onSkillDone:A}=e,{skillNames:C,bundledRoot:N,hostedRoot:R,currentRoot:x,skillsVersion:K}=h($),L=function(e,r){if(!r)return e;let t=new Set(e),n=Array.from(new Set(r)),i=n.filter(e=>!t.has(e));if(i.length>0)throw Error(`请求安装的 Skill 不在当前 CLI 内置列表中: ${i.join(", ")}。可用: ${e.join(", ")}。`);return n}(C,j);b?.(L);let P=t.resolve(v??"."),I=m(g.map(e=>t.isAbsolute(e)?e:t.join(P,e))),T=[];for(let e of L)try{let l=t.join(x,e);for(let o of I){let a=t.join(o,e);r=l,n=a,i=E,s.mkdirSync(t.dirname(n),{recursive:!0}),function(e,r,n){let i=w(r);if(!i)return;if(i.isSymbolicLink()){if(function(e,r){try{return s.realpathSync(e)!==s.realpathSync(r)}catch{return!1}}(e,r)&&!n&&!function(e){try{let r=t.join(c.homedir(),u,f,"versions"),n=s.readlinkSync(e),i=t.isAbsolute(n)?n:t.resolve(t.dirname(e),n);if(_(r,i,e))return!0;let l=s.realpathSync(e),o=s.realpathSync(r);return _(o,l,e)}catch{return!1}}(r))throw Error(`目标 Skill 软链已存在但指向其他位置: ${r}。如需替换,请添加 --yes。`);s.unlinkSync(r);return}if(!n)throw Error(`目标 Skill 已存在且不是软链: ${r}。如需覆盖,请添加 --yes,现有目录会被备份后替换。`);let l=function(e){let r=new Date().toISOString().replace(/[-:]/g,"").replace(/\..+$/,"").replace("T","-"),t=`${e}.bak-${r}`,n=t,i=1;for(;s.existsSync(n);)n=`${t}-${i}`,i+=1;return n}(r);s.renameSync(r,l)}(r,n,i),k(r,n)}A?.(e,!0)}catch(r){T.push(r),A?.(e,!1)}if(T.length>0)throw new a("内置 Skills 安装失败",T[0]);return l=P,o=L,S=t.join(l,".gitignore"),(p=[...y=(d=s.existsSync(S)?s.readFileSync(S,"utf8"):"")?d.split(/\r?\n/):[],...o.map(e=>`/**/skills/${e}`).filter(e=>!y.includes(e))].join("\n"))!==d&&s.writeFileSync(S,p),{skillNames:L,bundledRoot:N,hostedRoot:R,currentRoot:x,skillsVersion:K}}function m(e){let r=new Set,n=new Set,i=[];for(let l of e){let e,o=t.resolve(l);if(!r.has(o)){r.add(o);try{e=s.realpathSync(o)}catch{e=void 0}if(void 0!==e){if(n.has(e))continue;n.add(e)}i.push(o)}}return i}function p(e,r){let n=w(r);n?.isSymbolicLink()?s.unlinkSync(r):n&&s.rmSync(r,{recursive:!0,force:!0}),s.mkdirSync(t.dirname(r),{recursive:!0}),k(e,r)}function k(e,r){let t="win32"===process.platform?"junction":"dir";s.symlinkSync(e,r,t)}function _(e,r,n){let i=t.relative(e,r);if(!i||i.startsWith("..")||t.isAbsolute(i))return!1;let l=i.split(t.sep);return 2===l.length&&l[0].length>0&&l[1]===t.basename(n)}function w(e){try{return s.lstatSync(e)}catch(e){if("ENOENT"===e.code)return;throw e}}function g(e){let r=e.trim();if(!r)throw Error("cliVersion 不能为空");return r.replace(/[\\/]/g,"_")}export{m as dedupeRoots,d as installSkills,y as installSkillsToRoots,S as listBundledSkills,h as refreshCurrentSkills};
|
package/dist/status.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{
|
|
2
|
-
`,"utf8"),$):void 0,U=
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{promises_namespaceObject as r}from"./3768.js";import{InvalidArgumentError as e,parseInteger as i,runCommand as o,command_Command as a,option_Option as n,getLastHttpResponseLogId as s}from"./2168.js";import{getMiniAppVersionArtifact as _}from"./app.js";import{resolveAppKey as u}from"./workspace.js";import{miniAppDetailUrl as f,miniAppVersionDetailUrl as d}from"./portal.js";let l=t("node:fs"),c=t("node:os"),p=t("node:path"),g=new Set([7]),m=new Set([8]),b={1:{name:"PENDING_BUILD",description:"Waiting for cloud build to start"},2:{name:"BUILD_STARTED",description:"Cloud build has started"},3:{name:"CODE_READY",description:"Source package is ready"},4:{name:"COMPILING",description:"Compiling frontend code"},5:{name:"COMPILE_SUCCEEDED",description:"Compilation succeeded; waiting for upload or final packaging"},6:{name:"UPLOADING",description:"Uploading build output"},7:{name:"BUILD_SUCCEEDED",description:"Cloud build succeeded"},8:{name:"BUILD_FAILED",description:"Cloud build failed"}};async function $(t,e){var i;let o=u(e.project,e.appId);t.targetAppId=o;let a=Date.now(),n=0,s=await w(o,e.versionTag,n);for(;e.poll&&"success"!==(i=s.status)&&"failed"!==i;){if(Date.now()-a>=1e3*e.timeoutSeconds)throw h("artifact build status polling timed out",s);await (0,r.setTimeout)(1e3*e.intervalSeconds),n+=1,s=await w(o,e.versionTag,n)}let _=function(t){let r=t.artifact_build_error_info;if(r){var e,i;let o;return e=r,i=t.error_info_file,o=e.error_code||"artifact build failed",i?`${o}; error_info written to ${i}`:e.error_info?e.error_info:e.error_code?e.error_code:"number"==typeof e.last_status_before_failed?`artifact build failed after status ${e.last_status_before_failed}`:"artifact build failed"}let o=t.artifact_status;if("number"==typeof o&&m.has(o)){let t=v(o);return`artifact_status=${o} (${t.name})`}}(s);if(t.log(`artifact status: ${s.status}`),"number"==typeof s.artifact_status?t.log(`artifact_status: ${s.artifact_status} (${s.artifact_status_name})`):t.log("artifact_status: unknown"),t.log(`status_description: ${s.artifact_status_description}`),t.log(`app_id: ${s.app_id}`),t.log(`version_tag: ${s.version_tag}`),"success"===s.status&&(t.log("后续调试指引:"),t.log(`1. 打开版本详情页查看真机调试二维码: ${s.version_detail_url}`),t.log(`2. 扫码前,先将豆包 UID 加入当前应用的调试白名单: ${s.app_detail_url} 的「体验白名单」部分。`),t.log("3. 在豆包 App 中打开调试对话。"),t.log(`4. 如果是首次调试,在手机浏览器中打开 ${s.doubao_debug_conversation_url},会自动调起豆包 App 并打开调试会话。`)),_)for(let r of(t.log(`failure_reason: ${_}`),function(t,r){if(!t)return[];let e=[];if(t.error_code&&e.push(`error_code: ${t.error_code}`),r?(e.push(`error_info_file: ${r}`),e.push("error_info: written to temporary file for agent diagnosis")):t.error_info&&e.push(`error_info: ${t.error_info}`),"number"==typeof t.last_status_before_failed){let r=v(t.last_status_before_failed);e.push(`last_status_before_failed: ${t.last_status_before_failed} (${r.name})`),e.push(`last_status_description: ${r.description}`)}return e}(s.artifact_build_error_info,s.error_info_file)))t.log(r);if(_)throw h(`artifact build failed: ${_}`,s);return s}function C(t){let r=i(t);if(r<1)throw new e("expected an integer greater than or equal to 1");return r}async function w(t,r,e){var i,o,a,n;let u,b,$,C=await _(t,r),w=C.data,h=v(w?.artifact_status),E=(i=w,"number"!=typeof(u=i?.artifact_status)?"unknown":g.has(u)?"success":m.has(u)||i?.artifact_build_error_info?"failed":"building"),D="failed"===E&&w?.artifact_build_error_info?.error_info?(o=t,a=w?.version_tag||r,n=w.artifact_build_error_info.error_info,b=(0,p.join)((0,c.tmpdir)(),"dbx-artifact-build-errors"),(0,l.mkdirSync)(b,{recursive:!0}),$=(0,p.join)(b,`${S(o)}-${S(a)}-${Date.now()}-${process.pid}.log`),(0,l.writeFileSync)($,n.endsWith("\n")?n:`${n}
|
|
2
|
+
`,"utf8"),$):void 0,U=w?.artifact_build_error_info?function(t,r){if(!r)return t;let{error_info:e,...i}=t;return i}(w.artifact_build_error_info,!!D):void 0;return{app_id:t,version_tag:w?.version_tag||r,artifact_status:w?.artifact_status,artifact_status_name:h.name,artifact_status_description:h.description,status:E,...U?{artifact_build_error_info:U}:{},...D?{error_info_file:D}:{},attempt:e,..."success"===E?{version_detail_url:d(t,w?.version_tag||r),app_detail_url:f(t),doubao_debug_conversation_url:"https://inhouse.doubao.com/bot/2xgttdEs"}:{},log_id:C.log_id??s()??""}}function v(t){return"number"!=typeof t?{name:"UNKNOWN",description:"No artifact status was returned by the server"}:b[t]??{name:"UNKNOWN",description:`Unrecognized artifact status ${t}`}}function S(t){return t.trim().replace(/[^a-zA-Z0-9._-]+/g,"_")||"unknown"}function h(t,r){let e=Error(t);return e.exitCode=1,e.logId=s(),e.details=r,e}export default function(){return new a("status").description("查询或轮询版本产物构建状态").option("--app-id <app-id>","兼容参数;manifest 存在时必须与 app_key 一致").option("--project <path>","项目路径,用于按项目布局读取 Manifest",".").requiredOption("--version-tag <tag>","版本 tag").option("--poll","持续轮询直到构建成功、失败或超时",!1).addOption(new n("--interval-seconds <seconds>","轮询间隔秒数").default(5).argParser(C)).addOption(new n("--timeout-seconds <seconds>","轮询超时时间秒数").default(300).argParser(C)).action(async(t,r)=>o(r,r=>$(r,t)))};
|
package/dist/status~1.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{getAuthStatus as e,command_Command as o,runCommand as r}from"./
|
|
1
|
+
import"node:module";import{getAuthStatus as e,command_Command as o,runCommand as r}from"./2168.js";async function t(o){let r=await e();return r.loggedIn?(o.log("Logged in"),o.log(`User ID: ${r.uid??"unknown"}`),r.expiresAt&&o.log(`Expires at: ${new Date(1e3*r.expiresAt).toISOString()}`),r.baseUrl&&o.log(`Base URL: ${r.baseUrl}`),r):(r.credentialError?(o.log("Credential store unavailable"),o.log(r.credentialError.message)):o.log("Not logged in"),r)}export default function(){return new o("status").description("查看登录状态").action(async(e,o)=>r(o,t))};
|
package/dist/stop.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./3768.js";import{stopDevService as e,connectDevService as o,DEV_ACTIONS as r}from"./275.js";import{command_Command as s,runCommand as p}from"./2168.js";import{resolveProjectLayout as a}from"./project-layout.js";let i=t("node:path");async function n(t){let o=(0,i.resolve)(process.cwd()),r=a(o).frontendDirectory,s=await _(o,r);if(s)return t.log("dev service stopped"),t.log("status: stopping"),{status:"stopping",result:s};let p=await e({projectPath:o,appDir:r});return t.targetAppId=p?.appId,t.log("dev service stopped"),t.log(`status: ${p?.status??"stopped"}`),p??{status:"stopped"}}async function _(t,e){let s;try{return s=await o({projectPath:t,appDir:e,nodeIdPrefix:"dev-stop",requestTimeoutMs:5e3}),await s.call(r.stop)}catch{return}finally{await s?.stop().catch(()=>void 0)}}export default function(){return new s("stop").description("停止常驻 dev 调试服务").action(async(t,e)=>p(e,t=>n(t)))};
|
package/dist/templates/README.md
CHANGED
package/dist/update.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{execa as r,runtime_packageName as n,compareSemver as t,normalizeVersion as e,isValidSemver as a,writeUpdateCheckState as i}from"./
|
|
1
|
+
import"node:module";import{execa as r,runtime_packageName as n,compareSemver as t,normalizeVersion as e,isValidSemver as a,writeUpdateCheckState as i}from"./2168.js";import{refreshCurrentSkills as o}from"./skills~2.js";let l={npmView:async n=>(await r("npm",["view",n,"version"],{env:process.env,stdio:["ignore","pipe","pipe"]})).stdout.trim(),async npmInstallGlobal(n){await r("npm",["install","-g",n],{env:process.env,stdio:"inherit"})},async npmAvailable(){try{return await r("npm",["--version"],{env:process.env,stdio:["ignore","ignore","ignore"]}),!0}catch{return!1}}};async function s(r,o=l){let p=e(await o.npmView(n)),u=e(r);if(!a(p))throw Error(`Invalid latest version from npm registry: ${p}`);if(!a(u))throw Error(`Invalid current version: ${r}`);return await i(p),{currentVersion:u,latestVersion:p,updateAvailable:t(p,u)>0}}async function p(r){let t=r.runner??l,e=await s(r.currentVersion,t);if(r.check)return{...e,action:e.updateAvailable?"check_update_available":"already_up_to_date"};if(!r.force&&!e.updateAvailable)return{...e,action:"already_up_to_date"};if(!await t.npmAvailable())throw Error(`npm not found in PATH. Install npm or update manually with npm install -g ${n}`);await t.npmInstallGlobal(`${n}@${e.latestVersion}`),await i(e.latestVersion);let a=function(r){try{return{skills:o(r)}}catch(r){return{skillsWarning:u(r)}}}(e.latestVersion);return{...e,action:"updated",...a}}function u(r){return r instanceof Error&&r.message?r.message:String(r)}export{u as formatError,p as updateCli};
|
package/dist/upgrade.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{version_version as e,command_Command as r,runCommand as o}from"./
|
|
1
|
+
import"node:module";import{version_version as e,command_Command as r,runCommand as o}from"./2168.js";import{updateCli as t}from"./update.js";import{syncProjectSkills as l}from"./skills.js";async function i(r,o){let i=await t({currentVersion:e,check:o.check,force:o.force}),n="updated"===i.action?await l(i.latestVersion):void 0;return"already_up_to_date"===i.action?r.log(`dbx is up to date: ${i.currentVersion}`):"check_update_available"===i.action?r.log(`dbx ${i.latestVersion} available, current ${i.currentVersion}`):r.log(`dbx upgraded: ${i.currentVersion} -> ${i.latestVersion}`),i.skills&&(r.log(`skills refreshed: ${i.skills.skillNames.length}`),r.log(`skills current: ${i.skills.currentRoot}`)),i.skillsWarning&&r.warn(`skills refresh failed: ${i.skillsWarning}`),n&&r.log(`project skills rebuilt: ${n.skillNames.length}`),i}export default function(){return new r("upgrade").description("升级 Doubao Dev CLI").option("--check","只检查是否有新版本,不安装",!1).option("--force","即使当前已是最新版本也重新安装",!1).action(async(e,r)=>o(r,r=>i(r,e)))};
|
package/dist/upload.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./
|
|
2
|
-
... output truncated ...`}let O=e("node:path");function F(){return new i("upload").description("上传产物并触发云构建").option("--app-id <app-id>","兼容参数;必须与 manifest.app_key 一致").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=>R(t,e)))}async function R(e,r){let i=_(r.project),s=
|
|
3
|
-
${(c=
|
|
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 p,sourceTypeForWorkspaceFileType as u,describeWorkspaceUpload as d,resolveAppKey as c}from"./workspace.js";import{requireRuntimeSkillEntries as f,resolveProjectLayout as _}from"./project-layout.js";import{miniAppVersionDetailUrl as m}from"./portal.js";var h={};e.r(h),e.d(h,{__testOnly:()=>ei,default:()=>F,resolveBusinessTemplatesFile:()=>T});let g=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function y(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 v(e,t,r){return{checked:!0,endpoint:e,cloud_reachable:!1,reason:t,message:r}}function w(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 b=e("node:fs"),E=e("node:util");async function k(e,t={}){let r=U(e),i={cwd:r};try{await L({action:"build",appDir:r,appId:t.appId})}catch(e){throw new x(r,e,i)}return i}async function I(e,t){let r=U(e),i={cwd:r,output_dir:t},n="";try{i.archive_path=n=(await L({action:"cloudPackage",appDir:r,outputDir:t})).archivePath||""}catch(e){throw new $(r,e,i)}if(!n)throw new $(r,Error("DoubaoAppsSDK.cloudPackage did not return an archive path"),i);return n}function U(e){if(!(0,b.existsSync)(e))throw Error(`frontend_code path not found: ${e}`);if((0,b.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);return(0,b.realpathSync)(e)}async function L(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=S(r),process.stderr.write=S(i),{result(){let e=C({stdout:r.join(""),stderr:i.join("")});return{...e,...e.stdout||e.stderr?{output:j([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 S(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 C(e){let t=j(e.stdout),r=j(e.stderr),i=j(e.output);return{...t?{stdout:t}:{},...r?{stderr:r}:{},...i?{output:i}:{}}}class x extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=P(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=M(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 $ extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=P(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=M(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 P(e){if(!t(e))return{output:String(e)};let r=C({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 j(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):"string"==typeof e?e:"";return(0,E.stripVTControlCharacters)(t).replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map(e=>e.trimEnd()).join("\n").trim()||void 0}function M(e){let t,r=j(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 O=e("node:path");function F(){return new i("upload").description("上传产物并触发云构建").option("--app-id <app-id>","兼容参数;必须与 manifest.app_key 一致").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=>R(t,e)))}async function R(e,r){let i=_(r.project),s=K(r.project,r.manifest,i.manifestPath),a=K(r.project,r.skill,i.skillDirectory),l=K(r.project,r.frontendCode,(0,O.resolve)(r.project,i.frontendDirectory)),p=c(r.project,r.appId,s);if(e.targetAppId=p,r.businessTemplatesOnly)return z(e,p,r);let u=r.keepPackages,d=D(),f="",h="",E="",I="",U=[],L=[];try{var S,C,x,$,P;let t,i,c,_=[],j=await k(l,{appId:p});x=s,$=d,ee(x,"manifest"),t=(0,O.join)($,"manifest.yaml"),(0,b.copyFileSync)(x,t),f=t,L.push(V({type:"manifest",file:f}));let M=await G(f),F=T(r);F&&(I=B(F,d),L.push(V({type:"business_templates",file:I})));let R=I?await Z(I):void 0;U=N(r.project,d),L.push(...U.map(V));let K=(S=(0,b.readFileSync)(f,"utf8"),C=M.manifest,(i=y(function(e){try{return g.qg(e)}catch{return}}(S))??y(C))?function(e){let t,r=e.trim();try{t=new URL(r)}catch{return v(r,"invalid_url","manifest.mcp_server.end_point must be a valid http(s) URL.")}if("http:"!==t.protocol&&"https:"!==t.protocol)return v(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=w(e)??function(e){let t="::ffff:";if(!e.startsWith(t))return;let r=e.slice(t.length),i=w(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?v(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}}(i):{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
|
+
${(c=K.endpoint??"(missing)",`manifest.mcp_server.end_point may not be reachable from cloud build or real devices.
|
|
4
4
|
endpoint: ${c}
|
|
5
|
-
reason: ${
|
|
5
|
+
reason: ${K.reason??"unknown"}
|
|
6
6
|
|
|
7
7
|
Impact:
|
|
8
8
|
- Upload will continue.
|
|
@@ -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
|
-
`),_.push(await q(p,{type:"manifest",file:f})),I){let e={type:"business_templates",file:I};_.push(await q(p,e))}for(let e of
|
|
14
|
-
${["package sizes:",...r.map(e=>` ${e.type}: ${e.file_name} (${e.file_size_human})`)].join("\n")}`),i}(e,
|
|
13
|
+
`),_.push(await q(p,{type:"manifest",file:f})),I){let e={type:"business_templates",file:I};_.push(await q(p,e))}for(let e of U)_.push(await q(p,e));let z=await A(a,d);h=z.file,L.push(V({type:"skill",file:h}));let D=function(e,t){let r,i=(0,b.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=er(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,O.basename)(e),skill_paths:s}}(h,z.skills);_.push(await q(p,{type:"skill",file:h})),E=await H(l,d),L.push(V({type:"frontend_code",file:E})),_.push(await q(p,{type:"frontend_code",file:E}));let W=await o(p),J=W.data?.version_tag||(P=_,P.find(e=>e.version_tag)?.version_tag??""),Q={app_id:p,version_tag:J,status:"submitted",submitted:!0,build_triggered:!0,uploaded_artifacts:_.map(e=>e.type),packages:L,business_template_sync_result:_.find(e=>"business_templates"===e.type)?.business_template_sync_result,next:{status_command:`dbx app artifacts status --app-id ${p} --version-tag ${J} --poll`,version_detail_url:m(p,J)},...u?{kept_packages:{temp_dir:d,manifest:f,skill_zip:h,frontend_code_zip:E,...I?{business_templates:I}:{},...Object.fromEntries(U.map(e=>[e.type,e.file]))}}:{},...e.debug?{debug:{frontend_build_check:j,manifest:M,...R?{business_templates:R}:{},skill:D,uploads:_,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:W.log_id??n()??""};for(let t of(e.log("artifacts uploaded and build triggered"),e.log(`app_id: ${p}`),e.log(`version_tag: ${J}`),e.log(`status: ${Q.status}`),e.log(`next: ${Q.next.status_command}`),e.log(`version detail: ${Q.next.version_detail_url}`),e.log("package sizes:"),L))e.log(` ${t.type}: ${t.file_name} (${t.file_size_human})`);return u&&e.log(`kept packages: ${d}`),Q}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,L)}finally{u||(0,b.rmSync)(d,{recursive:!0,force:!0})}}function K(e,t,r){return t?.trim()?(0,O.resolve)(e,t.trim()):r}async function z(e,t,r){let i=T(r);if(!i)throw Error(`business_templates file not found: ${(0,O.resolve)(r.project,"business-templates.yaml")}`);let s=D(),a=B(i,s);try{let i=await Z(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:[V({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,b.rmSync)(s,{recursive:!0,force:!0})}}function B(e,t){ee(e,"business_templates");let r=(0,O.join)(t,"business-templates.yaml");return(0,b.copyFileSync)(e,r),r}function N(e,t){let r=_(e);return[{type:"events",file:r.eventsPath},{type:"tools",file:r.toolsPath}].flatMap(e=>{if(!(0,b.existsSync)(e.file))return[];ee(e.file,e.type);let r=(0,O.join)(t,p(e.type));return(0,b.copyFileSync)(e.file,r),[{type:e.type,file:r}]})}function T(e){if(e.businessTemplates){let t=(0,O.resolve)(e.project,e.businessTemplates.trim());return ee(t,"business_templates"),t}let t=_(e.project).businessTemplatesPath;return(0,b.existsSync)(t)&&(0,b.statSync)(t).isFile()?t:""}async function A(e,t){let r=f(e),i=(0,O.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^W[(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,b.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 H(e,t){if(function(e,t){if(!(0,b.existsSync)(e))throw Error(`${t} path not found: ${e}`)}(e,"frontend_code"),(0,b.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);let r=await I(e,t);return ee(r,"frontend_code"),r}function D(){let e=(0,O.join)("/tmp","dbx","artifacts-upload");return(0,b.mkdirSync)(e,{recursive:!0}),(0,b.mkdtempSync)((0,O.join)(e,"upload-"))}let W=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{...d(t),source_type:u(t.type),version_tag:r.data?.version_tag??""}}let r=await s({appKey:e,sourceType:u(t.type),filePath:t.file,contentType:et(t.type)});return{...d(t),source_type:u(t.type),version_tag:r.data?.version_tag??"",business_template_sync_result:r.data?.business_template_sync_result}}function V(e){let t=d(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 G(e){return J(e,"manifest","manifest")}async function Z(e){return J(e,"business templates","business_templates")}async function J(e,t,r){let i=await a((0,b.readFileSync)(e,"utf8"),"strict",r),s=i.data,o={valid:!!s?.success,manifest:s?.manifest,errors:Q(s?.errors??[]),warnings:Q(s?.warnings??[]),log_id:i.log_id??n()??""};if(!o.valid)throw new X(t,o);return{...o,valid:!0}}function Q(e){return e.map(e=>({code:e.code,path:e.path,message:e.message}))}class X extends Error{result;exitCode=1;logId;details;constructor(e,t){super(Y(e,t.errors)),this.result=t,this.logId=t.log_id,this.details=t}}function Y(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 ee(e,t){if(!(0,b.existsSync)(e)||!(0,b.statSync)(e).isFile())throw Error(`${t} file not found: ${e}`)}function et(e){return"manifest"===e||"business_templates"===e?"application/x-yaml":"events"===e||"tools"===e?"application/json":"application/zip"}function er(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 ei={contentTypeFor:et,ManifestValidationError:class extends X{constructor(e){super("manifest",e)}},formatManifestValidationFailure:function(e){return Y("manifest",e)},prepareOptionalJsonArtifacts:N,listZipEntries:er,prepareSkillZip:A};export{h as upload_namespaceObject};
|
package/dist/workspace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./yaml.js";import"./app.js";import{resolveProjectLayout as t}from"./project-layout.js";import{isRecord as r}from"./2168.js";import{FRONTEND_ARCHIVE_FILENAME as s}from"./agentic-service.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,r,s){let i=s??t(e).manifestPath;if(!(0,n.existsSync)(i)){if(r)return r;throw Error(`missing AppID: manifest file not found: ${i}`)}let o=l(i);if(r&&r!==o)throw Error(`AppID mismatch: --app-id is ${r}, 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 s=r(t)?t.app_key:void 0;if("string"==typeof s&&s.trim())return s.trim();throw Error(`missing AppID: write app_key in ${e}`)}function _(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:m(e.type),replaced:!0}}function m(e){switch(e){case"manifest":return"manifest.yaml";case"skill":return"skill.zip";case"frontend_code":return s;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{_ as describeWorkspaceUpload,l as readManifestAppKey,m as remoteFileName,p as resolveAppKey,f as sourceTypeForWorkspaceFileType};
|