docs: tambah doc comment, logging, dan inline comments di semua 255 file
Meliputi: - File-level //! doc comment: tujuan file, alur kerja, komponen utama - Function-level /// doc comment: apa, parameter, return, flow, edge cases - Struct/enum/trait /// doc comment: peran, field docs - Tracing logging (tracing::info!/debug!/trace!/warn!/error!) di setiap fungsi - Inline comments untuk variable dan branching logic penting - Seluruh 8 crates di workspace: zesdex-backend, zesdex-cms, zesdex-entities, zesdex-iam, zesdex-infra, zesdex-ipc, zesdex-middleware, zesdex-utils - Build: 0 errors, 242/242 tests passed
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
#![allow(dead_code)]
|
||||
//! Per-tool-result compression: shrink large tool outputs before they
|
||||
//! ever enter conversation history, dispatching by content shape.
|
||||
//!
|
||||
@@ -12,6 +11,7 @@
|
||||
//! overall budget.
|
||||
use std::collections::HashSet;
|
||||
use std::fmt::Write;
|
||||
use tracing;
|
||||
|
||||
/// Below this size, compression isn't worth the risk of losing detail —
|
||||
/// pass the output through unchanged.
|
||||
@@ -46,16 +46,28 @@ const LOG_SHAPED_TOOLS: &[&str] = &["bash"];
|
||||
/// Return: `output` unchanged if `tool_name` is in `NEVER_SQUASH` or at
|
||||
/// or under `SQUASH_FLOOR_BYTES`; otherwise the compressed form from
|
||||
/// whichever detector matches its content shape.
|
||||
///
|
||||
/// # Status
|
||||
///
|
||||
/// Defined but not yet wired into the tool-execution pipeline; will be
|
||||
/// called from `tool::shell` and MCP result handlers once integration
|
||||
/// is complete.
|
||||
#[expect(dead_code, reason = "will be wired into the tool-execution pipeline")]
|
||||
pub fn apply(tool_name: &str, output: &str) -> String {
|
||||
tracing::trace!(tool_name, output_len = output.len(), "squash::apply — start");
|
||||
if NEVER_SQUASH.contains(&tool_name) || output.len() <= SQUASH_FLOOR_BYTES {
|
||||
tracing::trace!(tool_name, "squash::apply — passthrough (never-squash tool or under floor)");
|
||||
return output.to_string();
|
||||
}
|
||||
if serde_json::from_str::<serde_json::Value>(output).is_ok() {
|
||||
tracing::trace!(tool_name, "squash::apply — routing to squash_json");
|
||||
return squash_json(output);
|
||||
}
|
||||
if LOG_SHAPED_TOOLS.contains(&tool_name) && looks_log_shaped(output) {
|
||||
tracing::trace!(tool_name, "squash::apply — routing to squash_log");
|
||||
return squash_log(output);
|
||||
}
|
||||
tracing::trace!(tool_name, "squash::apply — routing to squash_generic");
|
||||
squash_generic(output, GENERIC_BUDGET_BYTES)
|
||||
}
|
||||
|
||||
@@ -287,6 +299,16 @@ fn squash_generic(text: &str, budget: usize) -> String {
|
||||
|
||||
/// Render a subset of `lines` in order, inserting a `[N lines omitted]`
|
||||
/// marker at every gap between kept lines.
|
||||
///
|
||||
/// Flow: sort kept indices → iterate; for each kept line, if a gap
|
||||
/// exists before it write `[N lines omitted]`, then write the line.
|
||||
/// After all kept lines, write a final omission marker if lines remain.
|
||||
///
|
||||
/// Why `[N lines omitted]` instead of a comment-shaped marker: the
|
||||
/// `rtk` project's own regression tests found that comment shapes get
|
||||
/// parsed by the LLM as code and trigger a retry loop.
|
||||
///
|
||||
/// Return: rendered string with kept lines in original order.
|
||||
fn render_kept_lines(lines: &[&str], keep: &HashSet<usize>) -> String {
|
||||
let mut kept_sorted: Vec<usize> = keep.iter().copied().collect();
|
||||
kept_sorted.sort_unstable();
|
||||
@@ -309,6 +331,9 @@ fn render_kept_lines(lines: &[&str], keep: &HashSet<usize>) -> String {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
//! Unit tests for tool-result squashing: floor threshold, read-tool
|
||||
//! exemption, JSON structure preservation, log compression, and
|
||||
//! generic truncation with head/tail retention.
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user