Skip to content

Commit 6338d4e

Browse files
feat: release v1.1.5
Implement shell completions, help command, and improved configuration loading. - feat(cli): add `kairo completion` command with support for bash, zsh, fish, and powershell - feat(cli): add `kairo help` command for subcommand discovery - feat(config): implement multi-location config loading (including `~/.kairo/` and `~/.config/kairo/`) - feat(ui): add task ID to detail view metadata - feat(ui): add "NEW TASK" and "EDIT TASK" titles to the editor - feat(ui): add editor shortcut toolbar/hints - feat(ui): improve active tab styling with accent background - feat(ui): make rainbow logo animation toggleable via config - chore: update version to 1.1.5 in VERSION.txt and lua engine - chore: update goreleaser configuration with Homebrew support - docs: update README with installation and completion instructions - docs: update CHANGELOG with 1.1.5 release notes - fixes #9 - fixes #8
1 parent 1ad62a6 commit 6338d4e

15 files changed

Lines changed: 540 additions & 66 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ data/
5858
# Local config (user-specific)
5959
config.toml
6060

61+
# tasks metdata
62+
tasks.json
63+
tasks.md
64+
6165
# =========================
6266
# 🔐 Optional (future-proof)
6367
# =========================

.goreleaser.yaml

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
12
version: 2
23

34
project_name: kairo
@@ -28,24 +29,22 @@ builds:
2829

2930
mod_timestamp: "{{ .CommitTimestamp }}"
3031

31-
ldflags:
32-
- -s -w
33-
- -X github.com/programmersd21/kairo/internal/buildinfo.Version={{ .Version }}
34-
- -X github.com/programmersd21/kairo/internal/buildinfo.Commit={{ .ShortCommit }}
35-
- -X github.com/programmersd21/kairo/internal/buildinfo.Date={{ .CommitDate }}
32+
ldflags:
33+
- -s -w
34+
- -X github.com/programmersd21/kairo/internal/buildinfo.Version={{ .Version }}
35+
- -X github.com/programmersd21/kairo/internal/buildinfo.Commit={{ .ShortCommit }}
36+
- -X github.com/programmersd21/kairo/internal/buildinfo.Date={{ .CommitDate }}
3637

3738
archives:
3839
- id: default
39-
formats:
40-
- tar.gz
40+
formats: [tar.gz]
4141

4242
format_overrides:
4343
- goos: windows
44-
formats:
45-
- zip
44+
formats: [zip]
4645

4746
name_template: >-
48-
{{ .ProjectName }}_{{ .Os }}_{{- if eq .Arch "amd64" }}x86_64{{ else }}{{ .Arch }}{{ end }}
47+
{{ .ProjectName }}_{{ .Os }}_{{ if eq .Arch "amd64" }}x86_64{{ else }}{{ .Arch }}{{ end }}
4948
5049
files:
5150
- LICENSE
@@ -67,10 +66,29 @@ changelog:
6766
- '^docs:'
6867
- '^test:'
6968
- '^chore:'
70-
- README
71-
- Merge
69+
- '^README'
70+
- '^Merge'
7271

7372
release:
7473
draft: false
7574
prerelease: auto
76-
75+
76+
brews:
77+
- repository:
78+
owner: programmersd21
79+
name: homebrew-kairo
80+
81+
directory: Formula
82+
83+
commit_msg_template: "Brew formula update for {{ .ProjectName }} {{ .Tag }}"
84+
85+
homepage: "https://github.com/programmersd21/kairo"
86+
description: "Minimal, powerful task management"
87+
license: "MIT"
88+
89+
test: |
90+
system "#{bin}/kairo", "--version"
91+
92+
install: |
93+
bin.install "kairo"
94+

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.1.5]
9+
10+
### Added
11+
- **New `help` Command**: Added a comprehensive `kairo help` command to explore subcommands and their usage.
12+
- **Shell Tab Completions**: Added `kairo completion [bash|zsh|fish|powershell]` for full command and dynamic task ID completion.
13+
- **Completion Auto-Install**: Use `kairo completion <shell> install` to automatically add completion to your shell profile (Bash, Zsh, Fish).
14+
- **Task ID in Detail View**: Task details now display the unique task ID in the metadata section for easier API/plugin reference.
15+
- **Editor Shortcut Toolbar**: Added a visual footer to the New/Edit Task screen with keybind hints (`ctrl+s` save, `esc` cancel, `tab` navigate).
16+
- **Editor Clarity**: Added prominent "NEW TASK" and "EDIT TASK" titles to the editor card.
17+
- **Multi-location Config Loading**: Kairo now searches for `config.toml` in `~/.kairo/` and `~/.config/kairo/` in addition to standard platform paths.
18+
19+
### Fixed
20+
- **Rainbow Toggle**: Fixed the `rainbow` configuration setting not being correctly detected and applied to the animated logo.
21+
22+
### Changed
23+
- **Active Tab Styling**: The active view tab now uses the theme's accent color as a background with contrasting text for significantly better visibility.
24+
825
## [1.1.4]
926

1027
### Changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ This section guides you through submitting an enhancement suggestion for Kairo,
4646
## Style Guide
4747

4848
We follow the standard Go coding style. Please run `go fmt ./...` before committing.
49+

README.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) (TUI framewo
6868

6969
## 📦 Installation
7070

71-
### Linux / macOS
71+
### macOS (Homebrew)
72+
73+
```bash
74+
brew tap programmersd21/kairo
75+
brew install kairo
76+
```
77+
78+
### Linux / macOS (curl)
7279

7380
```bash
7481
curl -fsSL https://raw.githubusercontent.com/programmersd21/kairo/main/scripts/install.sh | bash
@@ -84,6 +91,14 @@ iwr -useb https://raw.githubusercontent.com/programmersd21/kairo/main/scripts/in
8491

8592
Installs to `%USERPROFILE%\\AppData\\Local\\Programs\\kairo\\kairo.exe` and adds the install directory to your user PATH.
8693

94+
## For any OS out of these:
95+
96+
```bash
97+
go install github.com/programmersd21/kairo/cmd/kairo@latest
98+
```
99+
100+
**OR** use the [PREBUILTS](https://https://github.com/programmersd21/kairo/releases).
101+
87102
### Updates
88103

89104
```bash
@@ -131,6 +146,19 @@ kairo export --format markdown --out tasks.md
131146
# Import tasks
132147
kairo import --format json --in tasks.json
133148

149+
# Shell completion (bash, zsh, fish, powershell)
150+
# Automatic install:
151+
kairo completion zsh install
152+
153+
# Manual install (add to your shell profile):
154+
# source <(kairo completion zsh)
155+
kairo completion zsh
156+
157+
# Get help for any command
158+
kairo help
159+
kairo help api
160+
kairo help export
161+
134162
# Sync with Git (if configured)
135163
kairo sync
136164
```
@@ -317,7 +345,7 @@ UI Re-render → Instant User Feedback
317345
## 🌴 Project Structure
318346

319347
```
320-
kairo/
348+
.
321349
├── CHANGELOG.md
322350
├── cmd
323351
│ └── kairo
@@ -336,6 +364,8 @@ kairo/
336364
│ │ └── msg.go
337365
│ ├── buildinfo
338366
│ │ └── buildinfo.go
367+
│ ├── completion
368+
│ │ └── completion.go
339369
│ ├── config
340370
│ │ ├── config.go
341371
│ │ └── config_test.go

VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.4
1+
1.1.5

cmd/kairo/main.go

Lines changed: 97 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/programmersd21/kairo/internal/api"
1717
"github.com/programmersd21/kairo/internal/app"
1818
"github.com/programmersd21/kairo/internal/buildinfo"
19+
"github.com/programmersd21/kairo/internal/completion"
1920
"github.com/programmersd21/kairo/internal/config"
2021
"github.com/programmersd21/kairo/internal/core"
2122
"github.com/programmersd21/kairo/internal/core/codec"
@@ -35,6 +36,41 @@ func main() {
3536
return
3637
}
3738

39+
// Immediate subcommands (no config/DB needed)
40+
if len(os.Args) > 1 {
41+
switch strings.ToLower(os.Args[1]) {
42+
case "completion":
43+
if len(os.Args) < 3 {
44+
fmt.Println("Usage: kairo completion [bash|zsh|fish|powershell] [install]")
45+
fmt.Println(" kairo completion --complete [args...]")
46+
os.Exit(1)
47+
}
48+
if os.Args[2] != "--complete" {
49+
shell := os.Args[2]
50+
if len(os.Args) > 3 && os.Args[3] == "install" {
51+
if err := completion.Install(shell); err != nil {
52+
fmt.Fprintln(os.Stderr, "Error:", err)
53+
os.Exit(1)
54+
}
55+
return
56+
}
57+
script, err := completion.Script(shell)
58+
if err != nil {
59+
fmt.Fprintln(os.Stderr, err)
60+
os.Exit(1)
61+
}
62+
fmt.Print(script)
63+
return
64+
}
65+
case "version":
66+
runVersion()
67+
return
68+
case "help":
69+
runHelp(os.Args[2:])
70+
return
71+
}
72+
}
73+
3874
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
3975
defer cancel()
4076

@@ -59,12 +95,16 @@ func main() {
5995
hks := hooks.New()
6096
svc := service.New(repo, hks)
6197

62-
// Emit app start event (plugins can listen to this)
63-
hks.AppStarted()
64-
defer hks.AppStopped()
65-
6698
if len(os.Args) > 1 {
6799
switch strings.ToLower(os.Args[1]) {
100+
case "completion":
101+
if os.Args[2] == "--complete" {
102+
results := completion.Complete(ctx, svc, os.Args[3:])
103+
for _, r := range results {
104+
fmt.Println(r)
105+
}
106+
return
107+
}
68108
case "api":
69109
if err := runAPI(ctx, svc, os.Args[2:]); err != nil {
70110
fmt.Fprintln(os.Stderr, "kairo api:", err)
@@ -94,9 +134,6 @@ func main() {
94134
os.Exit(2)
95135
}
96136
return
97-
case "version":
98-
runVersion()
99-
return
100137
case "update":
101138
if err := runUpdate(ctx); err != nil {
102139
fmt.Fprintln(os.Stderr, "kairo update:", err)
@@ -106,6 +143,10 @@ func main() {
106143
}
107144
}
108145

146+
// Emit app start event (plugins can listen to this)
147+
hks.AppStarted()
148+
defer hks.AppStopped()
149+
109150
m, err := app.New(ctx, cfg, svc)
110151
if err != nil {
111152
fmt.Fprintln(os.Stderr, "kairo:", err)
@@ -263,3 +304,52 @@ func runUpdate(ctx context.Context) error {
263304
Stderr: os.Stderr,
264305
})
265306
}
307+
308+
func runHelp(args []string) {
309+
if len(args) == 0 {
310+
fmt.Println("Kairo — Minimal, powerful task management.")
311+
fmt.Println("\nUsage:")
312+
fmt.Println(" kairo [command]")
313+
fmt.Println("\nAvailable Commands:")
314+
fmt.Println(" api Headless API for external automation")
315+
fmt.Println(" completion Generate shell completion scripts")
316+
fmt.Println(" export Export tasks to JSON or Markdown")
317+
fmt.Println(" import Import tasks from JSON or Markdown")
318+
fmt.Println(" sync Sync tasks with Git repository")
319+
fmt.Println(" update Update Kairo to the latest version")
320+
fmt.Println(" version Show the current version")
321+
fmt.Println(" help Help about any command")
322+
fmt.Println("\nUse \"kairo help [command]\" for more information about a command.")
323+
return
324+
}
325+
326+
switch args[0] {
327+
case "api":
328+
fmt.Println("Headless API for external automation.")
329+
fmt.Println("\nUsage:")
330+
fmt.Println(" kairo api [action] [flags]")
331+
fmt.Println("\nActions:")
332+
fmt.Println(" create, list, update, delete, get, list-tags")
333+
case "completion":
334+
fmt.Println("Generate shell completion scripts.")
335+
fmt.Println("\nUsage:")
336+
fmt.Println(" kairo completion [bash|zsh|fish|powershell] [install]")
337+
fmt.Println(" kairo completion --complete [args...]")
338+
fmt.Println("\nExample:")
339+
fmt.Println(" kairo completion zsh install")
340+
case "export":
341+
fmt.Println("Export tasks to JSON or Markdown.")
342+
fmt.Println("\nUsage:")
343+
fmt.Println(" kairo export --format [json|md] --out [file]")
344+
case "import":
345+
fmt.Println("Import tasks from JSON or Markdown.")
346+
fmt.Println("\nUsage:")
347+
fmt.Println(" kairo import --format [json|md] --in [file]")
348+
case "sync":
349+
fmt.Println("Sync tasks with Git repository.")
350+
fmt.Println("\nUsage:")
351+
fmt.Println(" kairo sync")
352+
default:
353+
fmt.Printf("Unknown help topic %q\n", args[0])
354+
}
355+
}

configs/kairo.example.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
theme = "catppuccin"
33
vim_mode = false
44
show_help = true
5+
rainbow = false
56

67
[theme]
78
# Any field set here overrides the built-in theme colors.

0 commit comments

Comments
 (0)