diff --git a/src/cli/commands/watch.ts b/src/cli/commands/watch.ts index df78098..dc43365 100644 --- a/src/cli/commands/watch.ts +++ b/src/cli/commands/watch.ts @@ -168,10 +168,16 @@ async function fetchUnreadMessages(serverUrl: string, agent: string): Promise ignored.trim().toLowerCase() === sender); } /** @@ -188,7 +194,7 @@ function isMessageFor(event: AgentHubEvent, agent: string): boolean { */ export async function watchEvents( serverUrl: string, - options: { once?: boolean; role?: string; awaitReview?: boolean; awaitMessage?: string; newOnly?: boolean } = {}, + options: { once?: boolean; role?: string; awaitReview?: boolean; awaitMessage?: string; newOnly?: boolean; ignoreFrom?: string[] } = {}, ): Promise { const url = new URL('/events', serverUrl); // Pass role to the server for an additional server-side filter (saves @@ -280,7 +286,7 @@ export async function watchEvents( await reader.cancel(); return; } - if (options.awaitMessage && isMessageFor(event, options.awaitMessage)) { + if (options.awaitMessage && isMessageFor(event, options.awaitMessage, options.ignoreFrom)) { await reader.cancel(); return; } diff --git a/src/cli/index.ts b/src/cli/index.ts index 904e08d..b0af1d0 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -927,6 +927,7 @@ export function createProgram(cwd: string): Command { .option('--await-review', 'Exit when an implementer submits (task → review); architect review-queue notifier') .option('--await-message ', 'Exit when an unread message arrives for agent/role; architect message notifier') .option('--new-only', 'With --await-review/--await-message: ignore existing backlog on connect (re-armable without spinning)') + .option('--ignore-from ', 'With --await-message: comma-separated senders to ignore (e.g. "agenthub" to mute watchdog reminders)') .action(async (options) => { const { serverUrl } = await resolveContext(program, cwd); if (!serverUrl) { @@ -939,6 +940,7 @@ export function createProgram(cwd: string): Command { role: options.role as string | undefined, awaitReview: options.awaitReview as boolean | undefined, awaitMessage: options.awaitMessage as string | undefined, + ignoreFrom: typeof options.ignoreFrom === 'string' ? options.ignoreFrom.split(',') : undefined, newOnly: options.newOnly as boolean | undefined, }); }); diff --git a/src/server/events.ts b/src/server/events.ts index 50c55bf..5e7145a 100644 --- a/src/server/events.ts +++ b/src/server/events.ts @@ -15,6 +15,8 @@ export interface AgentHubEvent { status?: string; role?: string; assignedTo?: string; + /** Absender bei message-Events — erlaubt Empfängern, System-Post zu filtern. */ + from?: string; claimedBy?: string; reviewer?: string; } diff --git a/src/server/routes.ts b/src/server/routes.ts index 00fa18b..b674f7d 100644 --- a/src/server/routes.ts +++ b/src/server/routes.ts @@ -675,6 +675,7 @@ export async function registerRoutes(app: FastifyInstance, cwd: string): Promise id: message.id, title: `${message.from} → ${message.to}`, assignedTo: message.to, + from: message.from, }, message.updatedAt, );