Tools Overview
This repository contains a set of pluggable tools that the assistant can use to operate on itself and on the surrounding GitHub repository. Each tool follows a simple interface defined by BaseTool and exposes a set of callable functions that higher-level orchestration can invoke.
Architecture
-
BaseTool: All tools inherit from tools/base_tool.py and implement:
- get_functions(): returns a list of function specs (name, description, JSON schema for parameters)
- execute(function_name, **kwargs): dispatches calls to concrete implementations
- clear(): resets transient state
-
Discovery: Tools are simple Python modules under tools/. They can be imported and registered by the host application. Each tool is self-contained and may use environment variables for configuration.
Available tools
-
GitHubTool (tools/github_tool.py)
- Rich integration with the GitHub REST API for repository tasks.
- Examples of capabilities: read_file, list_files, search_code, create_branch, commit_file, commit_file_patch, create_pull_request, PR review helpers, issues and project boards, branch utilities, and more.
-
GitHubCIHelper (tools/github_ci_tool.py)
- Focused helpers for GitHub Actions CI: discover PR workflow runs, fetch job logs, and parse unittest failure blocks from logs.
-
LogTool (tools/log_tool.py)
- Reads the local logs/output.log file. Supports tailing by line count or filtering to the last 24 hours using a timestamp-aware parser.
-
StandaloneLLMTool (tools/standalone_llm_tool.py)
- Bridges to external LLMs or a separate copilot service.
- Functions: call_external_llm (uses OPENAI_API_KEY), call_external_copilot (uses COPILOT_API_URL).
-
RepoIndexTool (tools/repo_index_tool.py) [NEW]
- Quickly builds a lightweight index of repository paths via the GitHub Contents API to aid navigation, discovery, and targeted reads.
- Functions:
- get_repo_tree(path="", ref="main", max_depth=3, include_files=True, include_dirs=True)
- find_files(pattern, path="", ref="main", max_results=50)
- get_file_head(path, ref="main", max_bytes=4096)
Adding a new tool
- Create a new module under tools/ and subclass BaseTool.
- Implement get_functions() to describe your function signatures and parameters.
- Implement execute() to route to internal methods and return structured results or error strings.
- Prefer dependency injection and env vars over hardcoding. Reuse a shared requests.Session where practical.
- Log responsibly using the logging module; do not print directly. Attach a NullHandler by default to avoid handler warnings.
- Avoid storing secrets in memory; prefer short-lived per-request usage. Implement clear() to drop state.
Environment variables (common)
- GITHUB_TOKEN: required for GitHub API access in most tools.
- GITHUB_REPOSITORY: owner/repo used by GitHubTool and RepoIndexTool.
- OPENAI_API_KEY: used by StandaloneLLMTool.
- COPILOT_API_URL: used by StandaloneLLMTool for external copilot calls.
Notes
- Tools should be defensive and return clear error messages on failures.
- Keep function results concise and JSON-serializable where possible.
- If your tool fetches large data, consider pagination or size limits and expose parameters for control.