Verbose worker logging (#173)

This commit is contained in:
Chris Estreich 2025-07-02 07:46:17 -08:00 committed by GitHub
parent 0156265963
commit 0b5812b01c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 20 deletions

View file

@ -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"]

View file

@ -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`,
},
],
},

View file

@ -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}`,

View file

@ -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 };

View file

@ -94,6 +94,7 @@ export const runTask = async <T extends JobType>({
const subprocess = execa({
shell: '/bin/bash',
cwd: workspacePath,
cancelSignal,
})`${codeCommand}`;
@ -141,26 +142,28 @@ export const runTask = async <T extends JobType>({
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 <T extends JobType>({
data: {
configuration: {
...EVALS_SETTINGS,
alwaysAllowReadOnlyOutsideWorkspace: true,
alwaysAllowWriteOutsideWorkspace: true,
alwaysAllowWriteProtected: true,
openRouterApiKey: process.env.OPENROUTER_API_KEY,
lastShownAnnouncementId: 'jun-17-2025-3-21',
...settings,

View file

@ -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",