summaryrefslogtreecommitdiff
path: root/internal/api/claudomator.go
diff options
context:
space:
mode:
authorClaude Agent <agent@doot.local>2026-03-25 05:17:35 +0000
committerClaude Agent <agent@doot.local>2026-03-25 05:17:35 +0000
commitb58787cfec0bd07abc316c66dc9be6c10b8113c6 (patch)
treee1c788094f51bdab0bce8ad38c8d6638c9079bb9 /internal/api/claudomator.go
parent2db5020047640361066510f29f908ca9fd1c99aa (diff)
feat: add Claudomator stories as atom source in Doot tasks tab
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/api/claudomator.go')
-rw-r--r--internal/api/claudomator.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/internal/api/claudomator.go b/internal/api/claudomator.go
new file mode 100644
index 0000000..3be4812
--- /dev/null
+++ b/internal/api/claudomator.go
@@ -0,0 +1,54 @@
+package api
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "time"
+
+ "task-dashboard/internal/models"
+)
+
+type ClaudomatorHTTPClient struct {
+ BaseURL string
+ HTTPClient *http.Client
+}
+
+func NewClaudomatorClient(baseURL string) *ClaudomatorHTTPClient {
+ return &ClaudomatorHTTPClient{
+ BaseURL: baseURL,
+ HTTPClient: &http.Client{Timeout: 5 * time.Second},
+ }
+}
+
+func (c *ClaudomatorHTTPClient) GetActiveStories(ctx context.Context) ([]models.ClaudomatorStory, error) {
+ req, err := http.NewRequestWithContext(ctx, "GET", c.BaseURL+"/api/stories", nil)
+ if err != nil {
+ return nil, err
+ }
+ httpClient := c.HTTPClient
+ if httpClient == nil {
+ httpClient = http.DefaultClient
+ }
+ resp, err := httpClient.Do(req)
+ if err != nil {
+ return nil, fmt.Errorf("claudomator: %w", err)
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("claudomator: unexpected status %d", resp.StatusCode)
+ }
+ var all []models.ClaudomatorStory
+ if err := json.NewDecoder(resp.Body).Decode(&all); err != nil {
+ return nil, err
+ }
+ active := make([]models.ClaudomatorStory, 0, len(all))
+ for _, s := range all {
+ switch s.Status {
+ case "IN_PROGRESS", "REVIEW_READY", "NEEDS_FIX":
+ active = append(active, s)
+ }
+ }
+ return active, nil
+}