jackin-core
Universal vocabulary types shared across every jackin❯ crate. This is the leaf at the bottom of the workspace dependency graph: no jackin❯ dependencies, no tokio, no subprocess, no filesystem, no presentation.
What this crate owns
- Domain nouns every other crate speaks in: agent identity, instance, isolation, manifest fragments, env model, status, launch progress, operator notices.
- Port traits and shared abstractions higher crates implement (e.g.
CommandRunner,Clock), plus the constants, paths, and selector/url/path text helpers reused everywhere. - Small self-contained widgets/ansi/host-color tokens re-exported by presentation crates.
Because everything depends on jackin-core, it must stay dependency-free, side-effect-free, and cheap to compile. Anything that needs tokio, the filesystem, a subprocess, or a real adapter belongs in a higher crate.
Architecture tier and allowed dependencies
L0 leaf/domain. Allowed workspace dependencies: none. No tokio, no I/O, no presentation. This is the floor; nothing in jackin-core may depend upward.
Structure
Public API
The crate is a vocabulary library: re-export the types/ports/constants you need from jackin_core::…. Higher crates implement the port traits defined here (e.g. CommandRunner) and pass the domain types through.
Typed construction/parse errors (thiserror): ParseProfileError, ParseMountIsolationError, ParseAgentError, SelectorError, EnvCycleError (env_model), PathsError, OpProbeError.
How to verify
cargo nextest run -p jackin-core
cargo clippy -p jackin-core --all-targets -- -D warnings