181 lines
6.7 KiB
Bash
Executable File
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 "---"
|