From 00a2e44da7e6b5fb18ba16ed7cae53a929dd3644 Mon Sep 17 00:00:00 2001 From: soryu Date: Tue, 10 Feb 2026 23:29:30 +0000 Subject: feat: makima: Add an optional memory system for directives: Add Rust models for directive memory --- makima/src/db/models.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ makima/src/db/repository.rs | 3 ++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/makima/src/db/models.rs b/makima/src/db/models.rs index 9159fd5..766a081 100644 --- a/makima/src/db/models.rs +++ b/makima/src/db/models.rs @@ -2714,6 +2714,7 @@ pub struct Directive { pub goal_updated_at: DateTime, pub started_at: Option>, pub version: i32, + pub memory_enabled: bool, pub created_at: DateTime, pub updated_at: DateTime, } @@ -2765,6 +2766,7 @@ pub struct DirectiveSummary { pub completed_steps: i64, pub running_steps: i64, pub failed_steps: i64, + pub memory_enabled: bool, } /// List response for directives. @@ -2784,6 +2786,8 @@ pub struct CreateDirectiveRequest { pub repository_url: Option, pub local_path: Option, pub base_branch: Option, + #[serde(default)] + pub memory_enabled: bool, } /// Request to update a directive. @@ -2798,6 +2802,7 @@ pub struct UpdateDirectiveRequest { pub base_branch: Option, pub orchestrator_task_id: Option, pub version: Option, + pub memory_enabled: Option, } /// Request to update a directive's goal (triggers re-planning). @@ -2833,3 +2838,40 @@ pub struct UpdateDirectiveStepRequest { pub task_id: Option, pub order_index: Option, } + +/// A memory entry for a directive — key-value context that persists across tasks. +#[derive(Debug, Clone, FromRow, Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct DirectiveMemory { + pub id: Uuid, + pub directive_id: Uuid, + pub key: String, + pub value: String, + pub category: Option, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +/// Request to set a memory entry (upsert by key). +#[derive(Debug, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct SetDirectiveMemoryRequest { + pub key: String, + pub value: String, + pub category: Option, +} + +/// Request to batch set memory entries. +#[derive(Debug, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct BatchSetDirectiveMemoryRequest { + pub entries: Vec, +} + +/// Response for listing memories. +#[derive(Debug, Serialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct DirectiveMemoryListResponse { + pub memories: Vec, + pub total: i64, +} diff --git a/makima/src/db/repository.rs b/makima/src/db/repository.rs index 930a73e..1dd10bb 100644 --- a/makima/src/db/repository.rs +++ b/makima/src/db/repository.rs @@ -13,7 +13,8 @@ use super::models::{ CreateTemplateRequest, Daemon, DaemonTaskAssignment, DaemonWithCapacity, DeliverableDefinition, Directive, DirectiveStep, DirectiveSummary, CreateDirectiveRequest, CreateDirectiveStepRequest, UpdateDirectiveRequest, - UpdateDirectiveStepRequest, + UpdateDirectiveStepRequest, DirectiveMemory, SetDirectiveMemoryRequest, + BatchSetDirectiveMemoryRequest, DirectiveMemoryListResponse, File, FileSummary, FileVersion, HistoryEvent, HistoryQueryFilters, MeshChatConversation, MeshChatMessageRecord, PhaseChangeResult, PhaseConfig, PhaseDefinition, SupervisorHeartbeatRecord, SupervisorState, -- cgit v1.2.3