@axpo/cli 1.0.0 → 1.0.2

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
@@ -84,7 +84,7 @@ axpo clean # Remove build folder and zip files
84
84
 
85
85
  ## Links
86
86
 
87
- - **Core SDK:** [@axpo/core](https://www.npmjs.com/package/@axpo/core)
87
+ - **Core SDK:** [@axpo/sdk](https://www.npmjs.com/package/@axpo/sdk)
88
88
  - **GitHub:** [github.com/MatrixCoder0101/axpo](https://github.com/MatrixCoder0101/axpo)
89
89
  - **Acode Docs:** [docs.acode.app](https://docs.acode.app)
90
90
 
package/dist/index.js CHANGED
@@ -1610,8 +1610,7 @@ async function publish(options = {}) {
1610
1610
  console.error(color.red(`\u2717 Zip file not found: ${zipFilename}`));
1611
1611
  console.log("");
1612
1612
  console.log(color.dim(" Run one of these commands first:"));
1613
- console.log(color.cyan(" \u2022 axpo build --zip"));
1614
- console.log(color.cyan(" \u2022 axpo zip"));
1613
+ console.log(color.cyan(" \u2022 axpo build"));
1615
1614
  console.log("");
1616
1615
  process.exit(1);
1617
1616
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/analyzer.ts","../src/dev-server.ts","../src/version-check.ts","../src/publish.ts","../src/build.ts","../src/init.ts"],"names":["path","fs","require","mod","path2","fs2","resolve","path4","os2","fs4","color","path5","os3","fs5","build","fs6","boxen","path6","createSpinner","logUpdate","JSZip","__filename","__dirname","path7","fs7","confirm","input"],"mappings":"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","file":"index.js","sourcesContent":["import type { AxpoConfig, PluginJson } from '@axpo/sdk';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\n// Config file search priority: .ts > .mjs > .js > .cjs\nconst CONFIG_NAMES = [\n 'axpo.config.ts',\n 'axpo.config.mjs',\n 'axpo.config.js',\n 'axpo.config.cjs',\n];\n\nfunction findConfigFile(): string | null {\n for (const name of CONFIG_NAMES) {\n const fullPath = path.resolve(process.cwd(), name);\n if (fs.existsSync(fullPath)) return fullPath;\n }\n return null;\n}\n\nexport function loadPluginJson(): PluginJson {\n const pluginJsonPath = path.resolve(process.cwd(), 'plugin.json');\n\n if (!fs.existsSync(pluginJsonPath)) {\n throw new Error('plugin.json not found in project root');\n }\n\n try {\n const pluginJson = JSON.parse(fs.readFileSync(pluginJsonPath, 'utf-8'));\n\n if (!pluginJson.id) throw new Error('plugin.json: \"id\" is required');\n if (!pluginJson.name) throw new Error('plugin.json: \"name\" is required');\n if (!pluginJson.version) throw new Error('plugin.json: \"version\" is required');\n if (!pluginJson.author?.name) throw new Error('plugin.json: \"author.name\" is required');\n if (!pluginJson.author?.email) throw new Error('plugin.json: \"author.email\" is required');\n\n return pluginJson;\n } catch (error: any) {\n if (error.code === 'ENOENT') throw new Error('plugin.json not found');\n throw new Error(`Failed to parse plugin.json: ${error.message}`);\n }\n}\n\nexport async function loadConfig(configPath?: string): Promise<AxpoConfig> {\n let finalPath: string | null = null;\n\n if (configPath) {\n finalPath = path.resolve(process.cwd(), configPath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`Config file not found: ${configPath}`);\n }\n } else {\n finalPath = findConfigFile();\n if (!finalPath) {\n throw new Error(\n 'Config file not found. Supported formats:\\n' +\n CONFIG_NAMES.map(n => ` - ${n}`).join('\\n')\n );\n }\n }\n\n try {\n const ext = path.extname(finalPath);\n\n // CommonJS (.cjs)\n if (ext === '.cjs') {\n const { createRequire } = await import('node:module');\n const require = createRequire(import.meta.url);\n const mod = require(finalPath);\n return mod.default || mod;\n }\n\n // ESM (.ts, .js, .mjs) — cache-bust with timestamp\n const url = `${pathToFileURL(finalPath).href}?t=${Date.now()}`;\n const mod = await import(url);\n return mod.default || {};\n } catch (error: any) {\n if (error.code === 'ERR_MODULE_NOT_FOUND') {\n throw new Error(`Failed to load config: Module not found\\n${error.message}`);\n }\n if (error.message?.includes('SyntaxError')) {\n throw new Error(`Syntax error in config file: ${path.basename(finalPath)}\\n${error.message}`);\n }\n throw new Error(`Failed to load config: ${error.message}`);\n }\n}\n\nexport function validateConfig(config: AxpoConfig, pluginJson: PluginJson): void {\n if (!/^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)+$/i.test(pluginJson.id)) {\n throw new Error('Invalid plugin ID format in plugin.json. Use format like: com.example.plugin');\n }\n if (!config.buildOptions) {\n throw new Error('buildOptions is required in axpo.config');\n }\n if (!config.buildOptions.entryPoints) {\n throw new Error('buildOptions.entryPoints is required in axpo.config');\n }\n if (!config.buildOptions.outfile && !config.buildOptions.outdir) {\n throw new Error('buildOptions.outfile or buildOptions.outdir is required in axpo.config');\n }\n if (config.dev && typeof config.dev !== 'object') {\n throw new Error('dev must be an object');\n }\n if (config.dev?.port && (typeof config.dev.port !== 'number' || config.dev.port < 1 || config.dev.port > 65535)) {\n throw new Error('dev.port must be a valid port number (1-65535)');\n }\n}\n\nexport function getOutDir(config: AxpoConfig): string {\n if (config.buildOptions?.outdir) return config.buildOptions.outdir;\n if (config.buildOptions?.outfile) return path.dirname(config.buildOptions.outfile);\n throw new Error('No output directory found in buildOptions');\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport interface APIWarning {\n api: string;\n requiredVersion: number;\n file: string;\n line: number;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface APIUsageAnalysis {\n apis: Set<string>;\n warnings: APIWarning[];\n hasErrors: boolean;\n hasWarnings: boolean;\n}\n\n// ✅ FIX: Add lowercase version for case-insensitive matching\nexport const MINIMUM_API_REQUIREMENTS: Record<string, number> = {\n 'editorFile': 958,\n 'editorfile': 958, // Support both cases\n};\n\nexport class CodeAnalyzer {\n private srcDir: string;\n private pluginMinVersion: number | undefined;\n\n constructor(srcDir: string = 'src', pluginMinVersion?: number) {\n this.srcDir = srcDir;\n this.pluginMinVersion = pluginMinVersion;\n }\n\n private removeComments(code: string): string {\n return code\n .replace(/\\/\\/.*$/gm, '')\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n }\n\n analyzeAPIUsage(): APIUsageAnalysis {\n const apis = new Set<string>();\n const warnings: APIWarning[] = [];\n\n this.scanDirectory(this.srcDir, (content, filePath) => {\n // ✅ Use original content for accurate line numbers\n const lines = content.split('\\n');\n const requirePattern = /acode\\.require\\s*\\(\\s*['\"`]([^'\"`]+)['\"`]\\s*\\)/g;\n\n lines.forEach((line, index) => {\n // ✅ Clean line individually and reset regex lastIndex\n const cleanLine = this.removeComments(line);\n requirePattern.lastIndex = 0;\n \n let match;\n while ((match = requirePattern.exec(cleanLine)) !== null) {\n const apiName = match[1];\n apis.add(apiName);\n\n // ✅ Check both original case and lowercase\n const requiredVersion = MINIMUM_API_REQUIREMENTS[apiName] || \n MINIMUM_API_REQUIREMENTS[apiName.toLowerCase()];\n\n // ✅ Only create warnings for APIs with version requirements\n if (requiredVersion) {\n let severity: 'error' | 'warn' | 'info' = 'info';\n\n if (this.pluginMinVersion !== undefined) {\n if (requiredVersion > this.pluginMinVersion) {\n // API requires higher version - ERROR\n severity = 'error';\n } else {\n // Plugin version is sufficient - INFO\n severity = 'info';\n }\n } else {\n // Plugin has no minVersionCode - WARN\n severity = 'warn';\n }\n\n warnings.push({\n api: apiName,\n requiredVersion,\n file: path.relative(process.cwd(), filePath),\n line: index + 1,\n severity\n });\n }\n }\n });\n });\n\n return {\n apis,\n warnings,\n hasErrors: warnings.some(w => w.severity === 'error'),\n hasWarnings: warnings.some(w => w.severity === 'warn')\n };\n }\n\n private scanDirectory(dir: string, callback: (content: string, filePath: string) => void): void {\n if (!fs.existsSync(dir)) return;\n\n fs.readdirSync(dir).forEach(file => {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n\n if (stat.isDirectory()) {\n if (!['node_modules', 'build', 'dist', '.git'].includes(file)) {\n this.scanDirectory(filePath, callback);\n }\n } else if (/\\.(ts|js|tsx|jsx)$/.test(file)) {\n callback(fs.readFileSync(filePath, 'utf-8'), filePath);\n }\n });\n }\n}\n","import * as http from 'node:http';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport color from 'picocolors';\nimport logUpdate from 'log-update';\nimport type { AxpoConfig, PluginJson, DeviceInfo } from './types.js';\nimport { getOutDir } from './config.js';\nimport qr from 'qrcode-terminal';\nimport { MINIMUM_API_REQUIREMENTS } from './analyzer.js';\n\ninterface DevServerOptions {\n port: number;\n config: AxpoConfig;\n pluginJson: PluginJson;\n}\n\ninterface ConnectedClient {\n ws: WebSocket;\n id: string;\n clientNumber: number;\n connectedAt: Date;\n deviceInfo?: DeviceInfo;\n}\n\ninterface LogEntry {\n level: 'log' | 'warn' | 'error' | 'info' | 'device';\n message: string;\n timestamp: number;\n count: number;\n clientNumber?: number;\n deviceInfo?: DeviceInfo;\n}\n\ninterface StatusSection {\n buildStatus: 'idle' | 'building' | 'success' | 'failed';\n buildTime?: number;\n errorCount?: number;\n shutdownStatus?: 'stopping' | 'stopped' | 'error';\n buildTimestamp?: number;\n}\n\ninterface SessionWarnings {\n minVersionCodeWarning: boolean;\n apiWarnings: Set<string>;\n}\n\ninterface BuildSessionWarnings {\n apiWarnings: Set<string>;\n versionWarnings: Set<string>;\n buildErrors: Set<string>;\n lastBuildHash: string;\n}\n\nconst MAX_CLIENTS = 5;\nconst VIEWPORT_HEIGHT = 15;\nconst MAX_LOGS = 200;\nconst IP_CHECK_INTERVAL = 5000; // Check every 5 seconds\n\nexport class AxpoDevServer {\n private server: http.Server | null = null;\n private wss: WebSocketServer | null = null;\n private clients: Map<string, ConnectedClient> = new Map();\n private logs: Map<string, LogEntry> = new Map();\n private logOrder: string[] = [];\n private port: number;\n private config: AxpoConfig;\n private pluginJson: PluginJson;\n private buildVersion: number = 0;\n private statusSection: StatusSection = {\n buildStatus: 'idle',\n };\n private qrCode: string = '';\n private localIP: string = '';\n private renderScheduled: boolean = false;\n private terminalWidth: number = 80;\n private availableClientIds: number[] = [1, 2, 3, 4, 5];\n private clientIdMap: Map<string, number> = new Map();\n private scrollOffset: number = 0;\n private lastRenderedLines: number = 0;\n private isFirstRender: boolean = true;\n private buildSessionWarnings: BuildSessionWarnings = {\n apiWarnings: new Set(),\n versionWarnings: new Set(),\n buildErrors: new Set(),\n lastBuildHash: ''\n };\n private sessionWarnings: Map<string, SessionWarnings> = new Map();\n private detectedAPIs: Set<string> = new Set();\n\n // NEW: IP monitoring\n private ipCheckInterval: NodeJS.Timeout | null = null;\n private lastKnownIP: string = '';\n\n constructor(options: DevServerOptions) {\n this.port = options.port;\n this.config = options.config;\n this.pluginJson = options.pluginJson;\n this.localIP = this.getLocalIP();\n this.lastKnownIP = this.localIP;\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n this.updateTerminalDimensions();\n\n if (process.stdout.isTTY) {\n process.stdout.on('resize', () => {\n this.handleTerminalResize();\n });\n }\n\n // NEW: Start IP monitoring\n this.startIPMonitoring();\n }\n\n // NEW: Start monitoring IP address changes\n private startIPMonitoring(): void {\n this.ipCheckInterval = setInterval(() => {\n this.checkAndUpdateIP();\n }, IP_CHECK_INTERVAL);\n }\n\n // NEW: Stop IP monitoring\n private stopIPMonitoring(): void {\n if (this.ipCheckInterval) {\n clearInterval(this.ipCheckInterval);\n this.ipCheckInterval = null;\n }\n }\n\n // NEW: Check if IP has changed and update accordingly\n private checkAndUpdateIP(): void {\n const currentIP = this.getLocalIP();\n\n if (currentIP !== this.lastKnownIP) {\n const oldIP = this.lastKnownIP;\n this.lastKnownIP = currentIP;\n this.localIP = currentIP;\n\n // Regenerate QR code with new IP\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n\n // Log the IP change\n this.addLog('info', `🔄 Network changed: ${oldIP} → ${currentIP}`);\n\n // Notify all connected clients about the new URL\n this.notifyClientsIPChange(currentIP);\n\n // Force UI update\n this.renderUI();\n }\n }\n\n // NEW: Notify clients about IP change\n private notifyClientsIPChange(newIP: string): void {\n this.broadcast({\n type: 'ip_changed',\n newIP,\n newURL: `axpo://${newIP}:${this.port}`,\n timestamp: Date.now()\n });\n }\n\n private generateContentHash(content: string): string {\n let hash = 0;\n for (let i = 0; i < content.length; i++) {\n const char = content.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n }\n\n private checkVersionCompatibility(clientId: string, deviceInfo: DeviceInfo): void {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n // Read fresh plugin.json for version checks\n const freshPluginJson = this.getFreshPluginJson();\n\n if (!this.sessionWarnings.has(clientId)) {\n this.sessionWarnings.set(clientId, {\n minVersionCodeWarning: false,\n apiWarnings: new Set()\n });\n }\n\n const warnings = this.sessionWarnings.get(clientId)!;\n\n if (freshPluginJson.minVersionCode && !warnings.minVersionCodeWarning) {\n if (deviceInfo.versionCode < freshPluginJson.minVersionCode) {\n this.addLog(\n 'warn',\n `⚠️ Version mismatch: Plugin requires minVersionCode ${freshPluginJson.minVersionCode}, but client has ${deviceInfo.versionCode}. Plugin may not work correctly.`,\n client.clientNumber\n );\n warnings.minVersionCodeWarning = true;\n }\n }\n\n this.detectedAPIs.forEach(apiName => {\n if (!warnings.apiWarnings.has(apiName)) {\n const requiredVersion = MINIMUM_API_REQUIREMENTS[apiName];\n\n if (requiredVersion && deviceInfo.versionCode < requiredVersion) {\n this.addLog(\n 'warn',\n `⚠️ API '${apiName}' requires versionCode ${requiredVersion}, but client has ${deviceInfo.versionCode}. This API may not be available.`,\n client.clientNumber\n );\n warnings.apiWarnings.add(apiName);\n }\n }\n });\n }\n\n analyzeAndReportAPIs(analysis: any): void {\n if (!analysis || !analysis.warnings) return;\n\n const { warnings, apis } = analysis;\n const freshPluginJson = this.getFreshPluginJson();\n\n this.detectedAPIs = apis;\n\n const warningsHash = this.generateContentHash(\n JSON.stringify(warnings.map((w: any) => `${w.api}:${w.severity}`))\n );\n\n if (this.buildSessionWarnings.lastBuildHash === warningsHash) {\n return;\n }\n\n this.buildSessionWarnings.lastBuildHash = warningsHash;\n\n if (apis.size > 0 && this.buildSessionWarnings.apiWarnings.size === 0) {\n const apiList = Array.from(apis).join(', ');\n this.addLog('info', `📦 Detected ${apis.size} API(s): ${apiList}`);\n }\n\n const errors = warnings.filter((w: any) => w.severity === 'error');\n const warns = warnings.filter((w: any) => w.severity === 'warn');\n\n errors.forEach((warning: any) => {\n const key = `${warning.api}:${warning.severity}`;\n if (!this.buildSessionWarnings.buildErrors.has(key)) {\n this.addLog(\n 'error',\n `❌ API '${warning.api}' requires versionCode ${warning.requiredVersion}, but plugin minVersionCode is ${freshPluginJson.minVersionCode || 'not set'}. Update plugin.json!`\n );\n this.buildSessionWarnings.buildErrors.add(key);\n }\n });\n\n warns.forEach((warning: any) => {\n const key = `${warning.api}:${warning.severity}`;\n if (!this.buildSessionWarnings.versionWarnings.has(key)) {\n this.addLog(\n 'warn',\n `⚠️ API '${warning.api}' requires versionCode ${warning.requiredVersion}. Consider adding \"minVersionCode\": ${warning.requiredVersion} to plugin.json`\n );\n this.buildSessionWarnings.versionWarnings.add(key);\n }\n });\n\n Array.from(apis).forEach(api => {\n this.buildSessionWarnings.apiWarnings.add(api);\n });\n }\n\n // Get fresh plugin.json from disk\n private getFreshPluginJson(): PluginJson {\n try {\n const pluginJsonPath = path.resolve(process.cwd(), 'plugin.json');\n if (fs.existsSync(pluginJsonPath)) {\n const content = fs.readFileSync(pluginJsonPath, 'utf-8');\n return JSON.parse(content);\n }\n } catch (error) {\n console.warn('Failed to read fresh plugin.json:', error);\n }\n return this.pluginJson; // Fallback to cached version\n }\n\n private handleTerminalResize(): void {\n const oldWidth = this.terminalWidth;\n this.updateTerminalDimensions();\n\n if (Math.abs(this.terminalWidth - oldWidth) > 10) {\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n }\n\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n if (this.scrollOffset > maxScroll) {\n this.scrollOffset = maxScroll;\n }\n\n logUpdate.clear();\n logUpdate.done();\n this.isFirstRender = true;\n this.renderUI();\n }\n\n private updateTerminalDimensions(): void {\n if (process.stdout.isTTY) {\n this.terminalWidth = Math.max(60, (process.stdout.columns || 80) - 2);\n }\n }\n\n private getNextClientId(): number {\n return this.availableClientIds.shift() || 0;\n }\n\n private releaseClientId(clientId: string): void {\n const clientNumber = this.clientIdMap.get(clientId);\n if (!clientNumber) return;\n\n this.clientIdMap.delete(clientId);\n\n const remainingClients = Array.from(this.clients.values())\n .filter(c => c.id !== clientId)\n .sort((a, b) => a.connectedAt.getTime() - b.connectedAt.getTime());\n\n this.availableClientIds = [1, 2, 3, 4, 5];\n this.clientIdMap.clear();\n\n remainingClients.forEach((client, index) => {\n const newNumber = index + 1;\n const oldNumber = client.clientNumber;\n client.clientNumber = newNumber;\n this.clientIdMap.set(client.id, newNumber);\n\n if (oldNumber !== newNumber) {\n this.updateLogsClientNumber(oldNumber, newNumber);\n }\n });\n\n this.availableClientIds = [1, 2, 3, 4, 5].filter(id =>\n !Array.from(this.clientIdMap.values()).includes(id)\n );\n }\n\n private updateLogsClientNumber(oldNumber: number, newNumber: number): void {\n this.logs.forEach((entry, key) => {\n if (entry.clientNumber === oldNumber) {\n entry.clientNumber = newNumber;\n\n const newKey = key.replace(`:${oldNumber}:`, `:${newNumber}:`);\n if (newKey !== key) {\n this.logs.delete(key);\n this.logs.set(newKey, entry);\n\n const index = this.logOrder.indexOf(key);\n if (index !== -1) {\n this.logOrder[index] = newKey;\n }\n }\n }\n });\n }\n\n private truncateText(text: string, maxLength: number = this.terminalWidth): string {\n const plainText = text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\n if (plainText.length <= maxLength) {\n return text;\n }\n\n let visibleLength = 0;\n let truncatedIndex = 0;\n\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n const endIndex = text.indexOf('m', i);\n if (endIndex !== -1) {\n i = endIndex;\n continue;\n }\n }\n visibleLength++;\n truncatedIndex = i + 1;\n\n if (visibleLength >= maxLength - 3) {\n break;\n }\n }\n\n return text.substring(0, truncatedIndex) + color.dim('...');\n }\n\n scrollUp(): void {\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n\n if (this.scrollOffset < maxScroll) {\n this.scrollOffset++;\n this.renderUI();\n }\n }\n\n scrollDown(): void {\n if (this.scrollOffset > 0) {\n this.scrollOffset--;\n this.renderUI();\n }\n }\n\n scrollToBottom(): void {\n if (this.scrollOffset !== 0) {\n this.scrollOffset = 0;\n this.renderUI();\n }\n }\n\n scrollToTop(): void {\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n\n if (this.scrollOffset !== maxScroll) {\n this.scrollOffset = maxScroll;\n this.renderUI();\n }\n }\n\n async start(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server = http.createServer((req, res) => this.handleRequest(req, res));\n this.wss = new WebSocketServer({ server: this.server });\n this.wss.on('connection', (ws, req) => this.handleConnection(ws, req));\n\n this.server.listen(this.port, () => {\n this.renderUI();\n resolve();\n });\n\n this.server.on('error', (error: any) => {\n if (error.code === 'EADDRINUSE') {\n console.error(color.red(`\\n✗ Port ${this.port} is already in use`));\n } else {\n console.error(color.red('Server error:'), error);\n }\n reject(error);\n });\n });\n }\n\n async stop(): Promise<void> {\n try {\n // Stop IP monitoring\n this.stopIPMonitoring();\n\n this.clients.forEach(client => {\n try {\n if (client.ws.readyState === WebSocket.OPEN) {\n client.ws.close();\n }\n } catch (error) { }\n });\n this.clients.clear();\n\n if (this.wss) {\n await new Promise<void>((resolve) => {\n this.wss!.close(() => resolve());\n });\n this.wss = null;\n }\n\n if (this.server) {\n await new Promise<void>((resolve) => {\n this.server!.close(() => {\n this.server = null;\n resolve();\n });\n });\n }\n } catch (error) { }\n }\n\n private scheduleRender(): void {\n if (this.renderScheduled) return;\n\n this.renderScheduled = true;\n setImmediate(() => {\n this.renderScheduled = false;\n this.renderUI();\n });\n }\n\n private renderUI(): void {\n const output: string[] = [];\n const freshPluginJson = this.getFreshPluginJson();\n\n output.push('');\n output.push(color.bold(color.white(` 💓 Axpo Dev Server`)));\n output.push('');\n output.push(this.truncateText(color.cyan(` ${freshPluginJson.name} · ${color.gray(`v${freshPluginJson.version}`)}`)));\n\n const qrLines = this.qrCode.split('\\n');\n qrLines.forEach(line => output.push(line));\n\n output.push('');\n output.push(this.truncateText(color.bold(color.white(`› Axpo waiting on ${color.cyan(`axpo://${this.localIP}:${this.port}`)}`))));\n output.push(this.truncateText(color.bold(color.white(`› Scan the QR code above with Axpo Dev (Acode Plugin)`))));\n output.push('');\n\n const clientText = this.clients.size === MAX_CLIENTS\n ? color.yellow(`${this.clients.size}/${MAX_CLIENTS} (MAX)`)\n : `${this.clients.size}/${MAX_CLIENTS}`;\n\n output.push(this.truncateText(color.dim(` Clients: ${clientText}`)));\n output.push('');\n output.push(color.bold(color.white('› r=Reload │ c=Clear │ q=Quit │ ↑/↓=Scroll │ Home/End')));\n output.push('');\n output.push(this.truncateText(color.dim('Logs below. Use arrow keys to scroll.')));\n output.push('');\n\n if (this.statusSection.buildStatus !== 'idle') {\n const timeStr = this.statusSection.buildTimestamp\n ? new Date(this.statusSection.buildTimestamp).toLocaleTimeString()\n : new Date().toLocaleTimeString();\n\n if (this.statusSection.buildStatus === 'building') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.yellow('⋯')} Building...`));\n } else if (this.statusSection.buildStatus === 'success') {\n const time = this.statusSection.buildTime || 0;\n\n try {\n const outDir = getOutDir(this.config);\n const mainJsPath = path.join(outDir, 'main.js');\n const size = fs.existsSync(mainJsPath) ? fs.statSync(mainJsPath).size : 0;\n const sizeKB = (size / 1024).toFixed(2);\n\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Build complete in ${time}ms · ${outDir}/main.js (${sizeKB} KB)`));\n } catch (error) {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Build complete in ${time}ms`));\n }\n } else if (this.statusSection.buildStatus === 'failed') {\n const errorCount = this.statusSection.errorCount || 1;\n const errorText = errorCount === 1 ? 'error' : 'errors';\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.red('✗')} Build failed with ${errorCount} ${errorText}`));\n }\n }\n\n if (this.logOrder.length > 0) {\n interface LogLineInfo {\n line: string;\n logIndex: number;\n lineIndex: number;\n totalLinesInLog: number;\n }\n\n const allLines: LogLineInfo[] = [];\n\n this.logOrder.forEach((key, logIndex) => {\n const entry = this.logs.get(key);\n if (!entry) return;\n\n const lines = this.getLogLines(entry);\n\n lines.forEach((line, lineIndex) => {\n allLines.push({\n line,\n logIndex,\n lineIndex,\n totalLinesInLog: lines.length\n });\n });\n });\n\n const totalLines = allLines.length;\n\n const viewportEnd = totalLines - this.scrollOffset;\n const viewportStart = Math.max(0, viewportEnd - VIEWPORT_HEIGHT);\n const visibleLines = allLines.slice(viewportStart, viewportEnd);\n\n const fullyHiddenAbove = new Set<number>();\n const fullyHiddenBelow = new Set<number>();\n const partiallyVisibleLogs = new Set<number>();\n\n visibleLines.forEach(lineInfo => {\n partiallyVisibleLogs.add(lineInfo.logIndex);\n });\n\n for (let i = 0; i < viewportStart; i++) {\n const lineInfo = allLines[i];\n if (!partiallyVisibleLogs.has(lineInfo.logIndex)) {\n fullyHiddenAbove.add(lineInfo.logIndex);\n }\n }\n\n for (let i = viewportEnd; i < totalLines; i++) {\n const lineInfo = allLines[i];\n if (!partiallyVisibleLogs.has(lineInfo.logIndex)) {\n fullyHiddenBelow.add(lineInfo.logIndex);\n }\n }\n\n if (fullyHiddenAbove.size > 0) {\n const count = fullyHiddenAbove.size;\n output.push(color.dim(` ↑ ${count} older log${count > 1 ? 's' : ''} hidden (total: ${this.logOrder.length}) · press ↑`));\n } else if (viewportStart > 0) {\n const firstVisibleLog = visibleLines[0];\n if (firstVisibleLog && firstVisibleLog.lineIndex > 0) {\n output.push(color.dim(` ↑ scroll up for more · press ↑`));\n }\n }\n\n visibleLines.forEach((lineInfo, idx) => {\n let line = lineInfo.line;\n\n if (idx === 0 && lineInfo.lineIndex > 0) {\n const plainLine = line.replace(/\\x1b\\[[0-9;]*m/g, '');\n if (!plainLine.trim().startsWith('...')) {\n const contentStart = line.search(/[^\\x1b\\[0-9;m]/);\n if (contentStart !== -1) {\n const prefix = line.substring(0, contentStart);\n const content = line.substring(contentStart);\n line = prefix + color.dim('...') + content;\n } else {\n line = color.dim('...') + line;\n }\n }\n }\n\n if (idx === visibleLines.length - 1) {\n const remainingLines = lineInfo.totalLinesInLog - lineInfo.lineIndex - 1;\n if (remainingLines > 0) {\n line = line + color.dim('...');\n }\n }\n\n output.push(this.truncateText(line));\n });\n\n if (fullyHiddenBelow.size > 0) {\n const count = fullyHiddenBelow.size;\n output.push(color.dim(` ↓ ${count} newer log${count > 1 ? 's' : ''} hidden · press ↓`));\n } else if (viewportEnd < totalLines) {\n const lastVisibleLog = visibleLines[visibleLines.length - 1];\n if (lastVisibleLog) {\n const lastLogTotalLines = lastVisibleLog.totalLinesInLog;\n if (lastVisibleLog.lineIndex < lastLogTotalLines - 1) {\n output.push(color.dim(` ↓ scroll down for more · press ↓`));\n }\n }\n }\n\n if (totalLines > VIEWPORT_HEIGHT) {\n const scrollPercent = Math.round(((totalLines - viewportEnd) / (totalLines - VIEWPORT_HEIGHT)) * 100);\n output.push(color.dim(` Viewing ${viewportStart + 1}-${viewportEnd} of ${totalLines} lines (${scrollPercent}% from bottom)`));\n }\n }\n\n if (this.statusSection.shutdownStatus) {\n const timeStr = new Date().toLocaleTimeString();\n\n if (this.statusSection.shutdownStatus === 'stopping') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.yellow('⋯')} Stopping dev server...`));\n } else if (this.statusSection.shutdownStatus === 'stopped') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Server stopped successfully`));\n } else if (this.statusSection.shutdownStatus === 'error') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.red('✗')} Error stopping server`));\n }\n }\n\n output.push('');\n\n const newContent = output.join('\\n');\n\n try {\n logUpdate(newContent);\n this.lastRenderedLines = output.length;\n this.isFirstRender = false;\n } catch (error) {\n console.log(newContent);\n }\n }\n\n private wrapText(text: string, maxWidth: number): string[] {\n const plainText = text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\n if (plainText.length <= maxWidth) {\n return [text];\n }\n\n const lines: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= maxWidth) {\n lines.push(remaining);\n break;\n }\n\n const chunk = remaining.substring(0, maxWidth);\n const lastSpace = chunk.lastIndexOf(' ');\n\n if (lastSpace > maxWidth * 0.7) {\n lines.push(remaining.substring(0, lastSpace));\n remaining = ' ' + remaining.substring(lastSpace + 1);\n } else {\n lines.push(chunk);\n remaining = ' ' + remaining.substring(maxWidth);\n }\n }\n\n return lines;\n }\n\n private calculateTotalLines(): number {\n let totalLines = 0;\n\n this.logOrder.forEach((key) => {\n const entry = this.logs.get(key);\n if (!entry) return;\n\n const lines = this.getLogLines(entry);\n totalLines += lines.length;\n });\n\n return totalLines;\n }\n\n private getLogLines(entry: LogEntry): string[] {\n const entryTimeStr = new Date(entry.timestamp).toLocaleTimeString();\n\n // ✅ NEW: Client suffix instead of prefix\n const clientSuffix = entry.clientNumber\n ? ` › ${color.cyan(`[${entry.clientNumber}]`)}`\n : '';\n\n const levelIndicator = entry.level === 'error' ? color.red('✗ ERROR') :\n entry.level === 'warn' ? color.yellow('⚠ WARN') :\n entry.level === 'info' ? color.gray('› INFO') :\n entry.level === 'device' ? color.gray('› DEVICE') :\n color.blue('› LOG');\n\n const countSuffix = entry.count > 1 ? ` ${color.dim(`[${entry.count}×]`)}` : '';\n\n // ✅ NEW: Time first, then level, then client number, then message\n const logLine = `${color.dim(entryTimeStr)} ${levelIndicator}${clientSuffix} ${entry.message}${countSuffix}`;\n return this.wrapText(logLine, this.terminalWidth);\n }\n\n\n setBuildStatus(status: 'building' | 'success' | 'failed', time?: number, error?: string, errorCount?: number): void {\n this.statusSection.buildStatus = status;\n this.statusSection.buildTime = time;\n this.statusSection.errorCount = errorCount;\n this.statusSection.buildTimestamp = Date.now();\n\n if (status === 'failed' && error) {\n const errors = error.split('\\n').filter(e => e.trim());\n errors.forEach(err => {\n this.addLog('error', err);\n });\n }\n\n this.scrollToBottom();\n this.renderUI();\n }\n\n setShutdownStatus(status: 'stopping' | 'stopped' | 'error'): void {\n this.statusSection.shutdownStatus = status;\n this.renderUI();\n }\n\n addLog(level: 'log' | 'warn' | 'error' | 'info', message: string, clientNumber?: number): void {\n if (!message?.trim()) return;\n\n message = message.trim();\n\n const filters = [\n 'Starting initial build',\n 'Reloading clients',\n 'Build failed with'\n ];\n\n if (filters.some(filter => message.includes(filter))) return;\n\n const key = clientNumber\n ? `${level}:${clientNumber}:${message}`\n : `${level}:${message}`;\n\n if (this.logs.has(key)) {\n const existing = this.logs.get(key)!;\n existing.count++;\n existing.timestamp = Date.now();\n\n const currentIndex = this.logOrder.indexOf(key);\n if (currentIndex !== -1) {\n this.logOrder.splice(currentIndex, 1);\n }\n this.logOrder.push(key);\n } else {\n const entry: LogEntry = {\n level,\n message,\n timestamp: Date.now(),\n count: 1,\n clientNumber\n };\n this.logs.set(key, entry);\n this.logOrder.push(key);\n\n if (this.logOrder.length > MAX_LOGS) {\n const removedKey = this.logOrder.shift()!;\n this.logs.delete(removedKey);\n\n if (this.scrollOffset > 0) {\n this.scrollOffset = Math.max(0, this.scrollOffset - 1);\n }\n }\n }\n\n if (this.scrollOffset === 0) {\n this.scheduleRender();\n }\n }\n\n addDeviceInfoLog(deviceInfo: DeviceInfo, clientNumber: number): void {\n const key = `device:${clientNumber}:${deviceInfo.deviceModel}`;\n\n // ✅ Format device details in single line\n const deviceDetails = [\n `📱 ${deviceInfo.deviceModel}`,\n deviceInfo.deviceVendor && deviceInfo.deviceVendor !== 'Unknown' ? deviceInfo.deviceVendor : null,\n deviceInfo.os,\n `Acode ${deviceInfo.version} (${deviceInfo.versionCode})`,\n `${deviceInfo.screenWidth}×${deviceInfo.screenHeight}`,\n deviceInfo.ram ? `${deviceInfo.ram}GB RAM` : null,\n deviceInfo.cpuCores ? `${deviceInfo.cpuCores} cores` : null,\n ].filter(Boolean).join(' · ');\n\n const entry: LogEntry = {\n level: 'device',\n message: deviceDetails, // ✅ Use formatted string instead of separate deviceInfo\n timestamp: Date.now(),\n count: 1,\n clientNumber,\n // ✅ REMOVE: deviceInfo field\n };\n\n this.logs.set(key, entry);\n this.logOrder.push(key);\n\n if (this.logOrder.length > MAX_LOGS) {\n const removedKey = this.logOrder.shift()!;\n this.logs.delete(removedKey);\n\n if (this.scrollOffset > 0) {\n this.scrollOffset = Math.max(0, this.scrollOffset - 1);\n }\n }\n\n if (this.scrollOffset === 0) {\n this.scheduleRender();\n }\n }\n\n clearLogs(): void {\n this.logs.clear();\n this.logOrder = [];\n this.scrollOffset = 0;\n this.renderUI();\n }\n\n notifyReload(): void {\n this.buildVersion++;\n this.broadcast({ type: 'reload', buildVersion: this.buildVersion, timestamp: Date.now() });\n }\n\n private handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void {\n const url = req.url || '/';\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n if (url === '/' || url === '/manifest') {\n this.serveManifest(res);\n } else if (url === '/plugin.json') {\n this.serveFile('plugin.json', res);\n } else if (url === '/status') {\n this.serveStatus(res);\n } else {\n const fileName = url.substring(1);\n\n try {\n const buildDir = getOutDir(this.config);\n const buildFilePath = path.join(buildDir, fileName);\n\n if (fs.existsSync(buildFilePath) && fs.statSync(buildFilePath).isFile()) {\n try {\n const content = fs.readFileSync(buildFilePath);\n const ext = path.extname(buildFilePath);\n const contentType = this.getContentType(ext);\n\n res.writeHead(200, {\n 'Content-Type': contentType,\n 'Content-Length': content.length.toString(),\n 'Access-Control-Allow-Origin': '*'\n });\n res.end(content);\n return;\n } catch (error: any) {\n this.serve500(res, error);\n return;\n }\n }\n } catch (error) { }\n\n if (fs.existsSync(fileName) && fs.statSync(fileName).isFile()) {\n this.serveFile(fileName, res);\n } else {\n this.serve404(res);\n }\n }\n }\n\n private serveManifest(res: http.ServerResponse): void {\n try {\n const freshPluginJson = this.getFreshPluginJson();\n\n const manifest = {\n ...freshPluginJson,\n protocol: 'axpo',\n buildVersion: this.buildVersion,\n endpoints: {\n plugin: '/plugin.json',\n main: '/main.js',\n ws: `ws://${this.localIP}:${this.port}`\n },\n files: this.getServedFiles()\n };\n\n res.writeHead(200, {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0'\n });\n res.end(JSON.stringify(manifest, null, 2));\n } catch (error) {\n console.error('Error serving manifest:', error);\n const manifest = {\n ...this.pluginJson,\n protocol: 'axpo',\n buildVersion: this.buildVersion,\n endpoints: {\n plugin: '/plugin.json',\n main: '/main.js',\n ws: `ws://${this.localIP}:${this.port}`\n },\n files: this.getServedFiles()\n };\n\n res.writeHead(200, {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-cache, no-store, must-revalidate'\n });\n res.end(JSON.stringify(manifest, null, 2));\n }\n }\n\n private serveStatus(res: http.ServerResponse): void {\n const status = {\n running: true,\n buildVersion: this.buildVersion,\n clients: this.clients.size,\n maxClients: MAX_CLIENTS,\n uptime: process.uptime(),\n logs: this.logs.size,\n buildStatus: this.statusSection.buildStatus,\n currentIP: this.localIP,\n url: `axpo://${this.localIP}:${this.port}`\n };\n\n res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });\n res.end(JSON.stringify(status, null, 2));\n }\n\n private serveFile(filePath: string, res: http.ServerResponse): void {\n const fullPath = path.resolve(process.cwd(), filePath);\n\n if (!fullPath.startsWith(process.cwd())) {\n this.serve403(res);\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n this.serve404(res);\n return;\n }\n\n try {\n const content = fs.readFileSync(fullPath);\n const ext = path.extname(fullPath);\n const contentType = this.getContentType(ext);\n\n res.writeHead(200, {\n 'Content-Type': contentType,\n 'Content-Length': content.length.toString(),\n 'Access-Control-Allow-Origin': '*'\n });\n res.end(content);\n } catch (error: any) {\n this.serve500(res, error);\n }\n }\n\n private getContentType(ext: string): string {\n const types: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.css': 'text/css',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon'\n };\n return types[ext] || 'application/octet-stream';\n }\n\n private getServedFiles(): string[] {\n const files: string[] = [];\n\n if (fs.existsSync('plugin.json')) files.push('plugin.json');\n\n try {\n const buildDir = getOutDir(this.config);\n if (fs.existsSync(buildDir)) {\n this.addFilesFromBuildDir(buildDir, files);\n }\n } catch (error) { }\n\n this.config.files?.forEach(file => {\n if (fs.existsSync(file)) {\n const stat = fs.statSync(file);\n if (stat.isFile()) {\n if (!files.includes(file)) {\n files.push(file);\n }\n } else if (stat.isDirectory()) {\n this.addFilesFromFolder(file, file, files);\n }\n }\n });\n\n this.pluginJson.files?.forEach(file => {\n if (fs.existsSync(file) && !files.includes(file)) {\n const stat = fs.statSync(file);\n if (stat.isFile()) {\n files.push(file);\n } else if (stat.isDirectory()) {\n this.addFilesFromFolder(file, file, files);\n }\n }\n });\n\n return [...new Set(files)];\n }\n\n private addFilesFromBuildDir(buildDir: string, files: string[]): void {\n if (!fs.existsSync(buildDir)) return;\n\n const entries = fs.readdirSync(buildDir);\n entries.forEach(entry => {\n const fullPath = path.join(buildDir, entry);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n this.addFilesFromBuildDir(fullPath, files);\n } else {\n const fileName = path.basename(fullPath);\n if (!files.includes(fileName)) {\n files.push(fileName);\n }\n }\n });\n }\n\n private addFilesFromFolder(baseDir: string, dir: string, files: string[]): void {\n if (!fs.existsSync(dir)) return;\n\n const entries = fs.readdirSync(dir);\n entries.forEach(entry => {\n const fullPath = path.join(dir, entry);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n this.addFilesFromFolder(baseDir, fullPath, files);\n } else {\n const relativePath = path.relative(process.cwd(), fullPath);\n if (!files.includes(relativePath)) {\n files.push(relativePath);\n }\n }\n });\n }\n\n private handleConnection(ws: WebSocket, req: http.IncomingMessage): void {\n if (this.clients.size >= MAX_CLIENTS) {\n try {\n ws.close(1008, `Maximum ${MAX_CLIENTS} clients allowed`);\n } catch (error) { }\n return;\n }\n\n const clientId = this.generateClientId();\n const clientNumber = this.getNextClientId();\n\n if (clientNumber === 0) {\n ws.close(1008, 'No available client IDs');\n return;\n }\n\n const freshPluginJson = this.getFreshPluginJson();\n\n const client: ConnectedClient = {\n ws,\n id: clientId,\n clientNumber,\n connectedAt: new Date(),\n deviceInfo: undefined\n };\n\n this.clients.set(clientId, client);\n this.clientIdMap.set(clientId, clientNumber);\n\n // this.addLog('info', `Connected - waiting for device info...`, clientNumber);\n this.scheduleRender();\n\n this.sendToClient(ws, {\n type: 'connected',\n clientId,\n clientNumber,\n buildVersion: this.buildVersion,\n plugin: {\n name: freshPluginJson.name,\n id: freshPluginJson.id,\n version: freshPluginJson.version\n }\n });\n\n ws.on('message', (data) => {\n try {\n const message = JSON.parse(data.toString());\n this.handleClientMessage(clientId, message);\n } catch (error) {\n console.error('Failed to parse message:', error);\n }\n });\n\n ws.on('close', () => {\n const disconnectedNumber = this.clientIdMap.get(clientId);\n const disconnectedClient = this.clients.get(clientId);\n\n this.clients.delete(clientId);\n this.sessionWarnings.delete(clientId);\n this.releaseClientId(clientId);\n\n if (disconnectedNumber) {\n let disconnectMsg = `Disconnected`;\n if (disconnectedClient?.deviceInfo) {\n disconnectMsg += ` (${disconnectedClient.deviceInfo.deviceModel})`;\n }\n this.addLog('info', disconnectMsg, disconnectedNumber);\n this.scrollToBottom();\n }\n\n this.scheduleRender();\n });\n\n ws.on('error', (error) => {\n const disconnectedNumber = this.clientIdMap.get(clientId);\n this.clients.delete(clientId);\n this.sessionWarnings.delete(clientId);\n this.releaseClientId(clientId);\n\n if (disconnectedNumber) {\n this.addLog('warn', `Error: ${error.message}`, disconnectedNumber);\n this.scrollToBottom();\n }\n\n this.scheduleRender();\n });\n }\n\n private handleClientMessage(clientId: string, message: any): void {\n const client = this.clients.get(clientId);\n\n if (message.type === 'ping') {\n if (client) this.sendToClient(client.ws, { type: 'pong' });\n\n } else if (message.type === 'device_info') {\n if (client && message.deviceInfo) {\n client.deviceInfo = message.deviceInfo as DeviceInfo;\n\n // ✅ ADD: Log connection with device info\n const deviceModel = message.deviceInfo.deviceModel || 'Unknown Device';\n const acodeVersion = message.deviceInfo.versionCode || 'Unknown';\n\n this.addLog(\n 'info',\n `Connected (${deviceModel} · Acode ${acodeVersion})`,\n client.clientNumber\n );\n\n // Then add detailed device info\n this.addDeviceInfoLog(message.deviceInfo, client.clientNumber);\n\n // Check version compatibility\n this.checkVersionCompatibility(clientId, message.deviceInfo);\n\n this.scheduleRender();\n }\n\n } else if (message.type === 'log') {\n const { level, message: logMsg } = message;\n if (logMsg?.trim() && client) {\n this.addLog(level || 'log', logMsg.trim(), client.clientNumber);\n }\n }\n }\n\n private sendToClient(ws: WebSocket, message: any): void {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n }\n\n broadcast(message: any): void {\n const data = JSON.stringify(message);\n this.clients.forEach(client => {\n if (client.ws.readyState === WebSocket.OPEN) {\n client.ws.send(data);\n }\n });\n }\n\n private generateClientId(): string {\n return `client-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private getLocalIP(): string {\n try {\n const nets = os.networkInterfaces();\n const results: string[] = [];\n\n for (const name of Object.keys(nets)) {\n const netArray = nets[name];\n if (!netArray) continue;\n\n for (const net of netArray) {\n const familyV4Value = typeof net.family === 'string' ? 'IPv4' : 4;\n if (net.family === familyV4Value && !net.internal) {\n results.push(net.address);\n }\n }\n }\n\n const localNetwork = results.find(ip => ip.startsWith('192.168.'));\n if (localNetwork) return localNetwork;\n\n const corporateNetwork = results.find(ip => ip.startsWith('10.'));\n if (corporateNetwork) return corporateNetwork;\n\n const privateNetwork = results.find(ip => {\n const parts = ip.split('.');\n if (parts[0] === '172') {\n const second = parseInt(parts[1]);\n return second >= 16 && second <= 31;\n }\n return false;\n });\n if (privateNetwork) return privateNetwork;\n\n if (results.length > 0) return results[0];\n\n } catch (error) { }\n\n return '127.0.0.1';\n }\n\n private generateQRCode(text: string): string {\n try {\n const chunks: string[] = [];\n const originalWrite = process.stdout.write.bind(process.stdout);\n\n process.stdout.write = (chunk: any): boolean => {\n chunks.push(chunk.toString());\n return true;\n };\n\n try {\n qr.generate(text, { small: true });\n } finally {\n process.stdout.write = originalWrite;\n }\n\n const capturedOutput = chunks.join('');\n if (capturedOutput.trim()) {\n return capturedOutput.split('\\n').map(line => ` ${line}`).join('\\n');\n }\n\n return this.getFallbackBox();\n } catch (error) {\n return this.getFallbackBox();\n }\n }\n\n private getFallbackBox(): string {\n return color.gray(`${color.cyan('npm i qrcode-terminal')}`)\n }\n\n private serve404(res: http.ServerResponse): void {\n res.writeHead(404, { 'Content-Type': 'text/plain' });\n res.end('404 Not Found');\n }\n\n private serve403(res: http.ServerResponse): void {\n res.writeHead(403, { 'Content-Type': 'text/plain' });\n res.end('403 Forbidden');\n }\n\n private serve500(res: http.ServerResponse, error: Error): void {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.end(`500 Internal Server Error\\n\\n${error.message}`);\n }\n}\n","import color from 'picocolors';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport boxen from 'boxen';\n\ninterface VersionCheckResult {\n isOutdated: boolean;\n currentVersion: string;\n latestVersion?: string;\n}\n\ninterface VersionCache {\n lastCheck: number;\n latestVersion: string;\n nextCheck: number;\n}\n\nconst CACHE_DIR = path.join(os.homedir(), '.cache', 'axpo');\nconst CACHE_FILE = path.join(CACHE_DIR, 'version-check.json');\nconst CHECK_INTERVAL = 12 * 60 * 60 * 1000; // 12 hours\nconst NPM_PACKAGE = '@axpo/cli';\n\nfunction ensureCacheDir(): void {\n try {\n if (!fs.existsSync(CACHE_DIR)) {\n fs.mkdirSync(CACHE_DIR, { recursive: true, mode: 0o755 });\n }\n } catch {\n // Silent fail\n }\n}\n\nfunction getCurrentVersion(): string {\n try {\n const possiblePaths = [\n path.join(import.meta.dirname, '../package.json'),\n path.join(process.cwd(), 'node_modules/@axpo/cli/package.json'),\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n const pkg = JSON.parse(fs.readFileSync(p, 'utf-8'));\n if (pkg.name === NPM_PACKAGE && pkg.version) {\n return pkg.version;\n }\n }\n }\n } catch {\n // Silent fail\n }\n return '1.0.0';\n}\n\nfunction readCache(): VersionCache | null {\n try {\n if (!fs.existsSync(CACHE_FILE)) return null;\n const cache = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf-8')) as VersionCache;\n if (!cache.lastCheck || !cache.latestVersion || !cache.nextCheck) return null;\n if (cache.lastCheck < 0 || cache.nextCheck < cache.lastCheck) return null;\n return cache;\n } catch {\n return null;\n }\n}\n\nfunction writeCache(cache: VersionCache): void {\n try {\n ensureCacheDir();\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache), { encoding: 'utf-8', mode: 0o644 });\n } catch {\n // Silent fail\n }\n}\n\nfunction shouldCheckVersion(): { shouldCheck: boolean; cachedLatest?: string } {\n const cache = readCache();\n if (!cache) return { shouldCheck: true };\n if (Date.now() >= cache.nextCheck) return { shouldCheck: true };\n return { shouldCheck: false, cachedLatest: cache.latestVersion };\n}\n\nfunction compareVersions(v1: string, v2: string): number {\n const parts1 = v1.split('.').map(Number);\n const parts2 = v2.split('.').map(Number);\n for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {\n const diff = (parts1[i] || 0) - (parts2[i] || 0);\n if (diff !== 0) return diff < 0 ? -1 : 1;\n }\n return 0;\n}\n\nfunction useStaleCacheFallback(currentVersion: string): VersionCheckResult | null {\n const cache = readCache();\n if (cache?.latestVersion && compareVersions(currentVersion, cache.latestVersion) < 0) {\n return { isOutdated: true, currentVersion, latestVersion: cache.latestVersion };\n }\n return null;\n}\n\nexport async function checkAxpoVersion(): Promise<VersionCheckResult | null> {\n const currentVersion = getCurrentVersion();\n const cacheCheck = shouldCheckVersion();\n\n if (!cacheCheck.shouldCheck && cacheCheck.cachedLatest) {\n if (compareVersions(currentVersion, cacheCheck.cachedLatest) < 0) {\n return { isOutdated: true, currentVersion, latestVersion: cacheCheck.cachedLatest };\n }\n return null;\n }\n\n try {\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(NPM_PACKAGE)}/latest`,\n { headers: { Accept: 'application/json' }, signal: AbortSignal.timeout(3000) }\n );\n\n if (!response.ok) return useStaleCacheFallback(currentVersion);\n\n const data: any = await response.json();\n const latestVersion = data.version;\n if (!latestVersion) return useStaleCacheFallback(currentVersion);\n\n const now = Date.now();\n writeCache({ lastCheck: now, latestVersion, nextCheck: now + CHECK_INTERVAL });\n\n if (compareVersions(currentVersion, latestVersion) < 0) {\n return { isOutdated: true, currentVersion, latestVersion };\n }\n return null;\n } catch {\n return useStaleCacheFallback(currentVersion);\n }\n}\n\nexport function displayVersionWarning(result: VersionCheckResult): void {\n if (!result.isOutdated || !result.latestVersion) return;\n\n const message = [\n color.dim(`Current: ${result.currentVersion}`),\n color.green(`Latest: ${result.latestVersion}`),\n '',\n color.cyan(`npm install ${NPM_PACKAGE}@latest`),\n color.dim('to update in your project'),\n ].join('\\n');\n\n console.log(boxen(message, {\n title: 'Update Available',\n titleAlignment: 'center',\n padding: 1,\n margin: 0,\n borderStyle: 'round',\n borderColor: 'yellow',\n backgroundColor: '#1a1a1a',\n textAlignment: 'center',\n width: (process.stdout.columns || 80) - 4,\n }));\n}\n","import axios from 'axios';\nimport FormData from 'form-data';\nimport { createReadStream } from 'node:fs';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { input, password, confirm } from '@inquirer/prompts';\nimport color from 'picocolors';\nimport { createSpinner } from 'nanospinner';\nimport JSZip from 'jszip';\nimport { loadConfig } from './config.js';\nimport type { PluginJson } from './types.js';\n\ninterface Credentials {\n email: string;\n password: string;\n}\n\ninterface PublishOptions {\n zipFilename?: string;\n force?: boolean;\n token?: string;\n}\n\ninterface PluginCheckResponse {\n exists: boolean;\n plugin?: {\n id: string;\n name: string;\n version: string;\n downloads: number;\n lastUpdated?: string;\n };\n}\n\nconst API_BASE = process.env.AXPO_API_BASE || 'https://acode.app/api';\nconst CREDENTIALS_DIR = path.join(os.homedir(), '.axpo');\nconst CREDENTIALS_PATH = path.join(CREDENTIALS_DIR, 'credentials.json');\nconst REQUEST_TIMEOUT = 30000;\nconst UPLOAD_TIMEOUT = 120000;\n\nasync function readPluginJsonFromZip(zipPath: string): Promise<PluginJson> {\n try {\n const zipData = fs.readFileSync(zipPath);\n const zip = await JSZip.loadAsync(zipData);\n \n const pluginJsonFile = zip.file('plugin.json');\n if (!pluginJsonFile) {\n throw new Error('plugin.json not found in zip file');\n }\n \n const content = await pluginJsonFile.async('text');\n const pluginJson = JSON.parse(content);\n \n if (!pluginJson.id) throw new Error('plugin.json: \"id\" is required');\n if (!pluginJson.name) throw new Error('plugin.json: \"name\" is required');\n if (!pluginJson.version) throw new Error('plugin.json: \"version\" is required');\n if (!pluginJson.author?.name) throw new Error('plugin.json: \"author.name\" is required');\n if (!pluginJson.author?.email) throw new Error('plugin.json: \"author.email\" is required');\n \n return pluginJson;\n } catch (error: any) {\n if (error instanceof SyntaxError) {\n throw new Error('plugin.json contains invalid JSON');\n }\n if (error.message.includes('plugin.json')) {\n throw error;\n }\n throw new Error(`Failed to read zip file: ${error.message}`);\n }\n}\n\nfunction getZipSize(zipPath: string): string {\n try {\n const stats = fs.statSync(zipPath);\n return (stats.size / (1024 * 1024)).toFixed(2);\n } catch (error) {\n return '0.00';\n }\n}\n\nfunction ensureCredentialsDir(): void {\n try {\n if (!fs.existsSync(CREDENTIALS_DIR)) {\n fs.mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });\n }\n } catch (error: any) {\n throw new Error(`Failed to create credentials directory: ${error.message}`);\n }\n}\n\nfunction saveCredentials(credentials: Credentials): void {\n try {\n ensureCredentialsDir();\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_PATH, content, { \n encoding: 'utf-8', \n mode: 0o600\n });\n } catch (error) {\n console.warn(color.yellow('⚠ Failed to save credentials'));\n }\n}\n\nfunction loadCredentials(): Credentials | null {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n const content = fs.readFileSync(CREDENTIALS_PATH, 'utf-8');\n return JSON.parse(content);\n }\n } catch (error) {\n // Invalid file\n }\n return null;\n}\n\nfunction clearCredentials(): void {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n } catch (error) {\n // Silent fail\n }\n}\n\nfunction parseApiError(error: any): string {\n if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {\n return 'Cannot connect to Acode registry. Please check your internet connection.';\n }\n \n const apiMessage = error.response?.data?.message;\n if (apiMessage) return apiMessage;\n \n const status = error.response?.status;\n if (status) return `API error (${status}): ${error.message}`;\n \n return error.message || 'Unknown error';\n}\n\nasync function checkPluginExists(pluginId: string): Promise<PluginCheckResponse> {\n const spinner = createSpinner('Checking plugin registry...').start();\n \n try {\n const response = await axios.get(`${API_BASE}/plugin/${pluginId}`, {\n timeout: REQUEST_TIMEOUT,\n validateStatus: (status) => status === 200 || status === 404\n });\n \n spinner.stop();\n \n if (response.status === 404) {\n return { exists: false };\n }\n \n return {\n exists: true,\n plugin: {\n id: response.data.id,\n name: response.data.name,\n version: response.data.version,\n downloads: response.data.downloads || 0,\n lastUpdated: response.data.updatedAt || response.data.createdAt\n }\n };\n } catch (error: any) {\n spinner.error({ text: 'Failed to check plugin registry' });\n throw new Error(parseApiError(error));\n }\n}\n\nasync function login(providedToken?: string): Promise<string | null> {\n if (providedToken) {\n const spinner = createSpinner('Validating token...').start();\n try {\n await axios.get(`${API_BASE}/user/profile`, {\n headers: { 'Cookie': `token=${providedToken}` },\n timeout: REQUEST_TIMEOUT\n });\n spinner.success({ text: 'Token validated' });\n return providedToken;\n } catch (error) {\n spinner.error({ text: 'Invalid token' });\n throw new Error('Provided token is invalid or expired');\n }\n }\n\n let credentials = loadCredentials();\n let attemptCount = 0;\n const maxAttempts = 3;\n \n while (attemptCount < maxAttempts) {\n attemptCount++;\n \n if (!credentials) {\n console.log('');\n console.log(color.cyan('Acode Account Login'));\n console.log(color.dim('Credentials will be saved in ~/.axpo/credentials.json'));\n console.log('');\n \n const email = await input({\n message: 'Email:',\n validate: (val) => val.trim() ? true : 'Email is required'\n });\n \n const pwd = await password({\n message: 'Password:',\n mask: '*',\n validate: (val) => val ? true : 'Password is required'\n });\n \n credentials = { email, password: pwd };\n }\n \n const spinner = createSpinner('Logging in...').start();\n \n try {\n const response = await axios.post(\n `${API_BASE}/login`,\n {\n email: credentials.email,\n password: credentials.password\n },\n {\n timeout: REQUEST_TIMEOUT,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n \n const setCookieHeader = response.headers['set-cookie'];\n if (!setCookieHeader || setCookieHeader.length === 0) {\n throw new Error('No token received');\n }\n \n const token = setCookieHeader[0].split(';')[0].split('=')[1];\n if (!token) {\n throw new Error('Failed to extract token');\n }\n \n spinner.success({ text: 'Login successful!' });\n console.log('');\n \n saveCredentials(credentials);\n return token;\n \n } catch (error: any) {\n const errorMessage = parseApiError(error);\n spinner.error({ text: errorMessage });\n \n credentials = null;\n clearCredentials();\n \n if (attemptCount < maxAttempts) {\n console.log('');\n const retry = await confirm({\n message: `Try again? (${maxAttempts - attemptCount} attempt${maxAttempts - attemptCount > 1 ? 's' : ''} left)`,\n default: true\n });\n \n if (!retry) {\n console.log(color.dim('Login cancelled'));\n console.log('');\n return null;\n }\n }\n }\n }\n \n console.log('');\n console.log(color.red('✗ Maximum login attempts reached'));\n console.log('');\n return null;\n}\n\nasync function uploadPlugin(\n token: string, \n zipPath: string, \n isUpdate: boolean,\n pluginJson: PluginJson,\n zipSizeMB: string\n): Promise<void> {\n const actionText = isUpdate ? 'Updating plugin' : 'Publishing plugin';\n const spinner = createSpinner(actionText + '...').start();\n \n try {\n const form = new FormData();\n form.append('plugin', createReadStream(zipPath));\n \n const startTime = Date.now();\n const method = isUpdate ? 'put' : 'post';\n \n let lastProgress = 0;\n \n await axios({\n method,\n url: `${API_BASE}/plugin`,\n data: form,\n headers: {\n ...form.getHeaders(),\n 'Cookie': `token=${token}`,\n },\n timeout: UPLOAD_TIMEOUT,\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n onUploadProgress: (progressEvent) => {\n if (progressEvent.total) {\n const percentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n if (percentage - lastProgress >= 10) {\n lastProgress = percentage;\n spinner.update({ text: `${actionText}... ${percentage}%` });\n }\n }\n }\n });\n \n const duration = Date.now() - startTime;\n \n spinner.success({ text: `${isUpdate ? 'Update' : 'Publish'} successful!` });\n \n console.log('');\n console.log(color.dim(' Plugin Details:'));\n console.log(color.dim(` • Name: ${pluginJson.name}`));\n console.log(color.dim(` • Version: ${pluginJson.version}`));\n console.log(color.dim(` • ID: ${pluginJson.id}`));\n console.log(color.dim(` • Size: ${zipSizeMB} MB`));\n console.log(color.dim(` • Upload time: ${(duration / 1000).toFixed(1)}s`));\n console.log('');\n console.log(color.cyan(` 🔗 https://acode.app/plugin/${pluginJson.id}`));\n console.log('');\n \n } catch (error: any) {\n const errorMessage = parseApiError(error);\n spinner.error({ text: 'Upload failed' });\n throw new Error(errorMessage);\n }\n}\n\nexport async function publish(options: PublishOptions = {}): Promise<void> {\n try {\n console.log('');\n console.log(color.bold(color.white('📦 Publishing to Acode Plugin Registry')));\n console.log('');\n \n const envToken = process.env.AXPO_TOKEN;\n const token = options.token || envToken;\n \n let config;\n try {\n config = await loadConfig();\n } catch (error) {\n config = {};\n }\n \n let zipFilename = options.zipFilename || config.zipFilename || 'Plugin.zip';\n \n if (!zipFilename.endsWith('.zip')) {\n zipFilename += '.zip';\n }\n \n const zipPath = path.resolve(process.cwd(), zipFilename);\n \n if (!fs.existsSync(zipPath)) {\n console.error(color.red(`✗ Zip file not found: ${zipFilename}`));\n console.log('');\n console.log(color.dim(' Run one of these commands first:'));\n console.log(color.cyan(' • axpo build --zip'));\n console.log(color.cyan(' • axpo zip'));\n console.log('');\n process.exit(1);\n }\n \n const spinner = createSpinner('Reading plugin.json from zip...').start();\n let pluginJson: PluginJson;\n \n try {\n pluginJson = await readPluginJsonFromZip(zipPath);\n spinner.success({ text: 'Plugin.json loaded from zip' });\n } catch (error: any) {\n spinner.error({ text: 'Failed to read plugin.json from zip' });\n console.log('');\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n console.log(color.dim(' Make sure your zip contains plugin.json in the root'));\n console.log('');\n process.exit(1);\n }\n \n const zipSizeMB = getZipSize(zipPath);\n \n let pluginCheck: PluginCheckResponse;\n try {\n pluginCheck = await checkPluginExists(pluginJson.id);\n } catch (error: any) {\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n process.exit(1);\n }\n \n const isUpdate = pluginCheck.exists;\n \n console.log('');\n console.log(color.dim('Plugin Information (from zip):'));\n console.log(color.dim(`• Name: ${pluginJson.name}`));\n console.log(color.dim(`• ID: ${pluginJson.id}`));\n console.log(color.dim(`• Version: ${pluginJson.version}`));\n console.log(color.dim(`• Author: ${pluginJson.author.name} <${pluginJson.author.email}>`));\n console.log(color.dim(`• Zip: ${zipFilename} (${zipSizeMB} MB)`));\n \n if (isUpdate && pluginCheck.plugin) {\n console.log('');\n console.log(color.yellow('⚠ Plugin already exists in registry'));\n console.log(color.dim(` Current version: ${pluginCheck.plugin.version}`));\n console.log(color.dim(` Downloads: ${pluginCheck.plugin.downloads}`));\n console.log(color.dim(` New version: ${pluginJson.version}`));\n \n if (pluginCheck.plugin.lastUpdated) {\n console.log(color.dim(` Last updated: ${new Date(pluginCheck.plugin.lastUpdated).toLocaleString()}`));\n }\n }\n \n console.log('');\n \n if (!options.force) {\n const confirmMessage = isUpdate \n ? `Update plugin to version ${pluginJson.version}?`\n : `Publish ${pluginJson.name} to Acode registry?`;\n \n const proceed = await confirm({\n message: confirmMessage,\n default: false\n });\n \n if (!proceed) {\n console.log(color.dim('Publish cancelled'));\n console.log('');\n return;\n }\n \n console.log('');\n }\n \n const authToken = await login(token);\n if (!authToken) {\n console.error(color.red('✗ Publish failed: Authentication required'));\n console.log('');\n process.exit(1);\n }\n \n await uploadPlugin(authToken, zipPath, isUpdate, pluginJson, zipSizeMB);\n \n } catch (error: any) {\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n \n if (process.env.AXPO_DEBUG) {\n console.error(error);\n }\n \n process.exit(1);\n }\n}\n\nexport async function logout(): Promise<void> {\n try {\n const credentialsExist = fs.existsSync(CREDENTIALS_PATH);\n \n if (!credentialsExist) {\n console.log('');\n console.log(color.dim('No saved credentials found'));\n console.log('');\n return;\n }\n \n clearCredentials();\n \n console.log('');\n console.log(color.green('✓ Logged out successfully'));\n console.log(color.dim(' Credentials cleared from ~/.axpo/credentials.json'));\n console.log('');\n \n } catch (error: any) {\n console.error(color.red(`✗ Logout failed: ${error.message}`));\n console.log('');\n process.exit(1);\n }\n}\n","import * as esbuild from 'esbuild';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as readline from 'node:readline';\nimport JSZip from 'jszip';\nimport chokidar from 'chokidar';\nimport color from 'picocolors';\nimport logUpdate from 'log-update';\nimport { createSpinner } from 'nanospinner';\nimport boxen from 'boxen';\nimport { loadConfig, validateConfig, loadPluginJson, getOutDir } from './config.js';\nimport { AxpoDevServer } from './dev-server.js';\nimport { checkAxpoVersion, displayVersionWarning } from './version-check.js';\nimport type { AxpoConfig, BuildCommandOptions, PluginJson } from './types.js';\nimport { CodeAnalyzer } from './analyzer.js';\n\nlet devServerInstance: AxpoDevServer | null = null;\nlet versionCheckDone = false;\nlet logLevelWarningShown = false;\n\nfunction createAxpoTransformPlugin(pluginJson: PluginJson): esbuild.Plugin {\n return {\n name: 'axpo-transform',\n setup(build) {\n build.onLoad({ filter: /src[\\/\\\\]main\\.(ts|js)$/ }, async (args) => {\n let contents = await fs.promises.readFile(args.path, 'utf8');\n const hasExportDefault = /export\\s+default\\s+/.test(contents);\n if (!hasExportDefault) {\n return {\n contents: '',\n errors: [{\n text: `Missing 'export default' in main file`,\n location: { file: args.path, line: 1, column: 0, length: 0, lineText: '' }\n }]\n };\n }\n\n if (!contents.includes('__createAxpoPlugin')) {\n if (contents.includes('from \"@axpo/sdk\"') || contents.includes(\"from '@axpo/sdk'\")) {\n contents = contents.replace(\n /import\\s*{([^}]+)}\\s*from\\s*['\"]@axpo\\/sdk['\"]/,\n (m, imports) => {\n if (!imports.includes('__createAxpoPlugin')) {\n return `import { ${imports.trim()}, __createAxpoPlugin } from '@axpo/sdk'`;\n }\n return m;\n }\n );\n } else {\n contents = `import { __createAxpoPlugin } from '@axpo/sdk';\\n${contents}`;\n }\n }\n\n let transformed = contents;\n const pluginVarName = '__axpoPluginExport';\n\n transformed = transformed.replace(/export\\s+default\\s+/, `const ${pluginVarName} = `);\n transformed += `\\n\\n__createAxpoPlugin('${pluginJson.id}', ${pluginVarName});\\n`;\n\n return {\n contents: transformed,\n loader: args.path.endsWith('.ts') ? 'ts' : 'js'\n };\n });\n }\n };\n}\n\nfunction createPluginMetaPlugin(pluginJson: PluginJson): esbuild.Plugin {\n return {\n name: 'plugin-meta',\n setup(build) {\n build.onResolve({ filter: /^\\.\\.?\\/axpo\\.config(?:\\.ts|\\.js)?$/ }, (args) => {\n return { path: args.path, namespace: 'plugin-meta' };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'plugin-meta' }, () => {\n return {\n contents: `export default ${JSON.stringify({\n plugin: {\n id: pluginJson.id,\n name: pluginJson.name,\n version: pluginJson.version,\n author: pluginJson.author,\n description: pluginJson.description || '',\n icon: pluginJson.icon || 'icon.png',\n license: pluginJson.license || 'MIT'\n }\n }, null, 2)};`,\n loader: 'js'\n };\n });\n }\n };\n}\n\nfunction displayLogLevelWarning(): void {\n const message = [\n color.bold(color.yellow('Configuration Warning')),\n '',\n color.dim('buildOptions.logLevel cannot be changed.'),\n color.dim('It must remain \"silent\" for dev server compatibility.'),\n '',\n color.cyan('Please remove \"logLevel\" from your buildOptions.')\n ].join('\\n');\n\n console.log(boxen(message, {\n title: 'Warning',\n titleAlignment: 'center',\n padding: 1,\n margin: 0,\n borderStyle: 'single',\n borderColor: 'yellow',\n backgroundColor: '#1a1a1a',\n textAlignment: 'center',\n width: (process.stdout.columns || 80) - 4\n }));\n}\n\nasync function showStartupWarnings(config: AxpoConfig): Promise<void> {\n if (versionCheckDone) return;\n\n const versionCheck = await checkAxpoVersion();\n if (versionCheck) displayVersionWarning(versionCheck);\n\n if ('logLevel' in (config.buildOptions || {}) && !logLevelWarningShown) {\n displayLogLevelWarning();\n logLevelWarningShown = true;\n }\n\n versionCheckDone = true;\n}\n\nfunction prepareBuildOptions(\n userOptions: esbuild.BuildOptions,\n pluginJson: PluginJson\n): esbuild.BuildOptions {\n const cleanOptions = { ...userOptions };\n delete cleanOptions.logLevel;\n\n return {\n ...cleanOptions,\n plugins: [\n createAxpoTransformPlugin(pluginJson),\n createPluginMetaPlugin(pluginJson),\n ...(cleanOptions.plugins || [])\n ],\n logLevel: 'silent',\n metafile: true,\n format: cleanOptions.format || 'iife'\n };\n}\n\nfunction getBuildOutputFiles(outDir: string): Array<{ path: string; size: number }> {\n const files: Array<{ path: string; size: number }> = [];\n if (!fs.existsSync(outDir)) return files;\n\n function scanDir(dir: string) {\n fs.readdirSync(dir).forEach(entry => {\n const fullPath = path.join(dir, entry);\n const stat = fs.statSync(fullPath);\n if (stat.isDirectory()) {\n scanDir(fullPath);\n } else {\n files.push({\n path: path.relative(process.cwd(), fullPath),\n size: stat.size\n });\n }\n });\n }\n\n scanDir(outDir);\n return files.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport async function analyze(): Promise<void> {\n const pluginJson = loadPluginJson();\n const analyzer = new CodeAnalyzer('src', pluginJson.minVersionCode);\n\n console.log(color.bold(color.cyan('\\n📊 Analyzing API Usage...\\n')));\n\n const analysis = analyzer.analyzeAPIUsage();\n\n if (analysis.apis.size === 0) {\n console.log(color.dim(' No Acode APIs detected in source code.'));\n console.log('');\n return;\n }\n\n console.log(color.bold('Used APIs:'));\n Array.from(analysis.apis).forEach(api => {\n const requirement = analysis.warnings.find(w => w.api === api);\n if (requirement) {\n const status = requirement.severity === 'error' ? color.red('✗') :\n requirement.severity === 'warn' ? color.yellow('⚠') : color.green('✓');\n console.log(` ${status} ${color.cyan(api)} ${color.dim(`(requires ${requirement.requiredVersion})`)}`);\n } else {\n console.log(` ${color.green('✓')} ${color.cyan(api)} ${color.dim('(no version requirement)')}`);\n }\n });\n\n if (analysis.hasErrors || analysis.hasWarnings) {\n console.log('');\n console.log(color.bold('Recommendations:'));\n const maxRequired = Math.max(...analysis.warnings.map(w => w.requiredVersion));\n\n if (!pluginJson.minVersionCode) {\n console.log(color.yellow(` • Add \"minVersionCode\": ${maxRequired} to plugin.json`));\n } else if (pluginJson.minVersionCode < maxRequired) {\n console.log(color.yellow(` • Update \"minVersionCode\": ${maxRequired} in plugin.json`));\n } else {\n console.log(color.green(` ✓ plugin.json minVersionCode is properly set`));\n }\n }\n\n console.log('');\n}\n\nfunction analyzeAndShowWarnings(pluginJson: PluginJson): void {\n try {\n const analyzer = new CodeAnalyzer('src', pluginJson.minVersionCode);\n const analysis = analyzer.analyzeAPIUsage();\n\n if (analysis.apis.size > 0) {\n console.log(color.cyan('📊 API Usage Analysis:'));\n console.log(color.dim(` Found ${analysis.apis.size} API(s): ${Array.from(analysis.apis).join(', ')}`));\n\n // ✅ ALWAYS show errors if present\n if (analysis.hasErrors) {\n console.log(color.red('\\n❌ Critical Issues:'));\n analysis.warnings.filter(w => w.severity === 'error').forEach(w => {\n console.log(color.red(` • ${w.api} requires versionCode ${w.requiredVersion}, but plugin minVersionCode is ${pluginJson.minVersionCode || 'not set'}`));\n console.log(color.dim(` ${w.file}:${w.line}`));\n });\n }\n\n // ✅ ALWAYS show warnings if present\n if (analysis.hasWarnings) {\n console.log(color.yellow('\\n⚠️ Warnings:'));\n analysis.warnings.filter(w => w.severity === 'warn').forEach(w => {\n console.log(color.yellow(` • ${w.api} requires versionCode ${w.requiredVersion}. Consider adding \"minVersionCode\": ${w.requiredVersion} to plugin.json`));\n console.log(color.dim(` ${w.file}:${w.line}`));\n });\n }\n\n // ✅ NEW: Show recommendations\n if (analysis.hasErrors || analysis.hasWarnings) {\n const maxRequired = Math.max(...analysis.warnings.map(w => w.requiredVersion));\n console.log(color.yellow('\\n💡 Recommendation:'));\n if (!pluginJson.minVersionCode) {\n console.log(color.yellow(` • Add \"minVersionCode\": ${maxRequired} to plugin.json`));\n } else if (pluginJson.minVersionCode < maxRequired) {\n console.log(color.yellow(` • Update \"minVersionCode\" from ${pluginJson.minVersionCode} to ${maxRequired} in plugin.json`));\n }\n }\n\n console.log('');\n }\n } catch (error: any) {\n console.warn(color.yellow('⚠ API analysis warning:'), error.message);\n console.log('');\n }\n}\n\n\nexport async function build(options: BuildCommandOptions = {}): Promise<boolean> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n\n const startTime = Date.now();\n const isStandalone = !devServerInstance;\n\n if (isStandalone) {\n await showStartupWarnings(config);\n analyzeAndShowWarnings(pluginJson);\n }\n\n const spinner = isStandalone ? createSpinner('Building...').start() : null;\n\n const originalStdoutWrite = process.stdout.write.bind(process.stdout);\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n\n try {\n const outDir = getOutDir(config);\n const resolvedOutDir = path.resolve(process.cwd(), outDir);\n\n if (!fs.existsSync(resolvedOutDir)) {\n fs.mkdirSync(resolvedOutDir, { recursive: true });\n }\n\n // Suppress esbuild's direct stdout/stderr output while spinner is active\n // (esbuild prints \"direct eval\" warnings bypassing logLevel: 'silent')\n if (isStandalone) {\n process.stdout.write = () => true;\n process.stderr.write = () => true;\n }\n\n const result = await esbuild.build(prepareBuildOptions(config.buildOptions!, pluginJson));\n\n // Restore stdout/stderr\n if (isStandalone) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n\n if (result.errors.length > 0) {\n const errorMessages = result.errors.map(error => {\n let msg = error.text;\n if (error.location) {\n msg += ` (${error.location.file}:${error.location.line}:${error.location.column})`;\n }\n return msg;\n }).join('\\n');\n\n if (devServerInstance) {\n devServerInstance.setBuildStatus('failed', undefined, errorMessages, result.errors.length);\n\n // Warnings bhi show karo even if build failed\n if (result.warnings.length > 0) {\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n devServerInstance!.addLog('warn', msg);\n });\n }\n } else {\n spinner?.error({ text: `Build failed with ${result.errors.length} error(s)` });\n console.log('');\n result.errors.forEach(error => {\n console.log(color.red(` • ${error.text}`));\n if (error.location) {\n console.log(color.dim(` ${error.location.file}:${error.location.line}:${error.location.column}`));\n }\n });\n\n // Warnings bhi show karo even if build failed\n if (result.warnings.length > 0) {\n console.log('');\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n console.warn(color.yellow(` ⚠ ${msg}`));\n });\n }\n\n console.log('');\n }\n return false;\n }\n\n if (devServerInstance) {\n try {\n const analysis = new CodeAnalyzer('src', pluginJson.minVersionCode).analyzeAPIUsage();\n devServerInstance.analyzeAndReportAPIs({\n warnings: analysis.warnings,\n apis: analysis.apis,\n hasErrors: analysis.hasErrors,\n hasWarnings: analysis.hasWarnings\n });\n } catch (error: any) {\n devServerInstance.addLog('warn', `API analyzer error: ${error.message}`);\n }\n }\n\n const duration = Date.now() - startTime;\n\n if (devServerInstance) {\n devServerInstance.setBuildStatus('success', duration);\n\n // Show warnings in dev server log after build success\n if (result.warnings.length > 0) {\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n devServerInstance!.addLog('warn', msg);\n });\n }\n } else {\n spinner?.success({ text: `Build complete in ${duration}ms` });\n getBuildOutputFiles(resolvedOutDir).forEach(file => {\n console.log(color.dim(` ${file.path} (${(file.size / 1024).toFixed(2)} KB)`));\n });\n\n // Show warnings after spinner + file list — clean, no glitch\n if (result.warnings.length > 0) {\n console.log('');\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n console.warn(color.yellow(` ⚠ ${msg}`));\n });\n }\n\n console.log('');\n }\n\n if (options.zip) await createZip(options.zipFilename);\n return true;\n\n } catch (error: any) {\n // Safety: restore stdout/stderr if esbuild threw before restore point\n if (isStandalone && process.stdout.write !== originalStdoutWrite) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n\n const errorMsg = error.message || String(error);\n devServerInstance\n ? devServerInstance.setBuildStatus('failed', undefined, errorMsg, 1)\n : spinner?.error({ text: `Build failed: ${errorMsg}` });\n if (!devServerInstance) console.log('');\n return false;\n }\n}\n\nexport async function dev(): Promise<void> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n await showStartupWarnings(config);\n\n const devConfig = config.dev || {};\n const port = devConfig.port || 3000;\n\n const devServer = new AxpoDevServer({ port, config, pluginJson });\n devServerInstance = devServer;\n\n let isShuttingDown = false;\n const gracefulShutdown = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n logUpdate.done();\n\n console.log('');\n const spinner = createSpinner('Stopping dev server...').start();\n try {\n if (watcher) await watcher.close();\n await devServer.stop();\n spinner.success({ text: 'Server stopped successfully' });\n } catch (error) {\n spinner.error({ text: 'Error stopping server' });\n }\n console.log('');\n process.exit(0);\n };\n\n let watcher: chokidar.FSWatcher | null = null;\n\n process.on('SIGINT', gracefulShutdown);\n process.on('SIGTERM', gracefulShutdown);\n\n await devServer.start();\n devServer.setBuildStatus('building');\n await build();\n\n //if (devConfig.hotReload !== false) {\n watcher = chokidar.watch([\n 'src/**/*',\n 'axpo.config.{ts,mjs,js,cjs}', // ✅ Support all config formats\n 'plugin.json'\n ], {\n ignored: [/(^|[\\/\\\\])\\../, '**/node_modules/**', '**/build/**', '**/*.zip'],\n persistent: true,\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 100, pollInterval: 50 }\n });\n\n let isBuilding = false;\n let buildQueued = false;\n let debounceTimer: NodeJS.Timeout | null = null;\n\n const doBuild = async () => {\n if (isBuilding) {\n buildQueued = true;\n return;\n }\n isBuilding = true;\n try {\n devServer.setBuildStatus('building');\n if (await build()) devServer.notifyReload();\n } catch (error) { }\n isBuilding = false;\n if (buildQueued) {\n buildQueued = false;\n setTimeout(doBuild, 100);\n }\n };\n\n const handleFileChange = () => {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doBuild, 50);\n };\n\n watcher.on('change', handleFileChange);\n watcher.on('add', handleFileChange);\n watcher.on('unlink', handleFileChange);\n\n setupKeyboardHandler(devServer, gracefulShutdown);\n process.stdin.resume();\n // }\n}\n\nfunction setupKeyboardHandler(devServer: AxpoDevServer, gracefulShutdown: () => Promise<void>): void {\n if (process.stdin.isTTY) {\n readline.emitKeypressEvents(process.stdin);\n process.stdin.setRawMode(true);\n }\n\n process.stdin.on('keypress', async (str, key) => {\n if (!key) return;\n if (key.ctrl && key.name === 'c') return await gracefulShutdown();\n\n switch (key.name) {\n case 'r': devServer.addLog('info', 'Manual reload'); devServer.notifyReload(); break;\n case 'c': devServer.clearLogs(); break;\n case 'q': await gracefulShutdown(); break;\n case 'up': devServer.scrollUp(); break;\n case 'down': devServer.scrollDown(); break;\n case 'home': devServer.scrollToTop(); break;\n case 'end': devServer.scrollToBottom(); break;\n }\n });\n}\n\nexport async function createZip(commandZipFilename?: string): Promise<void> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n\n let zipFilename = (commandZipFilename || config.zipFilename || 'Plugin.zip');\n if (!zipFilename.endsWith('.zip')) zipFilename += '.zip';\n\n const spinner = createSpinner(`Creating ${zipFilename}...`).start();\n const startTime = Date.now();\n\n try {\n const zip = new JSZip();\n const buildDir = getOutDir(config);\n\n if (!fs.existsSync(buildDir)) {\n spinner.error({ text: `Build folder not found: ${buildDir}` });\n console.log('');\n throw new Error(`Build folder not found: ${buildDir}\\nRun \"axpo build\" first.`);\n }\n\n let filesAdded = 0;\n zip.file('plugin.json', JSON.stringify(pluginJson, null, 2));\n filesAdded++;\n\n const addFolder = (folderPath: string, zipRoot: string = '') => {\n if (!fs.existsSync(folderPath)) return;\n fs.readdirSync(folderPath).forEach(file => {\n const filePath = path.join(folderPath, file);\n try {\n const stat = fs.statSync(filePath);\n if (stat.isDirectory()) {\n const newZipPath = zipRoot ? path.join(zipRoot, file) : file;\n zip.folder(newZipPath);\n addFolder(filePath, newZipPath);\n } else if (stat.isFile()) {\n zip.file(zipRoot ? path.join(zipRoot, file) : file, fs.readFileSync(filePath));\n filesAdded++;\n }\n } catch (error) { }\n });\n };\n\n addFolder(buildDir);\n\n const allFiles = new Set<string>();\n config.files?.forEach((f: string) => allFiles.add(f));\n pluginJson.files?.forEach((f: string) => allFiles.add(f));\n\n allFiles.forEach(file => {\n const filePath = path.resolve(process.cwd(), file);\n if (fs.existsSync(filePath)) {\n const stat = fs.statSync(filePath);\n if (stat.isFile()) {\n zip.file(file, fs.readFileSync(filePath));\n filesAdded++;\n } else if (stat.isDirectory()) {\n addFolder(filePath, file);\n }\n }\n });\n\n const content = await zip.generateAsync({\n type: 'nodebuffer',\n compression: 'DEFLATE',\n compressionOptions: { level: 9 }\n });\n\n fs.writeFileSync(zipFilename, content);\n\n const duration = Date.now() - startTime;\n const sizeKB = (fs.statSync(zipFilename).size / 1024).toFixed(2);\n\n spinner.success({ text: `${zipFilename} created in ${duration}ms (${sizeKB} KB, ${filesAdded} files)` });\n console.log('');\n\n if (devServerInstance) {\n devServerInstance.addLog('info', `${zipFilename} created in ${duration}ms (${sizeKB} KB, ${filesAdded} files)`);\n }\n\n } catch (error: any) {\n if (!error.message?.includes('Build folder not found')) {\n spinner.error({ text: `Zip creation failed: ${error.message}` });\n console.log('');\n }\n if (devServerInstance) {\n devServerInstance.addLog('error', `Zip creation failed: ${error.message}`);\n }\n }\n}\n\nexport async function clean(): Promise<void> {\n const spinner = createSpinner('Cleaning build artifacts...').start();\n\n try {\n const config = await loadConfig();\n const buildDir = getOutDir(config);\n const itemsToClean: string[] = [];\n\n if (fs.existsSync(buildDir)) {\n fs.rmSync(buildDir, { recursive: true, force: true });\n itemsToClean.push(buildDir);\n }\n\n let zipFilename = config.zipFilename || 'Plugin.zip';\n if (!zipFilename.endsWith('.zip')) zipFilename += '.zip';\n\n if (fs.existsSync(zipFilename)) {\n fs.unlinkSync(zipFilename);\n itemsToClean.push(zipFilename);\n }\n\n if (zipFilename !== 'Plugin.zip' && fs.existsSync('Plugin.zip')) {\n fs.unlinkSync('Plugin.zip');\n itemsToClean.push('Plugin.zip');\n }\n\n spinner.success({\n text: itemsToClean.length > 0\n ? `Clean complete - Removed: ${itemsToClean.join(', ')}`\n : 'Already clean'\n });\n console.log('');\n\n } catch (error: any) {\n spinner.error({ text: `Clean failed: ${error.message}` });\n console.log('');\n process.exit(1);\n }\n}\n\nexport { publish, logout } from './publish.js';\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { execSync, spawn } from 'node:child_process';\nimport { input, select, confirm } from '@inquirer/prompts';\nimport color from 'picocolors';\nimport { createSpinner } from 'nanospinner';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst TEMPLATES_DIR = path.resolve(__dirname, '../templates');\n\ninterface InitOptions {\n name?: string;\n yes?: boolean;\n current?: boolean;\n}\n\nconst PM_INSTALL_CMD: Record<string, string[]> = {\n npm: ['install'],\n yarn: [],\n pnpm: ['install'],\n bun: ['install'],\n};\n\n// Check if running in Termux\nfunction isTermux(): boolean {\n return (\n process.env.TERMUX_VERSION !== undefined ||\n fs.existsSync('/data/data/com.termux') ||\n process.env.PREFIX?.includes('com.termux') === true\n );\n}\n\n// Get user info from git config\nfunction getGitUserInfo(): { name: string; email: string } {\n try {\n const name = execSync('git config user.name', { encoding: 'utf-8' }).trim();\n const email = execSync('git config user.email', { encoding: 'utf-8' }).trim();\n return { name, email };\n } catch {\n return { name: '', email: '' };\n }\n}\n\n// Detect available package managers\nfunction detectPackageManagers(): string[] {\n const managers = ['npm', 'yarn', 'pnpm', 'bun'];\n return managers.filter((mgr) => {\n try {\n execSync(`${mgr} --version`, { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n });\n}\n\n// Run command silently\nfunction runCommand(cmd: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd,\n stdio: 'ignore',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) resolve();\n else reject(new Error(`Command failed: ${cmd} ${args.join(' ')}`));\n });\n });\n}\n\n// Copy directory recursively\nfunction copyDirectory(src: string, dest: string): void {\n if (!fs.existsSync(dest)) {\n fs.mkdirSync(dest, { recursive: true });\n }\n\n const entries = fs.readdirSync(src, { withFileTypes: true });\n \n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n \n if (entry.isDirectory()) {\n copyDirectory(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n// Get current date in DD/MM/YYYY format\nfunction getCurrentDate(): string {\n const now = new Date();\n const day = String(now.getDate()).padStart(2, '0');\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const year = now.getFullYear();\n return `${day}/${month}/${year}`;\n}\n\n// Replace placeholders in files\nfunction replacePlaceholders(dir: string, data: Record<string, string>): void {\n const walk = (currentDir: string) => {\n for (const file of fs.readdirSync(currentDir)) {\n const fullPath = path.join(currentDir, file);\n \n if (fs.statSync(fullPath).isDirectory()) {\n walk(fullPath);\n } else {\n // Only process text files\n if (/\\.(ts|js|json|md|html|xml|css|txt)$/.test(file)) {\n let content = fs.readFileSync(fullPath, 'utf8');\n \n // Replace all placeholders\n content = content\n .replace(/\\{\\{projectName\\}\\}/g, data.projectName)\n .replace(/\\{\\{pluginId\\}\\}/g, data.pluginId)\n .replace(/\\{\\{pluginName\\}\\}/g, data.pluginName)\n .replace(/\\{\\{description\\}\\}/g, data.description)\n .replace(/\\{\\{authorName\\}\\}/g, data.authorName)\n .replace(/\\{\\{email\\}\\}/g, data.email)\n .replace(/\\{\\{github\\}\\}/g, data.github || '')\n .replace(/\\{\\{date\\}\\}/g, data.date);\n\n // Handle conditional github\n if (data.github) {\n content = content.replace(/\\{\\{#if github\\}\\}(.*?)\\{\\{\\/if\\}\\}/gs, '$1');\n } else {\n content = content.replace(/\\{\\{#if github\\}\\}.*?\\{\\{\\/if\\}\\}/gs, '');\n }\n\n fs.writeFileSync(fullPath, content, 'utf8');\n }\n }\n }\n };\n\n walk(dir);\n}\n\n// Install Axpo Dev plugin in Acode via intent\nasync function promptAxpoDevInstallation(): Promise<void> {\n try {\n console.log('');\n console.log(color.bold(color.cyan('🔌 Axpo Dev Plugin')));\n console.log(color.dim('To test your plugin during development, you need the'));\n console.log(color.dim('\"Axpo Dev\" plugin installed in Acode.'));\n console.log('');\n \n const install = await confirm({\n message: 'Would you like to install Axpo Dev plugin in Acode now?',\n default: true\n });\n \n if (install) {\n console.log('');\n console.log(color.cyan('📱 Opening Acode to install Axpo Dev plugin...'));\n \n execSync('am start -a android.intent.action.VIEW -d \"acode://plugin/install/axpo.dev\"', {\n stdio: 'ignore'\n });\n \n console.log(color.green('✓ Plugin installation started in Acode'));\n console.log(color.dim(' Please complete the installation in Acode app'));\n console.log('');\n } else {\n console.log('');\n console.log(color.dim(' You can install it later from:'));\n console.log(color.cyan(' • Acode → Plugins → Search \"Axpo Dev\"'));\n console.log('');\n }\n } catch (error) {\n // Silent fail\n }\n}\n\n// Install dependencies with package manager selection\nasync function handleDependencyInstallation(projectDir: string): Promise<string> {\n const managers = detectPackageManagers();\n\n if (!managers.includes('npm')) {\n console.error(color.red('❌ npm is required but not found on your system.'));\n process.exit(1);\n }\n\n let selectedManager = 'npm';\n\n // If multiple package managers available, let user choose\n if (managers.length > 1) {\n selectedManager = await select({\n message: 'Choose a package manager:',\n choices: managers.map((manager) => ({\n name: manager,\n value: manager,\n })),\n });\n } else {\n console.log(color.gray(`Using ${selectedManager} to install dependencies...`));\n }\n\n const spinner = createSpinner(`Installing dependencies with ${selectedManager}...`).start();\n\n try {\n // Add .cmd for Windows compatibility\n const isWindows = process.platform === 'win32';\n const command = isWindows ? `${selectedManager}.cmd` : selectedManager;\n \n await runCommand(command, PM_INSTALL_CMD[selectedManager], projectDir);\n spinner.success({ text: `Dependencies installed via ${selectedManager}` });\n return selectedManager;\n } catch (err) {\n spinner.error({ text: 'Installation failed. Please try manually.' });\n if (err instanceof Error) {\n console.error(color.dim(err.message));\n }\n return selectedManager;\n }\n}\n\n// Main init function\nexport async function init(options: InitOptions = {}): Promise<void> {\n try {\n console.log(color.bold(color.cyan('\\n🚀 Create Acode Plugin\\n')));\n\n // Check if templates directory exists\n if (!fs.existsSync(TEMPLATES_DIR)) {\n throw new Error(\n 'Templates directory not found. Please ensure axpo is installed correctly.\\n' +\n `Expected: ${TEMPLATES_DIR}`\n );\n }\n\n const gitInfo = getGitUserInfo();\n let projectName = options.name || 'my-acode-plugin';\n let targetPath: string;\n\n // Handle init in current directory\n if (options.current) {\n projectName = path.basename(process.cwd());\n targetPath = process.cwd();\n \n // Check if directory is not empty (ignore hidden files)\n const files = fs.readdirSync(targetPath).filter(file => !file.startsWith('.'));\n if (files.length > 0 && !options.yes) {\n const proceed = await confirm({\n message: 'Current directory is not empty. Continue anyway?',\n default: false\n });\n \n if (!proceed) {\n console.log(color.dim('Cancelled.'));\n return;\n }\n }\n } else {\n targetPath = path.resolve(process.cwd(), projectName);\n }\n\n // Prompt for project details (skip if --yes flag)\n let pluginName = 'My Plugin';\n let pluginId = 'com.example.plugin';\n let description = 'My awesome Acode plugin';\n let authorName = gitInfo.name || 'Your Name';\n let email = gitInfo.email || 'your@email.com';\n let github = '';\n let template: 'typescript' | 'javascript' = 'typescript';\n\n if (!options.yes) {\n if (!options.current && !options.name) {\n projectName = await input({\n message: 'Project name (folder name):',\n default: 'my-acode-plugin',\n validate: (input) => {\n if (!input.trim()) return 'Project name is required';\n \n const targetDir = path.resolve(process.cwd(), input);\n const exists = fs.existsSync(targetDir);\n \n if (exists) {\n return `Directory \"${input}\" already exists. Please choose a different name.`;\n }\n \n return true;\n }\n });\n targetPath = path.resolve(process.cwd(), projectName);\n }\n\n // Plugin name input (display name)\n pluginName = await input({\n message: 'Plugin name (display name):',\n default: 'My Plugin',\n validate: (input) => {\n if (!input.trim()) return 'Plugin name is required';\n return true;\n }\n });\n\n // Plugin ID input with validation\n pluginId = await input({\n message: 'Plugin ID:',\n default: 'com.example.plugin',\n validate: async (input) => {\n if (!input) return \"Plugin ID cannot be empty.\";\n\n const valid = /^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)+$/i.test(input);\n if (!valid) return \"Invalid format. Use format like com.example.plugin.\";\n\n try {\n const res = await fetch(`https://acode.app/api/plugin/${input}`);\n \n // Check if response is HTML (404 page) - means plugin not found (available)\n const contentType = res.headers.get('content-type');\n if (contentType && contentType.includes('text/html')) {\n return true; // Plugin ID available\n }\n\n // Try to parse JSON response\n const data = await res.json() as { error?: string; id?: string; author?: string; name?: string };\n\n // If error message says \"Not found\", plugin is available\n if (!res.ok && data.error === \"Not found\") return true;\n \n // If data has id, plugin already exists\n if (data && data.id) {\n return `Plugin ID already used by ${color.cyan(color.bold(data.author))} in ${color.cyan(color.bold(data.name))} plugin`;\n }\n \n return true;\n } catch (error) {\n // Network error or API unavailable - warn but allow to continue\n console.log(color.yellow('\\n⚠ Could not verify plugin ID availability (network error)'));\n console.log(color.dim('Continuing without validation...\\n'));\n return true;\n }\n }\n });\n\n description = await input({\n message: 'Description:',\n default: 'My awesome Acode plugin'\n });\n\n authorName = await input({\n message: 'Author name:',\n default: gitInfo.name || 'Your Name',\n validate: (input) => input.trim() ? true : 'Author name is required'\n });\n\n email = await input({\n message: 'Author email:',\n default: gitInfo.email || 'your@email.com',\n validate: (input) => {\n if (!input.trim()) return 'Email is required';\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input)) {\n return 'Please enter a valid email address';\n }\n return true;\n }\n });\n\n // GitHub username input with validation\n github = await input({\n message: 'GitHub username (optional):',\n default: '',\n validate: async (input) => {\n // Empty is allowed (optional field)\n if (!input || !input.trim()) return true;\n\n // Check GitHub username format\n if (!/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i.test(input)) {\n return 'Invalid GitHub username format';\n }\n\n try {\n const res = await fetch(`https://api.github.com/users/${input}`);\n \n if (!res.ok) {\n if (res.status === 404) {\n return `GitHub user ${color.red(color.bold(input))} not found`;\n }\n return `Error checking GitHub username: ${res.statusText}`;\n }\n\n const data = await res.json() as { login?: string; name?: string };\n \n if (data && data.login) {\n return true;\n }\n\n return 'Could not verify GitHub username';\n } catch (error) {\n // Network error - warn but allow to continue\n console.log(color.yellow('\\n⚠ Could not verify GitHub username (network error)'));\n console.log(color.dim('Continuing without validation...\\n'));\n return true;\n }\n }\n });\n\n template = await select({\n message: 'Choose a template:',\n choices: [\n { name: 'TypeScript (Recommended)', value: 'typescript' as const },\n { name: 'JavaScript', value: 'javascript' as const }\n ],\n default: 'typescript' as const\n });\n }\n\n // Create project from template\n const templatePath = path.join(TEMPLATES_DIR, template);\n\n if (!fs.existsSync(templatePath)) {\n throw new Error(`Template not found: ${template}`);\n }\n\n // Final check for --name or --yes flag cases (where user didn't get prompted)\n if (fs.existsSync(targetPath) && !options.current && (options.name || options.yes)) {\n throw new Error(`Directory \"${projectName}\" already exists. Please choose a different name or remove the existing directory.`);\n }\n\n const spinner = createSpinner('Creating project files...').start();\n\n try {\n // Copy template\n if (!fs.existsSync(targetPath)) {\n fs.mkdirSync(targetPath, { recursive: true });\n }\n \n copyDirectory(templatePath, targetPath);\n\n // Replace placeholders\n replacePlaceholders(targetPath, {\n projectName,\n pluginName,\n pluginId,\n description,\n authorName,\n email,\n github,\n date: getCurrentDate()\n });\n\n spinner.success({ text: 'Project files created' });\n } catch (err) {\n spinner.error({ text: 'Failed to create project files' });\n throw err;\n }\n\n // Ask about dependency installation\n let shouldInstall = options.yes;\n let packageManager = 'npm';\n \n if (!options.yes) {\n shouldInstall = await confirm({\n message: 'Install dependencies now?',\n default: true\n });\n }\n\n if (shouldInstall) {\n packageManager = await handleDependencyInstallation(targetPath);\n }\n\n // Success message\n console.log('');\n console.log(color.green('✓ Plugin project created successfully!'));\n console.log('');\n console.log(color.bold('Next steps:'));\n \n if (!options.current) {\n console.log(color.cyan(` cd ${projectName}`));\n }\n \n // Show install step only if dependencies were not installed\n if (!shouldInstall) {\n console.log(color.cyan(` ${packageManager} install`) + color.dim(' # Install dependencies'));\n }\n \n // Get run command based on package manager\n const runCmd = packageManager === 'npm' ? 'npm run' : packageManager;\n \n console.log(color.cyan(` ${runCmd} dev`) + color.dim(' # Start development server'));\n console.log(color.cyan(` ${runCmd} build`) + color.dim(' # Build for production'));\n console.log('');\n console.log(color.dim('Then scan the QR code with Axpo Dev plugin in Acode'));\n console.log('');\n\n // Prompt for Axpo Dev installation if in Termux\n if (isTermux()) {\n await promptAxpoDevInstallation();\n }\n\n } catch (error: any) {\n if (error.name === 'ExitPromptError') {\n console.log('');\n console.log(color.bold(color.red('✖ Operation cancelled.')));\n console.log('');\n process.exit(0);\n }\n \n console.error(color.red(`\\n✗ ${error.message}\\n`));\n process.exit(1);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/analyzer.ts","../src/dev-server.ts","../src/version-check.ts","../src/publish.ts","../src/build.ts","../src/init.ts"],"names":["path","fs","require","mod","path2","fs2","resolve","path4","os2","fs4","color","path5","os3","fs5","build","fs6","boxen","path6","createSpinner","logUpdate","JSZip","__filename","__dirname","path7","fs7","confirm","input"],"mappings":"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","file":"index.js","sourcesContent":["import type { AxpoConfig, PluginJson } from '@axpo/sdk';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\n// Config file search priority: .ts > .mjs > .js > .cjs\nconst CONFIG_NAMES = [\n 'axpo.config.ts',\n 'axpo.config.mjs',\n 'axpo.config.js',\n 'axpo.config.cjs',\n];\n\nfunction findConfigFile(): string | null {\n for (const name of CONFIG_NAMES) {\n const fullPath = path.resolve(process.cwd(), name);\n if (fs.existsSync(fullPath)) return fullPath;\n }\n return null;\n}\n\nexport function loadPluginJson(): PluginJson {\n const pluginJsonPath = path.resolve(process.cwd(), 'plugin.json');\n\n if (!fs.existsSync(pluginJsonPath)) {\n throw new Error('plugin.json not found in project root');\n }\n\n try {\n const pluginJson = JSON.parse(fs.readFileSync(pluginJsonPath, 'utf-8'));\n\n if (!pluginJson.id) throw new Error('plugin.json: \"id\" is required');\n if (!pluginJson.name) throw new Error('plugin.json: \"name\" is required');\n if (!pluginJson.version) throw new Error('plugin.json: \"version\" is required');\n if (!pluginJson.author?.name) throw new Error('plugin.json: \"author.name\" is required');\n if (!pluginJson.author?.email) throw new Error('plugin.json: \"author.email\" is required');\n\n return pluginJson;\n } catch (error: any) {\n if (error.code === 'ENOENT') throw new Error('plugin.json not found');\n throw new Error(`Failed to parse plugin.json: ${error.message}`);\n }\n}\n\nexport async function loadConfig(configPath?: string): Promise<AxpoConfig> {\n let finalPath: string | null = null;\n\n if (configPath) {\n finalPath = path.resolve(process.cwd(), configPath);\n if (!fs.existsSync(finalPath)) {\n throw new Error(`Config file not found: ${configPath}`);\n }\n } else {\n finalPath = findConfigFile();\n if (!finalPath) {\n throw new Error(\n 'Config file not found. Supported formats:\\n' +\n CONFIG_NAMES.map(n => ` - ${n}`).join('\\n')\n );\n }\n }\n\n try {\n const ext = path.extname(finalPath);\n\n // CommonJS (.cjs)\n if (ext === '.cjs') {\n const { createRequire } = await import('node:module');\n const require = createRequire(import.meta.url);\n const mod = require(finalPath);\n return mod.default || mod;\n }\n\n // ESM (.ts, .js, .mjs) — cache-bust with timestamp\n const url = `${pathToFileURL(finalPath).href}?t=${Date.now()}`;\n const mod = await import(url);\n return mod.default || {};\n } catch (error: any) {\n if (error.code === 'ERR_MODULE_NOT_FOUND') {\n throw new Error(`Failed to load config: Module not found\\n${error.message}`);\n }\n if (error.message?.includes('SyntaxError')) {\n throw new Error(`Syntax error in config file: ${path.basename(finalPath)}\\n${error.message}`);\n }\n throw new Error(`Failed to load config: ${error.message}`);\n }\n}\n\nexport function validateConfig(config: AxpoConfig, pluginJson: PluginJson): void {\n if (!/^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)+$/i.test(pluginJson.id)) {\n throw new Error('Invalid plugin ID format in plugin.json. Use format like: com.example.plugin');\n }\n if (!config.buildOptions) {\n throw new Error('buildOptions is required in axpo.config');\n }\n if (!config.buildOptions.entryPoints) {\n throw new Error('buildOptions.entryPoints is required in axpo.config');\n }\n if (!config.buildOptions.outfile && !config.buildOptions.outdir) {\n throw new Error('buildOptions.outfile or buildOptions.outdir is required in axpo.config');\n }\n if (config.dev && typeof config.dev !== 'object') {\n throw new Error('dev must be an object');\n }\n if (config.dev?.port && (typeof config.dev.port !== 'number' || config.dev.port < 1 || config.dev.port > 65535)) {\n throw new Error('dev.port must be a valid port number (1-65535)');\n }\n}\n\nexport function getOutDir(config: AxpoConfig): string {\n if (config.buildOptions?.outdir) return config.buildOptions.outdir;\n if (config.buildOptions?.outfile) return path.dirname(config.buildOptions.outfile);\n throw new Error('No output directory found in buildOptions');\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport interface APIWarning {\n api: string;\n requiredVersion: number;\n file: string;\n line: number;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface APIUsageAnalysis {\n apis: Set<string>;\n warnings: APIWarning[];\n hasErrors: boolean;\n hasWarnings: boolean;\n}\n\n// ✅ FIX: Add lowercase version for case-insensitive matching\nexport const MINIMUM_API_REQUIREMENTS: Record<string, number> = {\n 'editorFile': 958,\n 'editorfile': 958, // Support both cases\n};\n\nexport class CodeAnalyzer {\n private srcDir: string;\n private pluginMinVersion: number | undefined;\n\n constructor(srcDir: string = 'src', pluginMinVersion?: number) {\n this.srcDir = srcDir;\n this.pluginMinVersion = pluginMinVersion;\n }\n\n private removeComments(code: string): string {\n return code\n .replace(/\\/\\/.*$/gm, '')\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n }\n\n analyzeAPIUsage(): APIUsageAnalysis {\n const apis = new Set<string>();\n const warnings: APIWarning[] = [];\n\n this.scanDirectory(this.srcDir, (content, filePath) => {\n // ✅ Use original content for accurate line numbers\n const lines = content.split('\\n');\n const requirePattern = /acode\\.require\\s*\\(\\s*['\"`]([^'\"`]+)['\"`]\\s*\\)/g;\n\n lines.forEach((line, index) => {\n // ✅ Clean line individually and reset regex lastIndex\n const cleanLine = this.removeComments(line);\n requirePattern.lastIndex = 0;\n \n let match;\n while ((match = requirePattern.exec(cleanLine)) !== null) {\n const apiName = match[1];\n apis.add(apiName);\n\n // ✅ Check both original case and lowercase\n const requiredVersion = MINIMUM_API_REQUIREMENTS[apiName] || \n MINIMUM_API_REQUIREMENTS[apiName.toLowerCase()];\n\n // ✅ Only create warnings for APIs with version requirements\n if (requiredVersion) {\n let severity: 'error' | 'warn' | 'info' = 'info';\n\n if (this.pluginMinVersion !== undefined) {\n if (requiredVersion > this.pluginMinVersion) {\n // API requires higher version - ERROR\n severity = 'error';\n } else {\n // Plugin version is sufficient - INFO\n severity = 'info';\n }\n } else {\n // Plugin has no minVersionCode - WARN\n severity = 'warn';\n }\n\n warnings.push({\n api: apiName,\n requiredVersion,\n file: path.relative(process.cwd(), filePath),\n line: index + 1,\n severity\n });\n }\n }\n });\n });\n\n return {\n apis,\n warnings,\n hasErrors: warnings.some(w => w.severity === 'error'),\n hasWarnings: warnings.some(w => w.severity === 'warn')\n };\n }\n\n private scanDirectory(dir: string, callback: (content: string, filePath: string) => void): void {\n if (!fs.existsSync(dir)) return;\n\n fs.readdirSync(dir).forEach(file => {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n\n if (stat.isDirectory()) {\n if (!['node_modules', 'build', 'dist', '.git'].includes(file)) {\n this.scanDirectory(filePath, callback);\n }\n } else if (/\\.(ts|js|tsx|jsx)$/.test(file)) {\n callback(fs.readFileSync(filePath, 'utf-8'), filePath);\n }\n });\n }\n}\n","import * as http from 'node:http';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport color from 'picocolors';\nimport logUpdate from 'log-update';\nimport type { AxpoConfig, PluginJson, DeviceInfo } from './types.js';\nimport { getOutDir } from './config.js';\nimport qr from 'qrcode-terminal';\nimport { MINIMUM_API_REQUIREMENTS } from './analyzer.js';\n\ninterface DevServerOptions {\n port: number;\n config: AxpoConfig;\n pluginJson: PluginJson;\n}\n\ninterface ConnectedClient {\n ws: WebSocket;\n id: string;\n clientNumber: number;\n connectedAt: Date;\n deviceInfo?: DeviceInfo;\n}\n\ninterface LogEntry {\n level: 'log' | 'warn' | 'error' | 'info' | 'device';\n message: string;\n timestamp: number;\n count: number;\n clientNumber?: number;\n deviceInfo?: DeviceInfo;\n}\n\ninterface StatusSection {\n buildStatus: 'idle' | 'building' | 'success' | 'failed';\n buildTime?: number;\n errorCount?: number;\n shutdownStatus?: 'stopping' | 'stopped' | 'error';\n buildTimestamp?: number;\n}\n\ninterface SessionWarnings {\n minVersionCodeWarning: boolean;\n apiWarnings: Set<string>;\n}\n\ninterface BuildSessionWarnings {\n apiWarnings: Set<string>;\n versionWarnings: Set<string>;\n buildErrors: Set<string>;\n lastBuildHash: string;\n}\n\nconst MAX_CLIENTS = 5;\nconst VIEWPORT_HEIGHT = 15;\nconst MAX_LOGS = 200;\nconst IP_CHECK_INTERVAL = 5000; // Check every 5 seconds\n\nexport class AxpoDevServer {\n private server: http.Server | null = null;\n private wss: WebSocketServer | null = null;\n private clients: Map<string, ConnectedClient> = new Map();\n private logs: Map<string, LogEntry> = new Map();\n private logOrder: string[] = [];\n private port: number;\n private config: AxpoConfig;\n private pluginJson: PluginJson;\n private buildVersion: number = 0;\n private statusSection: StatusSection = {\n buildStatus: 'idle',\n };\n private qrCode: string = '';\n private localIP: string = '';\n private renderScheduled: boolean = false;\n private terminalWidth: number = 80;\n private availableClientIds: number[] = [1, 2, 3, 4, 5];\n private clientIdMap: Map<string, number> = new Map();\n private scrollOffset: number = 0;\n private lastRenderedLines: number = 0;\n private isFirstRender: boolean = true;\n private buildSessionWarnings: BuildSessionWarnings = {\n apiWarnings: new Set(),\n versionWarnings: new Set(),\n buildErrors: new Set(),\n lastBuildHash: ''\n };\n private sessionWarnings: Map<string, SessionWarnings> = new Map();\n private detectedAPIs: Set<string> = new Set();\n\n // NEW: IP monitoring\n private ipCheckInterval: NodeJS.Timeout | null = null;\n private lastKnownIP: string = '';\n\n constructor(options: DevServerOptions) {\n this.port = options.port;\n this.config = options.config;\n this.pluginJson = options.pluginJson;\n this.localIP = this.getLocalIP();\n this.lastKnownIP = this.localIP;\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n this.updateTerminalDimensions();\n\n if (process.stdout.isTTY) {\n process.stdout.on('resize', () => {\n this.handleTerminalResize();\n });\n }\n\n // NEW: Start IP monitoring\n this.startIPMonitoring();\n }\n\n // NEW: Start monitoring IP address changes\n private startIPMonitoring(): void {\n this.ipCheckInterval = setInterval(() => {\n this.checkAndUpdateIP();\n }, IP_CHECK_INTERVAL);\n }\n\n // NEW: Stop IP monitoring\n private stopIPMonitoring(): void {\n if (this.ipCheckInterval) {\n clearInterval(this.ipCheckInterval);\n this.ipCheckInterval = null;\n }\n }\n\n // NEW: Check if IP has changed and update accordingly\n private checkAndUpdateIP(): void {\n const currentIP = this.getLocalIP();\n\n if (currentIP !== this.lastKnownIP) {\n const oldIP = this.lastKnownIP;\n this.lastKnownIP = currentIP;\n this.localIP = currentIP;\n\n // Regenerate QR code with new IP\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n\n // Log the IP change\n this.addLog('info', `🔄 Network changed: ${oldIP} → ${currentIP}`);\n\n // Notify all connected clients about the new URL\n this.notifyClientsIPChange(currentIP);\n\n // Force UI update\n this.renderUI();\n }\n }\n\n // NEW: Notify clients about IP change\n private notifyClientsIPChange(newIP: string): void {\n this.broadcast({\n type: 'ip_changed',\n newIP,\n newURL: `axpo://${newIP}:${this.port}`,\n timestamp: Date.now()\n });\n }\n\n private generateContentHash(content: string): string {\n let hash = 0;\n for (let i = 0; i < content.length; i++) {\n const char = content.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n }\n\n private checkVersionCompatibility(clientId: string, deviceInfo: DeviceInfo): void {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n // Read fresh plugin.json for version checks\n const freshPluginJson = this.getFreshPluginJson();\n\n if (!this.sessionWarnings.has(clientId)) {\n this.sessionWarnings.set(clientId, {\n minVersionCodeWarning: false,\n apiWarnings: new Set()\n });\n }\n\n const warnings = this.sessionWarnings.get(clientId)!;\n\n if (freshPluginJson.minVersionCode && !warnings.minVersionCodeWarning) {\n if (deviceInfo.versionCode < freshPluginJson.minVersionCode) {\n this.addLog(\n 'warn',\n `⚠️ Version mismatch: Plugin requires minVersionCode ${freshPluginJson.minVersionCode}, but client has ${deviceInfo.versionCode}. Plugin may not work correctly.`,\n client.clientNumber\n );\n warnings.minVersionCodeWarning = true;\n }\n }\n\n this.detectedAPIs.forEach(apiName => {\n if (!warnings.apiWarnings.has(apiName)) {\n const requiredVersion = MINIMUM_API_REQUIREMENTS[apiName];\n\n if (requiredVersion && deviceInfo.versionCode < requiredVersion) {\n this.addLog(\n 'warn',\n `⚠️ API '${apiName}' requires versionCode ${requiredVersion}, but client has ${deviceInfo.versionCode}. This API may not be available.`,\n client.clientNumber\n );\n warnings.apiWarnings.add(apiName);\n }\n }\n });\n }\n\n analyzeAndReportAPIs(analysis: any): void {\n if (!analysis || !analysis.warnings) return;\n\n const { warnings, apis } = analysis;\n const freshPluginJson = this.getFreshPluginJson();\n\n this.detectedAPIs = apis;\n\n const warningsHash = this.generateContentHash(\n JSON.stringify(warnings.map((w: any) => `${w.api}:${w.severity}`))\n );\n\n if (this.buildSessionWarnings.lastBuildHash === warningsHash) {\n return;\n }\n\n this.buildSessionWarnings.lastBuildHash = warningsHash;\n\n if (apis.size > 0 && this.buildSessionWarnings.apiWarnings.size === 0) {\n const apiList = Array.from(apis).join(', ');\n this.addLog('info', `📦 Detected ${apis.size} API(s): ${apiList}`);\n }\n\n const errors = warnings.filter((w: any) => w.severity === 'error');\n const warns = warnings.filter((w: any) => w.severity === 'warn');\n\n errors.forEach((warning: any) => {\n const key = `${warning.api}:${warning.severity}`;\n if (!this.buildSessionWarnings.buildErrors.has(key)) {\n this.addLog(\n 'error',\n `❌ API '${warning.api}' requires versionCode ${warning.requiredVersion}, but plugin minVersionCode is ${freshPluginJson.minVersionCode || 'not set'}. Update plugin.json!`\n );\n this.buildSessionWarnings.buildErrors.add(key);\n }\n });\n\n warns.forEach((warning: any) => {\n const key = `${warning.api}:${warning.severity}`;\n if (!this.buildSessionWarnings.versionWarnings.has(key)) {\n this.addLog(\n 'warn',\n `⚠️ API '${warning.api}' requires versionCode ${warning.requiredVersion}. Consider adding \"minVersionCode\": ${warning.requiredVersion} to plugin.json`\n );\n this.buildSessionWarnings.versionWarnings.add(key);\n }\n });\n\n Array.from(apis).forEach(api => {\n this.buildSessionWarnings.apiWarnings.add(api);\n });\n }\n\n // Get fresh plugin.json from disk\n private getFreshPluginJson(): PluginJson {\n try {\n const pluginJsonPath = path.resolve(process.cwd(), 'plugin.json');\n if (fs.existsSync(pluginJsonPath)) {\n const content = fs.readFileSync(pluginJsonPath, 'utf-8');\n return JSON.parse(content);\n }\n } catch (error) {\n console.warn('Failed to read fresh plugin.json:', error);\n }\n return this.pluginJson; // Fallback to cached version\n }\n\n private handleTerminalResize(): void {\n const oldWidth = this.terminalWidth;\n this.updateTerminalDimensions();\n\n if (Math.abs(this.terminalWidth - oldWidth) > 10) {\n this.qrCode = this.generateQRCode(`axpo://${this.localIP}:${this.port}`);\n }\n\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n if (this.scrollOffset > maxScroll) {\n this.scrollOffset = maxScroll;\n }\n\n logUpdate.clear();\n logUpdate.done();\n this.isFirstRender = true;\n this.renderUI();\n }\n\n private updateTerminalDimensions(): void {\n if (process.stdout.isTTY) {\n this.terminalWidth = Math.max(60, (process.stdout.columns || 80) - 2);\n }\n }\n\n private getNextClientId(): number {\n return this.availableClientIds.shift() || 0;\n }\n\n private releaseClientId(clientId: string): void {\n const clientNumber = this.clientIdMap.get(clientId);\n if (!clientNumber) return;\n\n this.clientIdMap.delete(clientId);\n\n const remainingClients = Array.from(this.clients.values())\n .filter(c => c.id !== clientId)\n .sort((a, b) => a.connectedAt.getTime() - b.connectedAt.getTime());\n\n this.availableClientIds = [1, 2, 3, 4, 5];\n this.clientIdMap.clear();\n\n remainingClients.forEach((client, index) => {\n const newNumber = index + 1;\n const oldNumber = client.clientNumber;\n client.clientNumber = newNumber;\n this.clientIdMap.set(client.id, newNumber);\n\n if (oldNumber !== newNumber) {\n this.updateLogsClientNumber(oldNumber, newNumber);\n }\n });\n\n this.availableClientIds = [1, 2, 3, 4, 5].filter(id =>\n !Array.from(this.clientIdMap.values()).includes(id)\n );\n }\n\n private updateLogsClientNumber(oldNumber: number, newNumber: number): void {\n this.logs.forEach((entry, key) => {\n if (entry.clientNumber === oldNumber) {\n entry.clientNumber = newNumber;\n\n const newKey = key.replace(`:${oldNumber}:`, `:${newNumber}:`);\n if (newKey !== key) {\n this.logs.delete(key);\n this.logs.set(newKey, entry);\n\n const index = this.logOrder.indexOf(key);\n if (index !== -1) {\n this.logOrder[index] = newKey;\n }\n }\n }\n });\n }\n\n private truncateText(text: string, maxLength: number = this.terminalWidth): string {\n const plainText = text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\n if (plainText.length <= maxLength) {\n return text;\n }\n\n let visibleLength = 0;\n let truncatedIndex = 0;\n\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n const endIndex = text.indexOf('m', i);\n if (endIndex !== -1) {\n i = endIndex;\n continue;\n }\n }\n visibleLength++;\n truncatedIndex = i + 1;\n\n if (visibleLength >= maxLength - 3) {\n break;\n }\n }\n\n return text.substring(0, truncatedIndex) + color.dim('...');\n }\n\n scrollUp(): void {\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n\n if (this.scrollOffset < maxScroll) {\n this.scrollOffset++;\n this.renderUI();\n }\n }\n\n scrollDown(): void {\n if (this.scrollOffset > 0) {\n this.scrollOffset--;\n this.renderUI();\n }\n }\n\n scrollToBottom(): void {\n if (this.scrollOffset !== 0) {\n this.scrollOffset = 0;\n this.renderUI();\n }\n }\n\n scrollToTop(): void {\n const totalLines = this.calculateTotalLines();\n const maxScroll = Math.max(0, totalLines - VIEWPORT_HEIGHT);\n\n if (this.scrollOffset !== maxScroll) {\n this.scrollOffset = maxScroll;\n this.renderUI();\n }\n }\n\n async start(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server = http.createServer((req, res) => this.handleRequest(req, res));\n this.wss = new WebSocketServer({ server: this.server });\n this.wss.on('connection', (ws, req) => this.handleConnection(ws, req));\n\n this.server.listen(this.port, () => {\n this.renderUI();\n resolve();\n });\n\n this.server.on('error', (error: any) => {\n if (error.code === 'EADDRINUSE') {\n console.error(color.red(`\\n✗ Port ${this.port} is already in use`));\n } else {\n console.error(color.red('Server error:'), error);\n }\n reject(error);\n });\n });\n }\n\n async stop(): Promise<void> {\n try {\n // Stop IP monitoring\n this.stopIPMonitoring();\n\n this.clients.forEach(client => {\n try {\n if (client.ws.readyState === WebSocket.OPEN) {\n client.ws.close();\n }\n } catch (error) { }\n });\n this.clients.clear();\n\n if (this.wss) {\n await new Promise<void>((resolve) => {\n this.wss!.close(() => resolve());\n });\n this.wss = null;\n }\n\n if (this.server) {\n await new Promise<void>((resolve) => {\n this.server!.close(() => {\n this.server = null;\n resolve();\n });\n });\n }\n } catch (error) { }\n }\n\n private scheduleRender(): void {\n if (this.renderScheduled) return;\n\n this.renderScheduled = true;\n setImmediate(() => {\n this.renderScheduled = false;\n this.renderUI();\n });\n }\n\n private renderUI(): void {\n const output: string[] = [];\n const freshPluginJson = this.getFreshPluginJson();\n\n output.push('');\n output.push(color.bold(color.white(` 💓 Axpo Dev Server`)));\n output.push('');\n output.push(this.truncateText(color.cyan(` ${freshPluginJson.name} · ${color.gray(`v${freshPluginJson.version}`)}`)));\n\n const qrLines = this.qrCode.split('\\n');\n qrLines.forEach(line => output.push(line));\n\n output.push('');\n output.push(this.truncateText(color.bold(color.white(`› Axpo waiting on ${color.cyan(`axpo://${this.localIP}:${this.port}`)}`))));\n output.push(this.truncateText(color.bold(color.white(`› Scan the QR code above with Axpo Dev (Acode Plugin)`))));\n output.push('');\n\n const clientText = this.clients.size === MAX_CLIENTS\n ? color.yellow(`${this.clients.size}/${MAX_CLIENTS} (MAX)`)\n : `${this.clients.size}/${MAX_CLIENTS}`;\n\n output.push(this.truncateText(color.dim(` Clients: ${clientText}`)));\n output.push('');\n output.push(color.bold(color.white('› r=Reload │ c=Clear │ q=Quit │ ↑/↓=Scroll │ Home/End')));\n output.push('');\n output.push(this.truncateText(color.dim('Logs below. Use arrow keys to scroll.')));\n output.push('');\n\n if (this.statusSection.buildStatus !== 'idle') {\n const timeStr = this.statusSection.buildTimestamp\n ? new Date(this.statusSection.buildTimestamp).toLocaleTimeString()\n : new Date().toLocaleTimeString();\n\n if (this.statusSection.buildStatus === 'building') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.yellow('⋯')} Building...`));\n } else if (this.statusSection.buildStatus === 'success') {\n const time = this.statusSection.buildTime || 0;\n\n try {\n const outDir = getOutDir(this.config);\n const mainJsPath = path.join(outDir, 'main.js');\n const size = fs.existsSync(mainJsPath) ? fs.statSync(mainJsPath).size : 0;\n const sizeKB = (size / 1024).toFixed(2);\n\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Build complete in ${time}ms · ${outDir}/main.js (${sizeKB} KB)`));\n } catch (error) {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Build complete in ${time}ms`));\n }\n } else if (this.statusSection.buildStatus === 'failed') {\n const errorCount = this.statusSection.errorCount || 1;\n const errorText = errorCount === 1 ? 'error' : 'errors';\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.red('✗')} Build failed with ${errorCount} ${errorText}`));\n }\n }\n\n if (this.logOrder.length > 0) {\n interface LogLineInfo {\n line: string;\n logIndex: number;\n lineIndex: number;\n totalLinesInLog: number;\n }\n\n const allLines: LogLineInfo[] = [];\n\n this.logOrder.forEach((key, logIndex) => {\n const entry = this.logs.get(key);\n if (!entry) return;\n\n const lines = this.getLogLines(entry);\n\n lines.forEach((line, lineIndex) => {\n allLines.push({\n line,\n logIndex,\n lineIndex,\n totalLinesInLog: lines.length\n });\n });\n });\n\n const totalLines = allLines.length;\n\n const viewportEnd = totalLines - this.scrollOffset;\n const viewportStart = Math.max(0, viewportEnd - VIEWPORT_HEIGHT);\n const visibleLines = allLines.slice(viewportStart, viewportEnd);\n\n const fullyHiddenAbove = new Set<number>();\n const fullyHiddenBelow = new Set<number>();\n const partiallyVisibleLogs = new Set<number>();\n\n visibleLines.forEach(lineInfo => {\n partiallyVisibleLogs.add(lineInfo.logIndex);\n });\n\n for (let i = 0; i < viewportStart; i++) {\n const lineInfo = allLines[i];\n if (!partiallyVisibleLogs.has(lineInfo.logIndex)) {\n fullyHiddenAbove.add(lineInfo.logIndex);\n }\n }\n\n for (let i = viewportEnd; i < totalLines; i++) {\n const lineInfo = allLines[i];\n if (!partiallyVisibleLogs.has(lineInfo.logIndex)) {\n fullyHiddenBelow.add(lineInfo.logIndex);\n }\n }\n\n if (fullyHiddenAbove.size > 0) {\n const count = fullyHiddenAbove.size;\n output.push(color.dim(` ↑ ${count} older log${count > 1 ? 's' : ''} hidden (total: ${this.logOrder.length}) · press ↑`));\n } else if (viewportStart > 0) {\n const firstVisibleLog = visibleLines[0];\n if (firstVisibleLog && firstVisibleLog.lineIndex > 0) {\n output.push(color.dim(` ↑ scroll up for more · press ↑`));\n }\n }\n\n visibleLines.forEach((lineInfo, idx) => {\n let line = lineInfo.line;\n\n if (idx === 0 && lineInfo.lineIndex > 0) {\n const plainLine = line.replace(/\\x1b\\[[0-9;]*m/g, '');\n if (!plainLine.trim().startsWith('...')) {\n const contentStart = line.search(/[^\\x1b\\[0-9;m]/);\n if (contentStart !== -1) {\n const prefix = line.substring(0, contentStart);\n const content = line.substring(contentStart);\n line = prefix + color.dim('...') + content;\n } else {\n line = color.dim('...') + line;\n }\n }\n }\n\n if (idx === visibleLines.length - 1) {\n const remainingLines = lineInfo.totalLinesInLog - lineInfo.lineIndex - 1;\n if (remainingLines > 0) {\n line = line + color.dim('...');\n }\n }\n\n output.push(this.truncateText(line));\n });\n\n if (fullyHiddenBelow.size > 0) {\n const count = fullyHiddenBelow.size;\n output.push(color.dim(` ↓ ${count} newer log${count > 1 ? 's' : ''} hidden · press ↓`));\n } else if (viewportEnd < totalLines) {\n const lastVisibleLog = visibleLines[visibleLines.length - 1];\n if (lastVisibleLog) {\n const lastLogTotalLines = lastVisibleLog.totalLinesInLog;\n if (lastVisibleLog.lineIndex < lastLogTotalLines - 1) {\n output.push(color.dim(` ↓ scroll down for more · press ↓`));\n }\n }\n }\n\n if (totalLines > VIEWPORT_HEIGHT) {\n const scrollPercent = Math.round(((totalLines - viewportEnd) / (totalLines - VIEWPORT_HEIGHT)) * 100);\n output.push(color.dim(` Viewing ${viewportStart + 1}-${viewportEnd} of ${totalLines} lines (${scrollPercent}% from bottom)`));\n }\n }\n\n if (this.statusSection.shutdownStatus) {\n const timeStr = new Date().toLocaleTimeString();\n\n if (this.statusSection.shutdownStatus === 'stopping') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.yellow('⋯')} Stopping dev server...`));\n } else if (this.statusSection.shutdownStatus === 'stopped') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.green('✓')} Server stopped successfully`));\n } else if (this.statusSection.shutdownStatus === 'error') {\n output.push(this.truncateText(`${color.dim(timeStr)} ${color.red('✗')} Error stopping server`));\n }\n }\n\n output.push('');\n\n const newContent = output.join('\\n');\n\n try {\n logUpdate(newContent);\n this.lastRenderedLines = output.length;\n this.isFirstRender = false;\n } catch (error) {\n console.log(newContent);\n }\n }\n\n private wrapText(text: string, maxWidth: number): string[] {\n const plainText = text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\n if (plainText.length <= maxWidth) {\n return [text];\n }\n\n const lines: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= maxWidth) {\n lines.push(remaining);\n break;\n }\n\n const chunk = remaining.substring(0, maxWidth);\n const lastSpace = chunk.lastIndexOf(' ');\n\n if (lastSpace > maxWidth * 0.7) {\n lines.push(remaining.substring(0, lastSpace));\n remaining = ' ' + remaining.substring(lastSpace + 1);\n } else {\n lines.push(chunk);\n remaining = ' ' + remaining.substring(maxWidth);\n }\n }\n\n return lines;\n }\n\n private calculateTotalLines(): number {\n let totalLines = 0;\n\n this.logOrder.forEach((key) => {\n const entry = this.logs.get(key);\n if (!entry) return;\n\n const lines = this.getLogLines(entry);\n totalLines += lines.length;\n });\n\n return totalLines;\n }\n\n private getLogLines(entry: LogEntry): string[] {\n const entryTimeStr = new Date(entry.timestamp).toLocaleTimeString();\n\n // ✅ NEW: Client suffix instead of prefix\n const clientSuffix = entry.clientNumber\n ? ` › ${color.cyan(`[${entry.clientNumber}]`)}`\n : '';\n\n const levelIndicator = entry.level === 'error' ? color.red('✗ ERROR') :\n entry.level === 'warn' ? color.yellow('⚠ WARN') :\n entry.level === 'info' ? color.gray('› INFO') :\n entry.level === 'device' ? color.gray('› DEVICE') :\n color.blue('› LOG');\n\n const countSuffix = entry.count > 1 ? ` ${color.dim(`[${entry.count}×]`)}` : '';\n\n // ✅ NEW: Time first, then level, then client number, then message\n const logLine = `${color.dim(entryTimeStr)} ${levelIndicator}${clientSuffix} ${entry.message}${countSuffix}`;\n return this.wrapText(logLine, this.terminalWidth);\n }\n\n\n setBuildStatus(status: 'building' | 'success' | 'failed', time?: number, error?: string, errorCount?: number): void {\n this.statusSection.buildStatus = status;\n this.statusSection.buildTime = time;\n this.statusSection.errorCount = errorCount;\n this.statusSection.buildTimestamp = Date.now();\n\n if (status === 'failed' && error) {\n const errors = error.split('\\n').filter(e => e.trim());\n errors.forEach(err => {\n this.addLog('error', err);\n });\n }\n\n this.scrollToBottom();\n this.renderUI();\n }\n\n setShutdownStatus(status: 'stopping' | 'stopped' | 'error'): void {\n this.statusSection.shutdownStatus = status;\n this.renderUI();\n }\n\n addLog(level: 'log' | 'warn' | 'error' | 'info', message: string, clientNumber?: number): void {\n if (!message?.trim()) return;\n\n message = message.trim();\n\n const filters = [\n 'Starting initial build',\n 'Reloading clients',\n 'Build failed with'\n ];\n\n if (filters.some(filter => message.includes(filter))) return;\n\n const key = clientNumber\n ? `${level}:${clientNumber}:${message}`\n : `${level}:${message}`;\n\n if (this.logs.has(key)) {\n const existing = this.logs.get(key)!;\n existing.count++;\n existing.timestamp = Date.now();\n\n const currentIndex = this.logOrder.indexOf(key);\n if (currentIndex !== -1) {\n this.logOrder.splice(currentIndex, 1);\n }\n this.logOrder.push(key);\n } else {\n const entry: LogEntry = {\n level,\n message,\n timestamp: Date.now(),\n count: 1,\n clientNumber\n };\n this.logs.set(key, entry);\n this.logOrder.push(key);\n\n if (this.logOrder.length > MAX_LOGS) {\n const removedKey = this.logOrder.shift()!;\n this.logs.delete(removedKey);\n\n if (this.scrollOffset > 0) {\n this.scrollOffset = Math.max(0, this.scrollOffset - 1);\n }\n }\n }\n\n if (this.scrollOffset === 0) {\n this.scheduleRender();\n }\n }\n\n addDeviceInfoLog(deviceInfo: DeviceInfo, clientNumber: number): void {\n const key = `device:${clientNumber}:${deviceInfo.deviceModel}`;\n\n // ✅ Format device details in single line\n const deviceDetails = [\n `📱 ${deviceInfo.deviceModel}`,\n deviceInfo.deviceVendor && deviceInfo.deviceVendor !== 'Unknown' ? deviceInfo.deviceVendor : null,\n deviceInfo.os,\n `Acode ${deviceInfo.version} (${deviceInfo.versionCode})`,\n `${deviceInfo.screenWidth}×${deviceInfo.screenHeight}`,\n deviceInfo.ram ? `${deviceInfo.ram}GB RAM` : null,\n deviceInfo.cpuCores ? `${deviceInfo.cpuCores} cores` : null,\n ].filter(Boolean).join(' · ');\n\n const entry: LogEntry = {\n level: 'device',\n message: deviceDetails, // ✅ Use formatted string instead of separate deviceInfo\n timestamp: Date.now(),\n count: 1,\n clientNumber,\n // ✅ REMOVE: deviceInfo field\n };\n\n this.logs.set(key, entry);\n this.logOrder.push(key);\n\n if (this.logOrder.length > MAX_LOGS) {\n const removedKey = this.logOrder.shift()!;\n this.logs.delete(removedKey);\n\n if (this.scrollOffset > 0) {\n this.scrollOffset = Math.max(0, this.scrollOffset - 1);\n }\n }\n\n if (this.scrollOffset === 0) {\n this.scheduleRender();\n }\n }\n\n clearLogs(): void {\n this.logs.clear();\n this.logOrder = [];\n this.scrollOffset = 0;\n this.renderUI();\n }\n\n notifyReload(): void {\n this.buildVersion++;\n this.broadcast({ type: 'reload', buildVersion: this.buildVersion, timestamp: Date.now() });\n }\n\n private handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void {\n const url = req.url || '/';\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n if (url === '/' || url === '/manifest') {\n this.serveManifest(res);\n } else if (url === '/plugin.json') {\n this.serveFile('plugin.json', res);\n } else if (url === '/status') {\n this.serveStatus(res);\n } else {\n const fileName = url.substring(1);\n\n try {\n const buildDir = getOutDir(this.config);\n const buildFilePath = path.join(buildDir, fileName);\n\n if (fs.existsSync(buildFilePath) && fs.statSync(buildFilePath).isFile()) {\n try {\n const content = fs.readFileSync(buildFilePath);\n const ext = path.extname(buildFilePath);\n const contentType = this.getContentType(ext);\n\n res.writeHead(200, {\n 'Content-Type': contentType,\n 'Content-Length': content.length.toString(),\n 'Access-Control-Allow-Origin': '*'\n });\n res.end(content);\n return;\n } catch (error: any) {\n this.serve500(res, error);\n return;\n }\n }\n } catch (error) { }\n\n if (fs.existsSync(fileName) && fs.statSync(fileName).isFile()) {\n this.serveFile(fileName, res);\n } else {\n this.serve404(res);\n }\n }\n }\n\n private serveManifest(res: http.ServerResponse): void {\n try {\n const freshPluginJson = this.getFreshPluginJson();\n\n const manifest = {\n ...freshPluginJson,\n protocol: 'axpo',\n buildVersion: this.buildVersion,\n endpoints: {\n plugin: '/plugin.json',\n main: '/main.js',\n ws: `ws://${this.localIP}:${this.port}`\n },\n files: this.getServedFiles()\n };\n\n res.writeHead(200, {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0'\n });\n res.end(JSON.stringify(manifest, null, 2));\n } catch (error) {\n console.error('Error serving manifest:', error);\n const manifest = {\n ...this.pluginJson,\n protocol: 'axpo',\n buildVersion: this.buildVersion,\n endpoints: {\n plugin: '/plugin.json',\n main: '/main.js',\n ws: `ws://${this.localIP}:${this.port}`\n },\n files: this.getServedFiles()\n };\n\n res.writeHead(200, {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-cache, no-store, must-revalidate'\n });\n res.end(JSON.stringify(manifest, null, 2));\n }\n }\n\n private serveStatus(res: http.ServerResponse): void {\n const status = {\n running: true,\n buildVersion: this.buildVersion,\n clients: this.clients.size,\n maxClients: MAX_CLIENTS,\n uptime: process.uptime(),\n logs: this.logs.size,\n buildStatus: this.statusSection.buildStatus,\n currentIP: this.localIP,\n url: `axpo://${this.localIP}:${this.port}`\n };\n\n res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });\n res.end(JSON.stringify(status, null, 2));\n }\n\n private serveFile(filePath: string, res: http.ServerResponse): void {\n const fullPath = path.resolve(process.cwd(), filePath);\n\n if (!fullPath.startsWith(process.cwd())) {\n this.serve403(res);\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n this.serve404(res);\n return;\n }\n\n try {\n const content = fs.readFileSync(fullPath);\n const ext = path.extname(fullPath);\n const contentType = this.getContentType(ext);\n\n res.writeHead(200, {\n 'Content-Type': contentType,\n 'Content-Length': content.length.toString(),\n 'Access-Control-Allow-Origin': '*'\n });\n res.end(content);\n } catch (error: any) {\n this.serve500(res, error);\n }\n }\n\n private getContentType(ext: string): string {\n const types: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.css': 'text/css',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon'\n };\n return types[ext] || 'application/octet-stream';\n }\n\n private getServedFiles(): string[] {\n const files: string[] = [];\n\n if (fs.existsSync('plugin.json')) files.push('plugin.json');\n\n try {\n const buildDir = getOutDir(this.config);\n if (fs.existsSync(buildDir)) {\n this.addFilesFromBuildDir(buildDir, files);\n }\n } catch (error) { }\n\n this.config.files?.forEach(file => {\n if (fs.existsSync(file)) {\n const stat = fs.statSync(file);\n if (stat.isFile()) {\n if (!files.includes(file)) {\n files.push(file);\n }\n } else if (stat.isDirectory()) {\n this.addFilesFromFolder(file, file, files);\n }\n }\n });\n\n this.pluginJson.files?.forEach(file => {\n if (fs.existsSync(file) && !files.includes(file)) {\n const stat = fs.statSync(file);\n if (stat.isFile()) {\n files.push(file);\n } else if (stat.isDirectory()) {\n this.addFilesFromFolder(file, file, files);\n }\n }\n });\n\n return [...new Set(files)];\n }\n\n private addFilesFromBuildDir(buildDir: string, files: string[]): void {\n if (!fs.existsSync(buildDir)) return;\n\n const entries = fs.readdirSync(buildDir);\n entries.forEach(entry => {\n const fullPath = path.join(buildDir, entry);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n this.addFilesFromBuildDir(fullPath, files);\n } else {\n const fileName = path.basename(fullPath);\n if (!files.includes(fileName)) {\n files.push(fileName);\n }\n }\n });\n }\n\n private addFilesFromFolder(baseDir: string, dir: string, files: string[]): void {\n if (!fs.existsSync(dir)) return;\n\n const entries = fs.readdirSync(dir);\n entries.forEach(entry => {\n const fullPath = path.join(dir, entry);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n this.addFilesFromFolder(baseDir, fullPath, files);\n } else {\n const relativePath = path.relative(process.cwd(), fullPath);\n if (!files.includes(relativePath)) {\n files.push(relativePath);\n }\n }\n });\n }\n\n private handleConnection(ws: WebSocket, req: http.IncomingMessage): void {\n if (this.clients.size >= MAX_CLIENTS) {\n try {\n ws.close(1008, `Maximum ${MAX_CLIENTS} clients allowed`);\n } catch (error) { }\n return;\n }\n\n const clientId = this.generateClientId();\n const clientNumber = this.getNextClientId();\n\n if (clientNumber === 0) {\n ws.close(1008, 'No available client IDs');\n return;\n }\n\n const freshPluginJson = this.getFreshPluginJson();\n\n const client: ConnectedClient = {\n ws,\n id: clientId,\n clientNumber,\n connectedAt: new Date(),\n deviceInfo: undefined\n };\n\n this.clients.set(clientId, client);\n this.clientIdMap.set(clientId, clientNumber);\n\n // this.addLog('info', `Connected - waiting for device info...`, clientNumber);\n this.scheduleRender();\n\n this.sendToClient(ws, {\n type: 'connected',\n clientId,\n clientNumber,\n buildVersion: this.buildVersion,\n plugin: {\n name: freshPluginJson.name,\n id: freshPluginJson.id,\n version: freshPluginJson.version\n }\n });\n\n ws.on('message', (data) => {\n try {\n const message = JSON.parse(data.toString());\n this.handleClientMessage(clientId, message);\n } catch (error) {\n console.error('Failed to parse message:', error);\n }\n });\n\n ws.on('close', () => {\n const disconnectedNumber = this.clientIdMap.get(clientId);\n const disconnectedClient = this.clients.get(clientId);\n\n this.clients.delete(clientId);\n this.sessionWarnings.delete(clientId);\n this.releaseClientId(clientId);\n\n if (disconnectedNumber) {\n let disconnectMsg = `Disconnected`;\n if (disconnectedClient?.deviceInfo) {\n disconnectMsg += ` (${disconnectedClient.deviceInfo.deviceModel})`;\n }\n this.addLog('info', disconnectMsg, disconnectedNumber);\n this.scrollToBottom();\n }\n\n this.scheduleRender();\n });\n\n ws.on('error', (error) => {\n const disconnectedNumber = this.clientIdMap.get(clientId);\n this.clients.delete(clientId);\n this.sessionWarnings.delete(clientId);\n this.releaseClientId(clientId);\n\n if (disconnectedNumber) {\n this.addLog('warn', `Error: ${error.message}`, disconnectedNumber);\n this.scrollToBottom();\n }\n\n this.scheduleRender();\n });\n }\n\n private handleClientMessage(clientId: string, message: any): void {\n const client = this.clients.get(clientId);\n\n if (message.type === 'ping') {\n if (client) this.sendToClient(client.ws, { type: 'pong' });\n\n } else if (message.type === 'device_info') {\n if (client && message.deviceInfo) {\n client.deviceInfo = message.deviceInfo as DeviceInfo;\n\n // ✅ ADD: Log connection with device info\n const deviceModel = message.deviceInfo.deviceModel || 'Unknown Device';\n const acodeVersion = message.deviceInfo.versionCode || 'Unknown';\n\n this.addLog(\n 'info',\n `Connected (${deviceModel} · Acode ${acodeVersion})`,\n client.clientNumber\n );\n\n // Then add detailed device info\n this.addDeviceInfoLog(message.deviceInfo, client.clientNumber);\n\n // Check version compatibility\n this.checkVersionCompatibility(clientId, message.deviceInfo);\n\n this.scheduleRender();\n }\n\n } else if (message.type === 'log') {\n const { level, message: logMsg } = message;\n if (logMsg?.trim() && client) {\n this.addLog(level || 'log', logMsg.trim(), client.clientNumber);\n }\n }\n }\n\n private sendToClient(ws: WebSocket, message: any): void {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n }\n\n broadcast(message: any): void {\n const data = JSON.stringify(message);\n this.clients.forEach(client => {\n if (client.ws.readyState === WebSocket.OPEN) {\n client.ws.send(data);\n }\n });\n }\n\n private generateClientId(): string {\n return `client-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private getLocalIP(): string {\n try {\n const nets = os.networkInterfaces();\n const results: string[] = [];\n\n for (const name of Object.keys(nets)) {\n const netArray = nets[name];\n if (!netArray) continue;\n\n for (const net of netArray) {\n const familyV4Value = typeof net.family === 'string' ? 'IPv4' : 4;\n if (net.family === familyV4Value && !net.internal) {\n results.push(net.address);\n }\n }\n }\n\n const localNetwork = results.find(ip => ip.startsWith('192.168.'));\n if (localNetwork) return localNetwork;\n\n const corporateNetwork = results.find(ip => ip.startsWith('10.'));\n if (corporateNetwork) return corporateNetwork;\n\n const privateNetwork = results.find(ip => {\n const parts = ip.split('.');\n if (parts[0] === '172') {\n const second = parseInt(parts[1]);\n return second >= 16 && second <= 31;\n }\n return false;\n });\n if (privateNetwork) return privateNetwork;\n\n if (results.length > 0) return results[0];\n\n } catch (error) { }\n\n return '127.0.0.1';\n }\n\n private generateQRCode(text: string): string {\n try {\n const chunks: string[] = [];\n const originalWrite = process.stdout.write.bind(process.stdout);\n\n process.stdout.write = (chunk: any): boolean => {\n chunks.push(chunk.toString());\n return true;\n };\n\n try {\n qr.generate(text, { small: true });\n } finally {\n process.stdout.write = originalWrite;\n }\n\n const capturedOutput = chunks.join('');\n if (capturedOutput.trim()) {\n return capturedOutput.split('\\n').map(line => ` ${line}`).join('\\n');\n }\n\n return this.getFallbackBox();\n } catch (error) {\n return this.getFallbackBox();\n }\n }\n\n private getFallbackBox(): string {\n return color.gray(`${color.cyan('npm i qrcode-terminal')}`)\n }\n\n private serve404(res: http.ServerResponse): void {\n res.writeHead(404, { 'Content-Type': 'text/plain' });\n res.end('404 Not Found');\n }\n\n private serve403(res: http.ServerResponse): void {\n res.writeHead(403, { 'Content-Type': 'text/plain' });\n res.end('403 Forbidden');\n }\n\n private serve500(res: http.ServerResponse, error: Error): void {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.end(`500 Internal Server Error\\n\\n${error.message}`);\n }\n}\n","import color from 'picocolors';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport boxen from 'boxen';\n\ninterface VersionCheckResult {\n isOutdated: boolean;\n currentVersion: string;\n latestVersion?: string;\n}\n\ninterface VersionCache {\n lastCheck: number;\n latestVersion: string;\n nextCheck: number;\n}\n\nconst CACHE_DIR = path.join(os.homedir(), '.cache', 'axpo');\nconst CACHE_FILE = path.join(CACHE_DIR, 'version-check.json');\nconst CHECK_INTERVAL = 12 * 60 * 60 * 1000; // 12 hours\nconst NPM_PACKAGE = '@axpo/cli';\n\nfunction ensureCacheDir(): void {\n try {\n if (!fs.existsSync(CACHE_DIR)) {\n fs.mkdirSync(CACHE_DIR, { recursive: true, mode: 0o755 });\n }\n } catch {\n // Silent fail\n }\n}\n\nfunction getCurrentVersion(): string {\n try {\n const possiblePaths = [\n path.join(import.meta.dirname, '../package.json'),\n path.join(process.cwd(), 'node_modules/@axpo/cli/package.json'),\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n const pkg = JSON.parse(fs.readFileSync(p, 'utf-8'));\n if (pkg.name === NPM_PACKAGE && pkg.version) {\n return pkg.version;\n }\n }\n }\n } catch {\n // Silent fail\n }\n return '1.0.0';\n}\n\nfunction readCache(): VersionCache | null {\n try {\n if (!fs.existsSync(CACHE_FILE)) return null;\n const cache = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf-8')) as VersionCache;\n if (!cache.lastCheck || !cache.latestVersion || !cache.nextCheck) return null;\n if (cache.lastCheck < 0 || cache.nextCheck < cache.lastCheck) return null;\n return cache;\n } catch {\n return null;\n }\n}\n\nfunction writeCache(cache: VersionCache): void {\n try {\n ensureCacheDir();\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache), { encoding: 'utf-8', mode: 0o644 });\n } catch {\n // Silent fail\n }\n}\n\nfunction shouldCheckVersion(): { shouldCheck: boolean; cachedLatest?: string } {\n const cache = readCache();\n if (!cache) return { shouldCheck: true };\n if (Date.now() >= cache.nextCheck) return { shouldCheck: true };\n return { shouldCheck: false, cachedLatest: cache.latestVersion };\n}\n\nfunction compareVersions(v1: string, v2: string): number {\n const parts1 = v1.split('.').map(Number);\n const parts2 = v2.split('.').map(Number);\n for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {\n const diff = (parts1[i] || 0) - (parts2[i] || 0);\n if (diff !== 0) return diff < 0 ? -1 : 1;\n }\n return 0;\n}\n\nfunction useStaleCacheFallback(currentVersion: string): VersionCheckResult | null {\n const cache = readCache();\n if (cache?.latestVersion && compareVersions(currentVersion, cache.latestVersion) < 0) {\n return { isOutdated: true, currentVersion, latestVersion: cache.latestVersion };\n }\n return null;\n}\n\nexport async function checkAxpoVersion(): Promise<VersionCheckResult | null> {\n const currentVersion = getCurrentVersion();\n const cacheCheck = shouldCheckVersion();\n\n if (!cacheCheck.shouldCheck && cacheCheck.cachedLatest) {\n if (compareVersions(currentVersion, cacheCheck.cachedLatest) < 0) {\n return { isOutdated: true, currentVersion, latestVersion: cacheCheck.cachedLatest };\n }\n return null;\n }\n\n try {\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(NPM_PACKAGE)}/latest`,\n { headers: { Accept: 'application/json' }, signal: AbortSignal.timeout(3000) }\n );\n\n if (!response.ok) return useStaleCacheFallback(currentVersion);\n\n const data: any = await response.json();\n const latestVersion = data.version;\n if (!latestVersion) return useStaleCacheFallback(currentVersion);\n\n const now = Date.now();\n writeCache({ lastCheck: now, latestVersion, nextCheck: now + CHECK_INTERVAL });\n\n if (compareVersions(currentVersion, latestVersion) < 0) {\n return { isOutdated: true, currentVersion, latestVersion };\n }\n return null;\n } catch {\n return useStaleCacheFallback(currentVersion);\n }\n}\n\nexport function displayVersionWarning(result: VersionCheckResult): void {\n if (!result.isOutdated || !result.latestVersion) return;\n\n const message = [\n color.dim(`Current: ${result.currentVersion}`),\n color.green(`Latest: ${result.latestVersion}`),\n '',\n color.cyan(`npm install ${NPM_PACKAGE}@latest`),\n color.dim('to update in your project'),\n ].join('\\n');\n\n console.log(boxen(message, {\n title: 'Update Available',\n titleAlignment: 'center',\n padding: 1,\n margin: 0,\n borderStyle: 'round',\n borderColor: 'yellow',\n backgroundColor: '#1a1a1a',\n textAlignment: 'center',\n width: (process.stdout.columns || 80) - 4,\n }));\n}\n","import axios from 'axios';\nimport FormData from 'form-data';\nimport { createReadStream } from 'node:fs';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { input, password, confirm } from '@inquirer/prompts';\nimport color from 'picocolors';\nimport { createSpinner } from 'nanospinner';\nimport JSZip from 'jszip';\nimport { loadConfig } from './config.js';\nimport type { PluginJson } from './types.js';\n\ninterface Credentials {\n email: string;\n password: string;\n}\n\ninterface PublishOptions {\n zipFilename?: string;\n force?: boolean;\n token?: string;\n}\n\ninterface PluginCheckResponse {\n exists: boolean;\n plugin?: {\n id: string;\n name: string;\n version: string;\n downloads: number;\n lastUpdated?: string;\n };\n}\n\nconst API_BASE = process.env.AXPO_API_BASE || 'https://acode.app/api';\nconst CREDENTIALS_DIR = path.join(os.homedir(), '.axpo');\nconst CREDENTIALS_PATH = path.join(CREDENTIALS_DIR, 'credentials.json');\nconst REQUEST_TIMEOUT = 30000;\nconst UPLOAD_TIMEOUT = 120000;\n\nasync function readPluginJsonFromZip(zipPath: string): Promise<PluginJson> {\n try {\n const zipData = fs.readFileSync(zipPath);\n const zip = await JSZip.loadAsync(zipData);\n\n const pluginJsonFile = zip.file('plugin.json');\n if (!pluginJsonFile) {\n throw new Error('plugin.json not found in zip file');\n }\n\n const content = await pluginJsonFile.async('text');\n const pluginJson = JSON.parse(content);\n\n if (!pluginJson.id) throw new Error('plugin.json: \"id\" is required');\n if (!pluginJson.name) throw new Error('plugin.json: \"name\" is required');\n if (!pluginJson.version) throw new Error('plugin.json: \"version\" is required');\n if (!pluginJson.author?.name) throw new Error('plugin.json: \"author.name\" is required');\n if (!pluginJson.author?.email) throw new Error('plugin.json: \"author.email\" is required');\n\n return pluginJson;\n } catch (error: any) {\n if (error instanceof SyntaxError) {\n throw new Error('plugin.json contains invalid JSON');\n }\n if (error.message.includes('plugin.json')) {\n throw error;\n }\n throw new Error(`Failed to read zip file: ${error.message}`);\n }\n}\n\nfunction getZipSize(zipPath: string): string {\n try {\n const stats = fs.statSync(zipPath);\n return (stats.size / (1024 * 1024)).toFixed(2);\n } catch (error) {\n return '0.00';\n }\n}\n\nfunction ensureCredentialsDir(): void {\n try {\n if (!fs.existsSync(CREDENTIALS_DIR)) {\n fs.mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });\n }\n } catch (error: any) {\n throw new Error(`Failed to create credentials directory: ${error.message}`);\n }\n}\n\nfunction saveCredentials(credentials: Credentials): void {\n try {\n ensureCredentialsDir();\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_PATH, content, {\n encoding: 'utf-8',\n mode: 0o600\n });\n } catch (error) {\n console.warn(color.yellow('⚠ Failed to save credentials'));\n }\n}\n\nfunction loadCredentials(): Credentials | null {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n const content = fs.readFileSync(CREDENTIALS_PATH, 'utf-8');\n return JSON.parse(content);\n }\n } catch (error) {\n // Invalid file\n }\n return null;\n}\n\nfunction clearCredentials(): void {\n try {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n } catch (error) {\n // Silent fail\n }\n}\n\nfunction parseApiError(error: any): string {\n if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {\n return 'Cannot connect to Acode registry. Please check your internet connection.';\n }\n\n const apiMessage = error.response?.data?.message;\n if (apiMessage) return apiMessage;\n\n const status = error.response?.status;\n if (status) return `API error (${status}): ${error.message}`;\n\n return error.message || 'Unknown error';\n}\n\nasync function checkPluginExists(pluginId: string): Promise<PluginCheckResponse> {\n const spinner = createSpinner('Checking plugin registry...').start();\n\n try {\n const response = await axios.get(`${API_BASE}/plugin/${pluginId}`, {\n timeout: REQUEST_TIMEOUT,\n validateStatus: (status) => status === 200 || status === 404\n });\n\n spinner.stop();\n\n if (response.status === 404) {\n return { exists: false };\n }\n\n return {\n exists: true,\n plugin: {\n id: response.data.id,\n name: response.data.name,\n version: response.data.version,\n downloads: response.data.downloads || 0,\n lastUpdated: response.data.updatedAt || response.data.createdAt\n }\n };\n } catch (error: any) {\n spinner.error({ text: 'Failed to check plugin registry' });\n throw new Error(parseApiError(error));\n }\n}\n\nasync function login(providedToken?: string): Promise<string | null> {\n if (providedToken) {\n const spinner = createSpinner('Validating token...').start();\n try {\n await axios.get(`${API_BASE}/user/profile`, {\n headers: { 'Cookie': `token=${providedToken}` },\n timeout: REQUEST_TIMEOUT\n });\n spinner.success({ text: 'Token validated' });\n return providedToken;\n } catch (error) {\n spinner.error({ text: 'Invalid token' });\n throw new Error('Provided token is invalid or expired');\n }\n }\n\n let credentials = loadCredentials();\n let attemptCount = 0;\n const maxAttempts = 3;\n\n while (attemptCount < maxAttempts) {\n attemptCount++;\n\n if (!credentials) {\n console.log('');\n console.log(color.cyan('Acode Account Login'));\n console.log(color.dim('Credentials will be saved in ~/.axpo/credentials.json'));\n console.log('');\n\n const email = await input({\n message: 'Email:',\n validate: (val) => val.trim() ? true : 'Email is required'\n });\n\n const pwd = await password({\n message: 'Password:',\n mask: '*',\n validate: (val) => val ? true : 'Password is required'\n });\n\n credentials = { email, password: pwd };\n }\n\n const spinner = createSpinner('Logging in...').start();\n\n try {\n const response = await axios.post(\n `${API_BASE}/login`,\n {\n email: credentials.email,\n password: credentials.password\n },\n {\n timeout: REQUEST_TIMEOUT,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n const setCookieHeader = response.headers['set-cookie'];\n if (!setCookieHeader || setCookieHeader.length === 0) {\n throw new Error('No token received');\n }\n\n const token = setCookieHeader[0].split(';')[0].split('=')[1];\n if (!token) {\n throw new Error('Failed to extract token');\n }\n\n spinner.success({ text: 'Login successful!' });\n console.log('');\n\n saveCredentials(credentials);\n return token;\n\n } catch (error: any) {\n const errorMessage = parseApiError(error);\n spinner.error({ text: errorMessage });\n\n credentials = null;\n clearCredentials();\n\n if (attemptCount < maxAttempts) {\n console.log('');\n const retry = await confirm({\n message: `Try again? (${maxAttempts - attemptCount} attempt${maxAttempts - attemptCount > 1 ? 's' : ''} left)`,\n default: true\n });\n\n if (!retry) {\n console.log(color.dim('Login cancelled'));\n console.log('');\n return null;\n }\n }\n }\n }\n\n console.log('');\n console.log(color.red('✗ Maximum login attempts reached'));\n console.log('');\n return null;\n}\n\nasync function uploadPlugin(\n token: string,\n zipPath: string,\n isUpdate: boolean,\n pluginJson: PluginJson,\n zipSizeMB: string\n): Promise<void> {\n const actionText = isUpdate ? 'Updating plugin' : 'Publishing plugin';\n const spinner = createSpinner(actionText + '...').start();\n\n try {\n const form = new FormData();\n form.append('plugin', createReadStream(zipPath));\n\n const startTime = Date.now();\n const method = isUpdate ? 'put' : 'post';\n\n let lastProgress = 0;\n\n await axios({\n method,\n url: `${API_BASE}/plugin`,\n data: form,\n headers: {\n ...form.getHeaders(),\n 'Cookie': `token=${token}`,\n },\n timeout: UPLOAD_TIMEOUT,\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n onUploadProgress: (progressEvent) => {\n if (progressEvent.total) {\n const percentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n if (percentage - lastProgress >= 10) {\n lastProgress = percentage;\n spinner.update({ text: `${actionText}... ${percentage}%` });\n }\n }\n }\n });\n\n const duration = Date.now() - startTime;\n\n spinner.success({ text: `${isUpdate ? 'Update' : 'Publish'} successful!` });\n\n console.log('');\n console.log(color.dim(' Plugin Details:'));\n console.log(color.dim(` • Name: ${pluginJson.name}`));\n console.log(color.dim(` • Version: ${pluginJson.version}`));\n console.log(color.dim(` • ID: ${pluginJson.id}`));\n console.log(color.dim(` • Size: ${zipSizeMB} MB`));\n console.log(color.dim(` • Upload time: ${(duration / 1000).toFixed(1)}s`));\n console.log('');\n console.log(color.cyan(` 🔗 https://acode.app/plugin/${pluginJson.id}`));\n console.log('');\n\n } catch (error: any) {\n const errorMessage = parseApiError(error);\n spinner.error({ text: 'Upload failed' });\n throw new Error(errorMessage);\n }\n}\n\nexport async function publish(options: PublishOptions = {}): Promise<void> {\n try {\n console.log('');\n console.log(color.bold(color.white('📦 Publishing to Acode Plugin Registry')));\n console.log('');\n\n const envToken = process.env.AXPO_TOKEN;\n const token = options.token || envToken;\n\n let config;\n try {\n config = await loadConfig();\n } catch (error) {\n config = {};\n }\n\n let zipFilename = options.zipFilename || config.zipFilename || 'Plugin.zip';\n\n if (!zipFilename.endsWith('.zip')) {\n zipFilename += '.zip';\n }\n\n const zipPath = path.resolve(process.cwd(), zipFilename);\n\n if (!fs.existsSync(zipPath)) {\n console.error(color.red(`✗ Zip file not found: ${zipFilename}`));\n console.log('');\n console.log(color.dim(' Run one of these commands first:'));\n console.log(color.cyan(' • axpo build'));\n //console.log(color.cyan(' • axpo zip'));\n console.log('');\n process.exit(1);\n }\n\n const spinner = createSpinner('Reading plugin.json from zip...').start();\n let pluginJson: PluginJson;\n\n try {\n pluginJson = await readPluginJsonFromZip(zipPath);\n spinner.success({ text: 'Plugin.json loaded from zip' });\n } catch (error: any) {\n spinner.error({ text: 'Failed to read plugin.json from zip' });\n console.log('');\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n console.log(color.dim(' Make sure your zip contains plugin.json in the root'));\n console.log('');\n process.exit(1);\n }\n\n const zipSizeMB = getZipSize(zipPath);\n\n let pluginCheck: PluginCheckResponse;\n try {\n pluginCheck = await checkPluginExists(pluginJson.id);\n } catch (error: any) {\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n process.exit(1);\n }\n\n const isUpdate = pluginCheck.exists;\n\n console.log('');\n console.log(color.dim('Plugin Information (from zip):'));\n console.log(color.dim(`• Name: ${pluginJson.name}`));\n console.log(color.dim(`• ID: ${pluginJson.id}`));\n console.log(color.dim(`• Version: ${pluginJson.version}`));\n console.log(color.dim(`• Author: ${pluginJson.author.name} <${pluginJson.author.email}>`));\n console.log(color.dim(`• Zip: ${zipFilename} (${zipSizeMB} MB)`));\n\n if (isUpdate && pluginCheck.plugin) {\n console.log('');\n console.log(color.yellow('⚠ Plugin already exists in registry'));\n console.log(color.dim(` Current version: ${pluginCheck.plugin.version}`));\n console.log(color.dim(` Downloads: ${pluginCheck.plugin.downloads}`));\n console.log(color.dim(` New version: ${pluginJson.version}`));\n\n if (pluginCheck.plugin.lastUpdated) {\n console.log(color.dim(` Last updated: ${new Date(pluginCheck.plugin.lastUpdated).toLocaleString()}`));\n }\n }\n\n console.log('');\n\n if (!options.force) {\n const confirmMessage = isUpdate\n ? `Update plugin to version ${pluginJson.version}?`\n : `Publish ${pluginJson.name} to Acode registry?`;\n\n const proceed = await confirm({\n message: confirmMessage,\n default: false\n });\n\n if (!proceed) {\n console.log(color.dim('Publish cancelled'));\n console.log('');\n return;\n }\n\n console.log('');\n }\n\n const authToken = await login(token);\n if (!authToken) {\n console.error(color.red('✗ Publish failed: Authentication required'));\n console.log('');\n process.exit(1);\n }\n\n await uploadPlugin(authToken, zipPath, isUpdate, pluginJson, zipSizeMB);\n\n } catch (error: any) {\n console.error(color.red(`✗ ${error.message}`));\n console.log('');\n\n if (process.env.AXPO_DEBUG) {\n console.error(error);\n }\n\n process.exit(1);\n }\n}\n\nexport async function logout(): Promise<void> {\n try {\n const credentialsExist = fs.existsSync(CREDENTIALS_PATH);\n\n if (!credentialsExist) {\n console.log('');\n console.log(color.dim('No saved credentials found'));\n console.log('');\n return;\n }\n\n clearCredentials();\n\n console.log('');\n console.log(color.green('✓ Logged out successfully'));\n console.log(color.dim(' Credentials cleared from ~/.axpo/credentials.json'));\n console.log('');\n\n } catch (error: any) {\n console.error(color.red(`✗ Logout failed: ${error.message}`));\n console.log('');\n process.exit(1);\n }\n}\n","import * as esbuild from 'esbuild';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as readline from 'node:readline';\nimport JSZip from 'jszip';\nimport chokidar from 'chokidar';\nimport color from 'picocolors';\nimport logUpdate from 'log-update';\nimport { createSpinner } from 'nanospinner';\nimport boxen from 'boxen';\nimport { loadConfig, validateConfig, loadPluginJson, getOutDir } from './config.js';\nimport { AxpoDevServer } from './dev-server.js';\nimport { checkAxpoVersion, displayVersionWarning } from './version-check.js';\nimport type { AxpoConfig, BuildCommandOptions, PluginJson } from './types.js';\nimport { CodeAnalyzer } from './analyzer.js';\n\nlet devServerInstance: AxpoDevServer | null = null;\nlet versionCheckDone = false;\nlet logLevelWarningShown = false;\n\nfunction createAxpoTransformPlugin(pluginJson: PluginJson): esbuild.Plugin {\n return {\n name: 'axpo-transform',\n setup(build) {\n build.onLoad({ filter: /src[\\/\\\\]main\\.(ts|js)$/ }, async (args) => {\n let contents = await fs.promises.readFile(args.path, 'utf8');\n const hasExportDefault = /export\\s+default\\s+/.test(contents);\n if (!hasExportDefault) {\n return {\n contents: '',\n errors: [{\n text: `Missing 'export default' in main file`,\n location: { file: args.path, line: 1, column: 0, length: 0, lineText: '' }\n }]\n };\n }\n\n if (!contents.includes('__createAxpoPlugin')) {\n if (contents.includes('from \"@axpo/sdk\"') || contents.includes(\"from '@axpo/sdk'\")) {\n contents = contents.replace(\n /import\\s*{([^}]+)}\\s*from\\s*['\"]@axpo\\/sdk['\"]/,\n (m, imports) => {\n if (!imports.includes('__createAxpoPlugin')) {\n return `import { ${imports.trim()}, __createAxpoPlugin } from '@axpo/sdk'`;\n }\n return m;\n }\n );\n } else {\n contents = `import { __createAxpoPlugin } from '@axpo/sdk';\\n${contents}`;\n }\n }\n\n let transformed = contents;\n const pluginVarName = '__axpoPluginExport';\n\n transformed = transformed.replace(/export\\s+default\\s+/, `const ${pluginVarName} = `);\n transformed += `\\n\\n__createAxpoPlugin('${pluginJson.id}', ${pluginVarName});\\n`;\n\n return {\n contents: transformed,\n loader: args.path.endsWith('.ts') ? 'ts' : 'js'\n };\n });\n }\n };\n}\n\nfunction createPluginMetaPlugin(pluginJson: PluginJson): esbuild.Plugin {\n return {\n name: 'plugin-meta',\n setup(build) {\n build.onResolve({ filter: /^\\.\\.?\\/axpo\\.config(?:\\.ts|\\.js)?$/ }, (args) => {\n return { path: args.path, namespace: 'plugin-meta' };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'plugin-meta' }, () => {\n return {\n contents: `export default ${JSON.stringify({\n plugin: {\n id: pluginJson.id,\n name: pluginJson.name,\n version: pluginJson.version,\n author: pluginJson.author,\n description: pluginJson.description || '',\n icon: pluginJson.icon || 'icon.png',\n license: pluginJson.license || 'MIT'\n }\n }, null, 2)};`,\n loader: 'js'\n };\n });\n }\n };\n}\n\nfunction displayLogLevelWarning(): void {\n const message = [\n color.bold(color.yellow('Configuration Warning')),\n '',\n color.dim('buildOptions.logLevel cannot be changed.'),\n color.dim('It must remain \"silent\" for dev server compatibility.'),\n '',\n color.cyan('Please remove \"logLevel\" from your buildOptions.')\n ].join('\\n');\n\n console.log(boxen(message, {\n title: 'Warning',\n titleAlignment: 'center',\n padding: 1,\n margin: 0,\n borderStyle: 'single',\n borderColor: 'yellow',\n backgroundColor: '#1a1a1a',\n textAlignment: 'center',\n width: (process.stdout.columns || 80) - 4\n }));\n}\n\nasync function showStartupWarnings(config: AxpoConfig): Promise<void> {\n if (versionCheckDone) return;\n\n const versionCheck = await checkAxpoVersion();\n if (versionCheck) displayVersionWarning(versionCheck);\n\n if ('logLevel' in (config.buildOptions || {}) && !logLevelWarningShown) {\n displayLogLevelWarning();\n logLevelWarningShown = true;\n }\n\n versionCheckDone = true;\n}\n\nfunction prepareBuildOptions(\n userOptions: esbuild.BuildOptions,\n pluginJson: PluginJson\n): esbuild.BuildOptions {\n const cleanOptions = { ...userOptions };\n delete cleanOptions.logLevel;\n\n return {\n ...cleanOptions,\n plugins: [\n createAxpoTransformPlugin(pluginJson),\n createPluginMetaPlugin(pluginJson),\n ...(cleanOptions.plugins || [])\n ],\n logLevel: 'silent',\n metafile: true,\n format: cleanOptions.format || 'iife'\n };\n}\n\nfunction getBuildOutputFiles(outDir: string): Array<{ path: string; size: number }> {\n const files: Array<{ path: string; size: number }> = [];\n if (!fs.existsSync(outDir)) return files;\n\n function scanDir(dir: string) {\n fs.readdirSync(dir).forEach(entry => {\n const fullPath = path.join(dir, entry);\n const stat = fs.statSync(fullPath);\n if (stat.isDirectory()) {\n scanDir(fullPath);\n } else {\n files.push({\n path: path.relative(process.cwd(), fullPath),\n size: stat.size\n });\n }\n });\n }\n\n scanDir(outDir);\n return files.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport async function analyze(): Promise<void> {\n const pluginJson = loadPluginJson();\n const analyzer = new CodeAnalyzer('src', pluginJson.minVersionCode);\n\n console.log(color.bold(color.cyan('\\n📊 Analyzing API Usage...\\n')));\n\n const analysis = analyzer.analyzeAPIUsage();\n\n if (analysis.apis.size === 0) {\n console.log(color.dim(' No Acode APIs detected in source code.'));\n console.log('');\n return;\n }\n\n console.log(color.bold('Used APIs:'));\n Array.from(analysis.apis).forEach(api => {\n const requirement = analysis.warnings.find(w => w.api === api);\n if (requirement) {\n const status = requirement.severity === 'error' ? color.red('✗') :\n requirement.severity === 'warn' ? color.yellow('⚠') : color.green('✓');\n console.log(` ${status} ${color.cyan(api)} ${color.dim(`(requires ${requirement.requiredVersion})`)}`);\n } else {\n console.log(` ${color.green('✓')} ${color.cyan(api)} ${color.dim('(no version requirement)')}`);\n }\n });\n\n if (analysis.hasErrors || analysis.hasWarnings) {\n console.log('');\n console.log(color.bold('Recommendations:'));\n const maxRequired = Math.max(...analysis.warnings.map(w => w.requiredVersion));\n\n if (!pluginJson.minVersionCode) {\n console.log(color.yellow(` • Add \"minVersionCode\": ${maxRequired} to plugin.json`));\n } else if (pluginJson.minVersionCode < maxRequired) {\n console.log(color.yellow(` • Update \"minVersionCode\": ${maxRequired} in plugin.json`));\n } else {\n console.log(color.green(` ✓ plugin.json minVersionCode is properly set`));\n }\n }\n\n console.log('');\n}\n\nfunction analyzeAndShowWarnings(pluginJson: PluginJson): void {\n try {\n const analyzer = new CodeAnalyzer('src', pluginJson.minVersionCode);\n const analysis = analyzer.analyzeAPIUsage();\n\n if (analysis.apis.size > 0) {\n console.log(color.cyan('📊 API Usage Analysis:'));\n console.log(color.dim(` Found ${analysis.apis.size} API(s): ${Array.from(analysis.apis).join(', ')}`));\n\n // ✅ ALWAYS show errors if present\n if (analysis.hasErrors) {\n console.log(color.red('\\n❌ Critical Issues:'));\n analysis.warnings.filter(w => w.severity === 'error').forEach(w => {\n console.log(color.red(` • ${w.api} requires versionCode ${w.requiredVersion}, but plugin minVersionCode is ${pluginJson.minVersionCode || 'not set'}`));\n console.log(color.dim(` ${w.file}:${w.line}`));\n });\n }\n\n // ✅ ALWAYS show warnings if present\n if (analysis.hasWarnings) {\n console.log(color.yellow('\\n⚠️ Warnings:'));\n analysis.warnings.filter(w => w.severity === 'warn').forEach(w => {\n console.log(color.yellow(` • ${w.api} requires versionCode ${w.requiredVersion}. Consider adding \"minVersionCode\": ${w.requiredVersion} to plugin.json`));\n console.log(color.dim(` ${w.file}:${w.line}`));\n });\n }\n\n // ✅ NEW: Show recommendations\n if (analysis.hasErrors || analysis.hasWarnings) {\n const maxRequired = Math.max(...analysis.warnings.map(w => w.requiredVersion));\n console.log(color.yellow('\\n💡 Recommendation:'));\n if (!pluginJson.minVersionCode) {\n console.log(color.yellow(` • Add \"minVersionCode\": ${maxRequired} to plugin.json`));\n } else if (pluginJson.minVersionCode < maxRequired) {\n console.log(color.yellow(` • Update \"minVersionCode\" from ${pluginJson.minVersionCode} to ${maxRequired} in plugin.json`));\n }\n }\n\n console.log('');\n }\n } catch (error: any) {\n console.warn(color.yellow('⚠ API analysis warning:'), error.message);\n console.log('');\n }\n}\n\n\nexport async function build(options: BuildCommandOptions = {}): Promise<boolean> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n\n const startTime = Date.now();\n const isStandalone = !devServerInstance;\n\n if (isStandalone) {\n await showStartupWarnings(config);\n analyzeAndShowWarnings(pluginJson);\n }\n\n const spinner = isStandalone ? createSpinner('Building...').start() : null;\n\n const originalStdoutWrite = process.stdout.write.bind(process.stdout);\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n\n try {\n const outDir = getOutDir(config);\n const resolvedOutDir = path.resolve(process.cwd(), outDir);\n\n if (!fs.existsSync(resolvedOutDir)) {\n fs.mkdirSync(resolvedOutDir, { recursive: true });\n }\n\n // Suppress esbuild's direct stdout/stderr output while spinner is active\n // (esbuild prints \"direct eval\" warnings bypassing logLevel: 'silent')\n if (isStandalone) {\n process.stdout.write = () => true;\n process.stderr.write = () => true;\n }\n\n const result = await esbuild.build(prepareBuildOptions(config.buildOptions!, pluginJson));\n\n // Restore stdout/stderr\n if (isStandalone) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n\n if (result.errors.length > 0) {\n const errorMessages = result.errors.map(error => {\n let msg = error.text;\n if (error.location) {\n msg += ` (${error.location.file}:${error.location.line}:${error.location.column})`;\n }\n return msg;\n }).join('\\n');\n\n if (devServerInstance) {\n devServerInstance.setBuildStatus('failed', undefined, errorMessages, result.errors.length);\n\n // Warnings bhi show karo even if build failed\n if (result.warnings.length > 0) {\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n devServerInstance!.addLog('warn', msg);\n });\n }\n } else {\n spinner?.error({ text: `Build failed with ${result.errors.length} error(s)` });\n console.log('');\n result.errors.forEach(error => {\n console.log(color.red(` • ${error.text}`));\n if (error.location) {\n console.log(color.dim(` ${error.location.file}:${error.location.line}:${error.location.column}`));\n }\n });\n\n // Warnings bhi show karo even if build failed\n if (result.warnings.length > 0) {\n console.log('');\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n console.warn(color.yellow(` ⚠ ${msg}`));\n });\n }\n\n console.log('');\n }\n return false;\n }\n\n if (devServerInstance) {\n try {\n const analysis = new CodeAnalyzer('src', pluginJson.minVersionCode).analyzeAPIUsage();\n devServerInstance.analyzeAndReportAPIs({\n warnings: analysis.warnings,\n apis: analysis.apis,\n hasErrors: analysis.hasErrors,\n hasWarnings: analysis.hasWarnings\n });\n } catch (error: any) {\n devServerInstance.addLog('warn', `API analyzer error: ${error.message}`);\n }\n }\n\n const duration = Date.now() - startTime;\n\n if (devServerInstance) {\n devServerInstance.setBuildStatus('success', duration);\n\n // Show warnings in dev server log after build success\n if (result.warnings.length > 0) {\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n devServerInstance!.addLog('warn', msg);\n });\n }\n } else {\n spinner?.success({ text: `Build complete in ${duration}ms` });\n getBuildOutputFiles(resolvedOutDir).forEach(file => {\n console.log(color.dim(` ${file.path} (${(file.size / 1024).toFixed(2)} KB)`));\n });\n\n // Show warnings after spinner + file list — clean, no glitch\n if (result.warnings.length > 0) {\n console.log('');\n result.warnings.forEach(warning => {\n const msg = warning.location\n ? `${warning.text} (${warning.location.file}:${warning.location.line})`\n : warning.text;\n console.warn(color.yellow(` ⚠ ${msg}`));\n });\n }\n\n console.log('');\n }\n\n if (options.zip) await createZip(options.zipFilename);\n return true;\n\n } catch (error: any) {\n // Safety: restore stdout/stderr if esbuild threw before restore point\n if (isStandalone && process.stdout.write !== originalStdoutWrite) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n\n const errorMsg = error.message || String(error);\n devServerInstance\n ? devServerInstance.setBuildStatus('failed', undefined, errorMsg, 1)\n : spinner?.error({ text: `Build failed: ${errorMsg}` });\n if (!devServerInstance) console.log('');\n return false;\n }\n}\n\nexport async function dev(): Promise<void> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n await showStartupWarnings(config);\n\n const devConfig = config.dev || {};\n const port = devConfig.port || 3000;\n\n const devServer = new AxpoDevServer({ port, config, pluginJson });\n devServerInstance = devServer;\n\n let isShuttingDown = false;\n const gracefulShutdown = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n logUpdate.done();\n\n console.log('');\n const spinner = createSpinner('Stopping dev server...').start();\n try {\n if (watcher) await watcher.close();\n await devServer.stop();\n spinner.success({ text: 'Server stopped successfully' });\n } catch (error) {\n spinner.error({ text: 'Error stopping server' });\n }\n console.log('');\n process.exit(0);\n };\n\n let watcher: chokidar.FSWatcher | null = null;\n\n process.on('SIGINT', gracefulShutdown);\n process.on('SIGTERM', gracefulShutdown);\n\n await devServer.start();\n devServer.setBuildStatus('building');\n await build();\n\n //if (devConfig.hotReload !== false) {\n watcher = chokidar.watch([\n 'src/**/*',\n 'axpo.config.{ts,mjs,js,cjs}', // ✅ Support all config formats\n 'plugin.json'\n ], {\n ignored: [/(^|[\\/\\\\])\\../, '**/node_modules/**', '**/build/**', '**/*.zip'],\n persistent: true,\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 100, pollInterval: 50 }\n });\n\n let isBuilding = false;\n let buildQueued = false;\n let debounceTimer: NodeJS.Timeout | null = null;\n\n const doBuild = async () => {\n if (isBuilding) {\n buildQueued = true;\n return;\n }\n isBuilding = true;\n try {\n devServer.setBuildStatus('building');\n if (await build()) devServer.notifyReload();\n } catch (error) { }\n isBuilding = false;\n if (buildQueued) {\n buildQueued = false;\n setTimeout(doBuild, 100);\n }\n };\n\n const handleFileChange = () => {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doBuild, 50);\n };\n\n watcher.on('change', handleFileChange);\n watcher.on('add', handleFileChange);\n watcher.on('unlink', handleFileChange);\n\n setupKeyboardHandler(devServer, gracefulShutdown);\n process.stdin.resume();\n // }\n}\n\nfunction setupKeyboardHandler(devServer: AxpoDevServer, gracefulShutdown: () => Promise<void>): void {\n if (process.stdin.isTTY) {\n readline.emitKeypressEvents(process.stdin);\n process.stdin.setRawMode(true);\n }\n\n process.stdin.on('keypress', async (str, key) => {\n if (!key) return;\n if (key.ctrl && key.name === 'c') return await gracefulShutdown();\n\n switch (key.name) {\n case 'r': devServer.addLog('info', 'Manual reload'); devServer.notifyReload(); break;\n case 'c': devServer.clearLogs(); break;\n case 'q': await gracefulShutdown(); break;\n case 'up': devServer.scrollUp(); break;\n case 'down': devServer.scrollDown(); break;\n case 'home': devServer.scrollToTop(); break;\n case 'end': devServer.scrollToBottom(); break;\n }\n });\n}\n\nexport async function createZip(commandZipFilename?: string): Promise<void> {\n const config = await loadConfig();\n const pluginJson = loadPluginJson();\n validateConfig(config, pluginJson);\n\n let zipFilename = (commandZipFilename || config.zipFilename || 'Plugin.zip');\n if (!zipFilename.endsWith('.zip')) zipFilename += '.zip';\n\n const spinner = createSpinner(`Creating ${zipFilename}...`).start();\n const startTime = Date.now();\n\n try {\n const zip = new JSZip();\n const buildDir = getOutDir(config);\n\n if (!fs.existsSync(buildDir)) {\n spinner.error({ text: `Build folder not found: ${buildDir}` });\n console.log('');\n throw new Error(`Build folder not found: ${buildDir}\\nRun \"axpo build\" first.`);\n }\n\n let filesAdded = 0;\n zip.file('plugin.json', JSON.stringify(pluginJson, null, 2));\n filesAdded++;\n\n const addFolder = (folderPath: string, zipRoot: string = '') => {\n if (!fs.existsSync(folderPath)) return;\n fs.readdirSync(folderPath).forEach(file => {\n const filePath = path.join(folderPath, file);\n try {\n const stat = fs.statSync(filePath);\n if (stat.isDirectory()) {\n const newZipPath = zipRoot ? path.join(zipRoot, file) : file;\n zip.folder(newZipPath);\n addFolder(filePath, newZipPath);\n } else if (stat.isFile()) {\n zip.file(zipRoot ? path.join(zipRoot, file) : file, fs.readFileSync(filePath));\n filesAdded++;\n }\n } catch (error) { }\n });\n };\n\n addFolder(buildDir);\n\n const allFiles = new Set<string>();\n config.files?.forEach((f: string) => allFiles.add(f));\n pluginJson.files?.forEach((f: string) => allFiles.add(f));\n\n allFiles.forEach(file => {\n const filePath = path.resolve(process.cwd(), file);\n if (fs.existsSync(filePath)) {\n const stat = fs.statSync(filePath);\n if (stat.isFile()) {\n zip.file(file, fs.readFileSync(filePath));\n filesAdded++;\n } else if (stat.isDirectory()) {\n addFolder(filePath, file);\n }\n }\n });\n\n const content = await zip.generateAsync({\n type: 'nodebuffer',\n compression: 'DEFLATE',\n compressionOptions: { level: 9 }\n });\n\n fs.writeFileSync(zipFilename, content);\n\n const duration = Date.now() - startTime;\n const sizeKB = (fs.statSync(zipFilename).size / 1024).toFixed(2);\n\n spinner.success({ text: `${zipFilename} created in ${duration}ms (${sizeKB} KB, ${filesAdded} files)` });\n console.log('');\n\n if (devServerInstance) {\n devServerInstance.addLog('info', `${zipFilename} created in ${duration}ms (${sizeKB} KB, ${filesAdded} files)`);\n }\n\n } catch (error: any) {\n if (!error.message?.includes('Build folder not found')) {\n spinner.error({ text: `Zip creation failed: ${error.message}` });\n console.log('');\n }\n if (devServerInstance) {\n devServerInstance.addLog('error', `Zip creation failed: ${error.message}`);\n }\n }\n}\n\nexport async function clean(): Promise<void> {\n const spinner = createSpinner('Cleaning build artifacts...').start();\n\n try {\n const config = await loadConfig();\n const buildDir = getOutDir(config);\n const itemsToClean: string[] = [];\n\n if (fs.existsSync(buildDir)) {\n fs.rmSync(buildDir, { recursive: true, force: true });\n itemsToClean.push(buildDir);\n }\n\n let zipFilename = config.zipFilename || 'Plugin.zip';\n if (!zipFilename.endsWith('.zip')) zipFilename += '.zip';\n\n if (fs.existsSync(zipFilename)) {\n fs.unlinkSync(zipFilename);\n itemsToClean.push(zipFilename);\n }\n\n if (zipFilename !== 'Plugin.zip' && fs.existsSync('Plugin.zip')) {\n fs.unlinkSync('Plugin.zip');\n itemsToClean.push('Plugin.zip');\n }\n\n spinner.success({\n text: itemsToClean.length > 0\n ? `Clean complete - Removed: ${itemsToClean.join(', ')}`\n : 'Already clean'\n });\n console.log('');\n\n } catch (error: any) {\n spinner.error({ text: `Clean failed: ${error.message}` });\n console.log('');\n process.exit(1);\n }\n}\n\nexport { publish, logout } from './publish.js';\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { execSync, spawn } from 'node:child_process';\nimport { input, select, confirm } from '@inquirer/prompts';\nimport color from 'picocolors';\nimport { createSpinner } from 'nanospinner';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst TEMPLATES_DIR = path.resolve(__dirname, '../templates');\n\ninterface InitOptions {\n name?: string;\n yes?: boolean;\n current?: boolean;\n}\n\nconst PM_INSTALL_CMD: Record<string, string[]> = {\n npm: ['install'],\n yarn: [],\n pnpm: ['install'],\n bun: ['install'],\n};\n\n// Check if running in Termux\nfunction isTermux(): boolean {\n return (\n process.env.TERMUX_VERSION !== undefined ||\n fs.existsSync('/data/data/com.termux') ||\n process.env.PREFIX?.includes('com.termux') === true\n );\n}\n\n// Get user info from git config\nfunction getGitUserInfo(): { name: string; email: string } {\n try {\n const name = execSync('git config user.name', { encoding: 'utf-8' }).trim();\n const email = execSync('git config user.email', { encoding: 'utf-8' }).trim();\n return { name, email };\n } catch {\n return { name: '', email: '' };\n }\n}\n\n// Detect available package managers\nfunction detectPackageManagers(): string[] {\n const managers = ['npm', 'yarn', 'pnpm', 'bun'];\n return managers.filter((mgr) => {\n try {\n execSync(`${mgr} --version`, { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n });\n}\n\n// Run command silently\nfunction runCommand(cmd: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd,\n stdio: 'ignore',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) resolve();\n else reject(new Error(`Command failed: ${cmd} ${args.join(' ')}`));\n });\n });\n}\n\n// Copy directory recursively\nfunction copyDirectory(src: string, dest: string): void {\n if (!fs.existsSync(dest)) {\n fs.mkdirSync(dest, { recursive: true });\n }\n\n const entries = fs.readdirSync(src, { withFileTypes: true });\n \n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n \n if (entry.isDirectory()) {\n copyDirectory(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n// Get current date in DD/MM/YYYY format\nfunction getCurrentDate(): string {\n const now = new Date();\n const day = String(now.getDate()).padStart(2, '0');\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const year = now.getFullYear();\n return `${day}/${month}/${year}`;\n}\n\n// Replace placeholders in files\nfunction replacePlaceholders(dir: string, data: Record<string, string>): void {\n const walk = (currentDir: string) => {\n for (const file of fs.readdirSync(currentDir)) {\n const fullPath = path.join(currentDir, file);\n \n if (fs.statSync(fullPath).isDirectory()) {\n walk(fullPath);\n } else {\n // Only process text files\n if (/\\.(ts|js|json|md|html|xml|css|txt)$/.test(file)) {\n let content = fs.readFileSync(fullPath, 'utf8');\n \n // Replace all placeholders\n content = content\n .replace(/\\{\\{projectName\\}\\}/g, data.projectName)\n .replace(/\\{\\{pluginId\\}\\}/g, data.pluginId)\n .replace(/\\{\\{pluginName\\}\\}/g, data.pluginName)\n .replace(/\\{\\{description\\}\\}/g, data.description)\n .replace(/\\{\\{authorName\\}\\}/g, data.authorName)\n .replace(/\\{\\{email\\}\\}/g, data.email)\n .replace(/\\{\\{github\\}\\}/g, data.github || '')\n .replace(/\\{\\{date\\}\\}/g, data.date);\n\n // Handle conditional github\n if (data.github) {\n content = content.replace(/\\{\\{#if github\\}\\}(.*?)\\{\\{\\/if\\}\\}/gs, '$1');\n } else {\n content = content.replace(/\\{\\{#if github\\}\\}.*?\\{\\{\\/if\\}\\}/gs, '');\n }\n\n fs.writeFileSync(fullPath, content, 'utf8');\n }\n }\n }\n };\n\n walk(dir);\n}\n\n// Install Axpo Dev plugin in Acode via intent\nasync function promptAxpoDevInstallation(): Promise<void> {\n try {\n console.log('');\n console.log(color.bold(color.cyan('🔌 Axpo Dev Plugin')));\n console.log(color.dim('To test your plugin during development, you need the'));\n console.log(color.dim('\"Axpo Dev\" plugin installed in Acode.'));\n console.log('');\n \n const install = await confirm({\n message: 'Would you like to install Axpo Dev plugin in Acode now?',\n default: true\n });\n \n if (install) {\n console.log('');\n console.log(color.cyan('📱 Opening Acode to install Axpo Dev plugin...'));\n \n execSync('am start -a android.intent.action.VIEW -d \"acode://plugin/install/axpo.dev\"', {\n stdio: 'ignore'\n });\n \n console.log(color.green('✓ Plugin installation started in Acode'));\n console.log(color.dim(' Please complete the installation in Acode app'));\n console.log('');\n } else {\n console.log('');\n console.log(color.dim(' You can install it later from:'));\n console.log(color.cyan(' • Acode → Plugins → Search \"Axpo Dev\"'));\n console.log('');\n }\n } catch (error) {\n // Silent fail\n }\n}\n\n// Install dependencies with package manager selection\nasync function handleDependencyInstallation(projectDir: string): Promise<string> {\n const managers = detectPackageManagers();\n\n if (!managers.includes('npm')) {\n console.error(color.red('❌ npm is required but not found on your system.'));\n process.exit(1);\n }\n\n let selectedManager = 'npm';\n\n // If multiple package managers available, let user choose\n if (managers.length > 1) {\n selectedManager = await select({\n message: 'Choose a package manager:',\n choices: managers.map((manager) => ({\n name: manager,\n value: manager,\n })),\n });\n } else {\n console.log(color.gray(`Using ${selectedManager} to install dependencies...`));\n }\n\n const spinner = createSpinner(`Installing dependencies with ${selectedManager}...`).start();\n\n try {\n // Add .cmd for Windows compatibility\n const isWindows = process.platform === 'win32';\n const command = isWindows ? `${selectedManager}.cmd` : selectedManager;\n \n await runCommand(command, PM_INSTALL_CMD[selectedManager], projectDir);\n spinner.success({ text: `Dependencies installed via ${selectedManager}` });\n return selectedManager;\n } catch (err) {\n spinner.error({ text: 'Installation failed. Please try manually.' });\n if (err instanceof Error) {\n console.error(color.dim(err.message));\n }\n return selectedManager;\n }\n}\n\n// Main init function\nexport async function init(options: InitOptions = {}): Promise<void> {\n try {\n console.log(color.bold(color.cyan('\\n🚀 Create Acode Plugin\\n')));\n\n // Check if templates directory exists\n if (!fs.existsSync(TEMPLATES_DIR)) {\n throw new Error(\n 'Templates directory not found. Please ensure axpo is installed correctly.\\n' +\n `Expected: ${TEMPLATES_DIR}`\n );\n }\n\n const gitInfo = getGitUserInfo();\n let projectName = options.name || 'my-acode-plugin';\n let targetPath: string;\n\n // Handle init in current directory\n if (options.current) {\n projectName = path.basename(process.cwd());\n targetPath = process.cwd();\n \n // Check if directory is not empty (ignore hidden files)\n const files = fs.readdirSync(targetPath).filter(file => !file.startsWith('.'));\n if (files.length > 0 && !options.yes) {\n const proceed = await confirm({\n message: 'Current directory is not empty. Continue anyway?',\n default: false\n });\n \n if (!proceed) {\n console.log(color.dim('Cancelled.'));\n return;\n }\n }\n } else {\n targetPath = path.resolve(process.cwd(), projectName);\n }\n\n // Prompt for project details (skip if --yes flag)\n let pluginName = 'My Plugin';\n let pluginId = 'com.example.plugin';\n let description = 'My awesome Acode plugin';\n let authorName = gitInfo.name || 'Your Name';\n let email = gitInfo.email || 'your@email.com';\n let github = '';\n let template: 'typescript' | 'javascript' = 'typescript';\n\n if (!options.yes) {\n if (!options.current && !options.name) {\n projectName = await input({\n message: 'Project name (folder name):',\n default: 'my-acode-plugin',\n validate: (input) => {\n if (!input.trim()) return 'Project name is required';\n \n const targetDir = path.resolve(process.cwd(), input);\n const exists = fs.existsSync(targetDir);\n \n if (exists) {\n return `Directory \"${input}\" already exists. Please choose a different name.`;\n }\n \n return true;\n }\n });\n targetPath = path.resolve(process.cwd(), projectName);\n }\n\n // Plugin name input (display name)\n pluginName = await input({\n message: 'Plugin name (display name):',\n default: 'My Plugin',\n validate: (input) => {\n if (!input.trim()) return 'Plugin name is required';\n return true;\n }\n });\n\n // Plugin ID input with validation\n pluginId = await input({\n message: 'Plugin ID:',\n default: 'com.example.plugin',\n validate: async (input) => {\n if (!input) return \"Plugin ID cannot be empty.\";\n\n const valid = /^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)+$/i.test(input);\n if (!valid) return \"Invalid format. Use format like com.example.plugin.\";\n\n try {\n const res = await fetch(`https://acode.app/api/plugin/${input}`);\n \n // Check if response is HTML (404 page) - means plugin not found (available)\n const contentType = res.headers.get('content-type');\n if (contentType && contentType.includes('text/html')) {\n return true; // Plugin ID available\n }\n\n // Try to parse JSON response\n const data = await res.json() as { error?: string; id?: string; author?: string; name?: string };\n\n // If error message says \"Not found\", plugin is available\n if (!res.ok && data.error === \"Not found\") return true;\n \n // If data has id, plugin already exists\n if (data && data.id) {\n return `Plugin ID already used by ${color.cyan(color.bold(data.author))} in ${color.cyan(color.bold(data.name))} plugin`;\n }\n \n return true;\n } catch (error) {\n // Network error or API unavailable - warn but allow to continue\n console.log(color.yellow('\\n⚠ Could not verify plugin ID availability (network error)'));\n console.log(color.dim('Continuing without validation...\\n'));\n return true;\n }\n }\n });\n\n description = await input({\n message: 'Description:',\n default: 'My awesome Acode plugin'\n });\n\n authorName = await input({\n message: 'Author name:',\n default: gitInfo.name || 'Your Name',\n validate: (input) => input.trim() ? true : 'Author name is required'\n });\n\n email = await input({\n message: 'Author email:',\n default: gitInfo.email || 'your@email.com',\n validate: (input) => {\n if (!input.trim()) return 'Email is required';\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input)) {\n return 'Please enter a valid email address';\n }\n return true;\n }\n });\n\n // GitHub username input with validation\n github = await input({\n message: 'GitHub username (optional):',\n default: '',\n validate: async (input) => {\n // Empty is allowed (optional field)\n if (!input || !input.trim()) return true;\n\n // Check GitHub username format\n if (!/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i.test(input)) {\n return 'Invalid GitHub username format';\n }\n\n try {\n const res = await fetch(`https://api.github.com/users/${input}`);\n \n if (!res.ok) {\n if (res.status === 404) {\n return `GitHub user ${color.red(color.bold(input))} not found`;\n }\n return `Error checking GitHub username: ${res.statusText}`;\n }\n\n const data = await res.json() as { login?: string; name?: string };\n \n if (data && data.login) {\n return true;\n }\n\n return 'Could not verify GitHub username';\n } catch (error) {\n // Network error - warn but allow to continue\n console.log(color.yellow('\\n⚠ Could not verify GitHub username (network error)'));\n console.log(color.dim('Continuing without validation...\\n'));\n return true;\n }\n }\n });\n\n template = await select({\n message: 'Choose a template:',\n choices: [\n { name: 'TypeScript (Recommended)', value: 'typescript' as const },\n { name: 'JavaScript', value: 'javascript' as const }\n ],\n default: 'typescript' as const\n });\n }\n\n // Create project from template\n const templatePath = path.join(TEMPLATES_DIR, template);\n\n if (!fs.existsSync(templatePath)) {\n throw new Error(`Template not found: ${template}`);\n }\n\n // Final check for --name or --yes flag cases (where user didn't get prompted)\n if (fs.existsSync(targetPath) && !options.current && (options.name || options.yes)) {\n throw new Error(`Directory \"${projectName}\" already exists. Please choose a different name or remove the existing directory.`);\n }\n\n const spinner = createSpinner('Creating project files...').start();\n\n try {\n // Copy template\n if (!fs.existsSync(targetPath)) {\n fs.mkdirSync(targetPath, { recursive: true });\n }\n \n copyDirectory(templatePath, targetPath);\n\n // Replace placeholders\n replacePlaceholders(targetPath, {\n projectName,\n pluginName,\n pluginId,\n description,\n authorName,\n email,\n github,\n date: getCurrentDate()\n });\n\n spinner.success({ text: 'Project files created' });\n } catch (err) {\n spinner.error({ text: 'Failed to create project files' });\n throw err;\n }\n\n // Ask about dependency installation\n let shouldInstall = options.yes;\n let packageManager = 'npm';\n \n if (!options.yes) {\n shouldInstall = await confirm({\n message: 'Install dependencies now?',\n default: true\n });\n }\n\n if (shouldInstall) {\n packageManager = await handleDependencyInstallation(targetPath);\n }\n\n // Success message\n console.log('');\n console.log(color.green('✓ Plugin project created successfully!'));\n console.log('');\n console.log(color.bold('Next steps:'));\n \n if (!options.current) {\n console.log(color.cyan(` cd ${projectName}`));\n }\n \n // Show install step only if dependencies were not installed\n if (!shouldInstall) {\n console.log(color.cyan(` ${packageManager} install`) + color.dim(' # Install dependencies'));\n }\n \n // Get run command based on package manager\n const runCmd = packageManager === 'npm' ? 'npm run' : packageManager;\n \n console.log(color.cyan(` ${runCmd} dev`) + color.dim(' # Start development server'));\n console.log(color.cyan(` ${runCmd} build`) + color.dim(' # Build for production'));\n console.log('');\n console.log(color.dim('Then scan the QR code with Axpo Dev plugin in Acode'));\n console.log('');\n\n // Prompt for Axpo Dev installation if in Termux\n if (isTermux()) {\n await promptAxpoDevInstallation();\n }\n\n } catch (error: any) {\n if (error.name === 'ExitPromptError') {\n console.log('');\n console.log(color.bold(color.red('✖ Operation cancelled.')));\n console.log('');\n process.exit(0);\n }\n \n console.error(color.red(`\\n✗ ${error.message}\\n`));\n process.exit(1);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axpo/cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "CLI & build tool for Acode plugin development",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -27,7 +27,15 @@
27
27
  "prepublishOnly": "npm run build",
28
28
  "postinstall": ""
29
29
  },
30
- "keywords": ["acode", "plugin", "cli", "build-tool", "axpo", "esbuild", "hot-reload"],
30
+ "keywords": [
31
+ "acode",
32
+ "plugin",
33
+ "cli",
34
+ "build-tool",
35
+ "axpo",
36
+ "esbuild",
37
+ "hot-reload"
38
+ ],
31
39
  "author": "Goutam Kumar <contact@goutam.is-a.dev>",
32
40
  "license": "MIT",
33
41
  "repository": {
@@ -1,28 +1,10 @@
1
1
  # {{pluginName}}
2
2
 
3
- {{description}}
4
-
5
- ## Features
6
-
7
- - Feature 1
8
- - Feature 2
9
- - Feature 3
10
-
11
- ## Installation
12
-
13
- 1. Open Acode app
14
- 2. Go to Plugins
15
- 3. Search for "{{pluginName}}"
16
- 4. Install the plugin
3
+ > {{description}}
17
4
 
18
5
  ## Usage
19
6
 
20
- Describe how to use your plugin here.
21
-
22
- ## Settings
23
-
24
- - **Example Setting**: Configure example setting
25
- - **Enable Feature**: Toggle feature on/off
7
+ <!-- Describe how to use your plugin here -->
26
8
 
27
9
  ## Development
28
10
 
@@ -30,21 +12,15 @@ Describe how to use your plugin here.
30
12
  # Install dependencies
31
13
  npm install
32
14
 
33
- # Start development server
15
+ # Start dev server with hot reload
34
16
  npm run dev
35
17
 
36
18
  # Build for production
37
19
  npm run build
38
-
39
- # Create plugin package
40
- npm run zip
41
20
  ```
42
21
 
43
- ## License
22
+ Requires [Axpo](https://npmjs.com/package/@axpo/cli) and [Axpo Dev](https://acode.app/plugin/axpo.dev) plugin in Acode for hot reload during development.
44
23
 
45
- MIT
46
-
47
- ## Author
24
+ ## License
48
25
 
49
- {{authorName}} <{{email}}>{{#if github}}
50
- GitHub: [@{{github}}](https://github.com/{{github}}){{/if}}
26
+ MIT — Made by [{{authorName}}]({{#if github}}https://github.com/{{github}}{{/if}})
@@ -1,28 +1,10 @@
1
1
  # {{pluginName}}
2
2
 
3
- {{description}}
4
-
5
- ## Features
6
-
7
- - Feature 1
8
- - Feature 2
9
- - Feature 3
10
-
11
- ## Installation
12
-
13
- 1. Open Acode app
14
- 2. Go to Plugins
15
- 3. Search for "{{pluginName}}"
16
- 4. Install the plugin
3
+ > {{description}}
17
4
 
18
5
  ## Usage
19
6
 
20
- Describe how to use your plugin here.
21
-
22
- ## Settings
23
-
24
- - **Example Setting**: Configure example setting
25
- - **Enable Feature**: Toggle feature on/off
7
+ <!-- Describe how to use your plugin here -->
26
8
 
27
9
  ## Development
28
10
 
@@ -30,21 +12,15 @@ Describe how to use your plugin here.
30
12
  # Install dependencies
31
13
  npm install
32
14
 
33
- # Start development server
15
+ # Start dev server with hot reload
34
16
  npm run dev
35
17
 
36
18
  # Build for production
37
19
  npm run build
38
-
39
- # Create plugin package
40
- npm run zip
41
20
  ```
42
21
 
43
- ## License
22
+ Requires [Axpo](https://npmjs.com/package/@axpo/cli) and [Axpo Dev](https://acode.app/plugin/axpo.dev) plugin in Acode for hot reload during development.
44
23
 
45
- MIT
46
-
47
- ## Author
24
+ ## License
48
25
 
49
- {{authorName}} <{{email}}>{{#if github}}
50
- GitHub: [@{{github}}](https://github.com/{{github}}){{/if}}
26
+ MIT — Made by [{{authorName}}]({{#if github}}https://github.com/{{github}}{{/if}})