From ccdcb3d75daeea99ca01d6f644250c8576e828e2 Mon Sep 17 00:00:00 2001 From: weishu Date: Sun, 18 Jan 2026 20:29:40 +0800 Subject: [PATCH] feat: add attachment support for Codex and Gemini agents close #84 --- cli/src/agent/runners/runAgentSession.ts | 4 +++- cli/src/codex/runCodex.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cli/src/agent/runners/runAgentSession.ts b/cli/src/agent/runners/runAgentSession.ts index e28ecbb2..c764546a 100644 --- a/cli/src/agent/runners/runAgentSession.ts +++ b/cli/src/agent/runners/runAgentSession.ts @@ -10,6 +10,7 @@ import { startHappyServer } from '@/claude/utils/startHappyServer'; import { getHappyCliCommand } from '@/utils/spawnHappyCLI'; import { registerKillSessionHandler } from '@/claude/registerKillSessionHandler'; import { bootstrapSession } from '@/agent/sessionFactory'; +import { formatMessageWithAttachments } from '@/utils/attachmentFormatter'; function emitReadyIfIdle(props: { queueSize: () => number; @@ -45,7 +46,8 @@ export async function runAgentSession(opts: { const messageQueue = new MessageQueue2>(() => hashObject({})); session.onUserMessage((message) => { - messageQueue.push(message.content.text, {}); + const formattedText = formatMessageWithAttachments(message.content.text, message.content.attachments); + messageQueue.push(formattedText, {}); }); const backend: AgentBackend = AgentRegistry.create(opts.agentType); diff --git a/cli/src/codex/runCodex.ts b/cli/src/codex/runCodex.ts index b472182c..8f0244c1 100644 --- a/cli/src/codex/runCodex.ts +++ b/cli/src/codex/runCodex.ts @@ -10,6 +10,7 @@ import { bootstrapSession } from '@/agent/sessionFactory'; import { createModeChangeHandler, createRunnerLifecycle, setControlledByUser } from '@/agent/runnerLifecycle'; import { isPermissionModeAllowedForFlavor } from '@hapi/protocol'; import { PermissionModeSchema } from '@hapi/protocol/schemas'; +import { formatMessageWithAttachments } from '@/utils/attachmentFormatter'; export { emitReadyIfIdle } from './utils/emitReadyIfIdle'; @@ -73,7 +74,8 @@ export async function runCodex(opts: { const enhancedMode: EnhancedMode = { permissionMode: messagePermissionMode ?? 'default' }; - messageQueue.push(message.content.text, enhancedMode); + const formattedText = formatMessageWithAttachments(message.content.text, message.content.attachments); + messageQueue.push(formattedText, enhancedMode); }); const formatFailureReason = (message: string): string => {