@doubao-dev/cli 0.0.26 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2168.js +14 -14
- package/dist/{2861.js → 2611.js} +2 -2
- package/dist/4931.js +1 -1
- package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
- package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
- package/dist/app.js +1 -1
- package/dist/assets/web-sdk-debugger/index.html +1 -1
- package/dist/assets/web-sdk-debugger/static/js/index.1448a806d8.js +26 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
- package/dist/check.js +1 -0
- package/dist/dbx.js +2 -2
- package/dist/demo-server.js +3 -3
- package/dist/demo.js +2 -0
- package/dist/dev-shell.js +1 -1
- package/dist/dev.js +5 -5
- package/dist/init.js +4 -4
- package/dist/ink.js +1 -1
- package/dist/login.js +1 -1
- package/dist/prompt.js +1 -1
- package/dist/run.js +2 -2
- package/dist/sdk.js +15 -15
- package/dist/sdk~1.js +5 -5
- package/dist/skill.js +1 -1
- package/dist/skills.js +1 -1
- package/dist/skills~2.js +2 -2
- package/dist/templates/README.md +1 -1
- package/dist/upload.js +6 -6
- package/dist/workspace.js +1 -1
- package/dist/yaml.js +1 -1
- package/package.json +2 -2
- package/skills/dbx-eval/SKILL.md +2 -2
- package/skills/doubao-agentic-service-development/SKILL.md +8 -8
- package/skills/doubao-agentic-service-development/references/auth.md +2 -2
- package/skills/doubao-agentic-service-development/references/business-template-debug.md +3 -3
- package/skills/doubao-agentic-service-development/references/dev-debug.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +175 -15
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/03-/350/207/252/345/256/232/344/271/211/351/200/232/344/277/241.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +221 -7
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +20 -20
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/12-/344/270/232/345/212/241/350/203/275/345/212/233.md +3 -4
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/25-/346/227/240/351/232/234/347/242/215.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/26-/345/237/272/347/241/200/344/277/241/346/201/257.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/28-/345/211/252/350/264/264/346/235/277.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/common-errors.md +1 -1
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/groups.md +3 -3
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/quick-reference.md +7 -3
- package/skills/doubao-agentic-service-development/references/frontend-dev.md +3 -3
- package/skills/doubao-agentic-service-development/references/generate-skill.md +1 -1
- package/skills/doubao-agentic-service-development/references/local-debug/simulator-eval.md +26 -22
- package/skills/doubao-agentic-service-development/references/manifest-guide.md +3 -3
- package/skills/doubao-agentic-service-development/references/mcp-protocol.md +1 -1
- package/skills/doubao-agentic-service-development/references/overview.md +4 -3
- package/skills/doubao-agentic-service-development/references/service-notice.md +1 -3
- package/skills/doubao-agentic-service-development/references/task-management.md +1 -3
- package/dist/assets/web-sdk-debugger/static/js/index.b85cbec3be.js +0 -26
- package/dist/dbx-demo.js +0 -2
- package/dist/eval.js +0 -1
- package/dist/validate.js +0 -1
- /package/dist/{2861.js.LICENSE.txt → 2611.js.LICENSE.txt} +0 -0
- /package/dist/{6780.js → 4594.js} +0 -0
package/dist/skill.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./3768.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as
|
|
1
|
+
import"node:module";import{__webpack_require__ as t}from"./rslib-runtime.js";import"./3768.js";import{version_version as e,runCommand as l,command_Command as o,option_Option as s,collectChoiceValues as r}from"./2168.js";import{updateDbxConfigSkills as i}from"./dbx.js";import{selectInitAgents as n,INIT_AGENT_IDS as a}from"./prompts.js";import{installSkillsToRoots as _,listBundledSkills as c}from"./skills~2.js";import{scanInstalledSkillRoots as S}from"./scan.js";import{SUPPORTED_AGENTS as g}from"./skills~1.js";let k=t("node:path"),p="dbx-eval",d={listBundledSkills:c,scanInstalledSkillRoots:S,installSkillsToRoots:_,updateDbxConfigSkills:i,selectAgents:n,isInteractive:()=>!!process.stdin.isTTY&&!!process.stderr.isTTY};async function f(t,l,o=d){var s,r,i;let n=(0,k.resolve)(t.projectPath),a=o.listBundledSkills();a.includes(p)||l.error(`当前 CLI 未打包 ${p} Skill,无法补装。请升级或重新安装 dbx CLI。`);let _=o.scanInstalledSkillRoots(n,a),c=_.length>0,S=c?(s=_,r=t,i=l,r.agent.length>0&&i.warn("检测到已初始化的 Skill 目录,将向全部已发现目录补装 dbx-eval;--agent 不生效。"),{targetRoots:s,skillNames:[p]}):await m(n,t,l,o),g=await o.installSkillsToRoots({targetRoots:S.targetRoots,skillNames:S.skillNames,cwd:n,cliVersion:e,yes:t.yes});return o.updateDbxConfigSkills(n,g.skillNames,{source:"bundled",skillsVersion:g.skillsVersion,cliVersion:e}),function(t,e){if(t.json)return;let l="backfill"===e.branch?`已为存量项目补装 ${p}`:"已完成 Skill 初始化";for(let o of(t.log(l),t.log(`project: ${e.projectPath}`),t.log(`skills: ${e.skillNames.join(", ")}`),t.log("targets:"),e.targetRoots))t.log(` - ${o}`)}(l,{projectPath:n,branch:c?"backfill":"first-install",targetRoots:S.targetRoots,skillNames:g.skillNames}),{success:!0,branch:c?"backfill":"first-install",project_path:n,target_roots:S.targetRoots,skills:g.skillNames,skills_version:g.skillsVersion,hosted_root:g.hostedRoot}}async function m(t,e,l,o){let s,r=function(t){let e=Array.from(new Set(t.map(t=>t.trim()).filter(Boolean)));if(0===e.length)return;let l=new Set(a),o=e.filter(t=>!l.has(t));if(o.length>0)throw Error(`不支持的 Agent: ${o.join(", ")}。支持: ${a.join(", ")}。`);return u(e)}(e.agent);return r?s=r:o.isInteractive()?s=u(await o.selectAgents()):l.error("当前项目尚未初始化 Skill,且处于非交互环境。请通过 --agent <id> 指定目标 Agent。"),{targetRoots:s.map(t=>{let e=g.find(e=>e.id===t);return e?.projectPath??""})}}function u(t){return Array.from(new Set(["universal",...t]))}export default function(){return new o("skill").description("为存量项目补装 dbx-eval Skill;未初始化时按选择的 Agent 安装全部内置 Skills").option("--project-path <path>","dbx project path",".").addOption(new s("--agent <agent>","未初始化项目要安装的 Agent,可重复传入;universal 会自动包含").default([]).argParser(r(a))).option("-y, --yes","允许覆盖已有非软链 Skill 目录;覆盖前会自动备份",!1).action(async(t,e)=>l(e,e=>f(t,e)))};export{f as executeEvalSkill};
|
package/dist/skills.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as s}from"./rslib-runtime.js";import"./3768.js";import{version_version as o,command_Command as
|
|
1
|
+
import"node:module";import{__webpack_require__ as s}from"./rslib-runtime.js";import"./3768.js";import{version_version as o,command_Command as r,runCommand as l}from"./2168.js";import{updateDbxConfigSkills as t,readDbxConfig as e}from"./dbx.js";import{installSkillsToRoots as i,listBundledSkills as _}from"./skills~2.js";import{scanInstalledSkillRoots as n}from"./scan.js";import{SUPPORTED_AGENTS as m}from"./skills~1.js";let a=s("node:fs");async function c(s){let o=process.cwd();if(!a.existsSync(".dbx/config.json"))return;let r=e(o),l=_(),c=m.find(s=>s.host===r.host),S=await i({targetRoots:[".agents/skills/",...c?[c.projectPath]:[],...n(o,l)],cwd:o,cliVersion:s,yes:!0});return t(o,S.skillNames,{source:"bundled",skillsVersion:S.skillsVersion,cliVersion:s}),S}export default function(){return new r("skills").description("管理内置开发 skills").addCommand(new r("sync").description("同步内置开发 skills").action(async(s,r)=>l(r,async s=>{let r=await c(o);return r?r.skillNames.length?(s.log(`已同步 ${r.skillNames.length} 个内置开发 skill。`),{skills:r.skillNames}):s.error("未找到内置开发 Skill。"):s.error("当前目录不是 dbx 项目。")})))};export{c as syncProjectSkills};
|
package/dist/skills~2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import{SUPPORTED_AGENTS as r}from"./skills~1.js";let t=e("node:path");var n=e.n(t);let i=e("node:url"),l=n().dirname((0,i.fileURLToPath)(import.meta.url)),o=n().resolve(l,"../skills"),s=e("node:fs"),c=e("node:os");class
|
|
2
|
-
原因: ${r.message}`:"";super(`${e}${t}`),this.cause=r,this.name="SkillsInstallError"}}let
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import{SUPPORTED_AGENTS as r}from"./skills~1.js";let t=e("node:path");var n=e.n(t);let i=e("node:url"),l=n().dirname((0,i.fileURLToPath)(import.meta.url)),o=n().resolve(l,"../skills"),s=e("node:fs"),c=e("node:os");class a extends Error{cause;constructor(e,r){let t=r?`
|
|
2
|
+
原因: ${r.message}`:"";super(`${e}${t}`),this.cause=r,this.name="SkillsInstallError"}}let u=".dbx",f="skills";function S(){return s.existsSync(o)?s.readdirSync(o).filter(e=>{let r=t.join(o,e);return s.statSync(r).isDirectory()&&s.existsSync(t.join(r,"SKILL.md"))}).sort():[]}function h(e){let r,n,i,l=(r=g(e),n=t.join(c.homedir(),u,f,"versions",g(e)),0===(i=S()).length||p(o,n),{skillNames:i,bundledRoot:o,hostedRoot:n,skillsVersion:r}),s=t.join(c.homedir(),u,f,"current");return l.skillNames.length>0&&p(l.hostedRoot,s),{...l,currentRoot:s}}async function d(e){let{agents:t,...n}=e;if(0===t.length)throw Error("至少需要选择一个 Agent");let i=[];for(let e of t){let t=r.find(r=>r.id===e);t&&i.push(t.projectPath)}return y({targetRoots:i,...n})}async function y(e){var r,n,i,l,o;let S,d,y,p,{targetRoots:g,skillNames:j,cwd:v,cliVersion:$,yes:E=!1,onDiscovered:b,onSkillDone:A}=e,{skillNames:C,bundledRoot:N,hostedRoot:R,currentRoot:x,skillsVersion:K}=h($),L=function(e,r){if(!r)return e;let t=new Set(e),n=Array.from(new Set(r)),i=n.filter(e=>!t.has(e));if(i.length>0)throw Error(`请求安装的 Skill 不在当前 CLI 内置列表中: ${i.join(", ")}。可用: ${e.join(", ")}。`);return n}(C,j);b?.(L);let P=t.resolve(v??"."),I=m(g.map(e=>t.isAbsolute(e)?e:t.join(P,e))),T=[];for(let e of L)try{let l=t.join(x,e);for(let o of I){let a=t.join(o,e);r=l,n=a,i=E,s.mkdirSync(t.dirname(n),{recursive:!0}),function(e,r,n){let i=w(r);if(!i)return;if(i.isSymbolicLink()){if(function(e,r){try{return s.realpathSync(e)!==s.realpathSync(r)}catch{return!1}}(e,r)&&!n&&!function(e){try{let r=t.join(c.homedir(),u,f,"versions"),n=s.readlinkSync(e),i=t.isAbsolute(n)?n:t.resolve(t.dirname(e),n);if(_(r,i,e))return!0;let l=s.realpathSync(e),o=s.realpathSync(r);return _(o,l,e)}catch{return!1}}(r))throw Error(`目标 Skill 软链已存在但指向其他位置: ${r}。如需替换,请添加 --yes。`);s.unlinkSync(r);return}if(!n)throw Error(`目标 Skill 已存在且不是软链: ${r}。如需覆盖,请添加 --yes,现有目录会被备份后替换。`);let l=function(e){let r=new Date().toISOString().replace(/[-:]/g,"").replace(/\..+$/,"").replace("T","-"),t=`${e}.bak-${r}`,n=t,i=1;for(;s.existsSync(n);)n=`${t}-${i}`,i+=1;return n}(r);s.renameSync(r,l)}(r,n,i),k(r,n)}A?.(e,!0)}catch(r){T.push(r),A?.(e,!1)}if(T.length>0)throw new a("内置 Skills 安装失败",T[0]);return l=P,o=L,S=t.join(l,".gitignore"),(p=[...y=(d=s.existsSync(S)?s.readFileSync(S,"utf8"):"")?d.split(/\r?\n/):[],...o.map(e=>`/**/skills/${e}`).filter(e=>!y.includes(e))].join("\n"))!==d&&s.writeFileSync(S,p),{skillNames:L,bundledRoot:N,hostedRoot:R,currentRoot:x,skillsVersion:K}}function m(e){let r=new Set,n=new Set,i=[];for(let l of e){let e,o=t.resolve(l);if(!r.has(o)){r.add(o);try{e=s.realpathSync(o)}catch{e=void 0}if(void 0!==e){if(n.has(e))continue;n.add(e)}i.push(o)}}return i}function p(e,r){let n=w(r);n?.isSymbolicLink()?s.unlinkSync(r):n&&s.rmSync(r,{recursive:!0,force:!0}),s.mkdirSync(t.dirname(r),{recursive:!0}),k(e,r)}function k(e,r){let t="win32"===process.platform?"junction":"dir";s.symlinkSync(e,r,t)}function _(e,r,n){let i=t.relative(e,r);if(!i||i.startsWith("..")||t.isAbsolute(i))return!1;let l=i.split(t.sep);return 2===l.length&&l[0].length>0&&l[1]===t.basename(n)}function w(e){try{return s.lstatSync(e)}catch(e){if("ENOENT"===e.code)return;throw e}}function g(e){let r=e.trim();if(!r)throw Error("cliVersion 不能为空");return r.replace(/[\\/]/g,"_")}export{m as dedupeRoots,d as installSkills,y as installSkillsToRoots,S as listBundledSkills,h as refreshCurrentSkills};
|
package/dist/templates/README.md
CHANGED
package/dist/upload.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import"./3768.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./2168.js";import{uploadMiniAppVersionDraftPackage as s,verifyYAML as a,submitMiniAppVersionDraft as o,uploadMiniAppVersionDraftSourceCode as l}from"./app.js";import{remoteFileName as
|
|
2
|
-
... output truncated ...`}let
|
|
3
|
-
${(
|
|
4
|
-
endpoint: ${
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./yaml.js";import"./3768.js";import{isRecord as t,runCommand as r,command_Command as i,getLastHttpResponseLogId as n}from"./2168.js";import{uploadMiniAppVersionDraftPackage as s,verifyYAML as a,submitMiniAppVersionDraft as o,uploadMiniAppVersionDraftSourceCode as l,normalizeAppVersionTag as p}from"./app.js";import{remoteFileName as u,sourceTypeForWorkspaceFileType as d,describeWorkspaceUpload as c,resolveAppKey as f}from"./workspace.js";import{requireRuntimeSkillEntries as _,resolveProjectLayout as m}from"./project-layout.js";import{miniAppVersionDetailUrl as h}from"./portal.js";var g={};e.r(g),e.d(g,{__testOnly:()=>en,default:()=>R,resolveBusinessTemplatesFile:()=>A});let y=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function v(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 w(e,t,r){return{checked:!0,endpoint:e,cloud_reachable:!1,reason:t,message:r}}function b(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 E=e("node:fs"),k=e("node:util");async function I(e,t={}){let r=L(e),i={cwd:r};try{await S({action:"build",appDir:r,appId:t.appId})}catch(e){throw new $(r,e,i)}return i}async function U(e,t){let r=L(e),i={cwd:r,output_dir:t},n="";try{i.archive_path=n=(await S({action:"cloudPackage",appDir:r,outputDir:t})).archivePath||""}catch(e){throw new P(r,e,i)}if(!n)throw new P(r,Error("DoubaoAppsSDK.cloudPackage did not return an archive path"),i);return n}function L(e){if(!(0,E.existsSync)(e))throw Error(`frontend_code path not found: ${e}`);if((0,E.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);return(0,E.realpathSync)(e)}async function S(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=C(r),process.stderr.write=C(i),{result(){let e=x({stdout:r.join(""),stderr:i.join("")});return{...e,...e.stdout||e.stderr?{output:M([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 C(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 x(e){let t=M(e.stdout),r=M(e.stderr),i=M(e.output);return{...t?{stdout:t}:{},...r?{stderr:r}:{},...i?{output:i}:{}}}class $ extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=j(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=O(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 P extends Error{exitCode=1;details;constructor(e,t,r){var i;let n,s=j(t),a=r?.stdout||s.stdout,o=r?.stderr||s.stderr,l=O(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 j(e){if(!t(e))return{output:String(e)};let r=x({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 M(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):"string"==typeof e?e:"";return(0,k.stripVTControlCharacters)(t).replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map(e=>e.trimEnd()).join("\n").trim()||void 0}function O(e){let t,r=M(e);if(!r)return;let i=(t=[r.search(/(^|\n)error\s+Build error:/i),r.search(/(^|\n)Build error:/i),r.search(/(^|\n)File:\s/i),r.search(/(^|\n)\s*[×x]\s+.*TS\d+:/i)].filter(e=>e>=0)).length>0?Math.min(...t):-1,n=i>=0?r.slice(i).trim():r;return n.length<=4e3?n:`${n.slice(0,4e3).trimEnd()}
|
|
2
|
+
... output truncated ...`}let F=e("node:path");function R(){return new i("upload").description("上传产物并触发云构建").option("--app-id <app-id>","兼容参数;必须与 manifest.app_key 一致").option("--app-version-tag <tag>","显式指定正式版本 Tag,格式为 x.y.z(例如 1.2.3)").option("--project <path>","项目路径;默认使用当前目录",".").option("--manifest <path>","manifest.yaml 路径;默认按项目布局自动解析").option("--skill <path>","Skill 目录路径;显式目录优先,相对路径按 --project 解析;未传默认 skill/,递归打包所有 SKILL.md").option("--frontend-code <path>","前端源码目录路径;默认按项目布局自动解析").option("--business-templates <path>","business-templates.yaml 路径;默认读取项目根目录同名文件").option("--business-templates-only","仅上传业务模板,不构建或提交其他产物",!1).option("--keep-packages","上传后保留本次打包生成的临时包,用于调试",!1).action(async(e,t)=>r(t,t=>z(t,e)))}async function z(e,r){let i=p(r.appVersionTag);if(r.businessTemplatesOnly&&i)throw Error("--app-version-tag cannot be used with --business-templates-only because this mode does not submit a version");let s=m(r.project),a=K(r.project,r.manifest,s.manifestPath),l=K(r.project,r.skill,s.skillDirectory),u=K(r.project,r.frontendCode,(0,F.resolve)(r.project,s.frontendDirectory)),d=f(r.project,r.appId,a);if(e.targetAppId=d,r.businessTemplatesOnly)return B(e,d,r);let c=r.keepPackages,_=W(),g="",k="",U="",L="",S=[],C=[];try{var x,$,P,j,M;let t,s,p,f=[],m=await I(u,{appId:d});P=a,j=_,et(P,"manifest"),t=(0,F.join)(j,"manifest.yaml"),(0,E.copyFileSync)(P,t),g=t,C.push(G({type:"manifest",file:g}));let O=await Z(g),R=A(r);R&&(L=N(R,_),C.push(G({type:"business_templates",file:L})));let z=L?await J(L):void 0;S=T(r.project,_),C.push(...S.map(G));let K=(x=(0,E.readFileSync)(g,"utf8"),$=O.manifest,(s=v(function(e){try{return y.qg(e)}catch{return}}(x))??v($))?function(e){let t,r=e.trim();try{t=new URL(r)}catch{return w(r,"invalid_url","manifest.mcp_server.end_point must be a valid http(s) URL.")}if("http:"!==t.protocol&&"https:"!==t.protocol)return w(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=b(e)??function(e){let t="::ffff:";if(!e.startsWith(t))return;let r=e.slice(t.length),i=b(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?w(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}}(s):{checked:!1,cloud_reachable:!1,reason:"mcp_endpoint_missing",message:"manifest.mcp_server.end_point is missing"});if(K.checked&&!K.cloud_reachable&&process.stderr.write(`[WARNING]
|
|
3
|
+
${(p=K.endpoint??"(missing)",`manifest.mcp_server.end_point may not be reachable from cloud build or real devices.
|
|
4
|
+
endpoint: ${p}
|
|
5
5
|
reason: ${K.reason??"unknown"}
|
|
6
6
|
|
|
7
7
|
Impact:
|
|
@@ -10,5 +10,5 @@ Impact:
|
|
|
10
10
|
|
|
11
11
|
Action:
|
|
12
12
|
Set manifest.mcp_server.end_point to an http(s) MCP URL reachable from the cloud/device environment before release.`)}
|
|
13
|
-
`),
|
|
14
|
-
${["package sizes:",...r.map(e=>` ${e.type}: ${e.file_name} (${e.file_size_human})`)].join("\n")}`),i}(e,
|
|
13
|
+
`),f.push(await q(d,{type:"manifest",file:g})),L){let e={type:"business_templates",file:L};f.push(await q(d,e))}for(let e of S)f.push(await q(d,e));let B=await H(l,_);k=B.file,C.push(G({type:"skill",file:k}));let W=function(e,t){let r,i=(0,E.readFileSync)(e);if(i.byteLength<22||(r=i.readUInt32LE(0),0x4034b50!==r&&0x6054b50!==r&&0x8074b50!==r))throw Error(`invalid skill zip: ${e} is not a zip file`);let n=ei(i),s=t.map(e=>e.relativePath),a=s.filter(e=>!n.includes(e));if(a.length>0)throw Error(`invalid skill zip: missing discovered Skill entries: ${a.join(", ")}`);return{valid:!0,file_name:(0,F.basename)(e),skill_paths:s}}(k,B.skills);f.push(await q(d,{type:"skill",file:k})),U=await D(u,_),C.push(G({type:"frontend_code",file:U})),f.push(await q(d,{type:"frontend_code",file:U}));let V=await o(d,{appVersionTag:i}),Q=V.data?.version_tag||(M=f,M.find(e=>e.version_tag)?.version_tag??""),X={app_id:d,version_tag:Q,status:"submitted",submitted:!0,build_triggered:!0,uploaded_artifacts:f.map(e=>e.type),packages:C,business_template_sync_result:f.find(e=>"business_templates"===e.type)?.business_template_sync_result,next:{status_command:`dbx app artifacts status --app-id ${d} --version-tag ${Q} --poll`,version_detail_url:h(d,Q)},...c?{kept_packages:{temp_dir:_,manifest:g,skill_zip:k,frontend_code_zip:U,...L?{business_templates:L}:{},...Object.fromEntries(S.map(e=>[e.type,e.file]))}}:{},...e.debug?{debug:{frontend_build_check:m,manifest:O,...z?{business_templates:z}:{},skill:W,uploads:f,endpoints:{manifest_validate:{method:"POST",path:"/app_developer/api/yaml/verify"},upload:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/upload"},source_code_upload_start:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/source_code/upload/start"},source_code_tos_upload:{method:"PUT",path:"<upload_url>"},source_code_upload_finish:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/source_code/upload/finish"},submit:{method:"POST",path:"/app_developer/api/apps/:app_key/draft/submit"}}}}:{},log_id:V.log_id??n()??""};for(let t of(e.log("artifacts uploaded and build triggered"),e.log(`app_id: ${d}`),e.log(`version_tag: ${Q}`),e.log(`status: ${X.status}`),e.log(`next: ${X.next.status_command}`),e.log(`version detail: ${X.next.version_detail_url}`),e.log("package sizes:"),C))e.log(` ${t.type}: ${t.file_name} (${t.file_size_human})`);return c&&e.log(`kept packages: ${_}`),X}catch(e){throw function(e,r){let i=e instanceof Error?e:Error(String(e));if(0===r.length)return i;let n=r.map(e=>({...e})),s=i.details;return i.details=t(s)?{...s,package_sizes:n}:{...void 0===s?{}:{cause:s},package_sizes:n},i.message.includes("package sizes:")||(i.message=`${i.message}
|
|
14
|
+
${["package sizes:",...r.map(e=>` ${e.type}: ${e.file_name} (${e.file_size_human})`)].join("\n")}`),i}(e,C)}finally{c||(0,E.rmSync)(_,{recursive:!0,force:!0})}}function K(e,t,r){return t?.trim()?(0,F.resolve)(e,t.trim()):r}async function B(e,t,r){let i=A(r);if(!i)throw Error(`business_templates file not found: ${(0,F.resolve)(r.project,"business-templates.yaml")}`);let s=W(),a=N(i,s);try{let i=await J(a),o=await q(t,{type:"business_templates",file:a}),l={app_id:t,status:"uploaded",submitted:!1,build_triggered:!1,uploaded_artifacts:[o.type],packages:[G({type:"business_templates",file:a})],business_template_validation:i,business_template_sync_result:o.business_template_sync_result,log_id:n()??"",...r.keepPackages?{kept_packages:{temp_dir:s,business_templates:a}}:{}};return e.log("business templates uploaded"),e.log(`app_id: ${t}`),l}finally{r.keepPackages||(0,E.rmSync)(s,{recursive:!0,force:!0})}}function N(e,t){et(e,"business_templates");let r=(0,F.join)(t,"business-templates.yaml");return(0,E.copyFileSync)(e,r),r}function T(e,t){let r=m(e);return[{type:"events",file:r.eventsPath},{type:"tools",file:r.toolsPath}].flatMap(e=>{if(!(0,E.existsSync)(e.file))return[];et(e.file,e.type);let r=(0,F.join)(t,u(e.type));return(0,E.copyFileSync)(e.file,r),[{type:e.type,file:r}]})}function A(e){if(e.businessTemplates){let t=(0,F.resolve)(e.project,e.businessTemplates.trim());return et(t,"business_templates"),t}let t=m(e.project).businessTemplatesPath;return(0,E.existsSync)(t)&&(0,E.statSync)(t).isFile()?t:""}async function H(e,t){let r=_(e),i=(0,F.join)(t,"skill.zip");return function(e,t){let r=[],i=[],n=0;for(let t of e){let e=t.data,s=Buffer.from(t.zipPath),a=function(e){let t=0xffffffff;for(let r of e)t=t>>>8^V[(t^r)&255];return(0xffffffff^t)>>>0}(e),o=Buffer.alloc(30);o.writeUInt32LE(0x4034b50,0),o.writeUInt16LE(20,4),o.writeUInt16LE(2048,6),o.writeUInt16LE(0,8),o.writeUInt16LE(0,10),o.writeUInt16LE(0,12),o.writeUInt32LE(a,14),o.writeUInt32LE(e.length,18),o.writeUInt32LE(e.length,22),o.writeUInt16LE(s.length,26),o.writeUInt16LE(0,28),r.push(o,s,e);let l=Buffer.alloc(46);l.writeUInt32LE(0x2014b50,0),l.writeUInt16LE(20,4),l.writeUInt16LE(20,6),l.writeUInt16LE(2048,8),l.writeUInt16LE(0,10),l.writeUInt16LE(0,12),l.writeUInt16LE(0,14),l.writeUInt32LE(a,16),l.writeUInt32LE(e.length,20),l.writeUInt32LE(e.length,24),l.writeUInt16LE(s.length,28),l.writeUInt16LE(0,30),l.writeUInt16LE(0,32),l.writeUInt16LE(0,34),l.writeUInt16LE(0,36),l.writeUInt32LE(0,38),l.writeUInt32LE(n,42),i.push(l,s),n+=o.length+s.length+e.length}let s=n,a=Buffer.concat(i),o=Buffer.alloc(22);o.writeUInt32LE(0x6054b50,0),o.writeUInt16LE(0,4),o.writeUInt16LE(0,6),o.writeUInt16LE(e.length,8),o.writeUInt16LE(e.length,10),o.writeUInt32LE(a.length,12),o.writeUInt32LE(s,16),o.writeUInt16LE(0,20),(0,E.writeFileSync)(t,Buffer.concat([...r,a,o]))}(r.map(e=>({zipPath:e.relativePath,data:Buffer.from(e.content)})),i),{file:i,skills:r}}async function D(e,t){if(function(e,t){if(!(0,E.existsSync)(e))throw Error(`${t} path not found: ${e}`)}(e,"frontend_code"),(0,E.statSync)(e).isFile())throw Error(`frontend_code must be a directory: ${e}`);let r=await U(e,t);return et(r,"frontend_code"),r}function W(){let e=(0,F.join)("/tmp","dbx","artifacts-upload");return(0,E.mkdirSync)(e,{recursive:!0}),(0,E.mkdtempSync)((0,F.join)(e,"upload-"))}let V=function(){let e=[];for(let t=0;t<256;t+=1){let r=t;for(let e=0;e<8;e+=1)r=1&r?0xedb88320^r>>>1:r>>>1;e[t]=r>>>0}return e}();async function q(e,t){if("frontend_code"===t.type){let r=await l({appKey:e,filePath:t.file});return{...c(t),source_type:d(t.type),version_tag:r.data?.version_tag??""}}let r=await s({appKey:e,sourceType:d(t.type),filePath:t.file,contentType:er(t.type)});return{...c(t),source_type:d(t.type),version_tag:r.data?.version_tag??"",business_template_sync_result:r.data?.business_template_sync_result}}function G(e){let t=c(e);return{type:t.type,file_name:t.file_name,file_size:t.file_size,file_size_human:function(e){let t=["B","KiB","MiB","GiB"],r=e,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return 0===i?`${e} B`:`${r>=10?r.toFixed(1):r.toFixed(2)} ${t[i]}`}(t.file_size)}}async function Z(e){return Q(e,"manifest","manifest")}async function J(e){return Q(e,"business templates","business_templates")}async function Q(e,t,r){let i=await a((0,E.readFileSync)(e,"utf8"),"strict",r),s=i.data,o={valid:!!s?.success,manifest:s?.manifest,errors:X(s?.errors??[]),warnings:X(s?.warnings??[]),log_id:i.log_id??n()??""};if(!o.valid)throw new Y(t,o);return{...o,valid:!0}}function X(e){return e.map(e=>({code:e.code,path:e.path,message:e.message}))}class Y extends Error{result;exitCode=1;logId;details;constructor(e,t){super(ee(e,t.errors)),this.result=t,this.logId=t.log_id,this.details=t}}function ee(e,t){return 0===t.length?`${e} validation failed`:[`${e} validation failed`,`${e} validation errors:`,...t.map(e=>` - [${e.code}] ${e.path}: ${e.message}`)].join("\n")}function et(e,t){if(!(0,E.existsSync)(e)||!(0,E.statSync)(e).isFile())throw Error(`${t} file not found: ${e}`)}function er(e){return"manifest"===e||"business_templates"===e?"application/x-yaml":"events"===e||"tools"===e?"application/json":"application/zip"}function ei(e){let t=function(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(0x6054b50===e.readUInt32LE(r))return r;return -1}(e);if(t<0)return[];let r=e.readUInt32LE(t+12),i=e.readUInt32LE(t+16),n=Math.min(e.length,i+r),s=[],a=i;for(;a+46<=n&&0x2014b50===e.readUInt32LE(a);){let t=e.readUInt16LE(a+28),r=e.readUInt16LE(a+30),i=e.readUInt16LE(a+32),n=a+46,o=n+t;s.push(e.toString("utf8",n,o)),a=o+r+i}return s}let en={contentTypeFor:er,ManifestValidationError:class extends Y{constructor(e){super("manifest",e)}},formatManifestValidationFailure:function(e){return ee("manifest",e)},prepareOptionalJsonArtifacts:T,listZipEntries:ei,prepareSkillZip:H};export{g as upload_namespaceObject};
|
package/dist/workspace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./yaml.js";import"./app.js";import{resolveProjectLayout as
|
|
1
|
+
import"node:module";import{__webpack_require__ as e}from"./rslib-runtime.js";import"./3768.js";import"./yaml.js";import{FRONTEND_ARCHIVE_FILENAME as t}from"./app.js";import{resolveProjectLayout as r}from"./project-layout.js";import{isRecord as s}from"./2168.js";let i=e("node:crypto"),n=e("node:fs"),o=e("node:path"),a=e("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js");function p(e,t,s){let i=s??r(e).manifestPath;if(!(0,n.existsSync)(i)){if(t)return t;throw Error(`missing AppID: manifest file not found: ${i}`)}let o=l(i);if(t&&t!==o)throw Error(`AppID mismatch: --app-id is ${t}, but manifest.app_key is ${o}. Update the resolved Manifest; it is the single source of truth.`);return o}function l(e){let t;if(!(0,n.statSync)(e).isFile())throw Error(`missing AppID: manifest path is not a file: ${e}`);try{t=a.qg((0,n.readFileSync)(e,"utf8"))}catch(r){let t=r instanceof Error?r.message:String(r);throw Error(`invalid manifest.yaml: ${e}: ${t}`)}let r=s(t)?t.app_key:void 0;if("string"==typeof r&&r.trim())return r.trim();throw Error(`missing AppID: write app_key in ${e}`)}function m(e){let t=(0,n.readFileSync)(e.file),r=(0,n.statSync)(e.file);return{type:e.type,file:e.file,file_name:(0,o.basename)(e.file),file_size:r.size,sha256:(0,i.createHash)("sha256").update(t).digest("hex"),remote_file_name:_(e.type),replaced:!0}}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";case"events":return"events.json";case"tools":return"tools.json"}}function f(e){switch(e){case"manifest":return 2;case"skill":return 3;case"frontend_code":return 1;case"business_templates":return 4;case"events":return 5;case"tools":return 6}}export{m as describeWorkspaceUpload,l as readManifestAppKey,_ as remoteFileName,p as resolveAppKey,f as sourceTypeForWorkspaceFileType};
|