{ "version": 1, "meta": { "lastScanned": "2026-10-23T11:21:49.966Z", "fileCount": 22, "hits": 0, "misses": 0, "renderedHash": "2030278ebfc7a2591c4824586f15125940d579ecad61b4e8cb5a9a9bf6b3a399", "storeUpdatedAt": "2026-10-23T11:21:49.967Z", "rootHash": "77f386ab99dd2782" }, "files": { ".gitignore": { "description": "Git ignore rules", "tokens": 24, "hash": "465569a17f6c1fcd", "size": 89, "mtimeMs": 1792754328319.2644, "updatedAt": "2026-10-23T11:21:49.944Z", "source": "scan", "importance": 0.1527 }, "AGENTS.md": { "description": "OpenWolf", "tokens": 75, "hash": "e401f79554a8d796", "size": 297, "mtimeMs": 1792754075050.7603, "updatedAt": "2026-10-23T11:21:49.944Z", "source": "scan", "importance": 0.1527 }, "Cargo.toml": { "description": "Rust package manifest", "tokens": 100, "hash": "c445aa952b469eef", "size": 351, "mtimeMs": 1792754084001.563, "updatedAt": "2026-10-23T11:21:49.945Z", "source": "scan", "importance": 0.1527 }, "CLAUDE.md": { "description": "OpenWolf", "tokens": 99, "hash": "074d6b42b583729a", "size": 395, "mtimeMs": 1792754068779.6982, "updatedAt": "2026-10-23T11:21:49.945Z", "source": "scan", "importance": 0.1527 }, "crates/sabia-cli/Cargo.toml": { "description": "Rust package manifest", "tokens": 125, "hash": "dc1447c043cb895b", "size": 436, "mtimeMs": 1792754292996.8179, "updatedAt": "2026-10-23T11:21:49.945Z", "source": "scan", "importance": 0.1527 }, "crates/sabia-cli/src/main.rs": { "description": "Lista interfaces de rede e mostra quais são Wi-Fi.", "tokens": 2193, "hash": "2f37e8d34c3f1e7d", "size": 7696, "mtimeMs": 1792754462287.5278, "updatedAt": "2026-10-23T11:21:49.945Z", "source": "scan", "symbols": [ { "name": "web", "kind": "section", "startLine": 1, "endLine": 1, "tokens": 3 }, { "name": "Cli", "kind": "class", "startLine": 12, "endLine": 15, "tokens": 16 }, { "name": "Cmd", "kind": "class", "startLine": 18, "endLine": 49, "tokens": 285 }, { "name": "IfaceAction", "kind": "class", "startLine": 52, "endLine": 56, "tokens": 43 }, { "name": "OnOff", "kind": "class", "startLine": 59, "endLine": 62, "tokens": 9 }, { "name": "audit_path", "kind": "fn", "startLine": 64, "endLine": 66, "tokens": 20 }, { "name": "main", "kind": "fn", "startLine": 68, "endLine": 74, "tokens": 41 }, { "name": "run", "kind": "fn", "startLine": 76, "endLine": 216, "tokens": 1643 } ], "symbolSource": "ts", "skeleton": "mod web;\nstruct Cli {\nenum Cmd {\nenum IfaceAction {\nenum OnOff {\nfn audit_path() -> PathBuf {\nfn main() {\nfn run(cli: Cli) -> sabia_core::Result<()> {", "imports": [ "crates/sabia-cli/src/web/mod.rs" ], "importance": 0.1527 }, "crates/sabia-cli/src/web/index.html": { "description": "Sabiá", "tokens": 1684, "hash": "4344229aaa5e2db1", "size": 6334, "mtimeMs": 1792754445269.6348, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "importance": 0.1527 }, "crates/sabia-cli/src/web/mod.rs": { "description": "Servidor local da interface: a mesma filosofia do Guará (`guara ui`) —", "tokens": 2254, "hash": "a6aa02205c19274e", "size": 7896, "mtimeMs": 1792754470284.2668, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "symbols": [ { "name": "Session", "kind": "class", "startLine": 17, "endLine": 20, "tokens": 24 }, { "name": "AppState", "kind": "class", "startLine": 23, "endLine": 25, "tokens": 19 }, { "name": "serve", "kind": "fn", "startLine": 27, "endLine": 47, "tokens": 190 }, { "name": "gen_token", "kind": "fn", "startLine": 49, "endLine": 53, "tokens": 52 }, { "name": "open_browser", "kind": "fn", "startLine": 55, "endLine": 57, "tokens": 36 }, { "name": "Request", "kind": "class", "startLine": 59, "endLine": 64, "tokens": 34 }, { "name": "parse_request", "kind": "fn", "startLine": 66, "endLine": 94, "tokens": 286 }, { "name": "urldecode", "kind": "fn", "startLine": 96, "endLine": 98, "tokens": 34 }, { "name": "handle", "kind": "fn", "startLine": 100, "endLine": 119, "tokens": 227 }, { "name": "respond", "kind": "fn", "startLine": 121, "endLine": 131, "tokens": 119 }, { "name": "api", "kind": "fn", "startLine": 133, "endLine": 174, "tokens": 531 }, { "name": "start_scan", "kind": "fn", "startLine": 176, "endLine": 215, "tokens": 439 }, { "name": "stop_scan", "kind": "fn", "startLine": 217, "endLine": 222, "tokens": 60 } ], "symbolSource": "ts", "skeleton": "struct Session {\nstruct AppState {\npub fn serve(port: u16) -> sabia_core::Result<()> {\nfn gen_token() -> String {\nfn open_browser(url: &str) -> std::io::Result<()> {\nstruct Request {\nfn parse_request(stream: &mut TcpStream) -> std::io::Result {\nfn urldecode(s: &str) -> String {\nfn handle(mut stream: TcpStream, state: &Arc, expected_token: &str) -> std::io::Result<()> {\nfn respond(stream: &mut TcpStream, code: u16, ctype: &str, body: &[u8]) -> std::io::Result<()> {\nfn api(state: &Arc, req: &Request) -> String {\nfn start_scan(state: &Arc, name: String) -> String {\nfn stop_scan(state: &Arc, name: &str) {", "importance": 0.2825 }, "crates/sabia-core/Cargo.toml": { "description": "Rust package manifest", "tokens": 190, "hash": "09752951731f7901", "size": 670, "mtimeMs": 1792754101085.2576, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "importance": 0.1527 }, "crates/sabia-core/src/audit.rs": { "description": "Trilha de auditoria encadeada por hash de toda ação sensível (ligar", "tokens": 1151, "hash": "5b60f2b256cb178b", "size": 4052, "mtimeMs": 1792754254667.1384, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "symbols": [ { "name": "AuditEntry", "kind": "class", "startLine": 20, "endLine": 27, "tokens": 50 }, { "name": "AuditLog", "kind": "class", "startLine": 29, "endLine": 32, "tokens": 22 }, { "name": "AuditLog", "kind": "section", "startLine": 36, "endLine": 114, "tokens": 828 }, { "name": "AuditLog.open", "kind": "method", "startLine": 37, "endLine": 57, "tokens": 214 }, { "name": "AuditLog.record", "kind": "method", "startLine": 59, "endLine": 83, "tokens": 271 }, { "name": "AuditLog.verify", "kind": "method", "startLine": 87, "endLine": 113, "tokens": 305 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs" ], "importance": 0.1657 }, "crates/sabia-core/src/capture.rs": { "description": "Captura crua de quadros 802.11 via `AF_PACKET`, sem depender de libpcap.", "tokens": 1114, "hash": "b2f202d231708f43", "size": 3915, "mtimeMs": 1792754351620.4128, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "symbols": [ { "name": "RawCapture", "kind": "class", "startLine": 19, "endLine": 21, "tokens": 12 }, { "name": "RawCapture", "kind": "section", "startLine": 23, "endLine": 94, "tokens": 726 }, { "name": "RawCapture.open", "kind": "method", "startLine": 26, "endLine": 58, "tokens": 310 }, { "name": "RawCapture.set_read_timeout", "kind": "method", "startLine": 62, "endLine": 80, "tokens": 184 }, { "name": "RawCapture.recv", "kind": "method", "startLine": 83, "endLine": 93, "tokens": 126 }, { "name": "AsRawFd", "kind": "section", "startLine": 96, "endLine": 100, "tokens": 26 }, { "name": "AsRawFd.as_raw_fd", "kind": "method", "startLine": 97, "endLine": 99, "tokens": 16 }, { "name": "Drop", "kind": "section", "startLine": 102, "endLine": 106, "tokens": 29 }, { "name": "Drop.drop", "kind": "method", "startLine": 103, "endLine": 105, "tokens": 21 }, { "name": "if_index", "kind": "fn", "startLine": 108, "endLine": 115, "tokens": 90 }, { "name": "check_capabilities", "kind": "fn", "startLine": 119, "endLine": 122, "tokens": 28 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs" ], "importance": 0.1657 }, "crates/sabia-core/src/dot11.rs": { "description": "Parser mínimo de quadros 802.11 de gerenciamento (beacon, probe", "tokens": 1655, "hash": "f6ce71057b70544a", "size": 5804, "mtimeMs": 1792754184829.32, "updatedAt": "2026-10-23T11:21:49.946Z", "source": "scan", "symbols": [ { "name": "FrameKind", "kind": "class", "startLine": 5, "endLine": 14, "tokens": 41 }, { "name": "Security", "kind": "class", "startLine": 17, "endLine": 23, "tokens": 20 }, { "name": "ManagementInfo", "kind": "class", "startLine": 26, "endLine": 30, "tokens": 37 }, { "name": "mac_to_string", "kind": "fn", "startLine": 32, "endLine": 34, "tokens": 44 }, { "name": "Frame", "kind": "class", "startLine": 37, "endLine": 46, "tokens": 96 }, { "name": "parse", "kind": "fn", "startLine": 48, "endLine": 83, "tokens": 389 }, { "name": "bssid_str", "kind": "method", "startLine": 86, "endLine": 88, "tokens": 29 }, { "name": "src_str", "kind": "method", "startLine": 90, "endLine": 92, "tokens": 28 }, { "name": "management_info", "kind": "method", "startLine": 96, "endLine": 162, "tokens": 635 }, { "name": "is_eapol", "kind": "fn", "startLine": 167, "endLine": 183, "tokens": 160 } ], "symbolSource": "ts", "importance": 0.2361 }, "crates/sabia-core/src/error.rs": { "description": "[derive(Debug, thiserror::Error)]", "tokens": 225, "hash": "02139521fcac88db", "size": 797, "mtimeMs": 1792754108274.089, "updatedAt": "2026-10-23T11:21:49.947Z", "source": "scan", "importance": 1 }, "crates/sabia-core/src/iface.rs": { "description": "Descoberta de interfaces de rede e identificação das que são Wi-Fi.", "tokens": 973, "hash": "bc45dfdc47a527fc", "size": 3427, "mtimeMs": 1792754124447.7615, "updatedAt": "2026-10-23T11:21:49.947Z", "source": "scan", "symbols": [ { "name": "Interface", "kind": "class", "startLine": 11, "endLine": 18, "tokens": 59 }, { "name": "Mode", "kind": "class", "startLine": 21, "endLine": 25, "tokens": 16 }, { "name": "net_root", "kind": "fn", "startLine": 27, "endLine": 29, "tokens": 19 }, { "name": "list_all", "kind": "fn", "startLine": 32, "endLine": 44, "tokens": 110 }, { "name": "list_wireless", "kind": "fn", "startLine": 47, "endLine": 49, "tokens": 35 }, { "name": "get", "kind": "fn", "startLine": 51, "endLine": 57, "tokens": 57 }, { "name": "read_interface", "kind": "fn", "startLine": 59, "endLine": 98, "tokens": 372 }, { "name": "read_wireless_mode", "kind": "fn", "startLine": 104, "endLine": 110, "tokens": 62 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs" ], "importance": 0.2361 }, "crates/sabia-core/src/lib.rs": { "description": "`sabia-core`: tudo que fala com o rádio Wi-Fi, interpreta quadros 802.11", "tokens": 140, "hash": "e65164872526b1e7", "size": 495, "mtimeMs": 1792754288188.87, "updatedAt": "2026-10-23T11:21:49.947Z", "source": "scan", "imports": [ "crates/sabia-core/src/audit.rs", "crates/sabia-core/src/dot11.rs", "crates/sabia-core/src/error.rs", "crates/sabia-core/src/iface.rs", "crates/sabia-core/src/netlink.rs", "crates/sabia-core/src/pcapwriter.rs", "crates/sabia-core/src/radiotap.rs", "crates/sabia-core/src/scan.rs", "crates/sabia-core/src/update.rs", "crates/sabia-core/src/capture.rs" ], "importance": 0.1527 }, "crates/sabia-core/src/netlink.rs": { "description": "Controle de modo (managed/monitor) e canal via `iw`.", "tokens": 996, "hash": "6a27b03cef2c283e", "size": 3500, "mtimeMs": 1792754142459.2986, "updatedAt": "2026-10-23T11:21:49.947Z", "source": "scan", "symbols": [ { "name": "run", "kind": "fn", "startLine": 13, "endLine": 34, "tokens": 246 }, { "name": "iw_dev_type", "kind": "fn", "startLine": 36, "endLine": 49, "tokens": 123 }, { "name": "supported_channels", "kind": "fn", "startLine": 52, "endLine": 80, "tokens": 294 }, { "name": "set_monitor_mode", "kind": "fn", "startLine": 83, "endLine": 89, "tokens": 84 }, { "name": "set_channel", "kind": "fn", "startLine": 92, "endLine": 95, "tokens": 42 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs", "crates/sabia-core/src/iface.rs" ], "importance": 0.1657 }, "crates/sabia-core/src/pcapwriter.rs": { "description": "Escritor de arquivos `.pcap` (formato clássico, link-type 127 =", "tokens": 507, "hash": "2d6921c66f9e7506", "size": 1781, "mtimeMs": 1792754240112.29, "updatedAt": "2026-10-23T11:21:49.947Z", "source": "scan", "symbols": [ { "name": "PcapWriter", "kind": "class", "startLine": 13, "endLine": 15, "tokens": 15 }, { "name": "PcapWriter", "kind": "section", "startLine": 17, "endLine": 47, "tokens": 379 }, { "name": "PcapWriter.create", "kind": "method", "startLine": 18, "endLine": 30, "tokens": 186 }, { "name": "PcapWriter.write_frame", "kind": "method", "startLine": 33, "endLine": 41, "tokens": 140 }, { "name": "PcapWriter.flush", "kind": "method", "startLine": 43, "endLine": 46, "tokens": 26 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs" ], "importance": 0.1657 }, "crates/sabia-core/src/radiotap.rs": { "description": "Parser mínimo de cabeçalho Radiotap — só os campos que usamos", "tokens": 881, "hash": "3dc5e23c73e7e66a", "size": 3104, "mtimeMs": 1792754360436.5854, "updatedAt": "2026-10-23T11:21:49.948Z", "source": "scan", "symbols": [ { "name": "RadiotapInfo", "kind": "class", "startLine": 6, "endLine": 10, "tokens": 34 }, { "name": "parse", "kind": "fn", "startLine": 20, "endLine": 94, "tokens": 626 }, { "name": "freq_to_channel", "kind": "fn", "startLine": 96, "endLine": 103, "tokens": 73 } ], "symbolSource": "ts", "importance": 0.2361 }, "crates/sabia-core/src/scan.rs": { "description": "Agregação de quadros capturados em uma tabela de APs e clientes vistos,", "tokens": 1128, "hash": "bcd7f984398bfdc4", "size": 3963, "mtimeMs": 1792754229534.2896, "updatedAt": "2026-10-23T11:21:49.948Z", "source": "scan", "symbols": [ { "name": "AccessPoint", "kind": "class", "startLine": 11, "endLine": 20, "tokens": 76 }, { "name": "ScanTable", "kind": "class", "startLine": 23, "endLine": 25, "tokens": 18 }, { "name": "ScanTable", "kind": "section", "startLine": 27, "endLine": 102, "tokens": 842 }, { "name": "ScanTable.new", "kind": "method", "startLine": 28, "endLine": 30, "tokens": 16 }, { "name": "ScanTable.ingest", "kind": "method", "startLine": 36, "endLine": 95, "tokens": 696 }, { "name": "ScanTable.access_points", "kind": "method", "startLine": 97, "endLine": 101, "tokens": 57 }, { "name": "security_label", "kind": "fn", "startLine": 104, "endLine": 112, "tokens": 77 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/dot11.rs", "crates/sabia-core/src/radiotap.rs" ], "importance": 0.1657 }, "crates/sabia-core/src/update.rs": { "description": "Auto-atualização simples: verifica a última release no GitHub, baixa o", "tokens": 1772, "hash": "03ad228ca62475e3", "size": 6236, "mtimeMs": 1792754282046.0845, "updatedAt": "2026-10-23T11:21:49.948Z", "source": "scan", "symbols": [ { "name": "Release", "kind": "class", "startLine": 18, "endLine": 21, "tokens": 19 }, { "name": "Asset", "kind": "class", "startLine": 24, "endLine": 27, "tokens": 20 }, { "name": "UpdateStatus", "kind": "class", "startLine": 30, "endLine": 34, "tokens": 38 }, { "name": "curl_text", "kind": "fn", "startLine": 36, "endLine": 48, "tokens": 152 }, { "name": "curl_download", "kind": "fn", "startLine": 50, "endLine": 61, "tokens": 138 }, { "name": "asset_name_for_platform", "kind": "fn", "startLine": 63, "endLine": 73, "tokens": 91 }, { "name": "check", "kind": "fn", "startLine": 77, "endLine": 99, "tokens": 260 }, { "name": "apply", "kind": "fn", "startLine": 103, "endLine": 162, "tokens": 693 }, { "name": "find_binary", "kind": "fn", "startLine": 164, "endLine": 173, "tokens": 109 } ], "symbolSource": "ts", "imports": [ "crates/sabia-core/src/error.rs" ], "importance": 0.1657 }, "GEMINI.md": { "description": "OpenWolf", "tokens": 75, "hash": "e401f79554a8d796", "size": 297, "mtimeMs": 1792754075057.7603, "updatedAt": "2026-10-23T11:21:49.948Z", "source": "scan", "importance": 0.1527 }, "README.md": { "description": "Project documentation", "tokens": 462, "hash": "04a8387e4a13cf9f", "size": 1887, "mtimeMs": 1792754508878.1196, "updatedAt": "2026-10-23T11:21:49.949Z", "source": "scan", "importance": 0.1527 } }, "preamble": [ "> Project structure index. Auto-maintained by OpenWolf hooks and daemon.", "> Run `openwolf scan` to generate, or wait for the first Claude Code session.", "> Status: Pending initial scan" ] }