From 3f06d7dadb83d78f0913b1c1c9a9297826e107b1 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 22 Mar 2026 19:39:33 +0200 Subject: Scaffold internal/askcli package: dispatch, taskexec, taskexport, formatter --- internal/askcli/dispatch.go | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 internal/askcli/dispatch.go (limited to 'internal/askcli/dispatch.go') diff --git a/internal/askcli/dispatch.go b/internal/askcli/dispatch.go new file mode 100644 index 0000000..b764618 --- /dev/null +++ b/internal/askcli/dispatch.go @@ -0,0 +1,67 @@ +package askcli + +import ( + "context" + "fmt" + "io" +) + +type Runner interface { + Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) +} + +type Dispatcher struct { + runner Runner +} + +func NewDispatcher(runner Runner) *Dispatcher { + if runner == nil { + e := NewExecutor("ask") + runner = &e + } + return &Dispatcher{runner: runner} +} + +func (d Dispatcher) Dispatch(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + if len(args) == 0 { + return d.help(stdout) + } + subcommand := args[0] + switch subcommand { + case "add", "list", "info", "annotate", "start", "stop", "done", + "priority", "tag", "dep", "urgency", "modify", "denotate", "delete", "export": + return d.runner.Run(ctx, args, stdin, stdout, stderr) + default: + return d.unknownCommand(stderr, subcommand) + } +} + +func (d Dispatcher) help(w io.Writer) (int, error) { + io.WriteString(w, "ask - task management CLI\n") + io.WriteString(w, "\nSubcommands:\n") + io.WriteString(w, " ask add \"description\" Create a new task\n") + io.WriteString(w, " ask list [filters] List tasks (UUID-only output)\n") + io.WriteString(w, " ask info Show task details\n") + io.WriteString(w, " ask annotate \"note\" Add annotation to task\n") + io.WriteString(w, " ask start Start working on task\n") + io.WriteString(w, " ask stop Stop working on task\n") + io.WriteString(w, " ask done Mark task complete\n") + io.WriteString(w, " ask priority

Set priority (H/M/L)\n") + io.WriteString(w, " ask tag +/- Add or remove tag\n") + io.WriteString(w, " ask dep add Add dependency\n") + io.WriteString(w, " ask dep rm Remove dependency\n") + io.WriteString(w, " ask dep list List dependencies\n") + io.WriteString(w, " ask urgency List tasks sorted by urgency\n") + io.WriteString(w, " ask modify Modify task fields\n") + io.WriteString(w, " ask denotate \"text\" Remove annotation\n") + io.WriteString(w, " ask delete Delete task\n") + io.WriteString(w, " ask export Raw JSON export\n") + io.WriteString(w, "\nFilters:\n") + io.WriteString(w, " +READY +BLOCKED + started limit:N sort:priority-,urgency-\n") + return 0, nil +} + +func (d Dispatcher) unknownCommand(w io.Writer, subcommand string) (int, error) { + fmt.Fprintf(w, "ask: unknown subcommand %q\n", subcommand) + return 1, nil +} -- cgit v1.2.3