Skip to content

dl supervisor as a durable app: alarms, budgets, restart-safe #137

Open

Description

@sinameraji

Part of directionally-local/installer#48 (the deck roadmap). One PR. Read the roadmap first. Builds on the protocol in sinameraji/camouflage#146 (SessionStatus event, interleaved sessions by session_id); if that hasn't merged, build against the shape described there and keep the dependency isolated.

The dl supervisor today is a small Node loop on the server (keeps a queue of tasks running as Aster code conversations, max N at once, under a daily spend cap; nudges a conversation that finished without a PR; cancels one with no progress for 25 minutes; retries a failed one once; never merges). Make it a Serverless Objects app so its state and timers survive restarts.

Do

  • An example app under examples/ (e.g. examples/dl-supervisor): a Supervisor object per queue holding the tasks and per-task state, a durable alarm per tick, and the same rules as above. It talks to the Aster HTTP API (/api/v1/conversations, /turns, /cancel, /models, /workspaces) with a bearer token from a secret, and checks spend through OpenRouter's /api/v1/key.
  • An HTTP surface to add tasks, list state and pause/resume.
  • Tests with a fake Aster API and fake clock: start up to N, stall cancel, nudge, one retry, spend cap, restart in the middle of a tick.
  • A README for running it with sobjects dev/up next to a dl server.

Done when

Tests pass; the README shows it running against a local fake.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions