Merge branch 'codex/owner/ejclaw'

This commit is contained in:
Eyejoker
2026-04-04 22:34:09 +09:00
2 changed files with 21 additions and 1 deletions

View File

@@ -979,6 +979,9 @@ describe('createMessageRuntime', () => {
expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1);
expect(lastAgentTimestamps[`${chatJid}:reviewer`]).toBe('41');
expect(saveState).toHaveBeenCalled();
expect(db.createProducedWorkItem).toHaveBeenCalledWith(
expect.objectContaining({ delivery_role: 'reviewer' }),
);
expect(reviewerChannel.sendMessage).toHaveBeenCalledWith(
chatJid,
'리뷰 확인 완료',
@@ -1087,6 +1090,9 @@ describe('createMessageRuntime', () => {
expect(result).toBe(true);
expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1);
expect(db.createProducedWorkItem).toHaveBeenCalledWith(
expect.objectContaining({ delivery_role: 'owner' }),
);
expect(channel.sendMessage).toHaveBeenCalledWith(chatJid, '최종 정리 완료');
});

View File

@@ -488,12 +488,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): {
deps.queue.closeStdin(chatJid, { runId, reason }),
deliverFinalText: async (text) => {
try {
const persistedDeliveryRole =
args.deliveryRole ??
args.forcedRole ??
(hasReviewerLease(chatJid) ? 'owner' : null);
const workItem = createProducedWorkItem({
group_folder: group.folder,
chat_jid: chatJid,
agent_type:
args.forcedAgentType ?? group.agentType ?? 'claude-code',
delivery_role: args.deliveryRole ?? args.forcedRole ?? null,
delivery_role: persistedDeliveryRole,
start_seq: startSeq,
end_seq: endSeq,
result_payload: text,
@@ -837,6 +841,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): {
const pendingTask = hasReviewerLease(chatJid)
? getLatestOpenPairedTaskForChat(chatJid)
: null;
if (hasReviewerLease(chatJid) && openWorkItem.delivery_role == null) {
log.warn(
{
workItemId: openWorkItem.id,
chatJid,
pendingTaskStatus: pendingTask?.status ?? null,
},
'Paired-room delivery retry is missing a persisted delivery role; falling back to inferred routing',
);
}
const deliveryRole =
openWorkItem.delivery_role ??
(pendingTask ? resolveActiveRole(pendingTask.status) : 'owner');