feat(backend,frontend): tâches planifiées projet — tool MCP idea_scheduled_task_* et menu utilisateur #305, fix transcript lié indisponible après reboot #314 (QA verte)
#305: nouvel agrégat durable ScheduledProjectTask dans domain (scheduled_task.rs, ids, ports ScheduledProjectTaskStore), source de vérité <app_data_dir>/scheduled-project-tasks/<projectId>.json, schedules bornés V1 interval/daily/weekly avec fuseau, cycle À approuver/Active/Suspendue avec approbation obligatoire des tâches demandées par agent; use cases application/scheduled_task (list/create/update/delete/run_now/reconcile/fire) réutilisant BackgroundTask pour les runs avec distinction planifié/manuel; store infrastructure dédié + scheduler reconcile au boot sans rattrapage en rafale, cwd confiné au projet; 7 tools MCP idea_scheduled_task_* (list/read lecture seule, create/update/delete/run_now/set_enabled write-actions soumises aux permissions natives); commandes Tauri + routes HTTP aux contrats DTO identiques (camelCase nextRunAtMs/lastRunAtMs/lastTaskId/createdBy/updatedBy); frontend: gateways Tauri/HTTP/mock + types ports/domain, surface projet 'Tâches planifiées' (liste utilisateur+agent unifiée, création/édition avec récapitulatif avant activation, approbation/refus, exécuter maintenant, suspendre/reprendre, suppression), catalogage surface web (webSurfaceCatalog/viewPlacement/ViewPanelBody/WebWorkspace); docs/scheduled-project-tasks.md et sdk docs/services.md (047c38b: pas un service plugin V1, pas d'émulation via cron système). #314: correction de 'Conversation liée — transcript indisponible' après reboot: restauration du transcript lié côté application (orchestrator service, lifecycle, session_limit, background sink, terminal registry) et côté frontend (adapters agent/http frames/stream/requestResponse, workStateNormalization, CustomAgentChatView avec état et action utile), tests dto_chat/agent_lifecycle/structured_registry_d1/background_completion_sink étendus. QA verte rapportée par QA sur feature/305-scheduled-project-tasks-mcp, sans bloquant, pour #305 et #314. Hors périmètre worktree: tickets non liés, attachments/, scripts/; aucun push.
This commit is contained in:
@ -657,6 +657,57 @@ export interface GatewayError {
|
||||
message: string;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Scheduled project tasks (#305)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export type ScheduledTaskWeekday =
|
||||
| "monday"
|
||||
| "tuesday"
|
||||
| "wednesday"
|
||||
| "thursday"
|
||||
| "friday"
|
||||
| "saturday"
|
||||
| "sunday";
|
||||
|
||||
export type ScheduledTaskSchedule =
|
||||
| { kind: "interval"; everyMinutes: number }
|
||||
| { kind: "daily"; time: string }
|
||||
| { kind: "weekly"; days: ScheduledTaskWeekday[]; time: string };
|
||||
|
||||
export interface ScheduledTaskCommand {
|
||||
command: string;
|
||||
args: string[];
|
||||
cwd?: string;
|
||||
}
|
||||
|
||||
export type ScheduledTaskActor =
|
||||
| { kind: "human" }
|
||||
| { kind: "agent"; agentId: string }
|
||||
| { kind: "system" };
|
||||
|
||||
export interface ScheduledProjectTask {
|
||||
id: string;
|
||||
projectId: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
enabled: boolean;
|
||||
approval: "approved" | "pending" | "rejected";
|
||||
sandbox: "projectReadWrite";
|
||||
command: ScheduledTaskCommand;
|
||||
schedule: ScheduledTaskSchedule;
|
||||
timezone: string;
|
||||
nextRunAtMs: number | null;
|
||||
lastRunAtMs?: number;
|
||||
lastTaskId?: string;
|
||||
createdBy: ScheduledTaskActor;
|
||||
updatedBy: ScheduledTaskActor;
|
||||
createdAtMs: number;
|
||||
updatedAtMs: number;
|
||||
auditRevision: number;
|
||||
timeoutMs?: number;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Work state (UX conversations/delegations live read-model)
|
||||
// ---------------------------------------------------------------------------
|
||||
@ -707,6 +758,9 @@ export interface BackgroundCompletion {
|
||||
projectId: string;
|
||||
parentTaskId?: string;
|
||||
kind: string;
|
||||
origin?:
|
||||
| { kind: "manual" }
|
||||
| { kind: "scheduled"; scheduledTaskId: string; plannedAtMs: number };
|
||||
status:
|
||||
| "running"
|
||||
| "cancelling"
|
||||
@ -726,6 +780,7 @@ export interface BackgroundCompletion {
|
||||
conversationId?: string;
|
||||
/** Last-update timestamp (epoch ms); chronological ordering key. */
|
||||
updatedAtMs: number;
|
||||
createdAtMs?: number;
|
||||
}
|
||||
|
||||
/** One item currently pending in an agent's inbox. */
|
||||
|
||||
Reference in New Issue
Block a user