- coding_tools: list_files (max_entries=200, sorted), run_command
(max_chars=8000, output_offset), grep_search (max_lines=100, offset);
added _truncate_output helper for run_command paging
- pr_tools: get_pull_request_diff / get_pull_request_patch now truncate
at 15k chars with hunk-boundary awareness and char_offset paging;
get_pull_request_comments gains limit/offset paging
- issue_tools: get_issue_comments gains limit/offset paging
- file_tools: get_file_content / get_file_content_with_ref now paginate
by line (offset=1, limit=250), matching existing read_file convention;
added _paginate_lines helper
- research_tools: fetch_url gains char_offset parameter; _smart_truncate
now slices from an offset and embeds next char_offset in the footer
- gitea_tools facade: all new params threaded through
- Add ResearchTools class in gitea/tools/research_tools.py
- web_search: DuckDuckGo HTML search, no API key required
- fetch_url: httpx-based URL fetcher with HTML stripping + truncation
- Wire both tools into planning_tools and coding_tools_list in dispatcher.py
- Add 19 unit tests covering all methods, error paths, and edge cases
---------
Co-authored-by: Michael <michael@example.com>
Reviewed-on: #2