dev3000 0.0.177 → 0.0.178

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +136 -154
  2. package/bin/dev3000 +30 -5
  3. package/dist/cdp-monitor.d.ts.map +1 -1
  4. package/dist/cdp-monitor.js.map +1 -1
  5. package/dist/cli.js +20 -6
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/resume.js.map +1 -1
  8. package/dist/commands/status.d.ts +21 -0
  9. package/dist/commands/status.d.ts.map +1 -0
  10. package/dist/commands/status.js +44 -0
  11. package/dist/commands/status.js.map +1 -0
  12. package/dist/components/PackageSelector.js +1 -1
  13. package/dist/constants/log-colors.d.ts.map +1 -1
  14. package/dist/dev-environment.d.ts +6 -4
  15. package/dist/dev-environment.d.ts.map +1 -1
  16. package/dist/dev-environment.js +42 -39
  17. package/dist/dev-environment.js.map +1 -1
  18. package/dist/portless.d.ts +15 -11
  19. package/dist/portless.d.ts.map +1 -1
  20. package/dist/portless.js +70 -81
  21. package/dist/portless.js.map +1 -1
  22. package/dist/screencast-manager.d.ts.map +1 -1
  23. package/dist/screencast-manager.js.map +1 -1
  24. package/dist/services/parsers/error-detectors/base.d.ts.map +1 -1
  25. package/dist/services/parsers/error-detectors/nextjs.d.ts.map +1 -1
  26. package/dist/services/parsers/log-parsers/standard.d.ts.map +1 -1
  27. package/dist/services/parsers/output-processor.d.ts.map +1 -1
  28. package/dist/services/parsers/output-processor.js.map +1 -1
  29. package/dist/skills/d3k/internal-skill.md +82 -115
  30. package/dist/tui-interface-impl.js +1 -1
  31. package/dist/tui-interface-opentui.js.map +1 -1
  32. package/dist/tui-interface.d.ts.map +1 -1
  33. package/dist/utils/agent-browser.js.map +1 -1
  34. package/dist/utils/project-detector.js.map +1 -1
  35. package/dist/utils/project-metadata.js.map +1 -1
  36. package/dist/utils/project-name.js.map +1 -1
  37. package/dist/utils/session.d.ts +5 -0
  38. package/dist/utils/session.d.ts.map +1 -1
  39. package/dist/utils/session.js +1 -1
  40. package/dist/utils/session.js.map +1 -1
  41. package/dist/utils/skill-installer.js.map +1 -1
  42. package/dist/utils/timestamp.js.map +1 -1
  43. package/dist/utils/tmux-helpers.d.ts.map +1 -1
  44. package/dist/utils/version-check.js.map +1 -1
  45. package/package.json +11 -10
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type Session } from "../utils/session.js";
2
+ export interface D3kStatus {
3
+ running: boolean;
4
+ ready: boolean;
5
+ projectName?: string;
6
+ pid?: number;
7
+ appUrl?: string | null;
8
+ appPort?: string;
9
+ browserConnected?: boolean;
10
+ cdpUrl?: string | null;
11
+ logFilePath?: string;
12
+ serverCommand?: string | null;
13
+ serverPid?: number | null;
14
+ startedAt?: string;
15
+ routing?: "portless" | "direct";
16
+ }
17
+ export declare function getD3kStatus(session?: Session | null): D3kStatus;
18
+ export declare function printD3kStatus(options?: {
19
+ json?: boolean;
20
+ }): number;
21
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEtE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CAChC;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAO,GAAG,IAA2B,GAAG,SAAS,CAoBtF;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAqBvE"}
@@ -0,0 +1,44 @@
1
+ import { findCurrentSession } from "../utils/session.js";
2
+ export function getD3kStatus(session = findCurrentSession()) {
3
+ if (!session) {
4
+ return { running: false, ready: false };
5
+ }
6
+ return {
7
+ running: true,
8
+ ready: session.ready === true,
9
+ projectName: session.projectName,
10
+ pid: session.pid,
11
+ appUrl: session.publicUrl || (session.appPort ? `http://localhost:${session.appPort}` : null),
12
+ appPort: session.appPort,
13
+ browserConnected: Boolean(session.cdpUrl),
14
+ cdpUrl: session.cdpUrl || null,
15
+ logFilePath: session.logFilePath,
16
+ serverCommand: session.serverCommand || null,
17
+ serverPid: session.serverPid || null,
18
+ startedAt: session.startTime,
19
+ routing: session.portless ? "portless" : "direct"
20
+ };
21
+ }
22
+ export function printD3kStatus(options = {}) {
23
+ const status = getD3kStatus();
24
+ if (options.json) {
25
+ console.log(JSON.stringify(status, null, 2));
26
+ // "not running" is expected control flow for agents deciding whether to
27
+ // start d3k, so machine-readable status should not surface as a tool error.
28
+ return 0;
29
+ }
30
+ if (!status.running) {
31
+ console.log("d3k is not running for this project.");
32
+ return 1;
33
+ }
34
+ console.log(`d3k is running for ${status.projectName} (PID ${status.pid})`);
35
+ if (status.appUrl)
36
+ console.log(`App: ${status.appUrl}`);
37
+ console.log(`Browser: ${status.browserConnected ? "connected" : "not connected"}`);
38
+ if (status.logFilePath)
39
+ console.log(`Logs: ${status.logFilePath}`);
40
+ if (status.serverCommand)
41
+ console.log(`Command: ${status.serverCommand}`);
42
+ return 0;
43
+ }
44
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,qBAAqB,CAAA;AAkBtE,MAAM,UAAU,YAAY,CAAC,OAAO,GAAmB,kBAAkB,EAAE;IACzE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;QAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;QAC5C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;KAClD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO,GAAuB,EAAE;IAC7D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAE7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,wEAAwE;QACxE,4EAA4E;QAC5E,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;QACnD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,WAAW,SAAS,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;IAC3E,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAA;IAClF,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAClE,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,aAAa,EAAE,CAAC,CAAA;IACzE,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text, useInput } from "ink";
3
3
  import { useState } from "react";
4
4
  import { getSkillsPathForLocation } from "../utils/skill-installer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../src/constants/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CAsBb,CAAA;AAGV,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYpD;AAGD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;CAgBjB,CAAA"}
1
+ {"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../src/constants/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;aAErB,OAAO,EAAE,SAAS;aAClB,MAAM,EAAE,SAAS;aAGjB,OAAO,EAAE,SAAS;aAClB,KAAK,EAAE,SAAS;aAChB,OAAO,EAAE,SAAS;aAClB,IAAI,EAAE,SAAS;aACf,GAAG,EAAE,SAAS;aACd,KAAK,EAAE,SAAS;aAChB,UAAU,EAAE,SAAS;aACrB,GAAG,EAAE,SAAS;aACd,GAAG,EAAE,SAAS;aACd,MAAM,EAAE,SAAS;aACjB,KAAK,EAAE,SAAS;aAChB,IAAI,EAAE,SAAS;aACf,MAAM,EAAE,SAAS;aACjB,UAAU,EAAE,SAAS;aACrB,WAAW,EAAE,SAAS;aACtB,OAAO,EAAE,SAAS;CACV,CAAA;AAGV,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYpD;AAGD,eAAO,MAAM,cAAc;aACzB,OAAO,EAAE,SAAS;aAClB,KAAK,EAAE,OAAO;aACd,OAAO,EAAE,SAAS;aAClB,IAAI,EAAE,MAAM;aACZ,GAAG,EAAE,KAAK;aACV,KAAK,EAAE,OAAO;aACd,UAAU,EAAE,YAAY;aACxB,GAAG,EAAE,KAAK;aACV,GAAG,EAAE,KAAK;aACV,MAAM,EAAE,QAAQ;aAChB,KAAK,EAAE,OAAO;aACd,IAAI,EAAE,MAAM;aACZ,MAAM,EAAE,QAAQ;aAChB,UAAU,EAAE,YAAY;aACxB,WAAW,EAAE,aAAa;CAClB,CAAA"}
@@ -55,6 +55,7 @@ interface DevEnvironmentOptions {
55
55
  tail?: boolean;
56
56
  tui?: boolean;
57
57
  portless?: boolean;
58
+ customServerCommand?: boolean;
58
59
  dateTimeFormat?: "local" | "utc";
59
60
  pluginReactScan?: boolean;
60
61
  debugPort?: number;
@@ -66,6 +67,7 @@ interface DevEnvironmentOptions {
66
67
  installSkills?: boolean;
67
68
  screenshotsDir?: string;
68
69
  }
70
+ export declare function detectServerPortFromOutput(text: string): string | null;
69
71
  /**
70
72
  * Count active d3k instances by checking PID files in tmpdir.
71
73
  * Returns the count of running d3k processes (excluding the current one if specified).
@@ -119,7 +121,7 @@ export declare function createPersistentLogFile(override?: string): string;
119
121
  * processes belong to THIS d3k instance so we don't accidentally kill
120
122
  * Chrome instances from other d3k sessions.
121
123
  */
122
- export declare function writeSessionInfo(projectName: string, logFilePath: string, appPort: string, publicUrl?: string | null, cdpUrl?: string | null, chromePids?: number[], serverCommand?: string, framework?: "nextjs" | "svelte" | "other", serverPid?: number, skillsInstalled?: string[], skillsAgentId?: string | null, preferredBrowserTool?: "agent-browser", agentName?: string | null): void;
124
+ export declare function writeSessionInfo(projectName: string, logFilePath: string, appPort: string, publicUrl?: string | null, cdpUrl?: string | null, chromePids?: number[], serverCommand?: string, framework?: "nextjs" | "svelte" | "other", serverPid?: number, skillsInstalled?: string[], skillsAgentId?: string | null, preferredBrowserTool?: "agent-browser", agentName?: string | null, portless?: boolean, ready?: boolean): void;
123
125
  export declare function getSessionChromePids(projectName: string): number[];
124
126
  export declare class DevEnvironment {
125
127
  private serverProcess;
@@ -141,7 +143,9 @@ export declare class DevEnvironment {
141
143
  private portDetected;
142
144
  private serverUsesHttps;
143
145
  private publicAppUrl;
144
- private portlessAliasName;
146
+ private portlessRuntime;
147
+ private portlessFallbackReason;
148
+ private runtimeReady;
145
149
  /** Returns "https" or "http" based on detected server protocol */
146
150
  private get serverProtocol();
147
151
  private get localhostAppUrl();
@@ -161,8 +165,6 @@ export declare class DevEnvironment {
161
165
  private cleanupOrphanedServer;
162
166
  private acquireLock;
163
167
  private releaseLock;
164
- private syncPortlessAlias;
165
- private clearPortlessAlias;
166
168
  private writeCurrentSessionInfo;
167
169
  private detectPortChange;
168
170
  private debugLog;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { dirname, join, resolve, sep } from "path";
9
9
  import { fileURLToPath } from "url";
10
10
  import { stripVTControlCharacters } from "util";
11
11
  import { CDPMonitor } from "./cdp-monitor.js";
12
- import { ensurePortlessAlias, getPortlessUrl, isPortlessInstalled, removePortlessAlias } from "./portless.js";
12
+ import { buildPortlessServerCommand, preparePortlessRuntime } from "./portless.js";
13
13
  import { ScreencastManager } from "./screencast-manager.js";
14
14
  import { NextJsErrorDetector, OutputProcessor, StandardLogParser } from "./services/parsers/index.js";
15
15
  import { getBundledD3kSkillPath, listAvailableSkills } from "./skills/index.js";
@@ -136,6 +136,12 @@ function parsePortNumber(port) {
136
136
  }
137
137
  return parsed;
138
138
  }
139
+ export function detectServerPortFromOutput(text) {
140
+ return (text.match(/Running:\s+PORT=(\d+)/i)?.[1] ||
141
+ text.match(/using available port (\d+) instead/i)?.[1] ||
142
+ text.match(/Local:.*localhost:(\d+)/i)?.[1] ||
143
+ null);
144
+ }
139
145
  function escapeRegexForPkill(value) {
140
146
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
141
147
  }
@@ -575,7 +581,7 @@ export function createPersistentLogFile(override) {
575
581
  * processes belong to THIS d3k instance so we don't accidentally kill
576
582
  * Chrome instances from other d3k sessions.
577
583
  */
578
- export function writeSessionInfo(projectName, logFilePath, appPort, publicUrl, cdpUrl, chromePids, serverCommand, framework, serverPid, skillsInstalled, skillsAgentId, preferredBrowserTool, agentName) {
584
+ export function writeSessionInfo(projectName, logFilePath, appPort, publicUrl, cdpUrl, chromePids, serverCommand, framework, serverPid, skillsInstalled, skillsAgentId, preferredBrowserTool, agentName, portless, ready) {
579
585
  const projectDir = getProjectDir();
580
586
  try {
581
587
  // Create project directory if it doesn't exist
@@ -601,7 +607,9 @@ export function writeSessionInfo(projectName, logFilePath, appPort, publicUrl, c
601
607
  skillsInstalled: skillsInstalled || [],
602
608
  skillsAgentId: skillsAgentId || null,
603
609
  preferredBrowserTool: preferredBrowserTool || "agent-browser",
604
- agentName: agentName || persistedAgentName || null
610
+ agentName: agentName || persistedAgentName || null,
611
+ portless: portless === true,
612
+ ready: ready === true
605
613
  };
606
614
  // Write session file in project directory
607
615
  writeFileSync(sessionFile, JSON.stringify(sessionInfo, null, 2));
@@ -702,7 +710,9 @@ export class DevEnvironment {
702
710
  portDetected = false;
703
711
  serverUsesHttps = false;
704
712
  publicAppUrl = null;
705
- portlessAliasName = null;
713
+ portlessRuntime = null;
714
+ portlessFallbackReason = null;
715
+ runtimeReady = false;
706
716
  /** Returns "https" or "http" based on detected server protocol */
707
717
  get serverProtocol() {
708
718
  return this.serverUsesHttps ? "https" : "http";
@@ -776,9 +786,15 @@ export class DevEnvironment {
776
786
  spinner: "dots",
777
787
  isEnabled: !options.tui && !options.tail // Disable spinner in TUI mode
778
788
  });
779
- if (options.portless === true && isPortlessInstalled()) {
780
- this.portlessAliasName = projectName;
781
- this.publicAppUrl = getPortlessUrl(projectName);
789
+ if (options.portless !== false) {
790
+ const portless = preparePortlessRuntime(getProjectDisplayName());
791
+ if (portless.success && portless.runtime) {
792
+ this.portlessRuntime = portless.runtime;
793
+ this.publicAppUrl = portless.runtime.url;
794
+ }
795
+ else {
796
+ this.portlessFallbackReason = portless.error || "Portless initialization failed";
797
+ }
782
798
  }
783
799
  // Ensure screenshot directory exists
784
800
  try {
@@ -801,7 +817,7 @@ export class DevEnvironment {
801
817
  // Check if user explicitly set ports via CLI flags
802
818
  const userSetAppPort = this.options.userSetPort || false;
803
819
  // If user didn't set ports, find available ones first (before checking)
804
- if (!userSetAppPort) {
820
+ if (!userSetAppPort && !this.portlessRuntime) {
805
821
  const startPort = parseInt(this.options.port, 10);
806
822
  const availablePort = await findAvailablePort(startPort);
807
823
  if (availablePort !== this.options.port) {
@@ -941,6 +957,12 @@ export class DevEnvironment {
941
957
  this.cleanupOrphanedServer();
942
958
  // Check if TUI mode is enabled (default) and stdin supports it
943
959
  const canUseTUI = this.options.tui && process.stdin.isTTY;
960
+ if (this.portlessFallbackReason) {
961
+ this.debugLog(`Portless unavailable; using direct localhost: ${this.portlessFallbackReason}`);
962
+ if (!canUseTUI) {
963
+ console.warn(chalk.yellow("Portless unavailable; using direct localhost."));
964
+ }
965
+ }
944
966
  if (!canUseTUI && this.options.tui) {
945
967
  this.debugLog("TTY not available, falling back to non-TUI mode");
946
968
  }
@@ -1062,7 +1084,6 @@ export class DevEnvironment {
1062
1084
  }
1063
1085
  // Update TUI with confirmed port (may have changed during server startup)
1064
1086
  this.tui.updateAppPort(this.options.port);
1065
- this.syncPortlessAlias();
1066
1087
  this.tui.updateAppUrl(this.options.appUrl || this.publicAppUrl);
1067
1088
  // Legacy tools server removed - using CLI commands instead
1068
1089
  // await this.waitForMcpServer()
@@ -1078,6 +1099,7 @@ export class DevEnvironment {
1078
1099
  this.debugLog("Browser monitoring disabled via --servers-only flag");
1079
1100
  }
1080
1101
  // Write session info for tooling discovery (include CDP URL if browser monitoring was started)
1102
+ this.runtimeReady = true;
1081
1103
  this.writeCurrentSessionInfo(projectName);
1082
1104
  // Clear status - ready!
1083
1105
  await this.tui.updateStatus(null);
@@ -1122,7 +1144,6 @@ export class DevEnvironment {
1122
1144
  }
1123
1145
  // Legacy server removed - using CLI commands instead
1124
1146
  // await this.waitForMcpServer()
1125
- this.syncPortlessAlias();
1126
1147
  // Start CDP monitoring only if server started successfully and not in servers-only mode
1127
1148
  if (!this.options.serversOnly && serverStarted) {
1128
1149
  this.spinner.text = `Starting ${this.options.commandName} browser...`;
@@ -1136,6 +1157,7 @@ export class DevEnvironment {
1136
1157
  }
1137
1158
  // Get project name for session info and Visual Timeline URL
1138
1159
  const projectName = getProjectName();
1160
+ this.runtimeReady = true;
1139
1161
  this.writeCurrentSessionInfo(projectName);
1140
1162
  // Complete startup with success message only in non-TUI mode
1141
1163
  this.spinner.succeed("Development environment ready!");
@@ -1173,7 +1195,13 @@ export class DevEnvironment {
1173
1195
  this.startHealthCheck();
1174
1196
  }
1175
1197
  async startServer() {
1176
- this.debugLog(`Starting server process: ${this.options.serverCommand}`);
1198
+ const launchCommand = this.portlessRuntime
1199
+ ? buildPortlessServerCommand(this.portlessRuntime, this.options.serverCommand, {
1200
+ appPort: this.options.userSetPort ? this.options.port : undefined,
1201
+ customCommand: this.options.customServerCommand
1202
+ })
1203
+ : this.options.serverCommand;
1204
+ this.debugLog(`Starting server process: ${launchCommand}`);
1177
1205
  this.serverStartTime = Date.now();
1178
1206
  const serverEnv = { ...process.env };
1179
1207
  if (this.publicAppUrl) {
@@ -1181,7 +1209,7 @@ export class DevEnvironment {
1181
1209
  serverEnv.__VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS = ".localhost";
1182
1210
  }
1183
1211
  // Use the full command string with shell: true to properly handle complex commands
1184
- this.serverProcess = spawn(this.options.serverCommand, {
1212
+ this.serverProcess = spawn(launchCommand, {
1185
1213
  stdio: ["ignore", "pipe", "pipe"],
1186
1214
  shell: true,
1187
1215
  detached: true, // Run independently
@@ -1424,45 +1452,22 @@ export class DevEnvironment {
1424
1452
  this.debugLog(`Failed to release lock: ${error}`);
1425
1453
  }
1426
1454
  }
1427
- syncPortlessAlias() {
1428
- if (!this.portlessAliasName) {
1429
- return;
1430
- }
1431
- const result = ensurePortlessAlias(this.portlessAliasName, this.options.port);
1432
- if (result.success) {
1433
- this.publicAppUrl = result.url;
1434
- this.debugLog(`Portless alias ready: ${this.portlessAliasName} -> ${this.options.port} (${result.url})`);
1435
- }
1436
- else {
1437
- this.publicAppUrl = null;
1438
- this.debugLog(`Portless alias setup failed: ${result.error}`);
1439
- }
1440
- }
1441
- clearPortlessAlias() {
1442
- if (!this.portlessAliasName) {
1443
- return;
1444
- }
1445
- removePortlessAlias(this.portlessAliasName);
1446
- }
1447
1455
  writeCurrentSessionInfo(projectName = getProjectName()) {
1448
1456
  const cdpUrl = this.cdpMonitor?.getCdpUrl() || null;
1449
1457
  const chromePids = this.cdpMonitor?.getChromePids() || [];
1450
1458
  const skillsInstalled = listAvailableSkills(process.cwd());
1451
- writeSessionInfo(projectName, this.options.logFile, this.options.port, this.options.appUrl || this.publicAppUrl, cdpUrl, chromePids, this.options.serverCommand, this.options.framework, this.serverProcess?.pid, skillsInstalled, this.options.skillsAgentId ?? null, this.options.browserTool, this.options.agentName ?? null);
1459
+ writeSessionInfo(projectName, this.options.logFile, this.options.port, this.options.appUrl || this.publicAppUrl, cdpUrl, chromePids, this.options.serverCommand, this.options.framework, this.serverProcess?.pid, skillsInstalled, this.options.skillsAgentId ?? null, this.options.browserTool, this.options.agentName ?? null, Boolean(this.portlessRuntime), this.runtimeReady);
1452
1460
  }
1453
1461
  detectPortChange(text) {
1454
1462
  // Detect Next.js port switch: "⚠ Port 3000 is in use by process 39543, using available port 3001 instead."
1455
1463
  // Also detect: "Local: http://localhost:3001"
1456
- const nextJsPortSwitchMatch = text.match(/using available port (\d+) instead/i);
1457
- const localUrlMatch = text.match(/Local:.*localhost:(\d+)/i);
1458
- const detectedPort = nextJsPortSwitchMatch?.[1] || localUrlMatch?.[1];
1464
+ const detectedPort = detectServerPortFromOutput(text);
1459
1465
  if (detectedPort && detectedPort !== this.options.port) {
1460
1466
  const oldPort = this.options.port;
1461
1467
  this.debugLog(`Detected server port change from ${oldPort} to ${detectedPort}`);
1462
1468
  this.logger.log("server", `[PORT] Server switched from port ${oldPort} to ${detectedPort}`);
1463
1469
  this.options.port = detectedPort;
1464
1470
  this.portDetected = true;
1465
- this.syncPortlessAlias();
1466
1471
  // Update session info with new port
1467
1472
  const projectName = getProjectName();
1468
1473
  if (this.cdpMonitor || this.serverProcess?.pid) {
@@ -1829,7 +1834,6 @@ export class DevEnvironment {
1829
1834
  catch (_error) {
1830
1835
  // Non-fatal - ignore cleanup errors
1831
1836
  }
1832
- this.clearPortlessAlias();
1833
1837
  // Check PID file ownership BEFORE deleting (needed for cleanup decisions)
1834
1838
  let weOwnPidFile = false;
1835
1839
  try {
@@ -1845,7 +1849,6 @@ export class DevEnvironment {
1845
1849
  catch (_error) {
1846
1850
  // Non-fatal - ignore cleanup errors
1847
1851
  }
1848
- this.clearPortlessAlias();
1849
1852
  // Stop TUI if it's running
1850
1853
  if (this.tui) {
1851
1854
  await this.tui.shutdown();