@devflow-tools/cli 0.8.2 → 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.
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +13 -8
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +41 -67
- package/dist/commands/start.js.map +1 -1
- package/dist/lib/dashboard-cache.d.ts +2 -12
- package/dist/lib/dashboard-cache.d.ts.map +1 -1
- package/dist/lib/dashboard-cache.js +69 -124
- package/dist/lib/dashboard-cache.js.map +1 -1
- package/dist/plugin-files/package.json +4 -1
- package/package.json +26 -26
|
@@ -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,
|
|
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,23 +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 {
|
|
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-
|
|
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 =
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
const serverPath = join(dashboardPath, "server.js");
|
|
21
|
+
const dashboardPath = ensureDashboardExtracted(process.cwd());
|
|
22
|
+
const serverPath = join(dashboardPath, "apps", "dashboard", "server.js");
|
|
18
23
|
if (!existsSync(serverPath)) {
|
|
19
24
|
console.error(chalk.red(`Dashboard server.js not found at: ${serverPath}\n` +
|
|
20
|
-
"The
|
|
25
|
+
"The archive may be corrupted. Try: devflow dashboard --force"));
|
|
21
26
|
process.exit(1);
|
|
22
27
|
}
|
|
23
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;
|
|
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":"
|
|
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"}
|
package/dist/commands/start.js
CHANGED
|
@@ -1,34 +1,10 @@
|
|
|
1
1
|
import { spawn } from "child_process";
|
|
2
2
|
import { readFileSync, existsSync, writeFileSync, unlinkSync, mkdirSync } from "fs";
|
|
3
|
-
import { join
|
|
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 {
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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":"
|
|
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,152 +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
|
-
|
|
8
|
-
|
|
9
|
-
return join(homedir(), ".devflow", "dashboard");
|
|
6
|
+
function getDashboardDir(projectRoot) {
|
|
7
|
+
return join(projectRoot, ".devflow", "dashboard");
|
|
10
8
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
9
|
+
function getVersionFile(projectRoot) {
|
|
10
|
+
return join(getDashboardDir(projectRoot), "version.txt");
|
|
11
|
+
}
|
|
12
|
+
function getCliVersion() {
|
|
13
13
|
try {
|
|
14
|
-
const pkg = require("
|
|
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
|
-
|
|
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
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (existsSync(versionDir) && existsSync(join(versionDir, "server.js"))) {
|
|
43
|
-
linkCurrentVersion(cacheDir, versionDir, version);
|
|
44
|
-
return join(cacheDir, "current");
|
|
45
|
-
}
|
|
46
|
-
const url = `https://github.com/${GITHUB_REPO}/releases/download/v${version}/dashboard-standalone.tar.gz`;
|
|
47
|
-
onProgress?.(`Downloading Dashboard v${version} ...`);
|
|
48
|
-
// Create temp directory
|
|
49
|
-
const tempDir = join(cacheDir, "temp");
|
|
50
|
-
mkdirSync(tempDir, { recursive: true });
|
|
31
|
+
export function isDashboardInstalled(projectRoot) {
|
|
32
|
+
const versionFile = getVersionFile(projectRoot);
|
|
33
|
+
if (!existsSync(versionFile))
|
|
34
|
+
return false;
|
|
51
35
|
try {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const response = await fetch(url);
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
throw new Error(`Download failed: HTTP ${response.status} ${response.statusText}\n` +
|
|
57
|
-
`URL: ${url}\n` +
|
|
58
|
-
`The Dashboard asset may not have been published for v${version}.`);
|
|
59
|
-
}
|
|
60
|
-
if (!response.body) {
|
|
61
|
-
throw new Error("Download failed: empty response body");
|
|
62
|
-
}
|
|
63
|
-
// Stream response to file
|
|
64
|
-
const reader = response.body.getReader();
|
|
65
|
-
const chunks = [];
|
|
66
|
-
while (true) {
|
|
67
|
-
const { done, value } = await reader.read();
|
|
68
|
-
if (done)
|
|
69
|
-
break;
|
|
70
|
-
chunks.push(value);
|
|
71
|
-
}
|
|
72
|
-
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
73
|
-
const merged = new Uint8Array(totalLength);
|
|
74
|
-
let offset = 0;
|
|
75
|
-
for (const chunk of chunks) {
|
|
76
|
-
merged.set(chunk, offset);
|
|
77
|
-
offset += chunk.length;
|
|
78
|
-
}
|
|
79
|
-
writeFileSync(tarPath, merged);
|
|
80
|
-
// Extract
|
|
81
|
-
mkdirSync(versionDir, { recursive: true });
|
|
82
|
-
try {
|
|
83
|
-
execSync(`tar -xzf "${tarPath}" -C "${versionDir}"`, { stdio: "pipe" });
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
throw new Error(`Failed to extract Dashboard archive: ${err.message}\n` +
|
|
87
|
-
`Ensure 'tar' is available on your system.`);
|
|
88
|
-
}
|
|
89
|
-
// Update 'current' symlink/directory
|
|
90
|
-
linkCurrentVersion(cacheDir, versionDir, version);
|
|
91
|
-
// Update cache.json
|
|
92
|
-
const cache = {
|
|
93
|
-
version,
|
|
94
|
-
path: join(cacheDir, "current"),
|
|
95
|
-
downloadedAt: new Date().toISOString(),
|
|
96
|
-
};
|
|
97
|
-
writeFileSync(join(cacheDir, "cache.json"), JSON.stringify(cache, null, 2));
|
|
98
|
-
onProgress?.(`Dashboard v${version} installed`);
|
|
99
|
-
return cache.path;
|
|
36
|
+
const cachedVersion = readFileSync(versionFile, "utf-8").trim();
|
|
37
|
+
return cachedVersion === getCliVersion() && existsSync(join(getDashboardDir(projectRoot), "apps", "dashboard", "server.js"));
|
|
100
38
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
104
41
|
}
|
|
105
42
|
}
|
|
106
|
-
function
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
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;
|
|
110
49
|
}
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const cacheFile = join(cacheDir, "cache.json");
|
|
115
|
-
let cache;
|
|
116
|
-
try {
|
|
117
|
-
cache = JSON.parse(readFileSync(cacheFile, "utf-8"));
|
|
50
|
+
// Clean old cache
|
|
51
|
+
if (existsSync(dashDir)) {
|
|
52
|
+
rmSync(dashDir, { recursive: true, force: true });
|
|
118
53
|
}
|
|
119
|
-
|
|
120
|
-
|
|
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;
|
|
121
61
|
}
|
|
122
|
-
|
|
123
|
-
cache.path = currentLink;
|
|
124
|
-
cache.downloadedAt = new Date().toISOString();
|
|
125
|
-
writeFileSync(cacheFile, JSON.stringify(cache, null, 2));
|
|
126
|
-
}
|
|
127
|
-
function isSymlink(p) {
|
|
62
|
+
// Monorepo dev fallback: symlink next.js standalone build output
|
|
128
63
|
try {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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;
|
|
140
88
|
}
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
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 });
|
|
146
93
|
}
|
|
94
|
+
throw e;
|
|
147
95
|
}
|
|
148
|
-
return downloadDashboard(currentVersion, (msg) => {
|
|
149
|
-
console.log(msg);
|
|
150
|
-
});
|
|
151
96
|
}
|
|
152
97
|
//# sourceMappingURL=dashboard-cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-cache.js","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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
|
+
"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
|
+
"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.
|
|
16
|
-
"@devflow-tools/benchmark": "^0.8.
|
|
17
|
-
"@devflow-tools/context-engine": "^0.8.
|
|
18
|
-
"@devflow-tools/database": "^0.8.
|
|
19
|
-
"@devflow-tools/knowledge-engine": "^0.8.
|
|
20
|
-
"@devflow-tools/mcp-server": "^0.8.
|
|
21
|
-
"@devflow-tools/memory-engine": "^0.8.
|
|
22
|
-
"@devflow-tools/plugin-animation": "^0.8.
|
|
23
|
-
"@devflow-tools/plugin-css": "^0.8.
|
|
24
|
-
"@devflow-tools/plugin-docker": "^0.8.
|
|
25
|
-
"@devflow-tools/plugin-electron": "^0.8.
|
|
26
|
-
"@devflow-tools/plugin-git": "^0.8.
|
|
27
|
-
"@devflow-tools/plugin-graphql": "^0.8.
|
|
28
|
-
"@devflow-tools/plugin-nest": "^0.8.
|
|
29
|
-
"@devflow-tools/plugin-nextjs": "^0.8.
|
|
30
|
-
"@devflow-tools/plugin-performance": "^0.8.
|
|
31
|
-
"@devflow-tools/plugin-react": "^0.8.
|
|
32
|
-
"@devflow-tools/plugin-tailwind": "^0.8.
|
|
33
|
-
"@devflow-tools/plugin-taro": "^0.8.
|
|
34
|
-
"@devflow-tools/plugin-ui-layout": "^0.8.
|
|
35
|
-
"@devflow-tools/plugin-vue": "^0.8.
|
|
36
|
-
"@devflow-tools/sdk": "^0.8.
|
|
37
|
-
"@devflow-tools/server": "^0.8.
|
|
38
|
-
"@devflow-tools/telemetry": "^0.8.
|
|
39
|
-
"@devflow-tools/workflow-engine": "^0.8.
|
|
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"
|