From 353ae2d49c557455b99c1e384c8e075c5b7601f8 Mon Sep 17 00:00:00 2001 From: Stephen Date: Tue, 18 Mar 2025 16:02:54 +0700 Subject: [PATCH 1/2] no .vscode/ --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 65b77be..4b59994 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ # Project specific GrokCookies.swift .plan/ -credentials.json \ No newline at end of file +credentials.json + +.vscode/ \ No newline at end of file From 01c78a82a3ff8dc2b29578749726c75a0b51a548 Mon Sep 17 00:00:00 2001 From: Stephen Date: Tue, 18 Mar 2025 16:03:07 +0700 Subject: [PATCH 2/2] fix markdown streaming --- Sources/GrokCLI/main.swift | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Sources/GrokCLI/main.swift b/Sources/GrokCLI/main.swift index 0e5dec6..3b03cb4 100644 --- a/Sources/GrokCLI/main.swift +++ b/Sources/GrokCLI/main.swift @@ -215,6 +215,7 @@ struct MessageCommand: ParsableCommand { if accumulatedMessage.isEmpty { formatter.printResponse(response.message, webSearchResults: response.webSearchResults, xposts: response.xposts) } else { + formatter.flushBuffer() // Ensure any remaining buffer is printed formatter.printSources(webSearchResults: response.webSearchResults, xposts: response.xposts) } } else { @@ -516,6 +517,7 @@ struct GrokCLI { if accumulatedMessage.isEmpty { formatter.printResponse(response.message, webSearchResults: response.webSearchResults, xposts: response.xposts) } else { + formatter.flushBuffer() // Ensure any remaining buffer is printed formatter.printSources(webSearchResults: response.webSearchResults, xposts: response.xposts) } } else { @@ -927,6 +929,7 @@ struct GrokCLI { if accumulatedMessage.isEmpty { formatter.printResponse(response.message, webSearchResults: response.webSearchResults, xposts: response.xposts) } else { + formatter.flushBuffer() // Ensure any remaining buffer is printed formatter.printSources(webSearchResults: response.webSearchResults, xposts: response.xposts) } } else { @@ -1054,6 +1057,7 @@ struct GrokCLI { if accumulatedMessage.isEmpty { formatter.printResponse(response.message, webSearchResults: response.webSearchResults, xposts: response.xposts) } else { + formatter.flushBuffer() // Ensure any remaining buffer is printed formatter.printSources(webSearchResults: response.webSearchResults, xposts: response.xposts) } } else { @@ -1318,11 +1322,19 @@ struct GrokCLI { // Output formatting class OutputFormatter { private let useMarkdown: Bool + private var markdownBuffer: String = "" init(useMarkdown: Bool = false) { self.useMarkdown = useMarkdown } + func flushBuffer() { + if !markdownBuffer.isEmpty { + printMarkdown(markdownBuffer) + markdownBuffer = "" + } + } + func printResponse(_ response: String, conversationId: String? = nil, responseId: String? = nil, debug: Bool = false, webSearchResults: [WebSearchResult]? = nil, xposts: [XPost]? = nil) { print("\n" + "Grok:".green.bold) @@ -1360,7 +1372,10 @@ class OutputFormatter { } if useMarkdown { - printMarkdown(chunk) + markdownBuffer += chunk + if chunk.contains("\n") || isLast { + flushBuffer() + } } else { print(chunk, terminator: "") } @@ -1390,7 +1405,10 @@ class OutputFormatter { print("\n" + "Grok:".green.bold, terminator: "") } if useMarkdown { - printMarkdown(chunk) + markdownBuffer += chunk + if chunk.contains("\n") { + flushBuffer() + } } else { print(chunk, terminator: "") }