feat: unify 3 bot services into single process

- Add UNIFIED_MODE flag (default on, disable with UNIFIED_MODE=0)
- Register all 3 Discord bots in one process (claude, codex, review)
- Load all registered groups regardless of agent_type (codex/owner priority)
- Start credential proxy and container cleanup at unified startup
- shouldServiceProcessChat returns true in unified mode
- Add findChannelByName for role-based response routing
- Backward compatible: UNIFIED_MODE=0 restores per-service behavior
This commit is contained in:
Eyejoker
2026-03-29 18:22:57 +09:00
parent fc9f2867b9
commit d01f98bd61
20 changed files with 118 additions and 759 deletions

View File

@@ -1752,7 +1752,7 @@ export function getAllRegisteredGroups(
);
continue;
}
result[row.jid] = {
const group: RegisteredGroup = {
name: row.name,
folder: row.folder,
trigger: row.trigger_pattern,
@@ -1764,6 +1764,17 @@ export function getAllRegisteredGroups(
agentType: (row.agent_type as RegisteredGroup['agentType']) || undefined,
workDir: row.work_dir || undefined,
};
// In unified mode (no agentTypeFilter), when the same JID has both
// claude-code and codex rows, prefer the codex entry (owner).
const existing = result[row.jid];
if (existing && !agentTypeFilter) {
if (group.agentType === 'codex') {
result[row.jid] = group;
}
// else keep existing (already codex or first-seen)
} else {
result[row.jid] = group;
}
}
return result;
}
@@ -1836,11 +1847,6 @@ export function createPairedTask(task: PairedTask): void {
source_ref,
plan_notes,
review_requested_at,
last_finalized_checkpoint,
gate_turn_kind,
reviewer_verdict,
reviewer_verdict_at,
reviewer_verdict_note,
status,
created_at,
updated_at
@@ -1857,11 +1863,6 @@ export function createPairedTask(task: PairedTask): void {
task.source_ref,
task.plan_notes,
task.review_requested_at,
task.last_finalized_checkpoint ?? null,
task.gate_turn_kind ?? null,
task.reviewer_verdict ?? null,
task.reviewer_verdict_at ?? null,
task.reviewer_verdict_note ?? null,
task.status,
task.created_at,
task.updated_at,
@@ -1916,11 +1917,6 @@ export function updatePairedTask(
| 'source_ref'
| 'plan_notes'
| 'review_requested_at'
| 'last_finalized_checkpoint'
| 'gate_turn_kind'
| 'reviewer_verdict'
| 'reviewer_verdict_at'
| 'reviewer_verdict_note'
| 'status'
| 'updated_at'
>
@@ -1945,26 +1941,6 @@ export function updatePairedTask(
fields.push('review_requested_at = ?');
values.push(updates.review_requested_at);
}
if (updates.last_finalized_checkpoint !== undefined) {
fields.push('last_finalized_checkpoint = ?');
values.push(updates.last_finalized_checkpoint);
}
if (updates.gate_turn_kind !== undefined) {
fields.push('gate_turn_kind = ?');
values.push(updates.gate_turn_kind);
}
if (updates.reviewer_verdict !== undefined) {
fields.push('reviewer_verdict = ?');
values.push(updates.reviewer_verdict);
}
if (updates.reviewer_verdict_at !== undefined) {
fields.push('reviewer_verdict_at = ?');
values.push(updates.reviewer_verdict_at);
}
if (updates.reviewer_verdict_note !== undefined) {
fields.push('reviewer_verdict_note = ?');
values.push(updates.reviewer_verdict_note);
}
if (updates.status !== undefined) {
fields.push('status = ?');
values.push(updates.status);