@doubao-dev/cli 0.0.34 → 0.0.36
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/1232.js +1 -0
- package/dist/1264.js +1 -0
- package/dist/1611.js +2 -0
- package/dist/2232.js +60 -0
- package/dist/2507.js +1 -0
- package/dist/275.js +5 -8
- package/dist/2932.js +1 -1
- package/dist/4525.js +1 -1
- package/dist/4880.js +1 -1
- package/dist/4931.js +1 -1
- package/dist/{3688.js → 5887.js} +3 -3
- package/dist/6438.js +140 -0
- package/dist/6976.js +280 -0
- package/dist/{8981.js.LICENSE.txt → 6976.js.LICENSE.txt} +108 -0
- package/dist/7410.js +1 -2
- package/dist/@byted-doubao-apps/create.js +1 -1
- package/dist/@byted-doubao-apps/kit.js +1 -1
- package/dist/@byted-doubao-apps/login.js +2 -2
- package/dist/@byted-doubao-apps/login~1.js +2 -2
- 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/{assets/web-sdk-debugger/static/wasm/eaf690f2cd.module.wasm → @lynx-js/static/wasm/77fb77f77f.module.wasm} +0 -0
- package/dist/@lynx-js/{web-core-canary.js → web-core.js} +2 -2
- package/dist/app.js +1 -1
- package/dist/assets/web-sdk-debugger/__doubao_web_sdk_native_modules/applet-bridge-module-core.js +1 -1
- package/dist/assets/web-sdk-debugger/index.html +1 -1
- package/dist/assets/web-sdk-debugger/preact-devtools/index.js +4 -1
- package/dist/assets/web-sdk-debugger/static/css/index.ef5d8bc5ad.css +1 -0
- package/dist/assets/web-sdk-debugger/static/js/{682.de47e82f6b.js → 426.53c43a8594.js} +2 -2
- package/dist/assets/web-sdk-debugger/static/js/479.26e0b1d922.js +1829 -0
- package/dist/assets/web-sdk-debugger/static/js/async/503.259fed5610.js +1 -0
- package/dist/assets/web-sdk-debugger/static/js/async/{legacy-wasm-js.bacc8b5564.js → legacy-wasm-js.9b9367f818.js} +2 -2
- package/dist/assets/web-sdk-debugger/static/js/async/lynx-core-chunk.7f5e94dfae.js +5 -0
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-main-chunk.f78260697f.js +1 -0
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-markup-encoder.33c43c480e.js +4 -0
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-template-loader-thread.ba290b32d7.js +4 -0
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-worker-chunk.9a5989b104.js +1 -0
- package/dist/assets/web-sdk-debugger/static/js/async/web-elements.3fbd53918e.js +365 -0
- package/dist/assets/web-sdk-debugger/static/js/async/xmarkdown-deps.efd0ffb051.js +5 -0
- package/dist/assets/web-sdk-debugger/static/js/async/{xmarkdown-deps.3ea5672b2c.js.LICENSE.txt → xmarkdown-deps.efd0ffb051.js.LICENSE.txt} +1 -1
- package/dist/assets/web-sdk-debugger/static/js/index.b6e5c76345.js +44 -0
- package/dist/assets/web-sdk-debugger/static/js/lib-polyfill.c91181f230.js +1 -0
- package/dist/assets/web-sdk-debugger/static/wasm/{69a8ba8eb9.module.wasm → 4c402c7981.module.wasm} +0 -0
- package/dist/assets/web-sdk-debugger/static/wasm/{03b02f9e5a.module.wasm → 72aaf7d0aa.module.wasm} +0 -0
- package/dist/{@lynx-js/static/wasm/eaf690f2cd.module.wasm → assets/web-sdk-debugger/static/wasm/77fb77f77f.module.wasm} +0 -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/assets/web-sdk-debugger/wsd/doubao-apps-react-dev.template.js +0 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-react.template.js +0 -0
- package/dist/browser.js +1 -1
- package/dist/build.js +1 -1
- package/dist/build~1.js +10 -10
- package/dist/check.js +1 -1
- package/dist/client.js +1 -0
- package/dist/client~1.js +1 -0
- package/dist/components-loader.js +1 -1
- package/dist/demo-server.js +2 -2
- package/dist/demo.js +2 -2
- package/dist/dev-config.js +2 -2
- package/dist/dev-shell.js +1 -1
- package/dist/dev.js +19 -16
- package/dist/explore.js +10 -0
- package/dist/gen-explore.js +1 -1
- package/dist/gen-trajectory.js +1 -1
- package/dist/info.js +2 -2
- package/dist/init.js +4 -4
- package/dist/ink.js +1 -1
- package/dist/inquirer.js +1 -1
- package/dist/json-file.js +2 -2
- package/dist/legacy-status.js +1 -1
- package/dist/legacy-upload.js +1 -1
- package/dist/lepus.js +1 -1
- package/dist/login.js +2 -1
- package/dist/main.js +1 -1
- package/dist/{manifest-mcp-config.js → manifest-headers.js} +1 -1
- package/dist/ora.js +1 -1
- package/dist/portal.js +1 -1
- package/dist/project-layout.js +1 -1
- package/dist/project.js +1 -1
- package/dist/prompt.js +8 -8
- package/dist/prompts.js +1 -1
- package/dist/qrcode.js +1 -0
- package/dist/report.js +1 -1
- package/dist/run-registry.js +1 -1
- package/dist/run.js +321 -321
- package/dist/sandbox.js +1 -1
- package/dist/scan.js +1 -1
- package/dist/sdk.js +192 -59
- package/dist/sdk~1.js +66 -58
- package/dist/server.js +10 -10
- package/dist/skill.js +1 -1
- package/dist/skills.js +1 -1
- package/dist/skills~1.js +1 -1
- package/dist/status.js +1 -1
- package/dist/status~1.js +2 -2
- package/dist/stop.js +1 -1
- package/dist/sync.js +1 -1
- package/dist/trajectory.js +3 -0
- package/dist/update.js +1 -1
- package/dist/upgrade.js +1 -1
- package/dist/workspace.js +1 -1
- package/dist/yaml.js +1 -1
- package/package.json +7 -7
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +4 -0
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +8 -0
- 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 +2 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +124 -8
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/groups.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/quick-reference.md +2 -1
- package/skills/doubao-agentic-service-development/references/frontend/examples/page-widget-basics.md +1 -0
- package/skills/doubao-agentic-service-development/references/frontend/guides/client-tools-and-events.md +209 -0
- package/skills/doubao-agentic-service-development/references/frontend/guides/component-development.md +7 -1
- package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/widget-templates/overview.md +13 -9
- package/skills/doubao-agentic-service-development/references/frontend/widget-templates/props.md +26 -1
- package/skills/doubao-agentic-service-development/references/frontend-dev.md +2 -0
- package/dist/2168.js +0 -60
- package/dist/318.js +0 -1
- package/dist/3974.js +0 -151
- package/dist/6427.js +0 -126
- package/dist/7417.js +0 -204
- package/dist/7417.js.LICENSE.txt +0 -107
- package/dist/7945.js +0 -1
- package/dist/8981.js +0 -78
- package/dist/assets/web-sdk-debugger/static/css/index.7c65607402.css +0 -1
- package/dist/assets/web-sdk-debugger/static/js/670.8a8f0f7d57.js +0 -1829
- package/dist/assets/web-sdk-debugger/static/js/async/503.cf61731bba.js +0 -1
- package/dist/assets/web-sdk-debugger/static/js/async/lynx-core-chunk.afc1ded023.js +0 -5
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-main-chunk.7fe9af852c.js +0 -1
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-markup-encoder.f81d6d2cae.js +0 -4
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-template-loader-thread.4a49f8a286.js +0 -4
- package/dist/assets/web-sdk-debugger/static/js/async/web-core-worker-chunk.c315fd6753.js +0 -1
- package/dist/assets/web-sdk-debugger/static/js/async/web-elements.43d1e29387.js +0 -365
- package/dist/assets/web-sdk-debugger/static/js/async/xmarkdown-deps.3ea5672b2c.js +0 -5
- package/dist/assets/web-sdk-debugger/static/js/index.9f626ba3a2.js +0 -44
- package/dist/assets/web-sdk-debugger/static/js/lib-polyfill.9daa7c863e.js +0 -1
- package/dist/simulator-client.js +0 -1
- /package/dist/{7410.js.LICENSE.txt → 1611.js.LICENSE.txt} +0 -0
- /package/dist/assets/web-sdk-debugger/static/js/{670.8a8f0f7d57.js.LICENSE.txt → 479.26e0b1d922.js.LICENSE.txt} +0 -0
package/dist/server.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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"./1264.js";import{sanitizeProgressFailure as t,sanitizeDetailField as r,command_Command as a,classifyEventStatus as s}from"./2232.js";import{openUrlInBrowser as n}from"./browser.js";import{readJsonIfExists as i}from"./json-file.js";import{runEvalCommand as o,EvalRunStoppedError as l,configureEvalRunOptions as c,runFullPipeline as d,process_cleanup_reapEvalDescendantsSync as p,progressFailure as u,resolvePipelineRunConfig as m,installTwoStageSignalHandler as h}from"./run.js";var f={};e.r(f),e.d(f,{__testOnly:()=>j,default:()=>L});class g{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(v),cases:e,details:this.details.map(b),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(y)}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(y(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:"评测已停止"};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(`未找到进度阶段: ${e}`);return t}requireTask(e){let t=this.phases.flatMap(e=>e.tasks).find(t=>t.id===e);if(!t)throw Error(`未找到进度任务: ${e}`);return t}}function v(e){return{...e,tasks:e.tasks.map(e=>({...e,metadata:void 0===e.metadata?void 0:structuredClone(e.metadata)}))}}function b(e){return{...e,fields:e.fields.map(([e,t])=>[e,t])}}function y(e){return{...e,payload:e.payload&&"object"==typeof e.payload?structuredClone(e.payload):e.payload}}let x=e("node:crypto"),k=e("node:fs"),w=e("node:http"),S=e("node:path"),C=e("node:url"),I=new Set(["127.0.0.1","localhost","::1"]);async function T(e){var t,r,a;let s=function(e="127.0.0.1"){let t=e.trim().toLowerCase();if(!I.has(t))throw Error(`dbx 评测服务器仅接受回环地址: ${[...I].join(", ")}`);return t}(e.host),i=function(e=0){if(!Number.isInteger(e)||e<0||e>65535)throw Error(`评测服务器端口无效: ${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(`评测服务器心跳间隔无效:${e}。应为 1-30000 毫秒。`);return e}(e.heartbeatIntervalMs);(0,k.mkdirSync)(e.outputDir,{recursive:!0});let c=(0,k.realpathSync)(e.outputDir),d=new Set,p=(0,x.randomBytes)(18).toString("base64"),u=e.openDirectory??(e=>n(e)),m=(0,w.createServer)((t,r)=>{A({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():N(r,500,{error:e instanceof Error?e.message:String(e)})})});await (t=m,r=i,a=s,new Promise((e,s)=>{function n(e){t.removeListener("listening",i),s(e)}function i(){t.removeListener("error",n),e()}t.once("error",n),t.once("listening",i),t.listen(r,a)}));let h=m.address();if(!h||"string"==typeof h)throw await R(m),Error("评测服务器未提供 TCP 地址");let f="127.0.0.1"===s||"localhost"===s?"localhost":`[${h.address}]`;return{url:`http://${f}:${h.port}`,host:s,port:h.port,controlToken:o,async close(){for(let e of d)e.end();d.clear(),await R(m)}}}async function A(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">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>DBX
|
|
6
|
+
<title>DBX 评测</title>
|
|
7
7
|
<style nonce="${m.nonce}">
|
|
8
8
|
:root {
|
|
9
9
|
color-scheme: light;
|
|
@@ -394,13 +394,13 @@ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";imp
|
|
|
394
394
|
<div class="brand">
|
|
395
395
|
<div class="mark">D</div>
|
|
396
396
|
<div>
|
|
397
|
-
<strong id="title">DBX
|
|
397
|
+
<strong id="title">DBX 评测</strong>
|
|
398
398
|
<small id="subtitle">正在连接本地评测服务...</small>
|
|
399
399
|
</div>
|
|
400
400
|
</div>
|
|
401
401
|
<div class="actions">
|
|
402
402
|
<span id="connection" class="connection offline">● 连接中</span>
|
|
403
|
-
<span id="runStatus" class="status-pill status-running"
|
|
403
|
+
<span id="runStatus" class="status-pill status-running">初始化中</span>
|
|
404
404
|
<a id="rawReport" class="button" href="artifacts/report.html" target="_blank" rel="noreferrer" hidden>完整报告</a>
|
|
405
405
|
<button id="openArtifacts" class="button">打开产物目录</button>
|
|
406
406
|
<button id="stopRun" class="button danger">停止评测</button>
|
|
@@ -715,7 +715,7 @@ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";imp
|
|
|
715
715
|
}
|
|
716
716
|
|
|
717
717
|
function renderSnapshot(run) {
|
|
718
|
-
byId("title").textContent = "DBX
|
|
718
|
+
byId("title").textContent = "DBX 评测 \xb7 " + (run.skillName || "默认 Skill");
|
|
719
719
|
byId("subtitle").textContent = run.runId + " \xb7 " + run.outputDir;
|
|
720
720
|
byId("runStatus").textContent = runStatus(run.status);
|
|
721
721
|
byId("runStatus").className = "status-pill status-" + run.status;
|
|
@@ -1012,7 +1012,7 @@ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";imp
|
|
|
1012
1012
|
const score = Number(item.max_score) > 0 ? Math.round(Number(item.score) / Number(item.max_score) * 100) : 0;
|
|
1013
1013
|
const level = (item.attribution || []).map((entry) => normalizeAttributionLevel(entry.level)).find(Boolean) || "—";
|
|
1014
1014
|
return "<tr><td>" + escapeHtml(item.case_id) + "</td><td>" + escapeHtml(item.intent) +
|
|
1015
|
-
'</td><td><span class="result ' + (item.passed ? "pass" : "fail") + '">' + (item.passed ? "
|
|
1015
|
+
'</td><td><span class="result ' + (item.passed ? "pass" : "fail") + '">' + (item.passed ? "通过" : "未通过") +
|
|
1016
1016
|
"</span></td><td>" + escapeHtml(score) + '</td><td>' + escapeHtml(level) +
|
|
1017
1017
|
'</td><td><a class="detail-link" target="_blank" rel="noreferrer" href="' +
|
|
1018
1018
|
escapeHtml(artifactHref("report.html#case-" + encodeURIComponent(item.case_id))) +
|
|
@@ -1031,7 +1031,7 @@ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";imp
|
|
|
1031
1031
|
'</span><span></span><strong>' + escapeHtml(Math.round(Number(entry[1]) * 100)) + '</strong></div>'
|
|
1032
1032
|
).join("") : '<div class="empty">无评分维度</div>') + '</section>' +
|
|
1033
1033
|
'<section class="report-card report-cases"><h3>用例结果 \xb7 ' +
|
|
1034
|
-
escapeHtml((summary.pass_rate * 100).toFixed(1)) + '% \xb7 ' + (summary.pass ? "
|
|
1034
|
+
escapeHtml((summary.pass_rate * 100).toFixed(1)) + '% \xb7 ' + (summary.pass ? "通过" : "未通过") +
|
|
1035
1035
|
'</h3><table><thead><tr><th>用例</th><th>意图</th><th>结果</th><th>得分</th><th>归因</th><th></th></tr></thead><tbody>' +
|
|
1036
1036
|
caseRows + "</tbody></table></section>";
|
|
1037
1037
|
}
|
|
@@ -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 N(r,200,a.snapshot());if("GET"===t.method&&"/api/report"===u){let e=a.getReport();return e?void N(r,200,e):void N(r,404,{error:"报告暂不可用"})}"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)H(t,e);let d=r.subscribe(e=>H(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?
|
|
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?_(t,n)?(await c(),N(r,202,{status:a.snapshot().status})):N(r,403,{error:"控制令牌无效"}):"POST"===t.method&&"/api/artifacts/open"===u?_(t,n)?(await d((0,C.pathToFileURL)(s).href),N(r,202,{opened:!0})):N(r,403,{error:"控制令牌无效"}):"GET"===t.method&&u.startsWith("/artifacts/")?function(e,t,r){let a,s;try{a=decodeURIComponent(r)}catch{N(e,400,{error:"产物路径编码无效"});return}if(!a||a.includes("\0"))return N(e,400,{error:"产物路径无效"});let n=(0,S.resolve)(t,a);if(!E(t,n)||!(0,k.existsSync)(n))return N(e,404,{error:"未找到产物"});try{s=(0,k.realpathSync)(n)}catch{N(e,404,{error:"未找到产物"});return}if(!E(t,s))return N(e,403,{error:"产物路径超出输出目录"});let i=(0,k.statSync)(s);i.isFile()?(e.writeHead(200,{"Cache-Control":"no-store","Content-Length":i.size,"Content-Type":function(e){switch((0,S.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,k.createReadStream)(s).pipe(e)):N(e,404,{error:"产物路径不是文件"})}(r,s,u.slice(11)):N(r,404,{error:"未找到资源"})}function H(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
|
|
1212
|
+
`))}function E(e,t){let r=(0,S.relative)(e,t);return""===r||!r.startsWith(`..${S.sep}`)&&".."!==r}function _(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 N(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 R(e){return e.listening?new Promise((t,r)=>{e.close(e=>{e?r(e):t()})}):Promise.resolve()}function L(){return c(new a("server").description("运行一次评测,并提供本地实时进度和报告页面")).option("--host <host>","本地回环地址","127.0.0.1").option("--port <port>","本地服务端口(默认使用可用端口)").option("--no-open","不自动打开浏览器",!0).action(async(e,t)=>o(t,e,async(r,a)=>{let i=await m(e,t,["host","port","open"]);a.configure(i),e.resume||r.log("评测配置已加载");let o=new g({runId:i.runId,skillName:i.skill.name,outputDir:i.outputDir}),c=new AbortController,p=()=>{let e=o.snapshot().status;"stopping"!==e&&"stopped"!==e&&"completed"!==e&&"failed"!==e&&(o.setStatus("stopping"),c.abort(new l))},u=await T({hub:o,outputDir:i.outputDir,host:e.host,port:M(e.port),onStop:p});if(r.log(`DBX 评测页面:${u.url}`),r.log("评测产物将保存到项目输出目录"),r.log("停止服务:Ctrl+C"),O(e.open))try{await n(u.url)}catch(e){r.warn(`无法自动打开浏览器:${e.message}。请手动打开 ${u.url}。`)}o.setStatus("running");let h=d(i,{progress:o,progressObserver:a.observer,signal:c.signal}).then(async e=>{o.setReport(e),o.setStatus("completed"),await a.complete({report:e,status:"success"})}).catch(async e=>{if(e instanceof l||c.signal.aborted){o.setStatus("stopped"),await a.complete({error:e,status:"cancelled"});return}o.setStatus("failed",z(e,i.outputDir)),process.exitCode=1,await a.complete({error:e,status:s(e)})});await P({requestStop:p,pipelineSettled:h,closeServer:()=>u.close(),status:()=>o.snapshot().status})}))}function M(e){if(void 0===e||""===e.trim())return 0;if(!/^\d+$/.test(e.trim()))throw Error(`--port 的值“${e}”无效,必须是整数。`);let t=Number.parseInt(e,10);if(!Number.isInteger(t)||t<0||t>65535)throw Error(`--port 的值“${e}”无效,必须在 0–65535 之间。`);return t}function O(e){return!1!==e}function z(e,t){let r=u(e);if(!t)return r;let a=i((0,S.join)(t,"failure.json"));return a?{...r,reason:D(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 D(e){if(!e?.trim())return"";let t=e.replace(/\s+/g," ").trim();return t.length>240?`${t.slice(0,237)}...`:t}async function P(e){let t,r=new Promise(e=>{t=e}),a=h({abortController:{abort:e.requestStop},onFirstSignal:r=>{process.exitCode=r,e.pipelineSettled.then(()=>e.closeServer()).finally(()=>t?.())},forceExit:e=>{p(),process.exit(e)}});try{await r}finally{a.dispose(),await e.closeServer().catch(()=>void 0)}}let j={failureFromError:z,parsePort:M,shouldOpenBrowser:O,summarizeFailureReason:D};export{f as server_namespaceObject};
|
package/dist/skill.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"./1264.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as r,collectChoiceValues as s}from"./2232.js";import{selectInitAgents as i,INIT_AGENT_IDS as n}from"./prompts.js";import{installSkillsToRoots as a,SUPPORTED_AGENTS as c,listBundledSkills as _}from"./skills~1.js";import{scanInstalledSkillRoots as g}from"./scan.js";let S=t("node:path"),k="dbx-eval",d={listBundledSkills:_,scanInstalledSkillRoots:g,installSkillsToRoots:a,selectAgents:i,isInteractive:()=>!!process.stdin.isTTY&&!!process.stderr.isTTY};async function f(t,l,o=d){var r,s,i;let n=(0,S.resolve)(t.projectPath),a=o.listBundledSkills();a.includes(k)||l.error(`当前 CLI 未打包 ${k} Skill,无法补装。请升级或重新安装 dbx CLI。`);let c=o.scanInstalledSkillRoots(n,a),_=c.length>0,g=_?(r=c,s=t,i=l,s.agent.length>0&&i.warn("检测到已初始化的 Skill 目录,将向全部已发现目录补装 dbx-eval;--agent 不生效。"),{targetRoots:r,skillNames:[k]}):await p(t,l,o),m=await o.installSkillsToRoots({targetRoots:g.targetRoots,skillNames:g.skillNames,cwd:n,cliVersion:e,yes:t.yes});return function(t,e){if(t.json)return;let l="backfill"===e.branch?`已为存量项目补装 ${k}`:"已完成 Skill 初始化";for(let o of(t.log(l),t.log(`项目:${e.projectPath}`),t.log(`Skills:${e.skillNames.join(", ")}`),t.log("安装目录:"),e.targetRoots))t.log(` - ${o}`)}(l,{projectPath:n,branch:_?"backfill":"first-install",targetRoots:g.targetRoots,skillNames:m.skillNames}),{success:!0,branch:_?"backfill":"first-install",project_path:n,target_roots:g.targetRoots,skills:m.skillNames,skills_version:m.skillsVersion,hosted_root:m.hostedRoot}}async function p(t,e,l){let o,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(n),o=e.filter(t=>!l.has(t));if(o.length>0)throw Error(`不支持的 Agent: ${o.join(", ")}。支持: ${n.join(", ")}。`);return m(e)}(t.agent);return r?o=r:l.isInteractive()?o=m(await l.selectAgents()):e.error("当前项目尚未初始化 Skill,且处于非交互环境。请通过 --agent <id> 指定目标 Agent。"),{targetRoots:o.map(t=>{let e=c.find(e=>e.id===t);return e?.projectPath??""})}}function m(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 项目路径",".").addOption(new r("--agent <agent>","未初始化项目要安装的 Agent,可重复传入;universal 会自动包含").default([]).argParser(s(n))).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 e}from"./rslib-runtime.js";import"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./1264.js";import{runCommand as t,version_version as r,command_Command as l,isRecord as o}from"./2232.js";import{installSkillsToRoots as s,SUPPORTED_AGENTS as n,listBundledSkills as i}from"./skills~1.js";import{scanInstalledSkillRoots as _}from"./scan.js";import{findProjectRoot as c}from"./project-layout.js";var a={};e.r(a),e.d(a,{default:()=>d,syncProjectSkills:()=>f});let S=e("node:fs"),m=e("node:path");function d(){return new l("skills").description("管理内置开发 Skill").addCommand(new l("sync").description("同步内置开发 Skill").action(async(e,l)=>t(l,async e=>{let t=await f(r);return t?t.skillNames.length?(e.log(`已同步 ${t.skillNames.length} 个内置开发 Skill。`),{skills:t.skillNames}):e.error("未找到内置开发 Skill。"):e.error("当前目录不是 dbx 项目。")})))}async function f(e){let t=c(process.cwd());if(!t)return;let r=function(e){let t=m.resolve(e,".dbx","config.json");if(!S.existsSync(t))return{};let r=JSON.parse(S.readFileSync(t,"utf8"));return o(r)?r:{}}(t),l=i(),a=n.find(e=>e.host===r.host);return s({targetRoots:[".agents/skills/",...a?[a.projectPath]:[],..._(t,l)],cwd:t,cliVersion:e,yes:!0})}export{a as skills_namespaceObject,f as syncProjectSkills};
|
package/dist/skills~1.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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"./1264.js";let t=[{id:"universal",host:"universal",name:"Universal",installPath:".agents/skills/",projectPath:".agents/skills/",globalPath:"~/.agents/skills/"},{id:"claude-code",host:"claude",name:"Claude Code",installPath:".claude/skills/",projectPath:".claude/skills/",globalPath:"~/.claude/skills/"},{id:"coco",host:"coco",name:"Coco",installPath:".coco/skills/",projectPath:".coco/skills/",globalPath:"~/.coco/skills/"},{id:"codex",host:"codex",name:"Codex",installPath:".agents/skills/",projectPath:".codex/skills/",globalPath:"~/.codex/skills/"},{id:"trae",host:"trae",name:"TRAE",installPath:".trae/skills/",projectPath:".trae/skills/",globalPath:"~/.trae/skills/"},{id:"cursor",host:"cursor",name:"Cursor",installPath:".agents/skills/",projectPath:".agents/skills/",globalPath:"~/.cursor/skills/"}],l=e("node:path");var r=e.n(l);let n=e("node:url"),i=r().dirname((0,n.fileURLToPath)(import.meta.url)),s=r().resolve(i,"../skills"),o=e("node:fs"),a=e("node:os");class c extends Error{cause;constructor(e,t){let l=t?`
|
|
2
2
|
原因: ${t.message}`:"";super(`${e}${l}`),this.cause=t,this.name="SkillsInstallError"}}let u=".dbx",h="skills";function d(){return o.existsSync(s)?o.readdirSync(s).filter(e=>{let t=l.join(s,e);return o.statSync(t).isDirectory()&&o.existsSync(l.join(t,"SKILL.md"))}).sort():[]}function f(e){let t,r,n,i=(t=j(e),r=l.join(a.homedir(),u,h,"versions",j(e)),0===(n=d()).length||y(s,r),{skillNames:n,bundledRoot:s,hostedRoot:r,skillsVersion:t}),o=l.join(a.homedir(),u,h,"current");return i.skillNames.length>0&&y(i.hostedRoot,o),{...i,currentRoot:o}}async function S(e){let{agents:l,...r}=e;if(0===l.length)throw Error("至少需要选择一个 Agent");let n=[];for(let e of l){let l=t.find(t=>t.id===e);l&&n.push(l.projectPath)}return k({targetRoots:n,...r})}async function k(e){var t,r,n,i,s;let d,S,k,y,{targetRoots:j,skillNames:v,cwd:b,cliVersion:w,yes:E=!1,onDiscovered:$,onSkillDone:x}=e,{skillNames:_,bundledRoot:C,hostedRoot:A,currentRoot:R,skillsVersion:N}=f(w),T=function(e,t){if(!t)return e;let l=new Set(e),r=Array.from(new Set(t)),n=r.filter(e=>!l.has(e));if(n.length>0)throw Error(`请求安装的 Skill 不在当前 CLI 内置列表中: ${n.join(", ")}。可用: ${e.join(", ")}。`);return r}(_,v);$?.(T);let L=l.resolve(b??"."),K=m(j.map(e=>l.isAbsolute(e)?e:l.join(L,e))),U=[];for(let e of T)try{let i=l.join(R,e);for(let s of K){let c=l.join(s,e);t=i,r=c,n=E,o.mkdirSync(l.dirname(r),{recursive:!0}),function(e,t,r){let n=P(t);if(!n)return;if(n.isSymbolicLink()){if(function(e,t){try{return o.realpathSync(e)!==o.realpathSync(t)}catch{return!1}}(e,t)&&!r&&!function(e){try{let t=l.join(a.homedir(),u,h,"versions"),r=o.readlinkSync(e),n=l.isAbsolute(r)?r:l.resolve(l.dirname(e),r);if(g(t,n,e))return!0;let i=o.realpathSync(e),s=o.realpathSync(t);return g(s,i,e)}catch{return!1}}(t))throw Error(`目标 Skill 软链已存在但指向其他位置: ${t}。如需替换,请添加 --yes。`);o.unlinkSync(t);return}if(!r)throw Error(`目标 Skill 已存在且不是软链: ${t}。如需覆盖,请添加 --yes,现有目录会被备份后替换。`);let i=function(e){let t=new Date().toISOString().replace(/[-:]/g,"").replace(/\..+$/,"").replace("T","-"),l=`${e}.bak-${t}`,r=l,n=1;for(;o.existsSync(r);)r=`${l}-${n}`,n+=1;return r}(t);o.renameSync(t,i)}(t,r,n),p(t,r)}x?.(e,!0)}catch(t){U.push(t),x?.(e,!1)}if(U.length>0)throw new c("内置 Skills 安装失败",U[0]);return i=L,s=T,d=l.join(i,".gitignore"),(y=[...k=(S=o.existsSync(d)?o.readFileSync(d,"utf8"):"")?S.split(/\r?\n/):[],...s.map(e=>`/**/skills/${e}`).filter(e=>!k.includes(e))].join("\n"))!==S&&o.writeFileSync(d,y),{skillNames:T,bundledRoot:C,hostedRoot:A,currentRoot:R,skillsVersion:N}}function m(e){let t=new Set,r=new Set,n=[];for(let i of e){let e,s=l.resolve(i);if(!t.has(s)){t.add(s);try{e=o.realpathSync(s)}catch{e=void 0}if(void 0!==e){if(r.has(e))continue;r.add(e)}n.push(s)}}return n}function y(e,t){let r=P(t);r?.isSymbolicLink()?o.unlinkSync(t):r&&o.rmSync(t,{recursive:!0,force:!0}),o.mkdirSync(l.dirname(t),{recursive:!0}),p(e,t)}function p(e,t){let l="win32"===process.platform?"junction":"dir";o.symlinkSync(e,t,l)}function g(e,t,r){let n=l.relative(e,t);if(!n||n.startsWith("..")||l.isAbsolute(n))return!1;let i=n.split(l.sep);return 2===i.length&&i[0].length>0&&i[1]===l.basename(r)}function P(e){try{return o.lstatSync(e)}catch(e){if("ENOENT"===e.code)return;throw e}}function j(e){let t=e.trim();if(!t)throw Error("cliVersion 不能为空");return t.replace(/[\\/]/g,"_")}export{t as SUPPORTED_AGENTS,m as dedupeRoots,S as installSkills,k as installSkillsToRoots,d as listBundledSkills,f as refreshCurrentSkills};
|
package/dist/status.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"./2232.js";async function t(o){let r=await e();return r.loggedIn?(o.log("已登录"),o.log(`用户 ID:${r.uid??"未知"}`),r.expiresAt&&o.log(`过期时间:${new Date(1e3*r.expiresAt).toISOString()}`),r.baseUrl&&o.log(`服务地址:${r.baseUrl}`),r):(r.credentialError?(o.log("凭证存储不可用"),o.log(r.credentialError.message)):o.log("尚未登录,请运行 `dbx auth login`"),r)}export default function(){return new o("status").description("查看登录状态").action(async(e,o)=>r(o,t))};
|
package/dist/status~1.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{external_node_timers_promises_namespaceObject as r}from"./
|
|
2
|
-
`,"utf8"),
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{external_node_timers_promises_namespaceObject as r}from"./1264.js";import{getMiniAppVersionArtifact as e}from"./app.js";import{CliError as i,getLastHttpResponseLogId as o}from"./2232.js";import{resolveAppKey as a}from"./workspace.js";import{miniAppDetailUrl as _,miniAppVersionDetailUrl as n}from"./portal.js";import{source as s}from"./5887.js";let u=t("node:fs"),f=t("node:os"),d=t("node:path"),l={1:{name:"PENDING_BUILD",description:"等待云构建开始"},2:{name:"BUILD_STARTED",description:"云构建已开始"},3:{name:"CODE_READY",description:"源码包已就绪"},4:{name:"COMPILING",description:"正在编译前端代码"},5:{name:"COMPILE_SUCCEEDED",description:"编译成功,等待上传或最终打包"},6:{name:"UPLOADING",description:"正在上传构建产物"},7:{name:"BUILD_SUCCEEDED",description:"云构建成功"},8:{name:"BUILD_FAILED",description:"云构建失败"}};async function c(t,r,e=g,i=b){let o=a(r.project,r.appId);t.targetAppId=o;let _=r.poll?await i(o,r.versionTag,r.timeoutSeconds,r.intervalSeconds):await e(o,r.versionTag,0),n=S(_),s=D(_);if(t.log(`产物状态:${{queued:"排队中",building:"构建中",succeeded:"成功",failed:"失败",unknown:"未知"}[_.status]}`),"number"==typeof n.artifact_status?t.log(`产物状态码: ${n.artifact_status} (${n.artifact_status_name})`):t.log("产物状态码:未知"),t.log(`状态说明: ${n.artifact_status_description}`),t.log(`app_id: ${n.app_id}`),t.log(`版本号: ${n.version_tag}`),m(t,_),p(t,_),s)throw A(`构建产物失败: ${s}`,n);return n}function p(t,r){let e=D(r);if(e)for(let i of(t.log(s.red(`失败原因: ${e}`)),function(t,r){if(!t)return[];let e=[];if(t.error_code&&e.push(`错误码: ${t.error_code}`),r?(e.push(`错误详情文件: ${r}`),e.push("错误详情:已写入临时文件,可供 Agent 诊断")):t.error_info&&e.push(`错误详情: ${t.error_info}`),"number"==typeof t.last_status_before_failed){let r=$(t.last_status_before_failed);e.push(`失败前状态: ${t.last_status_before_failed} (${r.name})`),e.push(`失败前状态说明: ${r.description}`)}return e}(r.artifact_build_error_info,r.error_info_file)))t.log(i)}function m(t,r){"succeeded"===r.status&&(t.log(),t.log(` 调试前,将手机豆包账号的 UID 加入应用的${s.yellow("「体验白名单」")}`),r.app_detail_url&&t.log(s.dim(` ${r.app_detail_url}#experience-whitelist`)),t.log(),r.version_detail_url&&(t.log(" 版本详情"),t.log(s.dim(` ${r.version_detail_url}`))),t.log())}async function g(t,r,i){var a,s,l,c;let p,m,g,b=await e(t,r),S=b.data,D=$(S?.artifact_status),A=(a=S,8===(p=a?.artifact_status)||a?.artifact_build_error_info?"failed":7===p?"succeeded":1===p?"queued":"number"==typeof p&&p>=2&&p<=6?"building":"unknown"),C="failed"===A&&S?.artifact_build_error_info?.error_info?(s=t,l=S?.version_tag||r,c=S.artifact_build_error_info.error_info,m=(0,d.join)((0,f.tmpdir)(),"dbx-artifact-build-errors"),(0,u.mkdirSync)(m,{recursive:!0}),g=(0,d.join)(m,`${E(s)}-${E(l)}-${Date.now()}-${process.pid}.log`),(0,u.writeFileSync)(g,c.endsWith("\n")?c:`${c}
|
|
2
|
+
`,"utf8"),g):void 0,w=S?.artifact_build_error_info?function(t,r){if(!r)return t;let{error_info:e,...i}=t;return i}(S.artifact_build_error_info,!!C):void 0;return{app_id:t,version_tag:S?.version_tag||r,artifact_status:S?.artifact_status,artifact_status_name:D.name,artifact_status_description:D.description,status:A,...w?{artifact_build_error_info:w}:{},...C?{error_info_file:C}:{},attempt:i,..."succeeded"===A?{version_detail_url:n(t,S?.version_tag||r),app_detail_url:_(t),doubao_debug_conversation_url:"https://inhouse.doubao.com/bot/2xgttdEs"}:{},log_id:b.log_id??o()??""}}async function b(t,e,i,o=5,a=g){let _=Date.now(),n=0,s=await a(t,e,n);for(;"succeeded"!==s.status&&"failed"!==s.status;){if(Date.now()-_>=1e3*i)throw A("轮询构建产物状态超时",S(s),"DBX_WAIT_TIMEOUT");await (0,r.setTimeout)(1e3*o),n+=1,s=await a(t,e,n)}return s}function $(t){return"number"!=typeof t?{name:"UNKNOWN",description:"服务端未返回构建产物状态"}:l[t]??{name:"UNKNOWN",description:`无法识别的构建产物状态:${t}`}}function S(t){return{...t,status:"succeeded"===t.status?"success":"queued"===t.status||"unknown"===t.status&&"number"==typeof t.artifact_status?"building":t.status}}function D(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||"构建产物失败",i?`${o}; 错误详情已写入 ${i}`:e.error_info?e.error_info:e.error_code?e.error_code:"number"==typeof e.last_status_before_failed?`构建产物在状态 ${e.last_status_before_failed} 后失败`:"构建产物失败"}let o=t.artifact_status;if(8===o){let t=$(o);return`artifact_status=${o} (${t.name})`}}function E(t){return t.trim().replace(/[^a-zA-Z0-9._-]+/g,"_")||"unknown"}function A(t,r,e="DBX_BUILD_FAILED"){return new i(t,{code:e,details:r,logId:o()})}export{p as logArtifactBuildFailure,m as logArtifactDebugInstructions,g as queryArtifactStatus,c as runArtifactsStatus,b as waitForArtifactStatus};
|
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"./1264.js";import{command_Command as o,runCommand as e}from"./2232.js";import{connectDevService as r,DEV_ACTIONS as _}from"./275.js";import{resolveProjectLayout as i}from"./project-layout.js";let n=t("node:path");async function a(t){let o=(0,n.resolve)(process.cwd()),e=i(o).frontendDirectory,r=await p(o,e);return t.log("正在停止开发服务"),{status:"stopping",result:r}}async function p(t,o){let e;try{return e=await r({projectPath:t,appDir:o,nodeIdPrefix:"dev-stop",requestTimeoutMs:5e3}),await e.call(_.stop)}finally{await e?.stop().catch(()=>void 0)}}export default function(){return new o("stop").description("停止常驻 dev 调试服务").action(async(t,o)=>e(o,t=>a(t)))};
|
package/dist/sync.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./1264.js";import{CliUsageError as _,withCliErrorCode as o,runCommand as e,command_Command as n,CliError as i}from"./2232.js";import{resolveProjectAppId as r}from"./project.js";import{resolveProjectLayout as s}from"./project-layout.js";import{runBusinessTemplatesUpload as c}from"./build~1.js";let p=t("node:fs"),a="business-templates";async function l(t,e,n,f=c){let u=n?.trim();if(void 0!==n&&u!==a)throw new _(`暂不支持同步 ${JSON.stringify(u)}。当前只支持 ${a}(业务模板)`,"DBX_USAGE_ERROR",{allowed_types:[a]});let d=r(e);t.targetAppId=d;let m=s(e).businessTemplatesPath,y=await o("DBX_PROJECT_INVALID",async()=>(0,p.statSync)(m,{throwIfNoEntry:!1})?.isFile()??!1);if(u===a&&!y)throw new i(`找不到业务模板配置文件:${m}。请检查 --project 指向的目录是否正确。`,{code:"DBX_PROJECT_INVALID"});if(!y)return t.log("未找到平台配置,无需同步"),{operation:"config.sync",app_id:d,synced_count:0,config_sync_results:[]};let C=await o("DBX_CONFIG_SYNC_FAILED",()=>f(t,d,{project:e,quiet:!0})),S={operation:"config.sync",app_id:d,synced_count:1,config_sync_results:[{config_type:a,scope:"app",state:"succeeded",rolled_back_with_version:!1,result:C.business_template_sync_result}],log_id:C.log_id};return t.log("平台配置已同步"),t.log(`配置类型:${a}`),t.log("平台配置对整个应用生效,不随应用版本回滚"),S}export default function(){return new n("sync").description("同步配置到开发者平台").argument("[config-type]",`配置类型,默认同步项目中找到的全部配置(目前支持 ${a})`).option("--project <path>","项目目录",".").action(async(t,_,o)=>e(o,o=>l(o,_.project,t)))};export{l as runConfigSync};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var e;let t;import"node:module";import{__webpack_require__ as r}from"./rslib-runtime.js";import"./1264.js";import{readGatewayJson as o}from"./app.js";import{getApiUrl as n,authorizedFetch as a,withConfiguredFetchHeaders as i,summarizeLogError as s,stringField as l,isRecord as c}from"./2232.js";import{resolveSandboxProject as d}from"./sandbox.js";import{stableStringify as u,buildUAFinalStatePrompt as m,connectMCPClient as _,parseJSONOrText as g,formatMs as p,isAppQuotaExhausted as f,StructuredOutputError as h,parseJSONObject as w,LLMClient as y,registerStructuredOutputDiagnostics as S,buildUASystemPrompt as v,buildUATurnPrompt as b,buildEvalAgentSkills as $,resolveMiniappDir as I,logger as E,requestStructuredOutput as x,isGatewayAuthFailure as j}from"./6438.js";import{reportToolResult as A,SimulatorHTTPError as D,SimulatorStreamError as C,runSimulatorStream as k}from"./client~1.js";import{parseMCPHTTPBody as T}from"./client.js";let R={apiUrl:n,fetch:a,timeoutMs:3e4};async function N(e,t){let r=e.existingSessionId?.trim();if(r)return{sessionId:r};let o=await P(e,t);return{sessionId:o.sessionId,owned:o}}async function P(e,t=R){let r=await O(t,t.apiUrl("/app_developer/api/sandbox/session/create"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sandbox_project_id:d(I(e.projectPath)).id,manifest:e.manifestYAML,business_templates:"",app_id:e.appId})},e.signal,"创建 Sandbox 会话"),n=await o(r,"创建 Sandbox 会话"),a=n.data?.sandbox_session_id?.trim();if(!a)throw Error("创建 Sandbox 会话失败:响应缺少 sandbox_session_id");return L(a,t)}function L(e,t=R){let r,o=e.trim();if(!o)throw Error("Sandbox 会话 ID 不能为空");return{sessionId:o,close:()=>r??=M(o,t)}}async function M(e,t){let r=await O(t,t.apiUrl("/app_developer/api/sandbox/session/revoke"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sandbox_session_id:e})},void 0,"撤销 Sandbox 会话");await o(r,"撤销 Sandbox 会话")}async function O(e,t,r,o,n){let a=new AbortController,i=!1,s=setTimeout(()=>{i=!0,a.abort()},e.timeoutMs),l=()=>a.abort(o?.reason);o?.aborted?l():o?.addEventListener("abort",l,{once:!0});try{return await e.fetch(t,{...r,signal:a.signal})}catch(t){if(i)throw Error(`${n}超时(${e.timeoutMs} 毫秒)`);throw t}finally{clearTimeout(s),o?.removeEventListener("abort",l)}}let U=r("node:child_process"),K=r("node:fs"),H=r("node:os"),B=r("node:path"),F=new Set(["node_modules",".doubao-apps",".dbx","dist",".git"]);class q extends Error{code;signal;constructor(e){let t="SIGSEGV"===e.signal?"渲染运行时发生原生崩溃(SIGSEGV / Segmentation fault: 11)":e.signal?`渲染运行时被信号 ${e.signal} 终止`:`渲染运行时异常退出(exit code ${e.code??"unknown"})`;super(e.detail?`${t}:${e.detail}`:t),this.name="EvalDevRuntimeProcessError",this.code=e.code,this.signal=e.signal}}function G(e){let t=(0,B.resolve)(e);if(!(0,K.existsSync)(t)||!(0,K.statSync)(t).isDirectory())throw Error(`小程序目录不存在: ${t}`);let r=(0,B.join)(t,"node_modules");if(!(0,K.existsSync)(r))throw Error(`未找到小程序依赖目录 ${r}。请在小程序目录运行 pnpm install(或使用对应包管理器安装依赖),然后再执行评估。`)}function J(e,t){let r=(0,B.relative)((0,B.resolve)(t),(0,B.resolve)(e));return""===r||!r.startsWith(`..${B.sep}`)&&".."!==r&&!(0,B.isAbsolute)(r)}async function Y(e){var t,r,o,n;let a,i,l,c,d,u,m,_=function(e,t=[]){G(e);let r=(0,K.mkdtempSync)((0,B.join)((0,H.tmpdir)(),"dbx-eval-")),o=!1,n=()=>{if(!o){o=!0;try{(0,K.rmSync)(r,{recursive:!0,force:!0})}catch(e){E.warn(`[eval-dev-runtime] 隔离环境清理失败(${s(e)})`)}}};try{return{directory:function(e,t,r=[]){let o=(0,B.resolve)(e);G(o);let n=(0,B.join)(o,"node_modules"),a=(0,B.resolve)(t);var i=o,l=a;if(J(l,i))throw Error(`小程序隔离目录不能位于源目录内: ${l}`);if(J(i,l))throw Error(`小程序隔离目录不能包含源目录: ${l}`);let c=r.map(e=>(0,B.resolve)(e));(0,K.existsSync)(a)&&(0,K.rmSync)(a,{recursive:!0,force:!0}),(0,K.mkdirSync)(a,{recursive:!0});try{return(0,K.cpSync)(o,a,{recursive:!0,dereference:!1,filter:e=>{let t=(0,B.resolve)(e);return t===o||!c.some(e=>J(t,e))&&!F.has((0,B.basename)(e))}}),(0,K.symlinkSync)(n,(0,B.join)(a,"node_modules"),"win32"===process.platform?"junction":"dir"),a}catch(e){try{(0,K.rmSync)(a,{recursive:!0,force:!0})}catch(e){E.warn(`[eval-dev-runtime] 隔离环境回滚失败(${s(e)})`)}throw e}}(e,(0,B.join)(r,"miniapp"),t),cleanup:n}}catch(e){throw n(),e}}(e.miniappDir,e.excludePaths),g=_.directory;E.log("[eval-dev-runtime] 已创建隔离渲染环境");let p=(0,B.join)(g,"..","runtime.json");(0,K.writeFileSync)(p,`${JSON.stringify({...e,miniappDir:g,excludePaths:void 0})}
|
|
2
|
+
`,"utf8");try{i=(0,U.spawn)(process.execPath,(t=function(){let e=process.argv[1];if(!e)throw Error("无法解析 DBX CLI 入口。");return(0,B.resolve)(e)}(),r=p,[t,"eval","run","--internal-dev-runtime",r]),{cwd:g,detached:"win32"!==process.platform,env:{...process.env,DBX_CLI_NO_UPDATE_NOTIFIER:"1"},stdio:["ignore","inherit","inherit","ipc"]})}catch(e){throw _.cleanup(),e}let f=!1,h=!1,w=new Promise((e,t)=>{c=e,d=t}),y=new Promise((e,t)=>{u=t});y.catch(()=>void 0),i.on("message",e=>{if(e&&"object"==typeof e){if("log"===e.type){let t=`[eval-dev-runtime] ${e.message}`;"warn"===e.level?E.warn(t):E.log(t);return}if("failure"===e.type){l=e.message,f||d?.(Error(e.message));return}if("ready"===e.type)try{let t=function(e){if(!e||"object"!=typeof e||!("webDebuggerUrl"in e)||"string"!=typeof e.webDebuggerUrl||!e.webDebuggerUrl.trim())throw Error("评估运行环境未返回 Web 调试器地址");if(!("sandboxSessionId"in e)||"string"!=typeof e.sandboxSessionId||!e.sandboxSessionId.trim())throw Error("评估运行环境未返回 Sandbox 会话 ID");return{webDebuggerUrl:e.webDebuggerUrl,sandboxSessionId:e.sandboxSessionId}}(e);f=!0,c?.(t)}catch(e){l=e.message,d?.(e)}}}),i.once("error",e=>{f?u?.(e):d?.(e)});let S=new Promise(e=>{i.once("exit",(t,r)=>{let o={code:t,signal:r};if(e(o),Z(i),_.cleanup(),h)return;let n=new q({...o,detail:l});f?u?.(n):d?.(n)})});try{m=await (o=w,new Promise((e,t)=>{let r=setTimeout(()=>t(Error(`eval dev runtime startup timed out after ${9e4}ms`)),9e4);o.then(t=>{clearTimeout(r),e(t)},e=>{clearTimeout(r),t(e)})}))}catch(e){throw h=!0,await V(i,S),_.cleanup(),e}let v=L(m.sandboxSessionId),b=(n={requestStop:()=>{h=!0,i.connected&&i.send({type:"stop"})},stopChild:()=>V(i,S,15e3),cleanup:_.cleanup,revokeSession:()=>v.close()},()=>a??=(async()=>{try{n.requestStop(),await n.stopChild()}finally{n.cleanup(),await n.revokeSession().catch(e=>{E.warn(`[eval-dev-runtime] Sandbox Session 清理失败(${s(e)})`)})}})());return{...m,unexpectedExit:y,stop:b}}function X(e){return new Promise(t=>setTimeout(t,e))}async function V(e,t,r=0){!(r>0&&await Promise.race([t.then(()=>!0),X(r).then(()=>!1)]))&&(e.kill("SIGTERM"),Z(e),await Promise.race([t.then(()=>!0),X(3e3).then(()=>!1)])||(e.kill("SIGKILL"),Z(e,"SIGKILL"),await Promise.race([t,X(1e3)])))}function Z(e,t="SIGTERM"){if("win32"!==process.platform&&e.pid)try{process.kill(-e.pid,t)}catch{}}async function z(e,t,r){let o;try{o=await e.callbacks.onToolCall(r,t.requestID)}catch(n){let e;o={content:e=Q(n),structured:{error:{code:"MCP_TOOL_EXECUTION_FAILED",message:e,stage:"tool_execute"}},raw_result_text:e,is_error:!0},t.streamErrors.push(W("tool_execute",n,r))}let n={toolCall:r,result:o};t.toolCalls.push(n);try{let{report:a,logId:i}=await A({gatewayOrigin:e.gatewayOrigin,requestID:t.requestID,traceID:t.traceID,toolCall:r,result:o,status:o.is_error?"FAILED":"SUCCESS"});if(void 0!==a.code&&0!==a.code)throw new D(`工具结果上报失败:code=${a.code}, ${Q(a.message||"上报被拒绝")}`,i||l(a,"log_id"));n.report=a,e.callbacks.onToolReported?.(r,a)}catch(e){throw t.streamErrors.push(W("tool_report",e,r)),e}}function W(e,t,r){return{code:"tool_call_or_report_failed",stage:e,message:Q(t),tool_name:r.tool_name,tool_call_id:r.tool_call_id,log_id:l(t,"logId")||l(t,"log_id")}}function Q(e){return(e instanceof Error?`${e.name||"Error"}: ${e.message}`:"string"==typeof e?e:"MCP tool execution failed").replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer <redacted>").replace(/((?:api[_-]?key|authorization|token|secret|cookie)\s*[=:]\s*)[^\s,;}]+/gi,"$1<redacted>").slice(0,1e3)}let ee="DBX_EVAL_SIMULATOR_CHAT_QPS",et=new Set(["CERT_HAS_EXPIRED","DEPTH_ZERO_SELF_SIGNED_CERT","ERR_TLS_CERT_ALTNAME_INVALID","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_VERIFY_LEAF_SIGNATURE"]),er=(e={runSimulatorStream:function(e){return k(e,z)},waitForStart:function(e){if(!Number.isFinite(e.minIntervalMs)||e.minIntervalMs<0)throw Error("minIntervalMs 必须为有限非负数");let t=e.now??Date.now,r=e.sleep??el,o=0,n=Promise.resolve();return a=>{let i=n.then(async()=>{a?.throwIfAborted();let n=Math.max(0,o-t());n>0&&await r(n,a),a?.throwIfAborted(),o=t()+e.minIntervalMs});return n=i.catch(()=>void 0),i}}({minIntervalMs:function(e=process.env[ee]){let t=e?.trim(),r=void 0===t||""===t?.5:Number(t);if(!Number.isFinite(r)||r<=0)throw Error(`${ee} 必须为有限正数`);return 1e3/r}()}),sleep:el,random:Math.random,now:Date.now},async(t,r={})=>{let o=[];for(let n=1;n<=5;n++){r.signal?.throwIfAborted(),await e.waitForStart(r.signal);let a=e.now();try{let s=await function(e,t){let r=e?.trim();return r?i({"X-DBX-Sandbox-Session-ID":r},t):t()}(r.sandboxSessionId,()=>e.runSimulatorStream(t)),d=e.now(),u=function(e){for(let t of e){if(c(t)&&"tool_call_or_report_failed"===t.code)continue;let e=(function e(t,r=0){if(r>4)return[];if("string"==typeof t)return[t];if(Array.isArray(t))return t.flatMap(t=>e(t,r+1));if(!c(t))return[];let o=[];for(let e of["code","message"]){let r=t[e];"string"==typeof r&&o.push(r)}for(let n of["error","details"])o.push(...e(t[n],r+1));return o})(t).find(e=>(function(e){let t=e.trim().toLowerCase();return"rate_limit_exceeded"===t||t.includes("ratelimit triggered")||t.includes("rate limit exceeded")})(e));if(e)return e}}(s.streamErrors),m=u?void 0:function(e){let t=e.map(e=>(function e(t){if("string"==typeof t)return t;if(!c(t))return e_(t);let r=l(t,"code"),o=l(t,"message")||l(t,"msg")||l(t,"error_message"),n=l(t,"reason"),a=l(t,"detail")||l(t,"details"),i=e(t.error),s=[r&&o?`${r}: ${o}`:o??r,n,a,i,"string"==typeof t.details?void 0:e(t.details)].filter(e=>!!e);return s.length>0?s.join(" | "):e_(t)})(e)).filter(e=>!!e);if(0!==t.length){var r;return(r=t.join(" | ")).length>1e3?`${r.slice(0,997)}...`:r}}(s.streamErrors),_={attempt:n,started_at_ms:a,ended_at_ms:d,duration_ms:d-a,status:200,log_id:s.logID,outcome:u?"rate_limited":m?"failed":"success",error:u??m};o.push(_);let g=m&&0===s.toolCalls.length&&ed(m)?m:void 0;if(!u&&!g){if(m){E.warn(`[simulator-chat] 失败,尝试=${n}/5 logid=${s.logID||"-"} error=${es(m)}`);let e=s.toolCalls.length>0&&ed(m)?"tool_call_observed":void 0;throw new eo(`模拟器对话失败: ${m}`,s,o,{retryBlockedReason:e})}return n>1&&E.log(`[simulator-chat] 成功,尝试=${n}/5 logid=${s.logID||"-"}`),{state:s,attempts:o}}if(u&&s.toolCalls.length>0)throw E.warn(`[simulator-chat] 已检测到工具调用,停止重试,尝试次数=${n} logids=${ep(o)}`),new en(`模拟器对话在调用工具后被限流: ${u}`,s,o,{retryBlockedReason:"tool_call_observed"});let p=!!u,f=p?"rate limited":"connection error",h=u??g;if(5===n)throw E.error(`[simulator-chat] 重试次数已耗尽,尝试次数=${n} logids=${ep(o)}`),function(e,t,r,o,n={}){return e?new en(t,r,o,n):new eo(t,r,o,n)}(p,`模拟器对话因${p?"限流":"连接错误"}重试 ${n} 次后仍失败: ${h}`,s,o,{retryExhausted:!0});await ei(n,_,e,r.signal,f)}catch(c){if(r.signal?.aborted)throw r.signal.reason;if(c instanceof eo)throw c;let t=e.now(),i=ea(c);if(c instanceof D&&429===i){let s={attempt:n,started_at_ms:a,ended_at_ms:t,duration_ms:t-a,status:i,log_id:c.logId,outcome:"rate_limited",error:c.message};o.push(s);let l=ec(c.logId);if(5===n)throw E.error(`[simulator-chat] 重试次数已耗尽,尝试次数=${n} logids=${ep(o)}`),new en(`模拟器对话返回 HTTP 429,重试 ${n} 次后仍失败`,l,o,{retryExhausted:!0,cause:c});await ei(n,s,e,r.signal,"rate limited");continue}let s={attempt:n,started_at_ms:a,ended_at_ms:t,duration_ms:t-a,status:ea(c),log_id:eg(c),outcome:"failed",error:em(c)};if(o.push(s),c instanceof C){let t=ed(c.message),a=c.state.toolCalls.length>0;if(t&&!a&&n<5){await ei(n,s,e,r.signal,"connection error");continue}throw t&&a?E.warn(`[simulator-chat] 已检测到工具调用,停止重试,尝试次数=${n} logids=${ep(o)}`):t&&E.error(`[simulator-chat] 重试次数已耗尽,尝试次数=${n} logids=${ep(o)}`),new eo(c.message,c.state,o,{cause:c,retryExhausted:t&&!a,retryBlockedReason:t&&a?"tool_call_observed":void 0})}if(function(e){let t=e,r=new Set,o=!1;for(let e=0;e<5&&void 0!==t&&!r.has(t);e++){r.add(t);let e=em(t),n=l(t,"code");if(n&&et.has(n.trim().toUpperCase()))return!1;(ed(e)||n&&ed(n))&&(o=!0),t=eu(t)}return o}(c)){if(s.error=function(e){let t=em(e),r=function(e){let t=eu(e),r=new Set;for(let e=0;e<4&&void 0!==t&&!r.has(t);e++){r.add(t);let e=l(t,"code");if(e)return e;t=eu(t)}}(e);return r&&!t.includes(r)?`${t} | ${r}`:t}(c),n<5){await ei(n,s,e,r.signal,"connection error");continue}throw E.error(`[simulator-chat] 重试次数已耗尽,尝试次数=${n} logids=${ep(o)}`),new eo(`模拟器对话连接异常,重试 ${n} 次后仍失败: ${s.error}`,ec(eg(c)),o,{cause:c,retryExhausted:!0})}throw new eo(em(c),ec(eg(c)),o,{cause:c})}}throw Error("模拟器对话重试流程异常结束")});class eo extends C{attempts;retryExhausted;retryBlockedReason;constructor(e,t,r,o={}){super(e,t,t.logID),this.attempts=r,this.name="EvalSimulatorStreamError",this.retryExhausted=o.retryExhausted??!1,this.retryBlockedReason=o.retryBlockedReason,this.cause=o.cause}}class en extends eo{constructor(e,t,r,o={}){super(e,t,r,o),this.name="EvalSimulatorRateLimitError"}}function ea(e){if(!(e instanceof D))return;let t=e.status;if("number"==typeof t&&Number.isInteger(t))return t;let r=e.message.match(/\bHTTP\s+(\d{3})\b/i);return r?Number(r[1]):void 0}async function ei(e,t,r,o,n="rate limited"){let a=function(e,t=Math.random){if(!Number.isInteger(e)||e<1||e>=5)throw Error("retryNumber 必须介于 1 和 4 之间");return Math.round(1e3*2**(e-1)*(.8+.4*Math.min(1,Math.max(0,t()))))}(e,r.random);t.retry_delay_ms=a,E.warn(`[simulator-chat] ${"rate limited"===n?"已限流":"连接异常"},尝试=${t.attempt}/5 logid=${t.log_id||"-"} retry_in=${a}ms error=${t.error?es(t.error):"-"}`),await r.sleep(a,o)}function es(e){let t=e.match(/(?:^|\|\s)([A-Z][A-Z0-9_]{2,})(?=[:\s|]|$)/)?.[1];return t||(ed(e)?"SIMULATOR_CONNECTION_ERROR":s(Error(e)))}function el(e,t){return t?.aborted?Promise.reject(t.reason):new Promise((r,o)=>{let n=setTimeout(function(){t?.removeEventListener("abort",a),r()},e);function a(){clearTimeout(n),o(t?.reason)}t?.addEventListener("abort",a,{once:!0})})}function ec(e){return{requestID:"",logID:e,answer:"",toolCalls:[],cards:[],traceEvents:[],streamErrors:[]}}function ed(e){let t=e.trim().toLowerCase();return!!t&&("terminated"===t||"fetch failed"===t||t.includes("code = 14")||t.includes("code=14")||t.includes("connection termination")||t.includes("connection terminated")||t.includes("connection reset")||t.includes("connection closed")||t.includes("connection refused")||t.includes("connection error")||t.includes("premature close")||t.includes("other side closed")||t.includes("econnreset")||t.includes("econnrefused")||t.includes("enotfound")||t.includes("eai_again")||t.includes("epipe")||t.includes("etimedout")||t.includes("und_err_connect_timeout")||t.includes("und_err_socket")||t.includes("socket hang up")||t.includes("stream disconnected")||t.includes("network error")||t.includes("unavailable")||t.includes("timeout")||t.includes("timed out"))}function eu(e){return c(e)?e.cause:void 0}function em(e){return e instanceof Error?e.message:String(e)}function e_(e){if(void 0!==e)try{return JSON.stringify(e)}catch{return String(e)}}function eg(e){return l(e,"logId")||l(e,"log_id")||l(e,"logID")}function ep(e){return e.map(e=>e.log_id||"-").join(",")}let ef=r("node:crypto"),eh=new Set(["posthook_tool_input","posthook_tool_output","posthook_tool_report"]);function ew(e){return"simulator_response"===e.origin&&eh.has(e.family)}function ey(e,t){var r,o;let n,a=e.rounds.flatMap(e=>e.simulator_failures||[]),i=a.filter(ew);return 0===i.length?"terminated"===e.metadata.stop_reason?"terminated_infrastructure":"scoreable_clean":(r=e,o=t,n=r.rounds.flatMap(e=>e.tool_calls.filter(e=>!e.is_error)),o.length>0?n.length>0:r.rounds.some(e=>"terminated"!==e.status&&e.assistant_answer.trim().length>0&&0===(e.simulator_failures||[]).length))?"scoreable_with_posthook":i.length===a.length?"blocked_posthook":"scoreable_with_posthook"}function eS(e,t,r,o){let n=ev(r);if(!n)return;let a=ev(n.details),i=ev(n.error);if("cli_tool_callback"===n.origin)return;let s=eb(n,"code")||eb(a,"code")||eb(i,"code"),l=eb(n,"stage")||eb(a,"stage")||eb(i,"stage"),c=function(e,t,r){let o,n=e?.trim().toLowerCase(),a=t?.trim().toLowerCase();if("tool_call_arguments_invalid"===n||"tool_call_validation"===a)return"posthook_tool_input";if("miniapp_mcp_result_invalid"===n||"context_post_hook"===a||"tool_result_validation"===a)return"posthook_tool_output";if("tool_report_validation"===a||"tool_call_or_report_failed"===n&&((o=u(r).toLowerCase()).includes("schema validation")||o.includes("protocol validation")||o.includes("entity validation")||o.includes("mcp tool invalid response")))return"posthook_tool_report";let i=u(r).toLowerCase();return"rate_limit_exceeded"===n||i.includes("ratelimit triggered")||i.includes("rate limit exceeded")||i.includes("code = 14")||i.includes("timed out")||i.includes("timeout")||i.includes("connection terminated")||i.includes("econnreset")?"infrastructure":"agent_run_failed"===n||"reply_failed"===n?"agent_runtime":"unknown"}(s,l,n),d=eb(n,"message")||eb(n,"user_message")||eb(a,"message")||eb(i,"message")||function(e){try{return JSON.stringify(e)}catch{return String(e)}}(r);if(!d)return;let m=a?.arguments_json??n.arguments_json??n.arguments,_=a?.input_schema_json??n.input_schema_json??n.input_schema,p={round:e,origin:"simulator_response",source:t,family:c,code:s,stage:l,message:d,user_message:eb(n,"user_message")||eb(a,"user_message"),tool_name:eb(n,"tool_name")||eb(a,"tool_name")||o.toolName,tool_call_id:eb(n,"tool_call_id")||eb(a,"tool_call_id"),log_id:eb(n,"log_id")||eb(a,"log_id")||o.logId,arguments:g(m),input_schema:g(_),schema_errors:function(e){if(Array.isArray(e)){let t=e.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(Boolean);return t.length>0?t:void 0}if("string"!=typeof e||!e.trim())return;let t=e.split(";").map(e=>e.trim()).filter(Boolean);return t.length>0?t:void 0}(a?.schema_errors??n.schema_errors)},f=(0,ef.createHash)("sha256").update(u(r)).digest("hex");return{event_id:`simfail_${f.slice(0,20)}`,...p,raw_digest:f}}function ev(e){return"object"!=typeof e||null===e||Array.isArray(e)?void 0:e}function eb(e,t){let r=e?.[t];return"string"==typeof r&&r.trim()?r.trim():void 0}async function e$(e){let o,{chromium:n}=await import("node:module").then(function(e){return r.t(e.createRequire(import.meta.url)("playwright-core"),22)}),a="chrome"===(o=(process.env.DBX_EVAL_BROWSER||"").trim().toLowerCase())?["chrome"]:"chromium"===o?["chromium"]:t?[t]:["chrome","chromium"],i=[];for(let r of a)try{let o=await n.launch(function(e,t){let r={headless:!0,...t};return"chrome"===e?{...r,channel:"chrome"}:{...r,args:["--no-sandbox",...t?.args??[]]}}(r,e));return r!==t&&(t=r,"chromium"===r&&a.length>1&&E.warn("[browser] 系统 Chrome 不可用,正在使用 Playwright 内置的 Chromium。")),o}catch(t){let e=t.message?.split("\n")[0]||String(t);i.push(`${r}: ${e}`)}throw Error(`无法启动无头浏览器(已尝试 ${a.join(", ")})。${i.join(" | ")}。请安装 Google Chrome 或运行 npx playwright install chromium。`)}function eI(){return t}let eE=0,ex=null,ej=null;async function eA(e,t,r){let o=++eE,n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:o,method:"tools/call",params:{name:t,arguments:r}})});if(!n.ok)throw Error(`wsdMcp ${t} HTTP ${n.status}: ${await n.text()}`);let a=T(await n.text(),n.headers.get("content-type"),o);if(a.error)throw Error(`wsdMcp ${t} error: ${a.error.message}`);return a.result||{}}let eD=null;async function eC(e,t=2e4){let r=Date.now()+t;for(;Date.now()<r;){try{let t=await eA(e,"list_render_targets",{type:"all"}),r=t?.structuredContent?.widgets;if(Array.isArray(r)&&r.length>0)return!0}catch{}await new Promise(e=>setTimeout(e,800))}return!1}async function ek(e){if(eD)try{if(ej){try{await ej.close()}catch{}ej=null}if(ex){try{await ex.close()}catch{}ex=null}ex=await e$(),ej=await ex.newPage(),await ej.goto(eD,{waitUntil:"domcontentloaded",timeout:3e4}),await eC(e,2e4)}catch{}}async function eT(e,t,r=2e4){if(eD=t,ej)return!0;E.log(`[gen-trajectory] 正在启动无头 Chromium,访问 ${t}……`);try{ex=await e$(),ej=await ex.newPage(),await ej.goto(t,{waitUntil:"domcontentloaded",timeout:3e4})}catch(e){return E.warn(`[gen-trajectory] 截图渲染服务不可用(${s(e)}),已跳过截图`),await eR(),!1}return await eC(e,r)?(await new Promise(e=>setTimeout(e,3e3)),E.log("[gen-trajectory] 无头 SDK 已就绪。"),!0):(E.warn(`[gen-trajectory] 等待 ${r} 毫秒后 SDK 仍未就绪,将跳过截图。`),await eR(),!1)}async function eR(){if(ej){try{await ej.close()}catch{}ej=null}if(ex){try{await ex.close()}catch{}ex=null}}async function eN(e,t,r,o){let n,a,i;await ek(e);let s=!1;for(let o=0;o<3;o++){n=await eA(e,"render_widget",{widgetId:t,structuredContent:r});let i=n?.structuredContent;if(i?.rendered){s=!0;break}a=i?.error,E.log(`[gen-trajectory] render_widget 失败(第 ${o+1} 次尝试,${i?.error?.code||"未知错误"}),正在重新加载页面……`),await ek(e)}if(!s||!n){let t="";try{if(ej){let r=await eA(e,"list_console_messages",{levels:["error","warn"],pageSize:5});t=JSON.stringify(r?.structuredContent||r?.content?.[0]?.text||"").slice(0,500)}}catch{}throw Error(`render_widget did not report rendered:true (err=${JSON.stringify(a).slice(0,200)}${t?`, page=${t}`:""})`)}let l=n.structuredContent?.target?.uid,c="";for(let t=0;t<5;t++){await new Promise(e=>setTimeout(e,500));let t=await eA(e,"take_screenshot",{format:"png",...l&&{uid:l}}),r=t?.content?.find(e=>"image"===e.type&&e.data);if(r?.data){i=r.data;break}c=t?.content?.map(e=>e.text||"").join(" | ")||""}if(!i)throw Error(`take_screenshot returned no image after 5 attempts (last: ${c.slice(0,200)})`);(0,K.writeFileSync)(o,Buffer.from(i,"base64"))}async function eP(e,t,r,o,n=[]){if(0!==o.length){(0,K.existsSync)(t)||(0,K.mkdirSync)(t,{recursive:!0});for(let a=0;a<o.length;a++){let i=o[a],l=function(e,t,r){let o=function(e){let t=e.result,r=Array.isArray(t?.entities)?t.entities:t?.entity_list;if(Array.isArray(r)&&0!==r.length)return r[0]}(e);if(!o)return;let n=function(e){let t=e.widget_id;if("string"==typeof t)return t;let r=e._meta;if(!r||"object"!=typeof r||Array.isArray(r))return;let o=r.widget_id;return"string"==typeof o?o:void 0}(o)||t?.widget_id||r.find(e=>e.entity_id===o.entity_id)?.widget_id||r.find(e=>e.entity_id===o.order_id)?.widget_id;return n?{widgetId:n,entity:o}:void 0}(i,n[a],n);if(!l)continue;let c=`round-${r}-call-${a+1}-${i.tool_name}.png`,d=(0,B.join)(t,c);try{await eN(e,l.widgetId,l.entity,d),i.screenshot_path=d,E.log("[gen-trajectory] 截图已生成")}catch(e){E.warn(`[gen-trajectory] ${i.tool_name} 截图失败(${s(e)})`)}}}}class eL extends Error{simulatorError;constructor(e){super(e?.message||String(e)),this.simulatorError=e,this.name="SimulatorInvocationError"}}async function eM(e,t,r={}){let o,n;e.signal?.throwIfAborted();let a=new Date().toISOString(),i=r.caseLabel||r.caseId||"Trajectory";E.log(`[gen-trajectory] 开始生成评测轨迹(${i},Attempt ${r.attemptK??1})`),r.onDetail?.({title:`${i} \xb7 开始生成轨迹`,technicalName:"gen_trajectory",fields:[["Attempt",r.attemptK??1]]});let s=await _(e.mcp.url,e.app.appId,e.mcp.headers),l=e.sandboxSessionId?.trim();try{var c,d,u;let _,g,w,I,A;e.signal?.throwIfAborted();let D=s.tools;if(E.log(`[gen-trajectory] MCP 服务连接完成(工具 ${D.tools.length} 个)`),e.dev?.autoStart&&!e.dev.url&&(E.log("[gen-trajectory] 正在启动隔离评估运行环境……"),l=(o=await Y(e.dev.autoStart)).sandboxSessionId,e.dev={...e.dev,url:o.webDebuggerUrl}),!l&&e.projectPath){let t=await N({projectPath:e.projectPath,appId:e.app.appId,manifestYAML:e.app.manifestYAML,signal:e.signal});l=t.sessionId,n=t.owned}if(e.dev?.url){let t=e.dev.url,r=new URL(t).origin;await eT(t,r)?E.log("[gen-trajectory] 截图渲染服务已就绪"):(E.warn("[gen-trajectory] 截图渲染服务未就绪,已跳过截图"),e.dev=void 0)}let C=new y({...e.llm,appKey:e.app.appId},e.signal);r.diagnosticDir&&S(C,r.diagnosticDir);let k=v(t,D.tools,r.scenario,r.referenceTime??a),T=$(e.app.skills,r.scenario?.initialState),R=[],P=[],L="max_rounds";for(let t=0;t<e.run.maxRounds;t++){let o,n;e.signal?.throwIfAborted();let a=[];try{E.debug(`[gen-trajectory] 开始第 ${t+1} 轮`),r.onDetail?.({title:`${i} \xb7 生成用户输入`,technicalName:"gen_trajectory",fields:[["Round",t+1],["Attempt",r.attemptK??1]]});let u=b(R,t),m=await x({llmClient:C,stage:`trajectory:ua:${r.caseId??"unknown"}:k${r.attemptK??1}:round${t+1}`,messages:[{role:"system",content:k},{role:"user",content:u}],completionOptions:{response_format:{type:"json_object"}},parse:eF});if("stop"===m.action){E.log(`[gen-trajectory] 用户模拟结束(Round ${t+1},状态 ${m.goal_progress??"stop"})`),r.onDetail?.({title:`${i} \xb7 用户模拟结束`,technicalName:"gen_trajectory",fields:[["Round",t+1],["状态",m.goal_progress??"stop"]]}),L="ua_stop",_=eq(m);break}let g=m.content;o=g,n=m,E.debug(`[gen-trajectory] 已生成第 ${t+1} 轮用户输入`),r.onDetail?.({title:`${i} \xb7 执行用户请求`,technicalName:"gen_trajectory",fields:[["Round",t+1],["状态","已生成用户输入"]]});let f=await (c={evalCase:{app_key:e.app.appId,app_name:e.app.appId,query:g,skills:T,manifest:e.app.manifestYAML,mcp:{url:e.mcp.url},history_messages:R,max_step:e.run.maxStep},manifestYAML:e.app.manifestYAML,mcp:D,gatewayOrigin:e.gateway.origin,callbacks:{onToolCall:async e=>{let o=e.arguments_json?JSON.parse(e.arguments_json):{},n=Date.now();E.log(`[gen-trajectory] 正在调用工具:${e.tool_name}(Round ${t+1})`),r.onDetail?.({title:`${i} \xb7 调用工具`,technicalName:"gen_trajectory",fields:[["Round",t+1],["工具",e.tool_name],["状态","调用中"]]});let a=await s.callTool({tool_name:e.tool_name,arguments:o,tool_call_id:e.tool_call_id,server_id:e.server_id,app_key:e.app_key}),l=Date.now()-n;return E.log(`[gen-trajectory] 工具调用完成:${e.tool_name}(${a.is_error?"失败":"成功"},耗时 ${p(l)})`),r.onDetail?.({title:`${i} \xb7 工具返回`,technicalName:"gen_trajectory",fields:[["Round",t+1],["工具",e.tool_name],["状态",a.is_error?"ERROR":"OK"],["耗时",p(l)]]}),a}}},d={signal:e.signal,sandboxSessionId:l},er(c,d)).catch(t=>{if(e.signal?.aborted)throw e.signal.reason;throw new eL(t)}),h=f.state;for(let{toolCall:e,result:r}of(a=f.attempts,E.log(`[gen-trajectory] 助手回复生成完成(Round ${t+1},工具调用 ${h.toolCalls.length} 次,卡片 ${h.cards.length} 张)`),E.debug(`[gen-trajectory] 第 ${t+1} 轮完成(工具调用 ${h.toolCalls.length} 次)`),R.push({role:"USER",content:o}),h.toolCalls))R.push({role:"ASSISTANT",content:JSON.stringify({tool_call_id:e.tool_call_id,tool_name:e.tool_name,arguments:e.arguments_json})}),R.push({role:"TOOL",content:r?.content||r?.raw_result_text||JSON.stringify(r?.structured)||""});if(R.push({role:"ASSISTANT",content:h.cards.length>0?`${h.answer}
|
|
3
|
+
[已出卡片 ${h.cards.length} 张]`:h.answer}),P.push(eH(t+1,o,h,"completed",n,a)),e.dev?.url){let t=P[P.length-1],o=r.screenshotSubDir?(0,B.join)(e.dev.screenshotDir,r.screenshotSubDir):e.dev.screenshotDir;await eP(e.dev.url,o,t.round,t.tool_calls,t.cards),r.onDetail?.({title:`${i} \xb7 截图处理完成`,technicalName:"gen_trajectory",fields:[["Round",t.round],["工具调用",t.tool_calls.length],["截图",t.tool_calls.filter(e=>e.screenshot_path).length]]})}}catch(c){if(e.signal?.aborted)throw e.signal.reason;let r=c instanceof eL?c.simulatorError:c;if(!(c instanceof eL)&&(j(r)||f(r))||r instanceof h)throw r;let i=r?.message||String(r),s=eU(r,a),l=s.logId;E.warn(`[gen-trajectory] 第 ${t+1} 轮异常终止(${eB(r)}${l?`,LogID ${l}`:""})`),L="terminated",g=t+1,w=i,I=l,o&&s.state&&eK(s.state)?P.push(eH(t+1,o,s.state,"terminated",n,s.attempts)):s.attempts.length>0&&(A=s.attempts);break}}if("max_rounds"===L&&P.length===e.run.maxRounds)try{let t=await x({llmClient:C,stage:`trajectory:ua:${r.caseId??"unknown"}:k${r.attemptK??1}:final`,messages:[{role:"system",content:k},{role:"user",content:m(R,e.run.maxRounds)}],completionOptions:{temperature:0,response_format:{type:"json_object"}},parse:eF}),o=(u=t,"stop"===u.action?"ua_stop":"max_rounds");"ua_stop"===o?(L=o,_=eq(t),E.log(`[gen-trajectory] 最终用户状态复核完成(状态 ${_??"stop"})`)):E.warn("[gen-trajectory] 已达到最大轮次,用户目标尚未完成")}catch(t){if(e.signal?.aborted)throw e.signal.reason;if(j(t)||f(t))throw t;E.warn(`[gen-trajectory] 最终用户状态复核失败(${eB(t)}),保留 max_rounds 状态`)}return{metadata:{app_id:e.app.appId,intent:t,total_rounds:P.length,stop_reason:L,terminal_goal_progress:_,terminated_round:g,termination_error:w,termination_log_id:I,termination_simulator_attempts:A,started_at:a,finished_at:new Date().toISOString(),run_id:r.runId,case_id:r.caseId,attempt_k:r.attemptK},rounds:P}}finally{s.close(),await eR(),o&&(E.log("[gen-trajectory] 正在停止隔离评估运行环境……"),await o.stop().catch(()=>void 0)),await n?.close().catch(e=>{E.warn(`[gen-trajectory] Sandbox Session 清理失败(${e.message})`)})}}async function eO(e,t,r={}){e.signal?.throwIfAborted();let o=new Date().toISOString(),n=r.caseLabel||r.caseId||"Trajectory";E.log(`[gen-direct-trajectory] 开始生成单轮评测轨迹(${n},Attempt ${r.attemptK??1})`);let a=await _(e.mcp.url,e.app.appId,e.mcp.headers);try{let n;e.signal?.throwIfAborted();let l=a.tools,c=$(e.app.skills,r.scenario?.initialState),d=[];try{var i,s;let r=await (i={evalCase:{app_key:e.app.appId,app_name:e.app.appId,query:t,skills:c,manifest:e.app.manifestYAML,mcp:{url:e.mcp.url},history_messages:[],max_step:e.run.maxStep},manifestYAML:e.app.manifestYAML,mcp:l,gatewayOrigin:e.gateway.origin,callbacks:{onToolCall:async e=>{let t=e.arguments_json?JSON.parse(e.arguments_json):{},r=Date.now();E.log(`[gen-direct-trajectory] 正在调用工具:${e.tool_name}(Round 1)`);let o=await a.callTool({tool_name:e.tool_name,arguments:t,tool_call_id:e.tool_call_id,server_id:e.server_id,app_key:e.app_key});return E.log(`[gen-direct-trajectory] 工具调用完成:${e.tool_name}(${o.is_error?"失败":"成功"},耗时 ${p(Date.now()-r)})`),o}}},s={signal:e.signal,sandboxSessionId:e.sandboxSessionId},er(i,s));n=r.state,d=r.attempts}catch(s){if(e.signal?.aborted)throw e.signal.reason;let n=s?.message||String(s),a=eU(s,d),i=a.state&&eK(a.state)?a.state:void 0;return E.warn(`[gen-direct-trajectory] 单轮轨迹异常终止(${eB(s)}${a.logId?`,LogID ${a.logId}`:""})`),{metadata:{app_id:e.app.appId,intent:t,total_rounds:+!!i,stop_reason:"terminated",terminated_round:1,termination_error:n,termination_log_id:a.logId,termination_simulator_attempts:i?void 0:a.attempts,started_at:o,finished_at:new Date().toISOString(),run_id:r.runId,case_id:r.caseId,attempt_k:r.attemptK},rounds:i?[eH(1,t,i,"terminated",void 0,a.attempts)]:[]}}E.log(`[gen-direct-trajectory] 助手回复生成完成(Round 1,工具调用 ${n.toolCalls.length} 次,卡片 ${n.cards.length} 张)`);let u=eH(1,t,n,"completed",void 0,d);return{metadata:{app_id:e.app.appId,intent:t,total_rounds:1,stop_reason:"ua_stop",started_at:o,finished_at:new Date().toISOString(),run_id:r.runId,case_id:r.caseId,attempt_k:r.attemptK},rounds:[u]}}finally{a.close()}}function eU(e,t=[]){let r=e instanceof C?e.state:void 0,o=e instanceof eo?e.attempts:t,n=(e instanceof C?e.logId:void 0)||r?.logID||[...o].reverse().find(e=>e.log_id)?.log_id;return{state:r,attempts:o,logId:n}}function eK(e){return!!(e.requestID.trim()||e.answer||e.toolCalls.length>0||e.cards.length>0||e.traceEvents.length>0||e.streamErrors.length>0)}function eH(e,t,r,o="completed",n,a=[]){return{round:e,status:o,user_query:t,assistant_answer:r.answer,tool_calls:r.toolCalls.map(({toolCall:e,result:t})=>{let o=t?void 0:function(e,t){if(t)for(let r=e.length-1;r>=0;r--){let o=e[r];if("object"==typeof o&&null!==o&&!Array.isArray(o)&&o.tool_call_id===t)return{...o}}}(r.streamErrors,e.tool_call_id);return{tool_name:e.tool_name,tool_call_id:e.tool_call_id,arguments:e.arguments_json?g(e.arguments_json):void 0,result:t?.structured||t?.content||t?.raw_result_text||o||null,is_error:t?.is_error||void 0!==o}}),cards:r.cards,trace_events:r.traceEvents,simulator_failures:function(e,t){let r=[...t.traceEvents.flatMap(r=>r.error?[eS(e,"trace_event",r.error,{logId:t.logID,toolName:r.tool_name})]:[]),...t.streamErrors.map(r=>{var o;return eS(e,(o=r,ev(o)?.origin==="simulator_tool_report_response")?"tool_report":"stream_error",r,{logId:t.logID})})].flatMap(e=>e?[e]:[]),o=new Map;for(let e of r){let t=[e.family,e.code,e.stage,e.tool_call_id,e.message].join("\0");o.has(t)||o.set(t,e)}return[...o.values()]}(e,r),log_id:r.logID,simulator_attempts:a,ua_decision:n}}function eB(e){let t=e instanceof Error&&e.name?e.name:"RuntimeError",r=e instanceof Error?e.message:String(e),o=r.match(/\bHTTP\s+(\d{3})\b/i)?.[1];return o?`${t},HTTP ${o}`:t}function eF(e){let t=w(e),r="string"==typeof t.reason?t.reason.trim():"",o=function(e,t){let r=e.goal_progress;if(void 0!==r&&"none"!==r&&"partial"!==r&&"done"!==r&&"blocked"!==r)throw Error("UA goal_progress is invalid");let o=eG(e.info_released,"info_released"),n=eG(e.friction_seen,"friction_seen"),a=e.emotion_delta;if(void 0!==a&&("number"!=typeof a||!Number.isFinite(a)||a<-1||a>1))throw Error("UA emotion_delta must be a number between -1 and 1");return{reason:t,...r?{goal_progress:r}:{},...o?{info_released:o}:{},...n?{friction_seen:n}:{},..."number"==typeof a?{emotion_delta:a}:{}}}(t,r);if("message"===t.action){let e="string"==typeof t.message?t.message:t.content,n="string"!=typeof t.message;if("string"==typeof e&&e.trim()&&(n||r))return{action:"message",content:e,...o}}if("stop"===t.action&&r){if(o.goal_progress&&"done"!==o.goal_progress&&"blocked"!==o.goal_progress)throw Error("UA stop goal_progress must be done or blocked");return{action:"stop",brief_title:"string"==typeof t.brief_title?t.brief_title:"用户模拟结束",...o}}throw Error(`Invalid UA action: ${e.trim().slice(0,100)}`)}function eq(e){return"done"===e.goal_progress||"blocked"===e.goal_progress?e.goal_progress:void 0}function eG(e,t){if(void 0!==e){if(!Array.isArray(e)||e.some(e=>"string"!=typeof e))throw Error(`UA ${t} must be a string array`);return e}}export{q as EvalDevRuntimeProcessError,N as acquireEvalSandboxSession,ey as classifyAttemptExecution,eO as genDirectTrajectory,eM as genTrajectory,eI as getActiveBrowserStrategy,ew as isPostHookFailure,e$ as launchHeadlessBrowser,Y as startEvalDevRuntime};
|
package/dist/update.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{execa as r,runtime_packageName as
|
|
1
|
+
import"node:module";import{execa as r,runtime_packageName as e,compareSemver as t,normalizeVersion as n,isValidSemver as a,writeUpdateCheckState as i}from"./2232.js";import{refreshCurrentSkills as o}from"./skills~1.js";let l={npmView:async e=>(await r("npm",["view",e,"version"],{env:process.env,stdio:["ignore","pipe","pipe"]})).stdout.trim(),async npmInstallGlobal(e){await r("npm",["install","-g",e],{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=n(await o.npmView(e)),c=n(r);if(!a(p))throw Error(`npm 注册表返回的最新版本号无效: ${p}`);if(!a(c))throw Error(`当前版本号无效: ${r}`);return await i(p),{currentVersion:c,latestVersion:p,updateAvailable:t(p,c)>0}}async function p(r){let t=r.runner??l,n=await s(r.currentVersion,t);if(r.check)return{...n,action:n.updateAvailable?"check_update_available":"already_up_to_date"};if(!r.force&&!n.updateAvailable)return{...n,action:"already_up_to_date"};if(!await t.npmAvailable())throw Error(`在 PATH 中未找到 npm。请安装 npm 后重试,或手动运行 npm install -g ${e} 更新`);await t.npmInstallGlobal(`${e}@${n.latestVersion}`),await i(n.latestVersion);let a=function(r){try{return{skills:o(r)}}catch(r){return{skillsWarning:c(r)}}}(n.latestVersion);return{...n,action:"updated",...a}}function c(r){return r instanceof Error&&r.message?r.message:String(r)}export{c as formatError,p as updateCli};
|
package/dist/upgrade.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{version_version as
|
|
1
|
+
import"node:module";import{version_version as o,command_Command as e,runCommand as l}from"./2232.js";import{updateCli as i}from"./update.js";import{syncProjectSkills as r}from"./skills.js";async function t(e,l){let t=await i({currentVersion:o,check:l.check,force:l.force}),n="updated"===t.action?await r(t.latestVersion):void 0;return"already_up_to_date"===t.action?e.log(`dbx 已是最新版本:${t.currentVersion}`):"check_update_available"===t.action?e.log(`dbx 有新版本 ${t.latestVersion},当前版本为 ${t.currentVersion}`):e.log(`dbx 已升级:${t.currentVersion} -> ${t.latestVersion}`),t.skills&&(e.log(`已更新 Skill 数量:${t.skills.skillNames.length}`),e.log(`当前 Skill 目录:${t.skills.currentRoot}`)),t.skillsWarning&&e.warn(`Skill 更新失败:${t.skillsWarning}`),n&&e.log(`已重新生成项目 Skill 数量:${n.skillNames.length}`),t}export default function(){return new e("upgrade").description("升级 Doubao Dev CLI").option("--check","只检查是否有新版本,不安装",!1).option("--force","即使当前已是最新版本也重新安装",!1).action(async(o,e)=>l(e,e=>t(e,o)))};
|
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"./1264.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"./2232.js";let n=e("node:crypto"),i=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 n=s??r(e).manifestPath;if(!(0,i.existsSync)(n)){if(t)return t;throw Error(`缺少 AppID:未找到 manifest 文件: ${n}`)}let o=l(n);if(t&&t!==o)throw Error(`AppID 不一致:--app-id 为 ${t},manifest.app_key 为 ${o}。请更新项目实际使用的 Manifest,AppID 以该文件为准。`);return o}function l(e){let t;if(!(0,i.statSync)(e).isFile())throw Error(`缺少 AppID:manifest 路径不是文件: ${e}`);try{t=a.qg((0,i.readFileSync)(e,"utf8"))}catch(r){let t=r instanceof Error?r.message:String(r);throw Error(`manifest.yaml 无效: ${e}: ${t}`)}let r=s(t)?t.app_key:void 0;if("string"==typeof r&&r.trim())return r.trim();throw Error(`缺少 AppID:请在以下文件中填写 app_key: ${e}`)}function _(e){let t=(0,i.readFileSync)(e.file),r=(0,i.statSync)(e.file);return{type:e.type,file:e.file,file_name:(0,o.basename)(e.file),file_size:r.size,sha256:(0,n.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 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{_ as describeWorkspaceUpload,l as readManifestAppKey,m as remoteFileName,p as resolveAppKey,f as sourceTypeForWorkspaceFileType};
|
package/dist/yaml.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"./1264.js";e.add({"../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js"(e,t,s){var n=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js"),o=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js"),i=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js"),l=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js"),a=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js"),r=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js"),d=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js");function m(e,t,s,n,o,i){let l="block-map"===s.type?a.resolveBlockMap(e,t,s,n,i):"block-seq"===s.type?r.resolveBlockSeq(e,t,s,n,i):d.resolveFlowCollection(e,t,s,n,i),m=l.constructor;return"!"===o||o===m.tagName?l.tag=m.tagName:o&&(l.tag=o),l}t.composeCollection=function(e,t,s,a,r){let d=a.tag,c=d?t.directives.tagName(d.source,e=>r(d,"TAG_RESOLVE_FAILED",e)):null;if("block-seq"===s.type){let{anchor:e,newlineAfterProp:t}=a,s=e&&d?e.offset>d.offset?e:d:e??d;s&&(!t||t.offset<s.offset)&&r(s,"MISSING_CHAR","Missing newline after block sequence props")}let u="block-map"===s.type?"map":"block-seq"===s.type?"seq":"{"===s.start.source?"map":"seq";if(!d||!c||"!"===c||c===i.YAMLMap.tagName&&"map"===u||c===l.YAMLSeq.tagName&&"seq"===u)return m(e,t,s,r,c);let p=t.schema.tags.find(e=>e.tag===c&&e.collection===u);if(!p){let n=t.schema.knownTags[c];if(n?.collection!==u)return n?r(d,"BAD_COLLECTION_TYPE",`${n.tag} used for ${u} collection, but expects ${n.collection??"scalar"}`,!0):r(d,"TAG_RESOLVE_FAILED",`Unresolved tag: ${c}`,!0),m(e,t,s,r,c);t.schema.tags.push(Object.assign({},n,{default:!1})),p=n}let f=m(e,t,s,r,c,p),h=p.resolve?.(f,e=>r(d,"TAG_RESOLVE_FAILED",e),t.options)??f,y=n.isNode(h)?h:new o.Scalar(h);return y.range=f.range,y.tag=c,p?.format&&(y.format=p.format),y}},"../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js"(e,t,s){var n=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js"),o=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js"),i=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js"),l=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js");t.composeDoc=function(e,t,{offset:s,start:a,value:r,end:d},m){let c=Object.assign({_directives:t},e),u=new n.Document(void 0,c),p={atKey:!1,atRoot:!0,directives:u.directives,options:u.options,schema:u.schema},f=l.resolveProps(a,{indicator:"doc-start",next:r??d?.[0],offset:s,onError:m,parentIndent:0,startOnNewline:!0});f.found&&(u.directives.docStart=!0,r&&("block-map"===r.type||"block-seq"===r.type)&&!f.hasNewline&&m(f.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),u.contents=r?o.composeNode(p,r,f,m):o.composeEmptyNode(p,f.end,a,null,f,m);let h=u.contents.range[2],y=i.resolveEnd(d,h,!1,m);return y.comment&&(u.comment=y.comment),u.range=[s,h,y.offset],u}},"../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js"(e,t,s){var n=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js"),o=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js"),i=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js"),l=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js"),a=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js"),r=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js");let d={composeNode:m,composeEmptyNode:c};function m(e,t,s,r){let m,u=e.atKey,{spaceBefore:p,comment:f,anchor:h,tag:y}=s,g=!0;switch(t.type){case"alias":m=function({options:e},{offset:t,source:s,end:o},i){let l=new n.Alias(s.substring(1));""===l.source&&i(t,"BAD_ALIAS","Alias cannot be an empty string"),l.source.endsWith(":")&&i(t+s.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let r=t+s.length,d=a.resolveEnd(o,r,e.strict,i);return l.range=[t,r,d.offset],d.comment&&(l.comment=d.comment),l}(e,t,r),(h||y)&&r(t,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":m=l.composeScalar(e,t,y,r),h&&(m.anchor=h.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{m=i.composeCollection(d,e,t,s,r),h&&(m.anchor=h.source.substring(1))}catch(e){r(t,"RESOURCE_EXHAUSTION",e instanceof Error?e.message:String(e))}break;default:{let e="error"===t.type?t.message:`Unsupported token (type: ${t.type})`;r(t,"UNEXPECTED_TOKEN",e),g=!1}}return m??(m=c(e,t.offset,void 0,null,s,r)),h&&""===m.anchor&&r(h,"BAD_ALIAS","Anchor cannot be an empty string"),u&&e.options.stringKeys&&(!o.isScalar(m)||"string"!=typeof m.value||m.tag&&"tag:yaml.org,2002:str"!==m.tag)&&r(y??t,"NON_STRING_KEY","With stringKeys, all keys must be strings"),p&&(m.spaceBefore=!0),f&&("scalar"===t.type&&""===t.source?m.comment=f:m.commentBefore=f),e.options.keepSourceTokens&&g&&(m.srcToken=t),m}function c(e,t,s,n,{spaceBefore:o,comment:i,anchor:a,tag:d,end:m},u){let p={type:"scalar",offset:r.emptyScalarPosition(t,s,n),indent:-1,source:""},f=l.composeScalar(e,p,d,u);return a&&(f.anchor=a.source.substring(1),""===f.anchor&&u(a,"BAD_ALIAS","Anchor cannot be an empty string")),o&&(f.spaceBefore=!0),i&&(f.comment=i,f.range[2]=m),f}t.composeEmptyNode=c,t.composeNode=m},"../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js"(e,t,s){var n=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js"),o=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js"),i=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js"),l=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js");t.composeScalar=function(e,t,s,a){let r,d,{value:m,type:c,comment:u,range:p}="block-scalar"===t.type?i.resolveBlockScalar(e,t,a):l.resolveFlowScalar(t,e.options.strict,a),f=s?e.directives.tagName(s.source,e=>a(s,"TAG_RESOLVE_FAILED",e)):null;r=e.options.stringKeys&&e.atKey?e.schema[n.SCALAR]:f?function(e,t,s,o,i){if("!"===s)return e[n.SCALAR];let l=[];for(let t of e.tags)if(!t.collection&&t.tag===s)if(!t.default||!t.test)return t;else l.push(t);for(let e of l)if(e.test?.test(t))return e;let a=e.knownTags[s];return a&&!a.collection?(e.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(i(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${s}`,"tag:yaml.org,2002:str"!==s),e[n.SCALAR])}(e.schema,m,f,s,a):"scalar"===t.type?function({atKey:e,directives:t,schema:s},o,i,l){let a=s.tags.find(t=>(!0===t.default||e&&"key"===t.default)&&t.test?.test(o))||s[n.SCALAR];if(s.compat){let e=s.compat.find(e=>e.default&&e.test?.test(o))??s[n.SCALAR];if(a.tag!==e.tag){let s=t.tagString(a.tag),n=t.tagString(e.tag);l(i,"TAG_RESOLVE_FAILED",`Value may be parsed as either ${s} or ${n}`,!0)}}return a}(e,m,t,a):e.schema[n.SCALAR];try{let i=r.resolve(m,e=>a(s??t,"TAG_RESOLVE_FAILED",e),e.options);d=n.isScalar(i)?i:new o.Scalar(i)}catch(e){a(s??t,"TAG_RESOLVE_FAILED",e instanceof Error?e.message:String(e)),d=new o.Scalar(m)}return d.range=p,d.source=m,c&&(d.type=c),f&&(d.tag=f),r.format&&(d.format=r.format),u&&(d.comment=u),d}},"../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js"(e,t,s){var n=s("process"),o=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js"),i=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js"),l=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/errors.js"),a=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js"),r=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js"),d=s("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js");function m(e){if("number"==typeof e)return[e,e+1];if(Array.isArray(e))return 2===e.length?e:[e[0],e[1]];let{offset:t,source:s}=e;return[t,t+("string"==typeof s?s.length:1)]}function c(e){let t="",s=!1,n=!1;for(let o=0;o<e.length;++o){let i=e[o];switch(i[0]){case"#":t+=(""===t?"":n?"\n\n":"\n")+(i.substring(1)||" "),s=!0,n=!1;break;case"%":e[o+1]?.[0]!=="#"&&(o+=1),s=!1;break;default:s||(n=!0),s=!1}}return{comment:t,afterEmptyLine:n}}t.Composer=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,s,n)=>{let o=m(e);n?this.warnings.push(new l.YAMLWarning(o,t,s)):this.errors.push(new l.YAMLParseError(o,t,s))},this.directives=new o.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:s,afterEmptyLine:n}=c(this.prelude);if(s){let o=e.contents;if(t)e.comment=e.comment?`${e.comment}
|
|
2
2
|
${s}`:s;else if(n||e.directives.docStart||!o)e.commentBefore=s;else if(a.isCollection(o)&&!o.flow&&o.items.length>0){let e=o.items[0];a.isPair(e)&&(e=e.key);let t=e.commentBefore;e.commentBefore=t?`${s}
|
|
3
3
|
${t}`:s}else{let e=o.commentBefore;o.commentBefore=e?`${s}
|
|
4
4
|
${e}`:s}}if(t){for(let t=0;t<this.errors.length;++t)e.errors.push(this.errors[t]);for(let t=0;t<this.warnings.length;++t)e.warnings.push(this.warnings[t])}else e.errors=this.errors,e.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:c(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,s=-1){for(let t of e)yield*this.next(t);yield*this.end(t,s)}*next(e){switch(n.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,s,n)=>{let o=m(e);o[0]+=t,this.onError(o,"BAD_DIRECTIVE",s,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=r.composeDoc(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,s=new l.YAMLParseError(m(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(s):this.doc.errors.push(s);break}case"doc-end":{if(!this.doc){this.errors.push(new l.YAMLParseError(m(e),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let t=d.resolveEnd(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let e=this.doc.comment;this.doc.comment=e?`${e}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doubao-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"description": "Doubao Dev CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@lynx-js/css-extract-webpack-plugin": "npm:@lynx-js/css-extract-webpack-plugin-canary@0.8.0",
|
|
20
20
|
"@lynx-js/react-refresh-webpack-plugin": "npm:@lynx-js/react-refresh-webpack-plugin-canary@0.4.1-canary-20260714-dc37d603",
|
|
21
|
-
"@lynx-js/react-rsbuild-plugin": "
|
|
21
|
+
"@lynx-js/react-rsbuild-plugin": "0.20.2",
|
|
22
22
|
"@lynx-js/react-webpack-plugin": "npm:@lynx-js/react-webpack-plugin-canary@0.10.0-canary-20260714-dc37d603",
|
|
23
|
-
"@lynx-js/rspeedy": "
|
|
23
|
+
"@lynx-js/rspeedy": "0.17.2",
|
|
24
24
|
"@lynx-js/template-webpack-plugin": "npm:@lynx-js/template-webpack-plugin-canary@0.12.3-canary-20260714-dc37d603",
|
|
25
|
-
"@rsbuild/core": "2.
|
|
25
|
+
"@rsbuild/core": "2.2.4",
|
|
26
26
|
"@rsbuild/plugin-less": "2.0.1",
|
|
27
27
|
"@rsbuild/plugin-sass": "2.0.1",
|
|
28
28
|
"@rspack/core": "2.1.3",
|
|
29
29
|
"@rspack/resolver": "0.2.8",
|
|
30
30
|
"better-opn": "3.0.2",
|
|
31
31
|
"core-js": "3.47.0",
|
|
32
|
-
"
|
|
32
|
+
"debug": "^4.4.3",
|
|
33
33
|
"jest-worker": "27.5.1",
|
|
34
34
|
"jiti": "^2.7.0",
|
|
35
35
|
"less": "4.6.7",
|
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
"tinypool": "2.1.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@lynx-js/react": "
|
|
42
|
+
"@lynx-js/react": "0.126.1",
|
|
43
43
|
"@lynx-js/remote-debug-driver": "0.0.3",
|
|
44
44
|
"@rslib/core": "0.23.2",
|
|
45
45
|
"@types/node": "^20.11.30",
|
|
46
46
|
"node-loader": "2.1.0",
|
|
47
47
|
"rimraf": "5.0.10",
|
|
48
48
|
"typescript": "6.0.3",
|
|
49
|
-
"@byted-doubao-apps/cli": "0.0.
|
|
49
|
+
"@byted-doubao-apps/cli": "0.0.36"
|
|
50
50
|
},
|
|
51
51
|
"optionalDependencies": {
|
|
52
52
|
"@doubao-dev/security-tasm": "0.0.22",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
### 同步 API
|
|
66
66
|
|
|
67
67
|
```typescript
|
|
68
|
-
getWindowInfoSync(
|
|
68
|
+
getWindowInfoSync(_params?: object): GetWindowInfoResult
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
## 入参
|
|
@@ -528,7 +528,7 @@ console.log(result.host?.appId);
|
|
|
528
528
|
|
|
529
529
|
## 使用说明
|
|
530
530
|
|
|
531
|
-
-
|
|
531
|
+
- 该接口封装 getWindowInfoSync 的结果;无需 Promise 形式时可直接使用 getWindowInfoSync。
|
|
532
532
|
|
|
533
533
|
## 调用方式
|
|
534
534
|
|
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
<a id="getchatpanelinfo"></a>
|
|
17
17
|
### getChatPanelInfo()
|
|
18
18
|
|
|
19
|
+
---
|
|
20
|
+
internal: true
|
|
21
|
+
---
|
|
22
|
+
|
|
19
23
|
# getChatPanelInfo
|
|
20
24
|
|
|
21
25
|
获取当前对话框状态快照。
|
|
@@ -107,6 +111,10 @@ console.log('current chat panel', { height, state });
|
|
|
107
111
|
<a id="onchatpanelheightchanged"></a>
|
|
108
112
|
### onChatPanelHeightChanged()
|
|
109
113
|
|
|
114
|
+
---
|
|
115
|
+
internal: true
|
|
116
|
+
---
|
|
117
|
+
|
|
110
118
|
# onChatPanelHeightChanged
|
|
111
119
|
|
|
112
120
|
监听对话框高度或展示状态变化。
|