diff --git a/api/openapi.yaml b/api/openapi.yaml index 106dd29..c484b49 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -1057,6 +1057,13 @@ paths: parameters: - { name: taskId, in: path, required: true, schema: { type: string } } - { name: inputId, in: path, required: true, schema: { type: integer, format: int64 } } + post: + operationId: sendQueuedMessage + description: Sends this queued message as a new turn when its task agent is idle or stopped. + responses: + "204": { description: The message was sent. } + "404": { $ref: "#/components/responses/Error" } + "409": { $ref: "#/components/responses/Error" } delete: operationId: withdrawMessage description: > diff --git a/internal/agents/queue.go b/internal/agents/queue.go index f914b5c..240b22d 100644 --- a/internal/agents/queue.go +++ b/internal/agents/queue.go @@ -325,3 +325,60 @@ func (m *Manager) recordQueued(ctx context.Context, l *live, msgs []queued) stri slog.Info("queued messages sent mid-turn", "session", l.id, "count", len(msgs)) return b.String() } + +func (m *Manager) SendQueued(ctx context.Context, taskID string, inputID int64, user api.User) error { + createUnlock := m.lockDelivery("create:" + taskID) + defer createUnlock() + ctx = context.WithoutCancel(ctx) + in, err := m.store.TaskInput(ctx, taskID, inputID) + if err != nil { + return err + } + task, err := m.store.GetTask(ctx, taskID) + if err != nil { + return err + } + if task.Status != api.TaskStatusActive { + return fmt.Errorf("%w: task is closed", ErrConflict) + } + sessions, err := m.store.ListSessions(ctx, taskID) + if err != nil { + return err + } + sess, found := memberSession(sessions, in.Member) + if found { + sessionUnlock := m.lockDelivery(sess.Id) + defer sessionUnlock() + sess, err = m.store.GetSession(ctx, sess.Id) + if err != nil { + return err + } + if sess.State != api.AgentSessionStateIdle || m.isPaused(sess.Id) { + return fmt.Errorf("%w: agent must be idle and unpaused", ErrConflict) + } + } + // Match Deliver's lock order: session before queue. Re-read the input + // because another delivery or withdrawal may have taken it while we waited. + unlock := m.lockDelivery(queueLockKey(taskID)) + defer unlock() + in, err = m.store.TaskInput(ctx, taskID, inputID) + if err != nil { + return err + } + p := Prompt{Text: in.Text, Kind: in.Kind, Images: in.Images, SendID: in.SendID, Client: in.Client} + if found { + _, err = m.Send(ctx, sess.Id, in.Actor, p) + } else { + for i := len(sessions) - 1; i >= 0; i-- { + if sessions[i].Member == in.Member && sessions[i].Role == api.Implementer { + p.Model, p.Effort = sessions[i].Model, sessions[i].Effort + break + } + } + _, err = m.create(ctx, task, user, in.Member, in.Actor, p) + } + if err != nil { + return err + } + return m.store.DeleteTaskInputs(ctx, []int64{in.ID}) +} diff --git a/internal/api/api.gen.go b/internal/api/api.gen.go index afc3f72..d3d0204 100644 --- a/internal/api/api.gen.go +++ b/internal/api/api.gen.go @@ -2303,6 +2303,9 @@ type ServerInterface interface { // (DELETE /api/tasks/{taskId}/queue/{inputId}) WithdrawMessage(w http.ResponseWriter, r *http.Request, taskId string, inputId int64) + // (POST /api/tasks/{taskId}/queue/{inputId}) + SendQueuedMessage(w http.ResponseWriter, r *http.Request, taskId string, inputId int64) + // (GET /api/tasks/{taskId}/raw) GetTaskRaw(w http.ResponseWriter, r *http.Request, taskId string, params GetTaskRawParams) @@ -4257,6 +4260,41 @@ func (siw *ServerInterfaceWrapper) WithdrawMessage(w http.ResponseWriter, r *htt handler.ServeHTTP(w, r) } +// SendQueuedMessage operation middleware +func (siw *ServerInterfaceWrapper) SendQueuedMessage(w http.ResponseWriter, r *http.Request) { + + var err error + _ = err + + // ------------- Path parameter "taskId" ------------- + var taskId string + + err = runtime.BindStyledParameterWithOptions("simple", "taskId", r.PathValue("taskId"), &taskId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true}) + if err != nil { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "taskId", Err: err}) + return + } + + // ------------- Path parameter "inputId" ------------- + var inputId int64 + + err = runtime.BindStyledParameterWithOptions("simple", "inputId", r.PathValue("inputId"), &inputId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "integer", Format: "int64", ValueIsUnescaped: true}) + if err != nil { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "inputId", Err: err}) + return + } + + handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + siw.Handler.SendQueuedMessage(w, r, taskId, inputId) + })) + + for _, middleware := range siw.HandlerMiddlewares { + handler = middleware(handler) + } + + handler.ServeHTTP(w, r) +} + // GetTaskRaw operation middleware func (siw *ServerInterfaceWrapper) GetTaskRaw(w http.ResponseWriter, r *http.Request) { @@ -4892,6 +4930,7 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/sessions", wrapper.ListSessions) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/tasks/{taskId}/sessions", wrapper.CreateSession) m.HandleFunc(http.MethodDelete+" "+options.BaseURL+"/api/tasks/{taskId}/queue/{inputId}", wrapper.WithdrawMessage) + m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/tasks/{taskId}/queue/{inputId}", wrapper.SendQueuedMessage) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/messages", wrapper.SendMessage) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/compact", wrapper.CompactSession) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/interrupt", wrapper.InterruptSession) @@ -4928,373 +4967,374 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/server/server.go b/internal/server/server.go index 88da3cb..374f6a2 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -986,3 +986,15 @@ func writeStoreError(w http.ResponseWriter, err error) { } writeError(w, http.StatusInternalServerError, err) } + +func (s *Server) SendQueuedMessage(w http.ResponseWriter, r *http.Request, taskID string, inputID int64) { + u, ok := s.actingUser(w, r) + if !ok { + return + } + if err := s.agents.SendQueued(r.Context(), taskID, inputID, u); err != nil { + writeAgentError(w, err) + return + } + w.WriteHeader(http.StatusNoContent) +} diff --git a/internal/store/taskinputs.go b/internal/store/taskinputs.go index 8857ae2..707cfa6 100644 --- a/internal/store/taskinputs.go +++ b/internal/store/taskinputs.go @@ -151,3 +151,24 @@ func (s *Store) DeleteTaskInputs(ctx context.Context, ids []int64) error { return nil }) } + +func (s *Store) TaskInput(ctx context.Context, taskID string, id int64) (TaskInput, error) { + var member string + err := s.db.QueryRowContext(ctx, `SELECT member FROM task_inputs WHERE task_id = ? AND id = ?`, taskID, id).Scan(&member) + if errors.Is(err, sql.ErrNoRows) { + return TaskInput{}, ErrNotFound + } + if err != nil { + return TaskInput{}, err + } + inputs, err := s.TaskInputs(ctx, taskID, member) + if err != nil { + return TaskInput{}, err + } + for _, in := range inputs { + if in.ID == id { + return in, nil + } + } + return TaskInput{}, ErrNotFound +} diff --git a/mac/Sources/Byre/Chat.swift b/mac/Sources/Byre/Chat.swift index 49b3926..4b8436b 100644 --- a/mac/Sources/Byre/Chat.swift +++ b/mac/Sources/Byre/Chat.swift @@ -521,6 +521,19 @@ final class ChatModel { } } + var canSendQueued: Bool { + taskId != nil && !closed && !stopping && !paused && session?.state != .running + } + + func sendQueued(_ p: PendingSend, _ overlays: Overlays) async { + guard let taskId, let inputId = p.inputId else { return } + do { + _ = try await store.api.client.sendQueuedMessage(path: .init(taskId: taskId, inputId: Int64(inputId))).noContent + } catch { + overlays.showAlert(errorText(error)) + } + } + func withdraw(_ p: PendingSend, _ overlays: Overlays) async { guard let taskId, let inputId = p.inputId else { return @@ -1126,6 +1139,7 @@ private struct PendingView: View { let model: ChatModel @Environment(Overlays.self) private var overlays @ViewState private var withdrawing = false + @ViewState private var sending = false var body: some View { TrailingBubble { @@ -1135,6 +1149,17 @@ private struct PendingView: View { .font(Fonts.font(11, italic: true)) .foregroundStyle(Palette.muted) if pending.inputId != nil { + if model.canSendQueued { + Button("Send") { + sending = true + Task { + await model.sendQueued(pending, overlays) + sending = false + } + } + .buttonStyle(WebButtonStyle()) + .disabled(sending || withdrawing) + } Button("×") { withdrawing = true Task { @@ -1143,7 +1168,7 @@ private struct PendingView: View { } } .buttonStyle(ThumbRemoveStyle()) - .disabled(withdrawing) + .disabled(withdrawing || sending) .help("Take this message back into the composer") } }