diff --git a/.gitignore b/.gitignore index 753a64b2..c1d357a4 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,10 @@ test-update.ts docs/ SCHEMA_NOTES.md -repomix-output.xml \ No newline at end of file +repomix-output.xml + +# Python +__pycache__/ +*.pyc +*.pyo +*.pyd \ No newline at end of file diff --git a/lib/hooks.ts b/lib/hooks.ts index ddb87b32..2009ecbb 100644 --- a/lib/hooks.ts +++ b/lib/hooks.ts @@ -92,7 +92,12 @@ export function createSystemPromptHandler( return } - output.system.push(renderSystemPrompt(flags)) + const newPrompt = renderSystemPrompt(flags) + if (output.system.length > 0) { + output.system[output.system.length - 1] += "\n\n" + newPrompt + } else { + output.system.push(newPrompt) + } } } diff --git a/lib/messages/inject.ts b/lib/messages/inject.ts index 71026a79..4a25d472 100644 --- a/lib/messages/inject.ts +++ b/lib/messages/inject.ts @@ -8,9 +8,10 @@ import { extractParameterKey, createSyntheticTextPart, createSyntheticToolPart, - isIgnoredUserMessage, appendMessageIdTagToToolOutput, findLastToolPart, + isIgnoredUserMessage, + rejectsTextParts, } from "./utils" import { getFilePathsFromParameters, isProtected } from "../protected-file-patterns" import { getLastUserMessage, isMessageCompacted } from "../shared-utils" @@ -314,13 +315,22 @@ export const insertPruneToolContext = ( ) lastNonIgnoredMessage.parts.push(textPart) } else { - const toolPart = createSyntheticToolPart( - lastNonIgnoredMessage, - combinedContent, - modelId ?? "", - `${lastNonIgnoredMessage.info.id}:context`, - ) - lastNonIgnoredMessage.parts.push(toolPart) + if (rejectsTextParts(modelId ?? "")) { + const toolPart = createSyntheticToolPart( + lastNonIgnoredMessage, + combinedContent, + modelId ?? "", + `${lastNonIgnoredMessage.info.id}:context`, + ) + lastNonIgnoredMessage.parts.push(toolPart) + } else { + const textPart = createSyntheticTextPart( + lastNonIgnoredMessage, + combinedContent, + `${lastNonIgnoredMessage.info.id}:context`, + ) + lastNonIgnoredMessage.parts.push(textPart) + } } } @@ -365,6 +375,10 @@ export const insertMessageIdContext = ( continue } - message.parts.push(createSyntheticToolPart(message, tag, toolModelId, messageIdSeed)) + if (rejectsTextParts(toolModelId)) { + message.parts.push(createSyntheticToolPart(message, tag, toolModelId, messageIdSeed)) + } else { + message.parts.push(createSyntheticTextPart(message, tag, messageIdSeed)) + } } } diff --git a/lib/messages/utils.ts b/lib/messages/utils.ts index 59994f98..2cbc1d72 100644 --- a/lib/messages/utils.ts +++ b/lib/messages/utils.ts @@ -19,6 +19,11 @@ const isGeminiModel = (modelID: string): boolean => { return lowerModelID.includes("gemini") } +export const rejectsTextParts = (modelID: string): boolean => { + const lowerModelID = modelID.toLowerCase() + return lowerModelID.includes("claude") +} + export const createSyntheticUserMessage = ( baseMessage: WithParts, content: string,