{
  "version": 3,
  "sources": ["../server.ts"],
  "sourcesContent": ["import express from \"express\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport { createServer as createViteServer } from \"vite\";\nimport { createRequire } from \"module\";\n\nconst requireEmp = createRequire(path.join(process.cwd(), \"server.ts\"));\n\nfunction resolveEmpLib() {\n  const candidates = [\n    process.env.EMP_CLI_DIR ? path.join(process.env.EMP_CLI_DIR, \"lib\") : \"\",\n    path.join(process.cwd(), \"..\", \"lib\"),\n    \"C:\\\\Users\\\\saintdevzz\\\\Desktop\\\\emp-cli\\\\lib\",\n    path.join(process.cwd(), \"..\", \"emp-cli\", \"lib\"),\n    path.join(os.homedir(), \"emp-cli\", \"lib\"),\n  ].filter(Boolean);\n  for (const c of candidates) {\n    try {\n      if (fs.existsSync(path.join(c, \"config.js\"))) return c;\n    } catch {}\n  }\n  return candidates[1];\n}\n\nconst EMP_LIB = resolveEmpLib();\nfunction empRequire(name: string) {\n  return requireEmp(path.join(EMP_LIB, name));\n}\n\nconst config = empRequire(\"config.js\");\nconst providers = empRequire(\"providers.js\");\nconst tools = empRequire(\"tools.js\");\nconst agent = empRequire(\"agent.js\");\nconst session = empRequire(\"session.js\");\nconst skills = empRequire(\"skills.js\");\nconst workspace = empRequire(\"workspace.js\");\nconst effortMod = empRequire(\"effort.js\");\nconst context = empRequire(\"context.js\");\nconst bg = empRequire(\"bg.js\");\nconst subagentsMod = empRequire(\"subagents.js\");\nconst mcpMod = empRequire(\"mcp.js\");\n\nprocess.env.EMP_AUTO_APPROVE = process.env.EMP_AUTO_APPROVE || \"1\";\n\nfunction activeProvider(): string {\n  try {\n    const cfg = config.load();\n    return cfg.settings.provider || \"bai\";\n  } catch {\n    return \"bai\";\n  }\n}\n\nfunction parseModelRef(ref: string, fallbackProvider: string) {\n  const v = String(ref || \"\").trim();\n  if (!v) return { provider: fallbackProvider, model: config.getDefaultModel(fallbackProvider) || \"\" };\n  if (v.includes(\"/\")) {\n    const [p, ...rest] = v.split(\"/\");\n    const pid = p.trim();\n    if ((config.PROVIDERS as any)[pid]) return { provider: pid, model: rest.join(\"/\").trim() };\n  }\n  return { provider: fallbackProvider, model: v };\n}\n\nfunction buildSystem(eff: string, planMode: boolean) {\n  let base = \"You are EMP, a calm capable coding agent inside EMP Web. You live in the user project workspace. Be concise, warm, decisive. Use tools boldly. Verify before claiming done. Use markdown headings, bold, code blocks and tables.\";\n  try {\n    const pi = skills.projectInstructions();\n    if (pi) base += \"\\n\\n\" + pi;\n  } catch {}\n  try {\n    const lev = effortMod.normalize(eff || effortMod.getConfig());\n    const cfg = effortMod.forLevel(lev);\n    if (cfg && cfg.systemAddendum) base += \"\\n\\n\" + cfg.systemAddendum + \" [effort=\" + lev + \"]\";\n  } catch {}\n  try {\n    const sk = skills.skillsBlock();\n    if (sk) base += \"\\n\\n\" + sk;\n  } catch {}\n  try {\n    base += \"\\n\\nCURRENT ENVIRONMENT:\\n- Workspace: \" + workspace.getWorkspace() + \"\\n- Platform: \" + process.platform + \" (\" + process.arch + \")\";\n  } catch {}\n  if (planMode) base += \"\\n\\nPLAN MODE: You are a read-only explorer. You CANNOT write, edit, delete, or create files, and you cannot run mutating commands \u2014 they are hard-blocked. Use ONLY reading tools (list_files, search_files, grep, glob, read_file, git_status, git_log, web_search, web_fetch) to explore and understand. Then produce a clear numbered implementation plan with todo_write and STOP. Do not attempt any changes.\";\n  return base;\n}\n\nfunction realTodos() {\n  try {\n    const list = tools.getTodos() || [];\n    return list.map((t: any, i: number) => ({ id: \"todo-\" + i, label: t.content || t.label || \"task\", status: t.status === \"in_progress\" ? \"active\" : t.status === \"completed\" ? \"completed\" : \"pending\" }));\n  } catch { return []; }\n}\n\nfunction settingsState() {\n  let ws = process.cwd();\n  try { ws = workspace.getWorkspace(); } catch {}\n  return { effort: effortMod.getConfig(), trust: process.env.EMP_AUTO_APPROVE === \"1\", workspace: ws };\n}\n\nconst pendingWaits = new Map<string, { kind: string; resolve: (v: any) => void }>();\nlet waitSeq = 1;\nconst alwaysAllow = new Set<string>();\nfunction createWait(kind: string, timeoutMs: number) {\n  const id = \"w\" + (waitSeq++) + \"-\" + Date.now().toString(36);\n  const promise = new Promise<any>((resolve) => {\n    const to = setTimeout(() => { pendingWaits.delete(id); resolve(null); }, timeoutMs || 300000);\n    pendingWaits.set(id, { kind, resolve: (v: any) => { clearTimeout(to); pendingWaits.delete(id); resolve(v); } });\n  });\n  return { id, promise };\n}\nfunction answerWait(id: string, value: any) {\n  const w = pendingWaits.get(String(id));\n  if (!w) return false;\n  w.resolve(value);\n  return true;\n}\nfunction toolDetail(name: string, args: any) {\n  try {\n    if (/^run_/.test(name) && args.command) return String(args.command).slice(0, 220);\n    if (args.path) return String(args.path).slice(0, 220);\n    if (args.pattern) return String(args.pattern).slice(0, 120);\n    if (args.url) return String(args.url).slice(0, 220);\n  } catch {}\n  return \"\";\n}\nfunction serializeResult(r: any) {\n  try {\n    return JSON.stringify(r ?? {}).slice(0, 12000);\n  } catch {\n    return \"{}\";\n  }\n}\n\nfunction userContent(prompt: string, attachments: any[], hasVision: boolean) {\n  const parts: any[] = [];\n  const files: string[] = [];\n  const seen: string[] = [];\n  const ocrJobs: any[] = [];\n  for (const a of attachments || []) {\n    if (!a) continue;\n    if (a.kind === \"image\" && a.base64) {\n      seen.push(a.name + \" (\" + Math.round((a.size || 0) / 1024) + \" KB image)\");\n      if (hasVision) parts.push({ type: \"image_url\", image_url: { url: \"data:\" + (a.mime || \"image/png\") + \";base64,\" + a.base64 } });\n      else ocrJobs.push(a);\n    } else if (a.text) {\n      seen.push(a.name + \" (\" + Math.round((a.size || 0) / 1024) + \" KB file)\");\n      files.push(\"File \" + (a.name || \"upload\") + \":\\n\" + String(a.text).slice(0, 20000));\n    }\n  }\n  let text = String(prompt || \"\");\n  if (seen.length) {\n    text += \"\\n\\n[User uploaded \" + seen.length + \" attachment(s): \" + seen.join(\", \") + \" \u2014 \" + (hasVision ? \"the image(s) are attached below and you CAN see them; look at them and use what they show.\" : \"this model has no vision, so their text content was extracted with OCR / file reading and follows below.\") + \"]\";\n  }\n  if (files.length) text += \"\\n\\n\" + files.join(\"\\n\\n\");\n  if (ocrJobs.length) text += \"\\n\\nOCR_ANNOTATIONS_PLACEHOLDER\";\n  if (!parts.length) return { text, ocrJobs, hasImageParts: false };\n  parts.unshift({ type: \"text\", text: text.replace(\"\\n\\nOCR_ANNOTATIONS_PLACEHOLDER\", \"\") });\n  return { parts, ocrJobs, hasImageParts: true };\n}\n\nconst VISION_RE = /(gpt-4o|gpt-4\\.1|gpt-4-turbo|gpt-4\\.|o3|o4-mini|chatgpt|claude|gemini|gemma-3|llava|vision|\\bvl\\b|-vl|vlai|pixtral|qvq|internvl|molmo|glm-4v|glm-4\\.|kimi|minicpm-v|deepseek-vl|grok-2|grok-3|grok-4|llama-3\\.2|llama-4|mistral-small-3|nemo|nemotron.*vl|philipp|mulberry|cogvlm|fuyu)/i;\nfunction hasVision(provider: string, model: string) {\n  const m = String(model || \"\");\n  if (VISION_RE.test(m)) return true;\n  if (/^(gemini|claude|openai|zai|cohere|mistral|groq|cerebras)$/i.test(String(provider || \"\"))) {\n    return /(flash|pro|sonnet|opus|haiku|small|large|4o|70b|8b|vision)/i.test(m);\n  }\n  return false;\n}\n\nlet ocrModPromise: Promise<any> | null = null;\nfunction ensureOcrMod(emit?: (ev: any) => void) {\n  if (ocrModPromise) return ocrModPromise;\n  ocrModPromise = (async () => {\n    const depsDir = path.join(os.homedir(), \".emp\", \"web-deps\");\n    const pkgJson = path.join(depsDir, \"node_modules\", \"tesseract.js\", \"package.json\");\n    if (!fs.existsSync(pkgJson)) {\n      try { fs.mkdirSync(depsDir, { recursive: true }); } catch {}\n      if (emit) emit({ type: \"notice\", text: \"Model has no vision \u2014 installing one-time OCR engine (~20s)...\" });\n      const { spawnSync } = require(\"child_process\");\n      const npmCmd = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n      const r = spawnSync(npmCmd, [\"install\", \"--no-audit\", \"--no-fund\", \"--prefix\", depsDir, \"tesseract.js@7\"], { shell: process.platform === \"win32\", timeout: 240000 });\n      if (r.status !== 0 || !fs.existsSync(pkgJson)) throw new Error(\"Could not install the OCR engine (npm failed)\");\n      if (emit) emit({ type: \"notice\", text: \"OCR engine ready\" });\n    }\n    const req = require(\"module\").createRequire(pkgJson);\n    return req(\"tesseract.js\");\n  })().catch((e: any) => { ocrModPromise = null; throw e; });\n  return ocrModPromise;\n}\n\nasync function ocrImage(a: any, emit?: (ev: any) => void) {\n  const tess = await ensureOcrMod(emit);\n  if (emit) emit({ type: \"notice\", text: \"Reading text from \" + (a.name || \"image\") + \" with OCR...\" });\n  const worker = await tess.createWorker(\"eng\");\n  try {\n    const dataUrl = \"data:\" + (a.mime || \"image/png\") + \";base64,\" + a.base64;\n    const { data } = await worker.recognize(dataUrl);\n    return String((data && data.text) || \"\").trim();\n  } finally {\n    try { await worker.terminate(); } catch {}\n  }\n}\n\nasync function runEmpTurn(opts: {\n  prompt: string;\n  provider: string;\n  apiKey: string;\n  model: string;\n  messages: any[];\n  attachments: any[];\n  planMode: boolean;\n  eff: string;\n  emit: (ev: any) => void;\n}) {\n  const schemas = tools.getSchemas();\n  tools.setPlanLocked(!!opts.planMode);\n  const sys = buildSystem(opts.eff, !!opts.planMode);\n  const payload = () => [{ role: \"system\", content: sys }, ...opts.messages];\n  let finalText = \"\";\n  let usedTools: string[] = [];\n  let toolsUsed = false;\n  let taskCompleteCalled = false;\n  let autoContinues = 0;\n  const MAX_ROUNDS = 10;\n  for (let round = 0; round < MAX_ROUNDS; round++) {\n    const result = await providers.chat({\n      provider: opts.provider,\n      apiKey: opts.apiKey,\n      model: opts.model,\n      messages: payload(),\n      liveMessages: opts.messages,\n      tools: schemas,\n      stream: true,\n      onDelta: (t: string) => opts.emit({ type: \"chunk\", text: t }),\n      onReasoning: (t: string) => { try { opts.emit({ type: \"reasoning\", text: t }); } catch {} },\n    });\n    finalText = result.content || \"\";\n    const calls = result.toolCalls || [];\n    if (!calls.length) {\n      opts.messages.push({ role: \"assistant\", content: finalText });\n      if (toolsUsed && !taskCompleteCalled && autoContinues < 30) {\n        const openTodos = (tools.getTodos() || []).filter((t: any) => t.status === \"pending\" || t.status === \"in_progress\");\n        if (openTodos.length) {\n          autoContinues++;\n          const openList = openTodos.map((t: any) => \"- \" + t.status + \": \" + (t.content || \"\")).join(\"\\n\");\n          opts.messages.push({ role: \"user\", content: \"[internal: your todo list still has open items:\\n\" + openList + \"\\nFinish ALL of them, then call task_complete with a short summary. Do not stop early.]\" });\n          continue;\n        }\n        if (finalText.trim().length < 20) {\n          autoContinues++;\n          opts.messages.push({ role: \"user\", content: \"[internal: the task is not marked complete yet. Continue working until the request is fully done, then call task_complete with a summary. Do not stop early.]\" });\n          continue;\n        }\n      }\n      break;\n    }\n    const natives = calls.filter((tc: any) => !/^emp-/.test(String(tc.id || \"\")));\n    const amsg: any = { role: \"assistant\", content: result.content || \"\" };\n    if (natives.length) {\n      amsg.tool_calls = natives.map((tc: any) => ({\n        id: tc.id,\n        type: \"function\",\n        function: { name: tc.name, arguments: JSON.stringify(tc.arguments || {}) },\n      }));\n    }\n    opts.messages.push(amsg);\n    for (const tc of calls) {\n      usedTools.push(tc.name);\n      toolsUsed = true;\n      if (tc.name === \"ask_question\") {\n        opts.emit({ type: \"tool_call\", id: tc.id, name: tc.name, args: tc.arguments || {} });\n        const qa = tc.arguments || {};\n        const questions = Array.isArray(qa.questions) && qa.questions.length ? qa.questions : [{ question: qa.question || \"Clarify?\" }];\n        const w = createWait(\"ask\", 300000);\n        opts.emit({ type: \"ask\", id: w.id, toolCallId: tc.id, questions: questions.map((q: any) => ({ question: q.question || q.label || \"\", options: Array.isArray(q.options) ? q.options.map((o: any) => (typeof o === \"string\" ? { label: o } : { label: o.label || JSON.stringify(o), description: o.description || \"\" })) : [] })) });\n        const given = await w.promise;\n        const out: any = { success: true, answers: Array.isArray(given) ? given : [\"(no answer \u2014 proceed with a sensible default)\"] };\n        opts.emit({ type: \"tool_result\", id: tc.id, name: tc.name, result: out });\n        try { opts.emit({ type: \"todos\", todos: realTodos() }); } catch {}\n        opts.messages.push({ role: \"user\", content: \"[tool result for \" + tc.name + \"]\\n\" + serializeResult(out) });\n        continue;\n      }\n      const tool = tools.get(tc.name);\n      if (!tool) {\n        const r = { success: false, error: \"Unknown tool: \" + tc.name };\n        opts.emit({ type: \"tool_result\", id: tc.id, name: tc.name, result: r });\n        opts.messages.push({ role: \"user\", content: \"[tool result for \" + tc.name + \"]\\n\" + serializeResult(r) });\n        continue;\n      }\n      const approval = tools.requireApprovalFor(tool, tc.arguments || {});\n      if (approval && !approval.blocked) {\n        const key = tc.name + \" \" + toolDetail(tc.name, tc.arguments || {});\n        const trusted = process.env.EMP_AUTO_APPROVE === \"1\";\n        let ok = alwaysAllow.has(key) || (trusted && !approval.alwaysAsk);\n        if (!ok) {\n          const w = createWait(\"permission\", 300000);\n          opts.emit({ type: \"permission\", id: w.id, toolCallId: tc.id, tool: tc.name, detail: toolDetail(tc.name, tc.arguments || {}), reason: approval.reason || \"\" });\n          const dec = await w.promise;\n          if (dec === \"always\") { alwaysAllow.add(key); ok = true; }\n          else ok = dec === \"once\";\n        }\n        if (!ok) {\n          const r = { success: false, denied: true, error: \"Permission denied: \" + (approval.reason || \"\") };\n          opts.emit({ type: \"tool_result\", id: tc.id, name: tc.name, result: r });\n          opts.messages.push({ role: \"user\", content: \"[tool result for \" + tc.name + \"]\\n\" + serializeResult(r) });\n          continue;\n        }\n      } else if (approval && approval.blocked) {\n        const r = { success: false, denied: true, blocked: true, error: \"Blocked: \" + (approval.reason || \"\") };\n        opts.emit({ type: \"tool_result\", id: tc.id, name: tc.name, result: r });\n        opts.messages.push({ role: \"user\", content: \"[tool result for \" + tc.name + \"]\\n\" + serializeResult(r) });\n        continue;\n      }\n      opts.emit({ type: \"tool_call\", id: tc.id, name: tc.name, args: tc.arguments || {} });\n      let out: any;\n      try {\n        const r = await tool.execute(tc.arguments || {});\n        out = { success: !(r && r.success === false), ...(r || {}) };\n        if (!out.success && !out.error) out.error = \"Tool execution failed\";\n      } catch (e: any) {\n        out = { success: false, error: (e && e.message) || String(e) };\n      }\n      opts.emit({ type: \"tool_result\", id: tc.id, name: tc.name, result: out });\n      try { opts.emit({ type: \"todos\", todos: realTodos() }); } catch {}\n      const body = serializeResult(out);\n      if (/^emp-/.test(String(tc.id || \"\"))) {\n        opts.messages.push({ role: \"user\", content: \"[tool result for \" + tc.name + \"]\\n\" + body });\n      } else {\n        opts.messages.push({ role: \"tool\", tool_call_id: tc.id, name: tc.name, content: body });\n      }\n      if (tc.name === \"task_complete\") { taskCompleteCalled = true; }\n    }\n    if (taskCompleteCalled) break;\n  }\n  return { text: finalText, usedTools };\n}\n\nasync function startServer() {\n  const app = express();\n  const PORT = Number(process.env.PORT || 3000);\n  app.use(express.json({ limit: \"25mb\" }));\n\n  app.get(\"/api/health\", (req, res) => {\n    let toolCount = 0;\n    let skillCount = 0;\n    try { toolCount = tools.getSchemas().length; } catch {}\n    try { skillCount = skills.listSkills().length; } catch {}\n    res.json({\n      status: \"ok\",\n      service: \"emp-web\",\n      workspace: (() => { try { return workspace.getWorkspace(); } catch { return process.cwd(); } })(),\n      providers: Object.keys(config.PROVIDERS || {}),\n      toolCount,\n      skillCount,\n    });\n  });\n\n  app.get(\"/api/providers\", (req, res) => {\n    const cfg = config.load();\n    const list = Object.entries(config.PROVIDERS || {}).map(([id, meta]: any) => ({\n      id,\n      name: meta.name || id,\n      hasKey: Boolean(config.getApiKey(id)),\n      defaultModel: config.getDefaultModel(id) || \"\",\n      models: ((cfg.providers && cfg.providers[id] && cfg.providers[id].models) || []).slice(0, 200),\n      active: (cfg.settings.provider || \"bai\") === id,\n    }));\n    res.json({ providers: list, active: cfg.settings.provider || \"bai\", workspace: workspace.getWorkspace(), effort: effortMod.getConfig() });\n  });\n\n  app.get(\"/api/models\", async (req, res) => {\n    const provider = String(req.query.provider || activeProvider());\n    try {\n      const cached = config.getCachedModels(provider) || [];\n      res.json({ provider, models: cached });\n    } catch (e: any) {\n      res.status(500).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/refresh\", async (req, res) => {\n    const provider = String(req.body.provider || activeProvider());\n    try {\n      const key = config.getApiKey(provider) || \"\";\n      const models = await providers.fetchModels(provider, key);\n      try {\n        const cfg = config.load();\n        if (!cfg.providers[provider]) cfg.providers[provider] = {};\n        cfg.providers[provider].models = models;\n        cfg.providers[provider].modelsFetchedAt = Date.now();\n        config.save();\n      } catch {}\n      res.json({ provider, models });\n    } catch (e: any) {\n      res.status(500).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/connect\", async (req, res) => {\n    const provider = String(req.body.provider || \"\").trim();\n    const apiKey = String(req.body.apiKey || \"\").trim();\n    if (!provider || !config.PROVIDERS[provider]) return res.status(400).json({ error: \"Unknown provider\" });\n    if (!apiKey) return res.status(400).json({ error: \"Missing apiKey\" });\n    config.setApiKey(provider, apiKey);\n    let models: string[] = [];\n    try {\n      models = await providers.fetchModels(provider, apiKey);\n      const cfg = config.load();\n      if (!cfg.providers[provider]) cfg.providers[provider] = {};\n      cfg.providers[provider].models = models;\n      cfg.providers[provider].modelsFetchedAt = Date.now();\n      config.save();\n    } catch (e: any) {\n      return res.json({ ok: true, provider, models: [], warning: e.message });\n    }\n    res.json({ ok: true, provider, models: models.slice(0, 300) });\n  });\n\n  app.post(\"/api/use\", (req, res) => {\n    const raw = String(req.body.model || \"\").trim();\n    const providerArg = String(req.body.provider || \"\").trim();\n    const fallback = providerArg || activeProvider();\n    const { provider, model } = parseModelRef(raw || providerArg, fallback);\n    if (!(config.PROVIDERS as any)[provider]) return res.status(400).json({ error: \"Unknown provider\" });\n    const cfg = config.load();\n    cfg.settings.provider = provider;\n    if (model) config.setDefaultModel(provider, model);\n    config.save();\n    res.json({ ok: true, provider, model: config.getDefaultModel(provider) || model });\n  });\n\n  app.get(\"/api/tools\", (req, res) => {\n    const schemas = tools.getSchemas().map((t: any) => ({\n      name: t.function.name,\n      description: t.function.description || \"\",\n      params: Object.keys((t.function.parameters && t.function.parameters.properties) || {}),\n    }));\n    res.json({ tools: schemas });\n  });\n\n  app.get(\"/api/skills\", (req, res) => {\n    res.json({ skills: skills.listSkills() });\n  });\n\n  app.post(\"/api/skills/add\", async (req, res) => {\n    try {\n      const body = req.body || {};\n      let name = \"\";\n      let content = String(body.content || \"\");\n      const want = String(body.name || \"\").trim().toLowerCase().replace(/[^a-z0-9-_ ]/g, \"\").replace(/\\s+/g, \"-\").slice(0, 60);\n      name = want;\n      if (body.url) {\n        const u = String(body.url).trim();\n        let m = u.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/blob\\/(.+)$/i);\n        const raw = m ? \"https://raw.githubusercontent.com/\" + m[1] + \"/\" + m[2] + \"/\" + m[3] : (/^https?:\\/\\/(raw\\.githubusercontent|gist\\.githubusercontent)\\.com\\/.+/i.test(u) ? u : \"\");\n        if (!raw) throw new Error(\"Use a GitHub file link, raw.githubusercontent.com link, or a gist link\");\n        const r = await fetch(raw, { headers: { \"User-Agent\": \"emp-web\" }, redirect: \"follow\" });\n        if (!r.ok) throw new Error(\"HTTP \" + r.status + \" fetching skill\");\n        content = await r.text();\n        if (!content.trim()) throw new Error(\"Fetched file is empty\");\n        if (!name) {\n          const h1 = content.match(/^#\\s+(.+)$/m);\n          const h2 = h1 ? null : content.match(/^##\\s+(.+)$/m);\n          const title = h1 ? h1[1] : h2 ? h2[1] : \"\";\n          if (title) {\n            name = title.trim().toLowerCase().replace(/[^a-z0-9-_ ]/g, \"\").replace(/\\s+/g, \"-\").slice(0, 60);\n          } else {\n            const line = content.split(\"\\n\").map((l) => l.trim()).find((l) => l && !l.startsWith(\"#\") && !l.startsWith(\">\") && !l.startsWith(\"|\") && !l.startsWith(\"---\"));\n            name = line ? line.split(/\\s+/).slice(0, 4).join(\" \").toLowerCase().replace(/[^a-z0-9-_ ]/g, \"\").replace(/\\s+/g, \"-\").slice(0, 60) : \"\";\n          }\n        }\n        if (!name) {\n          const tail = (raw.split(\"/\").pop() || \"skill\").replace(/\\.md$/i, \"\");\n          name = tail.toLowerCase().replace(/[^a-z0-9-_]/g, \"-\").slice(0, 60);\n        }\n      }\n      if (!name) throw new Error(\"Could not determine a skill name \u2014 add one\");\n      if (!content.trim()) throw new Error(\"Skill content is empty\");\n      const dir = path.join(os.homedir(), \".emp\", \"skills\", name);\n      try { fs.rmSync(dir, { recursive: true, force: true }); } catch {}\n      fs.mkdirSync(dir, { recursive: true });\n      fs.writeFileSync(path.join(dir, \"SKILL.md\"), content.slice(0, 400000), \"utf8\");\n      res.json({ ok: true, skill: name, skills: skills.listSkills() });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/skills/remove\", (req, res) => {\n    try {\n      const name = String(req.body.name || \"\").trim().toLowerCase().replace(/[^a-z0-9-_]/g, \"\").slice(0, 60);\n      const dir = path.join(os.homedir(), \".emp\", \"skills\", name);\n      fs.rmSync(dir, { recursive: true, force: true });\n      res.json({ ok: true, skills: skills.listSkills() });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.get(\"/api/todos\", (req, res) => {\n    res.json({ todos: realTodos() });\n  });\n\n  app.get(\"/api/settings\", (req, res) => {\n    res.json(settingsState());\n  });\n\n  app.get(\"/api/context\", (req, res) => {\n    try {\n      const s = req.query.sessionId ? session.load(String(req.query.sessionId)) : null;\n      const messages = (s && s.messages) || [];\n      const schemas = tools.getSchemas();\n      const u = context.usagePercent(messages, s ? s.provider : activeProvider(), (s && s.model) || \"\", { tools: schemas });\n      res.json({ percent: u.percent || 0, used: u.used || 0, limit: u.limit || 0, messages: messages.length });\n    } catch (e: any) {\n      res.json({ percent: 0, used: 0, limit: 0, messages: 0 });\n    }\n  });\n\n  app.get(\"/api/agents\", (req, res) => {\n    res.json({\n      agents: subagentsMod.list().slice(-20).map((t: any) => ({ id: t.id, description: t.description, status: t.status })),\n      bg: bg.list().slice(-20).map((t: any) => ({ id: t.id, command: String(t.command).slice(0, 80), status: t.status })),\n    });\n  });\n\n  app.post(\"/api/effort\", (req, res) => {\n    res.json({ ok: true, effort: effortMod.setConfig(String(req.body.level || \"medium\")) });\n  });\n\n  app.post(\"/api/trust\", (req, res) => {\n    process.env.EMP_AUTO_APPROVE = req.body.on === false || req.body.on === \"off\" ? \"0\" : \"1\";\n    res.json({ ok: true, trust: process.env.EMP_AUTO_APPROVE === \"1\" });\n  });\n\n  app.post(\"/api/workspace\", (req, res) => {\n    const dir = String(req.body.path || \"\").trim();\n    if (!dir) {\n      let ws = process.cwd();\n      try { ws = workspace.getWorkspace(); } catch {}\n      return res.json({ workspace: ws });\n    }\n    try {\n      workspace.setWorkspace(dir);\n      res.json({ ok: true, workspace: workspace.getWorkspace() });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/providers/add\", (req, res) => {\n    const id = String(req.body.id || \"\").trim().toLowerCase().replace(/[^a-z0-9_-]/g, \"\");\n    const baseUrl = String(req.body.baseUrl || \"\").trim();\n    if (!id || !/^https?:\\/\\//.test(baseUrl)) return res.status(400).json({ error: \"Need an id and an http(s) baseUrl\" });\n    const modelsRaw = String(req.body.models || \"\").trim();\n    const models = /^https?:\\/\\//.test(modelsRaw) ? [] : modelsRaw.split(\",\").map((s) => s.trim()).filter(Boolean);\n    try {\n      config.addCustomProvider(id, { name: String(req.body.name || id), baseUrl, apiKey: String(req.body.apiKey || \"\"), modelsUrl: /^https?:\\/\\//.test(modelsRaw) ? modelsRaw : \"\", models });\n      res.json({ ok: true, provider: id });\n    } catch (e: any) {\n      res.status(500).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/providers/remove\", (req, res) => {\n    res.json({ ok: config.removeCustomProvider(String(req.body.id || \"\")) });\n  });\n\n  app.post(\"/api/approve\", (req, res) => {\n    res.json({ ok: answerWait(req.body.id, req.body.decision === \"always\" ? \"always\" : req.body.decision === \"once\" ? \"once\" : \"deny\") });\n  });\n\n  app.post(\"/api/answer\", (req, res) => {\n    res.json({ ok: answerWait(req.body.id, Array.isArray(req.body.answers) ? req.body.answers : [String(req.body.answers ?? \"\")]) });\n  });\n\n  // \u2500\u2500 MCP servers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  app.get(\"/api/mcp\", (req, res) => {\n    try {\n      const servers = mcpMod.configuredServers();\n      const running = mcpMod.status();\n      const merged = servers.map((s: any) => {\n        const r = running.find((x: any) => x.name === s.name);\n        return { ...s, connected: r ? r.ready : false, tools: r ? r.tools : 0, err: r ? r.err : null };\n      });\n      res.json({ servers: merged, configPath: mcpMod.configPath() });\n    } catch (e: any) {\n      res.status(500).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/mcp/add\", async (req, res) => {\n    try {\n      const { name, command, args, cwd, env } = req.body || {};\n      if (!name || !command) return res.status(400).json({ error: \"name and command are required\" });\n      const parsedArgs = typeof args === \"string\"\n        ? args.split(/\\s+/).filter(Boolean)\n        : Array.isArray(args) ? args : [];\n      const parsedEnv: Record<string, string> = {};\n      if (env && typeof env === \"string\") {\n        for (const line of env.split(\"\\n\")) {\n          const m = line.match(/^([^=]+)=(.*)$/);\n          if (m) parsedEnv[m[1].trim()] = m[2].trim();\n        }\n      }\n      const key = mcpMod.addServer(name, {\n        command: String(command).trim(),\n        args: parsedArgs,\n        cwd: cwd ? String(cwd).trim() : undefined,\n        env: Object.keys(parsedEnv).length ? parsedEnv : undefined,\n      });\n      res.json({ ok: true, name: key, servers: mcpMod.configuredServers() });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/mcp/remove\", (req, res) => {\n    try {\n      const name = String(req.body.name || \"\").trim();\n      if (!name) return res.status(400).json({ error: \"name is required\" });\n      const ok = mcpMod.removeServer(name);\n      res.json({ ok, servers: mcpMod.configuredServers() });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.post(\"/api/mcp/test\", async (req, res) => {\n    try {\n      const name = String(req.body.name || \"\").trim();\n      const servers = mcpMod.configuredServers();\n      const srv = servers.find((s: any) => s.name === name);\n      if (!srv) return res.status(404).json({ error: \"Server not found\" });\n      // Load full config to get env\n      const cfg = mcpMod.loadConfig();\n      const full = (cfg.servers || {})[name] || {};\n      const r = await (mcpMod as any).startServer ? (mcpMod as any).startServer(name, full)\n        : { ok: false, error: \"startServer not exposed\" };\n      res.json({ ok: r.ok, tools: r.tools ? r.tools.length : 0, error: r.error || null });\n    } catch (e: any) {\n      res.status(500).json({ error: e.message });\n    }\n  });\n\n  app.get(\"/api/browse\", (req, res) => {\n    try {\n      let ws = process.cwd();\n      try { ws = workspace.getWorkspace(); } catch {}\n      const rel = String(req.query.path || \".\");\n      const abs = path.resolve(ws, rel);\n      if (!tools.insideWorkspace(abs)) return res.status(400).json({ error: \"Outside workspace\" });\n      const entries = fs.readdirSync(abs, { withFileTypes: true }).slice(0, 300).map((e) => ({\n        name: e.name,\n        type: e.isDirectory() ? \"dir\" : \"file\",\n        path: path.relative(ws, path.join(abs, e.name)).split(path.sep).join(\"/\"),\n      })).sort((a, b) => (a.type === b.type ? a.name.localeCompare(b.name) : a.type === \"dir\" ? -1 : 1));\n      res.json({ path: path.relative(ws, abs).split(path.sep).join(\"/\") || \".\", entries });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message });\n    }\n  });\n\n  app.get(\"/api/sessions\", (req, res) => {\n    res.json({ sessions: session.list().slice(0, 100) });\n  });\n\n  app.delete(\"/api/sessions/:id\", (req, res) => {\n    try {\n      const file = session.pathFor(String(req.params.id));\n      fs.unlinkSync(file);\n      res.json({ ok: true });\n    } catch (e: any) {\n      res.status(400).json({ error: e.message || \"Could not delete session\" });\n    }\n  });\n\n  app.post(\"/api/sessions/new\", (req, res) => {\n    const provider = activeProvider();\n    const s = session.draft(provider, config.getDefaultModel(provider) || \"\", effortMod.getConfig());\n    res.json({ session: { id: s.id, name: s.name, provider: s.provider, model: s.model } });\n  });\n\n  app.get(\"/api/sessions/:id\", (req, res) => {\n    const s = session.load(req.params.id);\n    if (!s) return res.status(404).json({ error: \"Not found\" });\n    res.json({ session: { id: s.id, name: s.name, provider: s.provider, model: s.model, messages: (s.messages || []).slice(-60) } });\n  });\n\n  app.post(\"/api/upload\", (req, res) => {\n    const body = req.body || {};\n    const b64 = String((body.base64 || \"\").split(\",\").pop() || \"\");\n    if (!b64) return res.status(400).json({ error: \"Missing base64\" });\n    const buf = Buffer.from(b64, \"base64\");\n    if (buf.length > 25 * 1024 * 1024) return res.status(400).json({ error: \"File too large (25MB max)\" });\n    const fname = String(body.name || \"upload.bin\");\n    const ext = path.extname(fname).toLowerCase();\n    if ([\".png\", \".jpg\", \".jpeg\", \".gif\", \".webp\", \".bmp\"].includes(ext)) {\n      return res.json({ attachment: { id: \"a\" + Date.now() + \"-\" + Math.floor(Math.random() * 999), kind: \"image\", name: fname, mime: body.mime || \"image/png\", size: buf.length, base64: buf.toString(\"base64\") } });\n    }\n    if (ext === \".zip\") {\n      let listing = \"\";\n      try {\n        const zipData = buf;\n        const sig = zipData.slice(0, 4).toString(\"binary\");\n        if (sig !== \"PK\\u0003\\u0004\") throw new Error(\"Not a valid zip file\");\n        const entries: { name: string; compSize: number }[] = [];\n        let off = 0;\n        const bufLen = zipData.length;\n        while (off < bufLen - 4) {\n          if (zipData[off] === 0x50 && zipData[off + 1] === 0x4b && zipData[off + 2] === 0x03 && zipData[off + 3] === 0x04) {\n            const nameLen = zipData.readUInt16LE(off + 26);\n            const extraLen = zipData.readUInt16LE(off + 28);\n            const compSize = zipData.readUInt32LE(off + 18);\n            const name = zipData.slice(off + 30, off + 30 + nameLen).toString(\"utf8\");\n            if (!name.endsWith(\"/\")) entries.push({ name, compSize });\n            off += 30 + nameLen + extraLen + compSize;\n          } else off++;\n        }\n        listing = entries.slice(0, 150).map((e) => e.name + \" (\" + Math.max(1, Math.round(e.compSize / 1024)) + \" KB)\").join(\"\\n\");\n        listing = entries.length + \" files in zip:\\n\" + listing;\n      } catch (e: any) {\n        listing = \"Could not list zip contents: \" + e.message;\n      }\n      return res.json({ attachment: { id: \"a\" + Date.now() + \"-\" + Math.floor(Math.random() * 999), kind: \"file\", name: fname, mime: \"application/zip\", size: buf.length, text: \"[Zip archive \" + fname + \" \u2014 the AI can ask the user to extract it; contents listing:]\\n\" + listing } });\n    }\n    return res.json({ attachment: { id: \"a\" + Date.now() + \"-\" + Math.floor(Math.random() * 999), kind: \"file\", name: fname, mime: body.mime || \"application/octet-stream\", size: buf.length, text: buf.toString(\"utf8\").slice(0, 60000) } });\n  });\n\n  function loadSessionMessages(sessionId: string, provider: string, model: string) {\n    if (!sessionId) return session.draft(provider, model, effortMod.getConfig());\n    const s = session.load(sessionId);\n    if (s) return s;\n    return session.draft(provider, model, effortMod.getConfig());\n  }\n\n  app.post(\"/api/chat/stream\", async (req, res) => {\n    try {\n      const { prompt, mode, model, provider, history, sessionId, attachments, effort, planMode } = req.body || {};\n      if (!prompt || typeof prompt !== \"string\") return res.status(400).json({ error: \"Missing prompt\" });\n      res.setHeader(\"Content-Type\", \"text/event-stream\");\n      res.setHeader(\"Cache-Control\", \"no-cache\");\n      res.setHeader(\"Connection\", \"keep-alive\");\n      (res as any).flushHeaders?.();\n      const send = (ev: any) => res.write(\"data: \" + JSON.stringify(ev) + \"\\n\\n\");\n      const prov0 = String(provider || activeProvider());\n      const { provider: prov, model: mod0 } = parseModelRef(String(model || \"\"), prov0);\n      const apiKey = config.getApiKey(prov) || \"\";\n      const eff = effortMod.normalize(String(effort || effortMod.getConfig()));\n      const sess = loadSessionMessages(String(sessionId || \"\"), prov, mod0 || config.getDefaultModel(prov) || \"\");\n      const messages: any[] = Array.isArray(sess.messages) && sess.messages.length ? sess.messages : [];\n      if (Array.isArray(history) && !messages.length) {\n        for (const h of history.slice(-20)) {\n          if (h.role === \"user\") messages.push({ role: \"user\", content: String(h.content || \"\").slice(0, 20000) });\n          else if (h.role === \"agent\") messages.push({ role: \"assistant\", content: String(h.content || \"\").slice(0, 20000) });\n        }\n      }\n      messages.push({ role: \"user\", content: await (async () => {\n        const vision = hasVision(prov, mod0 || config.getDefaultModel(prov) || \"\");\n        const built = userContent(prompt, attachments || [], vision);\n        for (const a of built.ocrJobs) {\n          try {\n        const txt = await ocrImage(a);\n            built.text += \"\\n\\n[OCR of uploaded image \" + (a.name || \"\") + \"]\\n\" + (txt || \"(no readable text found in the image)\");\n          } catch (e: any) {\n            built.text += \"\\n\\n[OCR failed for \" + (a.name || \"image\") + \": \" + String(e.message || e).slice(0, 120) + \"]\";\n          }\n        }\n        return built.hasImageParts ? built.parts : built.text;\n      })() });\n      const isPlan = Boolean(planMode) || String(mode || \"\") === \"Plan\";\n      send({ type: \"init\", todos: realTodos(), sessionId: sess.id, provider: prov, model: mod0 });\n      try {\n        const { text, usedTools } = await runEmpTurn({\n          prompt, provider: prov, apiKey, model: mod0 || config.getDefaultModel(prov) || \"\",\n          messages, attachments: attachments || [], planMode: isPlan, eff,\n          emit: send,\n        });\n        sess.messages = messages;\n        try { session.save(sess); } catch {}\n        send({ type: \"done\", sessionId: sess.id, usedTools });\n        return res.end();\n      } catch (e: any) {\n        send({ type: \"error\", error: (e && e.message) || \"EMP turn failed\" });\n        return res.end();\n      }\n    } catch (e: any) {\n      res.write(\"data: \" + JSON.stringify({ type: \"error\", error: (e && e.message) || \"failed\" }) + \"\\n\\n\");\n      res.end();\n    }\n  });\n\n  app.post(\"/api/chat\", async (req, res) => {\n    try {\n      const { prompt, mode, model, provider, history, sessionId, attachments, effort, planMode } = req.body || {};\n      if (!prompt || typeof prompt !== \"string\") return res.status(400).json({ error: \"Missing prompt\" });\n      const chunks: string[] = [];\n      const toolCalls: any[] = [];\n      const prov0 = String(provider || activeProvider());\n      const { provider: prov, model: mod0 } = parseModelRef(String(model || \"\"), prov0);\n      const apiKey = config.getApiKey(prov) || \"\";\n      const eff = effortMod.normalize(String(effort || effortMod.getConfig()));\n      const sess = loadSessionMessages(String(sessionId || \"\"), prov, mod0 || config.getDefaultModel(prov) || \"\");\n      const messages: any[] = Array.isArray(sess.messages) && sess.messages.length ? sess.messages : [];\n      messages.push({ role: \"user\", content: await (async () => {\n        const vision = hasVision(prov, mod0 || config.getDefaultModel(prov) || \"\");\n        const built = userContent(prompt, attachments || [], vision);\n        for (const a of built.ocrJobs) {\n          try {\n            const txt = await ocrImage(a);\n            built.text += \"\\n\\n[OCR of uploaded image \" + (a.name || \"\") + \"]\\n\" + (txt || \"(no readable text found in the image)\");\n          } catch (e: any) {\n            built.text += \"\\n\\n[OCR failed for \" + (a.name || \"image\") + \": \" + String(e.message || e).slice(0, 120) + \"]\";\n          }\n        }\n        return built.hasImageParts ? built.parts : built.text;\n      })() });\n      const isPlan = Boolean(planMode) || String(mode || \"\") === \"Plan\";\n      const { text, usedTools } = await runEmpTurn({\n        prompt, provider: prov, apiKey, model: mod0 || config.getDefaultModel(prov) || \"\",\n        messages, attachments: attachments || [], planMode: isPlan, eff,\n        emit: (ev: any) => {\n          if (ev.type === \"chunk\") chunks.push(ev.text);\n          if (ev.type === \"tool_call\") toolCalls.push(ev);\n        },\n      });\n      sess.messages = messages;\n      try { session.save(sess); } catch {}\n      return res.json({ text, sessionId: sess.id, usedTools, subtasks: [{ id: \"t1\", label: \"done\", status: \"completed\" }] });\n    } catch (e: any) {\n      res.status(500).json({ error: (e && e.message) || \"failed\" });\n    }\n  });\n\n  if (process.env.NODE_ENV !== \"production\") {\n    const vite = await createViteServer({ server: { middlewareMode: true }, appType: \"spa\" });\n    app.use(vite.middlewares);\n  } else {\n    const distPath = path.join(process.cwd(), \"dist\");\n    app.use(express.static(distPath));\n    app.get(\"*\", (req, res) => {\n      res.sendFile(path.join(distPath, \"index.html\"));\n    });\n  }\n\n  app.listen(PORT, \"0.0.0.0\", () => {\n    console.log(\"EMP Web running on http://localhost:\" + PORT);\n  });\n}\n\nstartServer();\n"],
  "mappings": "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",
  "names": ["path", "os", "fs", "hasVision", "out", "express", "createViteServer"]
}
