#!/bin/bash # Refactor - Ask ollie to refactor the selected code # # Usage: Select code, then middle-click Refactor in the tag set -euo pipefail if [[ -z "${winid:-}" ]]; then echo "Refactor must be run from within acme" >&2 exit 1 fi # Get the window name (filename) from the tag filename=$(9p read acme/$winid/tag | awk '{print $1}') # Read the current selection echo 'addr=dot' | 9p write acme/$winid/ctl selection=$(9p read acme/$winid/xdata 2>/dev/null || true) if [[ -z "$selection" ]]; then echo "No selection. Select some code first." >&2 exit 1 fi # Ensure acme session/agent exists eval $(acme-ollie-ensure) # Build location string location="" if [[ -n "$filename" && "$filename" != *"+Errors" && "$filename" != "+*" ]]; then location=" in \`$filename\`" fi # Build and send the prompt prompt="Edit the source file $filename. The selected code below is the target. It may be incomplete context: $selection Instructions: - Read the actual file and relevant surrounding code before editing. - Refactor the selected code without changing its external behavior. - Make one focused improvement. Do not rewrite unrelated code. - Follow the existing project style. Do not add unnecessary abstractions. - Apply the refactor directly to the file. Do not only describe a patch. - Run formatting and the most relevant tests or diagnostics if available. After editing, report the file changed, the refactor made, and verification performed." echo "$prompt" | o "$OLLIE_SESSION/$OLLIE_AGENT" prompt