Add concurrency caps, the two-pane web UI, AGENTS.md, and plan status

This commit is contained in:
Ian Gulliver
2026-10-14 09:40:12 -07:00
parent befd476598
commit e9fd7de556
60 changed files with 5419 additions and 254 deletions
+34 -1
View File
@@ -54,7 +54,7 @@ func New(dataDir string, spa fs.FS) (*Server, error) {
return nil, err
}
s.agents = agents.New(s.store)
s.agents = agents.New(s.store, agents.DefaultLimits)
err = s.agents.Recover(context.Background())
if err != nil {
s.store.Close()
@@ -325,6 +325,12 @@ func (s *Server) GetStatus(w http.ResponseWriter, r *http.Request) {
return
}
usage, err := s.agents.Usage(r.Context())
if err != nil {
writeStoreError(w, err)
return
}
dbBytes := int64(0)
for _, suffix := range []string{"", "-wal", "-shm"} {
fi, err := os.Stat(s.store.Path() + suffix)
@@ -341,9 +347,36 @@ func (s *Server) GetStatus(w http.ResponseWriter, r *http.Request) {
ActiveTasks: c.ActiveTasks,
SseClients: s.hub.count(),
LiveAgents: s.agents.LiveCount(),
RunningTurns: usage.Running,
QueuedTurns: usage.Queued,
RateLimits: usage.RateLimits,
})
}
func (s *Server) ListTaskEvents(w http.ResponseWriter, r *http.Request, taskID string, params api.ListTaskEventsParams) {
_, err := s.store.GetTask(r.Context(), taskID)
if err != nil {
writeStoreError(w, err)
return
}
after := int64(0)
if params.After != nil {
after = *params.After
}
limit := 500
if params.Limit != nil {
limit = *params.Limit
}
events, err := s.store.TaskEvents(r.Context(), taskID, after, limit)
if err != nil {
writeStoreError(w, err)
return
}
writeJSON(w, http.StatusOK, events)
}
func (s *Server) ListSessions(w http.ResponseWriter, r *http.Request, taskID string) {
_, err := s.store.GetTask(r.Context(), taskID)
if err != nil {