feat(agentic): add ReadStatus wrapper

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-01 13:20:05 +00:00
parent 96cd2bc1b2
commit 82f04f64dd
3 changed files with 74 additions and 0 deletions

View file

@ -91,6 +91,25 @@ func ReadStatusResult(workspaceDir string) core.Result {
return core.Result{Value: &workspaceStatus, OK: true}
}
// read, err := ReadStatus("/path/to/workspace")
// if err == nil { core.Println(read.Status) }
func ReadStatus(workspaceDir string) (*WorkspaceStatus, error) {
result := ReadStatusResult(workspaceDir)
if !result.OK {
err, _ := result.Value.(error)
if err == nil {
err = core.E("ReadStatus", "failed to read status", nil)
}
return nil, err
}
workspaceStatus, ok := workspaceStatusValue(result)
if !ok {
return nil, core.E("ReadStatus", "invalid status payload", nil)
}
return workspaceStatus, nil
}
// result := ReadStatusResult("/path/to/workspace")
// workspaceStatus, ok := workspaceStatusValue(result)
func workspaceStatusValue(result core.Result) (*WorkspaceStatus, bool) {

View file

@ -44,3 +44,24 @@ func ExampleReadStatusResult() {
// true
// go-io
}
func ExampleReadStatus() {
fsys := (&core.Fs{}).NewUnrestricted()
dir := fsys.TempDir("agentic-status")
defer fsys.DeleteAll(dir)
status := &WorkspaceStatus{
Status: "blocked",
Agent: "claude",
Repo: "go-io",
}
core.Println(fs.Write(core.JoinPath(dir, "status.json"), core.JSONMarshalString(status)).OK)
read, err := ReadStatus(dir)
core.Println(err == nil)
core.Println(read.Repo)
// Output:
// true
// true
// go-io
}

View file

@ -184,6 +184,40 @@ func TestStatus_ReadStatus_Good_BlockedWithQuestion(t *testing.T) {
assert.Equal(t, "Which interface should I implement?", read.Question)
}
func TestStatus_ReadStatus_Good_Wrapper(t *testing.T) {
dir := t.TempDir()
status := &WorkspaceStatus{
Status: "completed",
Agent: "codex",
Repo: "go-io",
Task: "add logging",
}
require.True(t, fs.Write(core.JoinPath(dir, "status.json"), core.JSONMarshalString(status)).OK)
read, err := ReadStatus(dir)
require.NoError(t, err)
require.NotNil(t, read)
assert.Equal(t, "completed", read.Status)
assert.Equal(t, "go-io", read.Repo)
}
func TestStatus_ReadStatus_Bad_NoFile_Wrapper(t *testing.T) {
read, err := ReadStatus(t.TempDir())
assert.Nil(t, read)
require.Error(t, err)
}
func TestStatus_ReadStatus_Ugly_InvalidJSON_Wrapper(t *testing.T) {
dir := t.TempDir()
require.True(t, fs.Write(core.JoinPath(dir, "status.json"), "not json{").OK)
read, err := ReadStatus(dir)
assert.Nil(t, read)
require.Error(t, err)
}
func TestStatus_WriteRead_Good_Roundtrip(t *testing.T) {
dir := t.TempDir()