import { createHash } from "node:crypto"; import { inject, injectable } from "@codemation/core"; import type { InboxChannel, InboxDeliverArgs, InboxDelivery } from "@codemation/core"; import { ServerLoggerFactory } from "../infrastructure/logging/ServerLoggerFactory"; import type { Logger } from "../application/logging/Logger"; @injectable() export class LocalInboxChannel implements InboxChannel { readonly kind = "local" as const; private readonly logger: Logger; constructor(@inject(ServerLoggerFactory) loggerFactory: ServerLoggerFactory) { this.logger = loggerFactory.create("codemation.hitl.local-inbox"); } async deliver(args: InboxDeliverArgs): Promise { const tokenFingerprint = createHash("sha256").update(args.task.resumeUrl, "utf8").digest("hex").slice(0, 8); this.logger.info( `HITL task pending in local inbox — taskId=${args.task.taskId} title="${args.subject.title}" tokenFingerprint=${tokenFingerprint}`, ); return { kind: "local", inboxItemId: args.task.taskId }; } }