@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/dbx-demo.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"./8713.js";let t=e("node:fs");var r=e.n(t);let i=e("node:path");var n=e.n(i);let a=e("node:url"),o=n().dirname((0,a.fileURLToPath)(import.meta.url)),p=["taxi","milk-tea"];function s(e){if("taxi"===e)return m;if("milk-tea"===e)return y;throw Error(`unknown demo: ${e}. Supported demos: ${p.join(", ")}`)}function _(e){return p.includes(e)}function d(e,t){return n().join(n().resolve(e),".dbx","mcp-demo-server",`${t}.json`)}function c(e,t){let i=d(e,t.demo);r().mkdirSync(n().dirname(i),{recursive:!0}),r().writeFileSync(i,`${JSON.stringify(t,null,2)}
|
|
2
2
|
`,"utf8")}function u(e,t){let i=d(e,t);if(r().existsSync(i))try{return JSON.parse(r().readFileSync(i,"utf8"))}catch{return}}function l(e,t,i){let n=d(e,t);if(r().existsSync(n)){if(i){let r=u(e,t);if(r?.origin!==i)return}r().rmSync(n,{force:!0})}}let m={name:"taxi",appKey:"db_app_api_test_taxi",appName:"打车测试智能服务",serverName:"dbx-taxi-demo-mcp",tools:[{name:"Taxi_search",description:"搜索可用打车方案,返回 plan_id、车型、价格、距离和预计到达时间。",inputSchema:{type:"object",properties:{destination:{type:"string",description:"目的地"},preference:{type:"string",description:"车型或偏好,例如惠选、快车、商务"}},required:["destination"]}},{name:"Taxi_order",description:"根据 plan_id 发起打车订单,返回可出卡的智能服务订单实体。",inputSchema:{type:"object",properties:{plan_id:{type:"string",description:"Taxi_search 返回的方案 ID"},destination:{type:"string",description:"目的地"}},required:["plan_id"]}}],callTool:function(e,t){if("Taxi_search"===e){let e=x(t.destination)||"北京南站",r=x(t.preference)||"惠选";return{content:[{type:"text",text:`找到 2 个去${e}的${r}打车方案。`}],structuredContent:{plans:[{plan_id:"plan_demo_001",car_type:r,price_yuan:48.5,distance_km:12.8,eta_min:6},{plan_id:"plan_demo_002",car_type:"快车",price_yuan:55,distance_km:12.8,eta_min:4}]},isError:!1}}if("Taxi_order"===e){let e=x(t.destination)||"北京南站",r=x(t.plan_id)||"plan_demo_001";return{content:[{type:"text",text:`已为你创建去${e}的打车订单。`}],structuredContent:{entities:[{entity_type:"product",product_id:`taxi_order_${r}`,name:`去${e}的打车订单`,car_type:"惠选",price_yuan:48.5,status:"已下单"}]},isError:!1}}return{content:[{type:"text",text:`unknown tool: ${e}`}],isError:!0}},evalCase:{app_key:"doubao-api-test-taxi",app_name:"打车测试智能服务",query:"帮我叫一辆惠选去北京南站,直接下单",history_messages:[{role:"USER",content:"上一轮:你能调用智能服务工具吗?"},{role:"ASSISTANT",content:"可以,我会等待工具调用结果再继续回答。"}],skill:f("taxi","SKILL.md"),manifest:f("taxi","manifest.yaml"),max_step:15,expect:{tool_calls:["Taxi_search","Taxi_order"],card:{widget_id:"tpl.taxi_order",min_count:1}}}},y={name:"milk-tea",appKey:"db_app_api_test_milk_tea",appName:"奶茶测试智能服务",serverName:"dbx-milk-tea-demo-mcp",tools:[{name:"MilkTea_search",description:"根据口味、场景和偏好搜索奶茶商品,返回 sku_id、名称、甜度、价格和推荐理由。",inputSchema:{type:"object",properties:{query:{type:"string",description:"用户想喝的饮品或场景,例如下午提神、少糖奶茶"},sugar:{type:"string",description:"甜度偏好,例如少糖、半糖、无糖"}},required:["query"]}},{name:"MilkTea_order",description:"根据 sku_id 创建奶茶订单,返回可出卡的智能服务订单实体。",inputSchema:{type:"object",properties:{sku_id:{type:"string",description:"MilkTea_search 返回的商品 ID"},sugar:{type:"string",description:"甜度"}},required:["sku_id"]}}],callTool:function(e,t){if("MilkTea_search"===e){let e=x(t.query)||"下午提神少糖奶茶",r=x(t.sugar)||"少糖";return{content:[{type:"text",text:`找到 3 个适合「${e}」的${r}奶茶选项。`}],structuredContent:{products:[{sku_id:"tea_demo_001",name:"冷萃乌龙奶茶",sugar:r,price_yuan:18,selling_point:"茶香明显,适合下午提神"},{sku_id:"tea_demo_002",name:"茉莉轻乳茶",sugar:r,price_yuan:16,selling_point:"口感清爽,负担较低"},{sku_id:"tea_demo_003",name:"厚乳拿铁奶茶",sugar:"半糖",price_yuan:21,selling_point:"奶香更足,提神感更强"}]},isError:!1}}if("MilkTea_order"===e){var r;let e=x(t.sku_id)||"tea_demo_001",i=x(t.sugar)||"少糖",n=("number"==typeof(r=t.quantity)&&Number.isFinite(r)?r:0)||1;return{content:[{type:"text",text:`已为你下单 ${n} 杯${i}冷萃乌龙奶茶。`}],structuredContent:{entities:[{entity_type:"product",product_id:`milk_tea_order_${e}`,name:"冷萃乌龙奶茶",sugar:i,quantity:n,price_yuan:18*n,status:"已下单",selling_point:"茶香明显,适合下午提神"}]},isError:!1}}return{content:[{type:"text",text:`unknown tool: ${e}`}],isError:!0}},evalCase:{app_key:"doubao-api-test-milk-tea",app_name:"奶茶测试智能服务",query:"我想点一杯适合下午提神的少糖奶茶,直接下单",history_messages:[{role:"USER",content:"上一轮:你能帮我点饮品吗?"},{role:"ASSISTANT",content:"可以,我会先查找合适饮品,再根据你的确认或明确下单意图创建订单。"}],skill:f("milk-tea","SKILL.md"),manifest:f("milk-tea","manifest.yaml"),max_step:15,expect:{tool_calls:["MilkTea_search","MilkTea_order"],card:{widget_id:"tpl.milk_tea_order",min_count:1}}}};function x(e){return"string"==typeof e?e:""}function f(e,t){return r().readFileSync(n().join(o,"demos",`${e}.${t}`),"utf8")}export{p as DBX_DEMO_NAMES,s as getDBXDemo,_ as isDBXDemoName,u as readDBXDemoServerState,l as removeDBXDemoServerState,c as writeDBXDemoServerState};
|
package/dist/dbx.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{isRecord as r}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{isRecord as r}from"./8713.js";import{SUPPORTED_AGENTS as i}from"./skills.js";let o=e("node:fs"),n=e("node:path");function t(e){if(!o.existsSync(e))return{};let i=JSON.parse(o.readFileSync(e,"utf8"));return r(i)?i:{}}function s(e,l,f={}){let c=n.resolve(e,".dbx"),d=n.join(c,"config.json");o.mkdirSync(c,{recursive:!0});let y=function(e,o,n={}){var t;let s,l=r(e.frontend)?e.frontend:{},f=r(e.mcp_server)?e.mcp_server:{},c=r(t=e.app)?Object.fromEntries(Object.entries(t).filter(([e])=>"app_key"!==e)):{},d=(s=o.find(e=>"universal"!==e))?i.find(e=>e.id===s)?.host??"claude":"codex";return{...e,app:Object.keys(c).length>0?c:void 0,version:"string"==typeof e.version?e.version:"0.1.0",mode:"string"==typeof e.mode?e.mode:"ai-only",host:d,profile:"string"==typeof e.profile?e.profile:"",frontend:{...l,directory:"string"==typeof n.frontendDirectory?n.frontendDirectory:"string"==typeof l.directory?l.directory:""},mcp_server:{...f},skills:Array.isArray(e.skills)?e.skills:[]}}(t(d),l,f);o.writeFileSync(d,`${JSON.stringify(y,null,2)}
|
|
2
2
|
`,"utf8")}function l(e){return t(n.join(n.resolve(e,".dbx"),"config.json"))}function f(e,r,i={}){var s,l;let c=n.resolve(e,".dbx"),d=n.join(c,"config.json");o.mkdirSync(c,{recursive:!0});let y=t(d),p=(s=y.skills,l=r,Array.from(new Set([...Array.isArray(s)?s.filter(e=>"string"==typeof e):[],...l.filter(e=>"string"==typeof e)])).sort()),_={...y,skills:p,...i.source?{skills_source:i.source}:{},...i.mode?{skills_mode:i.mode}:{},...i.skillsVersion?{skills_version:i.skillsVersion}:{},...i.cliVersion?{dbx_cli_version:i.cliVersion}:{}};o.writeFileSync(d,`${JSON.stringify(_,null,2)}
|
|
3
3
|
`,"utf8")}export{l as readDbxConfig,f as updateDbxConfigSkills,s as writeDbxConfig};
|
package/dist/demo-server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{parseInteger as t,runCommand as o,command_Command as r,option_Option as s,isRecord as n}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{parseInteger as t,runCommand as o,command_Command as r,option_Option as s,isRecord as n}from"./8713.js";import{writeDBXDemoServerState as a,DBX_DEMO_NAMES as i,getDBXDemo as d,removeDBXDemoServerState as l}from"./dbx-demo.js";var m={};e.r(m),e.d(m,{default:()=>_});let c=e("node:http");var p=e.n(c);let h=e("node:crypto");async function f(e){let t=d(e.demo),o=new Map,r=p().createServer(async(r,s)=>{try{let n=new URL(r.url||"/",`http://${r.headers.host||`${e.host}:${e.port}`}`);if("POST"===r.method&&"/mcp"===v(n.pathname)){let o=await g(r);e.log?.(`[mcp] ${o.method||"-"} ${w(o)}`);let n=u(t,o);if(!n){s.writeHead(202),s.end();return}s.writeHead(200,{"content-type":"application/json","mcp-session-id":`demo-${t.name}-session`}),s.end(JSON.stringify(n));return}if("GET"===r.method&&"/sse"===v(n.pathname)){let t=(0,h.randomUUID)();s.writeHead(200,{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"});let n={write:(e,t)=>{s.write(`event: ${e}
|
|
2
2
|
`),s.write(`data: ${"string"==typeof t?t:JSON.stringify(t)}
|
|
3
3
|
|
|
4
4
|
`)},close:()=>s.end()};o.set(t,n),r.on("close",()=>o.delete(t)),n.write("endpoint",`/sse/message?session_id=${encodeURIComponent(t)}`),e.log?.(`[sse] connected session=${t}`);return}if("POST"===r.method&&"/sse/message"===v(n.pathname)){let a=n.searchParams.get("session_id")||"",i=o.get(a);if(!i)return void $(s,404,{error:"SSE session not found"});let d=await g(r);e.log?.(`[sse] ${d.method||"-"} ${w(d)}`);let l=u(t,d);s.writeHead(202),s.end(),l&&i.write("message",l);return}if("GET"===r.method&&"/health"===v(n.pathname))return void $(s,200,{ok:!0,demo:e.demo});$(s,404,{error:"not found",paths:["/mcp","/sse","/health"]})}catch(e){$(s,500,{error:e instanceof Error?e.message:String(e)})}});await new Promise((t,o)=>{r.once("error",o),r.listen(e.port,e.host,()=>{r.off("error",o),t()})});let s=r.address(),n="object"==typeof s&&s?s.port:e.port,a=`http://${e.host}:${n}`;return{origin:a,streamableUrl:`${a}/mcp`,sseUrl:`${a}/sse`,close:()=>new Promise((e,t)=>{for(let e of o.values())e.close();o.clear(),r.close(o=>o?t(o):e())})}}function u(e,t){if("initialize"===t.method)return{jsonrpc:"2.0",id:t.id,result:{protocolVersion:t.params?.protocolVersion||"2025-11-25",capabilities:{tools:{}},serverInfo:{name:e.serverName,version:"0.1.0"}}};if("notifications/initialized"!==t.method){if("tools/list"===t.method)return{jsonrpc:"2.0",id:t.id,result:{tools:e.tools}};if("tools/call"===t.method){let o="string"==typeof t.params?.name?t.params.name:"",r=n(t.params?.arguments)?t.params.arguments:{};return{jsonrpc:"2.0",id:t.id,result:e.callTool(o,r)}}return{jsonrpc:"2.0",id:t.id??null,error:{code:-32601,message:`Method not found: ${t.method||"-"}`}}}}function g(e){return new Promise((t,o)=>{let r="";e.setEncoding("utf8"),e.on("data",e=>{r+=e}),e.on("end",()=>{try{t(r?JSON.parse(r):{})}catch(e){o(e)}}),e.on("error",o)})}function w(e){if("tools/call"!==e.method)return"";let t=e.params?.name;return"string"==typeof t?t:""}function $(e,t,o){e.writeHead(t,{"content-type":"application/json"}),e.end(JSON.stringify(o))}function v(e){return e.replace(/\/+$/,"")||"/"}function _(){return new r("demo-server").description("启动标准 MCP demo server").addOption(new s("--demo <name>","demo 名称").choices([...i]).default("taxi")).option("--host <host>","监听 host","127.0.0.1").addOption(new s("--port <port>","监听端口;0 表示自动选择空闲端口").default(0).argParser(t)).option("--project-path <path>","dbx 项目路径,demo server URL 会写入该目录下的 .dbx",".").action(async(e,t)=>o(t,t=>y(t,e)))}async function y(e,t){let o=await f({demo:t.demo,host:t.host,port:t.port,log:e.log});a(t.projectPath,{demo:t.demo,pid:process.pid,origin:o.origin,streamableUrl:o.streamableUrl,sseUrl:o.sseUrl,updatedAt:Date.now()}),e.log("standard MCP demo server started"),e.log(`demo: ${t.demo}`),e.log(`streamable_http: ${o.streamableUrl}`),e.log(`sse: ${o.sseUrl}`),e.log(""),e.log("try:"),e.log(`dbx simulator eval --demo ${t.demo} --verbose`),e.log(""),e.log("press Ctrl+C to stop");let r=async()=>{l(t.projectPath,t.demo,o.origin),await o.close().catch(()=>void 0),process.exit(0)};return process.once("SIGINT",r),process.once("SIGTERM",r),await new Promise(()=>void 0),o}export{m as demo_server_namespaceObject};
|
package/dist/dev-config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{isRecord as t}from"./
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import{isRecord as t}from"./8713.js";import"./yaml.js";import{GatewayResponseError as s,verifyYAML as i}from"./app.js";import{resolveProjectLayout as a}from"./project-layout.js";class n extends Error{exitCode=1;logId;details;constructor(e){let t,s;super((s=(t=e.errors[0])?`: ${t.message}`:"",`manifest validation failed for dbx dev${s}`)),this.name="DevManifestValidationError",this.logId=e.log_id;let{manifest:i,...a}=e;this.details=a}}class r extends Error{exitCode=1;logId;details;constructor(e){let t=e.errors[0],s=t?`: ${t.message}`:"";super(`business templates validation failed for dbx dev${s}`),this.name="DevBusinessTemplatesValidationError",this.logId=e.log_id;let{manifest:i,...a}=e;this.details=a}}let o={"dev.manifest.parse_failed":e=>`Manifest 无法解析:${e.path??"未知路径"};将跳过 simulator manifest 并继续启动`,"dev.manifest.invalid_root":e=>`Manifest 内容必须是对象:${e.path??"未知路径"};将跳过 simulator manifest 并继续启动`,"dev.manifest.app_key_missing":e=>`Manifest 未配置 app_key:${e.path??"未知路径"};将由 Kit 从前端工程配置解析 AppID`,"dev.manifest.not_found":e=>`未找到 Manifest 文件:${e.path??"未知路径"};将跳过 simulator manifest 并继续启动`,"dev.manifest.not_ready":()=>"Manifest 未就绪","dev.manifest.validation_failed":e=>`Manifest 校验未通过${e.message?`:${e.message}`:""}`,"dev.manifest.validation_http_error":e=>{var t,s;return`Manifest 校验服务异常${void 0===(t=e.httpStatus)?"":`(HTTP ${t})`}${(s=e.logId)?`,log_id: ${s}`:""}`},"dev.manifest.validation_service_error":e=>{var t;return`${e.message??"Manifest 校验服务返回错误"}${void 0===(t=e.serviceCode)?"":`(错误码 ${t})`}`},"dev.skill.not_found":e=>`未找到 Skill 文件:${e.path??"未知路径"};将跳过 simulator skill 并继续启动`,"dev.mcp.not_configured":()=>"MCP 未配置服务地址","dev.mcp.confirm_connection":()=>"请确认 MCP 已连接"};function l(e){let t=!e.manifestReady||!e.mcpEndpointSet,s=[...e.warnings];if(e.manifestReady||s.some(e=>"manifest"===e.source)||s.push({code:"dev.manifest.not_ready",source:"manifest"}),e.mcpEndpointSet?t&&!s.some(e=>"mcp"===e.source)&&s.push({code:"dev.mcp.confirm_connection",source:"mcp"}):s.push({code:"dev.mcp.not_configured",source:"mcp"}),0!==s.length)return`${t?"暂无法调试":"启动提醒"}:${s.map(d).join(";")}`}function d(e){let t=o[e.code];return t?t(e):e.message?e.message:`${e.source} warning (${e.code})`}let m=e("node:fs"),c=e("node:path"),f=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),p="DOUBAO_SIMULATOR_MCP_ENDPOINT";async function u(e){let s,i=m.readFileSync(e,"utf8");if(!i.trim())throw Error(`business-templates.yaml is empty: ${e}`);try{s=f.qg(i)}catch(s){let t=s instanceof Error?s.message:String(s);throw Error(`invalid business-templates.yaml: ${e}: ${t}`)}if(!t(s))throw Error(`business-templates.yaml content must be an object: ${e}`);return await y(e),{file:e,validated:!0}}async function v(e){let i;try{i=f.qg(m.readFileSync(e,"utf8"))}catch{return{usable:!1,validated:!1,warnings:[{code:"dev.manifest.parse_failed",source:"manifest",path:e}]}}if(!t(i))return{usable:!1,validated:!1,warnings:[{code:"dev.manifest.invalid_root",source:"manifest",path:e}]};let a=[],r="string"==typeof i.app_key?i.app_key.trim():void 0;r||a.push({code:"dev.manifest.app_key_missing",source:"manifest",path:e});let o=i,l=!1;try{let s=await g(e);l=!0,t(s.manifest)&&(o=s.manifest)}catch(e){a.push(function(e){var t;if(e instanceof s)return{code:void 0!==e.httpStatus?"dev.manifest.validation_http_error":"dev.manifest.validation_service_error",source:"manifest",serviceCode:e.serviceCode,httpStatus:e.httpStatus,message:e.serviceMessage,logId:e.logId};let i=e instanceof n?e.details.errors[0]:void 0;return i?{source:"manifest",code:i.code,path:i.path,message:i.message}:{code:"dev.manifest.validation_failed",source:"manifest",message:(t=e)instanceof Error?t.message:String(t)}}(e))}return{...r?{appId:r}:{},manifest:o,usable:!0,validated:l,warnings:a}}function h(e){var t;let s,i=a(e.projectPath),n=E(e.manifest,e.manifestPath),r=n?M(e.projectPath,n):i.manifestPath,o=E(e.skill,e.skillPath),l=o?(t=e.projectPath,s=M(t,o),m.existsSync(s)&&m.statSync(s).isDirectory()?c.join(s,"SKILL.md"):s):i.skillPath,d=[],f=[],p=m.existsSync(r),u=c.join(c.dirname(r),"business-templates.yaml"),v=m.existsSync(u),h=m.existsSync(l);if(p?m.statSync(r).isFile()||d.push(`manifest path must be a file: ${r}`):f.push({code:"dev.manifest.not_found",source:"manifest",path:r}),v&&!m.statSync(u).isFile()&&d.push(`business templates path must be a file: ${u}`),h?m.statSync(l).isFile()||d.push(`skill path must be a file: ${l}`):f.push({code:"dev.skill.not_found",source:"skill",path:l}),d.length>0)throw Error(`dbx dev path check failed:
|
|
2
2
|
${d.join("\n")}`);return{...v?{businessTemplatesPath:u}:{},...p?{simulatorManifestPath:r}:{},...h?{simulatorSkillPath:l}:{},warnings:f}}async function _(e=process.env,t,s,i){let a=t?.trim();if(a)return w(a,"--mcp-endpoint");let n=e[p]?.trim();return n?w(n,p):s?$(s,i):void 0}async function g(e){let t=await i(m.readFileSync(e,"utf8"),"compatible"),s=t.data,a={file:e,valid:!!s?.success,manifest:s?.manifest,errors:b(s?.errors??[]),warnings:b(s?.warnings??[]),log_id:t.log_id??""};if(!a.valid)throw new n(a);return a}async function y(e){let t=await i(m.readFileSync(e,"utf8"),"compatible","business_templates"),s=t.data,a={file:e,valid:!!s?.success,errors:b(s?.errors??[]),warnings:b(s?.warnings??[]),log_id:t.log_id??""};if(!a.valid)throw new r(a);return a}function S(e){try{let t=new URL(e);if("localhost"===t.hostname)return t.hostname="127.0.0.1",t.toString()}catch{}return e}async function $(e,s){let i=s??(await g(e)).manifest,a=t(i)&&t(i.mcp_server)?i.mcp_server:void 0,n=a?.end_point;if("string"==typeof n&&n.trim())return w(n.trim(),"manifest.mcp_server.end_point")}function b(e){return e.map(e=>({code:e.code,path:e.path,message:e.message}))}function w(e,t){try{let t=new URL(e);if("http:"===t.protocol||"https:"===t.protocol)return e}catch{}throw Error(`dbx dev ${t} must be an http(s) URL: ${e}`)}function M(e,t){let s=t.trim();if(!s)throw Error("path must not be empty");return c.resolve(e,s)}function E(...e){for(let t of e){let e=t?.trim();if(e)return e}}export{l as formatFinalDevWarnings,S as normalizeLoopbackUrl,u as prepareDevBusinessTemplates,v as prepareDevManifest,_ as resolveDevMcpEndpoint,h as resolveDevSimulatorPaths,g as validateDevManifest};
|