[package]
name = "atomcode-coding"
version.workspace = true
edition = "2021"
description = "L2 coding specialization: assembles the neutral kernel + capabilities into a runnable, self-correcting coding agent."
[features]
# Forward the AtomGit REST tool feature to the capabilities layer so the
# CLI can enable it on the coding dep without reaching into capabilities directly.
atomgit = ["atomcode-capabilities/atomgit"]
[dependencies]
atomcode-kernel = { path = "../atomcode-kernel" }
# Config system leaf consumed directly by the coding assembly.
atomcode-config = { path = "../atomcode-config" }
# The FULL capability set: L2 is the opinionated assembly — a coding agent ships
# with web/skills/mcp/session/memory wired (the leaner features exist for other
# embedders, not for this crate).
atomcode-capabilities = { path = "../atomcode-capabilities", features = [
"provider", "tools", "web", "codeintel", "lsp", "skills", "mcp", "session", "memory",
# CC-compatible external hooks (hooks.json): production parity with the legacy
# core engine, which always ran them. Zero overhead when no hooks.json exists
# (prepare skips registration — see CCExternalHooks::is_empty).
"cc-hooks",
# Wire web_search transport failures into the offline_mode="auto" verdict so the
# native coding runtime self-detects and flips offline on a connection failure.
"offline",
] }
# The review specialization, mounted as a `code_review` sub-agent TOOL so the coding
# agent can review the current changes in-session (L2 composing a sibling L2).
atomcode-review = { path = "../atomcode-review" }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "sync", "time"] }
tokio-util = "0.7"
async-trait = "0.1"
# Stream proxying for the compaction-summary telemetry provider decorator (folds
# StreamEvent::Usage, emits one LlmChat at stream end). Also used by tests.
futures = "0.3"
# Telemetry re-enters the neutral kernel via a LifecycleHooks adapter (the kernel's
# designated `on_request`/`on_model_response` seam), wired here at assembly.
atomcode-telemetry = { path = "../atomcode-telemetry" }
# Fresh session-id allocation (the assembly is the session_id's single owner).
uuid = { version = "1", features = ["v4"] }
dirs = "6"
# Day-granular date anchor frozen into the persona (system prompt) so the model
# has a current-date reference on every round — v1 prompt.rs parity.
chrono = "0.4"
# Parse the bash tool-call `arguments` JSON in the VerifyCadenceHook to tell a real
# check from a read-only `ls`/`git diff` dodge (discipline/verify.rs).
serde_json = "1"
serde = { version = "1", features = ["derive"] }
tracing = "0.1"
[dev-dependencies]
# in-memory capturing Telemetry for the TelemetryHook test.
atomcode-telemetry = { path = "../atomcode-telemetry", features = ["test-util"] }
# Enable reset_offline_verdict_for_test() for offline-gate tests.
atomcode-config = { path = "../atomcode-config", features = ["test-util"] }
# atomcode-kernel::testkit (MockProvider, scripted StreamEvents) is ungated — no extra dep.
tokio = { version = "1", features = ["macros", "rt-multi-thread", "sync", "time"] }
tempfile = "3"
async-trait = "0.1"
# Serialize tests that mutate the process-global ATOMCODE_HOME env var so they
# don't race (cache_prefix asserts byte-identical system prompt across assemblies).
serial_test = "3"
# Redirect ATOMCODE_HOME to a temp dir once per test binary (via a #[ctor]) so tests
# never persist into the developer's real ~/.atomcode.
atomcode-kernel = { path = "../atomcode-kernel", features = ["test-support"] }
ctor = "0.2"