Add Phase 5: ReAct-style agent loop with tool execution
Implement the core autonomy layer — AgentLoop streams LLM responses, parses tool calls, executes them with permission checks, feeds results back, and repeats until the task completes or finish is called. - Add FinishTool for explicit loop termination - Add tools parameter to LLMClient.stream_chat() for function calling - Add compact tool result display (status line, not full output) - Refactor REPL to delegate to AgentLoop.run_turn() - Fix Ollama null content rejection (always send content as string) - Add finish to auto_approve permissions - 9 unit tests for agent loop (34 total, zero regressions) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,6 +39,7 @@ class ToolRegistry:
|
||||
def create_default_registry(workspace_root: Path, config: AppConfig) -> ToolRegistry:
|
||||
"""Create a ToolRegistry populated with all built-in tools."""
|
||||
from app.tools.filesystem import ListDirTool, ReadFileTool
|
||||
from app.tools.finish import FinishTool
|
||||
from app.tools.search import FindFilesTool, GrepFilesTool
|
||||
|
||||
registry = ToolRegistry()
|
||||
@@ -46,4 +47,5 @@ def create_default_registry(workspace_root: Path, config: AppConfig) -> ToolRegi
|
||||
registry.register(ListDirTool(workspace_root, config))
|
||||
registry.register(GrepFilesTool(workspace_root, config))
|
||||
registry.register(FindFilesTool(workspace_root, config))
|
||||
registry.register(FinishTool(workspace_root, config))
|
||||
return registry
|
||||
|
||||
Reference in New Issue
Block a user