Files
2026-07-13 12:49:10 +08:00

181 lines
6.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# eino_setup.sh — fetch eino framework source into your project for AI-assisted development.
#
# BACKGROUND
# When building applications with eino, your AI coding assistant (Claude Code,
# Cursor, Copilot, etc.) only sees your code. It cannot navigate into eino's
# source to understand how components work, what patterns are idiomatic, or
# how to wire things together correctly.
#
# This script clones eino, eino-ext, and eino-examples into a _eino/ directory
# inside your project. Your AI assistant can then browse the actual source,
# examples, and extensions — giving it full context to help you build correctly.
#
# WHAT IT DOES
# 1. Clones eino → _eino/eino/
# 2. Clones eino-ext → _eino/eino-ext/
# 3. Clones eino-examples → _eino/eino-examples/
# 4. Adds _eino/ to .gitignore (read-only reference, never committed)
# 5. Writes a _eino/README.md explaining the directory to future readers
#
# RESULTING LAYOUT
# your-project/
# ├── _eino/
# │ ├── eino/ ← github.com/cloudwego/eino (core framework)
# │ ├── eino-ext/ ← github.com/cloudwego/eino-ext (components & integrations)
# │ └── eino-examples/ ← github.com/cloudwego/eino-examples (patterns & recipes)
# └── ... your code
#
# NOTE: _eino/ is read-only reference material. Do not edit files inside it.
# Your go.mod is unchanged — eino remains a normal dependency.
#
# KEEPING UP TO DATE
# bash eino_setup.sh --update # pull latest on all three repos
#
# USAGE
# bash eino_setup.sh # first-time setup
# bash eino_setup.sh --reset # re-clone everything from scratch
# bash eino_setup.sh --update # pull latest without re-cloning
#
# SYSTEM PROMPT
# After running this script, add the following to your AI assistant's project
# instructions (CLAUDE.md, .cursorrules, .github/copilot-instructions.md, etc.):
#
# ---
# ## eino Framework Reference
#
# This project uses the eino framework (github.com/cloudwego/eino).
# The full framework source is available locally in `_eino/`:
#
# - `_eino/eino/` — core framework (components, graph, compose, callbacks)
# - `_eino/eino-ext/` — official components and integrations (models, tools, retrievers, etc.)
# - `_eino/eino-examples/` — working examples and patterns
#
# When answering questions about eino APIs, component wiring, graph construction,
# callbacks, or any eino-specific patterns: explore `_eino/` first.
# Prefer examples from `_eino/eino-examples/` as the canonical reference for
# idiomatic usage.
# ---
set -euo pipefail
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$PROJECT_ROOT"
EINO_DIR="_eino"
EINO_REPO="https://github.com/cloudwego/eino"
EINO_EXT_REPO="https://github.com/cloudwego/eino-ext"
EINO_EXAMPLES_REPO="https://github.com/cloudwego/eino-examples"
# Parse flags
RESET=false
UPDATE=false
for arg in "$@"; do
case $arg in
--reset) RESET=true ;;
--update) UPDATE=true ;;
esac
done
echo "==> eino setup in: $PROJECT_ROOT"
# --reset: remove and re-clone
if [ "$RESET" = true ]; then
echo "==> --reset: removing $EINO_DIR/"
rm -rf "$EINO_DIR"
fi
# --update: pull latest on existing clones
if [ "$UPDATE" = true ]; then
for repo in eino eino-ext eino-examples; do
dir="$EINO_DIR/$repo"
if [ -d "$dir/.git" ]; then
echo "==> Updating $dir/"
git -C "$dir" pull --ff-only
else
echo "==> $dir/ not found, skipping update (run without --update to clone)"
fi
done
echo ""
echo "Done. Run 'bash eino_setup.sh' to clone any missing repos."
exit 0
fi
mkdir -p "$EINO_DIR"
# Clone repos (shallow — we only need source to read, not full history)
clone_if_missing() {
local repo_url="$1"
local dest="$2"
if [ ! -d "$dest/.git" ]; then
echo "==> Cloning $(basename "$dest")/"
git clone --depth=1 "$repo_url" "$dest"
else
echo "==> $dest/ already exists, skipping clone"
fi
}
clone_if_missing "$EINO_REPO" "$EINO_DIR/eino"
clone_if_missing "$EINO_EXT_REPO" "$EINO_DIR/eino-ext"
clone_if_missing "$EINO_EXAMPLES_REPO" "$EINO_DIR/eino-examples"
# Add _eino/ to .gitignore
GITIGNORE=".gitignore"
if ! grep -qxF "$EINO_DIR/" "$GITIGNORE" 2>/dev/null; then
echo "" >> "$GITIGNORE"
echo "# eino framework source (AI coding reference — see eino_setup.sh)" >> "$GITIGNORE"
echo "$EINO_DIR/" >> "$GITIGNORE"
echo "==> Added '$EINO_DIR/' to $GITIGNORE"
fi
# Write a README so the directory is self-explanatory
cat > "$EINO_DIR/README.md" <<'EOF'
# _eino — eino framework source reference
This directory contains read-only clones of the eino framework repositories,
checked out for use by AI coding assistants (Claude Code, Cursor, Copilot, etc.).
| Directory | Repository | Purpose |
|----------------|-----------------------------------------|--------------------------------|
| `eino/` | github.com/cloudwego/eino | Core framework source |
| `eino-ext/` | github.com/cloudwego/eino-ext | Components and integrations |
| `eino-examples/` | github.com/cloudwego/eino-examples | Patterns, recipes, and samples |
**Do not edit files here.** This directory is in `.gitignore` and is never committed.
To update to the latest:
bash eino_setup.sh --update
To re-clone from scratch:
bash eino_setup.sh --reset
EOF
echo ""
echo "Done. Your AI assistant now has full eino context in $EINO_DIR/:"
echo " $EINO_DIR/eino/ — core framework ($(find "$EINO_DIR/eino" -name "*.go" | wc -l | tr -d ' ') .go files)"
echo " $EINO_DIR/eino-ext/ — components & integrations ($(find "$EINO_DIR/eino-ext" -name "*.go" | wc -l | tr -d ' ') .go files)"
echo " $EINO_DIR/eino-examples/ — patterns & recipes ($(find "$EINO_DIR/eino-examples" -name "*.go" | wc -l | tr -d ' ') .go files)"
echo ""
echo "Add the following to your AI assistant's system prompt or project instructions"
echo "(e.g. CLAUDE.md, .cursorrules, .github/copilot-instructions.md):"
echo ""
echo "---"
cat <<'PROMPT'
## eino Framework Reference
This project uses the eino framework (github.com/cloudwego/eino).
The full framework source is available locally in `_eino/`:
- `_eino/eino/` — core framework (components, graph, compose, callbacks)
- `_eino/eino-ext/` — official components and integrations (models, tools, retrievers, etc.)
- `_eino/eino-examples/` — working examples and patterns
When answering questions about eino APIs, component wiring, graph construction,
callbacks, or any eino-specific patterns: explore `_eino/` first.
Prefer examples from `_eino/eino-examples/` as the canonical reference for
idiomatic usage.
PROMPT
echo "---"