feat: implement meeting, support, propose, and monitor command groups
- Added meeting.go: list, get, create, update, attend, delete - Added support.go: list, get, create, update, take, transition, delete - Added propose.go: list, get, create, update, accept, reject, reopen - Added monitor.go: overview, server list/get/create/delete, api-key generate/revoke - Updated main.go with dispatch handlers for all four new groups - All commands follow existing patterns (token resolution, --json, table output) Covers TODO items 1.12, 1.13, 1.14, 1.15 from hf-cross-project-todo.md
This commit is contained in:
236
cmd/hf/main.go
236
cmd/hf/main.go
@@ -158,6 +158,18 @@ func handleGroup(group help.Group, args []string) {
|
||||
case "task":
|
||||
handleTaskCommand(sub.Name, remaining)
|
||||
return
|
||||
case "meeting":
|
||||
handleMeetingCommand(sub.Name, remaining)
|
||||
return
|
||||
case "support":
|
||||
handleSupportCommand(sub.Name, remaining)
|
||||
return
|
||||
case "propose":
|
||||
handleProposeCommand(sub.Name, remaining)
|
||||
return
|
||||
case "monitor":
|
||||
handleMonitorCommand(sub.Name, remaining)
|
||||
return
|
||||
}
|
||||
|
||||
output.Errorf("hf %s %s is recognized but not implemented yet", group.Name, sub.Name)
|
||||
@@ -540,3 +552,227 @@ func handleProjectCommand(subCmd string, args []string) {
|
||||
output.Errorf("hf project %s is not implemented yet", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleMeetingCommand(subCmd string, args []string) {
|
||||
tokenFlag := ""
|
||||
var filtered []string
|
||||
for i := 0; i < len(args); i++ {
|
||||
switch args[i] {
|
||||
case "--token":
|
||||
if i+1 < len(args) {
|
||||
i++
|
||||
tokenFlag = args[i]
|
||||
}
|
||||
default:
|
||||
filtered = append(filtered, args[i])
|
||||
}
|
||||
}
|
||||
|
||||
switch subCmd {
|
||||
case "list":
|
||||
commands.RunMeetingList(filtered, tokenFlag)
|
||||
case "get":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf meeting get <meeting-code>")
|
||||
}
|
||||
commands.RunMeetingGet(filtered[0], tokenFlag)
|
||||
case "create":
|
||||
commands.RunMeetingCreate(filtered, tokenFlag)
|
||||
case "update":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf meeting update <meeting-code> [--title ...] [--desc ...] [--status ...] [--time ...]")
|
||||
}
|
||||
commands.RunMeetingUpdate(filtered[0], filtered[1:], tokenFlag)
|
||||
case "attend":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf meeting attend <meeting-code>")
|
||||
}
|
||||
commands.RunMeetingAttend(filtered[0], tokenFlag)
|
||||
case "delete":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf meeting delete <meeting-code>")
|
||||
}
|
||||
commands.RunMeetingDelete(filtered[0], tokenFlag)
|
||||
default:
|
||||
output.Errorf("hf meeting %s is not implemented yet", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleSupportCommand(subCmd string, args []string) {
|
||||
tokenFlag := ""
|
||||
var filtered []string
|
||||
for i := 0; i < len(args); i++ {
|
||||
switch args[i] {
|
||||
case "--token":
|
||||
if i+1 < len(args) {
|
||||
i++
|
||||
tokenFlag = args[i]
|
||||
}
|
||||
default:
|
||||
filtered = append(filtered, args[i])
|
||||
}
|
||||
}
|
||||
|
||||
switch subCmd {
|
||||
case "list":
|
||||
commands.RunSupportList(filtered, tokenFlag)
|
||||
case "get":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf support get <support-code>")
|
||||
}
|
||||
commands.RunSupportGet(filtered[0], tokenFlag)
|
||||
case "create":
|
||||
commands.RunSupportCreate(filtered, tokenFlag)
|
||||
case "update":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf support update <support-code> [--title ...] [--desc ...] [--status ...] [--priority ...]")
|
||||
}
|
||||
commands.RunSupportUpdate(filtered[0], filtered[1:], tokenFlag)
|
||||
case "take":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf support take <support-code>")
|
||||
}
|
||||
commands.RunSupportTake(filtered[0], tokenFlag)
|
||||
case "transition":
|
||||
if len(filtered) < 2 {
|
||||
output.Error("usage: hf support transition <support-code> <status>")
|
||||
}
|
||||
commands.RunSupportTransition(filtered[0], filtered[1], tokenFlag)
|
||||
case "delete":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf support delete <support-code>")
|
||||
}
|
||||
commands.RunSupportDelete(filtered[0], tokenFlag)
|
||||
default:
|
||||
output.Errorf("hf support %s is not implemented yet", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleProposeCommand(subCmd string, args []string) {
|
||||
tokenFlag := ""
|
||||
var filtered []string
|
||||
for i := 0; i < len(args); i++ {
|
||||
switch args[i] {
|
||||
case "--token":
|
||||
if i+1 < len(args) {
|
||||
i++
|
||||
tokenFlag = args[i]
|
||||
}
|
||||
default:
|
||||
filtered = append(filtered, args[i])
|
||||
}
|
||||
}
|
||||
|
||||
switch subCmd {
|
||||
case "list":
|
||||
commands.RunProposeList(filtered, tokenFlag)
|
||||
case "get":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf propose get <propose-code>")
|
||||
}
|
||||
commands.RunProposeGet(filtered[0], tokenFlag)
|
||||
case "create":
|
||||
commands.RunProposeCreate(filtered, tokenFlag)
|
||||
case "update":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf propose update <propose-code> [--title ...] [--desc ...]")
|
||||
}
|
||||
commands.RunProposeUpdate(filtered[0], filtered[1:], tokenFlag)
|
||||
case "accept":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf propose accept <propose-code> --milestone <milestone-code>")
|
||||
}
|
||||
commands.RunProposeAccept(filtered[0], filtered[1:], tokenFlag)
|
||||
case "reject":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf propose reject <propose-code> [--reason <reason>]")
|
||||
}
|
||||
commands.RunProposeReject(filtered[0], filtered[1:], tokenFlag)
|
||||
case "reopen":
|
||||
if len(filtered) < 1 {
|
||||
output.Error("usage: hf propose reopen <propose-code>")
|
||||
}
|
||||
commands.RunProposeReopen(filtered[0], tokenFlag)
|
||||
default:
|
||||
output.Errorf("hf propose %s is not implemented yet", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleMonitorCommand(subCmd string, args []string) {
|
||||
tokenFlag := ""
|
||||
var filtered []string
|
||||
for i := 0; i < len(args); i++ {
|
||||
switch args[i] {
|
||||
case "--token":
|
||||
if i+1 < len(args) {
|
||||
i++
|
||||
tokenFlag = args[i]
|
||||
}
|
||||
default:
|
||||
filtered = append(filtered, args[i])
|
||||
}
|
||||
}
|
||||
|
||||
switch subCmd {
|
||||
case "overview":
|
||||
commands.RunMonitorOverview(tokenFlag)
|
||||
case "server":
|
||||
handleMonitorServerCommand(filtered, tokenFlag)
|
||||
case "api-key":
|
||||
handleMonitorAPIKeyCommand(filtered, tokenFlag)
|
||||
default:
|
||||
output.Errorf("hf monitor %s is not implemented yet", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleMonitorServerCommand(args []string, tokenFlag string) {
|
||||
if len(args) == 0 {
|
||||
output.Error("usage: hf monitor server <list|get|create|delete> ...")
|
||||
}
|
||||
|
||||
subCmd := args[0]
|
||||
remaining := args[1:]
|
||||
|
||||
switch subCmd {
|
||||
case "list":
|
||||
commands.RunMonitorServerList(tokenFlag)
|
||||
case "get":
|
||||
if len(remaining) < 1 {
|
||||
output.Error("usage: hf monitor server get <identifier>")
|
||||
}
|
||||
commands.RunMonitorServerGet(remaining[0], tokenFlag)
|
||||
case "create":
|
||||
commands.RunMonitorServerCreate(remaining, tokenFlag)
|
||||
case "delete":
|
||||
if len(remaining) < 1 {
|
||||
output.Error("usage: hf monitor server delete <identifier>")
|
||||
}
|
||||
commands.RunMonitorServerDelete(remaining[0], tokenFlag)
|
||||
default:
|
||||
output.Errorf("unknown monitor server subcommand: %s", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
func handleMonitorAPIKeyCommand(args []string, tokenFlag string) {
|
||||
if len(args) == 0 {
|
||||
output.Error("usage: hf monitor api-key <generate|revoke> <identifier>")
|
||||
}
|
||||
|
||||
subCmd := args[0]
|
||||
remaining := args[1:]
|
||||
|
||||
switch subCmd {
|
||||
case "generate":
|
||||
if len(remaining) < 1 {
|
||||
output.Error("usage: hf monitor api-key generate <identifier>")
|
||||
}
|
||||
commands.RunMonitorAPIKeyGenerate(remaining[0], tokenFlag)
|
||||
case "revoke":
|
||||
if len(remaining) < 1 {
|
||||
output.Error("usage: hf monitor api-key revoke <identifier>")
|
||||
}
|
||||
commands.RunMonitorAPIKeyRevoke(remaining[0], tokenFlag)
|
||||
default:
|
||||
output.Errorf("unknown monitor api-key subcommand: %s", subCmd)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user