summaryrefslogtreecommitdiff
path: root/makima/src/db/repository.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-02-16 00:28:16 +0000
committerGitHub <noreply@github.com>2026-02-16 00:28:16 +0000
commita9da99085bc0b1f94e13cb27639915fd1398ccbe (patch)
tree7b990499368002af8aa72b8e7b619674d8d5c654 /makima/src/db/repository.rs
parentbf087f48af2962d884b861345ae52be4f4a54daa (diff)
downloadsoryu-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/repository.rs')
-rw-r--r--makima/src/db/repository.rs40
1 files changed, 38 insertions, 2 deletions
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,