Wire Marvin tasks adapter into the daemon

main constructs the Marvin adapter (command overridable via
ANTIDRIFT_MARVIN_CMD) and injects it. Adds a web test asserting the
planning state payload carries today's tasks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 22:07:20 -04:00
parent c4eb870808
commit e832a2da85
2 changed files with 40 additions and 0 deletions
+8
View File
@@ -15,6 +15,7 @@ import (
"antidrift/internal/session"
"antidrift/internal/statusfile"
"antidrift/internal/store"
"antidrift/internal/tasks"
"antidrift/internal/web"
)
@@ -46,6 +47,13 @@ func main() {
log.Printf("ai: %s backend (coach + drift judge + nudge)", backend.Name())
}
// Wire the Tasks port: Amazing Marvin via ampy's `am` CLI. The command is
// overridable with ANTIDRIFT_MARVIN_CMD (e.g. "uv run am" or an absolute
// path). A missing or failing CLI degrades to no tasks panel at fetch time —
// planning still works.
ctrl.SetTasks(tasks.NewMarvin(os.Getenv("ANTIDRIFT_MARVIN_CMD")))
log.Printf("tasks: marvin adapter (am)")
// Mirror runtime status to ~/.antidrift_status for a window-manager bar.
// A misconfigured home dir degrades to no status file, not a failed start.
if statusPath, err := statusfile.DefaultPath(); err != nil {