ttycast

Build log

nerves_system_qemu_aarch64

ttycast 0.1.0 · fail · run ttycast-0.1.0-1791145447160
335 of 335 lines
1Resolving Hex dependencies...2Resolution completed in 0.114s3Unchanged:4  castore 1.0.215  circular_buffer 1.1.06  elixir_make 0.10.07  ghostty 0.4.98  interactive_cmd 0.1.49  jason 1.4.510  json_codec 0.3.111  json_spec 1.2.012  nerves 2.0.0-pre.213  nerves_discovery 0.1.514  nerves_logging 0.2.415  nerves_runtime 0.13.1316  nerves_system_bbb 2.30.217  nerves_system_br 1.34.418  nerves_system_mangopi_mq_pro 0.17.219  nerves_system_qemu_aarch64 0.4.220  nerves_system_rpi0 2.1.221  nerves_system_rpi4 2.1.222  nerves_system_rpi5 2.1.223  nerves_system_trellis 0.5.024  nerves_system_x86_64 1.34.225  nerves_toolchain_aarch64_nerves_linux_gnu 15.3.126  nerves_toolchain_armv6_nerves_linux_gnueabihf 15.3.127  nerves_toolchain_armv7_nerves_linux_gnueabihf 15.3.128  nerves_toolchain_riscv64_nerves_linux_gnu 15.3.129  nerves_toolchain_x86_64_nerves_linux_musl 15.3.130  nerves_uevent 0.1.731  oxc 0.18.132  property_table 0.3.433  ring_logger 0.11.734  rustler_precompiled 0.10.035  tablet 0.3.336  toolshed 0.5.037  ttycast 0.1.038  uboot_env 1.0.239  zigler_precompiled 0.1.640* Getting ttycast (Hex package)41* Getting nerves (Hex package)42* Getting ring_logger (Hex package)43* Getting toolshed (Hex package)44* Getting nerves_runtime (Hex package)45* Getting nerves_system_bbb (Hex package)46* Getting nerves_system_mangopi_mq_pro (Hex package)47* Getting nerves_system_qemu_aarch64 (Hex package)48* Getting nerves_system_rpi0 (Hex package)49* Getting nerves_system_rpi4 (Hex package)50* Getting nerves_system_rpi5 (Hex package)51* Getting nerves_system_trellis (Hex package)52* Getting nerves_system_x86_64 (Hex package)53* Getting nerves_system_br (Hex package)54* Getting nerves_toolchain_x86_64_nerves_linux_musl (Hex package)55* Getting nerves_toolchain_armv7_nerves_linux_gnueabihf (Hex package)56* Getting nerves_toolchain_aarch64_nerves_linux_gnu (Hex package)57* Getting nerves_toolchain_armv6_nerves_linux_gnueabihf (Hex package)58* Getting nerves_toolchain_riscv64_nerves_linux_gnu (Hex package)59* Getting nerves_logging (Hex package)60* Getting nerves_uevent (Hex package)61* Getting uboot_env (Hex package)62* Getting elixir_make (Hex package)63* Getting property_table (Hex package)64* Getting circular_buffer (Hex package)65* Getting interactive_cmd (Hex package)66* Getting nerves_discovery (Hex package)67* Getting tablet (Hex package)68* Getting ghostty (Hex package)69* Getting jason (Hex package)70* Getting oxc (Hex package)71* Getting zigler_precompiled (Hex package)72* Getting castore (Hex package)73* Getting json_codec (Hex package)74* Getting rustler_precompiled (Hex package)75* Getting json_spec (Hex package)76==> nerves_system_br77Generated nerves_system_br app78==> circular_buffer79Compiling 1 file (.ex)80Generated circular_buffer app81==> jason82Compiling 10 files (.ex)83Generated jason app84==> tablet85Compiling 2 files (.ex)86Generated tablet app87==> elixir_make88Compiling 8 files (.ex)89Generated elixir_make app90==> nerves_logging91 CC kmsg_tailer.o92 LD kmsg_tailer93Compiling 5 files (.ex)94Generated nerves_logging app95==> castore96Compiling 1 file (.ex)97Generated castore app98==> nerves_discovery99Compiling 5 files (.ex)100Generated nerves_discovery app101==> ring_logger102Compiling 7 files (.ex)103Generated ring_logger app104==> json_spec105Compiling 2 files (.ex)106Generated json_spec app107==> json_codec108Compiling 6 files (.ex)109Generated json_codec app110==> interactive_cmd111Compiling 1 file (.ex)112Generated interactive_cmd app113==> nerves114Compiling 65 files (.ex)115    warning: redefining module Mix.Tasks.Nerves.Init (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Mix.Tasks.Nerves.Init.beam)116    │117  6 │ defmodule Mix.Tasks.Nerves.Init do118    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~119    │120    └─ lib/mix/tasks/nerves.init.ex:6: Mix.Tasks.Nerves.Init (module)121122    warning: redefining module Nerves (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.beam)123    │124  6 │ defmodule Nerves do125    │ ~~~~~~~~~~~~~~~~~~~126    │127    └─ lib/nerves.ex:6: Nerves (module)128129    warning: redefining module Nerves.ArtifactResolver (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.ArtifactResolver.beam)130    │131  5 │ defmodule Nerves.ArtifactResolver do132    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~133    │134    └─ lib/nerves/artifact_resolver.ex:5: Nerves.ArtifactResolver (module)135136    warning: redefining module Nerves.BuildAction.AppModes (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.AppModes.beam)137    │138  6 │ defmodule Nerves.BuildAction.AppModes do139    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~140    │141    └─ lib/nerves/build_action/app_modes.ex:6: Nerves.BuildAction.AppModes (module)142143    warning: redefining module Nerves.BuildAction.CheckExecutables (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.CheckExecutables.beam)144    │145  5 │ defmodule Nerves.BuildAction.CheckExecutables do146    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~147    │148    └─ lib/nerves/build_action/check_executables.ex:5: Nerves.BuildAction.CheckExecutables (module)149150    warning: redefining module Nerves.BuildAction.Firmware (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.Firmware.beam)151    │152  5 │ defmodule Nerves.BuildAction.Firmware do153    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~154    │155    └─ lib/nerves/build_action/firmware.ex:5: Nerves.BuildAction.Firmware (module)156157    warning: redefining module Nerves.BuildAction.Erlinit (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.Erlinit.beam)158    │159  8 │ defmodule Nerves.BuildAction.Erlinit do160    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~161    │162    └─ lib/nerves/build_action/erlinit.ex:8: Nerves.BuildAction.Erlinit (module)163164    warning: redefining module Nerves.BuildAction.IExStartupCheck (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.IExStartupCheck.beam)165    │166  7 │ defmodule Nerves.BuildAction.IExStartupCheck do167    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~168    │169    └─ lib/nerves/build_action/iex_startup_check.ex:7: Nerves.BuildAction.IExStartupCheck (module)170171    warning: redefining module Nerves.BuildAction.NervesV1System (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.NervesV1System.beam)172    │173  5 │ defmodule Nerves.BuildAction.NervesV1System do174    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~175    │176    └─ lib/nerves/build_action/nerves_v1_system.ex:5: Nerves.BuildAction.NervesV1System (module)177178    warning: redefining module Nerves.BuildAction.NervesV1Toolchain (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.NervesV1Toolchain.beam)179    │180  5 │ defmodule Nerves.BuildAction.NervesV1Toolchain do181    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~182    │183    └─ lib/nerves/build_action/nerves_v1_toolchain.ex:5: Nerves.BuildAction.NervesV1Toolchain (module)184185    warning: redefining module Nerves.BuildAction.Rootfs (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.Rootfs.beam)186    │187  5 │ defmodule Nerves.BuildAction.Rootfs do188    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~189    │190    └─ lib/nerves/build_action/rootfs.ex:5: Nerves.BuildAction.Rootfs (module)191192    warning: redefining module Nerves.BuildAction.SortApps (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.SortApps.beam)193    │194  6 │ defmodule Nerves.BuildAction.SortApps do195    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~196    │197    └─ lib/nerves/build_action/sort_apps.ex:6: Nerves.BuildAction.SortApps (module)198199    warning: redefining module Nerves.BuildAction.StripAll (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.StripAll.beam)200    │201  5 │ defmodule Nerves.BuildAction.StripAll do202    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~203    │204    └─ lib/nerves/build_action/strip_all.ex:5: Nerves.BuildAction.StripAll (module)205206    warning: redefining module Nerves.BuildAction.Trimmer (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildAction.Trimmer.beam)207    │208  5 │ defmodule Nerves.BuildAction.Trimmer do209    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~210    │211    └─ lib/nerves/build_action/trimmer.ex:5: Nerves.BuildAction.Trimmer (module)212213    warning: redefining module Nerves.BuildPlan (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildPlan.beam)214    │215  5 │ defmodule Nerves.BuildPlan do216    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~217    │218    └─ lib/nerves/build_plan.ex:5: Nerves.BuildPlan (module)219220    warning: redefining module Nerves.BuildPlan.Checks (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.BuildPlan.Checks.beam)221    │222  5 │ defmodule Nerves.BuildPlan.Checks do223    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~224    │225    └─ lib/nerves/build_plan/checks.ex:5: Nerves.BuildPlan.Checks (module)226227    warning: redefining module Nerves.Container (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.Container.beam)228    │229  6 │ defmodule Nerves.Container do230    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~231    │232    └─ lib/nerves/container.ex:6: Nerves.Container (module)233234    warning: redefining module Nerves.Fingerprint (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.Fingerprint.beam)235    │236  5 │ defmodule Nerves.Fingerprint do237    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~238    │239    └─ lib/nerves/fingerprint.ex:5: Nerves.Fingerprint (module)240241    warning: redefining module Nerves.MixPackage (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.MixPackage.beam)242    │243  5 │ defmodule Nerves.MixPackage do244    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~245    │246    └─ lib/nerves/mix_package.ex:5: Nerves.MixPackage (module)247248    warning: redefining module Nerves.Paths (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.Paths.beam)249    │250  5 │ defmodule Nerves.Paths do251    │ ~~~~~~~~~~~~~~~~~~~~~~~~~252    │253    └─ lib/nerves/paths.ex:5: Nerves.Paths (module)254255    warning: redefining module Nerves.TargetTuple (current version loaded from /work/proj/_build/qemu_aarch64/lib/nerves/ebin/Elixir.Nerves.TargetTuple.beam)256    │257  5 │ defmodule Nerves.TargetTuple do258    │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~259    │260    └─ lib/nerves/target_tuple.ex:5: Nerves.TargetTuple (module)261262Generated nerves app263==> nerves_toolchain_aarch64_nerves_linux_gnu264Compiling 1 file (.ex)265Generated nerves_toolchain_aarch64_nerves_linux_gnu app266==> nerves_system_qemu_aarch64267Compiling 1 file (.ex)268Generated nerves_system_qemu_aarch64 app269==> rustler_precompiled270Compiling 4 files (.ex)271Generated rustler_precompiled app272==> oxc273Compiling 18 files (.ex)27427520:27:10.113 [debug] Downloading NIF from https://github.com/elixir-volt/oxc_ex/releases/download/v0.18.1/liboxc_lint_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz27627720:27:10.138 [debug] Downloading NIF from https://github.com/elixir-volt/oxc_ex/releases/download/v0.18.1/liboxc_fmt_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz27827920:27:11.993 [debug] NIF cached at /home/nerves/.cache/rustler_precompiled/precompiled_nifs/liboxc_fmt_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz and extracted to /work/proj/_build/qemu_aarch64/lib/oxc/priv/native/liboxc_fmt_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so28028120:27:12.198 [debug] NIF cached at /home/nerves/.cache/rustler_precompiled/precompiled_nifs/liboxc_lint_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz and extracted to /work/proj/_build/qemu_aarch64/lib/oxc/priv/native/liboxc_lint_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so28228320:27:12.382 [debug] Downloading NIF from https://github.com/elixir-volt/oxc_ex/releases/download/v0.18.1/liboxc_ex_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz28428520:27:13.827 [debug] NIF cached at /home/nerves/.cache/rustler_precompiled/precompiled_nifs/liboxc_ex_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz and extracted to /work/proj/_build/qemu_aarch64/lib/oxc/priv/native/liboxc_ex_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so286Generated oxc app287==> uboot_env288Compiling 5 files (.ex)289Generated uboot_env app290==> property_table291Compiling 8 files (.ex)292Generated property_table app293==> nerves_uevent294 CC uevent.o295 LD uevent296Compiling 5 files (.ex)297Generated nerves_uevent app298==> nerves_runtime299Compiling 14 files (.ex)300Generated nerves_runtime app301==> toolshed302Compiling 5 files (.ex)303Generated toolshed app304==> zigler_precompiled305Compiling 5 files (.ex)306Generated zigler_precompiled app307==> ghostty308Compiling 19 files (.ex)30931020:27:19.956 [debug] Downloading NIF from https://github.com/dannote/ghostty_ex/releases/download/v0.4.9/Elixir.Ghostty.PTY.Nif-v0.4.9-aarch64-linux-gnu.so.tar.gz31131220:27:20.700 [debug] Downloading NIF from https://github.com/dannote/ghostty_ex/releases/download/v0.4.9/Elixir.Ghostty.Terminal.Nif-v0.4.9-aarch64-linux-gnu.so.tar.gz313Generated ghostty app314could not compile dependency :ghostty, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile ghostty --force", update it with "mix deps.update ghostty" or clean it with "mix deps.clean ghostty"31531620:27:22.349 [warning] The on_load function for module Elixir.OXC.Native returned:317{:error,318 {:load_failed,319  ~c"Failed to load NIF library: '/work/proj/_build/qemu_aarch64/lib/oxc/priv/native/liboxc_ex_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so: cannot open shared object file: No such file or directory'"}}32032132220:27:22.398 [warning] The on_load function for module Elixir.OXC.Native returned:323{:error,324 {:load_failed,325  ~c"Failed to load NIF library: '/work/proj/_build/qemu_aarch64/lib/oxc/priv/native/liboxc_ex_nif-v0.18.1-nif-2.15-aarch64-unknown-linux-gnu.so: cannot open shared object file: No such file or directory'"}}326327** (UndefinedFunctionError) function OXC.Native.bundle/2 is undefined (module OXC.Native is not available)328    (oxc 0.18.1) OXC.Native.bundle([{"cursor.ts", "import { applyCellTextStyles } from './render'\nimport { rgb } from './util'\n\nimport type { Cell, CellMetrics, CursorState } from './types'\n\nexport function cursorVisible(cursor: CursorState | null, blinkVisible: boolean): boolean {\n  return Boolean(cursor && cursor.visible && cursor.x !== null && cursor.y !== null && blinkVisible)\n}\n\nexport function cursorDisplayStyle(style: string, focused: boolean): string {\n  if (!focused && style === 'block') {\n    return 'block_hollow'\n  }\n  return style\n}\n\nexport function cursorCell(cursor: CursorState, rowsData: Cell[][]): Cell | null {\n  if (cursor.y === null || cursor.x === null) return null\n\n  const row = rowsData[cursor.y]\n  if (!row) return null\n\n  if (cursor.wide_tail && cursor.x > 0) {\n    return row[cursor.x - 1] ?? null\n  }\n\n  return row[cursor.x] ?? null\n}\n\nexport function cursorChar(cell: Cell | null): string {\n  return cell?.[0] || ' '\n}\n\nexport function cursorColor(cursor: CursorState, pre: HTMLPreElement): string {\n  if (cursor.color) {\n    return rgb(cursor.color)\n  }\n  return window.getComputedStyle(pre).color || '#cdd6f4'\n}\n\nexport function cursorTextColor(cell: Cell | null, pre: HTMLPreElement): string {\n  if (cell?.[2]) {\n    return rgb(cell[2])\n  }\n  return window.getComputedStyle(pre).backgroundColor || '#1e1e2e'\n}\n\nexport function renderCursor(\n  cursorEl: HTMLDivElement,\n  cursorTextEl: HTMLSpanElement,\n  cursor: CursorState | null,\n  rowsData: Cell[][],\n  focused: boolean,\n  blinkVisible: boolean,\n  metrics: CellMetrics,\n  pre: HTMLPreElement,\n  input: HTMLTextAreaElement\n): void {\n  if (!cursorVisible(cursor, blinkVisible)) {\n    cursorEl.style.display = 'none'\n    syncInputPosition(input, null)\n    return\n  }\n\n  const c = cursor as CursorState\n  const cx = c.x as number\n  const cy = c.y as number\n  let leftCol = cx\n  let widthCols = 1\n\n  if (c.wide_tail && cx > 0) {\n    leftCol -= 1\n    widthCols = 2\n  }\n\n  const left = metrics.paddingLeft + leftCol * metrics.width\n  const top = metrics.paddingTop + cy * metrics.height\n  const width = metrics.width * widthCols\n  const height = metrics.height\n  const style = cursorDisplayStyle(c.style, focused)\n  const color = cursorColor(c, pre)\n\n  syncInputPosition(input, { left, top, height })\n\n  cursorEl.style.display = 'block'\n  cursorEl.style.left = `${left}px`\n  cursorEl.style.top = `${top}px`\n  cursorEl.style.width = `${width}px`\n  cursorEl.style.height = `${height}px`\n  cursorEl.style.opacity = focused ? '1' : '0.85'\n\n  cursorTextEl.textContent = ''\n  cursorTextEl.style.color = ''\n  cursorTextEl.style.backgroundColor = 'transparent'\n  cursorTextEl.style.fontWeight = ''\n  cursorTextEl.style.fontStyle = ''\n  cursorTextEl.style.opacity = '1'\n  cursorTextEl.style.textDecoration = 'none'\n\n  cursorEl.style.backgroundColor = 'transparent'\n  cursorEl.style.border = 'none'\n  cursorEl.style.borderBottom = 'none'\n  cursorEl.style.borderLeft = 'none'\n\n  if (style === 'block') {\n    const cell = cursorCell(c, rowsData)\n    cursorEl.style.backgroundColor = color\n    cursorTextEl.textContent = cursorChar(cell)\n    cursorTextEl.style.color = cursorTextColor(cell, pre)\n    applyCellTextStyles(cursorTextEl, cell)\n    return\n  }\n\n  if (style === 'underline') {\n    cursorEl.style.borderBottom = `2px solid ${color}`\n    return\n  }\n\n  if (style === 'bar') {\n    const barWidth = Math.max(2, Math.round(metrics.width * 0.15))\n    cursorEl.style.width = `${barWidth}px`\n    cursorEl.style.backgroundColor = color\n    return\n  }\n\n  cursorEl.style.border = `1px solid ${color}`\n}\n\nfunction syncInputPosition(\n  input: HTMLTextAreaElement,\n  position: { left: number; top: number; height: number } | null\n): void {\n  if (!position) {\n    input.style.left = '0'\n    input.style.top = '0'\n    return\n  }\n\n  input.style.left = `${position.left}px`\n  input.style.top = `${position.top}px`\n  input.style.height = `${position.height}px`\n}\n"}, {"dom.ts", "export function createScreen(): HTMLDivElement {\n  const screen = document.createElement('div')\n  screen.style.position = 'relative'\n  screen.style.display = 'block'\n  screen.style.width = '100%'\n  return screen\n}\n\nexport function createPre(): HTMLPreElement {\n  const pre = document.createElement('pre')\n  pre.style.margin = '0'\n  pre.style.padding = '8px'\n  pre.style.backgroundColor = '#1e1e2e'\n  pre.style.color = '#cdd6f4'\n  pre.style.overflow = 'hidden'\n  pre.style.position = 'relative'\n  pre.style.width = '100%'\n  pre.style.boxSizing = 'border-box'\n  pre.style.userSelect = 'none'\n  pre.style.webkitUserSelect = 'none'\n  pre.style.cursor = 'text'\n  return pre\n}\n\nexport function createSelectionLayer(): HTMLDivElement {\n  const layer = document.createElement('div')\n  layer.setAttribute('aria-hidden', 'true')\n  layer.setAttribute('data-ghostty-selection-layer', 'true')\n  layer.style.position = 'absolute'\n  layer.style.inset = '0'\n  layer.style.pointerEvents = 'none'\n  layer.style.zIndex = '0'\n  return layer\n}\n\nexport function createMeasure(): HTMLSpanElement {\n  const span = document.createElement('span')\n  span.textContent = 'MMMMMMMMMM'\n  span.setAttribute('aria-hidden', 'true')\n  span.style.position = 'absolute'\n  span.style.visibility = 'hidden'\n  span.style.pointerEvents = 'none'\n  span.style.whiteSpace = 'pre'\n  span.style.font = 'inherit'\n  span.style.lineHeight = 'inherit'\n  return span\n}\n\nexport function createCursorEl(): { cursorEl: HTMLDivElement; cursorText: HTMLSpanElement } {\n  const cursorEl = document.createElement('div')\n  cursorEl.setAttribute('aria-hidden', 'true')\n  cursorEl.style.position = 'absolute'\n  cursorEl.style.display = 'none'\n  cursorEl.style.pointerEvents = 'none'\n  cursorEl.style.boxSizing = 'border-box'\n  cursorEl.style.whiteSpace = 'pre'\n  cursorEl.style.zIndex = '1'\n\n  const cursorText = document.createElement('span')\n  cursorText.style.display = 'block'\n  cursorText.style.width = '100%'\n  cursorText.style.height = '100%'\n  cursorText.style.font = 'inherit'\n  cursorText.style.lineHeight = 'inherit'\n  cursorEl.appendChild(cursorText)\n\n  return { cursorEl, cursorText }\n}\n\nexport function setupInput(input: HTMLTextAreaElement): void {\n  input.setAttribute('data-ghostty-input', 'true')\n  input.setAttribute('aria-label', 'Terminal input')\n  input.setAttribute('autocapitalize', 'off')\n  input.setAttribute('autocomplete', 'off')\n  input.setAttribute('autocorrect', 'off')\n  input.setAttribute('spellcheck', 'false')\n  input.style.position = 'absolute'\n  input.style.left = '0'\n  input.style.top = '0'\n  input.style.width = '1px'\n  input.style.height = '1em'\n  input.style.padding = '0'\n  input.style.margin = '0'\n  input.style.border = '0'\n  input.style.outline = 'none'\n  input.style.opacity = '0'\n  input.style.resize = 'none'\n  input.style.overflow = 'hidden'\n  input.style.background = 'transparent'\n  input.style.color = 'transparent'\n  input.style.caretColor = 'transparent'\n  input.style.whiteSpace = 'pre'\n  input.style.pointerEvents = 'none'\n  input.style.zIndex = '2'\n}\n\nexport function measureCellMetrics(\n  pre: HTMLPreElement,\n  measure: HTMLSpanElement,\n  input: HTMLTextAreaElement,\n  cursorEl: HTMLDivElement\n): {\n  width: number\n  height: number\n  paddingLeft: number\n  paddingRight: number\n  paddingTop: number\n  paddingBottom: number\n} {\n  const styles = window.getComputedStyle(pre)\n\n  measure.style.fontFamily = styles.fontFamily\n  measure.style.fontSize = styles.fontSize\n  measure.style.fontWeight = styles.fontWeight\n  measure.style.fontStyle = styles.fontStyle\n  measure.style.lineHeight = styles.lineHeight\n\n  input.style.fontFamily = styles.fontFamily\n  input.style.fontSize = styles.fontSize\n  input.style.lineHeight = styles.lineHeight\n  cursorEl.style.fontFamily = styles.fontFamily\n  cursorEl.style.fontSize = styles.fontSize\n  cursorEl.style.lineHeight = styles.lineHeight\n\n  const measureRect = measure.getBoundingClientRect()\n  const fontSize = parseFloat(styles.fontSize) || 16\n  const lineHeight = parseFloat(styles.lineHeight) || fontSize * 1.2\n  const width = measureRect.width > 0 ? measur" <> ...}, {"hook.ts", "import { renderCursor } from './cursor'\nimport {\n  createCursorEl,\n  createMeasure,\n  createPre,\n  createScreen,\n  createSelectionLayer,\n  measureCellMetrics,\n  setupInput\n} from './dom'\nimport {\n  hasMouseModifiers,\n  isCopyShortcut,\n  isPasteShortcut,\n  mouseButtonName,\n  primaryPressedButton\n} from './input'\nimport { renderCells, renderSelection } from './render'\nimport { normalizeSelection, selectedText } from './selection'\nimport { DEFAULT_MOUSE } from './types'\nimport { clamp } from './util'\n\nimport type {\n  Cell,\n  CellMetrics,\n  CellPoint,\n  CursorState,\n  MouseModes,\n  RenderPayload,\n  ScrollbarState\n} from './types'\n\ninterface TerminalState {\n  cols: number\n  rows: number\n  fit: boolean\n  autofocus: boolean\n  rowsData: Cell[][]\n  cursor: CursorState | null\n  mouse: MouseModes\n  scrollbar: ScrollbarState | null\n  focusReporting: boolean\n  focused: boolean\n  composing: boolean\n  cursorBlinkVisible: boolean\n  cursorBlinkTimer: ReturnType<typeof setInterval> | null\n  target: string | null\n  resizeObserver: ResizeObserver | null\n  pendingFitTimer: ReturnType<typeof setTimeout> | null\n  lastFitCols: number | null\n  lastFitRows: number | null\n  selectionAnchor: CellPoint | null\n  selectionFocus: CellPoint | null\n  selecting: boolean\n  pointerActive: boolean\n  autofocusTimers: ReturnType<typeof setTimeout>[]\n  readySent: boolean\n  autofocusPending: boolean\n\n  screen: HTMLDivElement\n  pre: HTMLPreElement\n  selectionLayer: HTMLDivElement\n  measure: HTMLSpanElement\n  input: HTMLTextAreaElement\n  cursorEl: HTMLDivElement\n  cursorText: HTMLSpanElement\n\n  onContainerFocus: () => void\n  onContainerBlur: () => void\n  onPointerDown: (e: MouseEvent) => void\n  onPointerMove: (e: MouseEvent) => void\n  onPointerUp: (e: MouseEvent) => void\n  onDocumentPointerDown: (e: MouseEvent) => void\n  onDocumentFocusIn: (e: FocusEvent) => void\n  onContextMenu: (e: Event) => void\n  onWindowResize: () => void\n  onKeydown: (e: KeyboardEvent) => void\n  onPaste: (e: ClipboardEvent) => void\n  onCopy: (e: ClipboardEvent) => void\n  onCompositionStart: () => void\n  onCompositionEnd: (e: CompositionEvent) => void\n  onInputFocus: () => void\n  onInputBlur: () => void\n}\n\n// Phoenix LiveView hook methods\ninterface HookMethods {\n  el: HTMLElement\n  pushEvent(event: string, payload: object): void\n  pushEventTo(target: string, event: string, payload: object): void\n  handleEvent(event: string, callback: (payload: never) => void): void\n}\n\ntype Hook = TerminalState & HookMethods\n\nfunction pushHookEvent(hook: Hook, name: string, payload: object): void {\n  if (hook.target) {\n    hook.pushEventTo(hook.target, name, payload)\n  } else {\n    hook.pushEvent(name, payload)\n  }\n}\n\nfunction metrics(hook: Hook): CellMetrics {\n  return measureCellMetrics(hook.pre, hook.measure, hook.input, hook.cursorEl)\n}\n\nfunction isInsideTerminal(hook: Hook, node: Node | null): boolean {\n  return Boolean(node && (node === hook.el || node === hook.input || hook.el.contains(node)))\n}\n\nfunction mouseModeActive(hook: Hook): boolean {\n  return Boolean(hook.mouse?.tracking)\n}\n\nfunction hasSelection(hook: Hook): boolean {\n  return (\n    !mouseModeActive(hook) && normalizeSelection(hook.selectionAnchor, hook.selectionFocus) !== null\n  )\n}\n\nfunction clearSelection(hook: Hook): void {\n  hook.selectionAnchor = null\n  hook.selectionFocus = null\n  hook.selecting = false\n  hook.selectionLayer.innerHTML = ''\n}\n\nfunction focusInput(hook: Hook, force = false): void {\n  if (!force && !shouldAutofocus(hook)) {\n    return\n  }\n  if (document.activeElement !== hook.el) {\n    hook.el.focus({ preventScroll: true })\n  }\n  if (document.activeElement !== hook.input) {\n    hook.input.focus({ preventScroll: true })\n  }\n}\n\nfunction blurTerminal(hook: Hook): void {\n  hook.pointerActive = false\n  if (document.activeElement === hook.input) {\n    hook.input.blur()\n  }\n  if (document.activeElement === hook.el) {\n    hook.el.blur()\n  }\n  hook.focused = false\n  hook.cursorBlinkVisible = true\n  syncCursorBlink(hook)\n  doRenderCursor(hook)\n}\n\nfunction disableAutofocus(hook: Hook): void {\n  hook.autofocusPending = false\n  stopAu" <> ...}, {"input.ts", "export function isCopyShortcut(e: KeyboardEvent): boolean {\n  return (e.metaKey || e.ctrlKey) && !e.altKey && e.key.toLowerCase() === 'c'\n}\n\nexport function isPasteShortcut(e: KeyboardEvent): boolean {\n  return (e.metaKey || e.ctrlKey) && !e.altKey && e.key.toLowerCase() === 'v'\n}\n\nexport function mouseButtonName(button: number): string | null {\n  switch (button) {\n    case 0:\n      return 'left'\n    case 1:\n      return 'middle'\n    case 2:\n      return 'right'\n    case 3:\n      return 'four'\n    case 4:\n      return 'five'\n    default:\n      return null\n  }\n}\n\nexport function primaryPressedButton(e: MouseEvent): number {\n  if (e.buttons & 1) return 0\n  if (e.buttons & 4) return 1\n  if (e.buttons & 2) return 2\n  if (e.buttons & 8) return 3\n  if (e.buttons & 16) return 4\n  return -1\n}\n\nexport function hasMouseModifiers(e: MouseEvent): boolean {\n  return e.shiftKey || e.ctrlKey || e.altKey || e.metaKey\n}\n"}, {"phoenix.d.ts", "interface ViewHook {\n  el: HTMLElement\n  pushEvent(event: string, payload: object): void\n  pushEventTo(target: string, event: string, payload: object): void\n  handleEvent(event: string, callback: (payload: never) => void): void\n}\n\ntype ViewHookObject = ThisType<ViewHook> & {\n  mounted?(): void\n  destroyed?(): void\n}\n"}, {"render.ts", "import { CellFlags } from './types'\nimport { esc, rgb } from './util'\n\nimport type { Cell, CellMetrics, Color, Selection } from './types'\n\nexport function renderCells(pre: HTMLPreElement, rows: Cell[][]): void {\n  let html = ''\n  for (const row of rows) {\n    for (const [char, fg, bg, flags] of row) {\n      const styles = cellStyles(fg, bg, flags)\n      const ch = char || ' '\n      if (styles.length > 0) {\n        html += `<span style=\"${styles.join(';')}\">${esc(ch)}</span>`\n      } else {\n        html += esc(ch)\n      }\n    }\n    html += '\\n'\n  }\n  pre.innerHTML = html\n}\n\nexport function renderSelection(\n  layer: HTMLDivElement,\n  selection: Selection | null,\n  cols: number,\n  metrics: CellMetrics\n): void {\n  layer.innerHTML = ''\n\n  if (!selection) {\n    return\n  }\n\n  for (let row = selection.start.row; row <= selection.end.row; row += 1) {\n    const startCol = row === selection.start.row ? selection.start.col : 0\n    const endCol = row === selection.end.row ? selection.end.col : cols - 1\n    const rect = document.createElement('div')\n    rect.style.position = 'absolute'\n    rect.style.left = `${metrics.paddingLeft + startCol * metrics.width}px`\n    rect.style.top = `${metrics.paddingTop + row * metrics.height}px`\n    rect.style.width = `${Math.max(1, endCol - startCol + 1) * metrics.width}px`\n    rect.style.height = `${metrics.height}px`\n    rect.style.background = 'rgba(137, 180, 250, 0.35)'\n    rect.style.borderRadius = '2px'\n    layer.appendChild(rect)\n  }\n}\n\nfunction cellStyles(fg: Color | null, bg: Color | null, flags: number): string[] {\n  const styles: string[] = []\n  const decorations: string[] = []\n\n  if (fg) styles.push(`color:${rgb(fg)}`)\n  if (bg) styles.push(`background:${rgb(bg)}`)\n  if (flags & CellFlags.BOLD) styles.push('font-weight:bold')\n  if (flags & CellFlags.ITALIC) styles.push('font-style:italic')\n  if (flags & CellFlags.DIM) styles.push('opacity:0.5')\n  if (flags & CellFlags.UNDERLINE) decorations.push('underline')\n  if (flags & CellFlags.STRIKETHROUGH) decorations.push('line-through')\n  if (flags & CellFlags.OVERLINE) decorations.push('overline')\n  if (decorations.length > 0) styles.push(`text-decoration:${decorations.join(' ')}`)\n\n  return styles\n}\n\nexport function applyCellTextStyles(el: HTMLElement, cell: Cell | null): void {\n  if (!cell) return\n\n  const [, , , flags] = cell\n  const decorations: string[] = []\n\n  el.style.fontWeight = flags & CellFlags.BOLD ? 'bold' : ''\n  el.style.fontStyle = flags & CellFlags.ITALIC ? 'italic' : ''\n  el.style.opacity = flags & CellFlags.DIM ? '0.5' : '1'\n  if (flags & CellFlags.UNDERLINE) decorations.push('underline')\n  if (flags & CellFlags.STRIKETHROUGH) decorations.push('line-through')\n  if (flags & CellFlags.OVERLINE) decorations.push('overline')\n  el.style.textDecoration = decorations.length > 0 ? decorations.join(' ') : 'none'\n}\n"}, {"selection.ts", "import type { Cell, CellPoint, Selection } from './types'\n\nexport function normalizeSelection(\n  anchor: CellPoint | null,\n  focus: CellPoint | null\n): Selection | null {\n  if (!anchor || !focus) {\n    return null\n  }\n\n  const start = { ...anchor }\n  const end = { ...focus }\n\n  if (end.row < start.row || (end.row === start.row && end.col < start.col)) {\n    return { start: end, end: start }\n  }\n\n  if (start.row === end.row && start.col === end.col) {\n    return null\n  }\n\n  return { start, end }\n}\n\nexport function selectedText(\n  selection: Selection | null,\n  rowsData: Cell[][],\n  cols: number\n): string {\n  if (!selection) {\n    return ''\n  }\n\n  const lines: string[] = []\n\n  for (let row = selection.start.row; row <= selection.end.row; row += 1) {\n    const sourceRow = rowsData[row] || []\n    const startCol = row === selection.start.row ? selection.start.col : 0\n    const endCol = row === selection.end.row ? selection.end.col : cols - 1\n    let text = ''\n\n    for (let col = startCol; col <= endCol; col += 1) {\n      const cell = sourceRow[col]\n      text += cell?.[0] || ' '\n    }\n\n    lines.push(text.trimEnd())\n  }\n\n  return lines.join('\\n')\n}\n"}, {"types.ts", "export type Color = [number, number, number]\n\nexport type Cell = [string, Color | null, Color | null, number]\n\nexport interface CellPoint {\n  col: number\n  row: number\n  encodeX: number\n  encodeY: number\n}\n\nexport interface MouseModes {\n  tracking: boolean\n  x10: boolean\n  normal: boolean\n  button: boolean\n  any: boolean\n  sgr: boolean\n}\n\nexport interface CursorState {\n  x: number | null\n  y: number | null\n  visible: boolean\n  blinking: boolean\n  style: 'block' | 'bar' | 'underline' | 'block_hollow'\n  wide_tail: boolean\n  color: Color | null\n}\n\nexport interface ScrollbarState {\n  total: number\n  offset: number\n  len: number\n}\n\nexport interface RenderPayload {\n  id: string\n  cells: Cell[][]\n  cursor: CursorState\n  mouse: MouseModes\n  scrollbar: ScrollbarState\n  focus_reporting: boolean\n}\n\nexport interface CellMetrics {\n  width: number\n  height: number\n  paddingLeft: number\n  paddingRight: number\n  paddingTop: number\n  paddingBottom: number\n}\n\nexport interface Selection {\n  start: CellPoint\n  end: CellPoint\n}\n\nexport const DEFAULT_MOUSE: MouseModes = {\n  tracking: false,\n  x10: false,\n  normal: false,\n  button: false,\n  any: false,\n  sgr: false\n}\n\nexport const CellFlags = {\n  BOLD: 1,\n  ITALIC: 2,\n  DIM: 4,\n  UNDERLINE: 8,\n  STRIKETHROUGH: 16,\n  OVERLINE: 128\n} as const\n"}, {"util.ts", "import type { Color } from './types'\n\nexport function esc(s: string): string {\n  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nexport function rgb(color: Color): string {\n  return `rgb(${color[0]},${color[1]},${color[2]})`\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(max, Math.max(min, value))\n}\n"}], %{entry: "hook.ts", exports: "auto", external: [], format: "esm", modules: [], cwd: "", define: %{}, target: "", footer: nil, sourcemap: false, minify: false, import_source: "", treeshake: false, drop_console: false, banner: nil, preamble: nil, conditions: [], main_fields: [], module_types: %{}, preserve_entry_signatures: "", jsx: "automatic", jsx_factory: "", jsx_fragment: ""})329    (oxc 0.18.1) lib/oxc.ex:514: OXC.bundle/2330    (ghostty 0.4.9) lib/mix/compilers/ghostty_js.ex:47: Mix.Compilers.GhosttyJS.do_bundle/2331    (mix 1.20.3) lib/mix/task.ex:589: Mix.Task.run_alias/6332    (mix 1.20.3) lib/mix/tasks/deps.compile.ex:230: anonymous fn/2 in Mix.Tasks.Deps.Compile.do_mix/2333    (mix 1.20.3) lib/mix/project.ex:557: Mix.Project.in_project/4334    (elixir 1.20.3) lib/file.ex:2100: File.cd!/2335    (mix 1.20.3) lib/mix/dep.ex:279: Mix.Dep.in_dependency/3