From 65f9f1919b32b63f61249fef5c5fb398c7d66f15 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Sat, 21 Feb 2026 20:10:35 -0500 Subject: [PATCH 1/3] chore: add python artifacts to gitignore --- .gitignore | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 From 787d02649c3215d369fb58e5dd378834188b4eb0 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Sat, 21 Feb 2026 20:10:35 -0500 Subject: [PATCH 2/3] fix: invert text part rejection logic to target claude models --- lib/messages/inject.ts | 32 +++++++++++++++++++++++--------- lib/messages/utils.ts | 5 +++++ 2 files changed, 28 insertions(+), 9 deletions(-) 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, From 2ef8c299f1037e41ede9f3e5dab9d28d450ab430 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Tue, 24 Feb 2026 20:44:08 -0500 Subject: [PATCH 3/3] fix(hooks): append system prompt to last output part --- lib/hooks.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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) + } } }