feat(agentic): add ReadStatus wrapper
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
96cd2bc1b2
commit
82f04f64dd
3 changed files with 74 additions and 0 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue