106 lines
2.7 KiB
Bash
Executable File
106 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# GitHub Copilot CLI driver for Ralph (EXPERIMENTAL)
|
|
# Provides platform-specific CLI invocation logic for Copilot CLI.
|
|
#
|
|
# Known limitations:
|
|
# - No session continuity (session IDs not capturable from -p output)
|
|
# - No structured output (plain text only, no --json flag)
|
|
# - Coarse tool permissions (only shell, shell(git:*), shell(npm:*), write)
|
|
# - CLI is new (GA Feb 25, 2026) — scripting interface may change
|
|
|
|
driver_name() {
|
|
echo "copilot"
|
|
}
|
|
|
|
driver_display_name() {
|
|
echo "GitHub Copilot CLI"
|
|
}
|
|
|
|
driver_cli_binary() {
|
|
echo "copilot"
|
|
}
|
|
|
|
driver_min_version() {
|
|
echo "0.0.418"
|
|
}
|
|
|
|
driver_check_available() {
|
|
command -v "$(driver_cli_binary)" &>/dev/null
|
|
}
|
|
|
|
# Copilot CLI tool names
|
|
driver_valid_tools() {
|
|
VALID_TOOL_PATTERNS=(
|
|
"shell"
|
|
"shell(git:*)"
|
|
"shell(npm:*)"
|
|
"write"
|
|
)
|
|
}
|
|
|
|
driver_supports_tool_allowlist() {
|
|
return 1
|
|
}
|
|
|
|
driver_permission_denial_help() {
|
|
echo " - $DRIVER_DISPLAY_NAME uses its own autonomy and approval controls."
|
|
echo " - ALLOWED_TOOLS in $RALPHRC_FILE is ignored for this driver."
|
|
echo " - Ralph already runs Copilot with --no-ask-user for unattended mode."
|
|
echo " - Review Copilot CLI permissions, then restart the loop."
|
|
}
|
|
|
|
# Build Copilot CLI command
|
|
# Context is prepended to the prompt (same pattern as Codex driver).
|
|
# Uses --autopilot --yolo for autonomous mode, -s to strip stats, -p for prompt.
|
|
driver_build_command() {
|
|
local prompt_file=$1
|
|
local loop_context=$2
|
|
# $3 (session_id) is intentionally ignored — Copilot CLI does not
|
|
# expose session IDs in -p output, so resume is not possible.
|
|
|
|
CLAUDE_CMD_ARGS=("$(driver_cli_binary)")
|
|
|
|
if [[ ! -f "$prompt_file" ]]; then
|
|
echo "ERROR: Prompt file not found: $prompt_file" >&2
|
|
return 1
|
|
fi
|
|
|
|
# Autonomous execution flags
|
|
CLAUDE_CMD_ARGS+=("--autopilot" "--yolo")
|
|
|
|
# Limit auto-continuation loops
|
|
CLAUDE_CMD_ARGS+=("--max-autopilot-continues" "50")
|
|
|
|
# Disable interactive prompts
|
|
CLAUDE_CMD_ARGS+=("--no-ask-user")
|
|
|
|
# Strip stats for cleaner output
|
|
CLAUDE_CMD_ARGS+=("-s")
|
|
|
|
# Build prompt with context prepended
|
|
local prompt_content
|
|
prompt_content=$(cat "$prompt_file")
|
|
if [[ -n "$loop_context" ]]; then
|
|
prompt_content="$loop_context
|
|
|
|
$prompt_content"
|
|
fi
|
|
|
|
CLAUDE_CMD_ARGS+=("-p" "$prompt_content")
|
|
}
|
|
|
|
driver_supports_sessions() {
|
|
return 1 # false — session IDs not capturable from -p output
|
|
}
|
|
|
|
# Copilot CLI does not expose structured live output for jq streaming.
|
|
driver_supports_live_output() {
|
|
return 1 # false
|
|
}
|
|
|
|
# Copilot CLI outputs plain text only (no JSON streaming).
|
|
# Passthrough filter — no transformation needed.
|
|
driver_stream_filter() {
|
|
echo '.'
|
|
}
|