diff --git a/pom.xml b/pom.xml index b11bc9b..b5394e5 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,13 @@ ${jline.version} + + + org.jline + jline-terminal-ffm + ${jline.version} + + info.picocli @@ -90,7 +97,7 @@ org.springframework.boot spring-boot-maven-plugin - -Xmx512m -Xms256m + -Xmx512m -Xms256m --enable-native-access=ALL-UNNAMED diff --git a/src/main/java/com/claudecode/command/impl/ExitCommand.java b/src/main/java/com/claudecode/command/impl/ExitCommand.java index 11e7b5d..fcd21cf 100644 --- a/src/main/java/com/claudecode/command/impl/ExitCommand.java +++ b/src/main/java/com/claudecode/command/impl/ExitCommand.java @@ -30,6 +30,6 @@ public class ExitCommand implements SlashCommand { if (context.exitCallback() != null) { context.exitCallback().run(); } - return "Goodbye!"; + return ""; } } diff --git a/src/main/java/com/claudecode/repl/ReplSession.java b/src/main/java/com/claudecode/repl/ReplSession.java index 0a76aa0..4198531 100644 --- a/src/main/java/com/claudecode/repl/ReplSession.java +++ b/src/main/java/com/claudecode/repl/ReplSession.java @@ -97,8 +97,15 @@ public class ReplSession { try (Terminal terminal = TerminalBuilder.builder() .system(true) + .streams(System.in, System.out) .build()) { + // 检测是否为 dumb 终端并提示 + boolean isDumb = "dumb".equals(terminal.getType()); + if (isDumb) { + log.info("当前为 dumb 终端模式,建议使用 Windows Terminal / PowerShell / cmd 获得完整体验"); + } + LineReader reader = LineReaderBuilder.builder() .terminal(terminal) .parser(new DefaultParser()) @@ -156,9 +163,22 @@ public class ReplSession { BannerPrinter.printCompact(out); out.println(AnsiStyle.dim(" Working directory: " + System.getProperty("user.dir"))); out.println(AnsiStyle.dim(" Tools: " + toolRegistry.size() + " registered")); - out.println(AnsiStyle.dim(" Terminal: " + terminal.getType() - + " (" + terminal.getWidth() + "×" + terminal.getHeight() + ")")); - out.println(AnsiStyle.dim(" Tip: Tab to complete commands, ↑↓ to browse history, Ctrl+D to exit")); + + boolean isDumb = "dumb".equals(terminal.getType()); + int w = terminal.getWidth(); + int h = terminal.getHeight(); + String termInfo = terminal.getType(); + if (w > 0 && h > 0) { + termInfo += " (" + w + "×" + h + ")"; + } + out.println(AnsiStyle.dim(" Terminal: " + termInfo)); + + if (isDumb) { + out.println(AnsiStyle.yellow(" ⚠ Dumb 终端模式:Tab补全和行编辑可能受限")); + out.println(AnsiStyle.yellow(" 建议在 Windows Terminal / PowerShell / cmd.exe 中运行")); + } else { + out.println(AnsiStyle.dim(" Tip: Tab to complete commands, ↑↓ to browse history, Ctrl+D to exit")); + } out.println(); }