New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@spaceflow/cli

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@spaceflow/cli - npm Package Compare versions

Comparing version
0.32.0
to
0.33.0
+36
-23
dist/cli.js

@@ -36,7 +36,13 @@ #!/usr/bin/env node

*/ /**
* 获取有效工作目录
* 优先使用 SPACEFLOW_CWD 环境变量(MCP 场景由编辑器注入),否则 process.cwd()
*/ function getEffectiveCwd() {
return resolve(process.env.SPACEFLOW_CWD || process.cwd());
}
/**
* 获取 .spaceflow 目录路径
* 从 cwd 向上遍历查找已存在的 .spaceflow 目录,
* 如果整个目录树中都没有,则回退到 cwd/.spaceflow
*/ function getSpaceflowDir() {
let current = resolve(process.cwd());
* 如果整个目录树中都没有,则回退到 ~/.spaceflow
*/ function getSpaceflowDir(cwd) {
let current = resolve(cwd);
const home = homedir();

@@ -57,4 +63,4 @@ while(true){

* 从 spaceflow.json / .spaceflowrc 读取外部扩展包名列表
*/ function readExternalExtensions() {
const deps = getDependencies(undefined, {
*/ function readExternalExtensions(cwd) {
const deps = getDependencies(cwd, {
local: true

@@ -69,3 +75,3 @@ });

* (扩展在 import 阶段就会调用 t() 获取 description,必须先初始化 i18n)
*/ function generateIndexContent(extensions) {
*/ function generateIndexContent(extensions, version) {
const dynamicImports = extensions.map((name)=>` import('${name}').then(m => m.default || m.extension || m),`).join("\n");

@@ -82,3 +88,3 @@ return `import { exec, initCliI18n } from '@spaceflow/core';

await exec(extensions);
await exec(extensions, { cliVersion: '${version}' });
}

@@ -94,3 +100,3 @@

* 生成 .spaceflow/bin/index.js 文件
*/ function generateBinFile(spaceflowDir, extensions) {
*/ function generateBinFile(spaceflowDir, extensions, version) {
const binDir = join(spaceflowDir, "bin");

@@ -103,3 +109,3 @@ const indexPath = join(binDir, "index.js");

}
const content = generateIndexContent(extensions);
const content = generateIndexContent(extensions, version);
// 仅在内容变化时写入

@@ -117,8 +123,11 @@ if (existsSync(indexPath)) {

* 执行生成的 index.js
*/ function executeIndexFile(indexPath) {
*/ function executeIndexFile(indexPath, cwd) {
try {
execSync(`node "${indexPath}" ${process.argv.slice(2).join(" ")}`, {
cwd: process.cwd(),
cwd,
stdio: "inherit",
env: process.env
env: {
...process.env,
SPACEFLOW_CWD: cwd
}
});

@@ -132,17 +141,21 @@ } catch (error) {

// ---- 主流程 ----
// 0. 先加载 .env 文件,确保 process.env 在子进程(含 schema 模块求值)前已就绪
loadEnvFiles(getEnvFilePaths());
// 1. 确保 .spaceflow/ 目录结构完整(目录 + package.json + .gitignore)
const cli_spaceflowDir = getSpaceflowDir();
// 0. 解析有效工作目录(优先 SPACEFLOW_CWD 环境变量)
const effectiveCwd = getEffectiveCwd();
// 1. 先加载 .env 文件,确保 process.env 在子进程(含 schema 模块求值)前已就绪
loadEnvFiles(getEnvFilePaths(effectiveCwd));
// 2. 确保 .spaceflow/ 目录结构完整(目录 + package.json + .gitignore)
const cli_spaceflowDir = getSpaceflowDir(effectiveCwd);
ensureSpaceflowPackageJson(cli_spaceflowDir);
// 2. 确保依赖已安装
// 3. 确保依赖已安装
ensureDependencies(cli_spaceflowDir);
// 3. 读取外部扩展列表
const extNames = readExternalExtensions();
// 4. 生成 .spaceflow/bin/index.js
const cli_indexPath = generateBinFile(cli_spaceflowDir, extNames);
// 5. 执行生成的入口文件
executeIndexFile(cli_indexPath);
// 4. CLI 版本号(由 rspack DefinePlugin 在构建时注入)
const cliVersion = "0.33.0";
// 5. 读取外部扩展列表
const extNames = readExternalExtensions(effectiveCwd);
// 6. 生成 .spaceflow/bin/index.js
const cli_indexPath = generateBinFile(cli_spaceflowDir, extNames, cliVersion);
// 7. 执行生成的入口文件
executeIndexFile(cli_indexPath, effectiveCwd);
//# sourceMappingURL=cli.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cli.js","sources":["webpack://@spaceflow/cli/./src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from \"fs\";\nimport { join, dirname, resolve } from \"path\";\nimport { execSync } from \"child_process\";\nimport { homedir } from \"os\";\nimport {\n SPACEFLOW_DIR,\n ensureSpaceflowPackageJson,\n ensureDependencies,\n getDependencies,\n loadEnvFiles,\n getEnvFilePaths,\n} from \"@spaceflow/shared\";\n\n/**\n * Spaceflow CLI — 壳子入口\n *\n * 职责:\n * 1. 确保 .spaceflow/ 目录、package.json、.gitignore 完整\n * 2. 确保依赖已安装(pnpm install)\n * 3. 读取外部扩展列表\n * 4. 生成 .spaceflow/bin/index.js(静态 import 入口文件)\n * 5. spawn 子进程执行 node .spaceflow/bin/index.js\n */\n\n/**\n * 获取 .spaceflow 目录路径\n * 从 cwd 向上遍历查找已存在的 .spaceflow 目录,\n * 如果整个目录树中都没有,则回退到 cwd/.spaceflow\n */\nfunction getSpaceflowDir(): string {\n let current = resolve(process.cwd());\n const home = homedir();\n\n while (true) {\n const candidate = join(current, SPACEFLOW_DIR);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = dirname(current);\n if (parent === current) break; // 文件系统根\n current = parent;\n }\n\n // 没有找到任何工作区级 .spaceflow,回退到全局目录 ~/.spaceflow\n return join(home, SPACEFLOW_DIR);\n}\n\n/**\n * 从 spaceflow.json / .spaceflowrc 读取外部扩展包名列表\n */\nfunction readExternalExtensions(): string[] {\n const deps = getDependencies(undefined, { local: true });\n return Object.keys(deps);\n}\n\n/**\n * 生成 .spaceflow/bin/index.js 内容\n *\n * 使用 dynamic import 加载扩展,确保 i18n 在扩展模块执行前已初始化\n * (扩展在 import 阶段就会调用 t() 获取 description,必须先初始化 i18n)\n */\nfunction generateIndexContent(extensions: string[]): string {\n const dynamicImports = extensions\n .map((name) => ` import('${name}').then(m => m.default || m.extension || m),`)\n .join(\"\\n\");\n\n return `import { exec, initCliI18n } from '@spaceflow/core';\n\nasync function bootstrap() {\n // 初始化 i18n,再加载扩展(扩展 import 时会调用 t() 获取翻译)\n initCliI18n();\n\n const extensions = await Promise.all([\n${dynamicImports}\n ]);\n\n await exec(extensions);\n}\n\nbootstrap().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n`;\n}\n\n/**\n * 生成 .spaceflow/bin/index.js 文件\n */\nfunction generateBinFile(spaceflowDir: string, extensions: string[]): string {\n const binDir = join(spaceflowDir, \"bin\");\n const indexPath = join(binDir, \"index.js\");\n\n if (!existsSync(binDir)) {\n mkdirSync(binDir, { recursive: true });\n }\n\n const content = generateIndexContent(extensions);\n\n // 仅在内容变化时写入\n if (existsSync(indexPath)) {\n const existing = readFileSync(indexPath, \"utf-8\");\n if (existing === content) {\n return indexPath;\n }\n }\n\n writeFileSync(indexPath, content, \"utf-8\");\n return indexPath;\n}\n\n/**\n * 执行生成的 index.js\n */\nfunction executeIndexFile(indexPath: string): void {\n try {\n execSync(`node \"${indexPath}\" ${process.argv.slice(2).join(\" \")}`, {\n cwd: process.cwd(),\n stdio: \"inherit\",\n env: process.env,\n });\n } catch (error: any) {\n // execSync 在子进程非零退出时抛出错误\n // 子进程的 stdout/stderr 已通过 stdio: \"inherit\" 输出\n process.exit(error.status || 1);\n }\n}\n\n// ---- 主流程 ----\n\n// 0. 先加载 .env 文件,确保 process.env 在子进程(含 schema 模块求值)前已就绪\nloadEnvFiles(getEnvFilePaths());\n\n// 1. 确保 .spaceflow/ 目录结构完整(目录 + package.json + .gitignore)\nconst spaceflowDir = getSpaceflowDir();\nensureSpaceflowPackageJson(spaceflowDir);\n\n// 2. 确保依赖已安装\nensureDependencies(spaceflowDir);\n\n// 3. 读取外部扩展列表\nconst extNames = readExternalExtensions();\n\n// 4. 生成 .spaceflow/bin/index.js\nconst indexPath = generateBinFile(spaceflowDir, extNames);\n\n// 5. 执行生成的入口文件\nexecuteIndexFile(indexPath);\n"],"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","resolve","execSync","homedir","SPACEFLOW_DIR","ensureSpaceflowPackageJson","ensureDependencies","getDependencies","loadEnvFiles","getEnvFilePaths","getSpaceflowDir","current","process","home","candidate","parent","readExternalExtensions","deps","undefined","Object","generateIndexContent","extensions","dynamicImports","name","generateBinFile","spaceflowDir","binDir","indexPath","content","existing","executeIndexFile","error","extNames"],"mappings":";;;;;;;;;;;;;;;;;;;;AACwE;AAC1B;AACL;AACZ;AAQF;AAE3B;;;;;;;;;CASC,GAED;;;;CAIC,GACD,SAASe;IACP,IAAIC,UAAUV,OAAOA,CAACW,QAAQ,GAAG;IACjC,MAAMC,OAAOV,OAAOA;IAEpB,MAAO,KAAM;QACX,MAAMW,YAAYf,IAAIA,CAACY,SAASP,aAAaA;QAC7C,IAAIT,UAAUA,CAACmB,YAAY;YACzB,OAAOA;QACT;QACA,MAAMC,SAASf,OAAOA,CAACW;QACvB,IAAII,WAAWJ,SAAS,OAAO,QAAQ;QACvCA,UAAUI;IACZ;IAEA,6CAA6C;IAC7C,OAAOhB,IAAIA,CAACc,MAAMT,aAAaA;AACjC;AAEA;;CAEC,GACD,SAASY;IACP,MAAMC,OAAOV,eAAeA,CAACW,WAAW;QAAE,OAAO;IAAK;IACtD,OAAOC,OAAO,IAAI,CAACF;AACrB;AAEA;;;;;CAKC,GACD,SAASG,qBAAqBC,UAAoB;IAChD,MAAMC,iBAAiBD,WACpB,GAAG,CAAC,CAACE,OAAS,CAAC,YAAY,EAAEA,KAAK,4CAA4C,CAAC,EAC/E,IAAI,CAAC;IAER,OAAO,CAAC;;;;;;;AAOV,EAAED,eAAe;;;;;;;;;;AAUjB,CAAC;AACD;AAEA;;CAEC,GACD,SAASE,gBAAgBC,YAAoB,EAAEJ,UAAoB;IACjE,MAAMK,SAAS3B,IAAIA,CAAC0B,cAAc;IAClC,MAAME,YAAY5B,IAAIA,CAAC2B,QAAQ;IAE/B,IAAI,CAAC/B,UAAUA,CAAC+B,SAAS;QACvB5B,SAASA,CAAC4B,QAAQ;YAAE,WAAW;QAAK;IACtC;IAEA,MAAME,UAAUR,qBAAqBC;IAErC,YAAY;IACZ,IAAI1B,UAAUA,CAACgC,YAAY;QACzB,MAAME,WAAWjC,YAAYA,CAAC+B,WAAW;QACzC,IAAIE,aAAaD,SAAS;YACxB,OAAOD;QACT;IACF;IAEA9B,aAAaA,CAAC8B,WAAWC,SAAS;IAClC,OAAOD;AACT;AAEA;;CAEC,GACD,SAASG,iBAAiBH,SAAiB;IACzC,IAAI;QACFzB,QAAQA,CAAC,CAAC,MAAM,EAAEyB,UAAU,EAAE,EAAEf,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACjE,KAAKA,QAAQ,GAAG;YAChB,OAAO;YACP,KAAKA,QAAQ,GAAG;QAClB;IACF,EAAE,OAAOmB,OAAY;QACnB,yBAAyB;QACzB,6CAA6C;QAC7CnB,QAAQ,IAAI,CAACmB,MAAM,MAAM,IAAI;IAC/B;AACF;AAEA,gBAAgB;AAEhB,wDAAwD;AACxDvB,YAAYA,CAACC,eAAeA;AAE5B,2DAA2D;AAC3D,MAAMgB,gBAAYA,GAAGf;AACrBL,0BAA0BA,CAACoB,gBAAYA;AAEvC,aAAa;AACbnB,kBAAkBA,CAACmB,gBAAYA;AAE/B,cAAc;AACd,MAAMO,WAAWhB;AAEjB,gCAAgC;AAChC,MAAMW,aAASA,GAAGH,gBAAgBC,gBAAYA,EAAEO;AAEhD,eAAe;AACfF,iBAAiBH,aAASA"}
{"version":3,"file":"cli.js","sources":["webpack://@spaceflow/cli/./src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\ndeclare const __CLI_VERSION__: string;\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from \"fs\";\nimport { join, dirname, resolve } from \"path\";\nimport { execSync } from \"child_process\";\nimport { homedir } from \"os\";\nimport {\n SPACEFLOW_DIR,\n ensureSpaceflowPackageJson,\n ensureDependencies,\n getDependencies,\n loadEnvFiles,\n getEnvFilePaths,\n} from \"@spaceflow/shared\";\n\n/**\n * Spaceflow CLI — 壳子入口\n *\n * 职责:\n * 1. 确保 .spaceflow/ 目录、package.json、.gitignore 完整\n * 2. 确保依赖已安装(pnpm install)\n * 3. 读取外部扩展列表\n * 4. 生成 .spaceflow/bin/index.js(静态 import 入口文件)\n * 5. spawn 子进程执行 node .spaceflow/bin/index.js\n */\n\n/**\n * 获取有效工作目录\n * 优先使用 SPACEFLOW_CWD 环境变量(MCP 场景由编辑器注入),否则 process.cwd()\n */\nfunction getEffectiveCwd(): string {\n return resolve(process.env.SPACEFLOW_CWD || process.cwd());\n}\n\n/**\n * 获取 .spaceflow 目录路径\n * 从 cwd 向上遍历查找已存在的 .spaceflow 目录,\n * 如果整个目录树中都没有,则回退到 ~/.spaceflow\n */\nfunction getSpaceflowDir(cwd: string): string {\n let current = resolve(cwd);\n const home = homedir();\n\n while (true) {\n const candidate = join(current, SPACEFLOW_DIR);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = dirname(current);\n if (parent === current) break; // 文件系统根\n current = parent;\n }\n\n // 没有找到任何工作区级 .spaceflow,回退到全局目录 ~/.spaceflow\n return join(home, SPACEFLOW_DIR);\n}\n\n/**\n * 从 spaceflow.json / .spaceflowrc 读取外部扩展包名列表\n */\nfunction readExternalExtensions(cwd: string): string[] {\n const deps = getDependencies(cwd, { local: true });\n return Object.keys(deps);\n}\n\n/**\n * 生成 .spaceflow/bin/index.js 内容\n *\n * 使用 dynamic import 加载扩展,确保 i18n 在扩展模块执行前已初始化\n * (扩展在 import 阶段就会调用 t() 获取 description,必须先初始化 i18n)\n */\nfunction generateIndexContent(extensions: string[], version: string): string {\n const dynamicImports = extensions\n .map((name) => ` import('${name}').then(m => m.default || m.extension || m),`)\n .join(\"\\n\");\n\n return `import { exec, initCliI18n } from '@spaceflow/core';\n\nasync function bootstrap() {\n // 初始化 i18n,再加载扩展(扩展 import 时会调用 t() 获取翻译)\n initCliI18n();\n\n const extensions = await Promise.all([\n${dynamicImports}\n ]);\n\n await exec(extensions, { cliVersion: '${version}' });\n}\n\nbootstrap().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n`;\n}\n\n/**\n * 生成 .spaceflow/bin/index.js 文件\n */\nfunction generateBinFile(spaceflowDir: string, extensions: string[], version: string): string {\n const binDir = join(spaceflowDir, \"bin\");\n const indexPath = join(binDir, \"index.js\");\n\n if (!existsSync(binDir)) {\n mkdirSync(binDir, { recursive: true });\n }\n\n const content = generateIndexContent(extensions, version);\n\n // 仅在内容变化时写入\n if (existsSync(indexPath)) {\n const existing = readFileSync(indexPath, \"utf-8\");\n if (existing === content) {\n return indexPath;\n }\n }\n\n writeFileSync(indexPath, content, \"utf-8\");\n return indexPath;\n}\n\n/**\n * 执行生成的 index.js\n */\nfunction executeIndexFile(indexPath: string, cwd: string): void {\n try {\n execSync(`node \"${indexPath}\" ${process.argv.slice(2).join(\" \")}`, {\n cwd,\n stdio: \"inherit\",\n env: { ...process.env, SPACEFLOW_CWD: cwd },\n });\n } catch (error: any) {\n // execSync 在子进程非零退出时抛出错误\n // 子进程的 stdout/stderr 已通过 stdio: \"inherit\" 输出\n process.exit(error.status || 1);\n }\n}\n\n// ---- 主流程 ----\n\n// 0. 解析有效工作目录(优先 SPACEFLOW_CWD 环境变量)\nconst effectiveCwd = getEffectiveCwd();\n\n// 1. 先加载 .env 文件,确保 process.env 在子进程(含 schema 模块求值)前已就绪\nloadEnvFiles(getEnvFilePaths(effectiveCwd));\n\n// 2. 确保 .spaceflow/ 目录结构完整(目录 + package.json + .gitignore)\nconst spaceflowDir = getSpaceflowDir(effectiveCwd);\nensureSpaceflowPackageJson(spaceflowDir);\n\n// 3. 确保依赖已安装\nensureDependencies(spaceflowDir);\n\n// 4. CLI 版本号(由 rspack DefinePlugin 在构建时注入)\nconst cliVersion = __CLI_VERSION__;\n\n// 5. 读取外部扩展列表\nconst extNames = readExternalExtensions(effectiveCwd);\n\n// 6. 生成 .spaceflow/bin/index.js\nconst indexPath = generateBinFile(spaceflowDir, extNames, cliVersion);\n\n// 7. 执行生成的入口文件\nexecuteIndexFile(indexPath, effectiveCwd);\n"],"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","resolve","execSync","homedir","SPACEFLOW_DIR","ensureSpaceflowPackageJson","ensureDependencies","getDependencies","loadEnvFiles","getEnvFilePaths","getEffectiveCwd","process","getSpaceflowDir","cwd","current","home","candidate","parent","readExternalExtensions","deps","Object","generateIndexContent","extensions","version","dynamicImports","name","generateBinFile","spaceflowDir","binDir","indexPath","content","existing","executeIndexFile","error","effectiveCwd","cliVersion","__CLI_VERSION__","extNames"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGwE;AAC1B;AACL;AACZ;AAQF;AAE3B;;;;;;;;;CASC,GAED;;;CAGC,GACD,SAASe;IACP,OAAOT,OAAOA,CAACU,QAAQ,GAAG,CAAC,aAAa,IAAIA,QAAQ,GAAG;AACzD;AAEA;;;;CAIC,GACD,SAASC,gBAAgBC,GAAW;IAClC,IAAIC,UAAUb,OAAOA,CAACY;IACtB,MAAME,OAAOZ,OAAOA;IAEpB,MAAO,KAAM;QACX,MAAMa,YAAYjB,IAAIA,CAACe,SAASV,aAAaA;QAC7C,IAAIT,UAAUA,CAACqB,YAAY;YACzB,OAAOA;QACT;QACA,MAAMC,SAASjB,OAAOA,CAACc;QACvB,IAAIG,WAAWH,SAAS,OAAO,QAAQ;QACvCA,UAAUG;IACZ;IAEA,6CAA6C;IAC7C,OAAOlB,IAAIA,CAACgB,MAAMX,aAAaA;AACjC;AAEA;;CAEC,GACD,SAASc,uBAAuBL,GAAW;IACzC,MAAMM,OAAOZ,eAAeA,CAACM,KAAK;QAAE,OAAO;IAAK;IAChD,OAAOO,OAAO,IAAI,CAACD;AACrB;AAEA;;;;;CAKC,GACD,SAASE,qBAAqBC,UAAoB,EAAEC,OAAe;IACjE,MAAMC,iBAAiBF,WACpB,GAAG,CAAC,CAACG,OAAS,CAAC,YAAY,EAAEA,KAAK,4CAA4C,CAAC,EAC/E,IAAI,CAAC;IAER,OAAO,CAAC;;;;;;;AAOV,EAAED,eAAe;;;wCAGuB,EAAED,QAAQ;;;;;;;AAOlD,CAAC;AACD;AAEA;;CAEC,GACD,SAASG,gBAAgBC,YAAoB,EAAEL,UAAoB,EAAEC,OAAe;IAClF,MAAMK,SAAS7B,IAAIA,CAAC4B,cAAc;IAClC,MAAME,YAAY9B,IAAIA,CAAC6B,QAAQ;IAE/B,IAAI,CAACjC,UAAUA,CAACiC,SAAS;QACvB9B,SAASA,CAAC8B,QAAQ;YAAE,WAAW;QAAK;IACtC;IAEA,MAAME,UAAUT,qBAAqBC,YAAYC;IAEjD,YAAY;IACZ,IAAI5B,UAAUA,CAACkC,YAAY;QACzB,MAAME,WAAWnC,YAAYA,CAACiC,WAAW;QACzC,IAAIE,aAAaD,SAAS;YACxB,OAAOD;QACT;IACF;IAEAhC,aAAaA,CAACgC,WAAWC,SAAS;IAClC,OAAOD;AACT;AAEA;;CAEC,GACD,SAASG,iBAAiBH,SAAiB,EAAEhB,GAAW;IACtD,IAAI;QACFX,QAAQA,CAAC,CAAC,MAAM,EAAE2B,UAAU,EAAE,EAAElB,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACjEE;YACA,OAAO;YACP,KAAK;gBAAE,GAAGF,QAAQ,GAAG;gBAAE,eAAeE;YAAI;QAC5C;IACF,EAAE,OAAOoB,OAAY;QACnB,yBAAyB;QACzB,6CAA6C;QAC7CtB,QAAQ,IAAI,CAACsB,MAAM,MAAM,IAAI;IAC/B;AACF;AAEA,gBAAgB;AAEhB,qCAAqC;AACrC,MAAMC,eAAexB;AAErB,wDAAwD;AACxDF,YAAYA,CAACC,eAAeA,CAACyB;AAE7B,2DAA2D;AAC3D,MAAMP,gBAAYA,GAAGf,gBAAgBsB;AACrC7B,0BAA0BA,CAACsB,gBAAYA;AAEvC,aAAa;AACbrB,kBAAkBA,CAACqB,gBAAYA;AAE/B,2CAA2C;AAC3C,MAAMQ,aAAaC,QAAeA;AAElC,cAAc;AACd,MAAMC,WAAWnB,uBAAuBgB;AAExC,gCAAgC;AAChC,MAAML,aAASA,GAAGH,gBAAgBC,gBAAYA,EAAEU,UAAUF;AAE1D,eAAe;AACfH,iBAAiBH,aAASA,EAAEK"}
{
"name": "@spaceflow/cli",
"version": "0.32.0",
"version": "0.33.0",
"description": "Spaceflow CLI 工具",

@@ -5,0 +5,0 @@ "license": "MIT",