diff --git a/packages/provider-grok/src/server/xaiAcpExtension.test.ts b/packages/provider-grok/src/server/xaiAcpExtension.test.ts index 6b9cbf1ed30c6..a74078733d5df 100644 --- a/packages/provider-grok/src/server/xaiAcpExtension.test.ts +++ b/packages/provider-grok/src/server/xaiAcpExtension.test.ts @@ -458,6 +458,18 @@ describe("XAiAcpExtension", () => { const normalized = normalizeXAiAcpToolCallState(toolCall); expect(normalized.status).toBe("completed"); expect(normalized.title).toBe("for i in 1 2; do echo STREAM_$i; done; echo STREAM_DONE"); + expect( + normalizeXAiAcpToolCallState({ + ...toolCall, + data: { + ...toolCall.data, + rawOutput: { + ...toolCall.data.rawOutput, + command: `git commit -m "${"x".repeat(61)}🎉 ship it"`, + }, + }, + }).title, + ).toBe(`git commit -m "${"x".repeat(61)}...`); expect( normalizeXAiAcpToolCallState({ ...toolCall, diff --git a/packages/provider-grok/src/server/xaiAcpExtension.ts b/packages/provider-grok/src/server/xaiAcpExtension.ts index fe356d0ec0483..022dd327b55bb 100644 --- a/packages/provider-grok/src/server/xaiAcpExtension.ts +++ b/packages/provider-grok/src/server/xaiAcpExtension.ts @@ -549,7 +549,10 @@ function resolveXAiAcpToolTitle(toolCall: AcpToolCallState): string | undefined nonEmptyString(rawInput?.command) ?? nonEmptyString(unknownRecord(toolCall.data.rawOutput)?.command); if (command !== undefined) { - return command.length > 80 ? `${command.slice(0, 77)}...` : command; + if (command.length <= 80) return command; + const splitsPair = + /[\uD800-\uDBFF]/.test(command.charAt(76)) && /[\uDC00-\uDFFF]/.test(command.charAt(77)); + return `${command.slice(0, splitsPair ? 76 : 77)}...`; } return nonEmptyString(toolCall.title); }