@spaceflow/cli
Advanced tools
+9
-9
@@ -6,3 +6,3 @@ #!/usr/bin/env node | ||
| import { homedir } from "os"; | ||
| import { SPACEFLOW_DIR, ensureDependencies, ensureSpaceflowPackageJson, getDependencies, getEnvFilePaths, loadEnvFiles } from "@spaceflow/shared"; | ||
| import { RC_FILE_NAME, SPACEFLOW_DIR, ensureDependencies, ensureSpaceflowPackageJson, getDependencies, getEnvFilePaths, loadEnvFiles } from "@spaceflow/shared"; | ||
| var __webpack_exports__ = {}; | ||
@@ -44,4 +44,4 @@ | ||
| * 获取 .spaceflow 目录路径 | ||
| * 从 cwd 向上遍历查找已存在的 .spaceflow 目录, | ||
| * 如果整个目录树中都没有,则回退到 ~/.spaceflow | ||
| * 1. 从 cwd 向上遍历查找 .spaceflowrc,找到则在同级目录下使用 .spaceflow | ||
| * 2. 都没找到则回退到 ~/.spaceflow | ||
| */ function getSpaceflowDir(cwd) { | ||
@@ -51,5 +51,5 @@ let current = resolve(cwd); | ||
| while(true){ | ||
| const candidate = join(current, SPACEFLOW_DIR); | ||
| if (existsSync(candidate)) { | ||
| return candidate; | ||
| // 检查当前目录是否有 .spaceflowrc | ||
| if (existsSync(join(current, RC_FILE_NAME))) { | ||
| return join(current, SPACEFLOW_DIR); | ||
| } | ||
@@ -60,3 +60,3 @@ const parent = dirname(current); | ||
| } | ||
| // 没有找到任何工作区级 .spaceflow,回退到全局目录 ~/.spaceflow | ||
| // 没有找到 .spaceflowrc,回退到全局目录 ~/.spaceflow | ||
| return join(home, SPACEFLOW_DIR); | ||
@@ -144,7 +144,7 @@ } | ||
| const cli_spaceflowDir = getSpaceflowDir(effectiveCwd); | ||
| ensureSpaceflowPackageJson(cli_spaceflowDir); | ||
| ensureSpaceflowPackageJson(cli_spaceflowDir, effectiveCwd); | ||
| // 3. 确保依赖已安装 | ||
| ensureDependencies(cli_spaceflowDir); | ||
| // 4. CLI 版本号(由 rspack DefinePlugin 在构建时注入) | ||
| const cliVersion = "0.33.0"; | ||
| const cliVersion = "0.34.0"; | ||
| // 5. 读取外部扩展列表 | ||
@@ -151,0 +151,0 @@ const extNames = readExternalExtensions(effectiveCwd); |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"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"} | ||
| {"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 RC_FILE_NAME,\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 * 1. 从 cwd 向上遍历查找 .spaceflowrc,找到则在同级目录下使用 .spaceflow\n * 2. 都没找到则回退到 ~/.spaceflow\n */\nfunction getSpaceflowDir(cwd: string): string {\n let current = resolve(cwd);\n const home = homedir();\n\n while (true) {\n // 检查当前目录是否有 .spaceflowrc\n if (existsSync(join(current, RC_FILE_NAME))) {\n return join(current, SPACEFLOW_DIR);\n }\n const parent = dirname(current);\n if (parent === current) break; // 文件系统根\n current = parent;\n }\n\n // 没有找到 .spaceflowrc,回退到全局目录 ~/.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, effectiveCwd);\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","RC_FILE_NAME","ensureSpaceflowPackageJson","ensureDependencies","getDependencies","loadEnvFiles","getEnvFilePaths","getEffectiveCwd","process","getSpaceflowDir","cwd","current","home","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;AASF;AAE3B;;;;;;;;;CASC,GAED;;;CAGC,GACD,SAASgB;IACP,OAAOV,OAAOA,CAACW,QAAQ,GAAG,CAAC,aAAa,IAAIA,QAAQ,GAAG;AACzD;AAEA;;;;CAIC,GACD,SAASC,gBAAgBC,GAAW;IAClC,IAAIC,UAAUd,OAAOA,CAACa;IACtB,MAAME,OAAOb,OAAOA;IAEpB,MAAO,KAAM;QACX,yBAAyB;QACzB,IAAIR,UAAUA,CAACI,IAAIA,CAACgB,SAASV,YAAYA,IAAI;YAC3C,OAAON,IAAIA,CAACgB,SAASX,aAAaA;QACpC;QACA,MAAMa,SAASjB,OAAOA,CAACe;QACvB,IAAIE,WAAWF,SAAS,OAAO,QAAQ;QACvCA,UAAUE;IACZ;IAEA,yCAAyC;IACzC,OAAOlB,IAAIA,CAACiB,MAAMZ,aAAaA;AACjC;AAEA;;CAEC,GACD,SAASc,uBAAuBJ,GAAW;IACzC,MAAMK,OAAOX,eAAeA,CAACM,KAAK;QAAE,OAAO;IAAK;IAChD,OAAOM,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,EAAEf,GAAW;IACtD,IAAI;QACFZ,QAAQA,CAAC,CAAC,MAAM,EAAE2B,UAAU,EAAE,EAAEjB,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,OAAOmB,OAAY;QACnB,yBAAyB;QACzB,6CAA6C;QAC7CrB,QAAQ,IAAI,CAACqB,MAAM,MAAM,IAAI;IAC/B;AACF;AAEA,gBAAgB;AAEhB,qCAAqC;AACrC,MAAMC,eAAevB;AAErB,wDAAwD;AACxDF,YAAYA,CAACC,eAAeA,CAACwB;AAE7B,2DAA2D;AAC3D,MAAMP,gBAAYA,GAAGd,gBAAgBqB;AACrC5B,0BAA0BA,CAACqB,gBAAYA,EAAEO;AAEzC,aAAa;AACb3B,kBAAkBA,CAACoB,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"} |
+2
-2
| { | ||
| "name": "@spaceflow/cli", | ||
| "version": "0.33.0", | ||
| "version": "0.34.0", | ||
| "description": "Spaceflow CLI 工具", | ||
@@ -26,3 +26,3 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "@spaceflow/shared": "0.2.0" | ||
| "@spaceflow/shared": "0.3.0" | ||
| }, | ||
@@ -29,0 +29,0 @@ "devDependencies": { |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
16304
0.87%+ Added
- Removed
Updated