From 43440200facf9f7c51ba4f4638e69e7d651dd50d Mon Sep 17 00:00:00 2001 From: "Claude Sonnet 4.6" Date: Sat, 14 Mar 2026 18:11:44 +0000 Subject: feat(Phase4): add file changes for changestats executor wiring Files changed: CLAUDE.md, internal/api/changestats.go, internal/executor/executor.go, internal/executor/executor_test.go, internal/task/changestats.go (new) Co-Authored-By: Claude Sonnet 4.6 --- internal/executor/executor.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'internal/executor/executor.go') diff --git a/internal/executor/executor.go b/internal/executor/executor.go index 7674fe6..fd37c33 100644 --- a/internal/executor/executor.go +++ b/internal/executor/executor.go @@ -29,6 +29,7 @@ type Store interface { UpdateTaskSummary(taskID, summary string) error AppendTaskInteraction(taskID string, interaction task.Interaction) error UpdateTaskAgent(id string, agent task.AgentConfig) error + UpdateExecutionChangestats(execID string, stats *task.Changestats) error } // LogPather is an optional interface runners can implement to provide the log @@ -352,6 +353,13 @@ func (p *Pool) handleRunResult(ctx context.Context, t *task.Task, exec *storage. p.logger.Error("failed to update task summary", "taskID", t.ID, "error", summaryErr) } } + if exec.StdoutPath != "" { + if cs := task.ParseChangestatFromFile(exec.StdoutPath); cs != nil { + if csErr := p.store.UpdateExecutionChangestats(exec.ID, cs); csErr != nil { + p.logger.Error("failed to store changestats", "execID", exec.ID, "error", csErr) + } + } + } if updateErr := p.store.UpdateExecution(exec); updateErr != nil { p.logger.Error("failed to update execution", "error", updateErr) } -- cgit v1.2.3