diff options
Diffstat (limited to 'Omni/Agent/Worker.hs')
| -rw-r--r-- | Omni/Agent/Worker.hs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Omni/Agent/Worker.hs b/Omni/Agent/Worker.hs index 638c72f..fe9194f 100644 --- a/Omni/Agent/Worker.hs +++ b/Omni/Agent/Worker.hs @@ -7,6 +7,7 @@ import Alpha import qualified Data.Text as Text import qualified Data.Text.IO as TIO import qualified Omni.Agent.Core as Core +import qualified Omni.Agent.Git as Git import qualified Omni.Agent.Log as AgentLog import qualified Omni.Task.Core as TaskCore import qualified System.Directory as Directory @@ -58,7 +59,7 @@ processTask worker task = do -- Run Amp AgentLog.updateActivity "Running Amp agent..." - exitCode <- runAmp repo task + (exitCode, output) <- runAmp repo task case exitCode of Exit.ExitSuccess -> do @@ -67,6 +68,10 @@ processTask worker task = do -- Update status to Review TaskCore.updateTaskStatus tid TaskCore.Review [] + -- Commit changes using Amp output + let commitMsg = "feat: implement " <> tid <> "\n\n" <> output + Git.commit repo commitMsg + -- Submit for review AgentLog.updateActivity "Task completed" @@ -77,7 +82,7 @@ processTask worker task = do AgentLog.updateActivity "Agent failed, retrying..." threadDelay (10 * 1000000) -- Sleep 10s -runAmp :: FilePath -> TaskCore.Task -> IO Exit.ExitCode +runAmp :: FilePath -> TaskCore.Task -> IO (Exit.ExitCode, Text) runAmp repo task = do let prompt = "You are a Worker Agent.\n" @@ -122,14 +127,15 @@ runAmp repo task = do -- Assume amp is in PATH let args = ["--log-level", "debug", "--log-file", "_/llm/amp.log", "--dangerously-allow-all", "-x", Text.unpack fullPrompt] - let cp = (Process.proc "amp" args) {Process.cwd = Just repo} - (_, _, _, ph) <- Process.createProcess cp + let cp = (Process.proc "amp" args) {Process.cwd = Just repo, Process.std_out = Process.CreatePipe} + (_, Just hOut, _, ph) <- Process.createProcess cp tid <- forkIO <| monitorLog logFile ph exitCode <- Process.waitForProcess ph + output <- TIO.hGetContents hOut killThread tid - pure exitCode + pure (exitCode, output) formatTask :: TaskCore.Task -> Text formatTask t = |
