diff --git a/api/openapi.yaml b/api/openapi.yaml index 8c4c8ac..6b4ce5c 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -972,6 +972,32 @@ paths: "404": { $ref: "#/components/responses/Error" } "409": { $ref: "#/components/responses/Error" } + /api/sessions/{sessionId}/continue: + parameters: + - { name: sessionId, in: path, required: true, schema: { type: string } } + post: + operationId: continueSession + description: > + Creates a new task from a merged or discarded task's agent session: its branch and worktree start from the + project's default branch, with an agent session that continues that session's conversation from its end (the + vendor's own session fork) and gets the message as its first turn, as sendMessage does. The new task has + forked_from and no forked_at. Refused while the session's task is active, for a session that isn't a task's + implementer, and for an Antigravity session. + requestBody: + required: true + content: + application/json: + schema: { $ref: "#/components/schemas/MessageCreate" } + responses: + "201": + description: The new task. + content: + application/json: + schema: { $ref: "#/components/schemas/Task" } + "400": { $ref: "#/components/responses/Error" } + "404": { $ref: "#/components/responses/Error" } + "409": { $ref: "#/components/responses/Error" } + /api/tasks/{taskId}/sessions: parameters: - { name: taskId, in: path, required: true, schema: { type: string } } @@ -1539,7 +1565,7 @@ components: merge_commit: { type: string, description: "merged: the squash commit on the default branch; empty when there was nothing to merge." } todo_item: { type: string, description: "The title of the TODO.md item the task was started from; absent for other tasks." } forked_from: { type: string, description: "The task this one was forked from; absent for other tasks." } - forked_at: { type: integer, description: "With forked_from: the n of the snapshot it was forked at." } + forked_at: { type: integer, description: "With forked_from: the n of the snapshot it was forked at; absent when it continues a closed task from its end." } merge_queued_at: { type: string, format: date-time, description: "When Merge was requested while another task in the project was merging; absent once the merge starts or when none is held." } workflow: { type: string, description: "For a workflow run's task: the name of the workflow it froze at creation (getTaskWorkflow has its copy). A run's task has no agent, worktree or branch (branch, worktree_path and base_ref are empty); its stage tasks are its subtasks, and it closes once they all have, as merged when any of them merged. Absent for other tasks." } workflow_stage: { type: string, description: "For a stage task of a workflow run: the name of the stage it runs; parent_task_id is the run's task. Absent for other tasks." } diff --git a/docs/operations.md b/docs/operations.md index 5726af7..868324c 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -12,6 +12,8 @@ Add SQL migrations in `internal/store/migrations/` as `NNN-name.sql`. The number byre runs nothing in a new worktree. Installing dependencies or copying untracked files such as `.env` is the project's own instruction in its AGENTS.md, carried out by the agent with its own tools. +Closing a task deletes its branch, worktree and snapshot refs, so a task continued from a closed one (Send in a merged or discarded task, which becomes Continue) starts from the default branch: a merged task's work is there, a discarded task's is gone. Only the agent's conversation carries over, through the vendor's own session files, which outlive the worktree. + ## Running as a service The service always runs from the app: `/Applications/Byre.app/Contents/Helpers/byre install`, which the app's Server tab and connection screen run. `byre install` takes `PATH` from the shell it is run in, since the service's `PATH` must find `claude`, `codex`, `agy`, `git`, `curl` and `npx`. When the service is already loaded, `install` hands `launchctl bootout` and `bootstrap` to a detached `sh` and exits: `bootout` kills every process in the service's process groups, which includes `byre install` itself when an agent byre runs is the one running it. diff --git a/internal/agents/fork.go b/internal/agents/fork.go index 8673dad..458a7f1 100644 --- a/internal/agents/fork.go +++ b/internal/agents/fork.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "log/slog" + "math" "strings" "time" @@ -19,6 +20,13 @@ func (m *Manager) Fork(ctx context.Context, src api.Task, project api.Project, n return t, err } +func forkOrigin(t api.Task, from string) string { + if t.ForkedAt == nil { + return "continued from " + from + } + return fmt.Sprintf("forked from %s at snapshot %d", from, *t.ForkedAt) +} + func forkTitle(src api.Task, n int) string { return fmt.Sprintf("%s (fork of #%d)", src.Title, n) } @@ -172,7 +180,7 @@ func (m *Manager) fork(ctx context.Context, src api.Task, project api.Project, n return api.Task{}, "", fmt.Errorf("%w: snapshot %d of task %s has no recorded agent message at or before it to fork the conversation from", ErrConflict, n, src.Id) } - t, err := m.createTask(ctx, project, api.Task{ + return m.forkSession(ctx, project, api.Task{ Title: title, MergeTitle: src.MergeTitle, CreatedBy: creator.Login, @@ -181,7 +189,61 @@ func (m *Manager) fork(ctx context.Context, src api.Task, project api.Project, n ForkedAt: &n, WorkflowStage: src.WorkflowStage, ParentTaskId: src.ParentTaskId, - }, snap.CommitSha, creator.Login) + }, snap.CommitSha, creator, srcSess, at) +} + +func (m *Manager) Continue(ctx context.Context, srcSess api.AgentSession, src api.Task, project api.Project, creator api.User, text, model, sendID, client string, images ...string) (api.Task, error) { + if creator.GitName == "" || creator.GitEmail == "" { + return api.Task{}, ErrNoGitIdentity + } + if src.Status == api.TaskStatusActive { + return api.Task{}, fmt.Errorf("%w: task %s is still active", ErrConflict, src.Id) + } + if srcSess.Role != api.Implementer { + return api.Task{}, fmt.Errorf("%w: session %s is a %s, not a task's agent", ErrConflict, srcSess.Id, srcSess.Role) + } + if srcSess.Vendor == api.Antigravity { + return api.Task{}, fmt.Errorf("%w: session %s ran on Antigravity, and agy can't fork a conversation", ErrConflict, srcSess.Id) + } + + unlock := m.lockDelivery("continue:" + srcSess.Id) + defer unlock() + ctx = context.WithoutCancel(ctx) + prior, sent, err := m.priorSend(ctx, sendID) + if err != nil { + return api.Task{}, err + } + if sent { + return m.store.GetTask(ctx, prior.TaskId) + } + + events, err := m.store.TaskEvents(ctx, src.Id, 0, -1) + if err != nil { + return api.Task{}, err + } + at := forkPoint(events, srcSess.Id, math.MaxInt64) + if at == "" { + return api.Task{}, fmt.Errorf("%w: session %s has no recorded agent message to continue the conversation from", ErrConflict, srcSess.Id) + } + + t, sessionID, err := m.forkSession(ctx, project, api.Task{ + Title: src.Title + " (continued)", + MergeTitle: src.MergeTitle, + CreatedBy: creator.Login, + ForkedFrom: &src.Id, + }, project.DefaultBranch, creator, srcSess, at) + if err != nil { + return api.Task{}, err + } + _, _, err = m.Message(ctx, sessionID, creator.Login, text, model, sendID, client, images...) + if err != nil { + return api.Task{}, fmt.Errorf("task %s created, but its agent did not start: %w", t.Id, err) + } + return t, nil +} + +func (m *Manager) forkSession(ctx context.Context, project api.Project, task api.Task, base string, creator api.User, srcSess api.AgentSession, at string) (api.Task, string, error) { + t, err := m.createTask(ctx, project, task, base, creator.Login) if err != nil { return api.Task{}, "", err } diff --git a/internal/agents/guidance.go b/internal/agents/guidance.go index 890272f..f9e9d1a 100644 --- a/internal/agents/guidance.go +++ b/internal/agents/guidance.go @@ -142,6 +142,18 @@ func subtaskGuidance(parent api.Task) string { } func forkGuidance(task, src api.Task) string { + if task.ForkedAt == nil { + outcome := "was discarded, so none of its changes are in this worktree" + switch { + case src.MergeCommit != nil: + outcome = fmt.Sprintf("was merged as commit %s, so its work is already on the default branch", *src.MergeCommit) + case src.Status == api.TaskStatusMerged: + outcome = "was merged with no changes" + } + return fmt.Sprintf("\n- This conversation continues byre task %q, which %s. It goes on in a new task of its own: branch %s, worktree %s, started from the default branch. "+ + "Everything before this point happened in %s, which no longer exists: from now on read and change files only in %s, and use paths under it.", + src.Title, outcome, task.Branch, task.WorktreePath, src.WorktreePath, task.WorktreePath) + } return fmt.Sprintf("\n- This conversation was forked from byre task %q at its snapshot %d, into a task of its own: branch %s, worktree %s, which held that snapshot's files when the fork was made. "+ "Everything before the fork happened in %s, which belongs to the other task: from now on read and change files only in %s, never in the other worktree, and use paths under it.", src.Title, *task.ForkedAt, task.Branch, task.WorktreePath, src.WorktreePath, task.WorktreePath) diff --git a/internal/agents/lead.go b/internal/agents/lead.go index f701192..0d249ca 100644 --- a/internal/agents/lead.go +++ b/internal/agents/lead.go @@ -588,7 +588,7 @@ func (m *Manager) signalText(ctx context.Context, ev api.Event) (string, error) return "", err } if task.ForkedFrom != nil { - return fmt.Sprintf("%s was forked by %s from %s at snapshot %d.", m.taskLabel(ctx, task.Id), ev.Actor, m.taskLabel(ctx, *task.ForkedFrom), *task.ForkedAt), nil + return fmt.Sprintf("%s was %s by %s.", m.taskLabel(ctx, task.Id), forkOrigin(task, m.taskLabel(ctx, *task.ForkedFrom)), ev.Actor), nil } if task.WorkflowStage != nil { return fmt.Sprintf("%s was created to run stage %q of %s.", m.taskLabel(ctx, task.Id), *task.WorkflowStage, m.taskLabel(ctx, *task.ParentTaskId)), nil diff --git a/internal/agents/leadtools.go b/internal/agents/leadtools.go index 1a2bb33..9d6edfc 100644 --- a/internal/agents/leadtools.go +++ b/internal/agents/leadtools.go @@ -894,7 +894,7 @@ func (m *Manager) listTasksText(ctx context.Context) (string, error) { fmt.Fprintf(b, "; from TODO item %q", *t.TodoItem) } if t.ForkedFrom != nil { - fmt.Fprintf(b, "; forked from %s at snapshot %d", *t.ForkedFrom, *t.ForkedAt) + fmt.Fprintf(b, "; %s", forkOrigin(t, *t.ForkedFrom)) } if t.ParentTaskId != nil && t.WorkflowStage == nil { fmt.Fprintf(b, "; subtask of %s", *t.ParentTaskId) diff --git a/internal/agents/notes.go b/internal/agents/notes.go index a1bfaf9..f91e619 100644 --- a/internal/agents/notes.go +++ b/internal/agents/notes.go @@ -34,8 +34,8 @@ func (m *Manager) mergeNote(ctx context.Context, task api.Task, login string) (s if task.TodoItem != nil { fmt.Fprintf(b, "Started from the TODO item %q.\n", *task.TodoItem) } - if task.ForkedFrom != nil && task.ForkedAt != nil { - fmt.Fprintf(b, "Forked from task %s at snapshot %d.\n", *task.ForkedFrom, *task.ForkedAt) + if task.ForkedFrom != nil { + fmt.Fprintf(b, "This task was %s.\n", forkOrigin(task, "task "+*task.ForkedFrom)) } fmt.Fprintf(b, "Full transcripts: the events of task %s in byre (GET /api/events?task_id=%s).\n", task.Id, task.Id) diff --git a/internal/api/api.gen.go b/internal/api/api.gen.go index a99829d..87d104d 100644 --- a/internal/api/api.gen.go +++ b/internal/api/api.gen.go @@ -1526,7 +1526,7 @@ type Task struct { // Discarding Whether a Discard was started and the task isn't closed yet: its summary turn is waiting for the running turn, running, or done and the task is being removed. Discarding bool `json:"discarding"` - // ForkedAt With forked_from: the n of the snapshot it was forked at. + // ForkedAt With forked_from: the n of the snapshot it was forked at; absent when it continues a closed task from its end. ForkedAt *int `json:"forked_at,omitempty"` // ForkedFrom The task this one was forked from; absent for other tasks. @@ -2014,6 +2014,9 @@ type UpdateScheduleJSONRequestBody = ScheduleSave // CompactSessionJSONRequestBody defines body for CompactSession for application/json ContentType. type CompactSessionJSONRequestBody = CompactCreate +// ContinueSessionJSONRequestBody defines body for ContinueSession for application/json ContentType. +type ContinueSessionJSONRequestBody = MessageCreate + // SendMessageJSONRequestBody defines body for SendMessage for application/json ContentType. type SendMessageJSONRequestBody = MessageCreate @@ -2191,6 +2194,9 @@ type ServerInterface interface { // (POST /api/sessions/{sessionId}/compact) CompactSession(w http.ResponseWriter, r *http.Request, sessionId string) + // (POST /api/sessions/{sessionId}/continue) + ContinueSession(w http.ResponseWriter, r *http.Request, sessionId string) + // (POST /api/sessions/{sessionId}/interrupt) InterruptSession(w http.ResponseWriter, r *http.Request, sessionId string) @@ -3436,6 +3442,32 @@ func (siw *ServerInterfaceWrapper) CompactSession(w http.ResponseWriter, r *http handler.ServeHTTP(w, r) } +// ContinueSession operation middleware +func (siw *ServerInterfaceWrapper) ContinueSession(w http.ResponseWriter, r *http.Request) { + + var err error + _ = err + + // ------------- Path parameter "sessionId" ------------- + var sessionId string + + err = runtime.BindStyledParameterWithOptions("simple", "sessionId", r.PathValue("sessionId"), &sessionId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true}) + if err != nil { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "sessionId", Err: err}) + return + } + + handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + siw.Handler.ContinueSession(w, r, sessionId) + })) + + for _, middleware := range siw.HandlerMiddlewares { + handler = middleware(handler) + } + + handler.ServeHTTP(w, r) +} + // InterruptSession operation middleware func (siw *ServerInterfaceWrapper) InterruptSession(w http.ResponseWriter, r *http.Request) { @@ -4758,6 +4790,7 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/reviews", wrapper.ListReviews) m.HandleFunc(http.MethodPut+" "+options.BaseURL+"/api/reviews/{reviewId}/findings/{index}", wrapper.SetFindingState) m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/tasks/{taskId}/snapshots/{n}/fork", wrapper.ForkSnapshot) + m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/continue", wrapper.ContinueSession) 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) @@ -4796,355 +4829,358 @@ 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 681f08b..17660bb 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -840,6 +840,60 @@ func (s *Server) ForkSnapshot(w http.ResponseWriter, r *http.Request, taskID str writeJSON(w, http.StatusCreated, fork) } +func (s *Server) ContinueSession(w http.ResponseWriter, r *http.Request, sessionID string) { + req := api.MessageCreate{} + if !readJSON(w, r, &req) { + return + } + + images, ok := s.images(w, r, req.Images) + if !ok { + return + } + + if strings.TrimSpace(req.Text) == "" && len(images) == 0 { + writeError(w, http.StatusBadRequest, errors.New("text or images are required")) + return + } + + model := "" + if req.Model != nil { + model = *req.Model + } + sendID := "" + if req.SendId != nil { + sendID = *req.SendId + } + + src, err := s.store.GetSession(r.Context(), sessionID) + if err != nil { + writeStoreError(w, err) + return + } + t, err := s.store.GetTask(r.Context(), src.TaskId) + if err != nil { + writeStoreError(w, err) + return + } + p, err := s.store.GetProject(r.Context(), t.ProjectId) + if err != nil { + writeStoreError(w, err) + return + } + u, err := s.store.GetUser(r.Context(), actor(r)) + if err != nil { + writeStoreError(w, err) + return + } + + task, err := s.agents.Continue(r.Context(), src, t, p, u, req.Text, model, sendID, r.Header.Get("Byre-Client"), images...) + if err != nil { + writeAgentError(w, err) + return + } + writeJSON(w, http.StatusCreated, task) +} + func (s *Server) ListSessions(w http.ResponseWriter, r *http.Request, taskID string) { _, err := s.store.GetTask(r.Context(), taskID) if err != nil { diff --git a/internal/store/store.go b/internal/store/store.go index 976e9c3..16368ce 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -958,8 +958,8 @@ func (s *Store) TranscriptEvents(ctx context.Context, taskID string, after int64 cut := int64(0) err = s.db.QueryRowContext(ctx, ` SELECT coalesce(max(seq), 0) FROM events - WHERE task_id = ? AND kind = 'snapshot.created' AND json_extract(payload, '$.n') = ? - `, from, at).Scan(&cut) + WHERE task_id = ? AND (? = 0 OR kind = 'snapshot.created' AND json_extract(payload, '$.n') = ?) + `, from, at, at).Scan(&cut) if err != nil { return nil, err } @@ -1750,6 +1750,8 @@ func scanTask(row scanner) (api.Task, error) { } if forkedFrom != "" { t.ForkedFrom = &forkedFrom + } + if forkedAt != 0 { t.ForkedAt = &forkedAt } if mergeQueuedAt != "" { diff --git a/mac/Sources/Byre/Chat.swift b/mac/Sources/Byre/Chat.swift index 1f1ce74..9e1c2fc 100644 --- a/mac/Sources/Byre/Chat.swift +++ b/mac/Sources/Byre/Chat.swift @@ -134,7 +134,17 @@ final class ChatModel { member != nil } + var closed: Bool { + guard let taskId, let task = store.findTask(taskId) else { + return false + } + return task.status != .active + } + var placeholder: String { + if closed { + return "Continue in a new task, started from main, whose agent picks up this conversation. Paste or drop images to attach them." + } if team { return "Post to the team's board; every agent of the team gets it." } @@ -468,6 +478,14 @@ final class ChatModel { case .lead: _ = try await api.messageLead(body: .json(.init(text: text, images: images, model: sessionId != nil ? model : firstModel, sendId: sendID))).accepted case .task(let id): + if closed { + guard let sessionId else { + throw ApiError(status: 0, message: "This task has no agent conversation to continue.") + } + let task = try await api.continueSession(path: .init(sessionId: sessionId), body: .json(.init(text: text, images: images, model: team ? nil : model, sendId: sendID))).created.body.json + store.focusTask(task.id) + return + } if team { if images != nil { throw ApiError(status: 0, message: "The board takes text only; drop the images to post.") diff --git a/mac/Sources/Byre/Composer.swift b/mac/Sources/Byre/Composer.swift index 2371670..5bb4288 100644 --- a/mac/Sources/Byre/Composer.swift +++ b/mac/Sources/Byre/Composer.swift @@ -482,7 +482,7 @@ struct ComposerView: View { } private func modelState() -> ModelState { - let live = chat.liveSession + let live = chat.closed ? chat.session : chat.liveSession let current = live.map { $0.model.isEmpty ? chat.builder.context[$0.id]?.model ?? "" : $0.model } ?? "" let offered = live.map { s in models.filter { vendorOf($0) == s.vendor.rawValue } } ?? models let options = !current.isEmpty && !offered.contains(current) ? [current] + offered : offered @@ -632,12 +632,13 @@ struct ComposerView: View { .buttonStyle(WebButtonStyle(danger: true)) .disabled(!running) .fixedSize() - Button("Send") { + Button(chat.closed ? "Continue" : "Send") { submit(modelState()) } .buttonStyle(WebButtonStyle()) .disabled(!shown) .fixedSize() + .help(chat.closed ? "Start a new task from main whose agent continues this conversation with your message" : "Send the message") } } @@ -668,7 +669,7 @@ struct ComposerView: View { text = "" let sent = drafts.startSend(draftKey, value, imgs.count) let sendID = newID("snd") - let cancel = chat.team ? { true } : chat.builder.showPending(value, imgs, sendID) + let cancel = chat.team || chat.closed ? { true } : chat.builder.showPending(value, imgs, sendID) let sessionId = m.live?.id Task { var ids: [String]? = nil @@ -686,7 +687,7 @@ struct ComposerView: View { return } catch { let refused = (rootError(error) as? ApiError).map { $0.status < 500 } ?? false - if chat.team || refused { + if (chat.team && !chat.closed) || refused { guard cancel() else { log.notice("send failed after the server confirmed it: \(errorText(error), privacy: .public)") drafts.endSend(sent, true) @@ -698,7 +699,7 @@ struct ComposerView: View { overlays.showAlert(errorText(error)) return } - guard chat.builder.unconfirmed(sendID) else { + guard chat.closed || chat.builder.unconfirmed(sendID) else { drafts.endSend(sent, true) return } diff --git a/mac/Sources/Byre/TranscriptBuilder.swift b/mac/Sources/Byre/TranscriptBuilder.swift index c983531..73f4e67 100644 --- a/mac/Sources/Byre/TranscriptBuilder.swift +++ b/mac/Sources/Byre/TranscriptBuilder.swift @@ -536,11 +536,16 @@ final class TranscriptBuilder { continue } if ev.kind == "task.forked", let fork = str(p, "fork") { - if let row = ctx.snapshots[snapKey(int(p, "forked_at") ?? 0)] { + let at = int(p, "forked_at") ?? 0 + if at == 0 { + put(Row(.note(Note(parts: [.text("\(ev.actor) continued this task as "), .task(fork)], when: ev.createdAt)), taskId: rowTask)) + continue + } + if let row = ctx.snapshots[snapKey(at)] { row.forks.append(fork) continue } - put(Row(.note(Note(parts: [.text("\(ev.actor) forked snapshot #\(jsString(p["forked_at"])) as "), .task(fork)], when: ev.createdAt)), taskId: rowTask)) + put(Row(.note(Note(parts: [.text("\(ev.actor) forked snapshot #\(at) as "), .task(fork)], when: ev.createdAt)), taskId: rowTask)) continue } if ev.kind == "review.started" || ev.kind == "review.finished" || ev.kind == "review.finding" { @@ -913,6 +918,12 @@ final class TranscriptBuilder { return note([.text("\(jsString(p["error"])) (\(jsString(p["vendor"])) \(limit["rateLimitType"].map { jsString($0) } ?? "") limit resets \(resets))")], .error) case "task.created": + if let from = str(p, "forked_from"), p["forked_at"] == nil { + if let task = rowTask, task != taskId { + return note([.text("\(ev.actor) continued "), .task(from), .text(" as "), .task(task), .text(" here")]) + } + return note([.text("\(ev.actor) continued "), .task(from), .text(" here in a new task, started from main; everything above happened in that task, and its agent continues that conversation")]) + } if let from = str(p, "forked_from"), let task = rowTask, task != taskId { return note([.text("\(ev.actor) forked "), .task(task), .text(" here from "), .task(from), .text(" at snapshot #\(jsString(p["forked_at"]))")]) }