1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
[]
= "agent-first-data"
= "0.31.0"
= "2024"
= "A naming convention that lets AI agents understand your data without being told what it means, plus a CLI and library for reading Markdown structure and safely editing structured JSON, TOML, YAML, dotenv, and INI documents."
= "MIT"
= "https://github.com/agentfirstkit/agent-first-data"
= "README.md"
[]
= "rust/src/lib.rs"
[[]]
= "afdata"
= "cli/src/main.rs"
= ["cli"]
[[]]
= "agent_cli"
= "rust/examples/agent_cli.rs"
= ["cli"]
[[]]
= "afdata_bench"
= "rust/examples/afdata_bench.rs"
[]
# Batteries included by default, for both the binary and the library:
# `cargo install agent-first-data` gets the full CLI (closed-world help-v2,
# skill management, stream redirection) and `cargo add agent-first-data` gets
# the general-purpose helpers including tracing. Consumers that want only the
# core formatting/redaction/protocol/document surface opt out with
# `default-features = false`.
= [
"cli",
"tracing",
"skill-admin",
"libc",
"stream-redirect",
"yaml",
"toml",
"dotenv",
"ini",
"markdown",
]
# The whole CLI surface: the closed-world compiler (`cli_spec`), the AFDATA
# adapter that turns a resolved outcome into a protocol event (`cli_afdata`),
# the emitter and version payloads (`cli`), and the `afdata` binary. With it
# off nothing CLI-shaped is linked, which is exactly what `scripts/test.sh
# static` builds to prove the data surface stands alone. `OutputFormat` is the
# deliberate exception: `render` takes it, so it lives in the feature-neutral
# `output` module.
= []
= ["dep:tracing", "dep:tracing-subscriber"]
= ["dep:noyalib"]
= ["skill"]
# Unix hardened document opens: `O_NONBLOCK` keeps special-file rejection from
# blocking, and `O_NOFOLLOW` implements `SymlinkPolicy::NoFollow` atomically.
= ["dep:libc"]
# File-descriptor redirection is Unix-specific and uses libc directly, so
# selecting it also selects the Unix support it requires.
= ["libc"]
= ["dep:noyalib"]
= ["dep:toml", "dep:toml_edit"]
= []
= []
# Read-only CommonMark block structure. In `default` alongside the other format
# backends so an installed CLI reads a README out of the box; `default-features
# = false` drops it and `pulldown-cmark` with it.
= ["dep:pulldown-cmark"]
= []
[]
# `arbitrary_precision` is load-bearing for the document layer's number
# literal fidelity (ยง4): it makes `serde_json::Number` retain the exact
# source text of a parsed number instead of collapsing it through f64,
# which is what `document::Value::Number` relies on to avoid corrupting
# integers beyond u64 range or high-precision float literals. See
# `rust/src/document/value.rs`.
= { = "1", = ["arbitrary_precision"] }
= { = "1", = ["derive"] }
= "0.4"
= "2"
= { = "0.1", = true }
= { = "0.3", = ["env-filter", "registry"], = true }
# Used by the `libc` feature for hardened document opens and by
# `stream-redirect`, which enables that feature.
= { = "0.2", = true }
= { = "0.0.18", = ["lossless-u64"], = true }
= { = "1", = true }
= { = "0.25", = true }
# `default-features = false` drops the HTML renderer and the getopts-driven
# binary, neither of which a block reader uses; what is left is the pull parser
# over three small pure-Rust crates (bitflags, memchr, unicase).
= { = "0.13", = false, = true }
[]
= "3"
[]
= "deny"
= "deny"
= "deny"
= "deny"
= "deny"