diff --git a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/ChatCommand.kt b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/ChatCommand.kt index 302a3e67..48b29c37 100644 --- a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/ChatCommand.kt +++ b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/ChatCommand.kt @@ -25,12 +25,12 @@ class ChatCommand : Runnable { @CommandLine.Option( names = ["--source"], description = ["Input source identity used by Partner runtime."], - defaultValue = DEFAULT_SOURCE, + required = true ) lateinit var source: String override fun run() { - val screen = ChatScreen() + val screen = ChatScreen(source) WebSocketClient(url) { event -> screen.postInteractionEvent(event) }.use { client -> @@ -42,6 +42,5 @@ class ChatCommand : Runnable { private companion object { private const val DEFAULT_URL = "ws://127.0.0.1:29600" - private const val DEFAULT_SOURCE = "partnerctl" } } diff --git a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatEventRenderer.kt b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatEventRenderer.kt index 0a1e1c48..d667d90e 100644 --- a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatEventRenderer.kt +++ b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatEventRenderer.kt @@ -9,11 +9,11 @@ import work.slhaf.partner.ctl.support.PromptStyle import work.slhaf.partner.ctl.support.TerminalText internal class ChatEventRenderer { - fun renderCommittedUserInput(content: String): String { + fun renderCommittedUserInput(source: String, content: String): String { return TerminalText.render( listOf( - PromptPart("you", PromptStyle.CYAN), - PromptPart(": "), + PromptPart("$source>", PromptStyle.CYAN), + PromptPart(" "), PromptPart(content), ) ) @@ -23,15 +23,15 @@ internal class ChatEventRenderer { return if (content.isBlank()) { TerminalText.render( listOf( - PromptPart("assistant", PromptStyle.GREEN), - PromptPart(":"), + PromptPart("assistant>", PromptStyle.GREEN), + PromptPart(" "), ) ) } else { TerminalText.render( listOf( - PromptPart("assistant", PromptStyle.GREEN), - PromptPart(": "), + PromptPart("assistant>", PromptStyle.GREEN), + PromptPart(" "), PromptPart(content), ) ) diff --git a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatScreen.kt b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatScreen.kt index 908b1093..860a4d61 100644 --- a/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatScreen.kt +++ b/PartnerCtl/src/main/java/work/slhaf/partner/ctl/commands/chat/ChatScreen.kt @@ -11,6 +11,7 @@ import java.util.concurrent.LinkedBlockingQueue import kotlin.math.ceil internal class ChatScreen( + val source: String, private val terminal: Terminal = TerminalBuilder.builder() .system(true) .dumb(true) @@ -90,7 +91,7 @@ internal class ChatScreen( } commitDynamicArea() - printCommitted(renderer.renderCommittedUserInput(line)) + printCommitted(renderer.renderCommittedUserInput(source,line)) activeReply.setLength(0) repaintDynamicArea() @@ -189,11 +190,12 @@ internal class ChatScreen( append(renderer.renderActiveReply(activeReply.toString())) append('\n') } + append('\n') append(inputPrompt()) } } - private fun inputPrompt(): String = "partner> ${input}" + private fun inputPrompt(): String = "partner> $input" private fun measureDisplayRows(text: String): Int { val width = terminal.width.takeIf { it > 0 } ?: DEFAULT_TERMINAL_WIDTH