feat: Story 8 - Collapsible tool outputs + autonomous coding improvements

Implemented Story 8: Collapsible Tool Outputs
- Tool outputs now render in <details>/<summary> elements, collapsed by default
- Summary shows tool name with key argument (e.g., ▶ read_file(src/main.rs))
- Added arrow rotation animation and scrollable content (max 300px)
- Enhanced tool_calls display to show arguments inline
- Added CSS styling for dark theme consistency

Fixed: LLM autonomous coding behavior
- Strengthened system prompt with explicit examples and directives
- Implemented triple-reinforcement system (primary prompt + reminder + message prefixes)
- Improved tool descriptions to be more explicit and action-oriented
- Increased MAX_TURNS from 10 to 30 for complex agentic workflows
- Added debug logging for Ollama requests/responses
- Result: GPT-OSS (gpt-oss:20b) now successfully uses write_file autonomously

Documentation improvements
- Created MODEL_SELECTION.md guide with recommendations
- Updated PERSONA.md spec to emphasize autonomous agent behavior
- Updated UI_UX.md spec with collapsible tool output requirements
- Updated SDSW workflow: LLM archives stories and performs squash merge

Cleanup
- Removed unused ToolTester.tsx component
This commit is contained in:
Dave
2025-12-25 15:18:12 +00:00
parent c493da2f2a
commit 990441dfc1
17 changed files with 471 additions and 172 deletions

View File

@@ -161,6 +161,11 @@ impl ModelProvider for OllamaProvider {
tools,
};
// Debug: Log the request body
if let Ok(json_str) = serde_json::to_string_pretty(&request_body) {
eprintln!("=== Ollama Request ===\n{}\n===================", json_str);
}
let res = client
.post(&url)
.json(&request_body)
@@ -171,6 +176,10 @@ impl ModelProvider for OllamaProvider {
if !res.status().is_success() {
let status = res.status();
let text = res.text().await.unwrap_or_default();
eprintln!(
"=== Ollama Error Response ===\n{}\n========================",
text
);
return Err(format!("Ollama API error {}: {}", status, text));
}