#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.
50 lines
1.4 KiB
TOML
50 lines
1.4 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/domain",
|
|
"crates/application",
|
|
"crates/infrastructure",
|
|
"crates/backend",
|
|
"crates/web-server",
|
|
"crates/app-tauri",
|
|
]
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.80"
|
|
|
|
[workspace.dependencies]
|
|
uuid = { version = "1", features = ["serde", "v4", "v5", "macro-diagnostics"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
thiserror = "2"
|
|
async-trait = "0.1"
|
|
futures-util = "0.3"
|
|
fs4 = "0.12"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "fs", "io-util", "time"] }
|
|
hex = "0.4"
|
|
sha2 = "0.10"
|
|
dirs = "6"
|
|
subtle = "2"
|
|
getrandom = "0.3"
|
|
http = "1"
|
|
# Local git via libgit2. Network features (https/ssh → openssl) are off for L8:
|
|
# only local operations (status/commit/branch/checkout/log) are in scope; remote
|
|
# push/pull and static vendoring for the AppImage are deferred to L9/L11.
|
|
git2 = { version = "0.20", default-features = false }
|
|
chrono = { version = "0.4", default-features = false, features = ["clock"] }
|
|
chrono-tz = "0.10"
|
|
|
|
# Internal crates
|
|
domain = { path = "crates/domain" }
|
|
application = { path = "crates/application" }
|
|
infrastructure = { path = "crates/infrastructure" }
|
|
backend = { path = "crates/backend" }
|
|
web-server = { path = "crates/web-server" }
|
|
|
|
# Tauri v2
|
|
tauri = { version = "2", features = [] }
|
|
tauri-build = { version = "2", features = [] }
|
|
tauri-plugin-dialog = "2"
|