@devflow-tools/cli 0.8.3 → 0.8.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,gBAAgB,SAmDzB,CAAC"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,gBAAgB,SAoDzB,CAAC"}
@@ -1,25 +1,28 @@
1
1
  import { Command } from "commander";
2
2
  import { join } from "path";
3
- import { existsSync } from "fs";
3
+ import { existsSync, unlinkSync } from "fs";
4
4
  import { spawn } from "child_process";
5
5
  import chalk from "chalk";
6
- import { ensureDashboardInstalled } from "../lib/dashboard-cache.js";
6
+ import { ensureDashboardExtracted } from "../lib/dashboard-cache.js";
7
7
  export const dashboardCommand = new Command("dashboard")
8
8
  .description("Start DevFlow Dashboard")
9
9
  .option("-p, --port <port>", "Port to run on", "17788")
10
- .option("--force", "Force re-download Dashboard")
10
+ .option("--force", "Force re-extract Dashboard from npm package")
11
11
  .action(async (options) => {
12
12
  try {
13
+ if (options.force) {
14
+ const versionFile = join(process.cwd(), ".devflow", "dashboard", "version.txt");
15
+ try {
16
+ unlinkSync(versionFile);
17
+ }
18
+ catch { /* ok if missing */ }
19
+ }
13
20
  console.log(chalk.blue("Preparing Dashboard..."));
14
- const dashboardPath = await ensureDashboardInstalled({
15
- force: options.force,
16
- });
17
- // Monorepo standalone: server.js is at apps/dashboard/server.js
18
- const nestedPath = join(dashboardPath, "apps", "dashboard", "server.js");
19
- const serverPath = existsSync(nestedPath) ? nestedPath : join(dashboardPath, "server.js");
21
+ const dashboardPath = ensureDashboardExtracted(process.cwd());
22
+ const serverPath = join(dashboardPath, "apps", "dashboard", "server.js");
20
23
  if (!existsSync(serverPath)) {
21
24
  console.error(chalk.red(`Dashboard server.js not found at: ${serverPath}\n` +
22
- "The downloaded archive may be corrupted. Try: devflow dashboard --force"));
25
+ "The archive may be corrupted. Try: devflow dashboard --force"));
23
26
  process.exit(1);
24
27
  }
25
28
  console.log(chalk.green(`\nStarting Dashboard: http://localhost:${options.port}\n`));
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,CAAC;KACtD,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC;YACnD,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,gEAAgE;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,qCAAqC,UAAU,IAAI;gBACjD,yEAAyE,CAC5E,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,IAAI,IAAI,CAAC,CACxE,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;YACxC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EACtC,KAAe,CAAC,OAAO,CACzB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,CAAC;KACtD,MAAM,CAAC,SAAS,EAAE,6CAA6C,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YAChF,IAAI,CAAC;gBAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,qCAAqC,UAAU,IAAI;gBACjD,8DAA8D,CACjE,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,IAAI,IAAI,CAAC,CACxE,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;YACxC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EACtC,KAAe,CAAC,OAAO,CACzB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAiDA,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGhB"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAwBA,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FhB"}
@@ -1,34 +1,10 @@
1
1
  import { spawn } from "child_process";
2
2
  import { readFileSync, existsSync, writeFileSync, unlinkSync, mkdirSync } from "fs";
3
- import { join, resolve } from "path";
4
- import { createServer } from "http";
3
+ import { join } from "path";
5
4
  import chalk from "chalk";
6
- import { startServer, stopServer } from "./server.js";
7
- import { ensureDashboardInstalled, isDashboardInstalled } from "../lib/dashboard-cache.js";
5
+ import { startServer, stopServer, readPidFromFile } from "./server.js";
6
+ import { ensureDashboardExtracted } from "../lib/dashboard-cache.js";
8
7
  import { getDashboardPidFile } from "../lib/paths.js";
9
- function startFallbackServer(port) {
10
- let fallbackHtml = "<html><body><h1>DevFlow</h1><p>Dashboard is being downloaded...</p></body></html>";
11
- try {
12
- const candidates = [
13
- resolve(process.cwd(), "node_modules", "@devflow-tools", "devflow", "dist", "fallback.html"),
14
- resolve(process.cwd(), "apps", "server", "public", "fallback.html"),
15
- ];
16
- for (const candidate of candidates) {
17
- if (existsSync(candidate)) {
18
- fallbackHtml = readFileSync(candidate, "utf-8");
19
- break;
20
- }
21
- }
22
- }
23
- catch { /* use inline fallback */ }
24
- const server = createServer((_req, res) => {
25
- res.writeHead(200, { "Content-Type": "text/html" });
26
- res.end(fallbackHtml);
27
- });
28
- server.listen(port, () => {
29
- console.log(chalk.yellow(` Fallback page served on port ${port} (dashboard downloading...)`));
30
- });
31
- }
32
8
  async function waitForServer(port, timeoutMs = 15000) {
33
9
  const start = Date.now();
34
10
  while (Date.now() - start < timeoutMs) {
@@ -47,6 +23,24 @@ async function waitForServer(port, timeoutMs = 15000) {
47
23
  return false;
48
24
  }
49
25
  export async function startAll(opts) {
26
+ // 0. Clean up stale dashboard process
27
+ const dashPidFile = getDashboardPidFile();
28
+ if (existsSync(dashPidFile)) {
29
+ try {
30
+ const pid = readPidFromFile(dashPidFile);
31
+ if (pid !== null) {
32
+ try {
33
+ process.kill(pid);
34
+ }
35
+ catch { /* already gone */ }
36
+ }
37
+ }
38
+ catch { /* ignore */ }
39
+ try {
40
+ unlinkSync(dashPidFile);
41
+ }
42
+ catch { /* ignore */ }
43
+ }
50
44
  // 1. Start server
51
45
  console.log(chalk.blue("Starting DevFlow server..."));
52
46
  const { pid: serverPid } = await startServer({ port: opts.port });
@@ -63,48 +57,28 @@ export async function startAll(opts) {
63
57
  // 3. Start dashboard (unless --no-dashboard)
64
58
  if (!opts.noDashboard) {
65
59
  console.log(chalk.blue("Preparing Dashboard..."));
66
- let dashboardInstalled = isDashboardInstalled();
67
- if (!dashboardInstalled) {
68
- // Download synchronously with progress — avoids binding the dashboard port
69
- // with a fallback server, which caused EADDRINUSE on restart (C2/I1/M4).
70
- console.log(chalk.blue(" Dashboard not found, downloading..."));
71
- try {
72
- await ensureDashboardInstalled();
73
- console.log(chalk.green(" Dashboard download complete"));
74
- dashboardInstalled = isDashboardInstalled();
75
- }
76
- catch {
77
- console.log(chalk.red(" Dashboard download failed"));
78
- console.log(chalk.yellow(` You can still use the API at http://localhost:${opts.port}`));
79
- console.log(chalk.yellow(" To manually download the dashboard, visit: https://github.com/devflow-tools/devflow"));
60
+ try {
61
+ const dashboardDir = ensureDashboardExtracted(process.cwd());
62
+ const serverPath = join(dashboardDir, "apps", "dashboard", "server.js");
63
+ const child = spawn("node", [serverPath], {
64
+ env: { ...process.env, PORT: String(opts.dashboardPort) },
65
+ cwd: dashboardDir,
66
+ stdio: "ignore",
67
+ detached: true,
68
+ });
69
+ if (child.pid) {
70
+ const dashPidFile = getDashboardPidFile();
71
+ const dotdev = join(process.cwd(), ".devflow");
72
+ if (!existsSync(dotdev))
73
+ mkdirSync(dotdev, { recursive: true });
74
+ writeFileSync(dashPidFile, `${opts.dashboardPort}\n${child.pid}`);
75
+ child.unref();
76
+ console.log(chalk.green(` Dashboard started (PID: ${child.pid})`));
80
77
  }
81
78
  }
82
- if (dashboardInstalled) {
83
- try {
84
- const dashboardPath = await ensureDashboardInstalled();
85
- const serverPath = join(dashboardPath, "server.js");
86
- if (existsSync(serverPath)) {
87
- const child = spawn("node", [serverPath], {
88
- env: { ...process.env, PORT: String(opts.dashboardPort) },
89
- cwd: dashboardPath,
90
- stdio: "ignore",
91
- detached: true,
92
- });
93
- if (child.pid) {
94
- const dashPidFile = getDashboardPidFile();
95
- const dotdev = join(process.cwd(), ".devflow");
96
- if (!existsSync(dotdev))
97
- mkdirSync(dotdev, { recursive: true });
98
- writeFileSync(dashPidFile, `${opts.dashboardPort}\n${child.pid}`);
99
- child.unref();
100
- console.log(chalk.green(` Dashboard started (PID: ${child.pid})`));
101
- }
102
- }
103
- }
104
- catch {
105
- // Dashboard binary exists but failed to spawn — serve fallback page
106
- startFallbackServer(opts.dashboardPort);
107
- }
79
+ catch {
80
+ console.log(chalk.red(" Dashboard failed to start"));
81
+ console.log(chalk.yellow(` You can still use the API at http://localhost:${opts.port}`));
108
82
  }
109
83
  }
110
84
  // 4. Print status box
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,3 @@
1
- interface DashboardCache {
2
- version: string;
3
- path: string;
4
- downloadedAt: string;
5
- }
6
- export declare function getDashboardCacheDir(): string;
7
- export declare function isDashboardInstalled(): DashboardCache | null;
8
- export declare function downloadDashboard(version: string, onProgress?: (message: string) => void): Promise<string>;
9
- export declare function ensureDashboardInstalled(opts?: {
10
- force?: boolean;
11
- }): Promise<string>;
12
- export {};
1
+ export declare function isDashboardInstalled(projectRoot: string): boolean;
2
+ export declare function ensureDashboardExtracted(projectRoot: string): string;
13
3
  //# sourceMappingURL=dashboard-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-cache.d.ts","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"AAiBA,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAYD,wBAAgB,oBAAoB,IAAI,cAAc,GAAG,IAAI,CAkB5D;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAmFjB;AAsCD,wBAAsB,wBAAwB,CAAC,IAAI,CAAC,EAAE;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlB"}
1
+ {"version":3,"file":"dashboard-cache.d.ts","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"AAiCA,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CASjE;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6DpE"}
@@ -1,155 +1,97 @@
1
- import { homedir } from "os";
2
- import { join } from "path";
3
- import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, symlinkSync, lstatSync, } from "fs";
4
1
  import { execSync } from "child_process";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from "fs";
3
+ import { join, dirname } from "path";
5
4
  import { createRequire } from "module";
6
5
  const require = createRequire(import.meta.url);
7
- const GITHUB_REPO = "shilongfeicool/dev-flow";
8
- export function getDashboardCacheDir() {
9
- return join(homedir(), ".devflow", "dashboard");
6
+ function getDashboardDir(projectRoot) {
7
+ return join(projectRoot, ".devflow", "dashboard");
10
8
  }
11
- function getCurrentCliVersion() {
12
- // Walk up from this file to find the CLI package.json
9
+ function getVersionFile(projectRoot) {
10
+ return join(getDashboardDir(projectRoot), "version.txt");
11
+ }
12
+ function getCliVersion() {
13
13
  try {
14
- const pkg = require("../../package.json");
14
+ const pkg = require("../package.json");
15
15
  return pkg.version ?? "0.0.0";
16
16
  }
17
17
  catch {
18
18
  return "0.0.0";
19
19
  }
20
20
  }
21
- export function isDashboardInstalled() {
22
- const cacheDir = getDashboardCacheDir();
23
- const cacheFile = join(cacheDir, "cache.json");
24
- if (!existsSync(cacheFile)) {
25
- return null;
26
- }
21
+ function getTarGzPath() {
27
22
  try {
28
- const cache = JSON.parse(readFileSync(cacheFile, "utf-8"));
29
- if (existsSync(cache.path)) {
30
- return cache;
31
- }
32
- }
33
- catch {
34
- // corrupted cache file, ignore
23
+ const pkgJson = require.resolve("@devflow-tools/devflow/package.json");
24
+ const tarGz = join(dirname(pkgJson), "dist", "dashboard-standalone.tar.gz");
25
+ if (existsSync(tarGz))
26
+ return tarGz;
35
27
  }
28
+ catch { }
36
29
  return null;
37
30
  }
38
- export async function downloadDashboard(version, onProgress) {
39
- const cacheDir = getDashboardCacheDir();
40
- const versionDir = join(cacheDir, "versions", version);
41
- // Skip if this exact version is already downloaded
42
- // Monorepo standalone: server.js is at apps/dashboard/server.js
43
- const hasFlatServer = existsSync(join(versionDir, "server.js"));
44
- const hasNestedServer = existsSync(join(versionDir, "apps", "dashboard", "server.js"));
45
- if (existsSync(versionDir) && (hasFlatServer || hasNestedServer)) {
46
- linkCurrentVersion(cacheDir, versionDir, version);
47
- return join(cacheDir, "current");
48
- }
49
- const url = `https://github.com/${GITHUB_REPO}/releases/download/v${version}/dashboard-standalone.tar.gz`;
50
- onProgress?.(`Downloading Dashboard v${version} ...`);
51
- // Create temp directory
52
- const tempDir = join(cacheDir, "temp");
53
- mkdirSync(tempDir, { recursive: true });
31
+ export function isDashboardInstalled(projectRoot) {
32
+ const versionFile = getVersionFile(projectRoot);
33
+ if (!existsSync(versionFile))
34
+ return false;
54
35
  try {
55
- // Download with streaming to avoid loading entire file in memory
56
- const tarPath = join(tempDir, "dashboard.tar.gz");
57
- const response = await fetch(url);
58
- if (!response.ok) {
59
- throw new Error(`Download failed: HTTP ${response.status} ${response.statusText}\n` +
60
- `URL: ${url}\n` +
61
- `The Dashboard asset may not have been published for v${version}.`);
62
- }
63
- if (!response.body) {
64
- throw new Error("Download failed: empty response body");
65
- }
66
- // Stream response to file
67
- const reader = response.body.getReader();
68
- const chunks = [];
69
- while (true) {
70
- const { done, value } = await reader.read();
71
- if (done)
72
- break;
73
- chunks.push(value);
74
- }
75
- const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
76
- const merged = new Uint8Array(totalLength);
77
- let offset = 0;
78
- for (const chunk of chunks) {
79
- merged.set(chunk, offset);
80
- offset += chunk.length;
81
- }
82
- writeFileSync(tarPath, merged);
83
- // Extract
84
- mkdirSync(versionDir, { recursive: true });
85
- try {
86
- execSync(`tar -xzf "${tarPath}" -C "${versionDir}"`, { stdio: "pipe" });
87
- }
88
- catch (err) {
89
- throw new Error(`Failed to extract Dashboard archive: ${err.message}\n` +
90
- `Ensure 'tar' is available on your system.`);
91
- }
92
- // Update 'current' symlink/directory
93
- linkCurrentVersion(cacheDir, versionDir, version);
94
- // Update cache.json
95
- const cache = {
96
- version,
97
- path: join(cacheDir, "current"),
98
- downloadedAt: new Date().toISOString(),
99
- };
100
- writeFileSync(join(cacheDir, "cache.json"), JSON.stringify(cache, null, 2));
101
- onProgress?.(`Dashboard v${version} installed`);
102
- return cache.path;
36
+ const cachedVersion = readFileSync(versionFile, "utf-8").trim();
37
+ return cachedVersion === getCliVersion() && existsSync(join(getDashboardDir(projectRoot), "apps", "dashboard", "server.js"));
103
38
  }
104
- finally {
105
- // Clean up temp directory
106
- rmSync(tempDir, { recursive: true, force: true });
39
+ catch {
40
+ return false;
107
41
  }
108
42
  }
109
- function linkCurrentVersion(cacheDir, versionDir, version) {
110
- const currentLink = join(cacheDir, "current");
111
- if (existsSync(currentLink) || isSymlink(currentLink)) {
112
- rmSync(currentLink, { recursive: true, force: true });
43
+ export function ensureDashboardExtracted(projectRoot) {
44
+ const dashDir = getDashboardDir(projectRoot);
45
+ const versionFile = getVersionFile(projectRoot);
46
+ const cliVersion = getCliVersion();
47
+ if (isDashboardInstalled(projectRoot)) {
48
+ return dashDir;
113
49
  }
114
- // Use symlink so switching versions is cheap
115
- symlinkSync(versionDir, currentLink, "junction");
116
- // Record which version is linked
117
- const cacheFile = join(cacheDir, "cache.json");
118
- let cache;
119
- try {
120
- cache = JSON.parse(readFileSync(cacheFile, "utf-8"));
50
+ // Clean old cache
51
+ if (existsSync(dashDir)) {
52
+ rmSync(dashDir, { recursive: true, force: true });
121
53
  }
122
- catch {
123
- cache = { version: "", path: currentLink, downloadedAt: "" };
54
+ mkdirSync(dashDir, { recursive: true });
55
+ // Try to extract from npm package tar.gz
56
+ const tarGz = getTarGzPath();
57
+ if (tarGz) {
58
+ execSync(`tar -xzf "${tarGz}" -C "${dashDir}"`, { stdio: "pipe" });
59
+ writeFileSync(versionFile, cliVersion);
60
+ return dashDir;
124
61
  }
125
- cache.version = version;
126
- cache.path = currentLink;
127
- cache.downloadedAt = new Date().toISOString();
128
- writeFileSync(cacheFile, JSON.stringify(cache, null, 2));
129
- }
130
- function isSymlink(p) {
62
+ // Monorepo dev fallback: symlink next.js standalone build output
131
63
  try {
132
- return lstatSync(p).isSymbolicLink();
133
- }
134
- catch {
135
- return false;
136
- }
137
- }
138
- export async function ensureDashboardInstalled(opts) {
139
- const currentVersion = getCurrentCliVersion();
140
- const cache = isDashboardInstalled();
141
- if (cache && cache.version === currentVersion && !opts?.force) {
142
- return cache.path;
64
+ const pkgJson = require.resolve("@devflow-tools/devflow/package.json");
65
+ const repoRoot = join(dirname(pkgJson), "..", "..");
66
+ const standaloneDir = join(repoRoot, "apps", "dashboard", ".next", "standalone");
67
+ const staticDir = join(repoRoot, "apps", "dashboard", ".next", "static");
68
+ const publicDir = join(repoRoot, "apps", "dashboard", "public");
69
+ const serverPath = join(standaloneDir, "apps", "dashboard", "server.js");
70
+ if (!existsSync(serverPath)) {
71
+ throw new Error(`Dashboard build not found.\n` +
72
+ ` Expected: ${serverPath}\n` +
73
+ ` Run: npm run build:dist (requires Node >= 18)\n` +
74
+ ` Or install from npm: npm install @devflow-tools/devflow@${cliVersion}`);
75
+ }
76
+ // Copy standalone output to cache
77
+ execSync(`cp -r "${standaloneDir}/"* "${dashDir}/"`, { stdio: "pipe" });
78
+ if (existsSync(staticDir)) {
79
+ const destStatic = join(dashDir, "apps", "dashboard", ".next");
80
+ mkdirSync(destStatic, { recursive: true });
81
+ execSync(`cp -r "${staticDir}" "${destStatic}/"`, { stdio: "pipe" });
82
+ }
83
+ if (existsSync(publicDir)) {
84
+ execSync(`cp -r "${publicDir}" "${dashDir}/"`, { stdio: "pipe" });
85
+ }
86
+ writeFileSync(versionFile, cliVersion);
87
+ return dashDir;
143
88
  }
144
- if (opts?.force && cache) {
145
- // Remove old version directory
146
- const oldVersionDir = join(getDashboardCacheDir(), "versions", cache.version);
147
- if (existsSync(oldVersionDir)) {
148
- rmSync(oldVersionDir, { recursive: true, force: true });
89
+ catch (e) {
90
+ // Clean up partial cache
91
+ if (existsSync(dashDir)) {
92
+ rmSync(dashDir, { recursive: true, force: true });
149
93
  }
94
+ throw e;
150
95
  }
151
- return downloadDashboard(currentVersion, (msg) => {
152
- console.log(msg);
153
- });
154
96
  }
155
97
  //# sourceMappingURL=dashboard-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-cache.js","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-cache.js","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/claude-code-plugin",
3
- "version": "0.8.3",
3
+ "version": "0.8.6",
4
4
  "private": true,
5
5
  "description": "DevFlow — Developer Intelligence Platform for Claude Code",
6
6
  "type": "module",
@@ -8,6 +8,9 @@
8
8
  "build": "npx tsx scripts/inject-gates.ts",
9
9
  "deploy": "npx tsx scripts/inject-gates.ts --deploy"
10
10
  },
11
+ "devDependencies": {
12
+ "@devflow-tools/mcp-server": "^0.8.6"
13
+ },
11
14
  "keywords": [
12
15
  "pi-package",
13
16
  "skills",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/cli",
3
- "version": "0.8.3",
3
+ "version": "0.8.6",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {
@@ -12,31 +12,31 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@colbymchenry/codegraph": "^1.1.1",
15
- "@devflow-tools/adapters": "^0.8.3",
16
- "@devflow-tools/benchmark": "^0.8.3",
17
- "@devflow-tools/context-engine": "^0.8.3",
18
- "@devflow-tools/database": "^0.8.3",
19
- "@devflow-tools/knowledge-engine": "^0.8.3",
20
- "@devflow-tools/mcp-server": "^0.8.3",
21
- "@devflow-tools/memory-engine": "^0.8.3",
22
- "@devflow-tools/plugin-animation": "^0.8.3",
23
- "@devflow-tools/plugin-css": "^0.8.3",
24
- "@devflow-tools/plugin-docker": "^0.8.3",
25
- "@devflow-tools/plugin-electron": "^0.8.3",
26
- "@devflow-tools/plugin-git": "^0.8.3",
27
- "@devflow-tools/plugin-graphql": "^0.8.3",
28
- "@devflow-tools/plugin-nest": "^0.8.3",
29
- "@devflow-tools/plugin-nextjs": "^0.8.3",
30
- "@devflow-tools/plugin-performance": "^0.8.3",
31
- "@devflow-tools/plugin-react": "^0.8.3",
32
- "@devflow-tools/plugin-tailwind": "^0.8.3",
33
- "@devflow-tools/plugin-taro": "^0.8.3",
34
- "@devflow-tools/plugin-ui-layout": "^0.8.3",
35
- "@devflow-tools/plugin-vue": "^0.8.3",
36
- "@devflow-tools/sdk": "^0.8.3",
37
- "@devflow-tools/server": "^0.8.3",
38
- "@devflow-tools/telemetry": "^0.8.3",
39
- "@devflow-tools/workflow-engine": "^0.8.3",
15
+ "@devflow-tools/adapters": "^0.8.6",
16
+ "@devflow-tools/benchmark": "^0.8.6",
17
+ "@devflow-tools/context-engine": "^0.8.6",
18
+ "@devflow-tools/database": "^0.8.6",
19
+ "@devflow-tools/knowledge-engine": "^0.8.6",
20
+ "@devflow-tools/mcp-server": "^0.8.6",
21
+ "@devflow-tools/memory-engine": "^0.8.6",
22
+ "@devflow-tools/plugin-animation": "^0.8.6",
23
+ "@devflow-tools/plugin-css": "^0.8.6",
24
+ "@devflow-tools/plugin-docker": "^0.8.6",
25
+ "@devflow-tools/plugin-electron": "^0.8.6",
26
+ "@devflow-tools/plugin-git": "^0.8.6",
27
+ "@devflow-tools/plugin-graphql": "^0.8.6",
28
+ "@devflow-tools/plugin-nest": "^0.8.6",
29
+ "@devflow-tools/plugin-nextjs": "^0.8.6",
30
+ "@devflow-tools/plugin-performance": "^0.8.6",
31
+ "@devflow-tools/plugin-react": "^0.8.6",
32
+ "@devflow-tools/plugin-tailwind": "^0.8.6",
33
+ "@devflow-tools/plugin-taro": "^0.8.6",
34
+ "@devflow-tools/plugin-ui-layout": "^0.8.6",
35
+ "@devflow-tools/plugin-vue": "^0.8.6",
36
+ "@devflow-tools/sdk": "^0.8.6",
37
+ "@devflow-tools/server": "^0.8.6",
38
+ "@devflow-tools/telemetry": "^0.8.6",
39
+ "@devflow-tools/workflow-engine": "^0.8.6",
40
40
  "@inquirer/prompts": "^7.10.1",
41
41
  "chalk": "^5.3.0",
42
42
  "commander": "^12.0.0"