pe_tasks/lib.rs
1//! # pe-tasks — Task management for Potential Expectations.
2//!
3//! Structural primitives for agents to create, track, decompose, and
4//! depend on work items. The library provides the mechanisms; users
5//! build policies (event emission, calendar, kanban, markdown sync) on top.
6//! The SurrealDB-backed registry is available with the `surreal` feature.
7//!
8//! ## Core types
9//!
10//! - [`Task`] — structured work item with ownership, hierarchy, and metadata
11//! - [`TaskStatus`] — lifecycle states (Pending → InProgress → Completed/Failed)
12//! - [`TaskType`] — discriminator (System/Agent/Human/Plan)
13//! - [`TaskPriority`] — urgency level (Urgent/High/Medium/Low)
14//!
15//! ## Dependencies
16//!
17//! - [`TaskDependency`] — directed edge in the dependency DAG
18//! - [`DependencyType`] — Blocks (hard), Requires (soft), Related (info)
19//! - Cycle detection via BFS upstream traversal
20//!
21//! ## Lifecycle
22//!
23//! - [`TaskLifecycle`] trait — hooks for status transitions
24//! - [`DefaultLifecycle`] — validates transitions, no side effects
25//!
26//! ## Registry
27//!
28//! - [`TaskRegistry`] trait — async CRUD + queries + dependencies
29//! - [`InMemoryTaskRegistry`] — HashMap-backed implementation
30//! - [`FileTaskRegistry`] — JSON-file-backed local persistence
31//! - [`TaskFilter`] — query builder for listing tasks
32//!
33//! ## Tools
34//!
35//! - [`tools::task_create`] — create a task
36//! - [`tools::task_list`] — list/filter tasks
37//! - [`tools::task_complete`] — mark a task done
38//! - [`tools::task_decompose`] — split into subtasks with dependencies
39
40pub mod dependency;
41pub mod file;
42pub mod in_memory;
43pub mod lifecycle;
44pub mod registry;
45#[cfg(feature = "surreal")]
46pub mod surreal;
47pub mod task;
48pub mod tools;
49
50// === Re-exports: core types ===
51pub use task::{Task, TaskId, TaskPriority, TaskStatus, TaskType, new_task_id};
52
53// === Re-exports: dependencies ===
54pub use dependency::{DependencyType, TaskDependency};
55
56// === Re-exports: lifecycle ===
57pub use lifecycle::{DefaultLifecycle, TaskLifecycle};
58
59// === Re-exports: registry ===
60pub use file::FileTaskRegistry;
61pub use in_memory::InMemoryTaskRegistry;
62pub use registry::{TaskFilter, TaskRegistry};
63#[cfg(feature = "surreal")]
64pub use surreal::SurrealTaskRegistry;