From 0b5812b01c7759700fcd6f3e2c1308291afc6281 Mon Sep 17 00:00:00 2001 From: Chris Estreich Date: Wed, 2 Jul 2025 07:46:17 -0800 Subject: [PATCH] Verbose worker logging (#173) --- .docker/Dockerfile.roomote-worker | 3 +- .../src/app/api/webhooks/slack/route.ts | 6 ++-- apps/roomote/src/lib/controller.ts | 2 +- .../src/lib/jobs/processSlackMention.ts | 6 +++- apps/roomote/src/lib/runTask.ts | 34 +++++++++++-------- package.json | 3 +- 6 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.docker/Dockerfile.roomote-worker b/.docker/Dockerfile.roomote-worker index a9f71c37c3..084b7fd7e7 100644 --- a/.docker/Dockerfile.roomote-worker +++ b/.docker/Dockerfile.roomote-worker @@ -111,4 +111,5 @@ WORKDIR /roo/apps/roomote ENV NODE_ENV=production ENV HOST_EXECUTION_METHOD=docker # ENTRYPOINT ["/usr/local/bin/worker.sh"] -CMD ["sleep", "infinity"] +# CMD ["sleep", "infinity"] +CMD ["pnpm", "worker:production"] diff --git a/apps/roomote/src/app/api/webhooks/slack/route.ts b/apps/roomote/src/app/api/webhooks/slack/route.ts index 0a1bc859e8..e0563f0d3f 100644 --- a/apps/roomote/src/app/api/webhooks/slack/route.ts +++ b/apps/roomote/src/app/api/webhooks/slack/route.ts @@ -181,6 +181,8 @@ async function handleAppMention(event: SlackEvent) { try { pendingWorkspaceSelections.set(threadId, event); + const workspaceRoot = process.env.WORKSPACE_ROOT || '/roo/repos'; + const result = await slack.postMessage({ text: '👋 Which workspace would you like me to work in?', channel: event.channel, @@ -200,13 +202,13 @@ async function handleAppMention(event: SlackEvent) { type: 'button', text: { type: 'plain_text', text: 'Roo-Code-Cloud', emoji: true }, action_id: 'select_roo_code_cloud', - value: 'roo-code-cloud', + value: `${workspaceRoot}/Roo-Code-Cloud`, }, { type: 'button', text: { type: 'plain_text', text: 'Roo-Code', emoji: true }, action_id: 'select_roo_code', - value: 'roo-code', + value: `${workspaceRoot}/Roo-Code`, }, ], }, diff --git a/apps/roomote/src/lib/controller.ts b/apps/roomote/src/lib/controller.ts index 4e35533728..0abb35e1ed 100644 --- a/apps/roomote/src/lib/controller.ts +++ b/apps/roomote/src/lib/controller.ts @@ -90,7 +90,7 @@ export class WorkerController { let command; if (isFlyMachine()) { - command = `fly machine run $(fly releases --image -a roomote-worker -j 2>/dev/null | jq -r '.[0].ImageRef') --vm-size performance-16x --restart on-fail --rm --shell --command "pnpm worker:production" -a roomote-worker`; + command = `fly machine run $(fly releases --image -a roomote-worker -j 2>/dev/null | jq -r '.[0].ImageRef') --vm-size performance-16x --restart on-fail --rm -a roomote-worker`; } else if (isDockerContainer()) { const dockerArgs = [ `--name roomote-${workerId}`, diff --git a/apps/roomote/src/lib/jobs/processSlackMention.ts b/apps/roomote/src/lib/jobs/processSlackMention.ts index 7e02528bff..a6d984fdd9 100644 --- a/apps/roomote/src/lib/jobs/processSlackMention.ts +++ b/apps/roomote/src/lib/jobs/processSlackMention.ts @@ -20,13 +20,17 @@ export async function processSlackMention( // workspace root that our containers use. const workspaceRoot = process.env.WORKSPACE_ROOT || '/roo/repos'; + const workspacePath = jobPayload.workspace.startsWith('/') + ? jobPayload.workspace + : `${workspaceRoot}/${jobPayload.workspace}`; + const result = await runTask({ jobType, jobPayload, prompt, callbacks, notify: false, - workspacePath: `${workspaceRoot}/${jobPayload.workspace}`, + workspacePath, }); return { channel, user, result }; diff --git a/apps/roomote/src/lib/runTask.ts b/apps/roomote/src/lib/runTask.ts index 47401dff70..4189cc69cd 100644 --- a/apps/roomote/src/lib/runTask.ts +++ b/apps/roomote/src/lib/runTask.ts @@ -94,6 +94,7 @@ export const runTask = async ({ const subprocess = execa({ shell: '/bin/bash', + cwd: workspacePath, cancelSignal, })`${codeCommand}`; @@ -141,26 +142,28 @@ export const runTask = async ({ const slackNotifier = notify ? new SlackNotifier(logger) : undefined; let slackThreadTs: string | null | undefined = null; - const ignoreEvents: Record<'broadcast' | 'log', RooCodeEventName[]> = { - broadcast: [RooCodeEventName.Message], - log: [ - RooCodeEventName.TaskTokenUsageUpdated, - RooCodeEventName.TaskAskResponded, - ], - }; + // const ignoreEvents: Record<'broadcast' | 'log', RooCodeEventName[]> = { + // broadcast: [RooCodeEventName.Message], + // log: [ + // RooCodeEventName.TaskTokenUsageUpdated, + // RooCodeEventName.TaskAskResponded, + // ], + // }; client.on(IpcMessageType.TaskEvent, async (taskEvent) => { const { eventName, payload } = taskEvent; // Log all events except for these. // For message events we only log non-partial messages. - if ( - !ignoreEvents.log.includes(eventName) && - (eventName !== RooCodeEventName.Message || - payload[0].message.partial !== true) - ) { - logger.info(`${eventName} ->`, payload); - } + // if ( + // !ignoreEvents.log.includes(eventName) && + // (eventName !== RooCodeEventName.Message || + // payload[0].message.partial !== true) + // ) { + // logger.info(`${eventName} ->`, payload); + // } + + logger.info(`${eventName} ->`, payload); if ( eventName === RooCodeEventName.Message && @@ -236,6 +239,9 @@ export const runTask = async ({ data: { configuration: { ...EVALS_SETTINGS, + alwaysAllowReadOnlyOutsideWorkspace: true, + alwaysAllowWriteOutsideWorkspace: true, + alwaysAllowWriteProtected: true, openRouterApiKey: process.env.OPENROUTER_API_KEY, lastShownAnnouncementId: 'jun-17-2025-3-21', ...settings, diff --git a/package.json b/package.json index d00035bb80..fecf27b847 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,11 @@ "env:decrypt:development": "dotenvx decrypt -f .env.development --stdout", "env:decrypt:preview": "dotenvx decrypt -f .env.preview --stdout", "env:decrypt:production": "dotenvx decrypt -f .env.production --stdout", + "deploy:roomote": "pnpm deploy:roomote-api && pnpm deploy:roomote-controller && pnpm deploy:roomote-worker", "deploy:roomote-dashboard": "fly deploy --config fly.roomote-dashboard.toml", "deploy:roomote-api": "fly deploy --config fly.roomote-api.toml", "deploy:roomote-controller": "fly deploy --config fly.roomote-controller.toml", - "deploy:roomote-worker": "fly deploy --config fly.roomote-worker.toml --build-arg GH_TOKEN=$(npx dotenvx get GH_TOKEN -f .env.production) && fly scale count 0 -a roomote-worker -y" + "deploy:roomote-worker": "fly deploy --config fly.roomote-worker.toml --build-arg GH_TOKEN=$(npx dotenvx get GH_TOKEN -f .env.production) --ha=false && fly scale count 0 -a roomote-worker -y" }, "devDependencies": { "@dotenvx/dotenvx": "^1.44.2",