diff --git a/AGENTS.md b/AGENTS.md index d653442f..5cc48071 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -94,7 +94,7 @@ Run the TUI in a controlled terminal (from the repo root): ```bash tmux new-session -d -s pi-test -x 80 -y 24 -tmux send-keys -t pi-test "./pi-test.sh" Enter +tmux send-keys -t pi-test "./test.sh" Enter sleep 3 && tmux capture-pane -t pi-test -p # capture after startup tmux send-keys -t pi-test "your prompt here" Enter tmux send-keys -t pi-test Escape # special keys (also C-o for ctrl+o, etc.) diff --git a/README.md b/README.md index 1b681875..c79513ba 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ | `.pi/agent/extensions/*/index.ts` | sproutclaw 本地扩展(中文启动页、状态行、命令安装等) | | `.pi/agent/prompts/` | 自定义 slash prompt(`cl`/`is`/`pr`/`wr` 等) | | `.pi/agent/skills/` | 可复用 Skills(Gitea、SSH、GitHub 等) | -| `pi-built.sh` | 使用已构建 `dist/cli.js` 启动 Agent | +| `build.sh` | 使用已构建 `dist/cli.js` 启动 Agent | | `scripts/sync-upstream.sh` | 合并上游 pi-mono 更新 | | `scripts/push-sproutclaw.sh` | 推送到 GitHub / Gitea | @@ -33,20 +33,20 @@ npm install --ignore-scripts npm run build npm run check ./test.sh -./pi-test.sh +././test.sh ``` 运行本地源码版 Agent(开发调试): ```bash -./pi-test.sh +././test.sh ``` 运行已构建版 Agent(日常更快): ```bash npm run build -./pi-built.sh +./build.sh ``` 启动 WebUI 时,在 TUI 中执行: @@ -142,7 +142,7 @@ git checkout main && git merge upstream-sync ```bash npm install --ignore-scripts npm run build -./pi-test.sh +././test.sh ``` ### sproutclaw 相对 upstream 的 intentional 改动 diff --git a/pi-built.bat b/build.bat similarity index 100% rename from pi-built.bat rename to build.bat diff --git a/pi-built.sh b/build.sh similarity index 100% rename from pi-built.sh rename to build.sh diff --git a/packages/coding-agent/docs/development.md b/packages/coding-agent/docs/development.md index fc57befa..580bad5d 100644 --- a/packages/coding-agent/docs/development.md +++ b/packages/coding-agent/docs/development.md @@ -14,7 +14,7 @@ npm run build Run from source: ```bash -/path/to/pi-mono/pi-test.sh +/path/to/sproutclaw/test.sh ``` The script can be run from any directory. Pi keeps the caller's current working directory. diff --git a/pi-test.sh b/pi-test.sh deleted file mode 100755 index 05aa684a..00000000 --- a/pi-test.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Default to the repository-local pi config so this source checkout uses the -# copied learning config instead of ~/.pi. -export PI_CODING_AGENT_DIR="${PI_CODING_AGENT_DIR:-$SCRIPT_DIR/.pi/agent}" - -# Check for --no-env flag -NO_ENV=false -ARGS=() -for arg in "$@"; do - if [[ "$arg" == "--no-env" ]]; then - NO_ENV=true - else - ARGS+=("$arg") - fi -done - -if [[ "$NO_ENV" == "true" ]]; then - # Unset API keys (see packages/ai/src/env-api-keys.ts) - unset ANTHROPIC_API_KEY - unset ANTHROPIC_OAUTH_TOKEN - unset OPENAI_API_KEY - unset GEMINI_API_KEY - unset GROQ_API_KEY - unset CEREBRAS_API_KEY - unset XAI_API_KEY - unset OPENROUTER_API_KEY - unset ZAI_API_KEY - unset MISTRAL_API_KEY - unset MINIMAX_API_KEY - unset MINIMAX_CN_API_KEY - unset AI_GATEWAY_API_KEY - unset OPENCODE_API_KEY - unset COPILOT_GITHUB_TOKEN - unset GH_TOKEN - unset GITHUB_TOKEN - unset HF_TOKEN - unset GOOGLE_APPLICATION_CREDENTIALS - unset GOOGLE_CLOUD_PROJECT - unset GCLOUD_PROJECT - unset GOOGLE_CLOUD_LOCATION - unset AWS_PROFILE - unset AWS_ACCESS_KEY_ID - unset AWS_SECRET_ACCESS_KEY - unset AWS_SESSION_TOKEN - unset AWS_REGION - unset AWS_DEFAULT_REGION - unset AWS_BEARER_TOKEN_BEDROCK - unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI - unset AWS_CONTAINER_CREDENTIALS_FULL_URI - unset AWS_WEB_IDENTITY_TOKEN_FILE - unset AZURE_OPENAI_API_KEY - unset AZURE_OPENAI_BASE_URL - unset AZURE_OPENAI_RESOURCE_NAME - echo "Running without API keys..." -fi - -"$SCRIPT_DIR/node_modules/.bin/tsx" --tsconfig "$SCRIPT_DIR/tsconfig.json" "$SCRIPT_DIR/packages/coding-agent/src/cli.ts" ${ARGS[@]+"${ARGS[@]}"} diff --git a/sproutclaw.bat b/sproutclaw.bat index 9486cc66..0b26adc1 100644 --- a/sproutclaw.bat +++ b/sproutclaw.bat @@ -21,7 +21,7 @@ if "%~1"=="-h" goto help if "%~1"=="--help" goto help :run -call "%SCRIPT_DIR%pi-built.bat" %* +call "%SCRIPT_DIR%build.bat" %* exit /b %ERRORLEVEL% :help diff --git a/pi-test.bat b/test.bat similarity index 68% rename from pi-test.bat rename to test.bat index 048a99db..1ea6a4ed 100644 --- a/pi-test.bat +++ b/test.bat @@ -6,9 +6,9 @@ set "POWERSHELL_EXE=powershell.exe" where %POWERSHELL_EXE% >nul 2>nul if errorlevel 1 ( - >&2 echo powershell.exe not found. Install PowerShell or run pi-test.ps1 directly. + >&2 echo powershell.exe not found. Install PowerShell or run test.ps1 directly. exit /b 1 ) -%POWERSHELL_EXE% -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%pi-test.ps1" %* +%POWERSHELL_EXE% -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%test.ps1" %* exit /b %ERRORLEVEL% diff --git a/pi-test.ps1 b/test.ps1 similarity index 100% rename from pi-test.ps1 rename to test.ps1 diff --git a/test.sh b/test.sh index 9a553f6f..05aa684a 100755 --- a/test.sh +++ b/test.sh @@ -1,76 +1,61 @@ #!/usr/bin/env bash -set -e +set -euo pipefail -AUTH_FILE="$HOME/.pi/agent/auth.json" -AUTH_BACKUP="$HOME/.pi/agent/auth.json.bak" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# Restore auth.json on exit (success or failure) -cleanup() { - if [[ -f "$AUTH_BACKUP" ]]; then - mv "$AUTH_BACKUP" "$AUTH_FILE" - echo "Restored auth.json" - fi -} -trap cleanup EXIT +# Default to the repository-local pi config so this source checkout uses the +# copied learning config instead of ~/.pi. +export PI_CODING_AGENT_DIR="${PI_CODING_AGENT_DIR:-$SCRIPT_DIR/.pi/agent}" -# Move auth.json out of the way -if [[ -f "$AUTH_FILE" ]]; then - mv "$AUTH_FILE" "$AUTH_BACKUP" - echo "Moved auth.json to backup" +# Check for --no-env flag +NO_ENV=false +ARGS=() +for arg in "$@"; do + if [[ "$arg" == "--no-env" ]]; then + NO_ENV=true + else + ARGS+=("$arg") + fi +done + +if [[ "$NO_ENV" == "true" ]]; then + # Unset API keys (see packages/ai/src/env-api-keys.ts) + unset ANTHROPIC_API_KEY + unset ANTHROPIC_OAUTH_TOKEN + unset OPENAI_API_KEY + unset GEMINI_API_KEY + unset GROQ_API_KEY + unset CEREBRAS_API_KEY + unset XAI_API_KEY + unset OPENROUTER_API_KEY + unset ZAI_API_KEY + unset MISTRAL_API_KEY + unset MINIMAX_API_KEY + unset MINIMAX_CN_API_KEY + unset AI_GATEWAY_API_KEY + unset OPENCODE_API_KEY + unset COPILOT_GITHUB_TOKEN + unset GH_TOKEN + unset GITHUB_TOKEN + unset HF_TOKEN + unset GOOGLE_APPLICATION_CREDENTIALS + unset GOOGLE_CLOUD_PROJECT + unset GCLOUD_PROJECT + unset GOOGLE_CLOUD_LOCATION + unset AWS_PROFILE + unset AWS_ACCESS_KEY_ID + unset AWS_SECRET_ACCESS_KEY + unset AWS_SESSION_TOKEN + unset AWS_REGION + unset AWS_DEFAULT_REGION + unset AWS_BEARER_TOKEN_BEDROCK + unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI + unset AWS_CONTAINER_CREDENTIALS_FULL_URI + unset AWS_WEB_IDENTITY_TOKEN_FILE + unset AZURE_OPENAI_API_KEY + unset AZURE_OPENAI_BASE_URL + unset AZURE_OPENAI_RESOURCE_NAME + echo "Running without API keys..." fi -# Skip local LLM tests (ollama, lmstudio) -export PI_NO_LOCAL_LLM=1 - -# Unset API keys (see packages/ai/src/stream.ts getEnvApiKey) -unset ANTHROPIC_API_KEY -unset ANTHROPIC_OAUTH_TOKEN -unset OPENAI_API_KEY -unset AZURE_OPENAI_API_KEY -unset DEEPSEEK_API_KEY -unset GEMINI_API_KEY -unset GOOGLE_CLOUD_API_KEY -unset GROQ_API_KEY -unset CEREBRAS_API_KEY -unset XAI_API_KEY -unset OPENROUTER_API_KEY -unset ZAI_API_KEY -unset ZAI_CODING_CN_API_KEY -unset MISTRAL_API_KEY -unset MINIMAX_API_KEY -unset MINIMAX_CN_API_KEY -unset MOONSHOT_API_KEY -unset KIMI_API_KEY -unset HF_TOKEN -unset FIREWORKS_API_KEY -unset TOGETHER_API_KEY -unset AI_GATEWAY_API_KEY -unset OPENCODE_API_KEY -unset CLOUDFLARE_API_KEY -unset CLOUDFLARE_ACCOUNT_ID -unset CLOUDFLARE_GATEWAY_ID -unset XIAOMI_API_KEY -unset XIAOMI_TOKEN_PLAN_CN_API_KEY -unset XIAOMI_TOKEN_PLAN_AMS_API_KEY -unset XIAOMI_TOKEN_PLAN_SGP_API_KEY -unset COPILOT_GITHUB_TOKEN -unset GH_TOKEN -unset GITHUB_TOKEN -unset GOOGLE_APPLICATION_CREDENTIALS -unset GOOGLE_CLOUD_PROJECT -unset GCLOUD_PROJECT -unset GOOGLE_CLOUD_LOCATION -unset AWS_PROFILE -unset AWS_ACCESS_KEY_ID -unset AWS_SECRET_ACCESS_KEY -unset AWS_SESSION_TOKEN -unset AWS_REGION -unset AWS_DEFAULT_REGION -unset AWS_BEARER_TOKEN_BEDROCK -unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI -unset AWS_CONTAINER_CREDENTIALS_FULL_URI -unset AWS_WEB_IDENTITY_TOKEN_FILE -unset BEDROCK_EXTENSIVE_MODEL_TEST - -echo "Running tests without API keys..." -npm test +"$SCRIPT_DIR/node_modules/.bin/tsx" --tsconfig "$SCRIPT_DIR/tsconfig.json" "$SCRIPT_DIR/packages/coding-agent/src/cli.ts" ${ARGS[@]+"${ARGS[@]}"}