@devflow-tools/cli 0.8.3 → 0.8.7

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":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,iBAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhD;AAED,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/C;AAED,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC;AAEpE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAelF;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAYnD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW/F"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,iBAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhD;AAED,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/C;AAED,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC;AAEpE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAelF;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAYnD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW/F"}
@@ -10,11 +10,18 @@ function getPidFile(projectRoot) {
10
10
  return join(dotdev, "server.pid");
11
11
  }
12
12
  function getServerScript() {
13
+ // Prefer bundled server.js distributed alongside the CLI
13
14
  try {
14
- return require.resolve("@devflow-tools/server/dist/main.js");
15
+ return require.resolve("./server.js");
15
16
  }
16
17
  catch {
17
- return join(process.cwd(), "apps", "server", "dist", "main.js");
18
+ // Fallback: separate npm package
19
+ try {
20
+ return require.resolve("@devflow-tools/server/dist/main.js");
21
+ }
22
+ catch {
23
+ return join(process.cwd(), "apps", "server", "dist", "main.js");
24
+ }
18
25
  }
19
26
  }
20
27
  export const DEFAULT_SERVER_PORT = 13337;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
@@ -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":"AAsBA,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,41 +1,15 @@
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) {
35
11
  try {
36
- const res = await fetch(`http://localhost:${port}/api/projects/active`, {
37
- headers: { "x-api-key": "dev-key-000000" },
38
- });
12
+ const res = await fetch(`http://localhost:${port}/api/health`);
39
13
  if (res.ok)
40
14
  return true;
41
15
  }
@@ -47,6 +21,24 @@ async function waitForServer(port, timeoutMs = 15000) {
47
21
  return false;
48
22
  }
49
23
  export async function startAll(opts) {
24
+ // 0. Clean up stale dashboard process
25
+ const dashPidFile = getDashboardPidFile();
26
+ if (existsSync(dashPidFile)) {
27
+ try {
28
+ const pid = readPidFromFile(dashPidFile);
29
+ if (pid !== null) {
30
+ try {
31
+ process.kill(pid);
32
+ }
33
+ catch { /* already gone */ }
34
+ }
35
+ }
36
+ catch { /* ignore */ }
37
+ try {
38
+ unlinkSync(dashPidFile);
39
+ }
40
+ catch { /* ignore */ }
41
+ }
50
42
  // 1. Start server
51
43
  console.log(chalk.blue("Starting DevFlow server..."));
52
44
  const { pid: serverPid } = await startServer({ port: opts.port });
@@ -63,48 +55,28 @@ export async function startAll(opts) {
63
55
  // 3. Start dashboard (unless --no-dashboard)
64
56
  if (!opts.noDashboard) {
65
57
  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"));
58
+ try {
59
+ const dashboardDir = ensureDashboardExtracted(process.cwd());
60
+ const serverPath = join(dashboardDir, "apps", "dashboard", "server.js");
61
+ const child = spawn("node", [serverPath], {
62
+ env: { ...process.env, PORT: String(opts.dashboardPort) },
63
+ cwd: dashboardDir,
64
+ stdio: "ignore",
65
+ detached: true,
66
+ });
67
+ if (child.pid) {
68
+ const dashPidFile = getDashboardPidFile();
69
+ const dotdev = join(process.cwd(), ".devflow");
70
+ if (!existsSync(dotdev))
71
+ mkdirSync(dotdev, { recursive: true });
72
+ writeFileSync(dashPidFile, `${opts.dashboardPort}\n${child.pid}`);
73
+ child.unref();
74
+ console.log(chalk.green(` Dashboard started (PID: ${child.pid})`));
80
75
  }
81
76
  }
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
- }
77
+ catch {
78
+ console.log(chalk.red(" Dashboard failed to start"));
79
+ console.log(chalk.yellow(` You can still use the API at http://localhost:${opts.port}`));
108
80
  }
109
81
  }
110
82
  // 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":"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,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,SAAS,GAAG,KAAK;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,aAAa,CAAC,CAAC;YAC/D,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAK9B;IACC,sCAAsC;IACtC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC;YAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,SAAS,GAAG,CAAC,CAAC,CAAC;IAEjE,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YACxE,MAAM,KAAK,GAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;gBACtD,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBACzD,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,aAAa,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClE,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mDAAmD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,yDAAyD,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,sCAAsC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,oCAAoC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,6DAA6D,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,2DAA2D,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IAE1F,wCAAwC;IACxC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,uEAAuE;YACvE,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBACzB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;gBAC1C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACpE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAClB,UAAU,CAAC,WAAW,CAAC,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;gBACD,MAAM,UAAU,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAClD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -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.7",
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.7",
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"