diff options
| author | soryu <soryu@soryu.co> | 2026-02-16 00:28:16 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-16 00:28:16 +0000 |
| commit | a9da99085bc0b1f94e13cb27639915fd1398ccbe (patch) | |
| tree | 7b990499368002af8aa72b8e7b619674d8d5c654 /makima/src/db | |
| parent | bf087f48af2962d884b861345ae52be4f4a54daa (diff) | |
| download | soryu-a9da99085bc0b1f94e13cb27639915fd1398ccbe.tar.gz soryu-a9da99085bc0b1f94e13cb27639915fd1398ccbe.zip | |
feat: track directive goal history for intelligent re-planning (#63)
* WIP: heartbeat checkpoint
* feat: soryu-co/soryu - makima: Save previous goal on update and include history in re-planning prompt
Diffstat (limited to 'makima/src/db')
| -rw-r--r-- | makima/src/db/models.rs | 10 | ||||
| -rw-r--r-- | makima/src/db/repository.rs | 40 |
2 files changed, 48 insertions, 2 deletions
diff --git a/makima/src/db/models.rs b/makima/src/db/models.rs index 6ec6cf4..19ebb13 100644 --- a/makima/src/db/models.rs +++ b/makima/src/db/models.rs @@ -2723,6 +2723,16 @@ pub struct Directive { pub updated_at: DateTime<Utc>, } +/// A historical record of a directive goal change. +#[derive(Debug, Clone, FromRow, Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct DirectiveGoalHistory { + pub id: Uuid, + pub directive_id: Uuid, + pub goal: String, + pub created_at: DateTime<Utc>, +} + /// A step in a directive's DAG. #[derive(Debug, Clone, FromRow, Serialize, Deserialize, ToSchema)] #[serde(rename_all = "camelCase")] diff --git a/makima/src/db/repository.rs b/makima/src/db/repository.rs index 71ad524..4aa09dc 100644 --- a/makima/src/db/repository.rs +++ b/makima/src/db/repository.rs @@ -12,8 +12,8 @@ use super::models::{ CreateContractRequest, CreateFileRequest, CreateTaskRequest, CreateTemplateRequest, Daemon, DaemonTaskAssignment, DaemonWithCapacity, DeliverableDefinition, Directive, DirectiveStep, DirectiveSummary, - CreateDirectiveRequest, CreateDirectiveStepRequest, UpdateDirectiveRequest, - UpdateDirectiveStepRequest, + CreateDirectiveRequest, CreateDirectiveStepRequest, DirectiveGoalHistory, + UpdateDirectiveRequest, UpdateDirectiveStepRequest, CreateOrderRequest, Order, UpdateOrderRequest, File, FileSummary, FileVersion, HistoryEvent, HistoryQueryFilters, MeshChatConversation, MeshChatMessageRecord, PhaseChangeResult, PhaseConfig, @@ -5600,6 +5600,42 @@ pub async fn update_directive_goal( .await } +/// Save a goal to the directive goal history. +pub async fn save_directive_goal_history( + pool: &PgPool, + directive_id: Uuid, + goal: &str, +) -> Result<(), sqlx::Error> { + sqlx::query( + r#"INSERT INTO directive_goal_history (directive_id, goal) + VALUES ($1, $2)"#, + ) + .bind(directive_id) + .bind(goal) + .execute(pool) + .await?; + Ok(()) +} + +/// Get recent goal history for a directive (most recent first), limited to limit entries. +pub async fn get_directive_goal_history( + pool: &PgPool, + directive_id: Uuid, + limit: i64, +) -> Result<Vec<DirectiveGoalHistory>, sqlx::Error> { + sqlx::query_as::<_, DirectiveGoalHistory>( + r#"SELECT id, directive_id, goal, created_at + FROM directive_goal_history + WHERE directive_id = $1 + ORDER BY created_at DESC + LIMIT $2"#, + ) + .bind(directive_id) + .bind(limit) + .fetch_all(pool) + .await +} + /// Set a directive's status (used for start/pause/archive transitions). pub async fn set_directive_status( pool: &PgPool, |
