agent/pkg/runner/paths.go
Virgil f9d36cab0b fix(ax): align brain and runner result flows
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-29 23:45:48 +00:00

62 lines
1.7 KiB
Go

// SPDX-License-Identifier: EUPL-1.2
package runner
import (
"time"
"dappco.re/go/agent/pkg/agentic"
core "dappco.re/go/core"
)
// fs reuses the shared unrestricted filesystem used by agentic.
var fs = agentic.LocalFs()
// WorkspaceRoot returns the root directory for agent workspaces.
//
// root := runner.WorkspaceRoot() // ~/Code/.core/workspace
func WorkspaceRoot() string {
return agentic.WorkspaceRoot()
}
// CoreRoot returns the root directory for core ecosystem files.
//
// root := runner.CoreRoot() // ~/Code/.core
func CoreRoot() string {
return agentic.CoreRoot()
}
// ReadStatus reads `status.json` from one workspace directory.
//
// st, err := runner.ReadStatus("/srv/core/workspace/core/go-io/task-5")
func ReadStatus(wsDir string) (*WorkspaceStatus, error) {
status, err := agentic.ReadStatus(wsDir)
if err != nil {
return nil, core.E("runner.ReadStatus", "failed to read status", err)
}
json := core.JSONMarshalString(status)
var st WorkspaceStatus
if result := core.JSONUnmarshalString(json, &st); !result.OK {
parseErr, _ := result.Value.(error)
return nil, core.E("runner.ReadStatus", "failed to parse status", parseErr)
}
return &st, nil
}
// WriteStatus writes `status.json` for one workspace directory.
//
// runner.WriteStatus("/srv/core/workspace/core/go-io/task-5", &runner.WorkspaceStatus{Status: "running", Agent: "codex"})
func WriteStatus(wsDir string, st *WorkspaceStatus) {
if st == nil {
return
}
json := core.JSONMarshalString(st)
var status agentic.WorkspaceStatus
if result := core.JSONUnmarshalString(json, &status); !result.OK {
return
}
status.UpdatedAt = time.Now()
fs.WriteAtomic(agentic.WorkspaceStatusPath(wsDir), core.JSONMarshalString(&status))
}