@doubao-dev/cli 0.0.19 → 0.0.20
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/2514.js +8 -8
- package/dist/2932.js +1 -1
- package/dist/318.js +1 -1
- package/dist/3494.js +284 -0
- package/dist/{1122.js.LICENSE.txt → 3494.js.LICENSE.txt} +6 -0
- package/dist/4931.js +1 -1
- package/dist/7410.js +1 -1
- package/dist/{1664.js → 8713.js} +3 -3
- package/dist/@byted-doubao-apps/create.js +1 -1
- package/dist/@byted-doubao-apps/login.js +1 -1
- package/dist/@byted-doubao-apps/login~1.js +1 -1
- package/dist/@byted-doubao-apps/template-empty/README.md +0 -2
- package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
- package/dist/@byted-doubao-apps/template-starter/README.md +1 -1
- 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/@lynx-js/web-core-canary.js +2 -13
- package/dist/@lynx-js/web-core-canary~1.js +2 -0
- package/dist/app.js +1 -1
- package/dist/assets/web-sdk-debugger/chrome-devtools/entrypoints/devtools_app/devtools_app.js +9 -7
- package/dist/assets/web-sdk-debugger/chrome-devtools/panels/wsd-debug/WsdDebug.js +9 -7
- package/dist/assets/web-sdk-debugger/chrome-devtools/panels/wsd-debug/WsdDebugMeta.js +79 -77
- package/dist/assets/web-sdk-debugger/index.html +1 -1
- package/dist/assets/web-sdk-debugger/static/css/index.9952f4197c.css +1 -0
- package/dist/assets/web-sdk-debugger/static/js/{741.ece428827e.js → 48.8c158322ee.js} +60 -67
- package/dist/assets/web-sdk-debugger/static/js/48.8c158322ee.js.LICENSE.txt +5 -0
- package/dist/assets/web-sdk-debugger/static/js/async/257.4d55bd5ce8.js +1 -0
- package/dist/assets/web-sdk-debugger/static/js/async/{web-core-template-loader-thread.f9f3ef68b1.js → web-core-template-loader-thread.20d5b2a451.js} +2 -2
- package/dist/assets/web-sdk-debugger/static/js/async/{web-core-worker-chunk.002a4f7b9d.js → web-core-worker-chunk.71b9323071.js} +1 -1
- package/dist/assets/web-sdk-debugger/static/js/index.e5bc5f1bbd.js +26 -0
- package/dist/assets/web-sdk-debugger/static/js/{lib-polyfill.8cf763c414.js → lib-polyfill.4f00df8f2a.js} +1 -1
- 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/auth.js +1 -1
- package/dist/browser.js +1 -1
- package/dist/csstree.esm.js +12 -0
- package/dist/dbx-demo.js +1 -1
- package/dist/dbx.js +1 -1
- package/dist/demo-server.js +1 -1
- package/dist/dev-config.js +1 -1
- package/dist/dev-service-client.js +6 -6
- package/dist/dev-shell.js +1 -1
- package/dist/dev.js +7 -7
- package/dist/eval.js +1 -1
- package/dist/gen-explore.js +1 -1
- package/dist/gen-trajectory.js +1 -1
- package/dist/get.js +1 -1
- package/dist/init.js +2 -2
- package/dist/ink.js +1 -1
- package/dist/json-file.js +1 -1
- package/dist/login.js +1 -1
- package/dist/main.js +1 -1
- package/dist/manifest-mcp-config.js +1 -1
- package/dist/ora.js +1 -1
- package/dist/portal.js +1 -1
- package/dist/project-layout.js +1 -1
- package/dist/prompt.js +1 -1
- package/dist/prompts.js +1 -1
- package/dist/report.js +1 -1
- package/dist/run-registry.js +1 -1
- package/dist/run.js +1 -1
- package/dist/sandbox.js +1 -1
- package/dist/sdk.js +67 -133
- package/dist/sdk~1.js +67 -133
- package/dist/server.js +1 -1
- package/dist/shared.js +1 -1
- package/dist/simulator-client.js +1 -1
- package/dist/skill.js +1 -1
- package/dist/skills~1.js +1 -1
- package/dist/static/assets/web-view-proxy-page-client.js +1 -0
- package/dist/static/assets/web-view-proxy-service-worker.js +1 -0
- package/dist/status.js +1 -1
- package/dist/status~1.js +1 -1
- package/dist/stop.js +1 -1
- package/dist/update.js +1 -1
- package/dist/upgrade.js +1 -1
- package/dist/upload.js +1 -1
- package/dist/validate.js +1 -1
- package/dist/workspace.js +1 -1
- package/dist/yaml.js +1 -1
- package/package.json +2 -2
- package/skills/doubao-agentic-service-development/references/dev-debug.md +6 -6
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +105 -25
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +118 -6
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/06-/344/272/244/344/272/222.md +18 -8
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/quick-reference.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/examples/page-widget-basics.md +2 -3
- package/skills/doubao-agentic-service-development/references/frontend/guides/component-development.md +2 -1
- package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +7 -1
- package/skills/doubao-agentic-service-development/references/frontend/rules/dos-and-donts.md +4 -7
- package/skills/doubao-agentic-service-development/references/frontend-dev.md +0 -1
- package/skills/doubao-agentic-service-development/references/manifest-guide.md +5 -4
- package/skills/doubao-agentic-service-development/references/mcp-protocol.md +4 -3
- package/dist/1122.js +0 -277
- package/dist/assets/web-sdk-debugger/static/css/index.fe34ed7927.css +0 -1
- package/dist/assets/web-sdk-debugger/static/js/index.da81c37197.js +0 -26
- package/dist/push-page.js +0 -1
- package/dist/push-widget.js +0 -1
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{command_Command as t,runCommand as r}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{command_Command as t,runCommand as r}from"./8713.js";import{openUrlInBrowser as s}from"./browser.js";import{readJsonIfExists as a}from"./json-file.js";import{runFullPipeline as n,resolvePipelineRunConfig as o,configureEvalRunOptions as i,installTwoStageSignalHandler as l,progressFailure as d,EvalRunStoppedError as c,reapEvalDescendantsSync as p}from"./run.js";var u={};e.r(u),e.d(u,{__testOnly:()=>D,default:()=>N});class f{runId;skillName;outputDir;now;startedAt;phases=[];details=[];events=[];listeners=new Set;cases=[];status="initializing";finishedAt;error;report;totalCases=0;sequence=0;nextDetailId=1;constructor(e){this.runId=e.runId,this.skillName=e.skillName,this.outputDir=e.outputDir,this.now=e.now??(()=>new Date),this.startedAt=this.now().toISOString()}start(){}setStatus(e,t){if(this.status=e,this.error=t,"stopped"===e){let e=this.now().toISOString();for(let t of this.phases)if("running"===t.status)for(let r of(t.status="stopped",t.finishedAt=e,t.tasks))"running"===r.status&&(r.status="stopped",r.finishedAt=e)}("completed"===e||"failed"===e||"stopped"===e)&&(this.finishedAt=this.now().toISOString()),this.emit("run.status",{status:e,error:t})}setReport(e){this.report=e,this.emit("report.ready",{summary:e.summary})}getReport(){return this.report}phaseStart(e){let t=this.now().toISOString(),r=this.phases.find(t=>t.id===e.id);r?Object.assign(r,e,{status:"running",startedAt:t,finishedAt:void 0,summary:void 0,reason:void 0,hint:void 0}):this.phases.push({...e,status:"running",startedAt:t,tasks:[]}),this.emit("phase.started",{...e})}phaseDone(e,t={}){let r=this.requirePhase(e);r.status="done",r.finishedAt=this.now().toISOString(),r.summary=t.summary,this.emit("phase.completed",{id:e,...t})}phaseFail(e,t){let r=this.requirePhase(e);r.status="failed",r.finishedAt=this.now().toISOString(),r.reason=t.reason,r.hint=t.hint,this.emit("phase.failed",{id:e,...t})}taskStart(e){let t=this.requirePhase(e.phaseId),r=this.now().toISOString(),s=t.tasks.find(t=>t.id===e.id);s?Object.assign(s,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,t){let r=this.requireTask(e);r.status="failed",r.finishedAt=this.now().toISOString(),r.reason=t.reason,r.hint=t.hint,this.emit("task.failed",{id:e,...t})}failActive(e){let t=[...this.phases].reverse().find(e=>"running"===e.status);if(!t)return;let r=[...t.tasks].reverse().find(e=>"running"===e.status);r&&(r.status="failed",r.finishedAt=this.now().toISOString(),r.reason=e.reason,r.hint=e.hint,this.emit("task.failed",{id:r.id,...e})),this.phaseFail(t.id,e)}detail(e){let t={id:String(this.nextDetailId),timestamp:this.now().toISOString(),title:e.title,technicalName:e.technicalName,fields:(e.fields??[]).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(t),this.details.length>100&&this.details.splice(0,this.details.length-100),this.emit("detail",t)}updateRun(e){void 0!==e.totalCases&&(this.totalCases=e.totalCases),e.cases&&(this.cases=e.cases.map(e=>({...e}))),this.emit("run.updated",e)}stop(){}snapshot(){let e=this.caseSnapshots(),t=e.filter(e=>["passed","failed","stopped"].includes(e.status)),r=e.filter(e=>"passed"===e.status).length,s=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,s-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(h),cases:e,details:this.details.map(m),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(g)}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(g(r))}caseSnapshots(){let e=new Map(this.phases.flatMap(e=>e.tasks).filter(e=>e.id.startsWith("rollout:")).map(e=>[e.id.slice(8),e]));return this.cases.map(t=>{let r=e.get(t.id);if(!r)return{...t,status:"stopped"===this.status?"stopped":"waiting"};if("failed"===r.status)return{...t,status:"failed",summary:r.reason};if("stopped"===r.status)return{...t,status:"stopped",summary:"Evaluation stopped"};if("done"===r.status){let e=r.summary?.startsWith("PASS")??!1;return{...t,status:e?"passed":"failed",summary:r.summary}}return{...t,status:"scorer"===r.technicalName?"scoring":"running",summary:r.label}})}progress(e){let t=0;for(let[r,s]of Object.entries({preflight:5,analysis:20,"case-generation":15,rollout:50,veto:5,report:5})){let a=this.phases.find(e=>e.id===r);if(a?.status==="done")t+=s;else if("rollout"===r&&(a?.status==="running"||a?.status==="stopped")){let r=e.filter(e=>["passed","failed"].includes(e.status)).length;t+=this.totalCases>0?s*(r/this.totalCases):0}}return Math.max(0,Math.min(100,Math.round(t)))}requirePhase(e){let t=this.phases.find(t=>t.id===e);if(!t)throw Error(`progress phase not found: ${e}`);return t}requireTask(e){let t=this.phases.flatMap(e=>e.tasks).find(t=>t.id===e);if(!t)throw Error(`progress task not found: ${e}`);return t}}function h(e){return{...e,tasks:e.tasks.map(e=>({...e,metadata:void 0===e.metadata?void 0:structuredClone(e.metadata)}))}}function m(e){return{...e,fields:e.fields.map(([e,t])=>[e,t])}}function g(e){return{...e,payload:e.payload&&"object"==typeof e.payload?structuredClone(e.payload):e.payload}}let v=e("node:crypto"),b=e("node:fs"),y=e("node:http"),x=e("node:path"),w=e("node:url"),S=new Set(["127.0.0.1","localhost","::1"]);async function k(e){var t,r,a;let n=function(e="127.0.0.1"){let t=e.trim().toLowerCase();if(!S.has(t))throw Error(`dbx eval server only accepts loopback hosts: ${[...S].join(", ")}`);return t}(e.host),o=function(e=0){if(!Number.isInteger(e)||e<0||e>65535)throw Error(`Invalid eval server port: ${e}`);return e}(e.port),i=e.controlToken??(0,v.randomBytes)(24).toString("hex"),l=function(e=15e3){if(!Number.isFinite(e)||!Number.isInteger(e)||e<1||e>3e4)throw Error(`Invalid eval server heartbeat interval: ${e}. Expected 1-30000ms.`);return e}(e.heartbeatIntervalMs);(0,b.mkdirSync)(e.outputDir,{recursive:!0});let d=(0,b.realpathSync)(e.outputDir),c=new Set,p=(0,v.randomBytes)(18).toString("base64"),u=e.openDirectory??(e=>s(e)),f=(0,y.createServer)((t,r)=>{C({request:t,response:r,hub:e.hub,outputRoot:d,controlToken:i,nonce:p,clients:c,heartbeatIntervalMs:l,onStop:e.onStop,openDirectory:u}).catch(e=>{r.headersSent?r.end():A(r,500,{error:e instanceof Error?e.message:String(e)})})});await (t=f,r=o,a=n,new Promise((e,s)=>{function n(e){t.removeListener("listening",o),s(e)}function o(){t.removeListener("error",n),e()}t.once("error",n),t.once("listening",o),t.listen(r,a)}));let h=f.address();if(!h||"string"==typeof h)throw await _(f),Error("Eval server did not expose a TCP address");let m="127.0.0.1"===n||"localhost"===n?"localhost":`[${h.address}]`;return{url:`http://${m}:${h.port}`,host:n,port:h.port,controlToken:i,async close(){for(let e of c)e.end();c.clear(),await _(f)}}}async function C(e){let{request:t,response:r,hub:s,outputRoot:a,controlToken:n,nonce:o,clients:i,heartbeatIntervalMs:l,onStop:d,openDirectory:c}=e,p=new URL(t.url??"/","http://localhost"),u=p.pathname;if("GET"===t.method&&"/"===u){var f,h;let e,t=(e=JSON.stringify((f={controlToken:n,nonce:o}).controlToken),`<!doctype html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
package/dist/shared.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"./8713.js";import{resolveAppKey as r}from"./workspace.js";import{mergeEvalConfigs as t,limitedIntentCount as a,writeProjectEvalConfig as i,resolveProjectEvalConfig as o,limitedEvalConcurrency as n,limitedMaxRounds as p,validateProjectEvalConfig as s,buildAutoStartPayload as u,loadGlobalConfig as _,readManifestMcpUrl as l}from"./2514.js";let d=e("node:fs"),c=e("node:path");async function m(e){let m=(0,c.resolve)(e.projectPath),v=o({projectPath:m,explicitConfigPath:e.config,globalConfig:_(),cliOverrides:{ua:{base_url:e.baseUrl,api_key:e.apiKey,model:e.model},gateway:{origin:e.gateway},app:{manifest:e.manifest,skill:e.skill,app_id:e.appId},mcp:{url:e.mcpUrl},run:{max_rounds:e.maxRounds,max_step:e.maxStep}}}),h=v.config,x=h.ua??{},b=h.app??{},S=h.run??{},P=(0,c.resolve)(m,b.manifest||"manifest.yaml"),C=(0,c.resolve)(m,b.skill||"skill/SKILL.md");(0,d.existsSync)(P)&&(0,d.existsSync)(C)||s(t(h,{app:{manifest:P,skill:C,app_id:f(b.app_id)||void 0}}),{projectPath:m,configPath:v.configPath});let K=(0,d.readFileSync)(P,"utf-8"),N=(0,d.readFileSync)(C,"utf-8"),U=r(m,b.app_id||void 0,P),E=f(h.mcp?.url)||l(K)||f(process.env.DOUBAO_SIMULATOR_MCP_ENDPOINT)||"",w=t(h,{ua:{base_url:f(x.base_url)||void 0,api_key:f(x.api_key)||void 0,model:f(x.model)||void 0,temperature:k(x.temperature,.7),max_tokens:y(x.max_tokens,4096),api_format:f(x.api_format)||void 0},gateway:{origin:f(h.gateway?.origin)||"https://doubao-developer.bytedance.net"},app:{manifest:P,skill:C,app_id:U},mcp:{url:E},run:{mode:f(S.mode)||"full_pipeline",rollout_mode:f(S.rollout_mode)||"ua_driven",intent_count:a(S.intent_count),pass_k:y(S.pass_k,1),concurrency:n(S.concurrency),checklist_concurrency:n(S.checklist_concurrency),scoring_concurrency:n(S.scoring_concurrency),judge_concurrency:n(S.judge_concurrency),pass_threshold:k(S.pass_threshold,.6),max_rounds:p(S.max_rounds),max_step:y(S.max_step,8),output_dir:f(S.output_dir)||"./data",skip_render:g(S.skip_render),push_lark:g(S.push_lark),lark_doc_token:f(S.lark_doc_token)||void 0,prebuilt_trajectories:f(S.prebuilt_trajectories)||void 0}});s(w,{projectPath:m,configPath:v.configPath}),i(m,w);let R=g(w.run?.skip_render)?void 0:await u({projectPath:m,manifest:w.app?.manifest,skill:w.app?.skill});return{llm:{baseUrl:f(w.ua?.base_url)||void 0,apiKey:f(w.ua?.api_key)||void 0,model:f(w.ua?.model)||void 0,temperature:k(w.ua?.temperature,.7),maxTokens:y(w.ua?.max_tokens,4096)},gateway:{origin:f(w.gateway?.origin)||"https://doubao-developer.bytedance.net",headers:{"X-TT-ENV":"","X-USE-PPE":"","x-schedule-vdc":"hl","Developer-Open-UserId":"i_1234"}},app:{appId:U,skill:N,manifestYAML:K},mcp:{url:E},dev:R?{screenshotDir:"",autoStart:R}:void 0,run:{maxRounds:p(w.run?.max_rounds),maxStep:y(w.run?.max_step,8)}}}function f(e){return"string"==typeof e?e.trim():""}function k(e,r){let t=Number(e);return Number.isFinite(t)?t:r}function y(e,r){let t=Number.parseInt(String(e),10);return Number.isFinite(t)?t:r}function g(e){return!0===e||"true"===e}export{m as buildConfig};
|
package/dist/simulator-client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{configuredFetch as t,http_getApiBaseUrl as e}from"./
|
|
1
|
+
import"node:module";import{configuredFetch as t,http_getApiBaseUrl as e}from"./8713.js";async function r(r){var _,d,c;let p,u={requestID:"",answer:"",toolCalls:[],cards:[],traceEvents:[],streamErrors:[]},m=await t(`${s(r.gatewayOrigin||e())}/app_developer/simulator/chat`,{method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream"},body:JSON.stringify((_=r.evalCase,d=r.manifestYAML,c=r.mcp,p=_.app_name||_.app_key,{app_id:_.app_key,scene:"dbx_simulator_eval",history_messages:_.history_messages??[],message:{role:"USER",content:_.query},client:{platform:"cli",locale:"zh-CN",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||"Asia/Shanghai"},ext:{dbx_simulator_eval:"true",stateless_context:"client_history"},max_step:_.max_step??15,mini_apps:[{app_key:_.app_key,app_name:p,skill:_.skill,manifest:{app_key:_.app_key,app_name:p,raw_manifest_yaml:d},mcp_servers:[{server_id:_.mcp?.server_id||c.server_id,name:_.mcp?.name||c.name,description:_.mcp?.description||c.description||"",tools:c.tools}]}],web_capabilities:{supports_debug_event:!0}}))});if(u.logID=m.headers.get("x-tt-logid")||void 0,!m.ok||!m.body){let t=await m.text();throw new i(`chat failed: HTTP ${m.status} ${t}`,u.logID)}try{await o(m.body,async t=>{var e,o,s,i,n;let _,d,c;if(e=u,o=t,o?.ack?.request_id&&(e.requestID=o.ack.request_id),o?.request_id&&!e.requestID&&(e.requestID=o.request_id),o?.trace?.trace_id&&(e.traceID=o.trace.trace_id),t?.text_delta?.delta&&(u.answer+=String(t.text_delta.delta)),t?.trace_event&&u.traceEvents.push({name:(s=t.trace_event).name,status:s.status,summary:s.summary,tool_name:s.tool_name,error:s.error}),t?.card_delta&&u.cards.push((_=(i=t.card_delta).card||{},c=(d=function(t){if("string"==typeof t)try{return JSON.parse(t)}catch{return}}(_.props_json)||{}).extra||{},{widget_id:d.widget_id,entity_id:d.entity_id,template:c["doubao/outputTemplate"],card_id:i.card_id||_.card_id,card_type:_.card_type})),t?.stream_error&&u.streamErrors.push(t.stream_error),t?.tool_call){let e=(n=t.tool_call,{tool_call_id:String(n.tool_call_id||""),tool_name:String(n.tool_name||""),server_id:n.server_id,app_key:n.app_key,arguments_json:n.arguments_json,status:n.status});try{let t=await r.callbacks.onToolCall(e,u.requestID),o=await a({gatewayOrigin:r.gatewayOrigin,requestID:u.requestID,traceID:u.traceID,toolCall:e,result:t});u.toolCalls.push({toolCall:e,result:t,report:o}),r.callbacks.onToolReported?.(e,o)}catch(t){u.toolCalls.push({toolCall:e}),u.streamErrors.push({code:"tool_call_or_report_failed",message:t?.message||String(t),tool_name:e.tool_name,tool_call_id:e.tool_call_id,log_id:l(t,"logId")||l(t,"log_id")})}}})}catch(e){let t=new n(e?.message||String(e),u,u.logID);throw t.cause=e,t}return u}async function a(r){let a=Date.now(),o=await t(`${s(r.gatewayOrigin||e())}/app_developer/simulator/tool/report`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({request_id:r.requestID,tool_call_id:r.toolCall.tool_call_id,server_id:r.toolCall.server_id||"",tool_name:r.toolCall.tool_name,status:"SUCCESS",app_key:r.toolCall.app_key,result:{tool_call_id:r.toolCall.tool_call_id,content:r.result.content||"",structured_json:JSON.stringify(r.result.structured||{})},raw_result_text:r.result.raw_result_text||r.result.content||"",raw_mcp_result_json:r.result.raw_mcp_result_json||"",miniapp:r.result.miniapp,timing:{started_at_ms:a,ended_at_ms:Date.now(),duration_ms:Date.now()-a,attempt:1},trace:{trace_id:r.traceID,component:"dbx_simulator_eval",stage:"tool_report",sampled:!0},ext:{reported_by:"dbx_simulator_eval"}})}),l=await o.text();if(!o.ok)throw new i(`tool report failed: HTTP ${o.status} ${l}`,o.headers.get("x-tt-logid")||void 0);return l?JSON.parse(l):{}}async function o(t,e){let r=t.getReader(),a=new TextDecoder,o="";for(;;){let{done:t,value:s}=await r.read();if(t)break;let l=(o+=a.decode(s,{stream:!0})).split("\n\n");for(let t of(o=l.pop()||"",l)){let r=function(t){let e=t.split(/\r?\n/).filter(t=>t.startsWith("data:")).map(t=>t.slice(5).trimStart()).join("\n");if(e)try{return JSON.parse(e)}catch(t){throw Error(`invalid simulator SSE data: ${t?.message||String(t)}`)}}(t);r&&await e(r)}}}function s(t){return t.replace(/\/+$/,"")}function l(t,e){if("object"!=typeof t||null===t||Array.isArray(t))return;let r=t[e];return"string"==typeof r&&r?r:void 0}class i extends Error{logId;constructor(t,e){super(t),this.logId=e}}class n extends Error{state;logId;cause;constructor(t,e,r){super(t),this.state=e,this.logId=r}}export{i as SimulatorHTTPError,n as SimulatorStreamError,r as runSimulatorStream};
|
package/dist/skill.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as i}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as i}from"./8713.js";import{installSkillsToRoots as r,dedupeRoots as n,listBundledSkills as a}from"./skills~1.js";import{SUPPORTED_AGENTS as c}from"./skills.js";import{updateDbxConfigSkills as d}from"./dbx.js";import{selectInitAgents as k,INIT_AGENT_IDS as m}from"./prompts.js";var f={};t.r(f),t.d(f,{default:()=>S,executeEvalSkill:()=>h});let _=t("node:fs"),g=t("node:path"),p="dbx-eval",u={listBundledSkills:a,scanInstalledSkillRoots:function(t,e){let l=g.resolve(t);return n(c.map(t=>g.join(l,t.projectPath))).filter(t=>e.some(e=>(function(t){try{return _.lstatSync(t),!0}catch(t){if("ENOENT"===t.code)return!1;throw t}})(g.join(t,e))))},installSkillsToRoots:r,updateDbxConfigSkills:d,selectAgents:k,isInteractive:()=>!!process.stdin.isTTY&&!!process.stderr.isTTY};function S(){return new o("skill").description("为存量项目补装 dbx-eval Skill;未初始化时按选择的 Agent 安装全部内置 Skills").option("--project-path <path>","dbx project path",".").addOption(new s("--agent <agent>","未初始化项目要安装的 Agent,可重复传入;universal 会自动包含").default([]).argParser(i(m))).addOption(new s("--skills-mode <mode>","内置 Skills 安装方式").choices(["link","copy"]).default("link")).option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).action(async(t,e)=>l(e,e=>h(t,e)))}async function h(t,l,o=u){var s,i,r;let n=(0,g.resolve)(t.projectPath),a=o.listBundledSkills();a.includes(p)||l.error(`当前 CLI 未打包 ${p} Skill,无法补装。请升级或重新安装 dbx CLI。`);let c=o.scanInstalledSkillRoots(n,a),d=c.length>0,k=d?(s=c,i=t,r=l,i.agent.length>0&&r.warn("检测到已初始化的 Skill 目录,将向全部已发现目录补装 dbx-eval;--agent 不生效。"),{targetRoots:s,skillNames:[p]}):await R(n,t,l,o),m=await o.installSkillsToRoots({targetRoots:k.targetRoots,skillNames:k.skillNames,cwd:n,mode:t.skillsMode,cliVersion:e,yes:t.yes});return o.updateDbxConfigSkills(n,m.skillNames,{source:"bundled",mode:m.mode,skillsVersion:m.skillsVersion,cliVersion:e}),function(t,e){if(t.json)return;let l="backfill"===e.branch?`已为存量项目补装 ${p}`:"已完成 Skill 初始化";for(let o of(t.log(l),t.log(`project: ${e.projectPath}`),t.log(`mode: ${e.mode}`),t.log(`skills: ${e.skillNames.join(", ")}`),t.log("targets:"),e.targetRoots))t.log(` - ${o}`)}(l,{projectPath:n,mode:m.mode,branch:d?"backfill":"first-install",targetRoots:k.targetRoots,skillNames:m.skillNames}),{success:!0,branch:d?"backfill":"first-install",project_path:n,target_roots:k.targetRoots,skills:m.skillNames,skills_mode:m.mode,skills_version:m.skillsVersion,hosted_root:m.hostedRoot}}async function R(t,e,l,o){let s,i=function(t){let e=Array.from(new Set(t.map(t=>t.trim()).filter(Boolean)));if(0===e.length)return;let l=new Set(m),o=e.filter(t=>!l.has(t));if(o.length>0)throw Error(`不支持的 Agent: ${o.join(", ")}。支持: ${m.join(", ")}。`);return C(e)}(e.agent);return i?s=i:o.isInteractive()?s=C(await o.selectAgents()):l.error("当前项目尚未初始化 Skill,且处于非交互环境。请通过 --agent <id> 指定目标 Agent。"),{targetRoots:s.map(t=>{let e=c.find(e=>e.id===t);return e?.projectPath??""})}}function C(t){return Array.from(new Set(["universal",...t]))}export{f as skill_namespaceObject};
|
package/dist/skills~1.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as r}from"./rslib-runtime.js";import"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as r}from"./rslib-runtime.js";import"./8713.js";import{SUPPORTED_AGENTS as e}from"./skills.js";let t=r("node:path");var n=r.n(t);let i=r("node:url"),o=n().dirname((0,i.fileURLToPath)(import.meta.url)),l=n().resolve(o,"../skills"),s=r("node:fs"),c=r("node:os");class u extends Error{cause;constructor(r,e){let t=e?`
|
|
2
2
|
原因: ${e.message}`:"";super(`${r}${t}`),this.cause=e,this.name="SkillsInstallError"}}let a=".dbx",f="skills";function S(){return s.existsSync(l)?s.readdirSync(l).filter(r=>{let e=t.join(l,r);return s.statSync(e).isDirectory()&&s.existsSync(t.join(e,"SKILL.md"))}).sort():[]}function h(r){var e,n;let i,o=function(r){let e=v(r),n=t.join(c.homedir(),a,f,"versions",v(r)),i=S();if(0===i.length)return{skillNames:i,bundledRoot:l,hostedRoot:n,skillsVersion:e};for(let r of(s.mkdirSync(n,{recursive:!0}),i)){var o,u;o=t.join(l,r),k(u=t.join(n,r))&&s.rmSync(u,{recursive:!0,force:!0}),s.cpSync(o,u,{recursive:!0})}return{skillNames:i,bundledRoot:l,hostedRoot:n,skillsVersion:e}}(r),u=t.join(c.homedir(),a,f,"current");return o.skillNames.length>0&&(e=o.hostedRoot,i=k(n=u),i?.isSymbolicLink()?s.unlinkSync(n):i&&s.rmSync(n,{recursive:!0,force:!0}),s.mkdirSync(t.dirname(n),{recursive:!0}),p(e,n)),{...o,currentRoot:u}}async function d(r){let{agents:t,cwd:n,mode:i,cliVersion:o,yes:l,onDiscovered:s,onSkillDone:c}=r;if(0===t.length)throw Error("至少需要选择一个 Agent");let u=[];for(let r of t){let t=e.find(e=>e.id===r);t&&u.push(t.projectPath)}return y({targetRoots:u,cwd:n,mode:i,cliVersion:o,yes:l,onDiscovered:s,onSkillDone:c})}async function y(r){let{targetRoots:e,skillNames:n,cwd:i,mode:o="link",cliVersion:l,yes:S=!1,onDiscovered:d,onSkillDone:y}=r,{skillNames:v,bundledRoot:_,hostedRoot:j,currentRoot:w,skillsVersion:g}=h(l),E=function(r,e){if(!e)return r;let t=new Set(r),n=Array.from(new Set(e)),i=n.filter(r=>!t.has(r));if(i.length>0)throw Error(`请求安装的 Skill 不在当前 CLI 内置列表中: ${i.join(", ")}。可用: ${r.join(", ")}。`);return n}(v,n);d?.(E);let $=t.resolve(i??"."),b=m(e.map(r=>t.isAbsolute(r)?r:t.join($,r))),R=[];for(let r of E)try{let e="link"===o?w:j,n=t.join(e,r);for(let e of b){var C,N,A,K;let i=t.join(e,r);C=n,N=i,A=o,K=S,(s.mkdirSync(t.dirname(N),{recursive:!0}),function(r,e,n){let i=k(e);if(!i)return;if(i.isSymbolicLink()){if(function(r,e){try{return s.realpathSync(r)!==s.realpathSync(e)}catch{return!1}}(r,e)&&!n&&!function(r){try{let e=s.realpathSync(r),n=t.join(c.homedir(),a,f,"versions"),i=s.realpathSync(n),o=t.relative(i,e);if(!o||o.startsWith("..")||t.isAbsolute(o))return!1;let l=o.split(t.sep);return 2===l.length&&l[0].length>0&&l[1]===t.basename(r)}catch{return!1}}(e))throw Error(`目标 Skill 软链已存在但指向其他位置: ${e}。如需替换,请添加 --yes。`);s.unlinkSync(e);return}if(!n)throw Error(`目标 Skill 已存在且不是软链: ${e}。如需覆盖,请添加 --yes,现有目录会被备份后替换。`);let o=function(r){let e=new Date().toISOString().replace(/[-:]/g,"").replace(/\..+$/,"").replace("T","-"),t=`${r}.bak-${e}`,n=t,i=1;for(;s.existsSync(n);)n=`${t}-${i}`,i+=1;return n}(e);s.renameSync(e,o)}(C,N,K),"copy"===A)?s.cpSync(C,N,{recursive:!0}):p(C,N)}y?.(r,!0)}catch(e){R.push(e),y?.(r,!1)}if(R.length>0)throw new u("内置 Skills 安装失败",R[0]);return{skillNames:E,bundledRoot:_,hostedRoot:j,currentRoot:w,mode:o,skillsVersion:g}}function m(r){let e=new Set,n=new Set,i=[];for(let o of r){let r,l=t.resolve(o);if(!e.has(l)){e.add(l);try{r=s.realpathSync(l)}catch{r=void 0}if(void 0!==r){if(n.has(r))continue;n.add(r)}i.push(l)}}return i}function p(r,e){let t="win32"===process.platform?"junction":"dir";s.symlinkSync(r,e,t)}function k(r){try{return s.lstatSync(r)}catch(r){if("ENOENT"===r.code)return;throw r}}function v(r){let e=r.trim();if(!e)throw Error("cliVersion 不能为空");return e.replace(/[\\/]/g,"_")}export{m as dedupeRoots,d as installSkills,y as installSkillsToRoots,S as listBundledSkills,h as refreshCurrentSkills};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=document.currentScript;if(!(e instanceof HTMLScriptElement))throw Error("web-view proxy client must run from a script element");let t=new URL(e.src).searchParams,r=t.get("mobileUserAgent"),i=t.get("originalPath");if(!r||null===i)throw Error("web-view proxy client configuration is missing");if(window!==window.parent){try{history.replaceState(null,"",i)}catch{}try{Object.defineProperty(Navigator.prototype,"userAgent",{get:()=>r,configurable:!0}),Object.defineProperty(Navigator.prototype,"platform",{get:()=>"iPhone",configurable:!0})}catch{}"AppletBridgeModule"in window||Object.defineProperty(window,"AppletBridgeModule",{configurable:!0,writable:!0,value:{postMessage(o){let n="string"==typeof o?o:JSON.stringify(o);try{window.parent.postMessage(n,"*")}catch{}return Promise.resolve({})},postMessageSync:()=>void 0}})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t){let e="doubao-web-view-states-v2",n=t.location.pathname.slice(0,-6),i=`${n}/page`,a=`${n}/runtime`;function o(e){return new Request(`${t.location.origin}${n}/client/${encodeURIComponent(e)}`)}async function r(n,i){let a=await t.caches.open(e);await a.put(o(n),new Response(JSON.stringify(i)))}async function s(n){let i=await t.caches.open(e),a=await i.match(o(n));if(a)return JSON.parse(await a.text())}function c(t){return new Response(t.body,{headers:t.headers,status:t.status,statusText:t.statusText})}async function l(e,n,i,a=n){let o=[e.clientId,e.resultingClientId].filter(Boolean),s=await t.fetch(i??e.request),u=s.headers.get("x-doubao-web-view-target")??n;return await Promise.all(o.map(t=>r(t,{src:a,target:u}))),c(s)}async function u(e){let{request:o}=e,r=await s(e.clientId);if(!r)return t.fetch(o);let u=new URL(r.src),d=new URL(o.url);if(d.origin===t.location.origin&&d.pathname.startsWith(`${n}/`))return t.fetch(o);let h=d.origin===t.location.origin?new URL(d.pathname+d.search,r.target):d;if(d.origin===t.location.origin&&h.protocol===t.location.protocol&&(h.protocol=u.protocol),"navigate"===o.mode&&"GET"===o.method){let n=new URL(i,t.location.origin);return n.searchParams.set("url",h.toString()),l(e,h.toString(),n,r.src)}let g=new URL(a,t.location.origin);g.searchParams.set("url",h.toString());let w={credentials:"omit",headers:o.headers,method:o.method,redirect:o.redirect};return"GET"!==o.method&&"HEAD"!==o.method&&(w.body=await o.clone().blob()),c(await t.fetch(g,w))}t.addEventListener("install",e=>e.waitUntil(t.skipWaiting())),t.addEventListener("activate",e=>e.waitUntil(t.clients.claim())),t.addEventListener("fetch",e=>{let n=new URL(e.request.url);if("navigate"===e.request.mode&&n.origin===t.location.origin&&n.pathname===i){let t=n.searchParams.get("url");t&&e.respondWith(l(e,t));return}e.clientId&&e.respondWith(u(e))})}(globalThis);
|
package/dist/status.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{InvalidArgumentError as r,parseInteger as e,runCommand as i,promises_namespaceObject as o,command_Command as a,option_Option as n,getLastHttpResponseLogId as s}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{InvalidArgumentError as r,parseInteger as e,runCommand as i,promises_namespaceObject as o,command_Command as a,option_Option as n,getLastHttpResponseLogId as s}from"./8713.js";import{getMiniAppVersionArtifact as _}from"./app.js";import{resolveAppKey as u}from"./workspace.js";import{miniAppDetailUrl as f,miniAppVersionDetailUrl as d}from"./portal.js";let l=t("node:fs"),c=t("node:os"),p=t("node:path"),g=new Set([7]),m=new Set([8]),b={1:{name:"PENDING_BUILD",description:"Waiting for cloud build to start"},2:{name:"BUILD_STARTED",description:"Cloud build has started"},3:{name:"CODE_READY",description:"Source package is ready"},4:{name:"COMPILING",description:"Compiling frontend code"},5:{name:"COMPILE_SUCCEEDED",description:"Compilation succeeded; waiting for upload or final packaging"},6:{name:"UPLOADING",description:"Uploading build output"},7:{name:"BUILD_SUCCEEDED",description:"Cloud build succeeded"},8:{name:"BUILD_FAILED",description:"Cloud build failed"}};async function $(t,r){var e;let i=u(r.project,r.appId),a=Date.now(),n=0,s=await C(i,r.versionTag,n);for(;r.poll&&"success"!==(e=s.status)&&"failed"!==e;){if(Date.now()-a>=1e3*r.timeoutSeconds)throw S("artifact build status polling timed out",s);await (0,o.setTimeout)(1e3*r.intervalSeconds),n+=1,s=await C(i,r.versionTag,n)}let _=function(t){let r=t.artifact_build_error_info;if(r){var e,i;let o;return e=r,i=t.error_info_file,o=e.error_code||"artifact build failed",i?`${o}; error_info written to ${i}`:e.error_info?e.error_info:e.error_code?e.error_code:"number"==typeof e.last_status_before_failed?`artifact build failed after status ${e.last_status_before_failed}`:"artifact build failed"}let o=t.artifact_status;if("number"==typeof o&&m.has(o)){let t=v(o);return`artifact_status=${o} (${t.name})`}}(s);if(t.log(`artifact status: ${s.status}`),"number"==typeof s.artifact_status?t.log(`artifact_status: ${s.artifact_status} (${s.artifact_status_name})`):t.log("artifact_status: unknown"),t.log(`status_description: ${s.artifact_status_description}`),t.log(`app_id: ${s.app_id}`),t.log(`version_tag: ${s.version_tag}`),"success"===s.status&&(t.log("后续调试指引:"),t.log(`1. 打开版本详情页查看真机调试二维码: ${s.version_detail_url}`),t.log(`2. 扫码前,先将豆包 UID 加入当前应用的调试白名单: ${s.app_detail_url} 的「体验白名单」部分。`),t.log("3. 在豆包 App 中打开调试对话。"),t.log(`4. 如果是首次调试,在手机浏览器中打开 ${s.doubao_debug_conversation_url},会自动调起豆包 App 并打开调试会话。`)),_)for(let r of(t.log(`failure_reason: ${_}`),function(t,r){if(!t)return[];let e=[];if(t.error_code&&e.push(`error_code: ${t.error_code}`),r?(e.push(`error_info_file: ${r}`),e.push("error_info: written to temporary file for agent diagnosis")):t.error_info&&e.push(`error_info: ${t.error_info}`),"number"==typeof t.last_status_before_failed){let r=v(t.last_status_before_failed);e.push(`last_status_before_failed: ${t.last_status_before_failed} (${r.name})`),e.push(`last_status_description: ${r.description}`)}return e}(s.artifact_build_error_info,s.error_info_file)))t.log(r);if(_)throw S(`artifact build failed: ${_}`,s);return s}function w(t){let i=e(t);if(i<1)throw new r("expected an integer greater than or equal to 1");return i}async function C(t,r,e){var i,o,a,n;let u,b,$,w=await _(t,r),C=w.data,S=v(C?.artifact_status),E=(i=C,"number"!=typeof(u=i?.artifact_status)?"unknown":g.has(u)?"success":m.has(u)||i?.artifact_build_error_info?"failed":"building"),D="failed"===E&&C?.artifact_build_error_info?.error_info?(o=t,a=C?.version_tag||r,n=C.artifact_build_error_info.error_info,b=(0,p.join)((0,c.tmpdir)(),"dbx-artifact-build-errors"),(0,l.mkdirSync)(b,{recursive:!0}),$=(0,p.join)(b,`${h(o)}-${h(a)}-${Date.now()}-${process.pid}.log`),(0,l.writeFileSync)($,n.endsWith("\n")?n:`${n}
|
|
2
2
|
`,"utf8"),$):void 0,U=C?.artifact_build_error_info?function(t,r){if(!r)return t;let{error_info:e,...i}=t;return i}(C.artifact_build_error_info,!!D):void 0;return{app_id:t,version_tag:C?.version_tag||r,artifact_status:C?.artifact_status,artifact_status_name:S.name,artifact_status_description:S.description,status:E,...U?{artifact_build_error_info:U}:{},...D?{error_info_file:D}:{},attempt:e,..."success"===E?{version_detail_url:d(t,C?.version_tag||r),app_detail_url:f(t),doubao_debug_conversation_url:"https://inhouse.doubao.com/bot/2xgttdEs"}:{},log_id:w.log_id??s()??""}}function v(t){return"number"!=typeof t?{name:"UNKNOWN",description:"No artifact status was returned by the server"}:b[t]??{name:"UNKNOWN",description:`Unrecognized artifact status ${t}`}}function h(t){return t.trim().replace(/[^a-zA-Z0-9._-]+/g,"_")||"unknown"}function S(t,r){let e=Error(t);return e.exitCode=1,e.logId=s(),e.details=r,e}export default function(){return new a("status").description("查询或轮询版本产物构建状态").option("--app-id <app-id>","兼容参数;manifest 存在时必须与 app_key 一致").option("--project <path>","项目路径,用于按项目布局读取 Manifest",".").requiredOption("--version-tag <tag>","版本 tag").option("--poll","持续轮询直到构建成功、失败或超时",!1).addOption(new n("--interval-seconds <seconds>","轮询间隔秒数").default(5).argParser(w)).addOption(new n("--timeout-seconds <seconds>","轮询超时时间秒数").default(300).argParser(w)).action(async(t,r)=>i(r,r=>$(r,t)))};
|
package/dist/status~1.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{command_Command as e,runCommand as o}from"./
|
|
1
|
+
import"node:module";import{command_Command as e,runCommand as o}from"./8713.js";import{getAuthStatus as r}from"./auth.js";async function t(e){let o=await r();return o.loggedIn?(e.log("Logged in"),e.log(`User ID: ${o.uid??"unknown"}`),o.expiresAt&&e.log(`Expires at: ${new Date(1e3*o.expiresAt).toISOString()}`),o.baseUrl&&e.log(`Base URL: ${o.baseUrl}`),o):(o.credentialError?(e.log("Credential store unavailable"),e.log(o.credentialError.message)):e.log("Not logged in"),o)}export default function(){return new e("status").description("查看登录状态").action(async(e,r)=>o(r,t))};
|
package/dist/stop.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{command_Command as e,runCommand as o}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import{command_Command as e,runCommand as o}from"./8713.js";import{stopDevService as r,connectDevService as s,DEV_ACTIONS as i}from"./dev-service-client.js";import{resolveProjectLayout as a}from"./project-layout.js";let n=t("node:path");async function p(t){let e=(0,n.resolve)(process.cwd()),o=a(e).frontendDirectory,s=await _(e,o);if(s)return t.log("dev service stopped"),t.log("status: stopping"),{status:"stopping",result:s};let i=await r({projectPath:e,appDir:o});return t.log("dev service stopped"),t.log(`status: ${i?.status??"stopped"}`),i??{status:"stopped"}}async function _(t,e){let o;try{return o=await s({projectPath:t,appDir:e,nodeIdPrefix:"dev-stop",requestTimeoutMs:5e3}),await o.call(i.stop)}catch{return}finally{await o?.stop().catch(()=>void 0)}}export default function(){return new e("stop").description("停止常驻 dev 调试服务").action(async(t,e)=>o(e,t=>p(t)))};
|
package/dist/update.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{execa as r,runtime_packageName as e,compareSemver as n,normalizeVersion as t,isValidSemver as a,writeUpdateCheckState as i}from"./
|
|
1
|
+
import"node:module";import{execa as r,runtime_packageName as e,compareSemver as n,normalizeVersion as t,isValidSemver as a,writeUpdateCheckState as i}from"./8713.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=t(await o.npmView(e)),u=t(r);if(!a(p))throw Error(`Invalid latest version from npm registry: ${p}`);if(!a(u))throw Error(`Invalid current version: ${r}`);return await i(p),{currentVersion:u,latestVersion:p,updateAvailable:n(p,u)>0}}async function p(r){let n=r.runner??l,t=await s(r.currentVersion,n);if(r.check)return{...t,action:t.updateAvailable?"check_update_available":"already_up_to_date"};if(!r.force&&!t.updateAvailable){let r=u(t.currentVersion);return{...t,action:"already_up_to_date",...r}}if(!await n.npmAvailable())throw Error(`npm not found in PATH. Install npm or update manually with npm install -g ${e}`);await n.npmInstallGlobal(`${e}@${t.latestVersion}`),await i(t.latestVersion);let a=u(t.latestVersion);return{...t,action:"updated",...a}}function u(r){try{return{skills:o(r)}}catch(r){return{skillsWarning:c(r)}}}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 e,command_Command as r,runCommand as o}from"./
|
|
1
|
+
import"node:module";import{version_version as e,command_Command as r,runCommand as o}from"./8713.js";import{updateCli as l}from"./update.js";async function n(r,o){let n=await l({currentVersion:e,check:o.check,force:o.force});return"already_up_to_date"===n.action?r.log(`dbx is up to date: ${n.currentVersion}`):"check_update_available"===n.action?r.log(`dbx ${n.latestVersion} available, current ${n.currentVersion}`):r.log(`dbx upgraded: ${n.currentVersion} -> ${n.latestVersion}`),n.skills&&(r.log(`skills refreshed: ${n.skills.skillNames.length}`),r.log(`skills current: ${n.skills.currentRoot}`)),n.skillsWarning&&r.warn(`skills refresh failed: ${n.skillsWarning}`),n}export default function(){return new r("upgrade").description("升级 dbx 相关资源").option("--check","只检查是否有新版本,不安装",!1).option("--force","即使当前已是最新版本也重新安装",!1).action(async(e,r)=>o(r,r=>n(r,e)))};
|
package/dist/upload.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./8713.js";import{uploadMiniAppVersionDraftPackage as s,verifyYAML as a,submitMiniAppVersionDraft as o,uploadMiniAppVersionDraftSourceCode as l}from"./app.js";import{resolveAppKey as p,describeWorkspaceUpload as u,sourceTypeForWorkspaceFileType as d}from"./workspace.js";import{resolveProjectLayout as c}from"./project-layout.js";import{miniAppVersionDetailUrl as f}from"./portal.js";var _={};e.r(_),e.d(_,{__testOnly:()=>Z,default:()=>j,resolveBusinessTemplatesFile:()=>R});let m=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function h(e){if(!t(e))return;let r=t(e.mcp_server)?e.mcp_server:void 0,i=r?.end_point;return"string"==typeof i&&i.trim()?i:void 0}function g(e,t,r){return{checked:!0,endpoint:e,cloud_reachable:!1,reason:t,message:r}}function y(e){let t=e.split(".");if(4!==t.length)return;let r=t.map(e=>Number(e));if(!r.some(e=>!Number.isInteger(e)||e<0||e>255))return r}let v=e("node:fs"),w=e("node:util");async function b(e,t={}){let r=k(e),i={cwd:r};try{await I({action:"build",appDir:r,appId:t.appId})}catch(e){throw new U(r,e,i)}return i}async function E(e,t){let r=k(e),i={cwd:r,output_dir:t},n="";try{i.archive_path=n=(await I({action:"cloudPackage",appDir:r,outputDir:t})).archivePath||""}catch(e){throw new C(r,e,i)}if(!n)throw new C(r,Error("DoubaoAppsSDK.cloudPackage did not return an archive path"),i);return n}function k(e){if(!(0,v.existsSync)(e))throw Error(`frontend_code path not found: ${e}`);if((0,v.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);return(0,v.realpathSync)(e)}async function I(e){let r,i,n,s,a=process.cwd(),o={CI:process.env.CI,FORCE_COLOR:process.env.FORCE_COLOR,NO_COLOR:process.env.NO_COLOR},l=(r=[],i=[],n=process.stdout.write,s=process.stderr.write,process.stdout.write=L(r),process.stderr.write=L(i),{result(){let e=S({stdout:r.join(""),stderr:i.join("")});return{...e,...e.stdout||e.stderr?{output:$([e.stdout,e.stderr].filter(Boolean).join("\n"))}:{}}},restore(){process.stdout.write=n,process.stderr.write=s}});try{process.chdir(e.appDir),process.env.CI="true",process.env.FORCE_COLOR="0",process.env.NO_COLOR="1";let{DoubaoAppsSDK:t}=await import("./sdk.js"),r=new t(e.appDir);if("build"===e.action)return await r.build(e.appId?{appId:e.appId}:void 0),l.result();let i=await r.cloudPackage({outputDir:e.outputDir});return{...l.result(),archivePath:i}}catch(r){let e=l.result();throw t(r)&&Object.assign(r,e),r}finally{l.restore(),process.chdir(a),function(e){for(let[t,r]of Object.entries(e))void 0===r?delete process.env[t]:process.env[t]=r}(o)}}function L(e){return(t,r,i)=>{e.push("string"==typeof t?t:Buffer.from(t).toString("string"==typeof r?r:"utf8"));let n="function"==typeof r?r:i;return n?.(),!0}}function S(e){let t=$(e.stdout),r=$(e.stderr),i=$(e.output);return{...t?{stdout:t}:{},...r?{stderr:r}:{},...i?{output:i}:{}}}class U extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=x(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=P(r?.output||s.output||o||a),p={code:"frontend_build_check_failed",cwd:r?.cwd||e,...void 0===s.exitCode?{}:{exit_code:s.exitCode},...s.signal?{signal:s.signal}:{},...s.shortMessage?{short_message:s.shortMessage}:{},...s.originalMessage?{original_message:s.originalMessage}:{},...l?{output:l}:{}};super((n=(i=p).output||i.stderr||i.stdout||i.short_message||i.original_message||"unknown build failure",["frontend build check failed",`cwd: ${i.cwd}`,"build output:",n].join("\n"))),this.name="FrontendBuildCheckError",this.details=p}}class C extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=x(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=P(r?.output||s.output||o||a),p={code:"frontend_package_failed",cwd:r?.cwd||e,output_dir:r?.output_dir??"",...r?.archive_path?{archive_path:r.archive_path}:{},...void 0===s.exitCode?{}:{exit_code:s.exitCode},...s.signal?{signal:s.signal}:{},...s.shortMessage?{short_message:s.shortMessage}:{},...s.originalMessage?{original_message:s.originalMessage}:{},...l?{output:l}:{}};super((n=(i=p).output||i.stderr||i.stdout||i.short_message||i.original_message||"unknown package failure",["frontend package failed",`cwd: ${i.cwd}`,"package output:",n].join("\n"))),this.name="FrontendPackageError",this.details=p}}function x(e){if(!t(e))return{output:String(e)};let r=S({stdout:e.stdout,stderr:e.stderr,output:e.all??e.output}),i=!!(r.stdout||r.stderr||r.output);return{exitCode:"number"==typeof e.exitCode?e.exitCode:void 0,signal:"string"==typeof e.signal?e.signal:void 0,shortMessage:i||"string"!=typeof e.shortMessage?void 0:e.shortMessage,originalMessage:"string"==typeof e.originalMessage?e.originalMessage:i||"string"!=typeof e.message?void 0:e.message,...r}}function $(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):"string"==typeof e?e:"";return(0,w.stripVTControlCharacters)(t).replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map(e=>e.trimEnd()).join("\n").trim()||void 0}function P(e){let t,r=$(e);if(!r)return;let i=(t=[r.search(/(^|\n)error\s+Build error:/i),r.search(/(^|\n)Build error:/i),r.search(/(^|\n)File:\s/i),r.search(/(^|\n)\s*[×x]\s+.*TS\d+:/i)].filter(e=>e>=0)).length>0?Math.min(...t):-1,n=i>=0?r.slice(i).trim():r;return n.length<=4e3?n:`${n.slice(0,4e3).trimEnd()}
|
|
2
2
|
... output truncated ...`}let M=e("node:path");function j(){return new i("upload").description("上传产物并触发云构建").option("--app-id <app-id>","兼容参数;必须与 manifest.app_key 一致").option("--project <path>","项目路径;默认使用当前目录",".").option("--manifest <path>","manifest.yaml 路径;默认按项目布局自动解析").option("--skill <path>","Skill 目录路径;默认按项目布局自动解析,目录根部必须包含 SKILL.md").option("--frontend-code <path>","前端源码目录路径;默认按项目布局自动解析").option("--business-templates <path>","business-templates.yaml 路径;默认读取项目根目录同名文件").option("--business-templates-only","仅上传业务模板,不构建或提交其他产物",!1).option("--keep-packages","上传后保留本次打包生成的临时包,用于调试",!1).action(async(e,t)=>r(t,t=>O(t,e)))}async function O(e,r){let i=c(r.project),s=z(r.project,r.manifest,i.manifestPath),a=z(r.project,r.skill,i.skillDirectory),l=z(r.project,r.frontendCode,(0,M.resolve)(r.project,i.frontendDirectory)),u=p(r.project,r.appId,s);if(r.businessTemplatesOnly)return F(e,u,r);let d=r.keepPackages,_=T(),w="",E="",k="",I="",L=[];try{var S,U,C,x,$;let t,i,p,c=[],P=await b(l,{appId:u});C=s,x=_,Y(C,"manifest"),t=(0,M.join)(x,"manifest.yaml"),(0,v.copyFileSync)(C,t),w=t,L.push(W({type:"manifest",file:w}));let j=await q(w),O=R(r);O&&(I=K(O,_),L.push(W({type:"business_templates",file:I})));let z=I?await V(I):void 0,F=(S=(0,v.readFileSync)(w,"utf8"),U=j.manifest,(i=h(function(e){try{return m.qg(e)}catch{return}}(S))??h(U))?function(e){let t,r=e.trim();try{t=new URL(r)}catch{return g(r,"invalid_url","manifest.mcp_server.end_point must be a valid http(s) URL.")}if("http:"!==t.protocol&&"https:"!==t.protocol)return g(r,"invalid_protocol","manifest.mcp_server.end_point must use http:// or https://.");let i=function(e){if(!e)return"empty_hostname";if("localhost"===e||e.endsWith(".localhost"))return"localhost";if(e.endsWith(".local")||e.endsWith(".lan")||e.endsWith(".internal"))return"private_hostname";if(!e.includes(".")&&!e.includes(":"))return"unqualified_hostname";let t=y(e)??function(e){let t="::ffff:";if(!e.startsWith(t))return;let r=e.slice(t.length),i=y(r);if(i)return i;let n=r.split(":");if(2!==n.length)return;let s=n.map(e=>Number.parseInt(e,16));if(s.some((e,t)=>!/^[0-9a-f]{1,4}$/i.test(n[t])||!Number.isInteger(e)||e<0||e>65535))return;let[a,o]=s;return[a>>8,255&a,o>>8,255&o]}(e);return t?function(e){let[t,r]=e;return 10===t?"private_ipv4":127===t?"loopback_ipv4":172===t&&r>=16&&r<=31||192===t&&168===r?"private_ipv4":169===t&&254===r?"link_local_ipv4":100===t&&r>=64&&r<=127?"carrier_grade_nat_ipv4":0===t?"reserved_ipv4":192===t&&0===e[1]&&2===e[2]||198===t&&51===e[1]&&100===e[2]||203===t&&0===e[1]&&113===e[2]?"documentation_ipv4":198===t&&(18===r||19===r)?"benchmark_ipv4":t>=224?"reserved_ipv4":void 0}(t):e.includes(":")?function(e){if("::1"===e||"0:0:0:0:0:0:0:1"===e)return"loopback_ipv6";let t=Number.parseInt(e.split(":")[0]||"0",16);if(Number.isFinite(t)){if((65024&t)==64512)return"unique_local_ipv6";if((65472&t)==65152)return"link_local_ipv6"}}(e):void 0}(t.hostname.replace(/^\[/,"").replace(/\]$/,"").toLowerCase());return i?g(r,i,"manifest.mcp_server.end_point points to a local or private network address that cloud build and real devices cannot reach."):{checked:!0,endpoint:r,cloud_reachable:!0}}(i):{checked:!1,cloud_reachable:!1,reason:"mcp_endpoint_missing",message:"manifest.mcp_server.end_point is missing"});if(F.checked&&!F.cloud_reachable&&process.stderr.write(`[WARNING]
|
|
3
3
|
${(p=F.endpoint??"(missing)",`manifest.mcp_server.end_point may not be reachable from cloud build or real devices.
|
|
4
4
|
endpoint: ${p}
|
package/dist/validate.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{runCommand as t,command_Command as s,option_Option as i,CliError as a}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{runCommand as t,command_Command as s,option_Option as i,CliError as a}from"./8713.js";import{verifyYAML as n}from"./app.js";let o=e("node:fs"),r=e("node:path");async function l(e,t,s){t||e.error("YAML file is required: pass a file path"),(0,o.existsSync)(t)&&(0,o.statSync)(t).isFile()||e.error(`YAML file not found: ${t}`);let i=(0,o.readFileSync)(t,"utf8"),r=m(t,s,e),l=await n(i,"compatible",r),p=l.data,d={valid:!!p?.success,manifest:p?.manifest,errors:f(p?.errors??[]),warnings:f(p?.warnings??[]),log_id:l.log_id??""};if(e.log(`${r} validation: ${d.valid?"passed":"failed"}`),e.log(JSON.stringify(d,null,2)),!d.valid)throw new a(`${r} validation failed`,{json:d,logId:d.log_id});return d}function m(e,t,s){let i=t?.trim().toLowerCase();return"manifest"===i?"manifest":"business-templates"===i||"business_templates"===i?"business_templates":(i&&s.error("--type must be manifest or business-templates"),"business-templates.yaml"===(0,r.basename)(e).toLowerCase()?"business_templates":"manifest")}function f(e){return e.map(e=>({code:e.code,path:e.path,message:e.message}))}export default function(){return new s("validate").description("校验 manifest.yaml 或 business-templates.yaml").argument("[file]","YAML 文件路径").addOption(new i("-f, --file <file>","YAML 文件路径(兼容参数)").hideHelp()).option("--type <type>","非标准文件名时指定配置类型:manifest 或 business-templates").action(async(e,s,i)=>t(i,t=>l(t,s.file??e,s.type)))};export{m as resolveYAMLType};
|
package/dist/workspace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{FRONTEND_ARCHIVE_FILENAME as t,isRecord as r}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{FRONTEND_ARCHIVE_FILENAME as t,isRecord as r}from"./8713.js";import"./yaml.js";import"./app.js";import{resolveProjectLayout as i}from"./project-layout.js";let s=e("node:crypto"),n=e("node:fs"),a=e("node:path"),o=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function p(e,t,r){let s=r??i(e).manifestPath;if(!(0,n.existsSync)(s)){if(t)return t;throw Error(`missing AppID: manifest file not found: ${s}`)}let a=l(s);if(t&&t!==a)throw Error(`AppID mismatch: --app-id is ${t}, but manifest.app_key is ${a}. Update the resolved Manifest; it is the single source of truth.`);return a}function l(e){let t;if(!(0,n.statSync)(e).isFile())throw Error(`missing AppID: manifest path is not a file: ${e}`);try{t=o.qg((0,n.readFileSync)(e,"utf8"))}catch(r){let t=r instanceof Error?r.message:String(r);throw Error(`invalid manifest.yaml: ${e}: ${t}`)}let i=r(t)?t.app_key:void 0;if("string"==typeof i&&i.trim())return i.trim();throw Error(`missing AppID: write app_key in ${e}`)}function f(e){let r=(0,n.readFileSync)(e.file),i=(0,n.statSync)(e.file);return{type:e.type,file:e.file,file_name:(0,a.basename)(e.file),file_size:i.size,sha256:(0,s.createHash)("sha256").update(r).digest("hex"),remote_file_name:function(e){switch(e){case"manifest":return"manifest.yaml";case"skill":return"skill.zip";case"frontend_code":return t;case"business_templates":return"business-templates.yaml"}}(e.type),replaced:!0}}function m(e){switch(e){case"manifest":return 2;case"skill":return 3;case"frontend_code":return 1;case"business_templates":return 4}}export{f as describeWorkspaceUpload,l as readManifestAppKey,p as resolveAppKey,m 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"./8713.js";import"./180.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.20",
|
|
4
4
|
"description": "Doubao Dev CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"node-loader": "2.1.0",
|
|
46
46
|
"rimraf": "5.0.10",
|
|
47
47
|
"typescript": "6.0.3",
|
|
48
|
-
"@byted-doubao-apps/cli": "0.0.
|
|
48
|
+
"@byted-doubao-apps/cli": "0.0.20"
|
|
49
49
|
},
|
|
50
50
|
"optionalDependencies": {
|
|
51
51
|
"@doubao-dev/security-tasm": "0.0.22",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
| 目标 | 使用方式 | 成功证据 |
|
|
20
20
|
| ------------------------------- | --------------------------------------------------- | -------------------------------------------- |
|
|
21
|
-
| 真机打开指定页面 | 真机模式内执行 `page <page-
|
|
21
|
+
| 真机打开指定页面 | 真机模式内执行 `page <page-url>` | 用户确认手机实际打开;CLI 仅证明请求已发送。 |
|
|
22
22
|
| 真机推送卡片 | 真机模式内执行 `widget <widget-id> --data '<json>'` | 用户确认设备已显示并正确渲染。 |
|
|
23
23
|
| Skill / MCP / Manifest 出卡链路 | 改用 `dbx simulator eval` | `Verdict: PASS`、tool report 与 card delta。 |
|
|
24
24
|
|
|
@@ -66,7 +66,7 @@ device
|
|
|
66
66
|
- CLI 默认在浏览器打开仅本机可访问的临时二维码页面,不落盘 PNG。
|
|
67
67
|
- 需要导出并向用户直接展示二维码文件时执行 `device --qr-file <绝对路径/文件.png>`;二维码超时后在真机模式执行 `qr --qr-file <绝对路径/文件.png>` 重新生成。将该 PNG 附加为图片后再请用户扫码,不要要求用户“查看终端”或复用已超时文件。
|
|
68
68
|
- 用户本人完成扫码和手机端授权;Agent 只负责发起与观察连接状态。
|
|
69
|
-
- 看到设备连接事件后,再在真机模式用 `page <page-
|
|
69
|
+
- 看到设备连接事件后,再在真机模式用 `page <page-url>` 或 `widget <widget-id>` 验证。若只看到超时、没有设备连接事件,重新生成二维码;不要把它归因成 Manifest 权限问题。
|
|
70
70
|
- 出现“超时”与稍后设备连接并存时,如实说明状态矛盾,并让用户确认设备是否实际收到页面或卡片。
|
|
71
71
|
|
|
72
72
|
### 2. 发现可调试目标
|
|
@@ -78,7 +78,7 @@ pages
|
|
|
78
78
|
widgets
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Page 只使用 `pages` 列出的完整 URL,Widget 只使用 `widgets` 列出的 ID。当前 REPL 可能不会拒绝未知值,因此“opened/pushed / status: ok”不能作为成功证据。
|
|
82
82
|
|
|
83
83
|
参数含义或数据格式不明确时,不要靠试错补全;先从项目的 Manifest、已有调试配置和已确认的数据契约中获取依据,仍无法确认时向用户说明缺少的信息。
|
|
84
84
|
|
|
@@ -121,10 +121,10 @@ get-computed-style @3:5:42 --properties color,font-size --json
|
|
|
121
121
|
### 4. 打开 Page
|
|
122
122
|
|
|
123
123
|
```text
|
|
124
|
-
page <page-
|
|
124
|
+
page <page-url>
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
需要调试页面入参时,将参数编码到 URL query;参数结构必须来自已确认的项目数据契约。执行后请用户确认手机端结果。
|
|
128
128
|
|
|
129
129
|
### 5. 推送 Widget 与准备 JSON
|
|
130
130
|
|
|
@@ -133,7 +133,7 @@ widget <widget-id>
|
|
|
133
133
|
widget <widget-id> --data '<json>'
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
参数或用法不确定时,先在真机模式执行 `widget --help` 或 `help widget
|
|
136
|
+
参数或用法不确定时,先在真机模式执行 `widget --help` 或 `help widget`;两者都不会推送卡片,不要猜测 flag 名称。
|
|
137
137
|
|
|
138
138
|
按此顺序准备数据,不要凭业务名称杜撰字段:
|
|
139
139
|
|