mirror of
https://github.com/enricoros/big-AGI.git
synced 2026-05-10 21:50:14 -07:00
Document how to launch tools/ai/repo-structure.sh from anywhere
This commit is contained in:
+41
-19
@@ -1,26 +1,48 @@
|
||||
# repo-structure.sh
|
||||
## `repo-structure.sh`
|
||||
|
||||
Quick utility to generate a repository file structure in a format optimized for AI assistants. The output uses XML-style context tags with proper indentation for easy understanding of the directory hierarchy.
|
||||
This tool creates a compact, hierarchical representation of your Git repository that you can
|
||||
paste directly into an assistant prompt to provide immediate context. Uses the XML format of
|
||||
Claude Code.
|
||||
|
||||
## Why?
|
||||
|
||||
Ever tried explaining a codebase to an AI assistant? This tool creates a compact, hierarchical representation of your Git repository that you can paste directly into an assistant prompt to provide immediate context.
|
||||
|
||||
## Usage
|
||||
|
||||
You need to be inside a Git repository to run this:
|
||||
|
||||
### Direct execution (recommended)
|
||||
### Remote Execution
|
||||
|
||||
```bash
|
||||
# From the repository root:
|
||||
./tools/ai/repo-structure.sh
|
||||
# Run this from the ROOT of your git repository
|
||||
curl -fsSL https://raw.githubusercontent.com/enricoros/big-AGI/v2-dev/tools/ai/repo-structure.sh | sh
|
||||
```
|
||||
|
||||
# Include hidden files (starting with .)
|
||||
./tools/ai/repo-structure.sh --all
|
||||
## Options
|
||||
|
||||
# Copy directly to clipboard
|
||||
./tools/ai/repo-structure.sh --clipboard
|
||||
- `-a, --all`: Include hidden files and directories
|
||||
- `-o, --output FILE`: Save output to a file
|
||||
- `-h, --help`: Show help message
|
||||
|
||||
# Save to a file
|
||||
./tools/ai/repo-structure.sh --output repo-structure.xml
|
||||
Example with options (include hidden files):
|
||||
|
||||
- `curl -fsSL https://raw.githubusercontent.com/enricoros/big-AGI/v2-dev/tools/ai/repo-structure.sh | sh -s -- -a`
|
||||
|
||||
## Requirements
|
||||
|
||||
- Bash 4+ (for associative arrays)
|
||||
- Git (the repository must be initialized)
|
||||
- For clipboard functionality:
|
||||
- macOS: pbcopy (built-in)
|
||||
- Linux: xclip or xsel
|
||||
- Windows: clip (Git Bash)
|
||||
|
||||
## How does the output look?
|
||||
|
||||
The output is specifically formatted for easy consumption by AI assistants:
|
||||
|
||||
```xml
|
||||
<context name="directoryStructure" description="Below is a snapshot of this project root file structure (git ls-files) at the start of the conversation. This snapshot will NOT update during the conversation.">
|
||||
- README.md
|
||||
- src/
|
||||
- app/
|
||||
- components/
|
||||
- Button.tsx
|
||||
...
|
||||
</context>
|
||||
```
|
||||
|
||||
Just paste this into your AI assistant's prompt for instant context about the codebase structure.
|
||||
|
||||
@@ -3,16 +3,17 @@
|
||||
# Wraps output in <context name="directoryStructure"> tags.
|
||||
# Hides dotfiles by default, use -a/--all to show them.
|
||||
|
||||
# Default: exclude hidden files/dirs
|
||||
# Default settings
|
||||
INCLUDE_HIDDEN=false
|
||||
COPY_TO_CLIPBOARD=true
|
||||
|
||||
# Function to print usage
|
||||
print_usage() {
|
||||
echo "Usage: $0 [options]"
|
||||
echo "Options:"
|
||||
echo " -a, --all Include hidden files and directories (starting with '.')"
|
||||
echo " -o, --output Output to a file instead of stdout (e.g., -o structure.xml)"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " -a, --all Include hidden files and directories (starting with '.')"
|
||||
echo " -o, --output Output to a file instead of stdout (e.g., -o structure.xml)"
|
||||
echo " -h, --help Show this help message"
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
@@ -27,7 +28,33 @@ while [[ "$#" -gt 0 ]]; do
|
||||
shift
|
||||
done
|
||||
|
||||
# Start the output generation
|
||||
# Check if we're in a git repository
|
||||
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
|
||||
echo "Error: This script must be run from within a Git repository." >&2
|
||||
echo "Please navigate to your cloned Big-AGI repository and try again." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Try to find the clipboard command for the current OS
|
||||
clipboard_cmd=""
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS
|
||||
clipboard_cmd="pbcopy"
|
||||
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
# Linux with X11
|
||||
if command -v xclip &>/dev/null; then
|
||||
clipboard_cmd="xclip -selection clipboard"
|
||||
elif command -v xsel &>/dev/null; then
|
||||
clipboard_cmd="xsel --clipboard --input"
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
|
||||
# Windows Git Bash or similar
|
||||
clipboard_cmd="clip"
|
||||
fi
|
||||
|
||||
|
||||
# Generate the structure
|
||||
generate_structure() {
|
||||
# Use XML-like tags instead of markdown code fences
|
||||
echo '<context name="directoryStructure" description="Below is a snapshot of this project root file structure (git ls-files) at the start of the conversation. This snapshot will NOT update during the conversation.">'
|
||||
@@ -104,10 +131,27 @@ if (( BASH_VERSINFO[0] < 4 )); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Either output to file or stdout
|
||||
# Handle output to file, clipboard, or stdout
|
||||
if [[ -n "$OUTPUT_FILE" ]]; then
|
||||
generate_structure > "$OUTPUT_FILE"
|
||||
echo "Repository structure saved to $OUTPUT_FILE"
|
||||
|
||||
if [[ "$COPY_TO_CLIPBOARD" == true ]]; then
|
||||
if [[ -n "$clipboard_cmd" ]]; then
|
||||
cat "$OUTPUT_FILE" | eval "$clipboard_cmd"
|
||||
echo "Also copied to clipboard!"
|
||||
else
|
||||
echo "Warning: Clipboard copy requested but no clipboard command found for your OS." >&2
|
||||
fi
|
||||
fi
|
||||
elif [[ "$COPY_TO_CLIPBOARD" == true ]]; then
|
||||
if [[ -n "$clipboard_cmd" ]]; then
|
||||
generate_structure | tee >(eval "$clipboard_cmd" > /dev/null)
|
||||
echo -e "\nStructure copied to clipboard!"
|
||||
else
|
||||
echo "Warning: No clipboard command found for your OS. Displaying output instead." >&2
|
||||
generate_structure
|
||||
fi
|
||||
else
|
||||
generate_structure
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user