From 8e351c86502cea78f1f0b3aa19cde7ca702bacab Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 8 Apr 2026 09:58:02 +0300 Subject: Rename task CLI from ask to do - Move cmd/ask to cmd/do; mage BuildDo builds binary named do - Update askcli help text, errors, Fish completion (complete -c do, __do_*) - Task alias cache path: XDG cache hexai/do/task-aliases-v2.json - Refresh README and docs; go install path cmd/do@latest - Remove accidentally tracked cmd/ask build artifact; ignore cmd/do/do and cmd/do/ask Made-with: Cursor --- cmd/ask/ask | Bin 4322459 -> 0 bytes cmd/ask/main.go | 22 ---------------------- cmd/ask/main_test.go | 51 --------------------------------------------------- cmd/do/main.go | 22 ++++++++++++++++++++++ cmd/do/main_test.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 73 deletions(-) delete mode 100755 cmd/ask/ask delete mode 100644 cmd/ask/main.go delete mode 100644 cmd/ask/main_test.go create mode 100644 cmd/do/main.go create mode 100644 cmd/do/main_test.go (limited to 'cmd') diff --git a/cmd/ask/ask b/cmd/ask/ask deleted file mode 100755 index cffc885..0000000 Binary files a/cmd/ask/ask and /dev/null differ diff --git a/cmd/ask/main.go b/cmd/ask/main.go deleted file mode 100644 index afab992..0000000 --- a/cmd/ask/main.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - - "codeberg.org/snonux/hexai/internal/askcli" -) - -func main() { - d := askcli.NewDispatcher(nil) - code, err := d.Dispatch(context.Background(), os.Args[1:], os.Stdin, os.Stdout, os.Stderr) - if err != nil { - // Print the internal error so callers get a useful diagnostic message. - fmt.Fprintln(os.Stderr, err) - os.Exit(code) - } - if code != 0 { - os.Exit(code) - } -} diff --git a/cmd/ask/main_test.go b/cmd/ask/main_test.go deleted file mode 100644 index db6b436..0000000 --- a/cmd/ask/main_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -import ( - "bytes" - "context" - "io" - "testing" - - "codeberg.org/snonux/hexai/internal/askcli" -) - -func TestMain_WiresDispatcher(t *testing.T) { - var gotArgs []string - d := askcli.NewDispatcher(&spyRunner{ - runFn: func(_ context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { - gotArgs = append([]string(nil), args...) - io.WriteString(stdout, `[{"uuid":"test-uuid","description":"Test","status":"pending","priority":"H","tags":["cli"],"urgency":15.0,"depends":[]}]`) - return 0, nil - }, - }) - code, err := d.Dispatch(context.Background(), []string{"list", "limit:1"}, nil, &bytes.Buffer{}, &bytes.Buffer{}) - if err != nil { - t.Fatalf("dispatch returned error: %v", err) - } - if code != 0 { - t.Fatalf("exitCode = %d, want 0", code) - } - if len(gotArgs) < 1 || gotArgs[len(gotArgs)-1] != "export" { - t.Fatalf("args = %v, want [..., export]", gotArgs) - } -} - -func TestMain_ExitsNonZero(t *testing.T) { - d := askcli.NewDispatcher(&spyRunner{ - runFn: func(context.Context, []string, io.Reader, io.Writer, io.Writer) (int, error) { - return 1, nil - }, - }) - code, _ := d.Dispatch(context.Background(), []string{"list"}, nil, &bytes.Buffer{}, &bytes.Buffer{}) - if code == 0 { - t.Fatalf("exitCode = 0, want non-zero") - } -} - -type spyRunner struct { - runFn func(context.Context, []string, io.Reader, io.Writer, io.Writer) (int, error) -} - -func (s *spyRunner) Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { - return s.runFn(ctx, args, stdin, stdout, stderr) -} diff --git a/cmd/do/main.go b/cmd/do/main.go new file mode 100644 index 0000000..afab992 --- /dev/null +++ b/cmd/do/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "context" + "fmt" + "os" + + "codeberg.org/snonux/hexai/internal/askcli" +) + +func main() { + d := askcli.NewDispatcher(nil) + code, err := d.Dispatch(context.Background(), os.Args[1:], os.Stdin, os.Stdout, os.Stderr) + if err != nil { + // Print the internal error so callers get a useful diagnostic message. + fmt.Fprintln(os.Stderr, err) + os.Exit(code) + } + if code != 0 { + os.Exit(code) + } +} diff --git a/cmd/do/main_test.go b/cmd/do/main_test.go new file mode 100644 index 0000000..db6b436 --- /dev/null +++ b/cmd/do/main_test.go @@ -0,0 +1,51 @@ +package main + +import ( + "bytes" + "context" + "io" + "testing" + + "codeberg.org/snonux/hexai/internal/askcli" +) + +func TestMain_WiresDispatcher(t *testing.T) { + var gotArgs []string + d := askcli.NewDispatcher(&spyRunner{ + runFn: func(_ context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + gotArgs = append([]string(nil), args...) + io.WriteString(stdout, `[{"uuid":"test-uuid","description":"Test","status":"pending","priority":"H","tags":["cli"],"urgency":15.0,"depends":[]}]`) + return 0, nil + }, + }) + code, err := d.Dispatch(context.Background(), []string{"list", "limit:1"}, nil, &bytes.Buffer{}, &bytes.Buffer{}) + if err != nil { + t.Fatalf("dispatch returned error: %v", err) + } + if code != 0 { + t.Fatalf("exitCode = %d, want 0", code) + } + if len(gotArgs) < 1 || gotArgs[len(gotArgs)-1] != "export" { + t.Fatalf("args = %v, want [..., export]", gotArgs) + } +} + +func TestMain_ExitsNonZero(t *testing.T) { + d := askcli.NewDispatcher(&spyRunner{ + runFn: func(context.Context, []string, io.Reader, io.Writer, io.Writer) (int, error) { + return 1, nil + }, + }) + code, _ := d.Dispatch(context.Background(), []string{"list"}, nil, &bytes.Buffer{}, &bytes.Buffer{}) + if code == 0 { + t.Fatalf("exitCode = 0, want non-zero") + } +} + +type spyRunner struct { + runFn func(context.Context, []string, io.Reader, io.Writer, io.Writer) (int, error) +} + +func (s *spyRunner) Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) { + return s.runFn(ctx, args, stdin, stdout, stderr) +} -- cgit v1.2.3