Skip to main content

harness_read/
lib.rs

1//! Read tool — Rust port of `@agent-sh/harness-read`.
2//!
3//! Conforms to `agent-knowledge/design/read.md`. Same contract as the TS
4//! package: discriminated-union result (`text | directory | attachment |
5//! error`), 1-indexed offset/limit pagination, binary sniff, NOT_FOUND
6//! with fuzzy sibling suggestions.
7
8mod binary;
9mod constants;
10mod fence;
11mod format;
12mod lines;
13mod run;
14mod schema;
15mod suggest;
16mod types;
17
18pub use binary::{is_binary, is_binary_by_content, is_binary_by_extension, is_image_mime, is_pdf_mime, mime_for};
19pub use constants::*;
20pub use format::{format_attachment, format_directory, format_text, FormatDirArgs, FormatTextArgs};
21pub use lines::{stream_lines, StreamLinesOptions, StreamLinesResult};
22pub use schema::{
23    safe_parse_read_params, ReadParams, ReadParseError, READ_TOOL_DESCRIPTION, READ_TOOL_NAME,
24};
25pub use suggest::suggest_siblings;
26pub use types::{
27    Attachment, AttachmentMeta, AttachmentReadResult, DirMeta, DirReadResult, ErrorReadResult,
28    ReadResult, ReadSessionConfig, TextMeta, TextReadResult,
29};
30
31pub async fn read(
32    params: serde_json::Value,
33    session: &ReadSessionConfig,
34) -> ReadResult {
35    run::read_run(params, session).await
36}