Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

215 lines
6.6 KiB
Go

package api
import (
"net/http"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
tuttitypes "github.com/tutti-os/tutti/services/tuttid/types"
)
func registerIssueRoutes(mux *http.ServeMux, wrapper *tuttigenerated.ServerInterfaceWrapper) {
registerTuttiModeExecutionRoutes(mux, wrapper)
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.ListWorkspaceIssues(w, r)
case http.MethodPost:
wrapper.CreateWorkspaceIssue(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/from-plan", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.CreateWorkspaceIssueFromPlan(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/auto-token-budget-estimate", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.EstimateWorkspaceIssueAutoTokenBudget(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issue-references/search", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.SearchWorkspaceIssueReferences(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issue-topics", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.ListWorkspaceIssueTopics(w, r)
case http.MethodPost:
wrapper.CreateWorkspaceIssueTopic(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issue-topics/{topicID}", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodPatch:
wrapper.UpdateWorkspaceIssueTopic(w, r)
case http.MethodDelete:
wrapper.DeleteWorkspaceIssueTopic(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.GetWorkspaceIssueDetail(w, r)
case http.MethodPatch:
wrapper.UpdateWorkspaceIssue(w, r)
case http.MethodDelete:
wrapper.DeleteWorkspaceIssue(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/context-refs", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.AddWorkspaceIssueContextRefs(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/context-refs/{contextRefID}", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodDelete {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.RemoveWorkspaceIssueContextRef(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/context-refs/{contextRefID}/attachment", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.ReadWorkspaceIssueAttachment(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/cancel-execution", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.CancelWorkspaceIssueExecution(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/runs", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.ListWorkspaceIssueRuns(w, r)
case http.MethodPost:
wrapper.CreateWorkspaceIssueRun(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/run-launches", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.StartWorkspaceIssueRun(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/runs/{runID}", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.GetWorkspaceIssueRun(w, r)
case http.MethodPatch:
wrapper.CompleteWorkspaceIssueRun(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.ListWorkspaceIssueTasks(w, r)
case http.MethodPost:
wrapper.CreateWorkspaceIssueTask(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/batch-create", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.CreateWorkspaceIssueTasks(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/{taskID}", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.GetWorkspaceIssueTaskDetail(w, r)
case http.MethodPatch:
wrapper.UpdateWorkspaceIssueTask(w, r)
case http.MethodDelete:
wrapper.DeleteWorkspaceIssueTask(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/{taskID}/context-refs", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.AddWorkspaceIssueTaskContextRefs(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/{taskID}/context-refs/{contextRefID}", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodDelete {
tuttitypes.WriteMethodNotAllowed(w)
return
}
wrapper.RemoveWorkspaceIssueTaskContextRef(w, r)
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/{taskID}/runs", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.ListWorkspaceIssueTaskRuns(w, r)
case http.MethodPost:
wrapper.CreateWorkspaceIssueTaskRun(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
mux.HandleFunc("/v1/workspaces/{workspaceID}/issues/{issueID}/tasks/{taskID}/runs/{runID}", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
wrapper.GetWorkspaceIssueTaskRun(w, r)
case http.MethodPatch:
wrapper.CompleteWorkspaceIssueTaskRun(w, r)
default:
tuttitypes.WriteMethodNotAllowed(w)
}
})
}