huskies: merge 964

This commit is contained in:
dave
2026-05-13 14:51:39 +00:00
parent c811672e18
commit dcb43c465a
24 changed files with 234 additions and 188 deletions
+3 -1
View File
@@ -37,7 +37,9 @@ pub(crate) fn tool_get_story_todos(args: &Value, ctx: &AppContext) -> Result<Str
let contents = crate::http::workflow::read_story_content(&root, story_id)
.map_err(|_| format!("Story file not found: {story_id}.md"))?;
let story_name = crate::crdt_state::read_item(story_id).map(|v| v.name().to_string());
let story_name = crate::crdt_state::read_item(story_id)
.map(|v| v.name().to_string())
.unwrap_or_default();
let todos = parse_unchecked_todos(&contents);
serde_json::to_string_pretty(&json!({
@@ -18,7 +18,15 @@ pub(crate) fn tool_update_story(args: &Value, ctx: &AppContext) -> Result<String
// escape hatch; every known key is recognised and routed below, and any
// unknown key is rejected loudly rather than silently flushed to disk.
if let Some(name) = args.get("name").and_then(|v| v.as_str()) {
crate::crdt_state::set_name(story_id, Some(name));
if name.trim().is_empty() {
return Err("name must not be empty".to_string());
}
if !crate::crdt_state::set_name(story_id, Some(name)) {
return Err(format!(
"Story '{story_id}' not found in CRDT — name was not updated. \
The story may not exist or may not yet be registered."
));
}
}
if let Some(agent) = args.get("agent").and_then(|v| v.as_str()) {
crate::crdt_state::set_agent(story_id, agent.parse::<crate::config::AgentName>().ok());
@@ -38,8 +46,15 @@ pub(crate) fn tool_update_story(args: &Value, ctx: &AppContext) -> Result<String
);
}
"name" => {
let s = value.as_str().filter(|s| !s.is_empty());
crate::crdt_state::set_name(story_id, s);
let s = value.as_str().filter(|s| !s.trim().is_empty());
if s.is_none() {
return Err("name must not be empty".to_string());
}
if !crate::crdt_state::set_name(story_id, s) {
return Err(format!(
"Story '{story_id}' not found in CRDT — name was not updated."
));
}
}
"agent" => {
let parsed = value