openspecui 0.9.1 → 0.9.3

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/cli.mjs +86 -25
  2. package/package.json +2 -2
package/dist/cli.mjs CHANGED
@@ -4504,7 +4504,7 @@ var yargs_default = Yargs;
4504
4504
 
4505
4505
  //#endregion
4506
4506
  //#region package.json
4507
- var version = "0.9.1";
4507
+ var version = "0.9.3";
4508
4508
 
4509
4509
  //#endregion
4510
4510
  //#region src/export.ts
@@ -4618,7 +4618,8 @@ function runCommand(cmd, args, cwd) {
4618
4618
  return new Promise((resolvePromise, reject) => {
4619
4619
  const child = spawn(cmd, args, {
4620
4620
  stdio: "inherit",
4621
- cwd
4621
+ cwd,
4622
+ shell: true
4622
4623
  });
4623
4624
  child.on("close", (code) => {
4624
4625
  if (code === 0) resolvePromise();
@@ -4628,6 +4629,66 @@ function runCommand(cmd, args, cwd) {
4628
4629
  });
4629
4630
  }
4630
4631
  /**
4632
+ * Detect the package manager used in the current project
4633
+ */
4634
+ function detectPackageManager() {
4635
+ if (process.env.DENO_VERSION) return "deno";
4636
+ const userAgent = process.env.npm_config_user_agent;
4637
+ if (userAgent) {
4638
+ if (userAgent.startsWith("bun")) return "bun";
4639
+ if (userAgent.startsWith("pnpm")) return "pnpm";
4640
+ if (userAgent.startsWith("yarn")) return "yarn";
4641
+ if (userAgent.startsWith("npm")) return "npm";
4642
+ if (userAgent.startsWith("deno")) return "deno";
4643
+ }
4644
+ if (existsSync("deno.lock")) return "deno";
4645
+ if (existsSync("bun.lockb") || existsSync("bun.lock")) return "bun";
4646
+ if (existsSync("pnpm-lock.yaml")) return "pnpm";
4647
+ if (existsSync("yarn.lock")) return "yarn";
4648
+ return "npm";
4649
+ }
4650
+ /**
4651
+ * Get the exec command for running a package binary
4652
+ * Uses appropriate flags to ensure the correct version of @openspecui/web is installed
4653
+ */
4654
+ function getExecCommand(pm) {
4655
+ const webPkgSpec = `@openspecui/web@${version}`;
4656
+ switch (pm) {
4657
+ case "bun": return {
4658
+ cmd: "bunx",
4659
+ args: [
4660
+ "-p",
4661
+ webPkgSpec,
4662
+ "openspecui-ssg"
4663
+ ]
4664
+ };
4665
+ case "pnpm": return {
4666
+ cmd: "pnpm",
4667
+ args: ["dlx", webPkgSpec]
4668
+ };
4669
+ case "yarn": return {
4670
+ cmd: "yarn",
4671
+ args: ["dlx", webPkgSpec]
4672
+ };
4673
+ case "deno": return {
4674
+ cmd: "deno",
4675
+ args: [
4676
+ "run",
4677
+ "-A",
4678
+ `npm:${webPkgSpec}/openspecui-ssg`
4679
+ ]
4680
+ };
4681
+ default: return {
4682
+ cmd: "npx",
4683
+ args: [
4684
+ "-p",
4685
+ webPkgSpec,
4686
+ "openspecui-ssg"
4687
+ ]
4688
+ };
4689
+ }
4690
+ }
4691
+ /**
4631
4692
  * Export as JSON only (data.json)
4632
4693
  */
4633
4694
  async function exportJson(options) {
@@ -4658,37 +4719,37 @@ async function exportHtml(options) {
4658
4719
  const localWebPkg = findLocalWebPackage();
4659
4720
  if (localWebPkg) {
4660
4721
  console.log("\n[Local dev mode] Running SSG from local web package...");
4661
- console.log("\nBuilding client assets...");
4662
- await runCommand("pnpm", ["build:client"], localWebPkg);
4663
- console.log("Building SSR bundle...");
4664
- await runCommand("pnpm", ["build:server"], localWebPkg);
4665
- console.log("Pre-rendering pages...");
4666
- const clientDistDir = join$1(localWebPkg, "dist", "client");
4667
- await runCommand("npx", [
4722
+ await runCommand("pnpm", [
4668
4723
  "tsx",
4669
- "src/ssg/prerender.ts",
4724
+ join$1(localWebPkg, "src", "ssg", "cli.ts"),
4670
4725
  "--data",
4671
4726
  dataJsonPath,
4672
4727
  "--output",
4673
- clientDistDir,
4728
+ outputDir,
4674
4729
  "--base-path",
4675
4730
  basePath
4676
4731
  ], localWebPkg);
4677
- console.log("\nCopying to output directory...");
4678
- const { cpSync } = await import("node:fs");
4679
- cpSync(clientDistDir, outputDir, { recursive: true });
4680
- writeFileSync(join$1(outputDir, "data.json"), JSON.stringify(snapshot, null, 2));
4681
- console.log(`\nExport complete: ${outputDir}`);
4682
4732
  } else {
4683
- console.log("\nNote: HTML export requires @openspecui/web to be installed locally.");
4684
- console.log("For production SSG, run these commands:");
4685
- console.log(" npm install @openspecui/web");
4686
- console.log(" cd node_modules/@openspecui/web");
4687
- console.log(" pnpm build:ssg");
4688
- console.log(` npx tsx src/ssg/prerender.ts --data ${dataJsonPath} --output ${outputDir}`);
4689
- console.log("\nData exported to data.json. Run the above commands to generate HTML.");
4690
- return;
4733
+ console.log("\n[Production mode] Running SSG via @openspecui/web...");
4734
+ const pm = detectPackageManager();
4735
+ const execCmd = getExecCommand(pm);
4736
+ try {
4737
+ await runCommand(execCmd.cmd, [
4738
+ ...execCmd.args,
4739
+ "--data",
4740
+ dataJsonPath,
4741
+ "--output",
4742
+ outputDir,
4743
+ "--base-path",
4744
+ basePath
4745
+ ], process.cwd());
4746
+ } catch (err) {
4747
+ console.error("\nSSG failed. Make sure @openspecui/web is installed:");
4748
+ console.error(` ${pm} add @openspecui/web`);
4749
+ throw err;
4750
+ }
4691
4751
  }
4752
+ console.log(`\nExport complete: ${outputDir}`);
4692
4753
  if (open) {
4693
4754
  console.log("\nStarting preview server...");
4694
4755
  const previewArgs = [
@@ -4700,7 +4761,7 @@ async function exportHtml(options) {
4700
4761
  if (previewPort) previewArgs.push("--port", String(previewPort));
4701
4762
  if (previewHost) previewArgs.push("--host", previewHost);
4702
4763
  previewArgs.push("--open");
4703
- await runCommand("npx", previewArgs, outputDir);
4764
+ await runCommand(detectPackageManager(), previewArgs, outputDir);
4704
4765
  }
4705
4766
  }
4706
4767
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openspecui",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "description": "OpenSpec UI - Visual interface for spec-driven development",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -31,7 +31,7 @@
31
31
  "typescript": "^5.7.2",
32
32
  "vitest": "^2.1.8",
33
33
  "yargs": "^18.0.0",
34
- "@openspecui/web": "0.9.0",
34
+ "@openspecui/web": "0.9.3",
35
35
  "@openspecui/server": "0.9.0"
36
36
  },
37
37
  "scripts": {