@adhdev/daemon-standalone 0.5.20 → 0.5.23

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/dist/index.js CHANGED
@@ -54,7 +54,19 @@ var StandaloneServer = class {
54
54
  }
55
55
  },
56
56
  onStatusChange: () => this.broadcastStatus(),
57
- onStreamsUpdated: (_ideType, _streams) => {
57
+ onStreamsUpdated: (ideType, streams) => {
58
+ const ideInstance = this.components?.instanceManager?.getInstance(`ide:${ideType}`);
59
+ if (ideInstance?.onEvent) {
60
+ for (const stream of streams) {
61
+ ideInstance.onEvent("stream_update", {
62
+ extensionType: stream.agentType,
63
+ streams: [stream],
64
+ messages: stream.messages || [],
65
+ status: stream.status || "idle",
66
+ activeModal: stream.activeModal || null
67
+ });
68
+ }
69
+ }
58
70
  this.broadcastStatus();
59
71
  },
60
72
  tickIntervalMs: 3e3,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * daemon-standalone — Embedded HTTP/WS server for local dashboard\n *\n * Standalone-only server:\n * 1. DaemonCore init (IDE detection, CDP connection, Provider loading)\n * 2. HTTP REST API — /api/v1/status, /api/v1/command, /api/v1/ides, /api/v1/clis, /api/v1/agents\n * 3. WebSocket — ws://localhost:3847/ws (real-time status broadcast + command execution)\n * 4. Static file serving — web-standalone build output\n *\n * Usage:\n * npx @adhdev/daemon-standalone\n * npx @adhdev/daemon-standalone --port 4000\n */\n\nimport { createServer, type IncomingMessage } from 'http';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as crypto from 'crypto';\n\nimport {\n DevServer,\n LOG,\n initDaemonComponents,\n shutdownDaemonComponents,\n loadConfig,\n getWorkspaceState,\n getHostMemorySnapshot,\n getWorkspaceActivity,\n buildManagedIdes,\n hasCdpManager,\n isCdpConnected,\n type DaemonComponents,\n type StatusResponse,\n type AgentEntry,\n} from '@adhdev/daemon-core';\nimport type { ManagedIdeEntry, ManagedCliEntry, ManagedAcpEntry } from '@adhdev/daemon-core';\n\n// ─── Constants ───\nconst DEFAULT_PORT = 3847;\nconst STATUS_INTERVAL = 2000;\n\n// ─── Types ───\ninterface StandaloneOptions {\n port?: number;\n host?: string;\n publicDir?: string;\n open?: boolean;\n token?: string;\n dev?: boolean;\n}\n\ninterface WsMessage {\n type: string;\n requestId?: string;\n data?: Record<string, any>;\n}\n\n\n// ─── Standalone Server ───\n\nclass StandaloneServer {\n private httpServer: ReturnType<typeof createServer> | null = null;\n private wss: WebSocketServer | null = null;\n private clients = new Set<WebSocket>();\n private authToken: string | null = null;\n private statusTimer: NodeJS.Timeout | null = null;\n private running = false;\n private components: DaemonComponents | null = null;\n private devServer: DevServer | null = null;\n\n async start(options: StandaloneOptions = {}): Promise<void> {\n const port = options.port || DEFAULT_PORT;\n const host = options.host || '127.0.0.1';\n\n // Auth token setup (opt-in only)\n this.authToken = options.token || process.env.ADHDEV_TOKEN || null;\n\n // Initialize all core components via daemon-core bootstrapper\n this.components = await initDaemonComponents({\n cliManagerDeps: {\n getServerConn: () => null,\n getP2p: () => null,\n onStatusChange: () => this.broadcastStatus(),\n removeAgentTracking: () => {},\n },\n onStatusChange: () => this.broadcastStatus(),\n onStreamsUpdated: (_ideType: string, _streams: any[]) => {\n this.broadcastStatus();\n },\n tickIntervalMs: 3000,\n cdpScanIntervalMs: 15_000,\n });\n\n // DevServer (optional)\n if (options.dev) {\n this.devServer = new DevServer({\n providerLoader: this.components.providerLoader,\n cdpManagers: this.components.cdpManagers,\n logFn: (msg: string) => console.log(msg),\n });\n await this.devServer.start();\n }\n\n // 5. HTTP Server\n this.httpServer = createServer((req, res) => {\n this.handleHttp(req, res, options.publicDir);\n });\n\n // 6. WebSocket Server (upgrade)\n this.wss = new WebSocketServer({ noServer: true });\n this.httpServer.on('upgrade', (req, socket, head) => {\n const wsUrl = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n if (wsUrl.pathname === '/ws') {\n // Token auth for WS\n if (this.authToken) {\n const urlToken = wsUrl.searchParams.get('token');\n if (urlToken !== this.authToken) {\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n }\n this.wss!.handleUpgrade(req, socket, head, (ws) => {\n this.handleWsConnection(ws);\n });\n } else {\n socket.destroy();\n }\n });\n\n // 7. Status broadcast timer\n this.statusTimer = setInterval(() => {\n this.broadcastStatus();\n }, STATUS_INTERVAL);\n\n // 8. Start listening\n this.running = true;\n await new Promise<void>((resolve) => {\n this.httpServer!.listen(port, host, () => {\n resolve();\n });\n });\n\n console.log('');\n console.log('🚀 ADHDev Standalone Server');\n console.log(` http://${host === '0.0.0.0' ? 'localhost' : host}:${port}`);\n console.log(` ws://${host === '0.0.0.0' ? 'localhost' : host}:${port}/ws`);\n if (host === '0.0.0.0') {\n const lanIps = this.getLanIPs();\n for (const ip of lanIps) {\n console.log(` http://${ip}:${port} (LAN)`);\n }\n }\n if (this.authToken) {\n console.log(` 🔑 Token: ${this.authToken}`);\n }\n console.log('');\n\n const cdpCount = [...this.components.cdpManagers.values()].filter(m => m.isConnected).length;\n console.log(` CDP: ${cdpCount > 0 ? `✅ ${cdpCount} connected` : '❌ none'}`);\n console.log(` Providers: ${this.components.providerLoader.getAll().length} loaded`);\n if (options.dev) {\n console.log(` 🛠️ DevConsole: http://127.0.0.1:19280`);\n }\n console.log('');\n console.log(' Press Ctrl+C to stop.');\n console.log('');\n\n // Open browser\n if (options.open !== false) {\n try {\n const open = (await import('open')).default;\n await open(`http://localhost:${port}`);\n } catch { /* noop */ }\n }\n\n // Signal handling\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n // ─── HTTP Handler ───\n\n private handleHttp(\n req: IncomingMessage,\n res: import('http').ServerResponse,\n publicDir?: string\n ): void {\n const url = req.url || '/';\n const method = req.method || 'GET';\n\n // CORS\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n if (method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n // Token auth for API routes\n if (this.authToken && url.startsWith('/api/')) {\n const authHeader = req.headers['authorization'];\n const bearerToken = authHeader?.startsWith('Bearer ') ? authHeader.slice(7) : null;\n const queryToken = new URL(url, `http://${req.headers.host || 'localhost'}`).searchParams.get('token');\n if (bearerToken !== this.authToken && queryToken !== this.authToken) {\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Unauthorized. Provide token via Authorization header or ?token= query.' }));\n return;\n }\n }\n\n // ─── API Routes (v1) ───\n const apiPath = url.startsWith('/api/v1/') ? url.slice(7) : null; // /api/v1/status → /status\n\n if (apiPath === '/status' && method === 'GET') {\n const status = this.getStatus();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(status));\n return;\n }\n\n if (apiPath === '/ides' && method === 'GET') {\n const ides = this.getIdes();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ides }));\n return;\n }\n\n if (apiPath === '/clis' && method === 'GET') {\n const clis = this.getClis();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ clis }));\n return;\n }\n\n if (apiPath === '/agents' && method === 'GET') {\n const ides = this.getIdes();\n const agents: AgentEntry[] = [];\n for (const ide of ides) {\n // IDE native chat\n if (ide.activeChat) {\n agents.push({\n ideId: ide.instanceId,\n type: ide.ideType,\n name: ide.ideType,\n status: ide.activeChat.status || 'idle',\n source: 'native',\n });\n }\n // Extension agent streams\n for (const stream of (ide.agentStreams || [])) {\n agents.push({\n ideId: ide.instanceId,\n type: stream.agentType,\n name: stream.agentName,\n status: stream.status || 'idle',\n source: 'extension',\n });\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ agents }));\n return;\n }\n\n if (apiPath === '/command' && method === 'POST') {\n let body = '';\n req.on('data', (chunk) => { body += chunk; });\n req.on('end', async () => {\n try {\n const { type, payload, target } = JSON.parse(body);\n const args = { ...payload, _targetInstance: target };\n const result = await this.executeCommand(type, args);\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(result));\n } catch (e: any) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ success: false, error: e.message }));\n }\n });\n return;\n }\n\n // ─── Static Files ───\n if (publicDir) {\n const filePath = url === '/' ? '/index.html' : url;\n const fullPath = path.join(publicDir, filePath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n const ext = path.extname(fullPath);\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff2': 'font/woff2',\n };\n res.writeHead(200, { 'Content-Type': mimeTypes[ext] || 'application/octet-stream' });\n fs.createReadStream(fullPath).pipe(res);\n return;\n }\n // SPA fallback → index.html\n const indexPath = path.join(publicDir, 'index.html');\n if (fs.existsSync(indexPath) && !url.startsWith('/api/')) {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n fs.createReadStream(indexPath).pipe(res);\n return;\n }\n }\n\n // 404\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Not found' }));\n }\n\n // ─── WebSocket Handler ───\n\n private handleWsConnection(ws: WebSocket): void {\n // Max client limit to prevent connection storms\n const MAX_WS_CLIENTS = 10;\n if (this.clients.size >= MAX_WS_CLIENTS) {\n // Close oldest connection\n const oldest = this.clients.values().next().value;\n if (oldest) {\n try { (oldest as WebSocket).close(1000, 'Too many connections'); } catch {}\n this.clients.delete(oldest);\n }\n }\n this.clients.add(ws);\n console.log(`[WS] Client connected (total: ${this.clients.size})`);\n\n // Send initial status immediately\n const status = this.getStatus();\n ws.send(JSON.stringify({ type: 'status', data: status }));\n\n ws.on('message', async (raw) => {\n try {\n const msg: WsMessage = JSON.parse(raw.toString());\n if (msg.type === 'command' && msg.data) {\n const { type, payload, target } = msg.data;\n const requestId = msg.requestId;\n const args = { ...payload, _targetInstance: target };\n const result = await this.executeCommand(type, args);\n ws.send(JSON.stringify({ type: 'command_result', requestId, data: result }));\n }\n } catch (e: any) {\n const requestId = (() => { try { return JSON.parse(raw.toString()).requestId; } catch { return undefined; } })();\n ws.send(JSON.stringify({ type: 'error', requestId, data: { message: e.message } }));\n }\n });\n\n ws.on('close', () => {\n this.clients.delete(ws);\n console.log(`[WS] Client disconnected (total: ${this.clients.size})`);\n });\n\n ws.on('error', () => {\n this.clients.delete(ws);\n });\n }\n\n // ─── Core Logic ───\n\n private getStatus(): StatusResponse {\n const machineId = os.hostname().replace(/[^a-zA-Z0-9]/g, '_');\n const ides = this.getIdes();\n const clis = this.getClis();\n const acps = this.getAcps();\n const cpus = os.cpus();\n const memSnap = getHostMemorySnapshot();\n const loadavg = os.loadavg();\n const cfgSnap = loadConfig();\n const wsState = getWorkspaceState(cfgSnap);\n\n return {\n id: `standalone_${machineId}`,\n instanceId: `standalone_${machineId}`,\n version: '1.0.0', // Standalone static version\n daemonMode: false,\n type: 'standalone',\n platform: os.platform(),\n hostname: os.hostname(),\n machine: {\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n cpus: cpus.length,\n totalMem: memSnap.totalMem,\n freeMem: memSnap.freeMem,\n availableMem: memSnap.availableMem,\n loadavg,\n uptime: os.uptime(),\n release: os.release(),\n },\n timestamp: Date.now(),\n userName: cfgSnap.userName || undefined,\n managedIdes: ides,\n managedClis: clis,\n managedAcps: acps,\n workspaces: wsState.workspaces,\n defaultWorkspaceId: wsState.defaultWorkspaceId,\n defaultWorkspacePath: wsState.defaultWorkspacePath,\n workspaceActivity: getWorkspaceActivity(cfgSnap, 15),\n detectedIdes: this.components!.detectedIdes.value.filter((i: any) => i.installed).map((i: any) => ({\n id: i.id, type: i.id, name: i.displayName || i.name, installed: true,\n running: isCdpConnected(this.components!.cdpManagers, i.id),\n })) as any,\n availableProviders: this.components!.providerLoader.getAll().map((p: any) => ({\n type: p.type, icon: p.icon || '💻', displayName: p.displayName || p.type,\n category: p.category,\n })) as any,\n system: {\n cpus: cpus.length,\n totalMem: memSnap.totalMem,\n freeMem: memSnap.freeMem,\n availableMem: memSnap.availableMem,\n loadavg,\n uptime: os.uptime(),\n arch: os.arch(),\n },\n };\n }\n\n private getIdes(): ManagedIdeEntry[] {\n const allStates = this.components!.instanceManager.collectAllStates();\n const ideStates = allStates.filter((s) => s.category === 'ide') as import('@adhdev/daemon-core').IdeProviderState[];\n return buildManagedIdes(ideStates, this.components!.cdpManagers, {\n detectedIdes: this.components!.detectedIdes.value,\n });\n }\n\n private getClis(): ManagedCliEntry[] {\n const result: ManagedCliEntry[] = [];\n for (const [key, adapter] of this.components!.cliManager.adapters.entries()) {\n // Skip ACP adapters — they go to getAcps()\n if ((adapter as any)._acpInstance) continue;\n const state = this.components!.instanceManager.getInstance(key)?.getState();\n result.push({\n id: key,\n instanceId: key,\n cliType: (adapter as any).cliType || key,\n cliName: (adapter as any).cliName || key,\n status: state?.status || 'running',\n mode: 'terminal',\n workspace: (adapter as any).workingDir || '',\n activeChat: state?.activeChat || null,\n });\n }\n return result;\n }\n\n private getAcps(): ManagedAcpEntry[] {\n const result: ManagedAcpEntry[] = [];\n for (const [key, adapter] of this.components!.cliManager.adapters.entries()) {\n const acpInstance = (adapter as any)._acpInstance;\n if (!acpInstance) continue;\n const state = acpInstance.getState();\n result.push({\n id: key,\n acpType: (adapter as any).cliType || state?.type || key,\n acpName: state?.name || (adapter as any).cliType || key,\n status: state?.status || 'running',\n mode: 'chat',\n workspace: (adapter as any).workingDir || '',\n activeChat: state?.activeChat || null,\n currentModel: state?.currentModel,\n currentPlan: state?.currentPlan,\n acpConfigOptions: state?.acpConfigOptions,\n acpModes: state?.acpModes,\n errorMessage: state?.errorMessage,\n errorReason: state?.errorReason,\n });\n }\n return result;\n }\n\n private async executeCommand(type: string, args: any): Promise<any> {\n if (!this.components) {\n return { success: false, error: 'Components not initialized' };\n }\n const result = await this.components.router.execute(type, args, 'standalone');\n if (type.startsWith('workspace_')) this.broadcastStatus();\n return result;\n }\n\n private broadcastStatus(): void {\n if (this.clients.size === 0) return;\n const status = this.getStatus();\n const msg = JSON.stringify({ type: 'status', data: status });\n const cdpCount = [...this.components!.cdpManagers.values()].filter(m => m.isConnected).length;\n LOG.debug('Broadcast', `status → ${this.clients.size} client(s), ${(status as any).ides?.length || 0} IDE(s), ${cdpCount} CDP`);\n for (const client of this.clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(msg);\n }\n }\n }\n\n // ─── Network ───\n\n private getLanIPs(): string[] {\n const interfaces = os.networkInterfaces();\n const ips: string[] = [];\n for (const iface of Object.values(interfaces)) {\n if (!iface) continue;\n for (const info of iface) {\n if (info.family === 'IPv4' && !info.internal) {\n ips.push(info.address);\n }\n }\n }\n return ips;\n }\n\n // ─── Lifecycle ───\n\n async stop(): Promise<void> {\n if (!this.running) return;\n this.running = false;\n\n console.log('\\n Shutting down...');\n\n if (this.statusTimer) {\n clearInterval(this.statusTimer);\n this.statusTimer = null;\n }\n\n // Close WS clients\n for (const ws of this.clients) {\n try { ws.close(); } catch { /* noop */ }\n }\n this.clients.clear();\n\n // Close WSS\n if (this.wss) {\n this.wss.close();\n this.wss = null;\n }\n\n // Shutdown core components\n if (this.components) {\n await shutdownDaemonComponents(this.components);\n }\n\n // HTTP server\n if (this.httpServer) {\n this.httpServer.close();\n this.httpServer = null;\n }\n\n console.log(' ✓ ADHDev Standalone stopped.\\n');\n process.exit(0);\n }\n}\n\n// ─── CLI ───\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const options: StandaloneOptions = {};\n\n // Parse simple args\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === '--port' || args[i] === '-p') && args[i + 1]) {\n options.port = parseInt(args[i + 1]);\n i++;\n }\n if (args[i] === '--host' || args[i] === '-H') {\n options.host = '0.0.0.0';\n }\n if (args[i] === '--public' && args[i + 1]) {\n options.publicDir = args[i + 1];\n i++;\n }\n if (args[i] === '--no-open') {\n options.open = false;\n }\n if (args[i] === '--dev') {\n (options as any).dev = true;\n }\n if (args[i] === '--token' && args[i + 1]) {\n options.token = args[i + 1];\n i++;\n }\n }\n\n // Try to find web-standalone build\n if (!options.publicDir) {\n const candidates = [\n path.join(__dirname, '../../web-standalone/dist'),\n path.join(__dirname, '../public'),\n path.join(process.cwd(), 'public'),\n ];\n for (const candidate of candidates) {\n if (fs.existsSync(path.join(candidate, 'index.html'))) {\n options.publicDir = candidate;\n break;\n }\n }\n }\n\n const server = new StandaloneServer();\n await server.start(options);\n\n // Keep process alive\n await new Promise<void>(() => {});\n}\n\nmain().catch((e) => {\n console.error('Fatal error:', e);\n process.exit(1);\n});\n"],"mappings":"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","names":["cpus","loadavg"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * daemon-standalone — Embedded HTTP/WS server for local dashboard\n *\n * Standalone-only server:\n * 1. DaemonCore init (IDE detection, CDP connection, Provider loading)\n * 2. HTTP REST API — /api/v1/status, /api/v1/command, /api/v1/ides, /api/v1/clis, /api/v1/agents\n * 3. WebSocket — ws://localhost:3847/ws (real-time status broadcast + command execution)\n * 4. Static file serving — web-standalone build output\n *\n * Usage:\n * npx @adhdev/daemon-standalone\n * npx @adhdev/daemon-standalone --port 4000\n */\n\nimport { createServer, type IncomingMessage } from 'http';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as crypto from 'crypto';\n\nimport {\n DevServer,\n LOG,\n initDaemonComponents,\n shutdownDaemonComponents,\n loadConfig,\n getWorkspaceState,\n getHostMemorySnapshot,\n getWorkspaceActivity,\n buildManagedIdes,\n hasCdpManager,\n isCdpConnected,\n type DaemonComponents,\n type StatusResponse,\n type AgentEntry,\n} from '@adhdev/daemon-core';\nimport type { ManagedIdeEntry, ManagedCliEntry, ManagedAcpEntry } from '@adhdev/daemon-core';\n\n// ─── Constants ───\nconst DEFAULT_PORT = 3847;\nconst STATUS_INTERVAL = 2000;\n\n// ─── Types ───\ninterface StandaloneOptions {\n port?: number;\n host?: string;\n publicDir?: string;\n open?: boolean;\n token?: string;\n dev?: boolean;\n}\n\ninterface WsMessage {\n type: string;\n requestId?: string;\n data?: Record<string, any>;\n}\n\n\n// ─── Standalone Server ───\n\nclass StandaloneServer {\n private httpServer: ReturnType<typeof createServer> | null = null;\n private wss: WebSocketServer | null = null;\n private clients = new Set<WebSocket>();\n private authToken: string | null = null;\n private statusTimer: NodeJS.Timeout | null = null;\n private running = false;\n private components: DaemonComponents | null = null;\n private devServer: DevServer | null = null;\n\n async start(options: StandaloneOptions = {}): Promise<void> {\n const port = options.port || DEFAULT_PORT;\n const host = options.host || '127.0.0.1';\n\n // Auth token setup (opt-in only)\n this.authToken = options.token || process.env.ADHDEV_TOKEN || null;\n\n // Initialize all core components via daemon-core bootstrapper\n this.components = await initDaemonComponents({\n cliManagerDeps: {\n getServerConn: () => null,\n getP2p: () => null,\n onStatusChange: () => this.broadcastStatus(),\n removeAgentTracking: () => {},\n },\n onStatusChange: () => this.broadcastStatus(),\n onStreamsUpdated: (ideType: string, streams: any[]) => {\n // Forward agent stream data to the IDE's ExtensionProviderInstance\n const ideInstance = this.components?.instanceManager?.getInstance(`ide:${ideType}`) as any;\n if (ideInstance?.onEvent) {\n for (const stream of streams) {\n ideInstance.onEvent('stream_update', {\n extensionType: stream.agentType,\n streams: [stream],\n messages: stream.messages || [],\n status: stream.status || 'idle',\n activeModal: stream.activeModal || null,\n });\n }\n }\n this.broadcastStatus();\n },\n tickIntervalMs: 3000,\n cdpScanIntervalMs: 15_000,\n });\n\n // DevServer (optional)\n if (options.dev) {\n this.devServer = new DevServer({\n providerLoader: this.components.providerLoader,\n cdpManagers: this.components.cdpManagers,\n logFn: (msg: string) => console.log(msg),\n });\n await this.devServer.start();\n }\n\n // 5. HTTP Server\n this.httpServer = createServer((req, res) => {\n this.handleHttp(req, res, options.publicDir);\n });\n\n // 6. WebSocket Server (upgrade)\n this.wss = new WebSocketServer({ noServer: true });\n this.httpServer.on('upgrade', (req, socket, head) => {\n const wsUrl = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n if (wsUrl.pathname === '/ws') {\n // Token auth for WS\n if (this.authToken) {\n const urlToken = wsUrl.searchParams.get('token');\n if (urlToken !== this.authToken) {\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n }\n this.wss!.handleUpgrade(req, socket, head, (ws) => {\n this.handleWsConnection(ws);\n });\n } else {\n socket.destroy();\n }\n });\n\n // 7. Status broadcast timer\n this.statusTimer = setInterval(() => {\n this.broadcastStatus();\n }, STATUS_INTERVAL);\n\n // 8. Start listening\n this.running = true;\n await new Promise<void>((resolve) => {\n this.httpServer!.listen(port, host, () => {\n resolve();\n });\n });\n\n console.log('');\n console.log('🚀 ADHDev Standalone Server');\n console.log(` http://${host === '0.0.0.0' ? 'localhost' : host}:${port}`);\n console.log(` ws://${host === '0.0.0.0' ? 'localhost' : host}:${port}/ws`);\n if (host === '0.0.0.0') {\n const lanIps = this.getLanIPs();\n for (const ip of lanIps) {\n console.log(` http://${ip}:${port} (LAN)`);\n }\n }\n if (this.authToken) {\n console.log(` 🔑 Token: ${this.authToken}`);\n }\n console.log('');\n\n const cdpCount = [...this.components.cdpManagers.values()].filter(m => m.isConnected).length;\n console.log(` CDP: ${cdpCount > 0 ? `✅ ${cdpCount} connected` : '❌ none'}`);\n console.log(` Providers: ${this.components.providerLoader.getAll().length} loaded`);\n if (options.dev) {\n console.log(` 🛠️ DevConsole: http://127.0.0.1:19280`);\n }\n console.log('');\n console.log(' Press Ctrl+C to stop.');\n console.log('');\n\n // Open browser\n if (options.open !== false) {\n try {\n const open = (await import('open')).default;\n await open(`http://localhost:${port}`);\n } catch { /* noop */ }\n }\n\n // Signal handling\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n // ─── HTTP Handler ───\n\n private handleHttp(\n req: IncomingMessage,\n res: import('http').ServerResponse,\n publicDir?: string\n ): void {\n const url = req.url || '/';\n const method = req.method || 'GET';\n\n // CORS\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n if (method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n // Token auth for API routes\n if (this.authToken && url.startsWith('/api/')) {\n const authHeader = req.headers['authorization'];\n const bearerToken = authHeader?.startsWith('Bearer ') ? authHeader.slice(7) : null;\n const queryToken = new URL(url, `http://${req.headers.host || 'localhost'}`).searchParams.get('token');\n if (bearerToken !== this.authToken && queryToken !== this.authToken) {\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Unauthorized. Provide token via Authorization header or ?token= query.' }));\n return;\n }\n }\n\n // ─── API Routes (v1) ───\n const apiPath = url.startsWith('/api/v1/') ? url.slice(7) : null; // /api/v1/status → /status\n\n if (apiPath === '/status' && method === 'GET') {\n const status = this.getStatus();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(status));\n return;\n }\n\n if (apiPath === '/ides' && method === 'GET') {\n const ides = this.getIdes();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ides }));\n return;\n }\n\n if (apiPath === '/clis' && method === 'GET') {\n const clis = this.getClis();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ clis }));\n return;\n }\n\n if (apiPath === '/agents' && method === 'GET') {\n const ides = this.getIdes();\n const agents: AgentEntry[] = [];\n for (const ide of ides) {\n // IDE native chat\n if (ide.activeChat) {\n agents.push({\n ideId: ide.instanceId,\n type: ide.ideType,\n name: ide.ideType,\n status: ide.activeChat.status || 'idle',\n source: 'native',\n });\n }\n // Extension agent streams\n for (const stream of (ide.agentStreams || [])) {\n agents.push({\n ideId: ide.instanceId,\n type: stream.agentType,\n name: stream.agentName,\n status: stream.status || 'idle',\n source: 'extension',\n });\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ agents }));\n return;\n }\n\n if (apiPath === '/command' && method === 'POST') {\n let body = '';\n req.on('data', (chunk) => { body += chunk; });\n req.on('end', async () => {\n try {\n const { type, payload, target } = JSON.parse(body);\n const args = { ...payload, _targetInstance: target };\n const result = await this.executeCommand(type, args);\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(result));\n } catch (e: any) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ success: false, error: e.message }));\n }\n });\n return;\n }\n\n // ─── Static Files ───\n if (publicDir) {\n const filePath = url === '/' ? '/index.html' : url;\n const fullPath = path.join(publicDir, filePath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n const ext = path.extname(fullPath);\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff2': 'font/woff2',\n };\n res.writeHead(200, { 'Content-Type': mimeTypes[ext] || 'application/octet-stream' });\n fs.createReadStream(fullPath).pipe(res);\n return;\n }\n // SPA fallback → index.html\n const indexPath = path.join(publicDir, 'index.html');\n if (fs.existsSync(indexPath) && !url.startsWith('/api/')) {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n fs.createReadStream(indexPath).pipe(res);\n return;\n }\n }\n\n // 404\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Not found' }));\n }\n\n // ─── WebSocket Handler ───\n\n private handleWsConnection(ws: WebSocket): void {\n // Max client limit to prevent connection storms\n const MAX_WS_CLIENTS = 10;\n if (this.clients.size >= MAX_WS_CLIENTS) {\n // Close oldest connection\n const oldest = this.clients.values().next().value;\n if (oldest) {\n try { (oldest as WebSocket).close(1000, 'Too many connections'); } catch {}\n this.clients.delete(oldest);\n }\n }\n this.clients.add(ws);\n console.log(`[WS] Client connected (total: ${this.clients.size})`);\n\n // Send initial status immediately\n const status = this.getStatus();\n ws.send(JSON.stringify({ type: 'status', data: status }));\n\n ws.on('message', async (raw) => {\n try {\n const msg: WsMessage = JSON.parse(raw.toString());\n if (msg.type === 'command' && msg.data) {\n const { type, payload, target } = msg.data;\n const requestId = msg.requestId;\n const args = { ...payload, _targetInstance: target };\n const result = await this.executeCommand(type, args);\n ws.send(JSON.stringify({ type: 'command_result', requestId, data: result }));\n }\n } catch (e: any) {\n const requestId = (() => { try { return JSON.parse(raw.toString()).requestId; } catch { return undefined; } })();\n ws.send(JSON.stringify({ type: 'error', requestId, data: { message: e.message } }));\n }\n });\n\n ws.on('close', () => {\n this.clients.delete(ws);\n console.log(`[WS] Client disconnected (total: ${this.clients.size})`);\n });\n\n ws.on('error', () => {\n this.clients.delete(ws);\n });\n }\n\n // ─── Core Logic ───\n\n private getStatus(): StatusResponse {\n const machineId = os.hostname().replace(/[^a-zA-Z0-9]/g, '_');\n const ides = this.getIdes();\n const clis = this.getClis();\n const acps = this.getAcps();\n const cpus = os.cpus();\n const memSnap = getHostMemorySnapshot();\n const loadavg = os.loadavg();\n const cfgSnap = loadConfig();\n const wsState = getWorkspaceState(cfgSnap);\n\n return {\n id: `standalone_${machineId}`,\n instanceId: `standalone_${machineId}`,\n version: '1.0.0', // Standalone static version\n daemonMode: false,\n type: 'standalone',\n platform: os.platform(),\n hostname: os.hostname(),\n machine: {\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n cpus: cpus.length,\n totalMem: memSnap.totalMem,\n freeMem: memSnap.freeMem,\n availableMem: memSnap.availableMem,\n loadavg,\n uptime: os.uptime(),\n release: os.release(),\n },\n timestamp: Date.now(),\n userName: cfgSnap.userName || undefined,\n managedIdes: ides,\n managedClis: clis,\n managedAcps: acps,\n workspaces: wsState.workspaces,\n defaultWorkspaceId: wsState.defaultWorkspaceId,\n defaultWorkspacePath: wsState.defaultWorkspacePath,\n workspaceActivity: getWorkspaceActivity(cfgSnap, 15),\n detectedIdes: this.components!.detectedIdes.value.filter((i: any) => i.installed).map((i: any) => ({\n id: i.id, type: i.id, name: i.displayName || i.name, installed: true,\n running: isCdpConnected(this.components!.cdpManagers, i.id),\n })) as any,\n availableProviders: this.components!.providerLoader.getAll().map((p: any) => ({\n type: p.type, icon: p.icon || '💻', displayName: p.displayName || p.type,\n category: p.category,\n })) as any,\n system: {\n cpus: cpus.length,\n totalMem: memSnap.totalMem,\n freeMem: memSnap.freeMem,\n availableMem: memSnap.availableMem,\n loadavg,\n uptime: os.uptime(),\n arch: os.arch(),\n },\n };\n }\n\n private getIdes(): ManagedIdeEntry[] {\n const allStates = this.components!.instanceManager.collectAllStates();\n const ideStates = allStates.filter((s) => s.category === 'ide') as import('@adhdev/daemon-core').IdeProviderState[];\n return buildManagedIdes(ideStates, this.components!.cdpManagers, {\n detectedIdes: this.components!.detectedIdes.value,\n });\n }\n\n private getClis(): ManagedCliEntry[] {\n const result: ManagedCliEntry[] = [];\n for (const [key, adapter] of this.components!.cliManager.adapters.entries()) {\n // Skip ACP adapters — they go to getAcps()\n if ((adapter as any)._acpInstance) continue;\n const state = this.components!.instanceManager.getInstance(key)?.getState();\n result.push({\n id: key,\n instanceId: key,\n cliType: (adapter as any).cliType || key,\n cliName: (adapter as any).cliName || key,\n status: state?.status || 'running',\n mode: 'terminal',\n workspace: (adapter as any).workingDir || '',\n activeChat: state?.activeChat || null,\n });\n }\n return result;\n }\n\n private getAcps(): ManagedAcpEntry[] {\n const result: ManagedAcpEntry[] = [];\n for (const [key, adapter] of this.components!.cliManager.adapters.entries()) {\n const acpInstance = (adapter as any)._acpInstance;\n if (!acpInstance) continue;\n const state = acpInstance.getState();\n result.push({\n id: key,\n acpType: (adapter as any).cliType || state?.type || key,\n acpName: state?.name || (adapter as any).cliType || key,\n status: state?.status || 'running',\n mode: 'chat',\n workspace: (adapter as any).workingDir || '',\n activeChat: state?.activeChat || null,\n currentModel: state?.currentModel,\n currentPlan: state?.currentPlan,\n acpConfigOptions: state?.acpConfigOptions,\n acpModes: state?.acpModes,\n errorMessage: state?.errorMessage,\n errorReason: state?.errorReason,\n });\n }\n return result;\n }\n\n private async executeCommand(type: string, args: any): Promise<any> {\n if (!this.components) {\n return { success: false, error: 'Components not initialized' };\n }\n const result = await this.components.router.execute(type, args, 'standalone');\n if (type.startsWith('workspace_')) this.broadcastStatus();\n return result;\n }\n\n private broadcastStatus(): void {\n if (this.clients.size === 0) return;\n const status = this.getStatus();\n const msg = JSON.stringify({ type: 'status', data: status });\n const cdpCount = [...this.components!.cdpManagers.values()].filter(m => m.isConnected).length;\n LOG.debug('Broadcast', `status → ${this.clients.size} client(s), ${(status as any).ides?.length || 0} IDE(s), ${cdpCount} CDP`);\n for (const client of this.clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(msg);\n }\n }\n }\n\n // ─── Network ───\n\n private getLanIPs(): string[] {\n const interfaces = os.networkInterfaces();\n const ips: string[] = [];\n for (const iface of Object.values(interfaces)) {\n if (!iface) continue;\n for (const info of iface) {\n if (info.family === 'IPv4' && !info.internal) {\n ips.push(info.address);\n }\n }\n }\n return ips;\n }\n\n // ─── Lifecycle ───\n\n async stop(): Promise<void> {\n if (!this.running) return;\n this.running = false;\n\n console.log('\\n Shutting down...');\n\n if (this.statusTimer) {\n clearInterval(this.statusTimer);\n this.statusTimer = null;\n }\n\n // Close WS clients\n for (const ws of this.clients) {\n try { ws.close(); } catch { /* noop */ }\n }\n this.clients.clear();\n\n // Close WSS\n if (this.wss) {\n this.wss.close();\n this.wss = null;\n }\n\n // Shutdown core components\n if (this.components) {\n await shutdownDaemonComponents(this.components);\n }\n\n // HTTP server\n if (this.httpServer) {\n this.httpServer.close();\n this.httpServer = null;\n }\n\n console.log(' ✓ ADHDev Standalone stopped.\\n');\n process.exit(0);\n }\n}\n\n// ─── CLI ───\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const options: StandaloneOptions = {};\n\n // Parse simple args\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === '--port' || args[i] === '-p') && args[i + 1]) {\n options.port = parseInt(args[i + 1]);\n i++;\n }\n if (args[i] === '--host' || args[i] === '-H') {\n options.host = '0.0.0.0';\n }\n if (args[i] === '--public' && args[i + 1]) {\n options.publicDir = args[i + 1];\n i++;\n }\n if (args[i] === '--no-open') {\n options.open = false;\n }\n if (args[i] === '--dev') {\n (options as any).dev = true;\n }\n if (args[i] === '--token' && args[i + 1]) {\n options.token = args[i + 1];\n i++;\n }\n }\n\n // Try to find web-standalone build\n if (!options.publicDir) {\n const candidates = [\n path.join(__dirname, '../../web-standalone/dist'),\n path.join(__dirname, '../public'),\n path.join(process.cwd(), 'public'),\n ];\n for (const candidate of candidates) {\n if (fs.existsSync(path.join(candidate, 'index.html'))) {\n options.publicDir = candidate;\n break;\n }\n }\n }\n\n const server = new StandaloneServer();\n await server.start(options);\n\n // Keep process alive\n await new Promise<void>(() => {});\n}\n\nmain().catch((e) => {\n console.error('Fatal error:', e);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,kBAAmD;AACnD,gBAA2C;AAC3C,WAAsB;AACtB,SAAoB;AACpB,SAAoB;AAGpB,yBAeO;AAIP,IAAM,eAAe;AACrB,IAAM,kBAAkB;AAqBxB,IAAM,mBAAN,MAAuB;AAAA,EACb,aAAqD;AAAA,EACrD,MAA8B;AAAA,EAC9B,UAAU,oBAAI,IAAe;AAAA,EAC7B,YAA2B;AAAA,EAC3B,cAAqC;AAAA,EACrC,UAAU;AAAA,EACV,aAAsC;AAAA,EACtC,YAA8B;AAAA,EAEtC,MAAM,MAAM,UAA6B,CAAC,GAAkB;AAC1D,UAAM,OAAO,QAAQ,QAAQ;AAC7B,UAAM,OAAO,QAAQ,QAAQ;AAG7B,SAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,gBAAgB;AAG9D,SAAK,aAAa,UAAM,yCAAqB;AAAA,MAC3C,gBAAgB;AAAA,QACd,eAAe,MAAM;AAAA,QACrB,QAAQ,MAAM;AAAA,QACd,gBAAgB,MAAM,KAAK,gBAAgB;AAAA,QAC3C,qBAAqB,MAAM;AAAA,QAAC;AAAA,MAC9B;AAAA,MACA,gBAAgB,MAAM,KAAK,gBAAgB;AAAA,MAC3C,kBAAkB,CAAC,SAAiB,YAAmB;AAErD,cAAM,cAAc,KAAK,YAAY,iBAAiB,YAAY,OAAO,OAAO,EAAE;AAClF,YAAI,aAAa,SAAS;AACxB,qBAAW,UAAU,SAAS;AAC5B,wBAAY,QAAQ,iBAAiB;AAAA,cACnC,eAAe,OAAO;AAAA,cACtB,SAAS,CAAC,MAAM;AAAA,cAChB,UAAU,OAAO,YAAY,CAAC;AAAA,cAC9B,QAAQ,OAAO,UAAU;AAAA,cACzB,aAAa,OAAO,eAAe;AAAA,YACrC,CAAC;AAAA,UACH;AAAA,QACF;AACA,aAAK,gBAAgB;AAAA,MACvB;AAAA,MACA,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,IACrB,CAAC;AAGD,QAAI,QAAQ,KAAK;AACf,WAAK,YAAY,IAAI,6BAAU;AAAA,QAC7B,gBAAgB,KAAK,WAAW;AAAA,QAChC,aAAa,KAAK,WAAW;AAAA,QAC7B,OAAO,CAAC,QAAgB,QAAQ,IAAI,GAAG;AAAA,MACzC,CAAC;AACD,YAAM,KAAK,UAAU,MAAM;AAAA,IAC7B;AAGA,SAAK,iBAAa,0BAAa,CAAC,KAAK,QAAQ;AAC3C,WAAK,WAAW,KAAK,KAAK,QAAQ,SAAS;AAAA,IAC7C,CAAC;AAGD,SAAK,MAAM,IAAI,0BAAgB,EAAE,UAAU,KAAK,CAAC;AACjD,SAAK,WAAW,GAAG,WAAW,CAAC,KAAK,QAAQ,SAAS;AACnD,YAAM,QAAQ,IAAI,IAAI,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,QAAQ,WAAW,EAAE;AACjF,UAAI,MAAM,aAAa,OAAO;AAE5B,YAAI,KAAK,WAAW;AAClB,gBAAM,WAAW,MAAM,aAAa,IAAI,OAAO;AAC/C,cAAI,aAAa,KAAK,WAAW;AAC/B,mBAAO,MAAM,mCAAmC;AAChD,mBAAO,QAAQ;AACf;AAAA,UACF;AAAA,QACF;AACA,aAAK,IAAK,cAAc,KAAK,QAAQ,MAAM,CAAC,OAAO;AACjD,eAAK,mBAAmB,EAAE;AAAA,QAC5B,CAAC;AAAA,MACH,OAAO;AACL,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAGD,SAAK,cAAc,YAAY,MAAM;AACnC,WAAK,gBAAgB;AAAA,IACvB,GAAG,eAAe;AAGlB,SAAK,UAAU;AACf,UAAM,IAAI,QAAc,CAAC,YAAY;AACnC,WAAK,WAAY,OAAO,MAAM,MAAM,MAAM;AACxC,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAED,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,oCAA6B;AACzC,YAAQ,IAAI,aAAa,SAAS,YAAY,cAAc,IAAI,IAAI,IAAI,EAAE;AAC1E,YAAQ,IAAI,WAAW,SAAS,YAAY,cAAc,IAAI,IAAI,IAAI,KAAK;AAC3E,QAAI,SAAS,WAAW;AACtB,YAAM,SAAS,KAAK,UAAU;AAC9B,iBAAW,MAAM,QAAQ;AACvB,gBAAQ,IAAI,aAAa,EAAE,IAAI,IAAI,SAAS;AAAA,MAC9C;AAAA,IACF;AACA,QAAI,KAAK,WAAW;AAClB,cAAQ,IAAI,uBAAgB,KAAK,SAAS,EAAE;AAAA,IAC9C;AACA,YAAQ,IAAI,EAAE;AAEd,UAAM,WAAW,CAAC,GAAG,KAAK,WAAW,YAAY,OAAO,CAAC,EAAE,OAAO,OAAK,EAAE,WAAW,EAAE;AACtF,YAAQ,IAAI,WAAW,WAAW,IAAI,UAAK,QAAQ,eAAe,aAAQ,EAAE;AAC5E,YAAQ,IAAI,iBAAiB,KAAK,WAAW,eAAe,OAAO,EAAE,MAAM,SAAS;AACpF,QAAI,QAAQ,KAAK;AACf,cAAQ,IAAI,wDAA4C;AAAA,IAC1D;AACA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,0BAA0B;AACtC,YAAQ,IAAI,EAAE;AAGd,QAAI,QAAQ,SAAS,OAAO;AAC1B,UAAI;AACF,cAAM,QAAQ,MAAM,OAAO,MAAM,GAAG;AACpC,cAAM,KAAK,oBAAoB,IAAI,EAAE;AAAA,MACvC,QAAQ;AAAA,MAAa;AAAA,IACvB;AAGA,YAAQ,GAAG,UAAU,MAAM,KAAK,KAAK,CAAC;AACtC,YAAQ,GAAG,WAAW,MAAM,KAAK,KAAK,CAAC;AAAA,EACzC;AAAA;AAAA,EAIQ,WACN,KACA,KACA,WACM;AACN,UAAM,MAAM,IAAI,OAAO;AACvB,UAAM,SAAS,IAAI,UAAU;AAG7B,QAAI,UAAU,+BAA+B,GAAG;AAChD,QAAI,UAAU,gCAAgC,oBAAoB;AAClE,QAAI,UAAU,gCAAgC,6BAA6B;AAC3E,QAAI,WAAW,WAAW;AACxB,UAAI,UAAU,GAAG;AACjB,UAAI,IAAI;AACR;AAAA,IACF;AAGA,QAAI,KAAK,aAAa,IAAI,WAAW,OAAO,GAAG;AAC7C,YAAM,aAAa,IAAI,QAAQ,eAAe;AAC9C,YAAM,cAAc,YAAY,WAAW,SAAS,IAAI,WAAW,MAAM,CAAC,IAAI;AAC9E,YAAM,aAAa,IAAI,IAAI,KAAK,UAAU,IAAI,QAAQ,QAAQ,WAAW,EAAE,EAAE,aAAa,IAAI,OAAO;AACrG,UAAI,gBAAgB,KAAK,aAAa,eAAe,KAAK,WAAW;AACnE,YAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,YAAI,IAAI,KAAK,UAAU,EAAE,OAAO,yEAAyE,CAAC,CAAC;AAC3G;AAAA,MACF;AAAA,IACF;AAGA,UAAM,UAAU,IAAI,WAAW,UAAU,IAAI,IAAI,MAAM,CAAC,IAAI;AAE5D,QAAI,YAAY,aAAa,WAAW,OAAO;AAC7C,YAAM,SAAS,KAAK,UAAU;AAC9B,UAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,UAAI,IAAI,KAAK,UAAU,MAAM,CAAC;AAC9B;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,WAAW,OAAO;AAC3C,YAAM,OAAO,KAAK,QAAQ;AAC1B,UAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,UAAI,IAAI,KAAK,UAAU,EAAE,KAAK,CAAC,CAAC;AAChC;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,WAAW,OAAO;AAC3C,YAAM,OAAO,KAAK,QAAQ;AAC1B,UAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,UAAI,IAAI,KAAK,UAAU,EAAE,KAAK,CAAC,CAAC;AAChC;AAAA,IACF;AAEA,QAAI,YAAY,aAAa,WAAW,OAAO;AAC7C,YAAM,OAAO,KAAK,QAAQ;AAC1B,YAAM,SAAuB,CAAC;AAC9B,iBAAW,OAAO,MAAM;AAEtB,YAAI,IAAI,YAAY;AAClB,iBAAO,KAAK;AAAA,YACV,OAAO,IAAI;AAAA,YACX,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ,IAAI,WAAW,UAAU;AAAA,YACjC,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAEA,mBAAW,UAAW,IAAI,gBAAgB,CAAC,GAAI;AAC7C,iBAAO,KAAK;AAAA,YACV,OAAO,IAAI;AAAA,YACX,MAAM,OAAO;AAAA,YACb,MAAM,OAAO;AAAA,YACb,QAAQ,OAAO,UAAU;AAAA,YACzB,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AACA,UAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,UAAI,IAAI,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC;AAClC;AAAA,IACF;AAEA,QAAI,YAAY,cAAc,WAAW,QAAQ;AAC/C,UAAI,OAAO;AACX,UAAI,GAAG,QAAQ,CAAC,UAAU;AAAE,gBAAQ;AAAA,MAAO,CAAC;AAC5C,UAAI,GAAG,OAAO,YAAY;AACxB,YAAI;AACF,gBAAM,EAAE,MAAM,SAAS,OAAO,IAAI,KAAK,MAAM,IAAI;AACjD,gBAAM,OAAO,EAAE,GAAG,SAAS,iBAAiB,OAAO;AACnD,gBAAM,SAAS,MAAM,KAAK,eAAe,MAAM,IAAI;AACnD,cAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,cAAI,IAAI,KAAK,UAAU,MAAM,CAAC;AAAA,QAChC,SAAS,GAAQ;AACf,cAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,cAAI,IAAI,KAAK,UAAU,EAAE,SAAS,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,QAC9D;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAGA,QAAI,WAAW;AACb,YAAM,WAAW,QAAQ,MAAM,gBAAgB;AAC/C,YAAM,WAAgB,UAAK,WAAW,QAAQ;AAC9C,UAAO,cAAW,QAAQ,KAAQ,YAAS,QAAQ,EAAE,OAAO,GAAG;AAC7D,cAAM,MAAW,aAAQ,QAAQ;AACjC,cAAM,YAAoC;AAAA,UACxC,SAAS;AAAA,UACT,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,UAAU;AAAA,QACZ;AACA,YAAI,UAAU,KAAK,EAAE,gBAAgB,UAAU,GAAG,KAAK,2BAA2B,CAAC;AACnF,QAAG,oBAAiB,QAAQ,EAAE,KAAK,GAAG;AACtC;AAAA,MACF;AAEA,YAAM,YAAiB,UAAK,WAAW,YAAY;AACnD,UAAO,cAAW,SAAS,KAAK,CAAC,IAAI,WAAW,OAAO,GAAG;AACxD,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,QAAG,oBAAiB,SAAS,EAAE,KAAK,GAAG;AACvC;AAAA,MACF;AAAA,IACF;AAGA,QAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,QAAI,IAAI,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,CAAC;AAAA,EAChD;AAAA;AAAA,EAIQ,mBAAmB,IAAqB;AAE9C,UAAM,iBAAiB;AACvB,QAAI,KAAK,QAAQ,QAAQ,gBAAgB;AAEvC,YAAM,SAAS,KAAK,QAAQ,OAAO,EAAE,KAAK,EAAE;AAC5C,UAAI,QAAQ;AACV,YAAI;AAAE,UAAC,OAAqB,MAAM,KAAM,sBAAsB;AAAA,QAAG,QAAQ;AAAA,QAAC;AAC1E,aAAK,QAAQ,OAAO,MAAM;AAAA,MAC5B;AAAA,IACF;AACA,SAAK,QAAQ,IAAI,EAAE;AACnB,YAAQ,IAAI,iCAAiC,KAAK,QAAQ,IAAI,GAAG;AAGjE,UAAM,SAAS,KAAK,UAAU;AAC9B,OAAG,KAAK,KAAK,UAAU,EAAE,MAAM,UAAU,MAAM,OAAO,CAAC,CAAC;AAExD,OAAG,GAAG,WAAW,OAAO,QAAQ;AAC9B,UAAI;AACF,cAAM,MAAiB,KAAK,MAAM,IAAI,SAAS,CAAC;AAChD,YAAI,IAAI,SAAS,aAAa,IAAI,MAAM;AACtC,gBAAM,EAAE,MAAM,SAAS,OAAO,IAAI,IAAI;AACtC,gBAAM,YAAY,IAAI;AACtB,gBAAM,OAAO,EAAE,GAAG,SAAS,iBAAiB,OAAO;AACnD,gBAAM,SAAS,MAAM,KAAK,eAAe,MAAM,IAAI;AACnD,aAAG,KAAK,KAAK,UAAU,EAAE,MAAM,kBAAkB,WAAW,MAAM,OAAO,CAAC,CAAC;AAAA,QAC7E;AAAA,MACF,SAAS,GAAQ;AACf,cAAM,aAAa,MAAM;AAAE,cAAI;AAAE,mBAAO,KAAK,MAAM,IAAI,SAAS,CAAC,EAAE;AAAA,UAAW,QAAQ;AAAE,mBAAO;AAAA,UAAW;AAAA,QAAE,GAAG;AAC/G,WAAG,KAAK,KAAK,UAAU,EAAE,MAAM,SAAS,WAAW,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,MACpF;AAAA,IACF,CAAC;AAED,OAAG,GAAG,SAAS,MAAM;AACnB,WAAK,QAAQ,OAAO,EAAE;AACtB,cAAQ,IAAI,oCAAoC,KAAK,QAAQ,IAAI,GAAG;AAAA,IACtE,CAAC;AAED,OAAG,GAAG,SAAS,MAAM;AACnB,WAAK,QAAQ,OAAO,EAAE;AAAA,IACxB,CAAC;AAAA,EACH;AAAA;AAAA,EAIQ,YAA4B;AAClC,UAAM,YAAe,YAAS,EAAE,QAAQ,iBAAiB,GAAG;AAC5D,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAMA,QAAU,QAAK;AACrB,UAAM,cAAU,0CAAsB;AACtC,UAAMC,WAAa,WAAQ;AAC3B,UAAM,cAAU,+BAAW;AAC3B,UAAM,cAAU,sCAAkB,OAAO;AAEzC,WAAO;AAAA,MACL,IAAI,cAAc,SAAS;AAAA,MAC3B,YAAY,cAAc,SAAS;AAAA,MACnC,SAAS;AAAA;AAAA,MACT,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,UAAa,YAAS;AAAA,MACtB,UAAa,YAAS;AAAA,MACtB,SAAS;AAAA,QACP,UAAa,YAAS;AAAA,QACtB,UAAa,YAAS;AAAA,QACtB,MAAS,QAAK;AAAA,QACd,MAAMD,MAAK;AAAA,QACX,UAAU,QAAQ;AAAA,QAClB,SAAS,QAAQ;AAAA,QACjB,cAAc,QAAQ;AAAA,QACtB,SAAAC;AAAA,QACA,QAAW,UAAO;AAAA,QAClB,SAAY,WAAQ;AAAA,MACtB;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,UAAU,QAAQ,YAAY;AAAA,MAC9B,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY,QAAQ;AAAA,MACpB,oBAAoB,QAAQ;AAAA,MAC5B,sBAAsB,QAAQ;AAAA,MAC9B,uBAAmB,yCAAqB,SAAS,EAAE;AAAA,MACnD,cAAc,KAAK,WAAY,aAAa,MAAM,OAAO,CAAC,MAAW,EAAE,SAAS,EAAE,IAAI,CAAC,OAAY;AAAA,QACjG,IAAI,EAAE;AAAA,QAAI,MAAM,EAAE;AAAA,QAAI,MAAM,EAAE,eAAe,EAAE;AAAA,QAAM,WAAW;AAAA,QAChE,aAAS,mCAAe,KAAK,WAAY,aAAa,EAAE,EAAE;AAAA,MAC5D,EAAE;AAAA,MACF,oBAAoB,KAAK,WAAY,eAAe,OAAO,EAAE,IAAI,CAAC,OAAY;AAAA,QAC5E,MAAM,EAAE;AAAA,QAAM,MAAM,EAAE,QAAQ;AAAA,QAAM,aAAa,EAAE,eAAe,EAAE;AAAA,QACpE,UAAU,EAAE;AAAA,MACd,EAAE;AAAA,MACF,QAAQ;AAAA,QACN,MAAMD,MAAK;AAAA,QACX,UAAU,QAAQ;AAAA,QAClB,SAAS,QAAQ;AAAA,QACjB,cAAc,QAAQ;AAAA,QACtB,SAAAC;AAAA,QACA,QAAW,UAAO;AAAA,QAClB,MAAS,QAAK;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,UAA6B;AACnC,UAAM,YAAY,KAAK,WAAY,gBAAgB,iBAAiB;AACpE,UAAM,YAAY,UAAU,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK;AAC9D,eAAO,qCAAiB,WAAW,KAAK,WAAY,aAAa;AAAA,MAC/D,cAAc,KAAK,WAAY,aAAa;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEQ,UAA6B;AACnC,UAAM,SAA4B,CAAC;AACnC,eAAW,CAAC,KAAK,OAAO,KAAK,KAAK,WAAY,WAAW,SAAS,QAAQ,GAAG;AAE3E,UAAK,QAAgB,aAAc;AACnC,YAAM,QAAQ,KAAK,WAAY,gBAAgB,YAAY,GAAG,GAAG,SAAS;AAC1E,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,YAAY;AAAA,QACZ,SAAU,QAAgB,WAAW;AAAA,QACrC,SAAU,QAAgB,WAAW;AAAA,QACrC,QAAQ,OAAO,UAAU;AAAA,QACzB,MAAM;AAAA,QACN,WAAY,QAAgB,cAAc;AAAA,QAC1C,YAAY,OAAO,cAAc;AAAA,MACnC,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,UAA6B;AACnC,UAAM,SAA4B,CAAC;AACnC,eAAW,CAAC,KAAK,OAAO,KAAK,KAAK,WAAY,WAAW,SAAS,QAAQ,GAAG;AAC3E,YAAM,cAAe,QAAgB;AACrC,UAAI,CAAC,YAAa;AAClB,YAAM,QAAQ,YAAY,SAAS;AACnC,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,SAAU,QAAgB,WAAW,OAAO,QAAQ;AAAA,QACpD,SAAS,OAAO,QAAS,QAAgB,WAAW;AAAA,QACpD,QAAQ,OAAO,UAAU;AAAA,QACzB,MAAM;AAAA,QACN,WAAY,QAAgB,cAAc;AAAA,QAC1C,YAAY,OAAO,cAAc;AAAA,QACjC,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO;AAAA,QACzB,UAAU,OAAO;AAAA,QACjB,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,MACtB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,eAAe,MAAc,MAAyB;AAClE,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO,EAAE,SAAS,OAAO,OAAO,6BAA6B;AAAA,IAC/D;AACA,UAAM,SAAS,MAAM,KAAK,WAAW,OAAO,QAAQ,MAAM,MAAM,YAAY;AAC5E,QAAI,KAAK,WAAW,YAAY,EAAG,MAAK,gBAAgB;AACxD,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAwB;AAC9B,QAAI,KAAK,QAAQ,SAAS,EAAG;AAC7B,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,MAAM,KAAK,UAAU,EAAE,MAAM,UAAU,MAAM,OAAO,CAAC;AAC3D,UAAM,WAAW,CAAC,GAAG,KAAK,WAAY,YAAY,OAAO,CAAC,EAAE,OAAO,OAAK,EAAE,WAAW,EAAE;AACvF,2BAAI,MAAM,aAAa,iBAAY,KAAK,QAAQ,IAAI,eAAgB,OAAe,MAAM,UAAU,CAAC,YAAY,QAAQ,MAAM;AAC9H,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,OAAO,eAAe,oBAAU,MAAM;AACxC,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIQ,YAAsB;AAC5B,UAAM,aAAgB,qBAAkB;AACxC,UAAM,MAAgB,CAAC;AACvB,eAAW,SAAS,OAAO,OAAO,UAAU,GAAG;AAC7C,UAAI,CAAC,MAAO;AACZ,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,UAAU,CAAC,KAAK,UAAU;AAC5C,cAAI,KAAK,KAAK,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,OAAsB;AAC1B,QAAI,CAAC,KAAK,QAAS;AACnB,SAAK,UAAU;AAEf,YAAQ,IAAI,uBAAuB;AAEnC,QAAI,KAAK,aAAa;AACpB,oBAAc,KAAK,WAAW;AAC9B,WAAK,cAAc;AAAA,IACrB;AAGA,eAAW,MAAM,KAAK,SAAS;AAC7B,UAAI;AAAE,WAAG,MAAM;AAAA,MAAG,QAAQ;AAAA,MAAa;AAAA,IACzC;AACA,SAAK,QAAQ,MAAM;AAGnB,QAAI,KAAK,KAAK;AACZ,WAAK,IAAI,MAAM;AACf,WAAK,MAAM;AAAA,IACb;AAGA,QAAI,KAAK,YAAY;AACnB,gBAAM,6CAAyB,KAAK,UAAU;AAAA,IAChD;AAGA,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,MAAM;AACtB,WAAK,aAAa;AAAA,IACpB;AAEA,YAAQ,IAAI,wCAAmC;AAC/C,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAIA,eAAe,OAAsB;AACnC,QAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,QAAM,UAA6B,CAAC;AAGpC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,SAAK,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,SAAS,KAAK,IAAI,CAAC,GAAG;AAC7D,cAAQ,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC;AACnC;AAAA,IACF;AACA,QAAI,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,MAAM;AAC5C,cAAQ,OAAO;AAAA,IACjB;AACA,QAAI,KAAK,CAAC,MAAM,cAAc,KAAK,IAAI,CAAC,GAAG;AACzC,cAAQ,YAAY,KAAK,IAAI,CAAC;AAC9B;AAAA,IACF;AACA,QAAI,KAAK,CAAC,MAAM,aAAa;AAC3B,cAAQ,OAAO;AAAA,IACjB;AACA,QAAI,KAAK,CAAC,MAAM,SAAS;AACvB,MAAC,QAAgB,MAAM;AAAA,IACzB;AACA,QAAI,KAAK,CAAC,MAAM,aAAa,KAAK,IAAI,CAAC,GAAG;AACxC,cAAQ,QAAQ,KAAK,IAAI,CAAC;AAC1B;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,QAAQ,WAAW;AACtB,UAAM,aAAa;AAAA,MACZ,UAAK,WAAW,2BAA2B;AAAA,MAC3C,UAAK,WAAW,WAAW;AAAA,MAC3B,UAAK,QAAQ,IAAI,GAAG,QAAQ;AAAA,IACnC;AACA,eAAW,aAAa,YAAY;AAClC,UAAO,cAAgB,UAAK,WAAW,YAAY,CAAC,GAAG;AACrD,gBAAQ,YAAY;AACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,iBAAiB;AACpC,QAAM,OAAO,MAAM,OAAO;AAG1B,QAAM,IAAI,QAAc,MAAM;AAAA,EAAC,CAAC;AAClC;AAEA,KAAK,EAAE,MAAM,CAAC,MAAM;AAClB,UAAQ,MAAM,gBAAgB,CAAC;AAC/B,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["cpus","loadavg"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adhdev/daemon-standalone",
3
- "version": "0.5.20",
3
+ "version": "0.5.23",
4
4
  "description": "ADHDev standalone daemon — embedded HTTP/WS server for local dashboard",
5
5
  "main": "dist/index.js",
6
6
  "bin": {