Add section comments to evaluator.sx, show comments in sx_summarise
evaluator.sx: 11 section headers + 27 subgroup/function comments documenting the CEK machine structure (state, frames, kont ops, extension points, eval utilities, machine core, special forms, call dispatch, HO forms, continue phase, entry points). mcp_tree.ml: sx_summarise and sx_read_tree now inject file comments into their output — comments appear as un-numbered annotation lines between indexed entries, so indices stay correct for editing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -527,6 +527,38 @@ let write_edit_with_comments file cmap result =
|
||||
error_result ("Error: " ^ err))
|
||||
| _ -> error_result "Unexpected result type"
|
||||
|
||||
(* Inject comment text into summarise/annotate output.
|
||||
Matches [N] markers and inserts the comment block that precedes expr N. *)
|
||||
let inject_comments output cmap =
|
||||
if Hashtbl.length cmap.before = 0 && cmap.trailing = [] then output
|
||||
else
|
||||
let lines = String.split_on_char '\n' output in
|
||||
let buf = Buffer.create (String.length output + 512) in
|
||||
let first = ref true in
|
||||
List.iter (fun line ->
|
||||
(* Check if line starts with [N] *)
|
||||
let idx = if String.length line > 1 && line.[0] = '[' then
|
||||
(try Scanf.sscanf line "[%d]" (fun n -> Some n) with _ -> None)
|
||||
else None in
|
||||
(match idx with
|
||||
| Some n ->
|
||||
(match Hashtbl.find_opt cmap.before n with
|
||||
| Some comments ->
|
||||
List.iter (fun c ->
|
||||
if not !first then Buffer.add_char buf '\n';
|
||||
first := false;
|
||||
match c with
|
||||
| Comment text -> Buffer.add_string buf text
|
||||
| _ -> ()
|
||||
) comments
|
||||
| None -> ())
|
||||
| None -> ());
|
||||
if not !first then Buffer.add_char buf '\n';
|
||||
first := false;
|
||||
Buffer.add_string buf line
|
||||
) lines;
|
||||
Buffer.contents buf
|
||||
|
||||
(* ------------------------------------------------------------------ *)
|
||||
(* Tool handlers *)
|
||||
(* ------------------------------------------------------------------ *)
|
||||
@@ -536,39 +568,36 @@ let handle_tool name args =
|
||||
match name with
|
||||
| "sx_read_tree" ->
|
||||
let file = args |> member "file" |> to_string in
|
||||
let tree = parse_file file in
|
||||
let tree, cmap = parse_file_with_comments file in
|
||||
let focus = args |> member "focus" |> to_string_option in
|
||||
let max_depth = args |> member "max_depth" |> to_int_option in
|
||||
let max_lines = args |> member "max_lines" |> to_int_option in
|
||||
let offset = args |> member "offset" |> to_int_option |> Option.value ~default:0 in
|
||||
(match focus with
|
||||
| Some pattern ->
|
||||
(* Focus mode: expand matching subtrees, collapse rest *)
|
||||
text_result (value_to_string (call_sx "annotate-focused" [tree; String pattern]))
|
||||
text_result (inject_comments (value_to_string (call_sx "annotate-focused" [tree; String pattern])) cmap)
|
||||
| None ->
|
||||
match max_lines with
|
||||
| Some limit ->
|
||||
(* Paginated mode *)
|
||||
text_result (value_to_string (call_sx "annotate-paginated"
|
||||
[tree; Number (float_of_int offset); Number (float_of_int limit)]))
|
||||
text_result (inject_comments (value_to_string (call_sx "annotate-paginated"
|
||||
[tree; Number (float_of_int offset); Number (float_of_int limit)])) cmap)
|
||||
| None ->
|
||||
match max_depth with
|
||||
| Some depth ->
|
||||
(* Depth-limited mode *)
|
||||
text_result (value_to_string (call_sx "summarise" [tree; Number (float_of_int depth)]))
|
||||
text_result (inject_comments (value_to_string (call_sx "summarise" [tree; Number (float_of_int depth)])) cmap)
|
||||
| None ->
|
||||
(* Auto mode: full tree if small, summarise if large *)
|
||||
let full = value_to_string (call_sx "annotate-tree" [tree]) in
|
||||
let line_count = 1 + String.fold_left (fun n c -> if c = '\n' then n + 1 else n) 0 full in
|
||||
if line_count <= 200 then text_result full
|
||||
if line_count <= 200 then text_result (inject_comments full cmap)
|
||||
else
|
||||
let summary = value_to_string (call_sx "summarise" [tree; Number 2.0]) in
|
||||
text_result (Printf.sprintf ";; File has %d lines — showing depth-2 summary. Use max_depth, max_lines, or focus to control output.\n%s" line_count summary))
|
||||
text_result (inject_comments (Printf.sprintf ";; File has %d lines — showing depth-2 summary. Use max_depth, max_lines, or focus to control output.\n%s" line_count summary) cmap))
|
||||
|
||||
| "sx_summarise" ->
|
||||
let tree = parse_file (args |> member "file" |> to_string) in
|
||||
let file = args |> member "file" |> to_string in
|
||||
let tree, cmap = parse_file_with_comments file in
|
||||
let depth = args |> member "depth" |> to_int in
|
||||
text_result (value_to_string (call_sx "summarise" [tree; Number (float_of_int depth)]))
|
||||
text_result (inject_comments (value_to_string (call_sx "summarise" [tree; Number (float_of_int depth)])) cmap)
|
||||
|
||||
| "sx_read_subtree" ->
|
||||
let tree = parse_file (args |> member "file" |> to_string) in
|
||||
|
||||
Reference in New Issue
Block a user