Add server-side workflows with YAML files, task freeze and lead tools

This commit is contained in:
Ian Gulliver
2026-10-15 21:17:58 -07:00
parent 2f02f5ac3c
commit 2ce10a6c65
19 changed files with 1293 additions and 199 deletions
+368 -159
View File
@@ -324,6 +324,24 @@ func (e SnapshotTrigger) Valid() bool {
}
}
// Defines values for StageVendor.
const (
StageVendorClaude StageVendor = "claude"
StageVendorCodex StageVendor = "codex"
)
// Valid indicates whether the value is a known member of the StageVendor enum.
func (e StageVendor) Valid() bool {
switch e {
case StageVendorClaude:
return true
case StageVendorCodex:
return true
default:
return false
}
}
// Defines values for TaskStatus.
const (
TaskStatusActive TaskStatus = "active"
@@ -810,6 +828,23 @@ type Snapshot struct {
// SnapshotTrigger turn_end: after byre's end-of-turn commit. message (the agent wrote text after one or more tool calls), tool_call, ask_human and timer appear only on snapshots taken by earlier builds.
type SnapshotTrigger string
// Stage defines model for Stage.
type Stage struct {
Model string `json:"model"`
// Name One line of 1 to 100 characters, unique within the workflow.
Name string `json:"name"`
// Prompt The stage agent's instructions.
Prompt string `json:"prompt"`
// Vendor Must be the vendor that runs model (gpt-* models run on Codex, every other model on Claude Code).
Vendor StageVendor `json:"vendor"`
}
// StageVendor Must be the vendor that runs model (gpt-* models run on Codex, every other model on Claude Code).
type StageVendor string
// Status defines model for Status.
type Status struct {
ActiveTasks int `json:"active_tasks"`
@@ -875,7 +910,10 @@ type Task struct {
Title string `json:"title"`
// TodoItem The title of the TODO.md item the task was started from; absent for other tasks.
TodoItem *string `json:"todo_item,omitempty"`
TodoItem *string `json:"todo_item,omitempty"`
// Workflow The name of the workflow the task froze at creation (getTaskWorkflow has its copy); absent for a task without one.
Workflow *string `json:"workflow,omitempty"`
WorktreePath string `json:"worktree_path"`
}
@@ -895,11 +933,21 @@ type TaskChanges struct {
// TaskCreate defines model for TaskCreate.
type TaskCreate struct {
Title string `json:"title"`
// Workflow The name of a workflow for the task to freeze: it keeps a copy of the workflow's definition as it is now.
Workflow *string `json:"workflow,omitempty"`
}
// TaskTab defines model for TaskTab.
type TaskTab string
// TaskWorkflow The workflow a task froze when it was created, as it was then.
type TaskWorkflow struct {
// Definition The WorkflowDefinition as YAML.
Definition string `json:"definition"`
Name string `json:"name"`
}
// TerminalSize defines model for TerminalSize.
type TerminalSize struct {
Cols int `json:"cols"`
@@ -971,6 +1019,18 @@ type UserUpdate struct {
GitName string `json:"git_name"`
}
// WorkflowDefinition A workflow's file, which holds everything but its name: a sequence of stages run in order. Sent and returned as YAML.
type WorkflowDefinition struct {
Description string `json:"description,omitempty"`
Stages []Stage `json:"stages"`
}
// WorkflowSummary defines model for WorkflowSummary.
type WorkflowSummary struct {
Description string `json:"description"`
Name string `json:"name"`
}
// Zombie defines model for Zombie.
type Zombie struct {
Detail string `json:"detail"`
@@ -1226,6 +1286,21 @@ type ServerInterface interface {
// (GET /api/tasks/{taskId}/unmerged)
GetUnmerged(w http.ResponseWriter, r *http.Request, taskId string)
// (GET /api/tasks/{taskId}/workflow)
GetTaskWorkflow(w http.ResponseWriter, r *http.Request, taskId string)
// (GET /api/workflows)
ListWorkflows(w http.ResponseWriter, r *http.Request)
// (DELETE /api/workflows/{name})
DeleteWorkflow(w http.ResponseWriter, r *http.Request, name string)
// (GET /api/workflows/{name})
GetWorkflow(w http.ResponseWriter, r *http.Request, name string)
// (PUT /api/workflows/{name})
PutWorkflow(w http.ResponseWriter, r *http.Request, name string)
}
// ServerInterfaceWrapper converts contexts to parameters.
@@ -2550,6 +2625,124 @@ func (siw *ServerInterfaceWrapper) GetUnmerged(w http.ResponseWriter, r *http.Re
handler.ServeHTTP(w, r)
}
// GetTaskWorkflow operation middleware
func (siw *ServerInterfaceWrapper) GetTaskWorkflow(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
}
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.GetTaskWorkflow(w, r, taskId)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r)
}
// ListWorkflows operation middleware
func (siw *ServerInterfaceWrapper) ListWorkflows(w http.ResponseWriter, r *http.Request) {
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.ListWorkflows(w, r)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r)
}
// DeleteWorkflow operation middleware
func (siw *ServerInterfaceWrapper) DeleteWorkflow(w http.ResponseWriter, r *http.Request) {
var err error
_ = err
// ------------- Path parameter "name" -------------
var name string
err = runtime.BindStyledParameterWithOptions("simple", "name", r.PathValue("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true})
if err != nil {
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "name", Err: err})
return
}
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.DeleteWorkflow(w, r, name)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r)
}
// GetWorkflow operation middleware
func (siw *ServerInterfaceWrapper) GetWorkflow(w http.ResponseWriter, r *http.Request) {
var err error
_ = err
// ------------- Path parameter "name" -------------
var name string
err = runtime.BindStyledParameterWithOptions("simple", "name", r.PathValue("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true})
if err != nil {
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "name", Err: err})
return
}
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.GetWorkflow(w, r, name)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r)
}
// PutWorkflow operation middleware
func (siw *ServerInterfaceWrapper) PutWorkflow(w http.ResponseWriter, r *http.Request) {
var err error
_ = err
// ------------- Path parameter "name" -------------
var name string
err = runtime.BindStyledParameterWithOptions("simple", "name", r.PathValue("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true})
if err != nil {
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "name", Err: err})
return
}
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
siw.Handler.PutWorkflow(w, r, name)
}))
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
handler.ServeHTTP(w, r)
}
type UnescapedCookieParamError struct {
ParamName string
Err error
@@ -2686,6 +2879,7 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/projects/{projectId}/todo", wrapper.GetTodo)
m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/projects/{projectId}/todo/tasks", wrapper.StartTodoItem)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}", wrapper.GetTask)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/workflow", wrapper.GetTaskWorkflow)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/unmerged", wrapper.GetUnmerged)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/tasks/{taskId}/co-authors", wrapper.GetCoAuthors)
m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/tasks/{taskId}/merge", wrapper.MergeTask)
@@ -2715,6 +2909,10 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H
m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/inbox/responses", wrapper.RespondInbox)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/events", wrapper.StreamEvents)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/admin/status", wrapper.GetStatus)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/workflows", wrapper.ListWorkflows)
m.HandleFunc(http.MethodDelete+" "+options.BaseURL+"/api/workflows/{name}", wrapper.DeleteWorkflow)
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/workflows/{name}", wrapper.GetWorkflow)
m.HandleFunc(http.MethodPut+" "+options.BaseURL+"/api/workflows/{name}", wrapper.PutWorkflow)
return m
}
@@ -2724,164 +2922,175 @@ 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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",
"jUKUxys/usMz9laP7jHkOxU3/PTp/wUAAP//",
}
// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,