dev3000 0.0.15 → 0.0.19

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/README.md CHANGED
@@ -28,6 +28,8 @@ Give Claude your log file for instant debugging:
28
28
  Read /tmp/dev3000.log
29
29
  ```
30
30
 
31
+ Logs are automatically saved with timestamps in `/var/log/dev3000/` (or temp directory) and rotated to keep the 10 most recent per project. The current session is always symlinked to `/tmp/dev3000.log` for easy access.
32
+
31
33
  Or use the MCP server at `http://localhost:3684/api/mcp/http` for advanced querying:
32
34
  - `read_consolidated_logs` - Get recent logs with filtering
33
35
  - `search_logs` - Regex search with context
@@ -42,7 +44,6 @@ dev3000 [options]
42
44
  --mcp-port <port> MCP server port (default: 3684)
43
45
  -s, --script <script> Package.json script to run (default: dev)
44
46
  --profile-dir <dir> Chrome profile directory (persists cookies/login state)
45
- --logfile <file> Log file path (default: /tmp/dev3000.log)
46
47
  ```
47
48
 
48
49
  Examples:
package/dist/cli.js CHANGED
@@ -5,7 +5,7 @@ import { tmpdir } from 'os';
5
5
  import { join, dirname } from 'path';
6
6
  import { existsSync, readFileSync } from 'fs';
7
7
  import { fileURLToPath } from 'url';
8
- import { startDevEnvironment } from './dev-environment.js';
8
+ import { startDevEnvironment, createPersistentLogFile } from './dev-environment.js';
9
9
  function detectPackageManager() {
10
10
  if (existsSync('pnpm-lock.yaml'))
11
11
  return 'pnpm';
@@ -39,17 +39,22 @@ program
39
39
  .option('--mcp-port <port>', 'MCP server port', '3684')
40
40
  .option('-s, --script <script>', 'Package.json script to run (e.g. dev, build-start)', 'dev')
41
41
  .option('--profile-dir <dir>', 'Chrome profile directory', join(tmpdir(), 'dev3000-chrome-profile'))
42
- .option('--logfile <file>', 'Consolidated log file path', '/tmp/dev3000.log')
42
+ .option('--debug', 'Enable debug logging to console')
43
43
  .action(async (options) => {
44
44
  console.log(chalk.blue.bold('🤖 Starting AI Development Environment'));
45
45
  // Convert script option to full command
46
46
  const packageManager = detectPackageManager();
47
47
  const serverCommand = `${packageManager} run ${options.script}`;
48
48
  try {
49
+ // Create persistent log file and setup symlink
50
+ const logFile = createPersistentLogFile();
51
+ console.log(chalk.gray(`📝 Logging to: ${logFile}`));
52
+ console.log(chalk.gray(`📎 Current session symlinked to /tmp/dev3000.log`));
49
53
  await startDevEnvironment({
50
54
  ...options,
51
- logFile: options.logfile,
52
- serverCommand
55
+ logFile,
56
+ serverCommand,
57
+ debug: options.debug
53
58
  });
54
59
  }
55
60
  catch (error) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,SAAS,oBAAoB;IAC3B,IAAI,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,KAAK,CAAC,CAAC,WAAW;AAC3B,CAAC;AAED,iCAAiC;AACjC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,mCAAmC;QACtF,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,CAAC,WAAW;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAEzB,OAAO;KACJ,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,CAAC;KACtD,MAAM,CAAC,uBAAuB,EAAE,oDAAoD,EAAE,KAAK,CAAC;KAC5F,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC;KACnG,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,kBAAkB,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAEvE,wCAAwC;IACxC,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,cAAc,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC;YACxB,GAAG,OAAO;YACV,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,SAAS,oBAAoB;IAC3B,IAAI,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,KAAK,CAAC,CAAC,WAAW;AAC3B,CAAC;AAED,iCAAiC;AACjC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,mCAAmC;QACtF,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,CAAC,WAAW;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAEzB,OAAO;KACJ,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,CAAC;KACtD,MAAM,CAAC,uBAAuB,EAAE,oDAAoD,EAAE,KAAK,CAAC;KAC5F,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC;KACnG,MAAM,CAAC,SAAS,EAAE,iCAAiC,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAEvE,wCAAwC;IACxC,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,cAAc,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhE,IAAI,CAAC;QACH,+CAA+C;QAC/C,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAE5E,MAAM,mBAAmB,CAAC;YACxB,GAAG,OAAO;YACV,OAAO;YACP,aAAa;YACb,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -4,7 +4,9 @@ interface DevEnvironmentOptions {
4
4
  serverCommand: string;
5
5
  profileDir: string;
6
6
  logFile: string;
7
+ debug?: boolean;
7
8
  }
9
+ export declare function createPersistentLogFile(): string;
8
10
  export declare class DevEnvironment {
9
11
  private serverProcess;
10
12
  private mcpServerProcess;
@@ -19,10 +21,17 @@ export declare class DevEnvironment {
19
21
  private pidFile;
20
22
  private progressBar;
21
23
  constructor(options: DevEnvironmentOptions);
24
+ private debugLog;
22
25
  private checkPortsAvailable;
23
26
  start(): Promise<void>;
24
27
  private startServer;
25
28
  private startMcpServer;
29
+ private startStateSaving;
30
+ private stopStateSaving;
31
+ private saveStateManually;
32
+ private loadStateManually;
33
+ private restoreStorageData;
34
+ private setupFocusHandlers;
26
35
  private waitForServer;
27
36
  private animateProgress;
28
37
  private installMcpServerDeps;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"AASA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqCD,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAAwD;IAC3E,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAwB;gBAE/B,OAAO,EAAE,qBAAqB;YA6B5B,mBAAmB;IA4B3B,KAAK;YAuDG,WAAW;YAyCX,cAAc;YA0Gd,aAAa;YAwBb,eAAe;YA8Bf,oBAAoB;YA0GpB,gBAAgB;YAwBhB,sBAAsB;YA4HtB,yBAAyB;YA8DzB,cAAc;YAwBd,mBAAmB;IAyEjC,OAAO,CAAC,oBAAoB;CAiF7B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAGvE"}
1
+ {"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"AASA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqCD,wBAAgB,uBAAuB,IAAI,MAAM,CAiBhD;AA8DD,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAAwD;IAC3E,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAwB;gBAE/B,OAAO,EAAE,qBAAqB;IA6B1C,OAAO,CAAC,QAAQ;YAMF,mBAAmB;IA4B3B,KAAK;YAuDG,WAAW;YAyCX,cAAc;IA0G5B,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,eAAe;YAOT,iBAAiB;YAiCjB,iBAAiB;YA+BjB,kBAAkB;YAkClB,kBAAkB;YAKlB,aAAa;YAwBb,eAAe;YA6Bf,oBAAoB;YA0GpB,gBAAgB;YAwBhB,sBAAsB;YAkHtB,yBAAyB;YA8DzB,cAAc;YAwBd,mBAAmB;IAyEjC,OAAO,CAAC,oBAAoB;CA8E7B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAGvE"}
@@ -1,7 +1,7 @@
1
1
  import { spawn } from 'child_process';
2
2
  import { chromium } from 'playwright';
3
- import { writeFileSync, appendFileSync, mkdirSync, existsSync, copyFileSync, readFileSync, cpSync, lstatSync } from 'fs';
4
- import { join, dirname } from 'path';
3
+ import { writeFileSync, appendFileSync, mkdirSync, existsSync, copyFileSync, readFileSync, cpSync, lstatSync, symlinkSync, unlinkSync, readdirSync, statSync } from 'fs';
4
+ import { join, dirname, basename } from 'path';
5
5
  import { fileURLToPath } from 'url';
6
6
  import { tmpdir } from 'os';
7
7
  import chalk from 'chalk';
@@ -42,6 +42,78 @@ function detectPackageManagerForRun() {
42
42
  return 'npm';
43
43
  return 'npm'; // fallback
44
44
  }
45
+ export function createPersistentLogFile() {
46
+ // Create /var/log/dev3000 directory
47
+ const logBaseDir = '/var/log/dev3000';
48
+ try {
49
+ if (!existsSync(logBaseDir)) {
50
+ mkdirSync(logBaseDir, { recursive: true });
51
+ }
52
+ }
53
+ catch (error) {
54
+ // Fallback to user's temp directory if /var/log is not writable
55
+ const fallbackDir = join(tmpdir(), 'dev3000-logs');
56
+ if (!existsSync(fallbackDir)) {
57
+ mkdirSync(fallbackDir, { recursive: true });
58
+ }
59
+ return createLogFileInDir(fallbackDir);
60
+ }
61
+ return createLogFileInDir(logBaseDir);
62
+ }
63
+ function createLogFileInDir(baseDir) {
64
+ // Get current working directory name
65
+ const cwdName = basename(process.cwd()).replace(/[^a-zA-Z0-9-_]/g, '_');
66
+ // Create timestamp
67
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
68
+ // Create log file path
69
+ const logFileName = `dev3000-${cwdName}-${timestamp}.log`;
70
+ const logFilePath = join(baseDir, logFileName);
71
+ // Prune old logs for this project (keep only 10 most recent)
72
+ pruneOldLogs(baseDir, cwdName);
73
+ // Create the log file
74
+ writeFileSync(logFilePath, '');
75
+ // Create or update symlink to /tmp/dev3000.log
76
+ const symlinkPath = '/tmp/dev3000.log';
77
+ try {
78
+ if (existsSync(symlinkPath)) {
79
+ unlinkSync(symlinkPath);
80
+ }
81
+ symlinkSync(logFilePath, symlinkPath);
82
+ }
83
+ catch (error) {
84
+ console.warn(chalk.yellow(`⚠️ Could not create symlink ${symlinkPath}: ${error}`));
85
+ }
86
+ return logFilePath;
87
+ }
88
+ function pruneOldLogs(baseDir, cwdName) {
89
+ try {
90
+ // Find all log files for this project
91
+ const files = readdirSync(baseDir)
92
+ .filter(file => file.startsWith(`dev3000-${cwdName}-`) && file.endsWith('.log'))
93
+ .map(file => ({
94
+ name: file,
95
+ path: join(baseDir, file),
96
+ mtime: statSync(join(baseDir, file)).mtime
97
+ }))
98
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime()); // Most recent first
99
+ // Keep only the 10 most recent, delete the rest
100
+ if (files.length >= 10) {
101
+ const filesToDelete = files.slice(9); // Keep first 9, delete the rest
102
+ for (const file of filesToDelete) {
103
+ try {
104
+ unlinkSync(file.path);
105
+ console.log(chalk.gray(`🗑️ Pruned old log: ${file.name}`));
106
+ }
107
+ catch (error) {
108
+ console.warn(chalk.yellow(`⚠️ Could not delete old log ${file.name}: ${error}`));
109
+ }
110
+ }
111
+ }
112
+ }
113
+ catch (error) {
114
+ console.warn(chalk.yellow(`⚠️ Could not prune logs: ${error}`));
115
+ }
116
+ }
45
117
  export class DevEnvironment {
46
118
  serverProcess = null;
47
119
  mcpServerProcess = null;
@@ -80,6 +152,11 @@ export class DevEnvironment {
80
152
  mkdirSync(this.mcpPublicDir, { recursive: true });
81
153
  }
82
154
  }
155
+ debugLog(message) {
156
+ if (this.options.debug) {
157
+ console.log(chalk.gray(`[DEBUG] ${message}`));
158
+ }
159
+ }
83
160
  async checkPortsAvailable() {
84
161
  const ports = [this.options.port, this.options.mcpPort];
85
162
  for (const port of ports) {
@@ -91,7 +168,7 @@ export class DevEnvironment {
91
168
  proc.on('exit', () => resolve(output.trim()));
92
169
  });
93
170
  if (result) {
94
- const pids = result.split('\n').filter(line => line.trim());
171
+ result.split('\n').filter(line => line.trim());
95
172
  console.log(chalk.red(`❌ Port ${port} is already in use`));
96
173
  console.log(chalk.yellow(`💡 To free up port ${port}, run: lsof -ti:${port} | xargs kill -9`));
97
174
  throw new Error(`Port ${port} is already in use. Please free the port and try again.`);
@@ -277,6 +354,131 @@ export class DevEnvironment {
277
354
  }
278
355
  });
279
356
  }
357
+ startStateSaving() {
358
+ if (this.stateTimer) {
359
+ clearInterval(this.stateTimer);
360
+ }
361
+ // Start continuous autosave timer (no focus dependency since it's non-intrusive)
362
+ this.stateTimer = setInterval(async () => {
363
+ if (this.browserContext) {
364
+ try {
365
+ this.debugLog('Running periodic context autosave (non-intrusive)...');
366
+ await this.saveStateManually();
367
+ this.debugLog('Context autosave completed successfully');
368
+ }
369
+ catch (error) {
370
+ const errorMessage = error instanceof Error ? error.message : String(error);
371
+ this.debugLog(`Context autosave failed: ${errorMessage}`);
372
+ // If context is closed, stop the timer
373
+ if (errorMessage.includes('closed') || errorMessage.includes('destroyed')) {
374
+ this.debugLog('Browser context appears closed, stopping autosave timer');
375
+ this.stopStateSaving();
376
+ }
377
+ }
378
+ }
379
+ }, 15000); // Save every 15 seconds
380
+ }
381
+ stopStateSaving() {
382
+ if (this.stateTimer) {
383
+ clearInterval(this.stateTimer);
384
+ this.stateTimer = null;
385
+ }
386
+ }
387
+ async saveStateManually() {
388
+ if (!this.browserContext)
389
+ return;
390
+ const stateDir = this.options.profileDir;
391
+ const cookiesFile = join(stateDir, 'cookies.json');
392
+ const storageFile = join(stateDir, 'storage.json');
393
+ try {
394
+ // Save cookies (non-intrusive)
395
+ const cookies = await this.browserContext.cookies();
396
+ writeFileSync(cookiesFile, JSON.stringify(cookies, null, 2));
397
+ // Save localStorage and sessionStorage from current pages (non-intrusive)
398
+ const pages = this.browserContext.pages();
399
+ if (pages.length > 0) {
400
+ const page = pages[0]; // Use first page to avoid creating new ones
401
+ if (!page.isClosed()) {
402
+ const storageData = await page.evaluate(() => {
403
+ return {
404
+ localStorage: JSON.stringify(localStorage),
405
+ sessionStorage: JSON.stringify(sessionStorage),
406
+ url: window.location.href
407
+ };
408
+ });
409
+ writeFileSync(storageFile, JSON.stringify(storageData, null, 2));
410
+ }
411
+ }
412
+ }
413
+ catch (error) {
414
+ // Re-throw to be handled by caller
415
+ throw error;
416
+ }
417
+ }
418
+ async loadStateManually() {
419
+ if (!this.browserContext)
420
+ return;
421
+ const stateDir = this.options.profileDir;
422
+ const cookiesFile = join(stateDir, 'cookies.json');
423
+ const storageFile = join(stateDir, 'storage.json');
424
+ try {
425
+ // Load cookies if they exist
426
+ if (existsSync(cookiesFile)) {
427
+ const cookies = JSON.parse(readFileSync(cookiesFile, 'utf8'));
428
+ if (Array.isArray(cookies) && cookies.length > 0) {
429
+ await this.browserContext.addCookies(cookies);
430
+ this.debugLog(`Restored ${cookies.length} cookies`);
431
+ }
432
+ }
433
+ // Load storage data for later restoration (we'll apply it after page navigation)
434
+ if (existsSync(storageFile)) {
435
+ const storageData = JSON.parse(readFileSync(storageFile, 'utf8'));
436
+ if (storageData.localStorage || storageData.sessionStorage) {
437
+ // Store this for restoration after page loads
438
+ this.browserContext._dev3000_storageData = storageData;
439
+ this.debugLog('Loaded storage data for restoration');
440
+ }
441
+ }
442
+ }
443
+ catch (error) {
444
+ this.debugLog(`Failed to load saved state: ${error instanceof Error ? error.message : String(error)}`);
445
+ }
446
+ }
447
+ async restoreStorageData(page) {
448
+ if (!this.browserContext || page.isClosed())
449
+ return;
450
+ const storageData = this.browserContext._dev3000_storageData;
451
+ if (!storageData)
452
+ return;
453
+ try {
454
+ await page.evaluate((data) => {
455
+ // Restore localStorage
456
+ if (data.localStorage) {
457
+ const localStorageData = JSON.parse(data.localStorage);
458
+ Object.keys(localStorageData).forEach(key => {
459
+ localStorage.setItem(key, localStorageData[key]);
460
+ });
461
+ }
462
+ // Restore sessionStorage
463
+ if (data.sessionStorage) {
464
+ const sessionStorageData = JSON.parse(data.sessionStorage);
465
+ Object.keys(sessionStorageData).forEach(key => {
466
+ sessionStorage.setItem(key, sessionStorageData[key]);
467
+ });
468
+ }
469
+ }, storageData);
470
+ this.debugLog('Restored localStorage and sessionStorage');
471
+ // Clear the stored data since it's been applied
472
+ delete this.browserContext._dev3000_storageData;
473
+ }
474
+ catch (error) {
475
+ this.debugLog(`Failed to restore storage data: ${error instanceof Error ? error.message : String(error)}`);
476
+ }
477
+ }
478
+ async setupFocusHandlers(page) {
479
+ // Note: Focus handlers removed since autosave is now continuous and non-intrusive
480
+ // The autosave timer will detect context closure through its own error handling
481
+ }
280
482
  async waitForServer() {
281
483
  const maxAttempts = 30;
282
484
  let attempts = 0;
@@ -302,7 +504,6 @@ export class DevEnvironment {
302
504
  const duration = 15000; // 15 seconds max animation
303
505
  const interval = 200; // Update every 200ms
304
506
  const totalSteps = duration / interval;
305
- const incrementPerStep = (endPercent - startPercent) / totalSteps;
306
507
  let currentPercent = startPercent;
307
508
  let step = 0;
308
509
  const animationInterval = setInterval(() => {
@@ -475,7 +676,7 @@ export class DevEnvironment {
475
676
  }
476
677
  catch (playwrightError) {
477
678
  if (playwrightError.message?.includes('Executable doesn\'t exist')) {
478
- const packageManager = detectPackageManager();
679
+ detectPackageManager();
479
680
  console.log(chalk.yellow('📦 Installing Playwright chromium browser...'));
480
681
  await this.installPlaywrightBrowsers();
481
682
  // Retry with bundled chromium
@@ -495,33 +696,14 @@ export class DevEnvironment {
495
696
  }
496
697
  }
497
698
  }
498
- // Create context with viewport: null to enable window resizing + persistent storage
499
- try {
500
- const stateFile = join(this.options.profileDir, 'state.json');
501
- this.browserContext = await this.browser.newContext({
502
- viewport: null, // This makes the page size depend on the window size
503
- storageState: existsSync(stateFile) ? stateFile : undefined, // Load persistent state if it exists
504
- });
505
- }
506
- catch (error) {
507
- console.error(chalk.red('[BROWSER CONTEXT ERROR]'), error);
508
- // Fallback: create context without storage state
509
- this.browserContext = await this.browser.newContext({
510
- viewport: null,
511
- });
512
- }
513
- // Set up periodic storage state saving (every 30 seconds)
514
- this.stateTimer = setInterval(async () => {
515
- if (this.browserContext) {
516
- try {
517
- const stateFile = join(this.options.profileDir, 'state.json');
518
- await this.browserContext.storageState({ path: stateFile });
519
- }
520
- catch (error) {
521
- // Ignore errors - context might be closed
522
- }
523
- }
524
- }, 15000); // Save every 15 seconds
699
+ // Create context with viewport: null to enable window resizing
700
+ this.browserContext = await this.browser.newContext({
701
+ viewport: null, // This makes the page size depend on the window size
702
+ });
703
+ // Restore state manually (non-intrusive)
704
+ await this.loadStateManually();
705
+ // Set up focus-aware periodic storage state saving
706
+ this.startStateSaving();
525
707
  // Navigate to the app using the existing blank page
526
708
  const pages = this.browserContext.pages();
527
709
  const page = pages.length > 0 ? pages[0] : await this.browserContext.newPage();
@@ -533,6 +715,10 @@ export class DevEnvironment {
533
715
  // This prevents Playwright from auto-handling the dialog
534
716
  });
535
717
  await page.goto(`http://localhost:${this.options.port}`);
718
+ // Restore localStorage and sessionStorage after navigation
719
+ await this.restoreStorageData(page);
720
+ // Set up focus detection after navigation to prevent context execution errors
721
+ await this.setupFocusHandlers(page);
536
722
  // Take initial screenshot
537
723
  const initialScreenshot = await this.takeScreenshot(page, 'initial-load');
538
724
  if (initialScreenshot) {
@@ -717,15 +903,12 @@ export class DevEnvironment {
717
903
  killPortProcess(this.options.mcpPort, 'dev3000 MCP server')
718
904
  ]);
719
905
  // Clear the state saving timer
720
- if (this.stateTimer) {
721
- clearInterval(this.stateTimer);
722
- }
723
- // Try to save browser state quickly (with timeout)
906
+ this.stopStateSaving();
907
+ // Try to save browser state quickly (with timeout) - non-intrusive
724
908
  if (this.browserContext) {
725
909
  try {
726
910
  console.log(chalk.blue('💾 Saving browser state...'));
727
- const stateFile = join(this.options.profileDir, 'state.json');
728
- const savePromise = this.browserContext.storageState({ path: stateFile });
911
+ const savePromise = this.saveStateManually();
729
912
  const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 2000));
730
913
  await Promise.race([savePromise, timeoutPromise]);
731
914
  console.log(chalk.green('✅ Browser state saved'));
@@ -1 +1 @@
1
- {"version":3,"file":"dev-environment.js","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-environment.js","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { ConfigApiResponse } from '../../types';
2
+ import { ConfigApiResponse } from '@/types';
3
3
 
4
4
  export async function GET(): Promise<NextResponse> {
5
5
  const response: ConfigApiResponse = {
6
- version: process.env.DEV_PLAYWRIGHT_VERSION || '0.0.0'
6
+ version: process.env.DEV3000_VERSION || '0.0.0'
7
7
  };
8
8
 
9
9
  return NextResponse.json(response);
@@ -1,6 +1,6 @@
1
1
  import { NextRequest } from 'next/server';
2
2
  import { readFileSync, existsSync } from 'fs';
3
- import { LogsApiResponse, LogsApiError } from '../../../types';
3
+ import { LogsApiResponse, LogsApiError } from '@/types';
4
4
 
5
5
  export async function GET(request: NextRequest): Promise<Response> {
6
6
  try {
@@ -0,0 +1,71 @@
1
+ import { NextRequest } from 'next/server';
2
+ import { readdirSync, statSync, existsSync } from 'fs';
3
+ import { join, dirname, basename } from 'path';
4
+ import { LogFile, LogListResponse, LogListError } from '@/types';
5
+
6
+ export async function GET(request: NextRequest): Promise<Response> {
7
+ try {
8
+ const currentLogPath = process.env.LOG_FILE_PATH || '/tmp/dev3000.log';
9
+
10
+ if (!existsSync(currentLogPath)) {
11
+ const errorResponse: LogListError = { error: 'Current log file not found' };
12
+ return Response.json(errorResponse, { status: 404 });
13
+ }
14
+
15
+ // Get the directory containing the current log
16
+ const logDir = dirname(currentLogPath);
17
+ const currentLogName = basename(currentLogPath);
18
+
19
+ // Extract project name from current log filename
20
+ // Format: dev3000-{projectName}-{timestamp}.log
21
+ const projectMatch = currentLogName.match(/^dev3000-(.+?)-\d{4}-\d{2}-\d{2}T/);
22
+ const projectName = projectMatch ? projectMatch[1] : 'unknown';
23
+
24
+ // Find all log files for this project
25
+ const files: LogFile[] = [];
26
+
27
+ try {
28
+ const dirContents = readdirSync(logDir);
29
+ const logFiles = dirContents
30
+ .filter(file =>
31
+ file.startsWith(`dev3000-${projectName}-`) &&
32
+ file.endsWith('.log')
33
+ )
34
+ .map(file => {
35
+ const filePath = join(logDir, file);
36
+ const stats = statSync(filePath);
37
+
38
+ // Extract timestamp from filename
39
+ const timestampMatch = file.match(/(\d{4}-\d{2}-\d{2}T[\d-]+Z)/);
40
+ const timestamp = timestampMatch ? timestampMatch[1].replace(/-/g, ':') : '';
41
+
42
+ return {
43
+ name: file,
44
+ path: filePath,
45
+ timestamp,
46
+ size: stats.size,
47
+ mtime: stats.mtime,
48
+ isCurrent: file === currentLogName
49
+ };
50
+ })
51
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime()); // Most recent first
52
+
53
+ files.push(...logFiles);
54
+ } catch (error) {
55
+ console.warn('Could not read log directory:', error);
56
+ }
57
+
58
+ const response: LogListResponse = {
59
+ files,
60
+ currentFile: currentLogPath,
61
+ projectName
62
+ };
63
+
64
+ return Response.json(response);
65
+ } catch (error) {
66
+ const errorResponse: LogListError = {
67
+ error: error instanceof Error ? error.message : 'Unknown error'
68
+ };
69
+ return Response.json(errorResponse, { status: 500 });
70
+ }
71
+ }
@@ -1,6 +1,6 @@
1
1
  import { NextRequest } from 'next/server';
2
2
  import { readFileSync, existsSync } from 'fs';
3
- import { LogsApiResponse, LogsApiError } from '../../../types';
3
+ import { LogsApiResponse, LogsApiError } from '@/types';
4
4
 
5
5
  export async function GET(request: NextRequest): Promise<Response> {
6
6
  try {
@@ -6,7 +6,7 @@ export default function RootLayout({
6
6
  return (
7
7
  <html lang="en">
8
8
  <head>
9
- <title>🎭 Dev Playwright</title>
9
+ <title>🎯 dev3000</title>
10
10
  <script src="https://cdn.tailwindcss.com"></script>
11
11
  </head>
12
12
  <body>{children}</body>
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useState, useEffect, useRef, useMemo } from 'react';
4
- import { LogEntry, LogsApiResponse, ConfigApiResponse } from '../../types';
4
+ import { LogEntry, LogsApiResponse, ConfigApiResponse, LogFile, LogListResponse } from '@/types';
5
5
 
6
6
  export function parseLogEntries(logContent: string): LogEntry[] {
7
7
  // Split by timestamp pattern - each timestamp starts a new log entry
@@ -104,11 +104,31 @@ export default function LogsClient({ version }: LogsClientProps) {
104
104
  const [mode, setMode] = useState<'head' | 'tail'>('tail');
105
105
  const [isAtBottom, setIsAtBottom] = useState(true);
106
106
  const [isLoadingNew, setIsLoadingNew] = useState(false);
107
+ const [isInitialLoading, setIsInitialLoading] = useState(true);
107
108
  const [lastLogCount, setLastLogCount] = useState(0);
108
109
  const [lastFetched, setLastFetched] = useState<Date | null>(null);
110
+ const [availableLogs, setAvailableLogs] = useState<LogFile[]>([]);
111
+ const [currentLogFile, setCurrentLogFile] = useState<string>('');
112
+ const [projectName, setProjectName] = useState<string>('');
113
+ const [showLogSelector, setShowLogSelector] = useState(false);
109
114
  const bottomRef = useRef<HTMLDivElement>(null);
110
115
  const containerRef = useRef<HTMLDivElement>(null);
111
116
  const pollIntervalRef = useRef<NodeJS.Timeout | null>(null);
117
+ const dropdownRef = useRef<HTMLDivElement>(null);
118
+
119
+ const loadAvailableLogs = async () => {
120
+ try {
121
+ const response = await fetch('/api/logs/list');
122
+ if (response.ok) {
123
+ const data: LogListResponse = await response.json();
124
+ setAvailableLogs(data.files);
125
+ setCurrentLogFile(data.currentFile);
126
+ setProjectName(data.projectName);
127
+ }
128
+ } catch (error) {
129
+ console.error('Error loading available logs:', error);
130
+ }
131
+ };
112
132
 
113
133
  const pollForNewLogs = async () => {
114
134
  if (mode !== 'tail' || !isAtBottom) return;
@@ -164,6 +184,11 @@ export default function LogsClient({ version }: LogsClientProps) {
164
184
  }, [mode, isAtBottom, lastLogCount]);
165
185
 
166
186
  const loadInitialLogs = async () => {
187
+ setIsInitialLoading(true);
188
+
189
+ // Load available logs list first
190
+ await loadAvailableLogs();
191
+
167
192
  try {
168
193
  const response = await fetch(`/api/logs/${mode}?lines=1000`);
169
194
  if (!response.ok) {
@@ -175,6 +200,7 @@ export default function LogsClient({ version }: LogsClientProps) {
175
200
  if (!data.logs) {
176
201
  console.warn('No logs data in response');
177
202
  setLogs([]);
203
+ setIsInitialLoading(false);
178
204
  return;
179
205
  }
180
206
 
@@ -183,6 +209,7 @@ export default function LogsClient({ version }: LogsClientProps) {
183
209
  setLogs(entries);
184
210
  setLastLogCount(entries.length);
185
211
  setLastFetched(new Date());
212
+ setIsInitialLoading(false);
186
213
 
187
214
  // Auto-scroll to bottom for tail mode
188
215
  if (mode === 'tail') {
@@ -209,6 +236,20 @@ export default function LogsClient({ version }: LogsClientProps) {
209
236
  };
210
237
  }, []);
211
238
 
239
+ // Close dropdown when clicking outside
240
+ useEffect(() => {
241
+ const handleClickOutside = (event: MouseEvent) => {
242
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
243
+ setShowLogSelector(false);
244
+ }
245
+ };
246
+
247
+ if (showLogSelector) {
248
+ document.addEventListener('mousedown', handleClickOutside);
249
+ return () => document.removeEventListener('mousedown', handleClickOutside);
250
+ }
251
+ }, [showLogSelector]);
252
+
212
253
  const handleScroll = () => {
213
254
  if (containerRef.current) {
214
255
  const { scrollTop, scrollHeight, clientHeight } = containerRef.current;
@@ -226,13 +267,75 @@ export default function LogsClient({ version }: LogsClientProps) {
226
267
  <div className="bg-white shadow-sm border-b sticky top-0 z-10">
227
268
  <div className="max-w-7xl mx-auto px-4 py-3">
228
269
  <div className="flex items-center justify-between">
229
- <div className="flex items-center gap-4">
230
- <h1 className="text-2xl font-bold text-gray-900">🎯 dev3000</h1>
231
- <span className="text-xs text-gray-400 ml-2">(v{version})</span>
232
- <span className="text-sm text-gray-500">{logs.length} entries</span>
270
+ <div className="flex items-center gap-2 sm:gap-4">
271
+ <h1 className="text-xl sm:text-2xl font-bold text-gray-900 whitespace-nowrap">dev3000</h1>
272
+ <span className="text-xs text-gray-400 whitespace-nowrap">(v{version})</span>
273
+
274
+ {/* Log File Selector */}
275
+ {availableLogs.length > 1 ? (
276
+ <div className="relative" ref={dropdownRef}>
277
+ <button
278
+ onClick={() => setShowLogSelector(!showLogSelector)}
279
+ className="flex items-center gap-2 px-3 py-1 text-sm text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors"
280
+ >
281
+ <span className="font-mono text-xs">
282
+ {currentLogFile ? currentLogFile.split('/').pop() : 'dev3000.log'}
283
+ </span>
284
+ <svg
285
+ className={`w-4 h-4 transition-transform ${showLogSelector ? 'rotate-180' : ''}`}
286
+ fill="none"
287
+ stroke="currentColor"
288
+ viewBox="0 0 24 24"
289
+ >
290
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
291
+ </svg>
292
+ </button>
293
+
294
+ {/* Dropdown */}
295
+ {showLogSelector && availableLogs.length > 1 && (
296
+ <div className="absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-20 min-w-80">
297
+ <div className="py-1 max-h-60 overflow-y-auto">
298
+ <div className="px-3 py-2 text-xs font-medium text-gray-500 border-b">
299
+ {projectName} logs ({availableLogs.length})
300
+ </div>
301
+ {availableLogs.map((logFile) => (
302
+ <button
303
+ key={logFile.path}
304
+ onClick={() => {
305
+ // TODO: Implement log switching
306
+ setShowLogSelector(false);
307
+ }}
308
+ className={`w-full text-left px-3 py-2 text-sm hover:bg-gray-50 flex items-center justify-between ${
309
+ logFile.isCurrent ? 'bg-blue-50 text-blue-900' : 'text-gray-700'
310
+ }`}
311
+ >
312
+ <div className="flex flex-col">
313
+ <span className="font-mono text-xs">
314
+ {logFile.name}
315
+ </span>
316
+ <span className="text-xs text-gray-500">
317
+ {new Date(logFile.mtime).toLocaleString()} • {Math.round(logFile.size / 1024)}KB
318
+ </span>
319
+ </div>
320
+ {logFile.isCurrent && (
321
+ <span className="text-xs text-blue-600 font-medium">current</span>
322
+ )}
323
+ </button>
324
+ ))}
325
+ </div>
326
+ </div>
327
+ )}
328
+ </div>
329
+ ) : (
330
+ <span className="font-mono text-xs text-gray-600 px-3 py-1">
331
+ {currentLogFile ? currentLogFile.split('/').pop() : 'dev3000.log'}
332
+ </span>
333
+ )}
334
+
335
+ <span className="text-sm text-gray-500 hidden sm:inline">{logs.length} entries</span>
233
336
  </div>
234
337
 
235
- <div className="flex items-center gap-4 text-sm">
338
+ <div className="flex items-center gap-2 sm:gap-4 text-sm">
236
339
  {/* Mode Toggle */}
237
340
  <div className="flex items-center bg-gray-100 rounded-md p-1">
238
341
  <button
@@ -241,23 +344,23 @@ export default function LogsClient({ version }: LogsClientProps) {
241
344
  // Scroll to top when switching to head mode
242
345
  containerRef.current?.scrollTo({ top: 0, behavior: 'smooth' });
243
346
  }}
244
- className={`px-3 py-1 rounded text-sm font-medium transition-colors ${
347
+ className={`px-2 sm:px-3 py-1 rounded text-xs sm:text-sm font-medium transition-colors whitespace-nowrap ${
245
348
  mode === 'head'
246
349
  ? 'bg-white text-gray-900 shadow-sm'
247
350
  : 'text-gray-600 hover:text-gray-900'
248
351
  }`}
249
352
  >
250
- 📄 Head
353
+ Head
251
354
  </button>
252
355
  <button
253
356
  onClick={() => setMode('tail')}
254
- className={`px-3 py-1 rounded text-sm font-medium transition-colors ${
357
+ className={`px-2 sm:px-3 py-1 rounded text-xs sm:text-sm font-medium transition-colors whitespace-nowrap ${
255
358
  mode === 'tail'
256
359
  ? 'bg-white text-gray-900 shadow-sm'
257
360
  : 'text-gray-600 hover:text-gray-900'
258
361
  }`}
259
362
  >
260
- 📺 Tail
363
+ Tail
261
364
  </button>
262
365
  </div>
263
366
 
@@ -280,7 +383,12 @@ export default function LogsClient({ version }: LogsClientProps) {
280
383
  className="max-w-7xl mx-auto px-4 py-6 pb-14 max-h-screen overflow-y-auto"
281
384
  onScroll={handleScroll}
282
385
  >
283
- {filteredLogs.length === 0 ? (
386
+ {isInitialLoading ? (
387
+ <div className="text-center py-12">
388
+ <div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600"></div>
389
+ <div className="text-gray-500 text-sm mt-4">Loading logs...</div>
390
+ </div>
391
+ ) : filteredLogs.length === 0 ? (
284
392
  <div className="text-center py-12">
285
393
  <div className="text-gray-400 text-lg">📝 No logs yet</div>
286
394
  <div className="text-gray-500 text-sm mt-2">
@@ -1,7 +1,7 @@
1
1
  import LogsClient from './LogsClient';
2
2
 
3
3
  export default function LogsPage() {
4
- const version = process.env.DEV_PLAYWRIGHT_VERSION || '0.0.0';
4
+ const version = process.env.DEV3000_VERSION || '0.0.0';
5
5
 
6
6
  return <LogsClient version={version} />;
7
7
  }
@@ -1,7 +1,8 @@
1
- import type { NextConfig } from 'next'
1
+ import type { NextConfig } from "next";
2
2
 
3
3
  const nextConfig: NextConfig = {
4
- output: 'standalone',
4
+ output: "standalone",
5
+ devIndicators: false,
5
6
  turbopack: {
6
7
  root: __dirname,
7
8
  },
@@ -9,6 +10,6 @@ const nextConfig: NextConfig = {
9
10
  eslint: {
10
11
  ignoreDuringBuilds: true,
11
12
  },
12
- }
13
+ };
13
14
 
14
- export default nextConfig
15
+ export default nextConfig;
@@ -26,7 +26,7 @@
26
26
  "./*"
27
27
  ]
28
28
  },
29
- "target": "ES2017"
29
+ "target": "ES2018"
30
30
  },
31
31
  "include": [
32
32
  "next-env.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev3000",
3
- "version": "0.0.15",
3
+ "version": "0.0.19",
4
4
  "description": "AI-powered development tools with browser monitoring and MCP server integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,6 +55,6 @@
55
55
  "build": "tsc",
56
56
  "dev": "tsc --watch",
57
57
  "test": "vitest run",
58
- "release": "pnpm run build && pnpm test && pnpm version patch && git push origin main --tags && pnpm publish --otp=$(op item get npm --otp)"
58
+ "release": "./scripts/release.sh"
59
59
  }
60
60
  }