Initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
# Harness-specific configuration and agent invocation.
|
||||
|
||||
install_skill_set() {
|
||||
local destination=$1 index
|
||||
mkdir -p "$destination"
|
||||
for index in "${!SKILL_DIRS[@]}"; do
|
||||
cp -a "${SKILL_DIRS[$index]}" "$destination/${SKILL_NAMES[$index]}"
|
||||
done
|
||||
}
|
||||
|
||||
write_opencode_config() {
|
||||
local config_path=$1
|
||||
node - "$config_path" "$PROVIDER_ID" "$MODEL_ID" "$PROVIDER_BASE_URL" "$PROVIDER_API_KEY" <<'NODE'
|
||||
const fs = require("fs");
|
||||
const [configPath, provider, model, baseURL, apiKey] = process.argv.slice(2);
|
||||
const config = {$schema: "https://opencode.ai/config.json", model: `${provider}/${model}`,
|
||||
provider: {[provider]: {npm: "@ai-sdk/openai-compatible", name: provider,
|
||||
options: {baseURL, apiKey}, models: {[model]: {name: model}}}}};
|
||||
fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`, {mode: 0o600});
|
||||
NODE
|
||||
}
|
||||
|
||||
write_hermes_profile() {
|
||||
local profile_home=$1 workspace=$2
|
||||
mkdir -p "$profile_home/skills"
|
||||
touch "$profile_home/.no-bundled-skills"
|
||||
install_skill_set "$profile_home/skills"
|
||||
{
|
||||
printf '%s\n' 'model:' " default: \"$MODEL_ID\"" ' provider: custom' ' base_url: "https://api.siliconflow.cn/v1"'
|
||||
printf '%s\n' 'terminal:' ' backend: local' " cwd: \"$workspace\"" ' timeout: 180' ' home_mode: profile'
|
||||
printf '%s\n' 'memory:' ' memory_enabled: false' ' user_profile_enabled: false'
|
||||
printf '%s\n' 'skills:' ' external_dirs: []' ' inline_shell: false' ' write_approval: true'
|
||||
printf '%s\n' 'curator:' ' enabled: false' 'fallback_providers: []'
|
||||
printf '%s\n' 'delegation:' ' orchestrator_enabled: false' ' max_spawn_depth: 1' ' max_concurrent_children: 1' ' max_async_children: 1'
|
||||
} > "$profile_home/config.yaml"
|
||||
}
|
||||
|
||||
run_opencode() {
|
||||
local run_root=$1 workspace=$2 prompt=$3
|
||||
install_skill_set "$workspace/.opencode/skills"
|
||||
write_opencode_config "$run_root/opencode.json"
|
||||
(cd "$workspace"; OPENCODE_CONFIG="$run_root/opencode.json" OPENCODE_CONFIG_DIR="$workspace/.opencode" \
|
||||
XDG_DATA_HOME="$run_root/opencode-data" XDG_STATE_HOME="$run_root/opencode-state" \
|
||||
timeout --foreground --signal=INT --kill-after=30s "${TIMEOUT_SECONDS}s" \
|
||||
opencode --pure --auto --model "$PROVIDER_ID/$MODEL_ID" run "$prompt") > "$run_root/agent-trace.txt" 2>&1
|
||||
}
|
||||
|
||||
run_hermes() {
|
||||
local run_root=$1 workspace=$2 prompt=$3 skill_csv
|
||||
skill_csv=$(IFS=,; printf '%s' "${SKILL_NAMES[*]}")
|
||||
write_hermes_profile "$run_root/hermes-home" "$workspace"
|
||||
(cd "$workspace"; OPENAI_API_KEY="$SILICONFLOW_API_KEY" HERMES_HOME="$run_root/hermes-home" HERMES_OPTIONAL_SKILLS="" \
|
||||
timeout --foreground --signal=INT --kill-after=30s "${TIMEOUT_SECONDS}s" \
|
||||
hermes --yolo --provider custom --model "$MODEL_ID" --toolsets terminal --skills "$skill_csv" --oneshot "$prompt") > "$run_root/agent-trace.txt" 2>&1
|
||||
}
|
||||
|
||||
prepare_claude_workspace() { install_skill_set "$1/.claude/skills"; }
|
||||
|
||||
run_claude_code() {
|
||||
local run_root=$1 workspace=$2 prompt=$3
|
||||
prepare_claude_workspace "$workspace"
|
||||
(cd "$workspace"; ANTHROPIC_BASE_URL="$PROVIDER_BASE_URL" ANTHROPIC_AUTH_TOKEN="$PROVIDER_API_KEY" \
|
||||
timeout --foreground --signal=INT --kill-after=30s "${TIMEOUT_SECONDS}s" \
|
||||
claude --print --output-format json --model "$MODEL_ID" --dangerously-skip-permissions "$prompt") \
|
||||
> "$run_root/claude-result.json" 2> "$run_root/claude-stderr.txt"
|
||||
cat "$run_root/claude-result.json" "$run_root/claude-stderr.txt" > "$run_root/agent-trace.txt"
|
||||
}
|
||||
Reference in New Issue
Block a user