@nikelyh/metamorph 2.0.7 → 2.0.8

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 +29 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1837,25 +1837,34 @@ var managePackagesProcessor = {
1837
1837
  }
1838
1838
  const packageJsonPath = path4.join(shadowDir, "package.json");
1839
1839
  if (fs5.existsSync(packageJsonPath)) {
1840
- const { execSync: execSync2 } = await import("child_process");
1841
- const execOpts = { cwd: shadowDir, stdio: "inherit" };
1840
+ const { spawn } = await import("child_process");
1841
+ const runCommandAsync = (cmd, args) => {
1842
+ return new Promise((resolve3, reject) => {
1843
+ const proc = spawn(cmd, args, { cwd: shadowDir, stdio: "inherit", shell: true });
1844
+ proc.on("close", (code) => {
1845
+ if (code === 0) resolve3();
1846
+ else reject(new Error(`Command ${cmd} ${args.join(" ")} failed with code ${code}`));
1847
+ });
1848
+ proc.on("error", reject);
1849
+ });
1850
+ };
1842
1851
  try {
1843
1852
  let toRemove = [];
1844
1853
  if (catalogEntry.dependenciesToRemove) toRemove.push(...catalogEntry.dependenciesToRemove);
1845
1854
  if (catalogEntry.devDependenciesToRemove) toRemove.push(...catalogEntry.devDependenciesToRemove);
1846
1855
  if (toRemove.length > 0) {
1847
1856
  console.log(`[PackageManagerAgent] Uninstalling: ${toRemove.join(" ")}`);
1848
- execSync2(`npm uninstall ${toRemove.join(" ")}`, execOpts);
1857
+ await runCommandAsync("npm", ["uninstall", ...toRemove]);
1849
1858
  }
1850
1859
  if (catalogEntry.dependenciesToAdd && Object.keys(catalogEntry.dependenciesToAdd).length > 0) {
1851
1860
  const deps = Object.entries(catalogEntry.dependenciesToAdd).map(([pkg, ver]) => `${pkg}@${ver}`);
1852
1861
  console.log(`[PackageManagerAgent] Installing dependencies: ${deps.join(" ")}`);
1853
- execSync2(`npm install ${deps.join(" ")}`, execOpts);
1862
+ await runCommandAsync("npm", ["install", ...deps]);
1854
1863
  }
1855
1864
  if (catalogEntry.devDependenciesToAdd && Object.keys(catalogEntry.devDependenciesToAdd).length > 0) {
1856
1865
  const devDeps = Object.entries(catalogEntry.devDependenciesToAdd).map(([pkg, ver]) => `${pkg}@${ver}`);
1857
1866
  console.log(`[PackageManagerAgent] Installing devDependencies: ${devDeps.join(" ")}`);
1858
- execSync2(`npm install -D ${devDeps.join(" ")}`, execOpts);
1867
+ await runCommandAsync("npm", ["install", "-D", ...devDeps]);
1859
1868
  }
1860
1869
  console.log(`[PackageManagerAgent] Successfully updated dependencies via npm.`);
1861
1870
  } catch (err) {
@@ -2200,7 +2209,12 @@ program.command("run [path]").description("Run a migration on the specified dire
2200
2209
  console.log(chalk.gray(`Target: ${targetPath} | ${from} -> ${to}
2201
2210
  `));
2202
2211
  if (!process.env.OPENAI_API_KEY && !process.env.ANTHROPIC_API_KEY) {
2203
- console.log(chalk.yellow(`\u26A0\uFE0F WARNING: No LLM API key detected.
2212
+ console.log(chalk.yellow(`
2213
+ \u26A0\uFE0F WARNING: No LLM API key detected (OPENAI_API_KEY or ANTHROPIC_API_KEY).`));
2214
+ console.log(chalk.yellow(`AI Worker agents will fail if you don't configure a valid key before starting the migration.`));
2215
+ console.log(chalk.yellow(`Please set your API key as an environment variable in your terminal. For example:`));
2216
+ console.log(chalk.yellow(` Linux/macOS: export OPENAI_API_KEY="sk-..."`));
2217
+ console.log(chalk.yellow(` Windows (PowerShell): $env:OPENAI_API_KEY="sk-..."
2204
2218
  `));
2205
2219
  }
2206
2220
  const spinner = ora("Initializing...").start();
@@ -2305,6 +2319,15 @@ program.command("ui").description("Start the Metamorph Dashboard API server").op
2305
2319
  const getPort = (await import("get-port")).default;
2306
2320
  const open = (await import("open")).default;
2307
2321
  const port = await getPort({ port: desiredPort });
2322
+ if (!process.env.OPENAI_API_KEY && !process.env.ANTHROPIC_API_KEY) {
2323
+ console.log(chalk.yellow(`
2324
+ \u26A0\uFE0F WARNING: No LLM API key detected (OPENAI_API_KEY or ANTHROPIC_API_KEY).`));
2325
+ console.log(chalk.yellow(`AI Worker agents will fail if you don't configure a valid key before starting the migration.`));
2326
+ console.log(chalk.yellow(`Please set your API key as an environment variable in your terminal. For example:`));
2327
+ console.log(chalk.yellow(` Linux/macOS: export OPENAI_API_KEY="sk-..."`));
2328
+ console.log(chalk.yellow(` Windows (PowerShell): $env:OPENAI_API_KEY="sk-..."
2329
+ `));
2330
+ }
2308
2331
  const store = new SQLiteStateStore(".metamorph");
2309
2332
  const tools = [
2310
2333
  createReadFileTool(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nikelyh/metamorph",
3
- "version": "2.0.7",
3
+ "version": "2.0.8",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "metamorph": "./bin/metamorph.js"