yao/bin/yao-dev
Max 7f44e442da Enhance File Handling and Input Parsing in Test Framework
- Introduced support for file attachments in test inputs using the `file://` protocol, allowing images, audio, and documents to be loaded and converted to appropriate formats.
- Updated `ParseInput` and related functions to handle file references, ensuring seamless integration of file content into messages.
- Enhanced error handling and path resolution for file loading, considering both relative paths and the `YAO_ROOT` environment variable.
- Expanded documentation to include examples of file attachments and their usage in test cases, improving clarity for users.
2025-12-25 11:50:58 +08:00

61 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
# yao-dev - Run yao from source for real-time debugging
# Uses go -C to compile from source while keeping current directory as app root
# Get the real path of this script (resolve symlinks)
SCRIPT_PATH="${BASH_SOURCE[0]}"
while [ -L "$SCRIPT_PATH" ]; do
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
SCRIPT_PATH="$(readlink "$SCRIPT_PATH")"
# If the link is relative, resolve it relative to the directory
[[ "$SCRIPT_PATH" != /* ]] && SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_PATH"
done
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
# YAO source directory is the parent of bin/
YAO_SOURCE_DIR="$(dirname "$SCRIPT_DIR")"
if [ ! -d "$YAO_SOURCE_DIR" ]; then
echo "Error: yao source directory not found at $YAO_SOURCE_DIR"
exit 1
fi
if [ ! -f "$YAO_SOURCE_DIR/go.mod" ]; then
echo "Error: go.mod not found in $YAO_SOURCE_DIR, not a valid yao source directory"
exit 1
fi
# Find app root by looking for app.yao in current directory or parent directories
find_app_root() {
local dir="$(pwd)"
while [ "$dir" != "/" ]; do
if [ -f "$dir/app.yao" ] || [ -f "$dir/app.json" ] || [ -f "$dir/app.jsonc" ]; then
echo "$dir"
return 0
fi
dir="$(dirname "$dir")"
done
# If not found, use current directory as fallback
pwd
}
# Set YAO_ROOT to app root directory
export YAO_ROOT="$(find_app_root)"
# Convert relative file paths in arguments to absolute paths
# This is needed because go -C changes the working directory
ARGS=()
for arg in "$@"; do
# Check if it looks like a relative path
if [[ "$arg" == ./* ]] || [[ "$arg" == ../* ]]; then
# Always convert to absolute path based on current directory
ARGS+=("$(pwd)/${arg#./}")
else
ARGS+=("$arg")
fi
done
# Use go -C to run from source directory while staying in current directory
exec go -C "$YAO_SOURCE_DIR" run . "${ARGS[@]}"