Add ask_human and the inbox with batched responses and delivery to agents
This commit is contained in:
+408
-28
@@ -72,6 +72,141 @@ func (e AgentSessionVendor) Valid() bool {
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for AttachmentKind.
|
||||
const (
|
||||
AttachmentKindDiagram AttachmentKind = "diagram"
|
||||
AttachmentKindDiff AttachmentKind = "diff"
|
||||
AttachmentKindFile AttachmentKind = "file"
|
||||
AttachmentKindImage AttachmentKind = "image"
|
||||
AttachmentKindSnapshot AttachmentKind = "snapshot"
|
||||
AttachmentKindTask AttachmentKind = "task"
|
||||
AttachmentKindUrl AttachmentKind = "url"
|
||||
)
|
||||
|
||||
// Valid indicates whether the value is a known member of the AttachmentKind enum.
|
||||
func (e AttachmentKind) Valid() bool {
|
||||
switch e {
|
||||
case AttachmentKindDiagram:
|
||||
return true
|
||||
case AttachmentKindDiff:
|
||||
return true
|
||||
case AttachmentKindFile:
|
||||
return true
|
||||
case AttachmentKindImage:
|
||||
return true
|
||||
case AttachmentKindSnapshot:
|
||||
return true
|
||||
case AttachmentKindTask:
|
||||
return true
|
||||
case AttachmentKindUrl:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for InboxItemKind.
|
||||
const (
|
||||
InboxItemKindQuestion InboxItemKind = "question"
|
||||
InboxItemKindReport InboxItemKind = "report"
|
||||
InboxItemKindSessionError InboxItemKind = "session_error"
|
||||
)
|
||||
|
||||
// Valid indicates whether the value is a known member of the InboxItemKind enum.
|
||||
func (e InboxItemKind) Valid() bool {
|
||||
switch e {
|
||||
case InboxItemKindQuestion:
|
||||
return true
|
||||
case InboxItemKindReport:
|
||||
return true
|
||||
case InboxItemKindSessionError:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for InboxItemPriority.
|
||||
const (
|
||||
Blocked InboxItemPriority = "blocked"
|
||||
Fyi InboxItemPriority = "fyi"
|
||||
Gate InboxItemPriority = "gate"
|
||||
Review InboxItemPriority = "review"
|
||||
)
|
||||
|
||||
// Valid indicates whether the value is a known member of the InboxItemPriority enum.
|
||||
func (e InboxItemPriority) Valid() bool {
|
||||
switch e {
|
||||
case Blocked:
|
||||
return true
|
||||
case Fyi:
|
||||
return true
|
||||
case Gate:
|
||||
return true
|
||||
case Review:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for InboxResponseType.
|
||||
const (
|
||||
InboxResponseTypeDismiss InboxResponseType = "dismiss"
|
||||
InboxResponseTypeFreeForm InboxResponseType = "free_form"
|
||||
InboxResponseTypeOption InboxResponseType = "option"
|
||||
InboxResponseTypeQuestion InboxResponseType = "question"
|
||||
InboxResponseTypeRedirect InboxResponseType = "redirect"
|
||||
InboxResponseTypeSnooze InboxResponseType = "snooze"
|
||||
)
|
||||
|
||||
// Valid indicates whether the value is a known member of the InboxResponseType enum.
|
||||
func (e InboxResponseType) Valid() bool {
|
||||
switch e {
|
||||
case InboxResponseTypeDismiss:
|
||||
return true
|
||||
case InboxResponseTypeFreeForm:
|
||||
return true
|
||||
case InboxResponseTypeOption:
|
||||
return true
|
||||
case InboxResponseTypeQuestion:
|
||||
return true
|
||||
case InboxResponseTypeRedirect:
|
||||
return true
|
||||
case InboxResponseTypeSnooze:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for InboxState.
|
||||
const (
|
||||
Answered InboxState = "answered"
|
||||
Dismissed InboxState = "dismissed"
|
||||
Open InboxState = "open"
|
||||
Redirected InboxState = "redirected"
|
||||
Superseded InboxState = "superseded"
|
||||
)
|
||||
|
||||
// Valid indicates whether the value is a known member of the InboxState enum.
|
||||
func (e InboxState) Valid() bool {
|
||||
switch e {
|
||||
case Answered:
|
||||
return true
|
||||
case Dismissed:
|
||||
return true
|
||||
case Open:
|
||||
return true
|
||||
case Redirected:
|
||||
return true
|
||||
case Superseded:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Defines values for TaskStatus.
|
||||
const (
|
||||
TaskStatusActive TaskStatus = "active"
|
||||
@@ -114,6 +249,32 @@ type AgentSessionState string
|
||||
// AgentSessionVendor defines model for AgentSession.Vendor.
|
||||
type AgentSessionVendor string
|
||||
|
||||
// Attachment defines model for Attachment.
|
||||
type Attachment struct {
|
||||
Caption *string `json:"caption,omitempty"`
|
||||
EndLine *int `json:"end_line,omitempty"`
|
||||
|
||||
// Image image: data URL.
|
||||
Image *string `json:"image,omitempty"`
|
||||
Kind AttachmentKind `json:"kind"`
|
||||
|
||||
// Mermaid diagram: Mermaid source.
|
||||
Mermaid *string `json:"mermaid,omitempty"`
|
||||
|
||||
// Path file: repo-relative path.
|
||||
Path *string `json:"path,omitempty"`
|
||||
|
||||
// Ref diff: git revision range.
|
||||
Ref *string `json:"ref,omitempty"`
|
||||
SnapshotId *string `json:"snapshot_id,omitempty"`
|
||||
StartLine *int `json:"start_line,omitempty"`
|
||||
TaskId *string `json:"task_id,omitempty"`
|
||||
Url *string `json:"url,omitempty"`
|
||||
}
|
||||
|
||||
// AttachmentKind defines model for Attachment.Kind.
|
||||
type AttachmentKind string
|
||||
|
||||
// Error defines model for Error.
|
||||
type Error struct {
|
||||
Message string `json:"message"`
|
||||
@@ -131,6 +292,74 @@ type Event struct {
|
||||
TaskId *string `json:"task_id,omitempty"`
|
||||
}
|
||||
|
||||
// InboxItem defines model for InboxItem.
|
||||
type InboxItem struct {
|
||||
AgentSessionId string `json:"agent_session_id"`
|
||||
Blocking bool `json:"blocking"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
Id string `json:"id"`
|
||||
Kind InboxItemKind `json:"kind"`
|
||||
|
||||
// Payload question: question, why_blocked, options, recommended_option, attachments. report: done, open_questions, next_steps, risks, deviations. session_error: error.
|
||||
Payload map[string]interface{} `json:"payload"`
|
||||
Priority InboxItemPriority `json:"priority"`
|
||||
ProjectId string `json:"project_id"`
|
||||
ResolvedAt *time.Time `json:"resolved_at,omitempty"`
|
||||
ResolvedBy *string `json:"resolved_by,omitempty"`
|
||||
Responses []InboxResponse `json:"responses"`
|
||||
SnoozedUntil *time.Time `json:"snoozed_until,omitempty"`
|
||||
State InboxState `json:"state"`
|
||||
TaskId string `json:"task_id"`
|
||||
ThreadId string `json:"thread_id"`
|
||||
}
|
||||
|
||||
// InboxItemKind defines model for InboxItem.Kind.
|
||||
type InboxItemKind string
|
||||
|
||||
// InboxItemPriority defines model for InboxItem.Priority.
|
||||
type InboxItemPriority string
|
||||
|
||||
// InboxRespond defines model for InboxRespond.
|
||||
type InboxRespond struct {
|
||||
Responses []InboxResponseCreate `json:"responses"`
|
||||
}
|
||||
|
||||
// InboxResponse defines model for InboxResponse.
|
||||
type InboxResponse struct {
|
||||
Attachments []Attachment `json:"attachments"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
DeliveredAt *time.Time `json:"delivered_at,omitempty"`
|
||||
Id string `json:"id"`
|
||||
ItemId string `json:"item_id"`
|
||||
Option *string `json:"option,omitempty"`
|
||||
SnoozeUntil *time.Time `json:"snooze_until,omitempty"`
|
||||
Text *string `json:"text,omitempty"`
|
||||
Type InboxResponseType `json:"type"`
|
||||
User string `json:"user"`
|
||||
}
|
||||
|
||||
// InboxResponseCreate defines model for InboxResponseCreate.
|
||||
type InboxResponseCreate struct {
|
||||
Attachments *[]Attachment `json:"attachments,omitempty"`
|
||||
ItemId string `json:"item_id"`
|
||||
|
||||
// Option option: one of the question's options.
|
||||
Option *string `json:"option,omitempty"`
|
||||
|
||||
// SnoozeUntil snooze: when the item reappears.
|
||||
SnoozeUntil *time.Time `json:"snooze_until,omitempty"`
|
||||
|
||||
// Text Required for free_form, redirect, question; an optional note on option.
|
||||
Text *string `json:"text,omitempty"`
|
||||
Type InboxResponseType `json:"type"`
|
||||
}
|
||||
|
||||
// InboxResponseType defines model for InboxResponseType.
|
||||
type InboxResponseType string
|
||||
|
||||
// InboxState defines model for InboxState.
|
||||
type InboxState string
|
||||
|
||||
// MessageCreate defines model for MessageCreate.
|
||||
type MessageCreate struct {
|
||||
Text string `json:"text"`
|
||||
@@ -214,6 +443,17 @@ type StreamEventsParams struct {
|
||||
LastEventID *int64 `json:"Last-Event-ID,omitempty"`
|
||||
}
|
||||
|
||||
// ListInboxParams defines parameters for ListInbox.
|
||||
type ListInboxParams struct {
|
||||
ProjectId *string `form:"project_id,omitempty" json:"project_id,omitempty"`
|
||||
TaskId *string `form:"task_id,omitempty" json:"task_id,omitempty"`
|
||||
State *InboxState `form:"state,omitempty" json:"state,omitempty"`
|
||||
IncludeSnoozed *bool `form:"include_snoozed,omitempty" json:"include_snoozed,omitempty"`
|
||||
}
|
||||
|
||||
// RespondInboxJSONRequestBody defines body for RespondInbox for application/json ContentType.
|
||||
type RespondInboxJSONRequestBody = InboxRespond
|
||||
|
||||
// UpdateMeJSONRequestBody defines body for UpdateMe for application/json ContentType.
|
||||
type UpdateMeJSONRequestBody = UserUpdate
|
||||
|
||||
@@ -238,6 +478,15 @@ type ServerInterface interface {
|
||||
// (GET /api/events)
|
||||
StreamEvents(w http.ResponseWriter, r *http.Request, params StreamEventsParams)
|
||||
|
||||
// (GET /api/inbox)
|
||||
ListInbox(w http.ResponseWriter, r *http.Request, params ListInboxParams)
|
||||
|
||||
// (POST /api/inbox/responses)
|
||||
RespondInbox(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
// (GET /api/inbox/{itemId})
|
||||
GetInboxItem(w http.ResponseWriter, r *http.Request, itemId string)
|
||||
|
||||
// (GET /api/me)
|
||||
GetMe(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
@@ -358,6 +607,118 @@ func (siw *ServerInterfaceWrapper) StreamEvents(w http.ResponseWriter, r *http.R
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// ListInbox operation middleware
|
||||
func (siw *ServerInterfaceWrapper) ListInbox(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var err error
|
||||
_ = err
|
||||
|
||||
// Parameter object where we will unmarshal all parameters from the context
|
||||
var params ListInboxParams
|
||||
|
||||
// ------------- Optional query parameter "project_id" -------------
|
||||
|
||||
err = runtime.BindQueryParameterWithOptions("form", true, false, "project_id", r.URL.Query(), ¶ms.ProjectId, runtime.BindQueryParameterOptions{Type: "string", Format: ""})
|
||||
if err != nil {
|
||||
var requiredError *runtime.RequiredParameterError
|
||||
if errors.As(err, &requiredError) {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "project_id"})
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "project_id", Err: err})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "task_id" -------------
|
||||
|
||||
err = runtime.BindQueryParameterWithOptions("form", true, false, "task_id", r.URL.Query(), ¶ms.TaskId, runtime.BindQueryParameterOptions{Type: "string", Format: ""})
|
||||
if err != nil {
|
||||
var requiredError *runtime.RequiredParameterError
|
||||
if errors.As(err, &requiredError) {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "task_id"})
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "task_id", Err: err})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "state" -------------
|
||||
|
||||
err = runtime.BindQueryParameterWithOptions("form", true, false, "state", r.URL.Query(), ¶ms.State, runtime.BindQueryParameterOptions{Type: "string", Format: ""})
|
||||
if err != nil {
|
||||
var requiredError *runtime.RequiredParameterError
|
||||
if errors.As(err, &requiredError) {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "state"})
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "state", Err: err})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "include_snoozed" -------------
|
||||
|
||||
err = runtime.BindQueryParameterWithOptions("form", true, false, "include_snoozed", r.URL.Query(), ¶ms.IncludeSnoozed, runtime.BindQueryParameterOptions{Type: "boolean", Format: ""})
|
||||
if err != nil {
|
||||
var requiredError *runtime.RequiredParameterError
|
||||
if errors.As(err, &requiredError) {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "include_snoozed"})
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "include_snoozed", Err: err})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.ListInbox(w, r, params)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// RespondInbox operation middleware
|
||||
func (siw *ServerInterfaceWrapper) RespondInbox(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.RespondInbox(w, r)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// GetInboxItem operation middleware
|
||||
func (siw *ServerInterfaceWrapper) GetInboxItem(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var err error
|
||||
_ = err
|
||||
|
||||
// ------------- Path parameter "itemId" -------------
|
||||
var itemId string
|
||||
|
||||
err = runtime.BindStyledParameterWithOptions("simple", "itemId", r.PathValue("itemId"), &itemId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "", ValueIsUnescaped: true})
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "itemId", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.GetInboxItem(w, r, itemId)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// GetMe operation middleware
|
||||
func (siw *ServerInterfaceWrapper) GetMe(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -808,6 +1169,9 @@ func HandlerWithOptions(si ServerInterface, options StdHTTPServerOptions) http.H
|
||||
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/sessions/{sessionId}", wrapper.GetSession)
|
||||
m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/messages", wrapper.SendMessage)
|
||||
m.HandleFunc(http.MethodPost+" "+options.BaseURL+"/api/sessions/{sessionId}/interrupt", wrapper.InterruptSession)
|
||||
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/inbox", wrapper.ListInbox)
|
||||
m.HandleFunc(http.MethodGet+" "+options.BaseURL+"/api/inbox/{itemId}", wrapper.GetInboxItem)
|
||||
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)
|
||||
|
||||
@@ -819,34 +1183,50 @@ 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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",
|
||||
"02eeHPYpZ7Yv6HfHP0wlW6//DgAA//8=",
|
||||
"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",
|
||||
"ncOYdGbqgm51/M1kst3ufwEAAP//",
|
||||
}
|
||||
|
||||
// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,
|
||||
|
||||
Reference in New Issue
Block a user