claude-dev-server 1.2.1 → 1.2.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/pty.ts","../src/server/source-map.ts","../src/server/websocket.ts","../src/universal/index.ts"],"names":["resolve","__filename","spawn","SourceMapConsumer"],"mappings":"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","file":"chunk-EEXRIRSF.js","sourcesContent":["import { spawn } from 'child_process'\nimport { randomBytes } from 'crypto'\n\nexport interface PtyOptions {\n cwd: string\n claudePath: string\n args: string[]\n env?: Record<string, string>\n}\n\nexport function spawnClaudeCode(options: PtyOptions) {\n // Generate a random port for ttyd\n const port = 50000 + Math.floor(Math.random() * 10000)\n\n // Start ttyd with claude command\n const ttydProc = spawn('ttyd', [\n '--port', String(port),\n '--interface', '127.0.0.1',\n '--writable',\n options.claudePath,\n ...options.args,\n ], {\n cwd: options.cwd,\n env: {\n ...process.env,\n ...options.env,\n TERM: 'xterm-256color',\n FORCE_COLOR: '1',\n },\n })\n\n ttydProc.on('exit', (code) => {\n console.log(`[claude-dev-server] ttyd exited - code: ${code}`)\n })\n\n ttydProc.on('error', (err) => {\n console.error(`[claude-dev-server] ttyd error: ${err.message}`)\n })\n\n // Wait a bit for ttyd to start, then return the WebSocket URL\n return new Promise<{ wsUrl: string; process: typeof ttydProc; port: number }>((resolve, reject) => {\n ttydProc.stdout?.on('data', (data: Buffer) => {\n const msg = data.toString()\n console.log(`[ttyd] ${msg}`)\n })\n\n ttydProc.stderr?.on('data', (data: Buffer) => {\n const msg = data.toString()\n console.error(`[ttyd stderr] ${msg}`)\n })\n\n // Give ttyd a moment to start\n setTimeout(() => {\n resolve({\n wsUrl: `ws://127.0.0.1:${port}`,\n process: ttydProc,\n port,\n })\n }, 500)\n\n ttydProc.on('error', reject)\n })\n}\n","import { SourceMapConsumer } from 'source-map'\n\nexport interface SourcePosition {\n source: string\n line: number\n column: number\n name?: string\n}\n\nexport interface CodeLocation {\n file: string\n line: number\n column: number\n content?: string\n}\n\n// Store source maps by generated file path\nconst sourceMapCache = new Map<string, SourceMapConsumer>()\n\nexport async function parseSourceMap(sourceMapUrl: string, content: string): Promise<void> {\n try {\n const consumer = await new SourceMapConsumer(content)\n sourceMapCache.set(sourceMapUrl, consumer)\n } catch (err) {\n console.error('Failed to parse source map:', err)\n }\n}\n\nexport async function findOriginalPosition(\n generatedFile: string,\n line: number,\n column: number\n): Promise<SourcePosition | null> {\n const consumer = sourceMapCache.get(generatedFile)\n if (!consumer) {\n return null\n }\n\n try {\n const position = consumer.originalPositionFor({ line, column })\n if (position.source) {\n return {\n source: position.source,\n line: position.line || 1,\n column: position.column || 0,\n name: position.name,\n }\n }\n } catch (err) {\n console.error('Failed to find original position:', err)\n }\n\n return null\n}\n\nexport function generateVSCodeURI(location: CodeLocation): string {\n // Generate VS Code URI scheme for opening files\n // vscode://file/{path}:{line}:{col}\n const filePath = location.file.replace(/\\\\/g, '/')\n return `vscode://file/${filePath}:${location.line}:${location.column}`\n}\n\nexport function formatCodeContext(location: CodeLocation): string {\n return `\n📍 Code Location:\n File: ${location.file}\n Line: ${location.line}\n Column: ${location.column}\n`\n}\n\nexport function clearCache() {\n sourceMapCache.clear()\n}\n","import { WebSocketServer, WebSocket } from 'ws'\nimport { spawnClaudeCode } from './pty.js'\nimport { findOriginalPosition, parseSourceMap, CodeLocation, formatCodeContext } from './source-map.js'\nimport { readFile } from 'fs/promises'\nimport { resolve } from 'path'\n\nexport interface WebSocketServerOptions {\n port?: number\n projectRoot: string\n claudePath: string\n claudeArgs: string[]\n}\n\nexport function createWebSocketServer(options: WebSocketServerOptions) {\n let wss: WebSocketServer | null = null\n let port = options.port || 0\n let ttydInfo: { wsUrl: string; process: any; port: number } | null = null\n\n const start = async (): Promise<{ wsPort: number; ttydPort: number }> => {\n // Start ttyd first\n console.log('[claude-dev-server] Starting ttyd...')\n ttydInfo = await spawnClaudeCode({\n cwd: options.projectRoot,\n claudePath: options.claudePath,\n args: options.claudeArgs,\n })\n console.log(`[claude-dev-server] ttyd running at ${ttydInfo.wsUrl}`)\n\n // Also start a simple WebSocket server for inspect functionality\n return new Promise((resolve, reject) => {\n wss = new WebSocketServer({ port, host: '127.0.0.1' })\n\n wss.on('listening', () => {\n const address = wss!.address()\n if (address && typeof address === 'object') {\n port = address.port\n resolve({ wsPort: port, ttydPort: ttydInfo!.port })\n }\n })\n\n wss.on('error', (err) => {\n reject(err)\n })\n\n wss.on('connection', (ws: WebSocket) => {\n ws.on('message', async (message: Buffer) => {\n try {\n const msg = JSON.parse(message.toString())\n\n if (msg.type === 'inspect') {\n await handleInspect(msg, ws, options.projectRoot)\n } else if (msg.type === 'loadSourceMap') {\n await handleLoadSourceMap(msg, ws, options.projectRoot)\n }\n } catch (err) {\n // Ignore\n }\n })\n\n // Send ready message with ttyd URL\n ws.send(JSON.stringify({\n type: 'ready',\n ttydUrl: ttydInfo!.wsUrl\n }))\n })\n })\n }\n\n const stop = () => {\n ttydInfo?.process.kill()\n wss?.close()\n }\n\n return { start, stop }\n}\n\nasync function handleLoadSourceMap(\n msg: any,\n ws: WebSocket,\n projectRoot: string\n) {\n const { sourceMapUrl } = msg\n try {\n const mapPath = resolve(projectRoot, sourceMapUrl.replace(/^\\//, ''))\n const content = await readFile(mapPath, 'utf-8')\n await parseSourceMap(sourceMapUrl, content)\n ws.send(JSON.stringify({\n type: 'sourceMapLoaded',\n sourceMapUrl,\n success: true\n }))\n } catch (err) {\n ws.send(JSON.stringify({\n type: 'sourceMapLoaded',\n sourceMapUrl,\n success: false,\n error: (err as Error).message\n }))\n }\n}\n\nasync function handleInspect(\n msg: any,\n ws: WebSocket,\n projectRoot: string\n) {\n const { url, line, column, sourceMapUrl } = msg\n\n let location: CodeLocation | null = null\n\n if (sourceMapUrl) {\n const original = await findOriginalPosition(sourceMapUrl, line, column)\n if (original) {\n location = {\n file: resolve(projectRoot, original.source),\n line: original.line,\n column: original.column,\n }\n }\n }\n\n if (!location) {\n const match = url.match(/\\/@fs\\/(.+?)(?:\\?|$)|\\/@vite\\/(.+?)(?:\\?|$)/)\n if (match) {\n location = {\n file: decodeURIComponent(match[1] || match[2]),\n line,\n column,\n }\n }\n }\n\n ws.send(JSON.stringify({\n type: 'inspectResult',\n location: location ? {\n file: location.file,\n line: location.line,\n column: location.column,\n context: formatCodeContext(location)\n } : null\n }))\n}\n","import { spawn } from 'child_process'\nimport { existsSync, readFileSync } from 'fs'\nimport { createHash } from 'crypto'\nimport { join, dirname, relative, sep } from 'path'\nimport http, { IncomingMessage } from 'http'\nimport { fileURLToPath } from 'url'\nimport { createProxyMiddleware } from 'http-proxy-middleware'\nimport { WebSocketServer } from 'ws'\nimport { createConnection } from 'net'\nimport { SourceMapConsumer } from 'source-map'\nimport { createWebSocketServer } from '../server/websocket.js'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\nexport interface UniversalServerOptions {\n port?: number\n claudePath?: string\n claudeArgs?: string[]\n cwd?: string\n server?: {\n type?: 'vite' | 'next' | 'webpack' | 'custom'\n command?: string\n port?: number\n }\n}\n\nexport async function startUniversalServer(options: UniversalServerOptions = {}) {\n const cwd = options.cwd || process.cwd()\n const port = options.port || 3000\n\n // 1. 检测项目类型\n const projectType = options.server?.type || detectProjectType(cwd)\n const targetCommand = options.server?.command || getDefaultCommand(projectType)\n\n console.log(`[Claude Dev Server] Detected project type: ${projectType}`)\n console.log(`[Claude Dev Server] Starting target server...`)\n\n // 2. 启动目标 dev server(不预设端口)\n const targetServer = spawnTargetServer(targetCommand, cwd)\n\n // 3. 等待并检测目标服务器实际监听的端口\n console.log(`[Claude Dev Server] Waiting for target server to start (PID: ${targetServer.pid})...`)\n const targetPort = await detectServerPort(targetServer, 30000)\n\n if (!targetPort) {\n throw new Error('Failed to detect target server port. Please check if the dev server started successfully.')\n }\n\n console.log(`[Claude Dev Server] Target server is running on port ${targetPort}`)\n\n // 4. 启动控制 WebSocket 服务器(ttyd + Claude)\n const wsServer = createWebSocketServer({\n port: 0, // 自动分配端口\n projectRoot: cwd,\n claudePath: options.claudePath || 'claude',\n claudeArgs: options.claudeArgs || [],\n })\n\n const { wsPort, ttydPort } = await wsServer.start()\n console.log(`[Claude Dev Server] Control server running on ws://localhost:${wsPort}`)\n console.log(`[Claude Dev Server] ttyd running on ws://localhost:${ttydPort}`)\n\n // 5. 启动 HTTP 代理服务器\n const proxyServer = createProxyServer(targetPort, wsPort, cwd)\n proxyServer.listen(port)\n console.log(`[Claude Dev Server] Proxy server running on http://localhost:${port}`)\n console.log(`\\n🚀 Ready! Open http://localhost:${port} in your browser`)\n\n // 清理处理\n const cleanup = () => {\n console.log('[Claude Dev Server] Shutting down...')\n targetServer.kill()\n wsServer.stop()\n proxyServer.close()\n process.exit(0)\n }\n\n process.on('SIGINT', cleanup)\n process.on('SIGTERM', cleanup)\n\n return { proxyServer, targetServer, wsServer }\n}\n\nfunction detectProjectType(cwd: string): 'vite' | 'next' | 'webpack' | 'custom' {\n if (existsSync(join(cwd, 'vite.config.ts')) || existsSync(join(cwd, 'vite.config.js'))) {\n return 'vite'\n }\n if (existsSync(join(cwd, 'next.config.js')) || existsSync(join(cwd, 'next.config.mjs'))) {\n return 'next'\n }\n if (existsSync(join(cwd, 'webpack.config.js')) || existsSync(join(cwd, 'webpack.config.ts'))) {\n return 'webpack'\n }\n return 'custom'\n}\n\nfunction getDefaultCommand(projectType: string): string {\n switch (projectType) {\n case 'vite': return 'npm run dev'\n case 'next': return 'npm run dev'\n case 'webpack': return 'npm run dev'\n default: return 'npm run dev'\n }\n}\n\nfunction spawnTargetServer(command: string, cwd: string) {\n const [cmd, ...args] = command.split(' ')\n const child = spawn(cmd, args, {\n cwd,\n stdio: 'pipe',\n env: process.env,\n })\n\n // Forward child's stdout/stderr to parent so user can see dev server output\n child.stdout?.pipe(process.stdout)\n child.stderr?.pipe(process.stderr)\n\n return child\n}\n\n/**\n * Detect the port that the dev server is listening on by parsing stdout.\n * Most dev servers announce their port on startup like: \"Local: http://localhost:5173\"\n */\nasync function detectServerPort(childProcess: any, timeout: number): Promise<number | null> {\n return new Promise((resolve) => {\n const timeoutId = setTimeout(() => {\n cleanup()\n resolve(null)\n }, timeout)\n\n let stdout = ''\n\n const onData = (chunk: Buffer) => {\n stdout += chunk.toString()\n\n // Match common port announcement patterns:\n // Vite: \"Local: http://localhost:5173/\"\n // Next.js: \"Local: http://localhost:3000\"\n // Webpack: \"http://localhost:8080/\"\n const patterns = [\n /localhost:(\\d{4,5})/,\n /127\\.0\\.0\\.1:(\\d{4,5})/,\n /0\\.0\\.0\\.0:(\\d{4,5})/,\n ]\n\n for (const pattern of patterns) {\n const match = stdout.match(pattern)\n if (match) {\n const port = parseInt(match[1], 10)\n console.log(`[Claude Dev Server] Detected port from stdout: ${port}`)\n cleanup()\n resolve(port)\n return\n }\n }\n }\n\n const cleanup = () => {\n clearTimeout(timeoutId)\n childProcess.stdout?.off('data', onData)\n }\n\n childProcess.stdout?.on('data', onData)\n })\n}\n\n/**\n * Handle source map resolution request.\n * Given a compiled file path and line/column, find the original source position.\n */\nasync function handleSourceMapRequest(\n projectRoot: string,\n filePath: string,\n line: number,\n column: number,\n targetPort?: number\n): Promise<{ file?: string; line?: number; column?: number; original?: any; error?: string }> {\n try {\n let content: string\n let fullPath = filePath\n\n // If filePath starts with / and looks like a URL path, fetch from Vite\n if (filePath.startsWith('/') && targetPort) {\n // console.log('[Claude Dev Server] Fetching from Vite:', filePath)\n try {\n const response = await fetch(`http://localhost:${targetPort}${filePath}`)\n if (!response.ok) {\n console.log('[Claude Dev Server] Failed to fetch from Dev Server:', response.status)\n return { error: 'Failed to fetch from Dev Server' }\n }\n content = await response.text()\n console.log('[Claude Dev Server] Fetched', content.length, 'chars from Dev Server')\n } catch (e) {\n console.log('[Claude Dev Server] Fetch error:', e)\n return { error: 'Fetch error: ' + (e as Error).message }\n }\n } else {\n // If filePath is absolute, check if it's within projectRoot\n if (!filePath.startsWith('/')) {\n fullPath = join(projectRoot, filePath)\n }\n\n // Check if the file exists\n if (!existsSync(fullPath)) {\n console.log('[Claude Dev Server] File not found:', fullPath)\n return { error: 'File not found' }\n }\n\n // Read the file content\n content = readFileSync(fullPath, 'utf-8')\n\n console.log('[Claude Dev Server] Resolving source map for:', fullPath, 'at line:', line)\n }\n\n // Look for sourceMappingURL comment\n // Format: //# sourceMappingURL=filename.js.map or /*# sourceMappingURL=filename.js.map */\n // Or inline: //# sourceMappingURL=data:application/json;base64,...\n let sourceMapUrl: string | null = null\n const patterns = [\n /\\/\\/[@#]\\s*sourceMappingURL=([^\\s]+)/,\n /\\/\\*[@#]\\s*sourceMappingURL=([^\\s]+)\\s*\\*\\//\n ]\n\n for (const pattern of patterns) {\n const match = content.match(pattern)\n if (match) {\n sourceMapUrl = match[1]\n console.log('[Claude Dev Server] Found sourceMappingURL:', sourceMapUrl.substring(0, 100) + '...')\n break\n }\n }\n\n if (!sourceMapUrl) {\n console.log('[Claude Dev Server] No source map found in:', fullPath)\n return { file: relative(projectRoot, fullPath), line, column }\n }\n\n let sourceMapContent: string\n let sourceMap: any\n\n // Check if it's an inline source map (data URL)\n if (sourceMapUrl.startsWith('data:application/json;base64,') ||\n sourceMapUrl.startsWith('data:application/json;charset=utf-8;base64,')) {\n console.log('[Claude Dev Server] Found inline source map')\n // Extract base64 content\n const base64Data = sourceMapUrl.split(',', 2)[1]\n sourceMapContent = Buffer.from(base64Data, 'base64').toString('utf-8')\n try {\n sourceMap = JSON.parse(sourceMapContent)\n } catch (e) {\n console.log('[Claude Dev Server] Failed to parse inline source map:', e)\n return { file: relative(projectRoot, fullPath), line, column }\n }\n } else if (sourceMapUrl.startsWith('http://') || sourceMapUrl.startsWith('https://')) {\n // Remote source map - try to fetch via proxy\n console.log('[Claude Dev Server] Remote source map not supported:', sourceMapUrl)\n return { file: relative(projectRoot, fullPath), line, column }\n } else {\n // External source map file\n let sourceMapPath: string\n if (sourceMapUrl.startsWith('/')) {\n // Absolute path\n sourceMapPath = sourceMapUrl\n } else {\n // Relative path - resolve relative to the file\n sourceMapPath = join(dirname(fullPath), sourceMapUrl)\n }\n\n console.log('[Claude Dev Server] Reading external source map:', sourceMapPath)\n\n // Read the source map\n if (!existsSync(sourceMapPath)) {\n console.log('[Claude Dev Server] Source map file not found:', sourceMapPath)\n return { file: relative(projectRoot, fullPath), line, column }\n }\n\n sourceMapContent = readFileSync(sourceMapPath, 'utf-8')\n sourceMap = JSON.parse(sourceMapContent)\n }\n\n // console.log('[Claude Dev Server] Source map loaded, sources:', sourceMap.sources?.length, 'mappings:', sourceMap.mappings?.substring(0, 50) + '...')\n // console.log('[Claude Dev Server] Source map sources:', sourceMap.sources)\n\n // Use source-map library to find original position\n const consumer = await new SourceMapConsumer(sourceMap)\n const original = consumer.originalPositionFor({\n line: line,\n column: column\n })\n consumer.destroy()\n\n // console.log('[Claude Dev Server] Source map result:', {\n // generated: { line, column },\n // original: original\n // })\n\n if (original.source && original.line !== null) {\n // Convert source path to be relative to project root\n let originalFile = original.source\n if (originalFile.startsWith('webpack://')) {\n // Remove webpack:// prefix\n originalFile = originalFile.replace(/^webpack:\\/\\/[\\/\\\\]?/, '')\n }\n // For Vite and other bundlers, source might be just a filename\n if (!originalFile.startsWith('/')) {\n // Try to resolve relative to project root to verify the file exists\n const possiblePath = join(projectRoot, originalFile)\n if (existsSync(possiblePath)) {\n // Keep the original source path as-is (preserves directory structure)\n // originalFile is already correct (e.g., 'src/App.jsx')\n } else {\n // File doesn't exist at the given path\n // Check if it's just a filename (no directory separators)\n const fileName = originalFile.split('/').pop() || originalFile.split('\\\\').pop() || originalFile\n if (fileName === originalFile) {\n // Source is just a filename (common with Vite inline source maps)\n // If filePath is already a relative path like '/src/App.jsx', use it directly\n if (filePath.startsWith('/')) {\n originalFile = filePath.substring(1) // Remove leading slash\n console.log('[Claude Dev Server] Source is just a filename, using filePath:', originalFile)\n } else {\n // Fall back to relative path from fullPath\n originalFile = relative(projectRoot, fullPath)\n }\n } else {\n // Has directory but file doesn't exist, use relative\n originalFile = relative(projectRoot, possiblePath)\n }\n }\n }\n\n // console.log('[Claude Dev Server] Source map resolved:', {\n // original: { file: originalFile, line: original.line, column: original.column },\n // generated: { file: filePath, line, column }\n // })\n\n return {\n file: originalFile,\n line: original.line,\n column: original.column || 1,\n original: {\n source: original.source,\n line: original.line,\n column: original.column,\n name: original.name\n }\n }\n }\n\n // No original position found, return generated\n return { file: relative(projectRoot, fullPath), line, column }\n } catch (err) {\n console.error('[Claude Dev Server] Source map resolution error:', err)\n return { error: String(err) }\n }\n}\n\n/**\n * Handle Next.js Turbopack source file lookup.\n * Given a page path, find the corresponding source file by parsing Turbopack chunks.\n */\nasync function handleTurbopackLookup(\n projectRoot: string,\n pagePath: string,\n targetPort: number\n): Promise<{ file?: string; line?: number; error?: string }> {\n try {\n console.log('[Claude Dev Server] Turbopack lookup for page:', pagePath)\n\n // Get the HTML page to find loaded chunk URLs\n const pageRes = await fetch(`http://localhost:${targetPort}${pagePath}`)\n if (!pageRes.ok) {\n return { error: 'Failed to fetch page' }\n }\n\n const html = await pageRes.text()\n const chunkUrls: string[] = []\n\n // Extract chunk URLs from HTML\n const scriptMatches = html.matchAll(/<script[^>]*src=\"([^\"]*\\/_next\\/static\\/chunks\\/[^\"]*)\"/g)\n for (const match of scriptMatches) {\n if (match[1]) {\n chunkUrls.push(match[1])\n }\n }\n\n console.log('[Claude Dev Server] Found', chunkUrls.length, 'chunk URLs')\n\n // Parse each chunk to find module paths\n for (const chunkUrl of chunkUrls) {\n try {\n const fullUrl = chunkUrl.startsWith('http') ? chunkUrl : `http://localhost:${targetPort}${chunkUrl}`\n const chunkRes = await fetch(fullUrl)\n if (!chunkRes.ok) continue\n\n const chunkContent = await chunkRes.text()\n\n // Extract module paths from Turbopack format\n // Format: \"[project]/path/to/file.tsx\" or \"[project]/path/to/file.tsx (ecmascript)\"\n const modulePathRegex = /\\[project\\]([^\\s\"]+\\.(tsx?|jsx?))/g\n const matches = [...chunkContent.matchAll(modulePathRegex)]\n\n for (const match of matches) {\n if (match[1]) {\n const sourcePath = match[1]\n // Remove [project] prefix and convert to relative path\n let relativePath = sourcePath.replace(/^\\[project\\]/, '')\n\n // Check if this path matches the current page\n // Normalize page path: /zh/login -> /login or /app/[lng]/(auth)/login/page.tsx\n const normalizedPagePath = pagePath.replace(/^\\/[^/]+/, '') // Remove language prefix\n\n if (relativePath.toLowerCase().includes(normalizedPagePath.toLowerCase()) ||\n relativePath.toLowerCase().includes('login')) {\n // Found matching source file\n console.log('[Claude Dev Server] Found source file:', relativePath)\n\n return {\n file: relativePath,\n line: undefined // Turbopack doesn't provide line numbers\n }\n }\n }\n }\n } catch (e) {\n console.log('[Claude Dev Server] Error fetching chunk:', chunkUrl, e)\n }\n }\n\n return { error: 'Source file not found for page: ' + pagePath }\n } catch (err) {\n console.error('[Claude Dev Server] Turbopack lookup error:', err)\n return { error: String(err) }\n }\n}\n\n/**\n * Check if request is for an HTML page (not assets, API, WebSocket, etc.)\n */\nfunction isHtmlPageRequest(req: IncomingMessage): boolean {\n const accept = req.headers.accept || ''\n const url = req.url || ''\n\n // Check if request accepts HTML\n if (!accept.includes('text/html')) {\n return false\n }\n\n // Check if it's a page request (not assets, API, etc.)\n if (url.startsWith('/@') || url.startsWith('/_next/') ||\n url.startsWith('/ttyd') || url.startsWith('/dev.html')) {\n return false\n }\n\n return true\n}\n\nfunction createProxyServer(targetPort: number, wsPort: number, projectRoot: string) {\n // 读取 ttyd 资源文件\n // 从当前模块路径计算 assets 目录\n // moduleDir 是 /Users/lloyd/moox/claude-dev-server/dist\n // 所以需要 assets 是 /Users/lloyd/moox/claude-dev-server/dist/assets\n const moduleDir = dirname(fileURLToPath(import.meta.url))\n const assetsPath = join(moduleDir, 'assets')\n\n let ttydHtml: string\n let ttydBridgeJs: string\n let devHtml: string\n\n try {\n ttydHtml = readFileSync(join(assetsPath, 'ttyd-terminal.html'), 'utf-8')\n ttydBridgeJs = readFileSync(join(assetsPath, 'ttyd-bridge.js'), 'utf-8')\n devHtml = readFileSync(join(assetsPath, 'dev.html'), 'utf-8')\n } catch (e: any) {\n console.error('[Claude Dev Server] Failed to read assets from', assetsPath)\n console.error('[Claude Dev Server] moduleDir:', moduleDir)\n console.error('[Claude Dev Server] Error:', e.message)\n throw new Error('Assets not found. Please run `npm run build` first.')\n }\n\n const server = http.createServer((req, res) => {\n // Check if request is from dev.html iframe\n const referer = req.headers.referer || ''\n const isFromDevPage = referer.includes('dev.html')\n\n // Handle /dev.html route\n if (req.url?.startsWith('/dev.html')) {\n const urlParams = new URL(req.url || '', `http://${req.headers.host}`)\n const originalPath = urlParams.searchParams.get('path') || '/'\n\n // Replace placeholders in dev HTML\n const host = req.headers.host || 'localhost:3000'\n const origin = `http://${host}`\n const modifiedDevHtml = devHtml.replace(\n /__CLAUDE_IFRAME_SRC__/g,\n `${origin}${originalPath}`\n ).replace(\n /__CLAUDE_ORIGINAL_PATH__/g,\n originalPath\n )\n res.setHeader('Content-Type', 'text/html')\n res.end(modifiedDevHtml)\n return\n }\n\n // If not from dev.html and requesting HTML page, redirect to dev.html\n if (!isFromDevPage && isHtmlPageRequest(req)) {\n const currentPath = req.url || '/'\n const devPageUrl = `/dev.html?path=${encodeURIComponent(currentPath)}`\n res.writeHead(302, { 'Location': devPageUrl })\n res.end()\n return\n }\n\n // 处理 @claude-port 端点\n if (req.url === '/@claude-port') {\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify({ port: wsPort }))\n return\n }\n\n // 处理 sourcemap 解析端点\n if (req.url?.startsWith('/@sourcemap?')) {\n const url = new URL(req.url, `http://localhost:${wsPort}`)\n const file = url.searchParams.get('file')\n const line = url.searchParams.get('line')\n const column = url.searchParams.get('col')\n\n if (file && line && column) {\n handleSourceMapRequest(projectRoot, file, parseInt(line), parseInt(column || '1'), targetPort)\n .then(result => {\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify(result))\n })\n .catch(err => {\n console.error('[Claude Dev Server] Source map error:', err)\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify({ error: err.message }))\n })\n return\n }\n }\n\n // 处理 Next.js/Turbopack 源文件查找端点\n if (req.url?.startsWith('/@sourcemap-lookup?')) {\n const url = new URL(req.url, `http://localhost:${wsPort}`)\n const page = url.searchParams.get('page')\n const framework = url.searchParams.get('framework')\n\n if (page && framework === 'nextjs') {\n handleTurbopackLookup(projectRoot, page, targetPort)\n .then(result => {\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify(result))\n })\n .catch(err => {\n console.error('[Claude Dev Server] Turbopack lookup error:', err)\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify({ error: err.message }))\n })\n return\n }\n }\n\n // 处理 /ttyd/* 路由\n if (req.url?.startsWith('/ttyd/')) {\n const urlPath = req.url.split('?')[0] // 移除查询参数\n\n if (urlPath === '/ttyd/index.html' || urlPath === '/ttyd/') {\n res.setHeader('Content-Type', 'text/html')\n res.end(ttydHtml)\n return\n }\n\n if (urlPath === '/ttyd/ttyd-bridge.js') {\n res.setHeader('Content-Type', 'application/javascript')\n res.end(ttydBridgeJs)\n return\n }\n\n // Handle ttyd token endpoint\n if (urlPath === '/ttyd/token' || urlPath === '/ttyd/index.html/token') {\n res.setHeader('Content-Type', 'application/json')\n res.end(JSON.stringify({ token: '' }))\n return\n }\n\n // 其他 /ttyd/* 路由返回 404\n res.statusCode = 404\n res.end('Not found')\n return\n }\n\n // 代理到目标服务器\n // Remove accept-encoding to get uncompressed content\n const proxyHeaders = { ...req.headers }\n delete proxyHeaders['accept-encoding']\n\n const options = {\n hostname: 'localhost',\n port: targetPort,\n path: req.url,\n method: req.method,\n headers: proxyHeaders,\n }\n\n const proxyReq = http.request(options, (proxyRes) => {\n // Pure proxy - no injection (using dev.html mode only)\n const statusCode = proxyRes.statusCode || 200\n res.writeHead(statusCode, proxyRes.headers)\n proxyRes.pipe(res)\n })\n\n proxyReq.on('error', (err) => {\n console.error('[Claude Dev Server] Proxy error:', err)\n res.statusCode = 502\n res.end('Bad Gateway')\n })\n\n req.pipe(proxyReq)\n })\n\n // Handle WebSocket upgrade requests (e.g., Next.js webpack-hmr, Vite HMR)\n server.on('upgrade', (req: any, socket: any, head: Buffer) => {\n // Check if this is a WebSocket upgrade request\n if (req.headers['upgrade']?.toLowerCase() !== 'websocket') {\n return\n }\n\n console.log('[Claude Dev Server] WebSocket upgrade request:', req.url)\n\n // Create raw TCP connection to target server\n const targetSocket = createConnection(targetPort, 'localhost', () => {\n console.log('[Claude Dev Server] Connected to target WebSocket server')\n\n // Forward the upgrade request to target\n const upgradeRequest = [\n `${req.method} ${req.url} HTTP/1.1`,\n `Host: localhost:${targetPort}`,\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Key: ${req.headers['sec-websocket-key']}`,\n `Sec-WebSocket-Version: ${req.headers['sec-websocket-version'] || '13'}`,\n ]\n\n if (req.headers['sec-websocket-protocol']) {\n upgradeRequest.push(`Sec-WebSocket-Protocol: ${req.headers['sec-websocket-protocol']}`)\n }\n if (req.headers['sec-websocket-extensions']) {\n upgradeRequest.push(`Sec-WebSocket-Extensions: ${req.headers['sec-websocket-extensions']}`)\n }\n\n targetSocket.write(upgradeRequest.join('\\r\\n') + '\\r\\n\\r\\n')\n\n // Forward the head (remaining data from the upgrade request)\n if (head && head.length > 0) {\n targetSocket.write(head)\n }\n })\n\n // Handle response from target server\n targetSocket.on('data', (data: Buffer) => {\n if (socket.writable) {\n socket.write(data)\n }\n })\n\n // Handle data from client\n socket.on('data', (data: Buffer) => {\n if (targetSocket.writable) {\n targetSocket.write(data)\n }\n })\n\n // Handle connection close\n socket.on('close', () => {\n console.log('[Claude Dev Server] Client WebSocket closed')\n targetSocket.destroy()\n })\n\n targetSocket.on('close', () => {\n console.log('[Claude Dev Server] Target WebSocket closed')\n socket.end()\n })\n\n // Handle errors\n socket.on('error', (err: Error) => {\n console.error('[Claude Dev Server] Client socket error:', err.message)\n targetSocket.destroy()\n })\n\n targetSocket.on('error', (err: Error) => {\n console.error('[Claude Dev Server] Target socket error:', err.message)\n socket.end()\n })\n })\n\n return server\n}\n\n/**\n * Generate Sec-WebSocket-Accept header value for WebSocket handshake.\n * RFC 6455: base64(sha1(clientKey + GUID))\n */\nfunction generateWebSocketAccept(clientKey: string): string {\n const GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n const hash = createHash('sha1')\n .update(clientKey + GUID)\n .digest('base64')\n return hash\n}\n"]}
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { startUniversalServer } from './chunk-PAE5WTS2.js';
2
+ import { startUniversalServer } from './chunk-EEXRIRSF.js';
3
3
  import { execSync } from 'child_process';
4
4
 
5
5
  async function checkTtyd() {
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { startUniversalServer } from './chunk-PAE5WTS2.js';
1
+ export { startUniversalServer } from './chunk-EEXRIRSF.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-server",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "Universal dev server wrapper with Claude Code AI assistant - works with Vite, Next.js, Webpack and more",
5
5
  "author": "lloydzhou",
6
6
  "license": "MIT",