[package]
name = "atomcode-tuix"
version.workspace = true
edition.workspace = true
[features]
default = []
distro-pm = ["atomcode-updater/distro-pm"]
[dependencies]
# Config and locale systems are owned by the leaf config crate.
atomcode-config = { path = "../atomcode-config" }
# Self-update mechanics (leaf crate, extracted from core).
atomcode-updater = { path = "../atomcode-updater" }
# Askpass lives in atomcode-capabilities (`::askpass`, unix-only); the TUI drives the
# server + password modal via that path.
atomcode-capabilities = { path = "../atomcode-capabilities", features = ["tools", "memory", "notify", "setup", "plugin", "mcp", "session"] }
atomcode-auth = { path = "../atomcode-auth" }
atomcode-codingplan = { path = "../atomcode-codingplan" }
# INIT_PROMPT: LLM-driven /init submits this constant as a user turn so the
# coding agent explores the repo and writes AGENTS.md via its tools.
atomcode-coding = { path = "../atomcode-coding" }
# Native runtime events carry the exact committed SessionSnapshot so the TUI can
# keep its transitional core session mirror in sync without depending on bridge.
atomcode-kernel = { path = "../atomcode-kernel" }
zeroize = "1"
atomcode-daemon = { path = "../atomcode-daemon" }
atomcode-telemetry = { path = "../atomcode-telemetry" }
anyhow = "1"
uuid = { version = "1", features = ["v4"] }
crossterm = "0.29"
chrono = { version = "0.4", default-features = false, features = ["clock"] }
tokio = { version = "1", default-features = false, features = ["rt-multi-thread", "macros", "sync", "time", "signal", "process"] }
tokio-util = "0.7"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# Async HTTPS client for the passive version_check latest.json fetch
# (moved here from atomcode-core along with the version_check module).
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
toml = "0.8"
unicode-width = "0.2"
unicode-segmentation = "1"
libc = "0.2"
dirs = "6"
qrcode = { version = "0.14", default-features = false }
ignore = "0.4"
arboard = "3"
png = "0.17"
# BMP/DIB decode for the Windows clipboard-image fallback: arboard's headerless
# decode mis-places the pixel offset for the V4/V5 + BI_BITFIELDS DIBs that Qt /
# PixPin / Snipaste / the Windows Snipping Tool produce, so it rejects them. We
# re-wrap the raw CF_DIB in a BITMAPFILEHEADER and decode via the BMP *file*
# path. Kept all-target (not cfg(windows)) so the pure `decode_cf_dib_to_rgba`
# and its fixtures are unit-tested on every host; bmp-only to stay light, and
# `image` 0.25 is already in the tree transitively via arboard.
image = { version = "0.25", default-features = false, features = ["bmp"] }
base64 = "0.22"
urlencoding = "2"
futures = "0.3"
sha2 = "0.10"
rand = "0.8"
fs2 = "0.4"
tempfile = "3"
[target.'cfg(target_os = "macos")'.dependencies]
# NSPasteboard access for the Ctrl+V → file-URL fallback path. arboard's
# `get_image()` only returns Some when the system clipboard carries
# raw image bytes (PNG / TIFF / NSImage), but the iTerm2 image-clipboard
# workflow and Finder `Cmd+C` on an image file leave only
# `public.file-url` on the pasteboard — no bytes. Cmd+V handles it
# through bracketed paste (iTerm2 dumps the temp path as text), but
# Ctrl+V is intercepted at the key layer before iTerm2's paste handler
# runs, so we read `public.file-url` directly through AppKit, decode
# the percent-encoded path with `urlencoding`, and feed it into the
# same `try_attach_image_from_path` we already use for bracketed paste.
# Already present transitively via arboard, so no fresh registry fetch.
objc2-app-kit = { version = "0.3", default-features = false, features = ["NSPasteboard"] }
objc2-foundation = { version = "0.3", default-features = false, features = ["NSString"] }
[target.'cfg(windows)'.dependencies]
# Raw CF_DIB read for the clipboard-image fallback (see `image` dep note above).
# Already present transitively via arboard, so no fresh registry fetch.
clipboard-win = "5.4"
[dev-dependencies]
# Redirect ATOMCODE_HOME to a throwaway temp dir before any test runs (via a
# #[ctor] in the lib's #[cfg(test)] module + every tests/*.rs binary) so tests
# that persist commands/plugins/config never write into the developer's real home.
atomcode-kernel = { path = "../atomcode-kernel", features = ["test-support"] }
ctor = "0.2"
vte = "0.15.0"
# Serialize env-var-mutating custom_commands tests (moved from atomcode-core).
serial_test = "3"