@sudu-cli/fronted-preview-mcp 1.0.0-beta.3 → 1.0.0-beta.4

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 (37) hide show
  1. package/dist/cdp/connectionManager.d.ts +57 -0
  2. package/dist/cdp/connectionManager.js +153 -0
  3. package/dist/cdp/connectionManager.js.map +1 -0
  4. package/dist/cli.js +2 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/constants.d.ts +19 -0
  7. package/dist/constants.js +26 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/detectors/frameworkDetector.js +17 -13
  10. package/dist/detectors/frameworkDetector.js.map +1 -1
  11. package/dist/handlers/autoFixLoop.d.ts +31 -0
  12. package/dist/handlers/autoFixLoop.js +120 -4
  13. package/dist/handlers/autoFixLoop.js.map +1 -1
  14. package/dist/handlers/checkPageErrors.js +11 -50
  15. package/dist/handlers/checkPageErrors.js.map +1 -1
  16. package/dist/handlers/typescriptDiagnostics.js +4 -25
  17. package/dist/handlers/typescriptDiagnostics.js.map +1 -1
  18. package/dist/index.js +15 -3
  19. package/dist/index.js.map +1 -1
  20. package/dist/serverManager.d.ts +22 -4
  21. package/dist/serverManager.js +215 -140
  22. package/dist/serverManager.js.map +1 -1
  23. package/dist/types.d.ts +9 -0
  24. package/dist/types.js +21 -1
  25. package/dist/types.js.map +1 -1
  26. package/dist/version.d.ts +7 -0
  27. package/dist/version.js +10 -0
  28. package/dist/version.js.map +1 -0
  29. package/package.json +1 -1
  30. package/templates/init/instructions.md +1 -11
  31. package/templates/init/opencode.json +1 -1
  32. package/dist/handlers/pickElement.d.ts +0 -10
  33. package/dist/handlers/pickElement.js +0 -413
  34. package/dist/handlers/pickElement.js.map +0 -1
  35. package/dist/handlers/takeScreenshot.d.ts +0 -17
  36. package/dist/handlers/takeScreenshot.js +0 -83
  37. package/dist/handlers/takeScreenshot.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { type Client } from 'chrome-remote-interface';
2
+ export interface CDPConnectionConfig {
3
+ maxRetries: number;
4
+ retryDelayMs: number;
5
+ connectionTimeoutMs: number;
6
+ enableConnectionPooling: boolean;
7
+ }
8
+ export declare const DEFAULT_CDP_CONFIG: CDPConnectionConfig;
9
+ export declare class CDPConnectionManager {
10
+ private static instance;
11
+ private pool;
12
+ private config;
13
+ private connecting;
14
+ private constructor();
15
+ static getInstance(config?: CDPConnectionConfig): CDPConnectionManager;
16
+ static resetInstance(): void;
17
+ getConnection(port: number): Promise<Client>;
18
+ private createConnectionWithRetry;
19
+ private createConnection;
20
+ private isConnectionHealthy;
21
+ releaseConnection(port: number): void;
22
+ closeConnection(port: number): Promise<void>;
23
+ closeAll(): Promise<void>;
24
+ private sleep;
25
+ getPoolStats(): Record<number, {
26
+ total: number;
27
+ inUse: number;
28
+ }>;
29
+ }
30
+ export interface CDPEventHandlers {
31
+ onLogEntryAdded?: (params: {
32
+ entry: LogEntry;
33
+ }) => void;
34
+ onNetworkResponseReceived?: (params: {
35
+ response: NetworkResponse;
36
+ }) => void;
37
+ onNetworkLoadingFailed?: (params: {
38
+ requestId: string;
39
+ errorText: string;
40
+ }) => void;
41
+ onPageLoadEventFired?: (params: {
42
+ timestamp: number;
43
+ }) => void;
44
+ }
45
+ export interface LogEntry {
46
+ level: 'log' | 'error' | 'warning' | 'info' | 'debug';
47
+ text: string;
48
+ url?: string;
49
+ lineNumber?: number;
50
+ columnNumber?: number;
51
+ stackTrace?: string;
52
+ }
53
+ export interface NetworkResponse {
54
+ url: string;
55
+ status: number;
56
+ requestMethod?: string;
57
+ }
@@ -0,0 +1,153 @@
1
+ import CDP from 'chrome-remote-interface';
2
+ export const DEFAULT_CDP_CONFIG = {
3
+ maxRetries: 3,
4
+ retryDelayMs: 1000,
5
+ connectionTimeoutMs: 10000,
6
+ enableConnectionPooling: true,
7
+ };
8
+ export class CDPConnectionManager {
9
+ static instance = null;
10
+ pool = new Map();
11
+ config;
12
+ connecting = new Map();
13
+ constructor(config = DEFAULT_CDP_CONFIG) {
14
+ this.config = config;
15
+ }
16
+ static getInstance(config) {
17
+ if (!CDPConnectionManager.instance) {
18
+ CDPConnectionManager.instance = new CDPConnectionManager(config);
19
+ }
20
+ return CDPConnectionManager.instance;
21
+ }
22
+ static resetInstance() {
23
+ CDPConnectionManager.instance = null;
24
+ }
25
+ async getConnection(port) {
26
+ // If pooling disabled, create new connection each time
27
+ if (!this.config.enableConnectionPooling) {
28
+ return this.createConnectionWithRetry(port);
29
+ }
30
+ // Check for available pooled connection
31
+ const pool = this.pool.get(port) || [];
32
+ const available = pool.find(c => !c.inUse && this.isConnectionHealthy(c.client));
33
+ if (available) {
34
+ available.inUse = true;
35
+ return available.client;
36
+ }
37
+ // Check if connection is already being created
38
+ const existing = this.connecting.get(port);
39
+ if (existing) {
40
+ return existing;
41
+ }
42
+ // Create new connection with retry
43
+ const connectionPromise = this.createConnectionWithRetry(port);
44
+ this.connecting.set(port, connectionPromise);
45
+ try {
46
+ const client = await connectionPromise;
47
+ return client;
48
+ }
49
+ finally {
50
+ this.connecting.delete(port);
51
+ }
52
+ }
53
+ async createConnectionWithRetry(port) {
54
+ let lastError = null;
55
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
56
+ try {
57
+ const client = await this.createConnection(port);
58
+ return client;
59
+ }
60
+ catch (err) {
61
+ lastError = err instanceof Error ? err : new Error(String(err));
62
+ if (attempt < this.config.maxRetries) {
63
+ const delay = this.config.retryDelayMs * Math.pow(2, attempt);
64
+ await this.sleep(delay);
65
+ }
66
+ }
67
+ }
68
+ throw new Error(`Failed to connect to Chrome DevTools Protocol on port ${port} after ${this.config.maxRetries + 1} attempts. ` +
69
+ `Last error: ${lastError?.message}. Ensure Chrome is running with --remote-debugging-port=${port}`);
70
+ }
71
+ async createConnection(port) {
72
+ const options = { port };
73
+ // Create connection with timeout
74
+ const connectionPromise = CDP(options);
75
+ const timeoutPromise = new Promise((_, reject) => {
76
+ setTimeout(() => reject(new Error(`CDP connection timeout after ${this.config.connectionTimeoutMs}ms`)), this.config.connectionTimeoutMs);
77
+ });
78
+ const client = await Promise.race([connectionPromise, timeoutPromise]);
79
+ // Verify connection is working
80
+ await client.send('Browser.getVersion');
81
+ return client;
82
+ }
83
+ isConnectionHealthy(client) {
84
+ try {
85
+ // Check if client is still connected
86
+ return client !== null && typeof client.close === 'function';
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ releaseConnection(port) {
93
+ const pool = this.pool.get(port);
94
+ if (!pool)
95
+ return;
96
+ const connection = pool.find(c => c.inUse);
97
+ if (connection) {
98
+ connection.inUse = false;
99
+ }
100
+ }
101
+ async closeConnection(port) {
102
+ const pool = this.pool.get(port);
103
+ if (!pool)
104
+ return;
105
+ for (const conn of pool) {
106
+ if (!conn.inUse) {
107
+ try {
108
+ await conn.client.close();
109
+ }
110
+ catch {
111
+ // Ignore cleanup errors
112
+ }
113
+ }
114
+ }
115
+ // Remove only non-in-use connections
116
+ const remaining = pool.filter(c => c.inUse);
117
+ if (remaining.length === 0) {
118
+ this.pool.delete(port);
119
+ }
120
+ else {
121
+ this.pool.set(port, remaining);
122
+ }
123
+ }
124
+ async closeAll() {
125
+ for (const [port, pool] of this.pool.entries()) {
126
+ for (const conn of pool) {
127
+ try {
128
+ await conn.client.close();
129
+ }
130
+ catch {
131
+ // Ignore cleanup errors
132
+ }
133
+ }
134
+ }
135
+ this.pool.clear();
136
+ this.connecting.clear();
137
+ }
138
+ sleep(ms) {
139
+ return new Promise(resolve => setTimeout(resolve, ms));
140
+ }
141
+ // For testing/debugging
142
+ getPoolStats() {
143
+ const stats = {};
144
+ for (const [port, pool] of this.pool.entries()) {
145
+ stats[port] = {
146
+ total: pool.length,
147
+ inUse: pool.filter(c => c.inUse).length,
148
+ };
149
+ }
150
+ return stats;
151
+ }
152
+ }
153
+ //# sourceMappingURL=connectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionManager.js","sourceRoot":"","sources":["../../src/cdp/connectionManager.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { main as runMcpServer } from './index.js';
3
+ import { VERSION } from './version.js';
3
4
  async function showHelp() {
4
5
  console.log(`
5
- @sudu-cli/fronted-preview-mcp v1.0.0 — Frontend preview MCP server
6
+ @sudu-cli/fronted-preview-mcp v${VERSION} — Frontend preview MCP server
6
7
 
7
8
  USAGE:
8
9
  fronted-preview-mcp Start MCP server (stdio — used by opencode)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,UAAU,QAAQ;IACrB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,KAAK,UAAU,QAAQ;IACrB,OAAO,CAAC,GAAG,CAAC;iCACmB,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBvC,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare const TIMEOUTS: {
2
+ readonly DEV_SERVER_START: 30000;
3
+ readonly DEV_SERVER_STOP: 5000;
4
+ readonly CDP_CONNECTION: 10000;
5
+ readonly CDP_CONNECTION_RETRY_DELAY: 1000;
6
+ readonly CDP_MAX_RETRIES: 3;
7
+ readonly PAGE_LOAD_DEFAULT: 3000;
8
+ readonly PAGE_LOAD_EXTRA: 1000;
9
+ readonly AUTO_FIX_ITERATION: 30000;
10
+ readonly AUTO_FIX_INITIAL_WAIT: 2000;
11
+ readonly AUTO_FIX_MAX_ITERATIONS: 3;
12
+ readonly AUTO_FIX_MAX_ITERATION_LIMIT: 10;
13
+ readonly AUTO_FIX_ITERATION_TIMEOUT_MIN: 1000;
14
+ readonly AUTO_FIX_ITERATION_TIMEOUT_MAX: 120000;
15
+ readonly SERVER_START_TIMEOUT: 30000;
16
+ readonly SERVER_STOP_TIMEOUT: 5000;
17
+ readonly PORT_CHECK_INTERVAL: 500;
18
+ };
19
+ export type TimeoutKey = keyof typeof TIMEOUTS;
@@ -0,0 +1,26 @@
1
+ // Centralized timeout constants
2
+ export const TIMEOUTS = {
3
+ // Dev server timeouts
4
+ DEV_SERVER_START: 30000,
5
+ DEV_SERVER_STOP: 5000,
6
+ // CDP connection timeouts
7
+ CDP_CONNECTION: 10000,
8
+ CDP_CONNECTION_RETRY_DELAY: 1000,
9
+ CDP_MAX_RETRIES: 3,
10
+ // Page load timeouts
11
+ PAGE_LOAD_DEFAULT: 3000,
12
+ PAGE_LOAD_EXTRA: 1000,
13
+ // Auto-fix loop timeouts
14
+ AUTO_FIX_ITERATION: 30000,
15
+ AUTO_FIX_INITIAL_WAIT: 2000,
16
+ AUTO_FIX_MAX_ITERATIONS: 3,
17
+ AUTO_FIX_MAX_ITERATION_LIMIT: 10,
18
+ AUTO_FIX_ITERATION_TIMEOUT_MIN: 1000,
19
+ AUTO_FIX_ITERATION_TIMEOUT_MAX: 120000,
20
+ // Server manager timeouts
21
+ SERVER_START_TIMEOUT: 30000,
22
+ SERVER_STOP_TIMEOUT: 5000,
23
+ // Port check interval
24
+ PORT_CHECK_INTERVAL: 500,
25
+ };
26
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,sBAAsB;IACtB,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,IAAI;IAErB,0BAA0B;IAC1B,cAAc,EAAE,KAAK;IACrB,0BAA0B,EAAE,IAAI;IAChC,eAAe,EAAE,CAAC;IAElB,qBAAqB;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI;IAErB,yBAAyB;IACzB,kBAAkB,EAAE,KAAK;IACzB,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,CAAC;IAC1B,4BAA4B,EAAE,EAAE;IAChC,8BAA8B,EAAE,IAAI;IACpC,8BAA8B,EAAE,MAAM;IAEtC,0BAA0B;IAC1B,oBAAoB,EAAE,KAAK;IAC3B,mBAAmB,EAAE,IAAI;IAEzB,sBAAsB;IACtB,mBAAmB,EAAE,GAAG;CAChB,CAAC"}
@@ -74,18 +74,13 @@ async function detectFramework(projectDir) {
74
74
  const scripts = pkg.scripts || {};
75
75
  const projectName = pkg.name || path.basename(projectDir);
76
76
  const hasNodeModules = await fileExists(path.join(projectDir, 'node_modules'));
77
- // Check each framework in priority order
77
+ // Priority 1: Check dependencies (most reliable - what actually runs)
78
78
  for (const cfg of FRAMEWORK_CONFIGS) {
79
- // Check config files
80
- for (const configFile of cfg.configFiles) {
81
- const configPath = path.join(projectDir, configFile);
82
- if (await fileExists(configPath)) {
83
- // Read config to extract custom port
84
- const content = await fs.readFile(configPath, 'utf-8');
85
- const customPort = extractPortFromConfig(content);
79
+ for (const key of cfg.depKeys) {
80
+ if (allDeps[key]) {
86
81
  return {
87
82
  framework: cfg.framework,
88
- port: customPort ?? cfg.port,
83
+ port: cfg.port,
89
84
  devCommand: findDevCommand(scripts, cfg.framework),
90
85
  devScript: findDevScriptName(scripts),
91
86
  projectName,
@@ -94,12 +89,21 @@ async function detectFramework(projectDir) {
94
89
  };
95
90
  }
96
91
  }
97
- // Check dependencies
98
- for (const key of cfg.depKeys) {
99
- if (allDeps[key]) {
92
+ }
93
+ // Priority 2: Check config files as confirmation (but only if dependency also exists)
94
+ for (const cfg of FRAMEWORK_CONFIGS) {
95
+ const hasDep = cfg.depKeys.some(key => allDeps[key]);
96
+ if (!hasDep)
97
+ continue; // Skip config check if no matching dependency
98
+ for (const configFile of cfg.configFiles) {
99
+ const configPath = path.join(projectDir, configFile);
100
+ if (await fileExists(configPath)) {
101
+ // Read config to extract custom port
102
+ const content = await fs.readFile(configPath, 'utf-8');
103
+ const customPort = extractPortFromConfig(content);
100
104
  return {
101
105
  framework: cfg.framework,
102
- port: cfg.port,
106
+ port: customPort ?? cfg.port,
103
107
  devCommand: findDevCommand(scripts, cfg.framework),
104
108
  devScript: findDevScriptName(scripts),
105
109
  projectName,
@@ -1 +1 @@
1
- {"version":3,"file":"frameworkDetector.js","sourceRoot":"","sources":["../../src/detectors/frameworkDetector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,iBAAiB,GAAG;IACxB;QACE,SAAS,EAAE,MAAe;QAC1B,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;QACpE,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB;IACD;QACE,SAAS,EAAE,QAAiB;QAC5B,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;QACpE,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB;IACD;QACE,SAAS,EAAE,SAAkB;QAC7B,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,CAAC,eAAe,CAAC;QAC9B,OAAO,EAAE,CAAC,kBAAkB,CAAC;KAC9B;IACD;QACE,SAAS,EAAE,KAAc;QACzB,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC,eAAe,CAAC;KAC3B;IACD;QACE,SAAS,EAAE,SAAkB;QAC7B,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;QACvD,OAAO,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC;KAC3C;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEnD,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,aAAqB;IAClD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACjE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,GAAG,GAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACtC,cAAc,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACvE,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,GAAG,GAAG,CAAC,YAAY;QACnB,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;KAC/B,CAAC;IACF,MAAM,OAAO,GAA2B,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1D,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/E,yCAAyC;IACzC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,qBAAqB;QACrB,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACrD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,qCAAqC;gBACrC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAClD,OAAO;oBACL,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,IAAI,EAAE,UAAU,IAAI,GAAG,CAAC,IAAI;oBAC5B,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;oBAClD,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACrC,WAAW;oBACX,cAAc;oBACd,UAAU,EAAE,OAAO;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,OAAO;oBACL,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;oBAClD,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACrC,WAAW;oBACX,cAAc;oBACd,UAAU,EAAE,OAAO;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,IAAI,EAAE,aAAa;YACzB,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;YAC9B,SAAS;YACT,WAAW;YACX,cAAc;YACd,UAAU,EAAE,OAAO;SACpB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,CAAC;QACP,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,WAAW;QACX,cAAc;QACd,UAAU,EAAE,OAAO;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA+B;IACxD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,OAA+B,EAAE,SAAiB;IACxE,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IAExC,8BAA8B;IAC9B,MAAM,QAAQ,GAA2B;QACvC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,uBAAuB;QAClC,GAAG,EAAE,qBAAqB;QAC1B,OAAO,EAAE,kCAAkC;KAC5C,CAAC;IACF,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"frameworkDetector.js","sourceRoot":"","sources":["../../src/detectors/frameworkDetector.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,24 @@
1
1
  import { ToolContext } from '../types.js';
2
+ export interface FixStrategy {
3
+ errorType: 'typescript' | 'console' | 'network';
4
+ pattern: RegExp;
5
+ fix: (context: ToolContext, error: ConsoleError | TSDiagnostic) => Promise<FixResult>;
6
+ }
7
+ export interface FixResult {
8
+ success: boolean;
9
+ message: string;
10
+ changes?: Array<{
11
+ file: string;
12
+ description: string;
13
+ }>;
14
+ }
2
15
  export interface AutoFixOptions {
3
16
  maxIterations?: number;
4
17
  timeoutPerIteration?: number;
5
18
  stopOnSuccess?: boolean;
6
19
  targetErrors?: string[];
20
+ fixAction?: 'auto' | 'suggest' | 'none';
21
+ fixStrategies?: FixStrategy[];
7
22
  }
8
23
  export interface AutoFixResult {
9
24
  success: boolean;
@@ -12,6 +27,22 @@ export interface AutoFixResult {
12
27
  errorsRemaining: number;
13
28
  messages: string[];
14
29
  errors: string[];
30
+ fixesApplied: FixResult[];
31
+ }
32
+ interface ConsoleError {
33
+ type: string;
34
+ message: string;
35
+ url?: string;
36
+ lineNumber?: number;
37
+ stackTrace?: string;
38
+ }
39
+ interface TSDiagnostic {
40
+ message: string;
41
+ severity: string;
42
+ file?: string;
43
+ line?: number;
44
+ column?: number;
15
45
  }
16
46
  export declare function autoFixLoop(context: ToolContext, options?: AutoFixOptions): Promise<AutoFixResult>;
17
47
  export declare function handleAutoFixLoop(context: ToolContext, options?: AutoFixOptions): Promise<AutoFixResult>;
48
+ export {};
@@ -1,14 +1,120 @@
1
1
  import { handleCheckPageErrors } from './checkPageErrors.js';
2
2
  import { handleGetTypeScriptDiagnostics } from './typescriptDiagnostics.js';
3
+ import { TIMEOUTS } from '../constants.js';
4
+ function parseCheckPageErrorsResponse(response) {
5
+ try {
6
+ const text = response.content[0]?.text || '{}';
7
+ const data = JSON.parse(text);
8
+ return {
9
+ errors: data.consoleMessages?.filter((m) => m.type === 'error') || [],
10
+ diagnostics: []
11
+ };
12
+ }
13
+ catch {
14
+ return { errors: [], diagnostics: [] };
15
+ }
16
+ }
17
+ function parseTSDiagnosticsResponse(response) {
18
+ try {
19
+ const text = response.content[0]?.text || '{}';
20
+ const data = JSON.parse(text);
21
+ return {
22
+ errors: [],
23
+ diagnostics: data.diagnostics || []
24
+ };
25
+ }
26
+ catch {
27
+ return { errors: [], diagnostics: [] };
28
+ }
29
+ }
3
30
  export async function autoFixLoop(context, options = {}) {
4
- const { maxIterations = 3, timeoutPerIteration = 30000, stopOnSuccess = true, targetErrors = [] } = options;
31
+ const { maxIterations = TIMEOUTS.AUTO_FIX_MAX_ITERATIONS, timeoutPerIteration = TIMEOUTS.AUTO_FIX_ITERATION, stopOnSuccess = true, targetErrors = [], fixAction = 'suggest', fixStrategies = [] } = options;
5
32
  const result = {
6
33
  success: false,
7
34
  iterations: 0,
8
35
  errorsFixed: 0,
9
36
  errorsRemaining: 0,
10
37
  messages: [],
11
- errors: []
38
+ errors: [],
39
+ fixesApplied: []
40
+ };
41
+ // Default fix strategies for common errors
42
+ const defaultStrategies = [
43
+ {
44
+ errorType: 'typescript',
45
+ pattern: /Unused variable|unused import/i,
46
+ fix: async (ctx, error) => {
47
+ // Remove unused imports/variables via ts-morph
48
+ return { success: false, message: 'Unused import removal requires ts-morph integration' };
49
+ }
50
+ },
51
+ {
52
+ errorType: 'typescript',
53
+ pattern: /Property '(.+)' does not exist on type/i,
54
+ fix: async (ctx, error) => {
55
+ // Suggest adding missing property or type assertion
56
+ return { success: false, message: 'Missing property fix requires AST manipulation' };
57
+ }
58
+ },
59
+ {
60
+ errorType: 'typescript',
61
+ pattern: /Type '(.+)' is not assignable to type/i,
62
+ fix: async (ctx, error) => {
63
+ return { success: false, message: 'Type assignment fix requires type inference' };
64
+ }
65
+ },
66
+ {
67
+ errorType: 'console',
68
+ pattern: /Cannot read propert(?:y|ies) of (?:null|undefined)/i,
69
+ fix: async (ctx, error) => {
70
+ return { success: false, message: 'Null check insertion requires AST analysis' };
71
+ }
72
+ },
73
+ {
74
+ errorType: 'console',
75
+ pattern: /is not defined/i,
76
+ fix: async (ctx, error) => {
77
+ return { success: false, message: 'Missing import/definition fix requires module analysis' };
78
+ }
79
+ },
80
+ {
81
+ errorType: 'network',
82
+ pattern: /Failed to fetch|Network Error|ECONNREFUSED/i,
83
+ fix: async (ctx, error) => {
84
+ return { success: false, message: 'Network errors typically require backend/server fixes' };
85
+ }
86
+ }
87
+ ];
88
+ const strategies = [...defaultStrategies, ...fixStrategies];
89
+ // Helper to find matching strategy
90
+ const findStrategy = (error) => {
91
+ const errorMsg = error.message || String(error);
92
+ return strategies.find(s => s.pattern.test(errorMsg));
93
+ };
94
+ // Helper to apply fix strategies
95
+ const applyFixes = async (errors) => {
96
+ const fixes = [];
97
+ for (const error of errors) {
98
+ const strategy = findStrategy(error);
99
+ if (strategy && fixAction !== 'none') {
100
+ try {
101
+ const fixResult = await strategy.fix(context, error);
102
+ fixes.push(fixResult);
103
+ if (fixResult.success) {
104
+ result.messages.push(`✅ Fixed: ${fixResult.message}`);
105
+ result.errorsFixed++;
106
+ }
107
+ else {
108
+ result.messages.push(`💡 Suggestion: ${fixResult.message}`);
109
+ }
110
+ }
111
+ catch (err) {
112
+ const msg = err instanceof Error ? err.message : String(err);
113
+ result.errors.push(`Fix failed for "${error.message}": ${msg}`);
114
+ }
115
+ }
116
+ }
117
+ return fixes;
12
118
  };
13
119
  // Check initial state
14
120
  const initialConsoleErrors = await handleCheckPageErrors(context);
@@ -27,7 +133,7 @@ export async function autoFixLoop(context, options = {}) {
27
133
  result.messages.push(`=== Iteration ${iteration + 1} ===`);
28
134
  try {
29
135
  // Wait for any pending operations
30
- await new Promise(resolve => setTimeout(resolve, 2000));
136
+ await new Promise(resolve => setTimeout(resolve, TIMEOUTS.AUTO_FIX_INITIAL_WAIT));
31
137
  // Check current state
32
138
  const currentErrors = await handleCheckPageErrors(context);
33
139
  const currentDiagnostics = await handleGetTypeScriptDiagnostics(context);
@@ -48,6 +154,16 @@ export async function autoFixLoop(context, options = {}) {
48
154
  result.messages.push(`✅ All errors fixed after ${iteration + 1} iterations`);
49
155
  break;
50
156
  }
157
+ // Apply fix strategies if we have errors and fixAction is not 'none'
158
+ if (currentErrorCount > 0 && fixAction !== 'none') {
159
+ result.messages.push(`Attempting fixes for ${currentErrorCount} errors...`);
160
+ const allErrors = [
161
+ ...currentConsoleErrors.map(e => ({ ...e, _type: 'console' })),
162
+ ...currentTsDiagnostics.map(d => ({ ...d, _type: 'typescript' }))
163
+ ];
164
+ const fixes = await applyFixes(allErrors);
165
+ result.fixesApplied.push(...fixes);
166
+ }
51
167
  // Log current state
52
168
  result.messages.push(`Current errors: ${currentErrorCount} (fixed: ${errorsFixed})`);
53
169
  if (currentConsoleErrors.length > 0) {
@@ -67,7 +183,7 @@ export async function autoFixLoop(context, options = {}) {
67
183
  result.messages.push('No errors found, but continuing to next iteration');
68
184
  }
69
185
  // Wait before next iteration
70
- await new Promise(resolve => setTimeout(resolve, timeoutPerIteration));
186
+ await new Promise(resolve => setTimeout(resolve, timeoutPerIteration ?? TIMEOUTS.AUTO_FIX_ITERATION));
71
187
  }
72
188
  catch (error) {
73
189
  const errorMessage = `Error in iteration ${iteration + 1}: ${error instanceof Error ? error.message : 'Unknown error'}`;
@@ -1 +1 @@
1
- {"version":3,"file":"autoFixLoop.js","sourceRoot":"","sources":["../../src/handlers/autoFixLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autoFixLoop.js","sourceRoot":"","sources":["../../src/handlers/autoFixLoop.ts"],"names":[],"mappings":"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"}