@doubao-dev/cli 0.0.31 → 0.0.33

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.
Files changed (92) hide show
  1. package/dist/2168.js +16 -16
  2. package/dist/275.js +12 -14
  3. package/dist/2932.js +1 -1
  4. package/dist/318.js +1 -1
  5. package/dist/3974.js +22 -22
  6. package/dist/4525.js +1 -1
  7. package/dist/4880.js +1 -1
  8. package/dist/4931.js +2 -2
  9. package/dist/7410.js +1 -1
  10. package/dist/7417.js +204 -0
  11. package/dist/7417.js.LICENSE.txt +107 -0
  12. package/dist/7945.js +1 -0
  13. package/dist/8079.js +126 -0
  14. package/dist/{1560.js → 9091.js} +2 -2
  15. package/dist/9667.js +78 -0
  16. package/dist/{8891.js.LICENSE.txt → 9667.js.LICENSE.txt} +0 -108
  17. package/dist/@byted-doubao-apps/create.js +1 -1
  18. package/dist/@byted-doubao-apps/kit.js +1 -0
  19. package/dist/@byted-doubao-apps/login.js +1 -1
  20. package/dist/@byted-doubao-apps/login~1.js +1 -1
  21. package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
  22. package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
  23. package/dist/@byted-hdt/cli.js +1 -1
  24. package/dist/@inquirer/select.js +1 -1
  25. package/dist/app.js +1 -1
  26. package/dist/assets/web-sdk-debugger/__doubao_web_sdk_native_modules/applet-bridge-module-core.js +1 -1
  27. package/dist/assets/web-sdk-debugger/index.html +1 -1
  28. package/dist/assets/web-sdk-debugger/static/js/index.d1bb36b355.js +44 -0
  29. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
  30. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
  31. package/dist/build.js +1 -1
  32. package/dist/build~1.js +6 -6
  33. package/dist/check.js +1 -1
  34. package/dist/demo-server.js +1 -1
  35. package/dist/dev-config.js +1 -1
  36. package/dist/dev-shell.js +1 -1
  37. package/dist/dev.js +10 -10
  38. package/dist/devtools.js +1 -1
  39. package/dist/gen-explore.js +1 -1
  40. package/dist/gen-trajectory.js +1 -1
  41. package/dist/init.js +4 -4
  42. package/dist/ink.js +1 -1
  43. package/dist/inquirer.js +1 -0
  44. package/dist/json-file.js +1 -1
  45. package/dist/kit-dev-options.js +1 -1
  46. package/dist/legacy-upload.js +1 -1
  47. package/dist/lepus.js +1 -1
  48. package/dist/ora.js +1 -1
  49. package/dist/project-layout.js +1 -1
  50. package/dist/prompt.js +1 -1
  51. package/dist/prompts.js +1 -1
  52. package/dist/report.js +1 -1
  53. package/dist/run-registry.js +1 -1
  54. package/dist/run.js +44 -44
  55. package/dist/sandbox.js +1 -1
  56. package/dist/scan.js +1 -1
  57. package/dist/sdk.js +63 -188
  58. package/dist/sdk~1.js +50 -50
  59. package/dist/server.js +1 -1
  60. package/dist/skill.js +1 -1
  61. package/dist/skills.js +1 -1
  62. package/dist/skills~1.js +2 -1
  63. package/dist/static/assets/web-view-proxy-bootstrap.js +1 -0
  64. package/dist/static/assets/web-view-proxy-page-client.js +1 -1
  65. package/dist/static/assets/web-view-proxy-service-worker.js +1 -1
  66. package/dist/status~1.js +1 -1
  67. package/dist/stop.js +1 -1
  68. package/dist/sync.js +1 -1
  69. package/dist/templates/README.md +0 -1
  70. package/dist/update.js +1 -1
  71. package/dist/workspace.js +1 -1
  72. package/dist/wrapper.js +1 -0
  73. package/dist/yaml.js +1 -1
  74. package/package.json +2 -2
  75. package/skills/dbx-eval/SKILL.md +15 -7
  76. package/skills/doubao-agentic-service-development/SKILL.md +1 -1
  77. package/skills/doubao-agentic-service-development/references/auth.md +1 -1
  78. package/skills/doubao-agentic-service-development/references/dev-debug.md +3 -3
  79. package/skills/doubao-agentic-service-development/references/frontend/components/map-canvas.md +1 -1
  80. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +0 -6
  81. package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +2 -2
  82. package/skills/doubao-agentic-service-development/references/frontend/widget-templates/props.md +1 -1
  83. package/skills/doubao-agentic-service-development/references/frontend-dev.md +3 -3
  84. package/skills/doubao-agentic-service-development/references/local-debug/overview.md +2 -2
  85. package/skills/doubao-agentic-service-development/references/overview.md +16 -31
  86. package/skills/doubao-agentic-service-development/scripts/workspace.py +6 -89
  87. package/dist/180.js +0 -1
  88. package/dist/8891.js +0 -280
  89. package/dist/9635.js +0 -1
  90. package/dist/assets/web-sdk-debugger/static/js/index.75528d6de7.js +0 -26
  91. package/dist/dbx.js +0 -3
  92. package/dist/skills~2.js +0 -2
@@ -1 +1 @@
1
- import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./9635.js";import{command_Command as o,runCommand as e}from"./2168.js";import{genExplore as a,buildConfig as p}from"./3974.js";let l=t("node:fs"),r=t("node:path");export default function(){return new o("gen-explore").description("Explore all MCP tools systematically, collecting traces and entity pool").option("-c, --config <path>","Path to config YAML file").option("--project-path <path>","dbx project path",".").option("--mcp-url <url>","MCP server URL").option("--app-id <id>","App ID").option("--max-step <n>","Max steps per tool").option("--model <model>","Gateway alias or custom LLM model").option("--base-url <url>","Custom OpenAI-compatible LLM base URL").option("--api-key <key>","Custom LLM API key").option("-o, --output <path>","Output file path").action(async(t,o)=>e(o,async o=>{let e=await p(t);o.targetAppId=e.app.appId,o.log(`Project Eval config: ${(0,r.resolve)(t.projectPath,".dbx","eval.yaml")}`);let i=(0,r.resolve)("./data");(0,l.existsSync)(i)||(0,l.mkdirSync)(i,{recursive:!0});let n=t.output?(0,r.resolve)(t.output):(0,r.join)(i,`explore-${Date.now()}.json`),s=await a(e,{referenceTime:new Date().toISOString(),diagnosticDir:(0,r.resolve)(n,"..")});return(0,l.writeFileSync)(n,JSON.stringify(s,null,2)),o.log("探索结果已保存"),o.log(`Steps: ${s.metadata.total_steps}, Covered: ${s.metadata.tools_covered.length}/${s.metadata.tools_covered.length+s.metadata.tools_not_covered.length}`),s}))};
1
+ import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./7945.js";import{projectEvalConfigPath as o,genExplore as e,buildConfig as a}from"./3974.js";import{command_Command as p,runCommand as r}from"./2168.js";let i=t("node:fs"),l=t("node:path");export default function(){return new p("gen-explore").description("Explore all MCP tools systematically, collecting traces and entity pool").option("-c, --config <path>","Path to config YAML file").option("--project-path <path>","dbx project path",".").option("--mcp-url <url>","MCP server URL").option("--app-id <id>","App ID").option("--max-step <n>","Max steps per tool").option("--model <model>","Gateway alias or custom LLM model").option("--base-url <url>","Custom OpenAI-compatible LLM base URL").option("--api-key <key>","Custom LLM API key").option("-o, --output <path>","Output file path").action(async(t,p)=>r(p,async p=>{let r=await a(t);p.targetAppId=r.app.appId,p.log(`Project Eval config: ${o(t.projectPath)}`);let n=(0,l.resolve)("./data");(0,i.existsSync)(n)||(0,i.mkdirSync)(n,{recursive:!0});let s=t.output?(0,l.resolve)(t.output):(0,l.join)(n,`explore-${Date.now()}.json`),c=await e(r,{referenceTime:new Date().toISOString(),diagnosticDir:(0,l.resolve)(s,"..")});return(0,i.writeFileSync)(s,JSON.stringify(c,null,2)),p.log("探索结果已保存"),p.log(`Steps: ${c.metadata.total_steps}, Covered: ${c.metadata.tools_covered.length}/${c.metadata.tools_covered.length+c.metadata.tools_not_covered.length}`),c}))};
@@ -1 +1 @@
1
- import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./9635.js";import{command_Command as o,runCommand as e}from"./2168.js";import{genTrajectory as r,buildConfig as i}from"./3974.js";let a=t("node:fs"),n=t("node:path");export default function(){return new o("gen-trajectory").description("Generate multi-turn conversation trajectory via UA + Simulator").requiredOption("-i, --intent <text>","User intent / task description").option("-c, --config <path>","Path to config YAML file").option("--project-path <path>","dbx project path",".").option("--mcp-url <url>","MCP server URL").option("--app-id <id>","App ID").option("--gateway <url>","Gateway origin").option("--max-rounds <n>","Max conversation rounds").option("--max-step <n>","Max tool steps per round").option("--model <model>","Gateway alias or custom LLM model").option("--base-url <url>","Custom OpenAI-compatible LLM base URL").option("--api-key <key>","Custom LLM API key").option("--manifest <path>","Manifest YAML path").option("--skill <path>","Skill directory path").option("-o, --output <path>","Output file path").action(async(t,o)=>e(o,async o=>{let e=await i(t);if(!e.app.appId)throw Error("app_id is required");o.targetAppId=e.app.appId,o.log(`Project Eval config: ${(0,n.resolve)(t.projectPath,".dbx","eval.yaml")}`);let p=(0,n.resolve)("./data");(0,a.existsSync)(p)||(0,a.mkdirSync)(p,{recursive:!0});let s=t.output?(0,n.resolve)(t.output):(0,n.join)(p,`trajectory-${Date.now()}.json`);e.dev&&(e.dev.screenshotDir=(0,n.join)((0,n.resolve)(s,".."),"screenshot"));let l=await r(e,t.intent,{referenceTime:new Date().toISOString(),diagnosticDir:(0,n.resolve)(s,"..")});return(0,a.writeFileSync)(s,JSON.stringify(l,null,2)),o.log("评测轨迹已保存"),o.log(`Rounds: ${l.metadata.total_rounds}, Stop: ${l.metadata.stop_reason}`),l}))};
1
+ import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./7945.js";import{projectEvalConfigPath as o,genTrajectory as e,buildConfig as i}from"./3974.js";import{command_Command as r,runCommand as n}from"./2168.js";let a=t("node:fs"),p=t("node:path");export default function(){return new r("gen-trajectory").description("Generate multi-turn conversation trajectory via UA + Simulator").requiredOption("-i, --intent <text>","User intent / task description").option("-c, --config <path>","Path to config YAML file").option("--project-path <path>","dbx project path",".").option("--mcp-url <url>","MCP server URL").option("--app-id <id>","App ID").option("--gateway <url>","Gateway origin").option("--max-rounds <n>","Max conversation rounds").option("--max-step <n>","Max tool steps per round").option("--model <model>","Gateway alias or custom LLM model").option("--base-url <url>","Custom OpenAI-compatible LLM base URL").option("--api-key <key>","Custom LLM API key").option("--manifest <path>","Manifest YAML path").option("--skill <path>","Skill directory path").option("-o, --output <path>","Output file path").action(async(t,r)=>n(r,async r=>{let n=await i(t);if(!n.app.appId)throw Error("app_id is required");r.targetAppId=n.app.appId,r.log(`Project Eval config: ${o(t.projectPath)}`);let s=(0,p.resolve)("./data");(0,a.existsSync)(s)||(0,a.mkdirSync)(s,{recursive:!0});let l=t.output?(0,p.resolve)(t.output):(0,p.join)(s,`trajectory-${Date.now()}.json`);n.dev&&(n.dev.screenshotDir=(0,p.join)((0,p.resolve)(l,".."),"screenshot"));let u=await e(n,t.intent,{referenceTime:new Date().toISOString(),diagnosticDir:(0,p.resolve)(l,"..")});return(0,a.writeFileSync)(l,JSON.stringify(u,null,2)),r.log("评测轨迹已保存"),r.log(`Rounds: ${u.metadata.total_rounds}, Stop: ${u.metadata.stop_reason}`),u}))};
package/dist/init.js CHANGED
@@ -1,5 +1,5 @@
1
- import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./9635.js";import"./ora.js";import"./yaml.js";import{auth_login as t,collectChoiceValues as r,version_version as i,command_Command as n,option_Option as s,types_TokenStatus as o,formatPollStatus as a,runCommand as l,getAuthStatus as p,execa as d}from"./2168.js";import{AGENTIC_SERVICE_SKILL_NAME as c,AGENTIC_SERVICE_DISPLAY_NAME as u,DEFAULT_FRONTEND_DIRECTORY as h}from"./app.js";import{source as f}from"./1560.js";import{resolveProjectLayout as m}from"./project-layout.js";import{writeDbxConfig as g,updateDbxConfigSkills as _}from"./dbx.js";import{INIT_AGENT_IDS as y,selectInitAgents as b,selectGitInitialization as S,inputProjectDirectory as w}from"./prompts.js";import{fetchSandboxAppCredentials as v}from"./sandbox.js";import{installSkills as x}from"./skills~2.js";import{openUrlInBrowser as k}from"./browser.js";import{SUPPORTED_AGENTS as j}from"./skills~1.js";var $={};e.r($),e.d($,{default:()=>en});let E=e("node:fs");var A=e.n(E);let P=e("node:path");var C=e.n(P);let R=new Set(["node_modules",".git"]);async function N(e){var t;let r=e.appId.trim();if(!r)throw Error("frontend scaffold requires a sandbox AppID");let i=e.directory?.trim()||".",n=C().resolve(e.projectPath),s=C().resolve(n,i),o=(t=s,C().basename(t)||h),a=!!(e.overwriteExisting&&(0,E.existsSync)(s));a&&s!==n&&(e.onStatus?.("clearing_existing_directory"),function(e){if(!(0,E.statSync)(e).isDirectory())throw Error(`frontend scaffold target is not a directory: ${e}`);for(let t of(0,E.readdirSync)(e))R.has(t)||(0,E.rmSync)(C().join(e,t),{recursive:!0,force:!0});(0,E.mkdirSync)(e,{recursive:!0})}(s)),e.onStatus?.("creating_scaffold");let{create:l}=await import("./@byted-doubao-apps/create.js");return await l({template:"starter",projectDir:s,public:!0,appId:r,name:u,packageName:o,overwrite:!0,git:e.initializeGit??!1,login:!0}),{directory:i,path:s,app_id:r,template:"starter",package_name:o,overwritten:a}}let K=`这是一个豆包智能服务工程,请结合 ${c} Skill 进行开发`,I=e("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js");var U=e.n(I);class M{options;spinner;constructor(e){this.options=e}header(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold.cyan(e):`== ${e} ==`;this.options.log(t)}card(e,t){if(!this.options.enabled)return;let r=Math.max(...t.map(([e])=>e.length),0),i=[` ${e} `,...t.map(([e,t])=>` ${e.padEnd(r)} ${t} `)],n=Math.max(...i.map(e=>e.length)),s=`+${"-".repeat(n)}+`;for(let e of[s,...i.map((e,t)=>{let r=`${e}${" ".repeat(n-e.length)}`;return`|${0===t&&this.options.useSpinner?f.bold(r):r}|`}),s])this.options.log(this.options.useSpinner?f.cyan(e):e)}section(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold(e):e;this.options.log(t)}blank(){this.options.enabled&&this.options.log("")}info(e,t){this.options.enabled&&this.options.log(function(e,t,r){if(void 0===t)return` ${e}`;let i=r?f.cyan(e):e;return` ${i}: ${t}`}(e,t,this.options.useSpinner))}note(e){this.options.enabled&&this.options.log(` - ${e}`)}warn(e){this.options.enabled&&(this.stopActive(),this.options.warn(e))}startStep(e){if(this.options.enabled){if(this.stopActive(),this.options.useSpinner){this.spinner=U()({text:e,color:"cyan",stream:process.stderr}).start();return}this.options.log(T("run",e,this.options.useSpinner))}}updateStep(e){if(this.options.enabled){if(!this.spinner)return void this.options.log(T("run",e,this.options.useSpinner));this.spinner.text=e}}succeedStep(e){if(this.options.enabled){if(this.spinner){this.spinner.succeed(e),this.spinner=void 0;return}this.options.log(T("ok",e,this.options.useSpinner))}}warnStep(e){if(this.options.enabled){if(this.spinner){this.spinner.warn(e),this.spinner=void 0;return}this.options.warn(T("warn",e,this.options.useSpinner))}}failStep(e){if(this.options.enabled){if(this.spinner){this.spinner.fail(e),this.spinner=void 0;return}this.options.warn(T("fail",e,this.options.useSpinner))}}stopActive(){this.spinner&&(this.spinner.stop(),this.spinner=void 0)}}function O(){return!!(process.stderr.isTTY&&!process.env.CI)}function T(e,t,r){let i=`[${e}]`;if(!r)return` ${i} ${t}`;let n="ok"===e?f.green:"warn"===e?f.yellow:"fail"===e?f.red:f.cyan;return` ${n(i)} ${t}`}let D=e("node:util"),V=["@swc/core","@speedy-js/esbuild","core-js","crc64-ecma182.js","esbuild"],q=["@byted-lynx/js-check-"],H={commandVersion:async e=>(await d(e,["--version"],{env:process.env,stdio:["ignore","pipe","pipe"]})).stdout.trim(),pnpmInstall:async(e,t={})=>W(["install"],e,{streamOutput:t.streamOutput??!1}),pnpmApproveBuilds:async(e,t)=>W("all"===t?["approve-builds","--all"]:["approve-builds",...t],e,{streamOutput:!1})};async function z(e=H){try{return{version:await e.commandVersion("npm")}}catch{throw Error("npm not found in PATH. dbx init requires npm. Please install Node.js/npm and retry.")}}async function G(e=H){try{return{version:await e.commandVersion("pnpm")}}catch{throw Error("pnpm not found in PATH. dbx init requires pnpm. Install pnpm and retry.")}}async function F(e,t={}){let r=t.runner??H,i=t.autoApproveBuilds??"known",n=0;try{return n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!1,approved_builds:[]}}catch(a){let s;if(!1===i||!((s=Q(a)).includes("ERR_PNPM_IGNORED_BUILDS")||s.includes("Ignored build scripts:")))return Y(e,n,a);let o=function(e,t){var r;let i;if(t.pnpmVersion&&!L(t.pnpmVersion,"10.1.0"))return null;let n=(r=Q(e),(i=(0,D.stripVTControlCharacters)(r).match(/Ignored build scripts:\s*([\s\S]*?)(?:\n\s*\n|\nRun\s+"pnpm approve-builds"|$)/))?i[1].split(",").map(e=>(function(e){if(!e)return null;if(e.startsWith("@")){let t=e.indexOf("@",1);return t>0?e.slice(0,t):e}let t=e.lastIndexOf("@");return t>0?e.slice(0,t):e})(e.trim().replace(/[.。]$/,""))).filter(e=>!!e):[]),s="all-pending"===t.mode?n:n.filter(B);return s.length>0?[...new Set(s)]:"all-pending"===t.mode&&t.pnpmVersion&&L(t.pnpmVersion,"10.32.0")?"all":null}(a,{mode:i,pnpmVersion:t.pnpmVersion});if(!o)return Y(e,n,a);try{return await r.pnpmApproveBuilds(e,o),n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!0,approved_builds:"all"===o?["*"]:[...o]}}catch(t){return Y(e,n,t,{approvedBuilds:"all"===o?["*"]:[...o]})}}}function B(e){return V.includes(e)||q.some(t=>e.startsWith(t))}function L(e,t){let r=J(e),i=J(t);if(!r||!i)return!1;for(let e=0;e<r.length&&!(r[e]>i[e]);e+=1)if(r[e]<i[e])return!1;return!0}function J(e){let t=e.trim().match(/^v?(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Y(e,t,r,i={}){return{dependencies_installed:!1,install_attempts:t,recovered_from_ignored_builds:!1,approved_builds:i.approvedBuilds??[],install_warning:`pnpm install did not complete in ${e}: ${X(r)}`}}async function W(e,t,r){var i;let n=d("pnpm",[...e],{cwd:t,env:process.env,stdio:["ignore","pipe","pipe"],all:!0});return r.streamOutput&&n.all?.pipe(process.stderr),{stdout:(i=await n).stdout??"",stderr:i.stderr??"",all:i.all??[i.stdout,i.stderr].filter(Boolean).join("\n")}}function X(e){if(e&&"object"==typeof e&&"shortMessage"in e){let t=e.shortMessage;if("string"==typeof t&&t.length>0)return t}return e instanceof Error&&e.message?e.message:String(e)}function Q(e){let t=[X(e)];return e&&"object"==typeof e&&("string"==typeof e.all&&t.push(e.all),"string"==typeof e.stdout&&t.push(e.stdout),"string"==typeof e.stderr&&t.push(e.stderr)),t.filter(Boolean).join("\n")}let Z=e("node:url"),ee=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),et="__DBX_APP_KEY__";function er(e){let t=C().dirname((0,Z.fileURLToPath)(import.meta.url)),r=C().join(t,"templates",e);if(!A().existsSync(r))throw Error(`dbx init template not found: ${e}`);return A().readFileSync(r,"utf8")}let ei="项目文件夹名";function en(){return new n("init").description("创建一个新的 dbx 项目").argument("[directory]","要创建的新项目目录名").option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).addOption(new s("--agent <agent>","要初始化的 Agent,可重复传入;universal 会自动包含").default([]).argParser(r(y))).option("--no-install-deps","创建前端脚手架后不安装依赖").option("--git","在项目根目录初始化 Git 仓库").option("--schema","输出 dbx init 的机器可读参数契约;不执行初始化",!1).addHelpText("after",`
1
+ import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./7945.js";import"./ora.js";import"./yaml.js";import{auth_login as t,collectChoiceValues as r,version_version as i,command_Command as n,option_Option as s,types_TokenStatus as o,formatPollStatus as a,runCommand as p,getAuthStatus as l,execa as d}from"./2168.js";import{AGENTIC_SERVICE_SKILL_NAME as c,AGENTIC_SERVICE_DISPLAY_NAME as u,DEFAULT_FRONTEND_DIRECTORY as h}from"./app.js";import{source as f}from"./9091.js";import{resolveProjectLayout as m}from"./project-layout.js";import{INIT_AGENT_IDS as g,selectInitAgents as _,selectGitInitialization as y,inputProjectDirectory as w}from"./prompts.js";import{fetchSandboxAppCredentials as S}from"./sandbox.js";import{installSkills as b,SUPPORTED_AGENTS as v}from"./skills~1.js";import{openUrlInBrowser as x}from"./browser.js";var k={};e.r(k),e.d(k,{default:()=>er});let j=e("node:fs");var $=e.n(j);let E=e("node:path");var A=e.n(E);let P=new Set(["node_modules",".git"]);async function R(e){var t;let r=e.appId.trim();if(!r)throw Error("frontend scaffold requires a sandbox AppID");let i=e.directory?.trim()||".",n=A().resolve(e.projectPath),s=A().resolve(n,i),o=(t=s,A().basename(t)||h),a=!!(e.overwriteExisting&&(0,j.existsSync)(s));a&&s!==n&&(e.onStatus?.("clearing_existing_directory"),function(e){if(!(0,j.statSync)(e).isDirectory())throw Error(`frontend scaffold target is not a directory: ${e}`);for(let t of(0,j.readdirSync)(e))P.has(t)||(0,j.rmSync)(A().join(e,t),{recursive:!0,force:!0});(0,j.mkdirSync)(e,{recursive:!0})}(s)),e.onStatus?.("creating_scaffold");let{create:p}=await import("./@byted-doubao-apps/create.js");return await p({template:"starter",projectDir:s,public:!0,appId:r,name:u,packageName:o,overwrite:!0,git:e.initializeGit??!1,login:!0}),{directory:i,path:s,app_id:r,template:"starter",package_name:o,overwritten:a}}let C=`这是一个豆包智能服务工程,请结合 ${c} Skill 进行开发`,N=e("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js");var I=e.n(N);class K{options;spinner;constructor(e){this.options=e}header(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold.cyan(e):`== ${e} ==`;this.options.log(t)}card(e,t){if(!this.options.enabled)return;let r=Math.max(...t.map(([e])=>e.length),0),i=[` ${e} `,...t.map(([e,t])=>` ${e.padEnd(r)} ${t} `)],n=Math.max(...i.map(e=>e.length)),s=`+${"-".repeat(n)}+`;for(let e of[s,...i.map((e,t)=>{let r=`${e}${" ".repeat(n-e.length)}`;return`|${0===t&&this.options.useSpinner?f.bold(r):r}|`}),s])this.options.log(this.options.useSpinner?f.cyan(e):e)}section(e){if(!this.options.enabled)return;let t=this.options.useSpinner?f.bold(e):e;this.options.log(t)}blank(){this.options.enabled&&this.options.log("")}info(e,t){this.options.enabled&&this.options.log(function(e,t,r){if(void 0===t)return` ${e}`;let i=r?f.cyan(e):e;return` ${i}: ${t}`}(e,t,this.options.useSpinner))}note(e){this.options.enabled&&this.options.log(` - ${e}`)}warn(e){this.options.enabled&&(this.stopActive(),this.options.warn(e))}startStep(e){if(this.options.enabled){if(this.stopActive(),this.options.useSpinner){this.spinner=I()({text:e,color:"cyan",stream:process.stderr}).start();return}this.options.log(M("run",e,this.options.useSpinner))}}updateStep(e){if(this.options.enabled){if(!this.spinner)return void this.options.log(M("run",e,this.options.useSpinner));this.spinner.text=e}}succeedStep(e){if(this.options.enabled){if(this.spinner){this.spinner.succeed(e),this.spinner=void 0;return}this.options.log(M("ok",e,this.options.useSpinner))}}warnStep(e){if(this.options.enabled){if(this.spinner){this.spinner.warn(e),this.spinner=void 0;return}this.options.warn(M("warn",e,this.options.useSpinner))}}failStep(e){if(this.options.enabled){if(this.spinner){this.spinner.fail(e),this.spinner=void 0;return}this.options.warn(M("fail",e,this.options.useSpinner))}}stopActive(){this.spinner&&(this.spinner.stop(),this.spinner=void 0)}}function U(){return!!(process.stderr.isTTY&&!process.env.CI)}function M(e,t,r){let i=`[${e}]`;if(!r)return` ${i} ${t}`;let n="ok"===e?f.green:"warn"===e?f.yellow:"fail"===e?f.red:f.cyan;return` ${n(i)} ${t}`}let O=e("node:util"),T=["@swc/core","@speedy-js/esbuild","core-js","crc64-ecma182.js","esbuild"],q=["@byted-lynx/js-check-"],D={commandVersion:async e=>(await d(e,["--version"],{env:process.env,stdio:["ignore","pipe","pipe"]})).stdout.trim(),pnpmInstall:async(e,t={})=>J(["install"],e,{streamOutput:t.streamOutput??!1}),pnpmApproveBuilds:async(e,t)=>J("all"===t?["approve-builds","--all"]:["approve-builds",...t],e,{streamOutput:!1})};async function z(e=D){try{return{version:await e.commandVersion("npm")}}catch{throw Error("npm not found in PATH. dbx init requires npm. Please install Node.js/npm and retry.")}}async function H(e=D){try{return{version:await e.commandVersion("pnpm")}}catch{throw Error("pnpm not found in PATH. dbx init requires pnpm. Install pnpm and retry.")}}async function V(e,t={}){let r=t.runner??D,i=t.autoApproveBuilds??"known",n=0;try{return n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!1,approved_builds:[]}}catch(a){let s;if(!1===i||!((s=W(a)).includes("ERR_PNPM_IGNORED_BUILDS")||s.includes("Ignored build scripts:")))return L(e,n,a);let o=function(e,t){var r;let i;if(t.pnpmVersion&&!F(t.pnpmVersion,"10.1.0"))return null;let n=(r=W(e),(i=(0,O.stripVTControlCharacters)(r).match(/Ignored build scripts:\s*([\s\S]*?)(?:\n\s*\n|\nRun\s+"pnpm approve-builds"|$)/))?i[1].split(",").map(e=>(function(e){if(!e)return null;if(e.startsWith("@")){let t=e.indexOf("@",1);return t>0?e.slice(0,t):e}let t=e.lastIndexOf("@");return t>0?e.slice(0,t):e})(e.trim().replace(/[.。]$/,""))).filter(e=>!!e):[]),s="all-pending"===t.mode?n:n.filter(G);return s.length>0?[...new Set(s)]:"all-pending"===t.mode&&t.pnpmVersion&&F(t.pnpmVersion,"10.32.0")?"all":null}(a,{mode:i,pnpmVersion:t.pnpmVersion});if(!o)return L(e,n,a);try{return await r.pnpmApproveBuilds(e,o),n+=1,await r.pnpmInstall(e,{streamOutput:t.streamOutput}),{dependencies_installed:!0,install_attempts:n,recovered_from_ignored_builds:!0,approved_builds:"all"===o?["*"]:[...o]}}catch(t){return L(e,n,t,{approvedBuilds:"all"===o?["*"]:[...o]})}}}function G(e){return T.includes(e)||q.some(t=>e.startsWith(t))}function F(e,t){let r=B(e),i=B(t);if(!r||!i)return!1;for(let e=0;e<r.length&&!(r[e]>i[e]);e+=1)if(r[e]<i[e])return!1;return!0}function B(e){let t=e.trim().match(/^v?(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function L(e,t,r,i={}){return{dependencies_installed:!1,install_attempts:t,recovered_from_ignored_builds:!1,approved_builds:i.approvedBuilds??[],install_warning:`pnpm install did not complete in ${e}: ${Y(r)}`}}async function J(e,t,r){var i;let n=d("pnpm",[...e],{cwd:t,env:process.env,stdio:["ignore","pipe","pipe"],all:!0});return r.streamOutput&&n.all?.pipe(process.stderr),{stdout:(i=await n).stdout??"",stderr:i.stderr??"",all:i.all??[i.stdout,i.stderr].filter(Boolean).join("\n")}}function Y(e){if(e&&"object"==typeof e&&"shortMessage"in e){let t=e.shortMessage;if("string"==typeof t&&t.length>0)return t}return e instanceof Error&&e.message?e.message:String(e)}function W(e){let t=[Y(e)];return e&&"object"==typeof e&&("string"==typeof e.all&&t.push(e.all),"string"==typeof e.stdout&&t.push(e.stdout),"string"==typeof e.stderr&&t.push(e.stderr)),t.filter(Boolean).join("\n")}let X=e("node:url"),Q=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),Z="__DBX_APP_KEY__";function ee(e){let t=A().dirname((0,X.fileURLToPath)(import.meta.url)),r=A().join(t,"templates",e);if(!$().existsSync(r))throw Error(`dbx init template not found: ${e}`);return $().readFileSync(r,"utf8")}let et="项目文件夹名";function er(){return new n("init").description("创建一个新的 dbx 项目").argument("[directory]","要创建的新项目目录名").option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).addOption(new s("--agent <agent>","要初始化的 Agent,可重复传入;universal 会自动包含").default([]).argParser(r(g))).option("--no-install-deps","创建前端脚手架后不安装依赖").option("--git","在项目根目录初始化 Git 仓库").option("--schema","输出 dbx init 的机器可读参数契约;不执行初始化",!1).addHelpText("after",`
2
2
  Examples:
3
- ${ea().map(e=>` ${e}`).join("\n")}`).action(async(e,t,r)=>l(r,r=>new es(r).run(e,t)))}class es{context;initReporter;constructor(e){this.context=e}jsonEnabled(){return this.context.json}log(e){this.context.log(e)}warn(e){this.context.warn(e)}async run(e,t){var r,n,s,o,a,l,p,d,c,u,h;let f,y,b,S,w,v,k,$;if(t.schema)return this.emitSchema();let P=!process.env.DBX_PROMPT_DISABLED&&!this.context.json&&process.stdin.isTTY&&process.stderr.isTTY,R=await eo(e,P);!function(e){try{(0,E.lstatSync)(e)}catch(e){var t;if("object"==typeof(t=e)&&null!==t&&"code"in t&&"ENOENT"===t.code)return;throw e}throw Error(`dbx init target directory already exists: ${e}. Choose a new directory name.`)}(R);let N={authMode:P?"login":"require",installFrontendDependencies:t.installDeps,yes:t.yes},I=await this.collectInitPlan(t,P);this.initReporter=new M({enabled:!this.jsonEnabled(),useSpinner:O(),log:e=>this.log(e),warn:e=>this.warn(e)}),this.jsonEnabled()||this.emitInitStart(R,I);try{let e;f=await this.ensureRequiredRuntime(),y=await this.ensureAuthenticated(N.authMode),b=await this.executeFrontendProjectPlan(R,I.frontend,N.installFrontendDependencies),this.reporter().startStep("project artifacts: ensuring manifest.yaml and runtime Skill layout"),S=function(e,t={}){let r=m(e,{kind:t.layout}),i=r.root,n=r.manifestPath,s=C().join(r.skillDirectory,"SKILL.md"),o=r.skillResolution;if("invalid"===o.layout)throw Error(o.error);let a={app_key:"",layout:r.kind,manifest_path:n,skill_path:s,created:[],preserved:[]};return A().existsSync(n)?(function(e,t){if(!A().statSync(e).isFile())throw Error(`project artifact path must be a file: ${t}`)}(n,"manifest.yaml"),a.app_key=function(e){var t;let r=ee.qg(A().readFileSync(e,"utf8")),i=(t=r,"object"!=typeof t||null===t||Array.isArray(t))?void 0:r.app_key;if("string"==typeof i&&i.trim())return i.trim();throw Error(`manifest app_key is required: ${e}`)}(n),a.preserved.push(C().relative(i,n))):(a.app_key=t.appKey?.trim()||"db_app_xxxxxx",A().mkdirSync(C().dirname(n),{recursive:!0}),A().writeFileSync(n,function(e){let t=er("manifest.yaml");if(2!==t.split(et).length)throw Error(`dbx init manifest template must contain exactly one ${et}`);return t.replace(et,JSON.stringify(e))}(a.app_key),"utf8"),a.created.push(C().relative(i,n))),"resolved"===o.layout?a.preserved.push(...o.entries.map(e=>C().relative(i,e.absolutePath))):(A().mkdirSync(C().dirname(s),{recursive:!0}),A().writeFileSync(s,er(C().join("skill","SKILL.md")),"utf8"),a.created.push(C().relative(i,s))),a}(R,{appKey:b.scaffold.app_id,layout:"root"}),this.reporter().succeedStep(`project artifacts: created ${S.created.length}, preserved ${S.preserved.length}`),e=C().resolve(R,"README.md"),A().writeFileSync(e,er("README.md"),"utf8"),this.reporter().startStep("project files: writing .dbx/config.json and AGENTS.md"),g(R,I.agents,{frontendDirectory:b.directory}),w=function(e){let t=C().resolve(e,"AGENTS.md");if(!(0,E.existsSync)(t))return(0,E.writeFileSync)(t,`${K}
4
- `,"utf8"),{path:t,created:!0,updated:!1,already_present:!1};let r=(0,E.readFileSync)(t,"utf8");if(r.includes(K))return{path:t,created:!1,updated:!1,already_present:!0};let i=0===r.length||r.endsWith("\n")?"":"\n";return(0,E.writeFileSync)(t,`${r}${i}${K}
5
- `,"utf8"),{path:t,created:!1,updated:!0,already_present:!1}}(R),this.reporter().succeedStep("project files: wrote .dbx/config.json and AGENTS.md"),this.reporter().startStep("skills: syncing bundled skills"),v=await x({agents:I.agents,cwd:R,cliVersion:i,yes:N.yes}),this.reporter().succeedStep(`skills: synced ${v.skillNames.length} bundled skill(s)`)}catch(e){throw this.reporter().failStep("dbx init failed"),e}_(R,v.skillNames,{source:"bundled",skillsVersion:v.skillsVersion,cliVersion:i});let U={success:!0,project_path:R,config_path:`${R.replace(/\/+$/,"")}/.dbx/config.json`,agent_response:(r=R,n=I,s=b,o=w,a=v.skillNames,{tone:"concise_user_facing",summary:($=((k=(l=n.agents).filter(e=>"universal"!==e)).length>0?k:l).join(", "),`dbx 初始化完成,已为 ${$} 创建完整项目并配置内置 Skills。`),changes:(p=r,d=n,c=s,u=o,h=a,{config:`${p.replace(/\/+$/,"")}/.dbx/config.json`,agent_md:u.path,frontend:{directory:c.directory,description:"已在项目根目录创建前端工程"},skills:{names:h,targets:d.agents.map(e=>{let t=j.find(t=>t.id===e);return{id:e,skills_path:t?.projectPath??""}}).map(e=>({agent:e.id,path:`${p.replace(/\/+$/,"")}/${e.skills_path}`}))}}),notes:el(s),response_guidance:["Lead with the outcome, not the command line.","Group generated paths by purpose instead of listing every raw file when that would be noisy.","Do not add unrelated git status notes unless the user asked or the git state changes the next step."]}),auth:y,environment:f,agents:I.agents,frontend:b,project_artifacts:S,agent_md:w,skills:v.skillNames,skills_version:v.skillsVersion,bundled_root:v.bundledRoot,hosted_root:v.hostedRoot};return this.jsonEnabled()||this.emitInitSuccess(R,b),U}emitSchema(){let e={command:"dbx init",description:"Create a new dbx project with a frontend scaffold, project artifacts, AGENTS.md guidance, and bundled skills.",risk:"write",writes_project_files:!0,requires_interactive_confirmation_to_apply:!1,requires_complete_user_decisions_to_apply:!0,json_supported:!0,user_decisions:{must_ask_user_before_choosing_flags:!0,preferred_user_prompt_style:"Ask a short product question with choices first; keep raw CLI flags as secondary detail only.",project_directory:`${ei}(默认:my-app)`,agent:"Ask which agent targets to install for, for example codex, trae, or claude-code. Universal is always included.",git:"Ask whether to initialize a Git repository at the project root. The recommended default is true."},agent_guidance:{recommended_flow:["Run `dbx init --schema --json` if you need the command contract.","For any uncertain user_decisions item, ask the user with the provided prompt and choices instead of exposing raw flags first.","Use `dbx init <directory> --agent <id> --json` to create and inspect a new project."],cautions:["The directory argument must name a new directory; dbx init never initializes the current directory.","--yes only allows replacing existing Skill directories; it does not choose unspecified init parameters.","Use --no-install-deps only when dependency installation should be deferred."]},flags:{path:{kind:"argument",type:"string",required_for_non_interactive_plan:!0,default:"my-app",description:"New project directory name under the current directory."},agent:{type:"array",repeatable:!0,options:[...y],auto_includes:["universal"],description:"Agent skill targets to initialize."},"no-install-deps":{type:"boolean",default:!1,description:"Skip dependency installation for the generated frontend project."},git:{type:"boolean",default:!1,description:"Initialize a Git repository at the project root."},yes:{type:"boolean",description:"Allows replacing existing non-symlink Skill directories only. Does not choose unspecified init parameters."},json:{type:"boolean",description:"Output machine-readable JSON."}},examples:ea()};return this.context.log(JSON.stringify(e,null,2)),e}reporter(){return this.initReporter||(this.initReporter=new M({enabled:!this.jsonEnabled(),useSpinner:O(),log:e=>this.log(e),warn:e=>this.warn(e)})),this.initReporter}async collectInitPlan(e,t){let r=function(e){var t;let r,i=function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"!=typeof t?[]:t.split(",").map(e=>e.trim()).filter(Boolean)}(e);if(0===i.length)return;let n=new Set(y),s=i.filter(e=>!n.has(e));if(s.length>0)throw Error(`Unsupported init agent(s): ${s.join(", ")}. Supported agents: ${y.join(", ")}.`);return t=["universal",...i],r=new Set,t.filter(e=>!r.has(e)&&(r.add(e),!0))}(e.agent);return r||t||ep("dbx init needs --agent <id> when prompts are disabled or unavailable.",{code:"missing_init_decision",missing_flags:["--agent"],user_prompt:"要为哪个 Agent 安装 dbx Skills?",choices:y.filter(e=>"universal"!==e).map(e=>({value:e,label:e})),examples:ea()}),{agents:r??await b(),frontend:{directory:".",initializeGit:e.git||!!t&&await S()}}}emitInitStart(e,t){let r=this.reporter();r.header("Initializing dbx project"),r.section("Plan"),r.info("project",ec(e)),r.info("agents",t.agents.join(", ")),r.info("git",t.frontend.initializeGit?"initialize at project root":"skip"),r.blank(),r.section("Progress")}emitInitSuccess(e,t){let r=this.reporter();r.blank(),r.header("dbx project initialized"),r.info("config",`${ec(e)}/.dbx/config.json`);let i=el(t);if(i.length>0)for(let e of(r.blank(),r.info("notes"),i))r.note(e)}async ensureRequiredRuntime(){this.reporter().startStep("runtime: checking npm");try{let e=await z();return this.reporter().succeedStep(`runtime: npm ${e.version}`),{npm:e}}catch(e){throw this.reporter().failStep("runtime: npm check failed"),e}}async ensureAuthenticated(e){let r,i;this.reporter().startStep("auth: checking login status");try{r=await p({fetch:async(e,t)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),5e3);try{return await fetch(e,{...t,signal:r.signal})}finally{clearTimeout(i)}}})}catch(e){this.reporter().warnStep(`auth: login status check failed, starting login: ${ed(e)}`),r={loggedIn:!1,tokenPath:""}}if(r.loggedIn)return this.reporter().succeedStep("auth: already logged in"),{already_logged_in:!0,login_performed:!1,uid:r.uid,expires_at:r.expiresAt,base_url:r.baseUrl};if("require"===e)throw this.reporter().failStep("auth: login required"),Error("dbx init requires an existing login when prompts are disabled or JSON output is enabled. Run `dbx auth login` first.");this.reporter().succeedStep("auth: not logged in, starting login"),this.reporter().startStep("auth: waiting for login");let n=await t({onVerification:e=>{this.jsonEnabled()||(this.reporter().info("auth visit",e.verificationUrl),this.reporter().info("auth expires in",`${e.expiresIn} seconds`),this.openVerificationUrl(e.verificationUrl),this.reporter().updateStep(`auth: ${a(o.Pending)}`),i=o.Pending)},onPoll:e=>{this.context.json||e.status!==i&&(i=e.status,this.reporter().updateStep(`auth: ${a(e.status)}`))}});return this.reporter().succeedStep(`auth: logged in, token expires at ${new Date(1e3*n.expiresAt).toISOString()}`),{already_logged_in:!1,login_performed:!0,uid:n.uid,expires_at:n.expiresAt,base_url:n.baseUrl,token_path:n.tokenPath}}async openVerificationUrl(e){this.reporter().info("auth","opening link in browser");try{await k(e)}catch(e){this.reporter().warn(`failed to open browser: ${ed(e)}`)}}async executeFrontendProjectPlan(e,t,r){let i,n;this.reporter().startStep("sandbox app: fetching AppID");let s=await v(e);this.context.targetAppId=s.sandbox_app_id,this.reporter().succeedStep(`sandbox app: ready (${s.sandbox_app_id})`),this.reporter().startStep("frontend: creating scaffold in the new project root");let o=await N({projectPath:e,directory:t.directory,appId:s.sandbox_app_id,initializeGit:t.initializeGit,onStatus:e=>{"clearing_existing_directory"===e?this.reporter().updateStep("frontend: clearing existing scaffold files (keeping node_modules cache)"):this.reporter().updateStep("frontend: writing scaffold files in the new project root")}});if(this.reporter().succeedStep("frontend: scaffold ready in the new project root"),t.initializeGit&&(this.reporter().startStep("git: checking repository initialization"),(0,E.existsSync)((0,P.resolve)(o.path,".git"))?this.reporter().succeedStep("git: repository initialized at project root"):this.reporter().warnStep("git: repository initialization was requested but .git was not created")),!r)return{directory:t.directory,scaffold:o,package_manager:{dependencies:{dependencies_installed:!1,install_attempts:0,recovered_from_ignored_builds:!1,approved_builds:[],install_warning:"skipped by --no-install-deps"}}};this.reporter().startStep("dependencies: checking pnpm");try{i=await G()}catch(e){return n={dependencies_installed:!1,install_attempts:0,recovered_from_ignored_builds:!1,approved_builds:[],install_warning:ed(e)},this.reporter().warnStep(`frontend dependencies were not installed: ${n.install_warning}`),{directory:t.directory,scaffold:o,package_manager:{dependencies:n}}}if(this.reporter().startStep(`dependencies: installing frontend packages with pnpm ${i.version}`),(n=await F(o.path,{pnpmVersion:i.version,autoApproveBuilds:"all-pending",streamOutput:this.context.debug})).dependencies_installed?this.reporter().succeedStep(`dependencies: installed frontend packages with pnpm ${i.version}`):this.reporter().warnStep(`dependencies: install incomplete (${n.install_warning??"unknown reason"})`),!this.jsonEnabled()&&n.recovered_from_ignored_builds){let e=n.approved_builds.includes("*")?"all pending dependency build scripts":`${n.approved_builds.length} dependency build script package(s)`;this.reporter().warn(`pnpm blocked dependency build scripts; approved ${e} and retried install`)}return{directory:t.directory,scaffold:o,package_manager:{pnpm:i,dependencies:n}}}}async function eo(e,t){let r=e?.trim()||(t?await w():"");return r||ep("dbx init requires a new project directory when prompts are disabled or unavailable.",{code:"missing_project_directory",missing_flags:["directory"],user_prompt:ei,examples:ea()}),function(e){let t=e.trim().replace(/\\/g,"/").replace(/\/+$/,"");if(!t||"."===t)throw Error("dbx init requires a new project directory name.");if((0,P.isAbsolute)(t)||P.win32.isAbsolute(t))throw Error("dbx init project directory must be relative.");if(t.split("/").includes(".."))throw Error("dbx init project directory must stay inside the current directory.");return(0,P.resolve)(process.cwd(),t)}(r)}function ea(){return["dbx init my-app --agent codex --json","dbx init my-app --agent codex --no-install-deps --json"]}function el(e){let t=[];return e.package_manager?.dependencies.install_warning&&t.push(`前端依赖未完整安装:${e.package_manager.dependencies.install_warning}`),t}function ep(e,t){let r=Error(e);throw r.details=t,r}function ed(e){return e instanceof Error&&"AbortError"===e.name?"timed out":e instanceof Error&&e.message?e.message:String(e)}function ec(e){return(0,P.resolve)(e)}export{$ as init_namespaceObject};
3
+ ${es().map(e=>` ${e}`).join("\n")}`).action(async(e,t,r)=>p(r,r=>new ei(r).run(e,t)))}class ei{context;initReporter;constructor(e){this.context=e}jsonEnabled(){return this.context.json}log(e){this.context.log(e)}warn(e){this.context.warn(e)}async run(e,t){var r,n,s,o,a,p,l,d,c,u,h;let f,g,_,y,w,S,x,k;if(t.schema)return this.emitSchema();let E=!process.env.DBX_PROMPT_DISABLED&&!this.context.json&&process.stdin.isTTY&&process.stderr.isTTY,P=await en(e,E);!function(e){try{(0,j.lstatSync)(e)}catch(e){var t;if("object"==typeof(t=e)&&null!==t&&"code"in t&&"ENOENT"===t.code)return;throw e}throw Error(`dbx init target directory already exists: ${e}. Choose a new directory name.`)}(P);let R={authMode:E?"login":"require",installFrontendDependencies:t.installDeps,yes:t.yes},N=await this.collectInitPlan(t,E);this.initReporter=new K({enabled:!this.jsonEnabled(),useSpinner:U(),log:e=>this.log(e),warn:e=>this.warn(e)}),this.jsonEnabled()||this.emitInitStart(P,N);try{let e;f=await this.ensureRequiredRuntime(),g=await this.ensureAuthenticated(R.authMode),_=await this.executeFrontendProjectPlan(P,N.frontend,R.installFrontendDependencies),this.reporter().startStep("project artifacts: ensuring manifest.yaml and runtime Skill layout"),y=function(e,t={}){let r=m(e,{kind:t.layout}),i=r.root,n=r.manifestPath,s=A().join(r.skillDirectory,"SKILL.md"),o=r.skillResolution;if("invalid"===o.layout)throw Error(o.error);let a={app_key:"",layout:r.kind,manifest_path:n,skill_path:s,created:[],preserved:[]};return $().existsSync(n)?(function(e,t){if(!$().statSync(e).isFile())throw Error(`project artifact path must be a file: ${t}`)}(n,"manifest.yaml"),a.app_key=function(e){var t;let r=Q.qg($().readFileSync(e,"utf8")),i=(t=r,"object"!=typeof t||null===t||Array.isArray(t))?void 0:r.app_key;if("string"==typeof i&&i.trim())return i.trim();throw Error(`manifest app_key is required: ${e}`)}(n),a.preserved.push(A().relative(i,n))):(a.app_key=t.appKey?.trim()||"db_app_xxxxxx",$().mkdirSync(A().dirname(n),{recursive:!0}),$().writeFileSync(n,function(e){let t=ee("manifest.yaml");if(2!==t.split(Z).length)throw Error(`dbx init manifest template must contain exactly one ${Z}`);return t.replace(Z,JSON.stringify(e))}(a.app_key),"utf8"),a.created.push(A().relative(i,n))),"resolved"===o.layout?a.preserved.push(...o.entries.map(e=>A().relative(i,e.absolutePath))):($().mkdirSync(A().dirname(s),{recursive:!0}),$().writeFileSync(s,ee(A().join("skill","SKILL.md")),"utf8"),a.created.push(A().relative(i,s))),a}(P,{appKey:_.scaffold.app_id,layout:"root"}),this.reporter().succeedStep(`project artifacts: created ${y.created.length}, preserved ${y.preserved.length}`),e=A().resolve(P,"README.md"),$().writeFileSync(e,ee("README.md"),"utf8"),this.reporter().startStep("project files: writing AGENTS.md"),w=function(e){let t=A().resolve(e,"AGENTS.md");if(!(0,j.existsSync)(t))return(0,j.writeFileSync)(t,`${C}
4
+ `,"utf8"),{path:t,created:!0,updated:!1,already_present:!1};let r=(0,j.readFileSync)(t,"utf8");if(r.includes(C))return{path:t,created:!1,updated:!1,already_present:!0};let i=0===r.length||r.endsWith("\n")?"":"\n";return(0,j.writeFileSync)(t,`${r}${i}${C}
5
+ `,"utf8"),{path:t,created:!1,updated:!0,already_present:!1}}(P),this.reporter().succeedStep("project files: wrote AGENTS.md"),this.reporter().startStep("skills: syncing bundled skills"),S=await b({agents:N.agents,cwd:P,cliVersion:i,yes:R.yes}),this.reporter().succeedStep(`skills: synced ${S.skillNames.length} bundled skill(s)`)}catch(e){throw this.reporter().failStep("dbx init failed"),e}let I={success:!0,project_path:P,agent_response:(r=P,n=N,s=_,o=w,a=S.skillNames,{tone:"concise_user_facing",summary:(k=((x=(p=n.agents).filter(e=>"universal"!==e)).length>0?x:p).join(", "),`dbx 初始化完成,已为 ${k} 创建完整项目并配置内置 Skills。`),changes:(l=r,d=n,c=s,u=o,h=a,{agent_md:u.path,frontend:{directory:c.directory,description:"已在项目根目录创建前端工程"},skills:{names:h,targets:d.agents.map(e=>{let t=v.find(t=>t.id===e);return{id:e,skills_path:t?.projectPath??""}}).map(e=>({agent:e.id,path:`${l.replace(/\/+$/,"")}/${e.skills_path}`}))}}),notes:eo(s),response_guidance:["Lead with the outcome, not the command line.","Group generated paths by purpose instead of listing every raw file when that would be noisy.","Do not add unrelated git status notes unless the user asked or the git state changes the next step."]}),auth:g,environment:f,agents:N.agents,frontend:_,project_artifacts:y,agent_md:w,skills:S.skillNames,skills_version:S.skillsVersion,bundled_root:S.bundledRoot,hosted_root:S.hostedRoot};return this.jsonEnabled()||this.emitInitSuccess(P,_),I}emitSchema(){let e={command:"dbx init",description:"Create a new dbx project with a frontend scaffold, project artifacts, AGENTS.md guidance, and bundled skills.",risk:"write",writes_project_files:!0,requires_interactive_confirmation_to_apply:!1,requires_complete_user_decisions_to_apply:!0,json_supported:!0,user_decisions:{must_ask_user_before_choosing_flags:!0,preferred_user_prompt_style:"Ask a short product question with choices first; keep raw CLI flags as secondary detail only.",project_directory:`${et}(默认:my-app)`,agent:"Ask which agent targets to install for, for example codex, trae, or claude-code. Universal is always included.",git:"Ask whether to initialize a Git repository at the project root. The recommended default is true."},agent_guidance:{recommended_flow:["Run `dbx init --schema --json` if you need the command contract.","For any uncertain user_decisions item, ask the user with the provided prompt and choices instead of exposing raw flags first.","Use `dbx init <directory> --agent <id> --json` to create and inspect a new project."],cautions:["The directory argument must name a new directory; dbx init never initializes the current directory.","--yes only allows replacing existing Skill directories; it does not choose unspecified init parameters.","Use --no-install-deps only when dependency installation should be deferred."]},flags:{path:{kind:"argument",type:"string",required_for_non_interactive_plan:!0,default:"my-app",description:"New project directory name under the current directory."},agent:{type:"array",repeatable:!0,options:[...g],auto_includes:["universal"],description:"Agent skill targets to initialize."},"no-install-deps":{type:"boolean",default:!1,description:"Skip dependency installation for the generated frontend project."},git:{type:"boolean",default:!1,description:"Initialize a Git repository at the project root."},yes:{type:"boolean",description:"Allows replacing existing non-symlink Skill directories only. Does not choose unspecified init parameters."},json:{type:"boolean",description:"Output machine-readable JSON."}},examples:es()};return this.context.log(JSON.stringify(e,null,2)),e}reporter(){return this.initReporter||(this.initReporter=new K({enabled:!this.jsonEnabled(),useSpinner:U(),log:e=>this.log(e),warn:e=>this.warn(e)})),this.initReporter}async collectInitPlan(e,t){let r=function(e){var t;let r,i=function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"!=typeof t?[]:t.split(",").map(e=>e.trim()).filter(Boolean)}(e);if(0===i.length)return;let n=new Set(g),s=i.filter(e=>!n.has(e));if(s.length>0)throw Error(`Unsupported init agent(s): ${s.join(", ")}. Supported agents: ${g.join(", ")}.`);return t=["universal",...i],r=new Set,t.filter(e=>!r.has(e)&&(r.add(e),!0))}(e.agent);return r||t||ea("dbx init needs --agent <id> when prompts are disabled or unavailable.",{code:"missing_init_decision",missing_flags:["--agent"],user_prompt:"要为哪个 Agent 安装 dbx Skills?",choices:g.filter(e=>"universal"!==e).map(e=>({value:e,label:e})),examples:es()}),{agents:r??await _(),frontend:{directory:".",initializeGit:e.git||!!t&&await y()}}}emitInitStart(e,t){var r;let i=this.reporter();i.header("Initializing dbx project"),i.section("Plan"),i.info("project",(r=e,(0,E.resolve)(r))),i.info("agents",t.agents.join(", ")),i.info("git",t.frontend.initializeGit?"initialize at project root":"skip"),i.blank(),i.section("Progress")}emitInitSuccess(e,t){let r=this.reporter();r.blank(),r.header("dbx project initialized");let i=eo(t);if(i.length>0)for(let e of(r.blank(),r.info("notes"),i))r.note(e)}async ensureRequiredRuntime(){this.reporter().startStep("runtime: checking npm");try{let e=await z();return this.reporter().succeedStep(`runtime: npm ${e.version}`),{npm:e}}catch(e){throw this.reporter().failStep("runtime: npm check failed"),e}}async ensureAuthenticated(e){let r,i;this.reporter().startStep("auth: checking login status");try{r=await l({fetch:async(e,t)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),5e3);try{return await fetch(e,{...t,signal:r.signal})}finally{clearTimeout(i)}}})}catch(e){this.reporter().warnStep(`auth: login status check failed, starting login: ${ep(e)}`),r={loggedIn:!1,tokenPath:""}}if(r.loggedIn)return this.reporter().succeedStep("auth: already logged in"),{already_logged_in:!0,login_performed:!1,uid:r.uid,expires_at:r.expiresAt,base_url:r.baseUrl};if("require"===e)throw this.reporter().failStep("auth: login required"),Error("dbx init requires an existing login when prompts are disabled or JSON output is enabled. Run `dbx auth login` first.");this.reporter().succeedStep("auth: not logged in, starting login"),this.reporter().startStep("auth: waiting for login");let n=await t({onVerification:e=>{this.jsonEnabled()||(this.reporter().info("auth visit",e.verificationUrl),this.reporter().info("auth expires in",`${e.expiresIn} seconds`),this.openVerificationUrl(e.verificationUrl),this.reporter().updateStep(`auth: ${a(o.Pending)}`),i=o.Pending)},onPoll:e=>{this.context.json||e.status!==i&&(i=e.status,this.reporter().updateStep(`auth: ${a(e.status)}`))}});return this.reporter().succeedStep(`auth: logged in, token expires at ${new Date(1e3*n.expiresAt).toISOString()}`),{already_logged_in:!1,login_performed:!0,uid:n.uid,expires_at:n.expiresAt,base_url:n.baseUrl,token_path:n.tokenPath}}async openVerificationUrl(e){this.reporter().info("auth","opening link in browser");try{await x(e)}catch(e){this.reporter().warn(`failed to open browser: ${ep(e)}`)}}async executeFrontendProjectPlan(e,t,r){let i,n;this.reporter().startStep("sandbox app: fetching AppID");let s=await S(e);this.context.targetAppId=s.sandbox_app_id,this.reporter().succeedStep(`sandbox app: ready (${s.sandbox_app_id})`),this.reporter().startStep("frontend: creating scaffold in the new project root");let o=await R({projectPath:e,directory:t.directory,appId:s.sandbox_app_id,initializeGit:t.initializeGit,onStatus:e=>{"clearing_existing_directory"===e?this.reporter().updateStep("frontend: clearing existing scaffold files (keeping node_modules cache)"):this.reporter().updateStep("frontend: writing scaffold files in the new project root")}});if(this.reporter().succeedStep("frontend: scaffold ready in the new project root"),t.initializeGit&&(this.reporter().startStep("git: checking repository initialization"),(0,j.existsSync)((0,E.resolve)(o.path,".git"))?this.reporter().succeedStep("git: repository initialized at project root"):this.reporter().warnStep("git: repository initialization was requested but .git was not created")),!r)return{directory:t.directory,scaffold:o,package_manager:{dependencies:{dependencies_installed:!1,install_attempts:0,recovered_from_ignored_builds:!1,approved_builds:[],install_warning:"skipped by --no-install-deps"}}};this.reporter().startStep("dependencies: checking pnpm");try{i=await H()}catch(e){return n={dependencies_installed:!1,install_attempts:0,recovered_from_ignored_builds:!1,approved_builds:[],install_warning:ep(e)},this.reporter().warnStep(`frontend dependencies were not installed: ${n.install_warning}`),{directory:t.directory,scaffold:o,package_manager:{dependencies:n}}}if(this.reporter().startStep(`dependencies: installing frontend packages with pnpm ${i.version}`),(n=await V(o.path,{pnpmVersion:i.version,autoApproveBuilds:"all-pending",streamOutput:this.context.debug})).dependencies_installed?this.reporter().succeedStep(`dependencies: installed frontend packages with pnpm ${i.version}`):this.reporter().warnStep(`dependencies: install incomplete (${n.install_warning??"unknown reason"})`),!this.jsonEnabled()&&n.recovered_from_ignored_builds){let e=n.approved_builds.includes("*")?"all pending dependency build scripts":`${n.approved_builds.length} dependency build script package(s)`;this.reporter().warn(`pnpm blocked dependency build scripts; approved ${e} and retried install`)}return{directory:t.directory,scaffold:o,package_manager:{pnpm:i,dependencies:n}}}}async function en(e,t){let r=e?.trim()||(t?await w():"");return r||ea("dbx init requires a new project directory when prompts are disabled or unavailable.",{code:"missing_project_directory",missing_flags:["directory"],user_prompt:et,examples:es()}),function(e){let t=e.trim().replace(/\\/g,"/").replace(/\/+$/,"");if(!t||"."===t)throw Error("dbx init requires a new project directory name.");if((0,E.isAbsolute)(t)||E.win32.isAbsolute(t))throw Error("dbx init project directory must be relative.");if(t.split("/").includes(".."))throw Error("dbx init project directory must stay inside the current directory.");return(0,E.resolve)(process.cwd(),t)}(r)}function es(){return["dbx init my-app --agent codex --json","dbx init my-app --agent codex --no-install-deps --json"]}function eo(e){let t=[];return e.package_manager?.dependencies.install_warning&&t.push(`前端依赖未完整安装:${e.package_manager.dependencies.install_warning}`),t}function ea(e,t){let r=Error(e);throw r.details=t,r}function ep(e){return e instanceof Error&&"AbortError"===e.name?"timed out":e instanceof Error&&e.message?e.message:String(e)}export{k as init_namespaceObject};