@doufunao123/asset-gateway 0.24.0 → 0.25.1

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 (2) hide show
  1. package/dist/index.js +164 -24
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import { AssetForgeError } from "@doufunao123/assetforge-sdk";
15
15
 
16
16
  // src/meta.ts
17
17
  var CLI_NAME = "asset-gateway";
18
- var CLI_VERSION = "0.24.0";
18
+ var CLI_VERSION = "0.25.1";
19
19
  var CLI_DESCRIPTION = "Universal asset generation gateway CLI";
20
20
  var DEFAULT_GATEWAY_URL = "https://asset.origingame.dev";
21
21
 
@@ -989,16 +989,32 @@ function createGenerateCommand() {
989
989
  })
990
990
  );
991
991
  command.addCommand(
992
- new Command3("model").description("Generate a 3D model with Meshy AI").option("--image <input>", "Reference image path or URL").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--prompt <text>", "Model description prompt").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--polycount <n>", "Target polygon count").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output").option("--pose-mode <mode>", "Character pose mode: a-pose or t-pose").option("--auto-size", "Estimate real-world size automatically").option("--negative-prompt <text>", "Negative prompt").option("--multiview <inputs>", "Comma-separated multiview image paths or URLs").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
992
+ new Command3("model").description(
993
+ "Generate a 3D model with Meshy AI. Default --quality=preview returns a single preview mesh (fast); --quality=full chains preview \u2192 refine \u2192 remesh to deliver a production-ready mesh."
994
+ ).option("--image <input>", "Reference image path or URL").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--prompt <text>", "Model description prompt").option(
995
+ "--quality <mode>",
996
+ "Pipeline mode: preview (single stage, ~30s) or full (chained: preview \u2192 refine \u2192 remesh, ~5-10min)"
997
+ ).option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--polycount <n>", "Target polygon count (full quality only)").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output (requires --ai-model meshy-6)").option("--pose-mode <mode>", "Character pose mode: a-pose or t-pose").option("--auto-size", "Estimate real-world size automatically").option("--negative-prompt <text>", "Negative prompt").option("--multiview <inputs>", "Comma-separated multiview image paths or URLs").option("--output-dir <dir>", "Directory to save output", ".").option(
998
+ "--async",
999
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1000
+ ).action(async function(options) {
993
1001
  try {
994
1002
  assertHas3dInput(options.prompt, options.image, options.multiview);
1003
+ if (options.hdTexture && options.aiModel && options.aiModel !== "meshy-6") {
1004
+ throw new Error(
1005
+ "--hd-texture requires --ai-model meshy-6 (got '" + options.aiModel + "'); preview would succeed but refine would 400 and waste credits"
1006
+ );
1007
+ }
995
1008
  const ctx = createContext(this);
996
1009
  const params = {};
997
1010
  if (options.negativePrompt) params.negative_prompt = options.negativePrompt;
998
1011
  if (options.multiview) {
999
1012
  params.multiview = parseCommaSeparatedValues(options.multiview).map((value) => toInputFile(value)).filter((value) => Boolean(value));
1000
1013
  }
1001
- const data = await ctx.client.model3d(options.prompt ?? "", {
1014
+ if (options.quality) {
1015
+ params.model3d_quality = options.quality;
1016
+ }
1017
+ const sdkOptions = {
1002
1018
  input: toInputFile(options.image),
1003
1019
  format: options.format,
1004
1020
  ai_model: options.aiModel,
@@ -1008,7 +1024,19 @@ function createGenerateCommand() {
1008
1024
  pose_mode: options.poseMode,
1009
1025
  auto_size: options.autoSize ? true : void 0,
1010
1026
  params: Object.keys(params).length > 0 ? toJsonObject(params) : void 0
1011
- });
1027
+ };
1028
+ if (options.async) {
1029
+ const ack = await ctx.client.model3d(options.prompt ?? "", {
1030
+ ...sdkOptions,
1031
+ async: true
1032
+ });
1033
+ printSuccess("generate.model", ack, ctx);
1034
+ return;
1035
+ }
1036
+ const data = await ctx.client.model3d(
1037
+ options.prompt ?? "",
1038
+ sdkOptions
1039
+ );
1012
1040
  const localPath = await saveOutput(data, "model3d", options.outputDir, options.format);
1013
1041
  if (localPath) data.local_path = localPath;
1014
1042
  printSuccess("generate.model", data, ctx);
@@ -1018,12 +1046,20 @@ function createGenerateCommand() {
1018
1046
  })
1019
1047
  );
1020
1048
  command.addCommand(
1021
- new Command3("character").description("Generate a fully processed 3D character with Meshy AI").option("--prompt <text>", "Character description prompt").option("--image <input>", "Reference image path or URL").option("--images <inputs>", "Comma-separated reference image paths or URLs").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--polycount <n>", "Target polygon count").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output").option("--pose-mode <mode>", "Character pose mode: a-pose or t-pose").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--auto-size", "Estimate real-world size automatically").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1049
+ new Command3("character").description("Generate a fully processed 3D character with Meshy AI (chained preview \u2192 refine \u2192 remesh \u2192 rig)").option("--prompt <text>", "Character description prompt").option("--image <input>", "Reference image path or URL").option("--images <inputs>", "Comma-separated reference image paths or URLs").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--polycount <n>", "Target polygon count").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output (requires --ai-model meshy-6)").option("--pose-mode <mode>", "Character pose mode: a-pose or t-pose").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--auto-size", "Estimate real-world size automatically").option("--output-dir <dir>", "Directory to save output", ".").option(
1050
+ "--async",
1051
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1052
+ ).action(async function(options) {
1022
1053
  try {
1023
1054
  assertHas3dInput(options.prompt, options.image, options.images);
1055
+ if (options.hdTexture && options.aiModel && options.aiModel !== "meshy-6") {
1056
+ throw new Error(
1057
+ "--hd-texture requires --ai-model meshy-6 (got '" + options.aiModel + "'); preview would succeed but refine would 400 and waste credits"
1058
+ );
1059
+ }
1024
1060
  const ctx = createContext(this);
1025
1061
  const images = parseCommaSeparatedValues(options.images).map((value) => toInputFile(value)).filter((value) => Boolean(value));
1026
- const data = await ctx.client.character(options.prompt ?? "", {
1062
+ const sdkOptions = {
1027
1063
  input: toInputFile(options.image),
1028
1064
  images: images.length > 0 ? images : void 0,
1029
1065
  format: options.format,
@@ -1033,7 +1069,19 @@ function createGenerateCommand() {
1033
1069
  pose_mode: options.poseMode,
1034
1070
  ai_model: options.aiModel,
1035
1071
  auto_size: options.autoSize ? true : void 0
1036
- });
1072
+ };
1073
+ if (options.async) {
1074
+ const ack = await ctx.client.character(options.prompt ?? "", {
1075
+ ...sdkOptions,
1076
+ async: true
1077
+ });
1078
+ printSuccess("generate.character", ack, ctx);
1079
+ return;
1080
+ }
1081
+ const data = await ctx.client.character(
1082
+ options.prompt ?? "",
1083
+ sdkOptions
1084
+ );
1037
1085
  const localPath = await saveOutput(data, "character", options.outputDir, options.format);
1038
1086
  if (localPath) data.local_path = localPath;
1039
1087
  printSuccess("generate.character", data, ctx);
@@ -1043,12 +1091,20 @@ function createGenerateCommand() {
1043
1091
  })
1044
1092
  );
1045
1093
  command.addCommand(
1046
- new Command3("prop").description("Generate a fully processed 3D prop with Meshy AI").option("--prompt <text>", "Prop description prompt").option("--image <input>", "Reference image path or URL").option("--images <inputs>", "Comma-separated reference image paths or URLs").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--polycount <n>", "Target polygon count").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--auto-size", "Estimate real-world size automatically").option("--texture-prompt <text>", "Optional texture prompt for the final material pass").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1094
+ new Command3("prop").description("Generate a fully processed 3D prop with Meshy AI (chained preview \u2192 refine \u2192 remesh)").option("--prompt <text>", "Prop description prompt").option("--image <input>", "Reference image path or URL").option("--images <inputs>", "Comma-separated reference image paths or URLs").option("--format <fmt>", "Output format: glb, fbx, obj, usdz, stl, 3mf", "glb").option("--polycount <n>", "Target polygon count").option("--pbr", "Enable PBR textures").option("--hd-texture", "Request 4K texture output (requires --ai-model meshy-6)").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--auto-size", "Estimate real-world size automatically").option("--texture-prompt <text>", "Optional texture prompt for the final material pass").option("--output-dir <dir>", "Directory to save output", ".").option(
1095
+ "--async",
1096
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1097
+ ).action(async function(options) {
1047
1098
  try {
1048
1099
  assertHas3dInput(options.prompt, options.image, options.images);
1100
+ if (options.hdTexture && options.aiModel && options.aiModel !== "meshy-6") {
1101
+ throw new Error(
1102
+ "--hd-texture requires --ai-model meshy-6 (got '" + options.aiModel + "'); preview would succeed but refine would 400 and waste credits"
1103
+ );
1104
+ }
1049
1105
  const ctx = createContext(this);
1050
1106
  const images = parseCommaSeparatedValues(options.images).map((value) => toInputFile(value)).filter((value) => Boolean(value));
1051
- const data = await ctx.client.prop(options.prompt ?? "", {
1107
+ const sdkOptions = {
1052
1108
  input: toInputFile(options.image),
1053
1109
  images: images.length > 0 ? images : void 0,
1054
1110
  format: options.format,
@@ -1058,7 +1114,19 @@ function createGenerateCommand() {
1058
1114
  ai_model: options.aiModel,
1059
1115
  auto_size: options.autoSize ? true : void 0,
1060
1116
  texture_prompt: options.texturePrompt
1061
- });
1117
+ };
1118
+ if (options.async) {
1119
+ const ack = await ctx.client.prop(options.prompt ?? "", {
1120
+ ...sdkOptions,
1121
+ async: true
1122
+ });
1123
+ printSuccess("generate.prop", ack, ctx);
1124
+ return;
1125
+ }
1126
+ const data = await ctx.client.prop(
1127
+ options.prompt ?? "",
1128
+ sdkOptions
1129
+ );
1062
1130
  const localPath = await saveOutput(data, "prop", options.outputDir, options.format);
1063
1131
  if (localPath) data.local_path = localPath;
1064
1132
  printSuccess("generate.prop", data, ctx);
@@ -1734,7 +1802,13 @@ async function saveProcess3dOutput(data, operation, outputDir, format) {
1734
1802
  function createProcess3dCommand() {
1735
1803
  const command = new Command8("process3d").description("3D model post-processing via Meshy AI");
1736
1804
  command.addCommand(
1737
- new Command8("remesh").description("Remesh a model and optionally change format or polygon count").option("--task-id <id>", "Meshy task ID").option("--model-url <url>", "Model URL to remesh without an existing task").requiredOption("--format <fmt>", "Target format: glb, fbx, obj, usdz, stl, 3mf").option("--polycount <n>", "Target polygon count").option("--topology <type>", "Topology type: triangle or quad").option("--auto-size", "Estimate real-world size automatically").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1805
+ new Command8("remesh").description("Remesh a model and optionally change format or polygon count").option("--task-id <id>", "Meshy task ID").option("--model-url <url>", "Model URL to remesh without an existing task").requiredOption("--format <fmt>", "Target format: glb, fbx, obj, usdz, stl, 3mf").option("--polycount <n>", "Target polygon count (Meshy target_polycount; result polycount may vary 1.5-2x)").option("--topology <type>", "Topology type: triangle or quad").option("--auto-size", "Estimate real-world size automatically (Meshy auto_size is unreliable on small objects)").option("--resize-height <meters>", "Resize the mesh so its bounding box height equals this many meters").option(
1806
+ "--origin-at <point>",
1807
+ "Move the origin: bottom, top, center, bottom-center, top-center"
1808
+ ).option("--output-dir <dir>", "Directory to save output", ".").option(
1809
+ "--async",
1810
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1811
+ ).action(async function(options) {
1738
1812
  try {
1739
1813
  if (!options.taskId && !options.modelUrl) {
1740
1814
  throw new Error("Either --task-id or --model-url is required");
@@ -1744,9 +1818,29 @@ function createProcess3dCommand() {
1744
1818
  target_formats: [options.format]
1745
1819
  };
1746
1820
  if (options.modelUrl) params.model_url = options.modelUrl;
1747
- if (options.polycount) params.polycount = Number(options.polycount);
1821
+ if (options.polycount) params.target_polycount = Number(options.polycount);
1748
1822
  if (options.topology) params.topology = options.topology;
1749
1823
  if (options.autoSize) params.auto_size = true;
1824
+ if (options.resizeHeight !== void 0) {
1825
+ const value = Number(options.resizeHeight);
1826
+ if (!Number.isFinite(value)) {
1827
+ throw new Error("--resize-height must be a number (meters)");
1828
+ }
1829
+ params.resize_height = value;
1830
+ }
1831
+ if (options.originAt) params.origin_at = options.originAt;
1832
+ if (options.async) {
1833
+ const ack = await ctx.client.process3d(
1834
+ {
1835
+ task_id: options.taskId ?? "",
1836
+ operation: "remesh",
1837
+ params: toJsonObject2(params)
1838
+ },
1839
+ { async: true }
1840
+ );
1841
+ printSuccess("process3d.remesh", ack, ctx);
1842
+ return;
1843
+ }
1750
1844
  const data = await ctx.client.process3d({
1751
1845
  task_id: options.taskId ?? "",
1752
1846
  operation: "remesh",
@@ -1761,8 +1855,16 @@ function createProcess3dCommand() {
1761
1855
  })
1762
1856
  );
1763
1857
  command.addCommand(
1764
- new Command8("retexture").description("Regenerate textures for an existing Meshy model").requiredOption("--task-id <id>", "Meshy task ID").option("--prompt <text>", "Text style prompt for the new material pass").option("--style-image <input>", "Texture style reference image URL or local file path").option("--pbr", "Enable PBR materials").option("--hd-texture", "Request 4K texture output").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1858
+ new Command8("retexture").description("Regenerate textures for an existing Meshy model").requiredOption("--task-id <id>", "Meshy task ID").option("--prompt <text>", "Text style prompt for the new material pass").option("--style-image <input>", "Texture style reference image URL or local file path").option("--pbr", "Enable PBR materials").option("--hd-texture", "Request 4K texture output (requires --ai-model meshy-6)").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--output-dir <dir>", "Directory to save output", ".").option(
1859
+ "--async",
1860
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1861
+ ).action(async function(options) {
1765
1862
  try {
1863
+ if (options.hdTexture && options.aiModel && options.aiModel !== "meshy-6") {
1864
+ throw new Error(
1865
+ "--hd-texture requires --ai-model meshy-6 (got '" + options.aiModel + "')"
1866
+ );
1867
+ }
1766
1868
  const ctx = createContext(this);
1767
1869
  const params = {};
1768
1870
  if (options.prompt) params.text_style_prompt = options.prompt;
@@ -1770,11 +1872,17 @@ function createProcess3dCommand() {
1770
1872
  if (options.pbr) params.pbr = true;
1771
1873
  if (options.hdTexture) params.hd_texture = true;
1772
1874
  if (options.aiModel) params.ai_model = options.aiModel;
1773
- const data = await ctx.client.process3d({
1875
+ const request = {
1774
1876
  task_id: options.taskId,
1775
1877
  operation: "retexture",
1776
1878
  params: toJsonObject2(params)
1777
- });
1879
+ };
1880
+ if (options.async) {
1881
+ const ack = await ctx.client.process3d(request, { async: true });
1882
+ printSuccess("process3d.retexture", ack, ctx);
1883
+ return;
1884
+ }
1885
+ const data = await ctx.client.process3d(request);
1778
1886
  const localPath = await saveProcess3dOutput(data, "retexture", options.outputDir);
1779
1887
  if (localPath) data.local_path = localPath;
1780
1888
  printSuccess("process3d.retexture", data, ctx);
@@ -1784,7 +1892,10 @@ function createProcess3dCommand() {
1784
1892
  })
1785
1893
  );
1786
1894
  command.addCommand(
1787
- new Command8("rig").description("Rig a Meshy model for character animation").option("--task-id <id>", "Meshy task ID").option("--height <meters>", "Estimated character height in meters").option("--model-url <url>", "Model URL to rig without an existing task").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1895
+ new Command8("rig").description("Rig a Meshy model for character animation").option("--task-id <id>", "Meshy task ID").option("--height <meters>", "Estimated character height in meters").option("--model-url <url>", "Model URL to rig without an existing task").option("--output-dir <dir>", "Directory to save output", ".").option(
1896
+ "--async",
1897
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1898
+ ).action(async function(options) {
1788
1899
  try {
1789
1900
  if (!options.taskId && !options.modelUrl) {
1790
1901
  throw new Error("Either --task-id or --model-url is required");
@@ -1793,11 +1904,17 @@ function createProcess3dCommand() {
1793
1904
  const params = {};
1794
1905
  if (options.height) params.height_meters = Number(options.height);
1795
1906
  if (options.modelUrl) params.model_url = options.modelUrl;
1796
- const data = await ctx.client.process3d({
1907
+ const request = {
1797
1908
  task_id: options.taskId ?? "",
1798
1909
  operation: "rig",
1799
1910
  params: toJsonObject2(params)
1800
- });
1911
+ };
1912
+ if (options.async) {
1913
+ const ack = await ctx.client.process3d(request, { async: true });
1914
+ printSuccess("process3d.rig", ack, ctx);
1915
+ return;
1916
+ }
1917
+ const data = await ctx.client.process3d(request);
1801
1918
  const localPath = await saveProcess3dOutput(data, "rig", options.outputDir);
1802
1919
  if (localPath) data.local_path = localPath;
1803
1920
  printSuccess("process3d.rig", data, ctx);
@@ -1807,7 +1924,10 @@ function createProcess3dCommand() {
1807
1924
  })
1808
1925
  );
1809
1926
  command.addCommand(
1810
- new Command8("animate").description("Apply a preset animation to a rigged Meshy character").requiredOption("--task-id <id>", "Meshy rigging task ID").requiredOption("--action-id <n>", "Animation preset ID (see docs for full list)").option("--fps <n>", "Target frame rate: 24, 25, 30, or 60").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1927
+ new Command8("animate").description("Apply a preset animation to a rigged Meshy character").requiredOption("--task-id <id>", "Meshy rigging task ID").requiredOption("--action-id <n>", "Animation preset ID (see docs for full list)").option("--fps <n>", "Target frame rate: 24, 25, 30, or 60").option("--output-dir <dir>", "Directory to save output", ".").option(
1928
+ "--async",
1929
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1930
+ ).action(async function(options) {
1811
1931
  try {
1812
1932
  const ctx = createContext(this);
1813
1933
  const params = {
@@ -1816,11 +1936,17 @@ function createProcess3dCommand() {
1816
1936
  if (options.fps) {
1817
1937
  params.fps = Number(options.fps);
1818
1938
  }
1819
- const data = await ctx.client.process3d({
1939
+ const request = {
1820
1940
  task_id: options.taskId,
1821
1941
  operation: "animate",
1822
1942
  params: toJsonObject2(params)
1823
- });
1943
+ };
1944
+ if (options.async) {
1945
+ const ack = await ctx.client.process3d(request, { async: true });
1946
+ printSuccess("process3d.animate", ack, ctx);
1947
+ return;
1948
+ }
1949
+ const data = await ctx.client.process3d(request);
1824
1950
  const localPath = await saveProcess3dOutput(data, "animate", options.outputDir);
1825
1951
  if (localPath) data.local_path = localPath;
1826
1952
  printSuccess("process3d.animate", data, ctx);
@@ -1830,19 +1956,33 @@ function createProcess3dCommand() {
1830
1956
  })
1831
1957
  );
1832
1958
  command.addCommand(
1833
- new Command8("refine").description("Refine a Meshy preview model into a higher quality result").requiredOption("--task-id <id>", "Meshy preview task ID").option("--pbr", "Enable PBR materials").option("--hd-texture", "Request 4K texture output").option("--texture-prompt <text>", "Optional texture prompt for the refinement pass").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--output-dir <dir>", "Directory to save output", ".").action(async function(options) {
1959
+ new Command8("refine").description("Refine a Meshy preview model into a higher quality result").requiredOption("--task-id <id>", "Meshy preview task ID").option("--pbr", "Enable PBR materials").option("--hd-texture", "Request 4K texture output (requires --ai-model meshy-6)").option("--texture-prompt <text>", "Optional texture prompt for the refinement pass").option("--ai-model <name>", "Meshy model: meshy-5, meshy-6, latest").option("--output-dir <dir>", "Directory to save output", ".").option(
1960
+ "--async",
1961
+ "Submit asynchronously; return job_id immediately without waiting. Poll with: asset-gateway job status <id>"
1962
+ ).action(async function(options) {
1834
1963
  try {
1964
+ if (options.hdTexture && options.aiModel && options.aiModel !== "meshy-6") {
1965
+ throw new Error(
1966
+ "--hd-texture requires --ai-model meshy-6 (got '" + options.aiModel + "')"
1967
+ );
1968
+ }
1835
1969
  const ctx = createContext(this);
1836
1970
  const params = {};
1837
1971
  if (options.pbr) params.pbr = true;
1838
1972
  if (options.hdTexture) params.hd_texture = true;
1839
1973
  if (options.texturePrompt) params.texture_prompt = options.texturePrompt;
1840
1974
  if (options.aiModel) params.ai_model = options.aiModel;
1841
- const data = await ctx.client.process3d({
1975
+ const request = {
1842
1976
  task_id: options.taskId,
1843
1977
  operation: "refine",
1844
1978
  params: toJsonObject2(params)
1845
- });
1979
+ };
1980
+ if (options.async) {
1981
+ const ack = await ctx.client.process3d(request, { async: true });
1982
+ printSuccess("process3d.refine", ack, ctx);
1983
+ return;
1984
+ }
1985
+ const data = await ctx.client.process3d(request);
1846
1986
  const localPath = await saveProcess3dOutput(data, "refine", options.outputDir);
1847
1987
  if (localPath) data.local_path = localPath;
1848
1988
  printSuccess("process3d.refine", data, ctx);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doufunao123/asset-gateway",
3
- "version": "0.24.0",
3
+ "version": "0.25.1",
4
4
  "description": "Universal asset generation gateway CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,7 +27,7 @@
27
27
  "node": ">=20"
28
28
  },
29
29
  "dependencies": {
30
- "@doufunao123/assetforge-sdk": "^0.10.0",
30
+ "@doufunao123/assetforge-sdk": "^0.11.1",
31
31
  "commander": "^13.1.0"
32
32
  },
33
33
  "devDependencies": {