mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-05 15:09:42 +02:00
docs: sync READMEs with 1.6.0 (remote SSH, session manager, permissions); fix installer prompts under curl|bash
README.md + README.zh-CN.md: - New "Remote SSH Sessions" section (durable remote tmux, auto-reconnect, discover/attach with detach-not-kill, shared sessions, injection-safe ssh) - New "Session Manager & Command Palette" subsection (pinning survives kill, name retention on resume, cross-device tab order sync) - Multi-user quick start right after installation (users add + --multiuser), and the zh-CN README gains the full Multi-User Mode section it was missing - Security: document the configurable startup permission mode (skip/auto/ normal/allowedTools) and the multi-user auto downgrade - Cron header button noted as opt-in (Header Displays); API section counts refreshed (~190 handlers / 20 route modules) with pin, session-order and unified endpoints; Development now recommends npm run test:ci CLAUDE.md (/init audit): session-order.ts in the Session row, PR #157 session-manager polish appended to the unified-list pattern, opt-in Cron button documented, route/SSE counts refreshed (20 modules, ~188 handlers, ~146 events) install.sh: the post-install "How would you like to run Codeman?" menu (and the CLI picker + yes/no prompts) read from stdin, which under curl | bash is the pipe, so choices were impossible and the script silently fell through to the default. New has_tty()/read_reply() helpers prompt via /dev/tty whenever a real terminal exists (same approach the sudo path already used) and only fall back to defaults when there is genuinely none, now with an info line saying so. Verified both paths with a pty harness (script(1)) and setsid. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+29
-14
@@ -683,17 +683,29 @@ install_cloudflared_suse() {
|
||||
# Interactive Prompts
|
||||
# ============================================================================
|
||||
|
||||
# `curl | bash` leaves stdin attached to the pipe, so a plain `read` never sees
|
||||
# the keyboard even though the user is sitting at a terminal. These helpers
|
||||
# prompt via /dev/tty whenever a real terminal is available, and only fall back
|
||||
# to defaults when there is genuinely none (CI, truly headless pipes).
|
||||
has_tty() {
|
||||
[[ -t 0 ]] && return 0
|
||||
{ : < /dev/tty; } 2>/dev/null
|
||||
}
|
||||
|
||||
read_reply() {
|
||||
# read_reply <varname>: read one line from the user's real terminal
|
||||
if [[ -t 0 ]]; then
|
||||
read -r "$1"
|
||||
else
|
||||
read -r "$1" < /dev/tty
|
||||
fi
|
||||
}
|
||||
|
||||
prompt_yes_no() {
|
||||
local prompt="$1"
|
||||
local default="${2:-y}"
|
||||
|
||||
if [[ "$NONINTERACTIVE" == "1" ]]; then
|
||||
[[ "$default" == "y" ]]
|
||||
return
|
||||
fi
|
||||
|
||||
# Check if stdin is a terminal
|
||||
if [[ ! -t 0 ]]; then
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || ! has_tty; then
|
||||
# Non-interactive, use default
|
||||
[[ "$default" == "y" ]]
|
||||
return
|
||||
@@ -708,7 +720,7 @@ prompt_yes_no() {
|
||||
|
||||
while true; do
|
||||
echo -en "${CYAN}$prompt${NC} $yn_hint " >&2
|
||||
read -r answer
|
||||
read_reply answer || answer="$default"
|
||||
answer="${answer:-$default}"
|
||||
case "$answer" in
|
||||
[Yy]|[Yy][Ee][Ss]) return 0 ;;
|
||||
@@ -1101,13 +1113,14 @@ main() {
|
||||
echo ""
|
||||
|
||||
local cli_choice=""
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || [[ ! -t 0 ]]; then
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || ! has_tty; then
|
||||
# Non-interactive: default to Claude Code
|
||||
cli_choice="1"
|
||||
info "No interactive terminal detected: defaulting to Claude Code"
|
||||
else
|
||||
while true; do
|
||||
echo -en "${CYAN}Choose [1/2/3]:${NC} " >&2
|
||||
read -r cli_choice
|
||||
read_reply cli_choice || { cli_choice="1"; break; }
|
||||
case "$cli_choice" in
|
||||
1|2|3) break ;;
|
||||
*) echo "Please enter 1, 2, or 3." >&2 ;;
|
||||
@@ -1269,12 +1282,13 @@ main() {
|
||||
echo -e " ${CYAN}3)${NC} Don't start — I'll run it later"
|
||||
echo ""
|
||||
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || [[ ! -t 0 ]]; then
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || ! has_tty; then
|
||||
launch_choice="3"
|
||||
info "No interactive terminal detected: not starting (run 'codeman web' when ready)"
|
||||
else
|
||||
while true; do
|
||||
echo -en "${CYAN}Choose [1/2/3]:${NC} " >&2
|
||||
read -r launch_choice
|
||||
read_reply launch_choice || { launch_choice="3"; break; }
|
||||
case "$launch_choice" in
|
||||
1|2|3) break ;;
|
||||
*) echo "Please enter 1, 2, or 3." >&2 ;;
|
||||
@@ -1289,12 +1303,13 @@ main() {
|
||||
echo -e " ${CYAN}2)${NC} Don't start — I'll run it later"
|
||||
echo ""
|
||||
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || [[ ! -t 0 ]]; then
|
||||
if [[ "$NONINTERACTIVE" == "1" ]] || ! has_tty; then
|
||||
launch_choice="2"
|
||||
info "No interactive terminal detected: not starting (run 'codeman web' when ready)"
|
||||
else
|
||||
while true; do
|
||||
echo -en "${CYAN}Choose [1/2]:${NC} " >&2
|
||||
read -r launch_choice
|
||||
read_reply launch_choice || { launch_choice="2"; break; }
|
||||
case "$launch_choice" in
|
||||
1) break ;;
|
||||
2) break ;;
|
||||
|
||||
Reference in New Issue
Block a user