mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-04 10:14:47 +08:00
4859d8fb2d
When a setup step fails — whether hard via fail() or soft via the
"What's left" / "Skipping the first chat" notes — offer to ask Claude
to diagnose. On consent, spawn `claude -p --output-format stream-json`
with a scrolling 3-line action window ("Reading x", "Running y") so
the 1–4 minute investigations feel active rather than hung. No hard
timeout: debugging can take time, Ctrl-C is the escape hatch.
The prompt is minimal: one-paragraph framing, failed step name + msg +
hint, and a list of file references (not contents). Claude's Read/Grep
tools fetch what they need. A per-step map in claude-assist.ts gives
the most relevant files per step; the rest is README + auto.ts +
logs/setup.log + the per-step raw log.
Claude responds with REASON + COMMAND lines. We show the reason in a
clack note, prefill the command via setup/run-suggested.sh (bash 4+
readline, 3.x fallback to Enter-to-run), and eval on the user's
confirm.
When the user runs a fix, fail() now offers to retry the failing step
rather than aborting. setup/logs.ts tracks successfully-completed step
names in-memory; fail() threads those as NANOCLAW_SKIP on a spawnSync
retry, so the child picks up exactly where the parent left off — no
rebuilding containers or reinstalling OneCLI.
Other polish in this change:
- fitToWidth + dimWrap in lib/theme.ts to prevent long spinner labels
from soft-wrapping (each terminal row stacks a stale copy otherwise).
- Shorter container step label ("Preparing your assistant's sandbox…")
so it fits on narrow terminals.
- Wordmark anchored in the clack intro line on every run.
- All 25 existing fail() call sites updated to await fail(...) since
fail is now async.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
36 lines
959 B
Bash
Executable File
36 lines
959 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Run a command suggested by claude-assist, giving the user a chance to
|
|
# edit it first. Same pattern as setup/register-claude-token.sh: bash 4+
|
|
# pre-fills readline so Enter literally submits; bash 3.x (macOS default
|
|
# /bin/bash) shows the command and waits for Enter.
|
|
#
|
|
# This script is the allowlisted unit — the `eval` happens inside. The
|
|
# caller has already shown the command to the user and gotten confirmation.
|
|
|
|
set -u
|
|
|
|
CMD="${1:-}"
|
|
if [ -z "$CMD" ]; then
|
|
echo "run-suggested: no command provided" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
|
|
# Pre-fill readline; user can edit before pressing Enter.
|
|
read -r -e -i "$CMD" -p "$ " cmd </dev/tty
|
|
else
|
|
# Fallback: display + Enter-to-run.
|
|
echo "$ $CMD"
|
|
read -r -p "Press Enter to run, Ctrl-C to abort. " _ </dev/tty
|
|
cmd="$CMD"
|
|
fi
|
|
|
|
if [ -z "$cmd" ]; then
|
|
echo "run-suggested: empty command after edit, skipping." >&2
|
|
exit 0
|
|
fi
|
|
|
|
echo
|
|
eval "$cmd"
|