merge: maestro/tsk_N5wO3Armums2 [重试与超时策略细化(可配 + 退避)]

# Conflicts:
#	src/api/server.ts
#	test/store.test.ts
This commit is contained in:
wangjia
2026-06-13 10:20:20 +08:00
12 changed files with 347 additions and 31 deletions
+8 -4
View File
@@ -7,14 +7,16 @@ import type { RunKind, RunStatus, EventType } from '../model/types.js';
export interface ProjectRow {
id: string; name: string; repo_path: string; default_branch: string;
verify_cmd: string | null; autonomy: string; model: string | null;
concurrency: number; status: string; created_at: string;
concurrency: number; max_retries: number; timeout_ms: number;
status: string; created_at: string;
last_sync_at: string | null; logo: string | null; sort_order: number;
}
export interface TaskRow {
id: string; project_id: string; parent_id: string | null; depth: number;
title: string; complexity: string; status: string; priority: number;
deps: string; plan: string | null; spec: string | null; operations: string | null;
result: string | null; assignee: string | null; created_at: string; updated_at: string;
result: string | null; assignee: string | null; retry_baseline: number;
created_at: string; updated_at: string;
source_ref: string | null;
}
export interface ApprovalRow {
@@ -34,7 +36,8 @@ export function rowToProject(r: ProjectRow): Project {
return {
id: r.id, name: r.name, repoPath: r.repo_path, defaultBranch: r.default_branch,
verifyCmd: r.verify_cmd, autonomy: r.autonomy as Autonomy, model: r.model,
concurrency: r.concurrency, status: r.status as Project['status'], createdAt: r.created_at,
concurrency: r.concurrency, maxRetries: r.max_retries ?? 2, timeoutMs: r.timeout_ms ?? 1_800_000,
status: r.status as Project['status'], createdAt: r.created_at,
lastSyncAt: r.last_sync_at, logo: r.logo, sortOrder: r.sort_order,
};
}
@@ -64,7 +67,8 @@ export function rowToTask(r: TaskRow, approvals: ApprovalRecord[] = []): Task {
priority: r.priority, deps: JSON.parse(r.deps) as string[],
plan: r.plan, spec: r.spec, operations: r.operations,
approvals, result: r.result ? parseResult(r.result) : null,
assignee: r.assignee as Task['assignee'], createdAt: r.created_at, updatedAt: r.updated_at,
assignee: r.assignee as Task['assignee'], retryBaseline: r.retry_baseline ?? 0,
createdAt: r.created_at, updatedAt: r.updated_at,
};
}