01e35d7
feat(ui): add spinner feedback for network calls
Click to expand commit body
Wrap all API calls with huh/spinner for immediate visual feedback.
- Add generic Spin[T] and SpinVoid helpers in internal/ui/spinner.go
- Update all commands making network calls to use the helpers
- Use proper ellipsis (…) in spinner titles
Assisted-by: Claude Sonnet 4 via Crush
40ea681
refactor(deps): upgrade go-lunatask, drop deeplink
Click to expand commit body
Delete internal/deeplink/ package and simplify internal/validate/ by
delegating to new go-lunatask v0.1.0-rc10 functions: ParseDeepLink,
BuildDeepLink, ParseTaskStatus, ParseMotivation,
ParseRelationshipStrength.
Removes ~250 lines of code now provided upstream.
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
a5c38a3
feat(init): auto-prompt for token in reconfigure
Click to expand commit body
When running `lune init` with an existing config but no keyring token
(e.g., after copying config to a new device), immediately prompt for the
access token before showing the configuration menu.
Also validates existing tokens and offers to replace them if ping fails.
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
6afafbf
docs: expand AGENTS.md with non-obvious patterns
Click to expand commit body
- Complete architecture section with all internal packages
- Document API client builder pattern
- Add gotchas: enum validation, date parsing, stdin convention,
deep links, config key lookups
- Update testing section with actual patterns
- Document init wizard navigation
Assisted-by: Claude Sonnet 4 via Crush
Fully implement person commands with Lunatask API integration:
- add: create people with relationship strength and source
- list: filter by relationship/source, table and JSON output
- show: display person details (renamed from get)
- update: modify names and relationship strength
- delete: with confirmation prompt
- timeline: add notes to person's memory timeline
Register shell completions for relationship flag.
Assisted-by: Claude Sonnet 4 via Crush
Fully implement note commands with Lunatask API integration:
- add: create notes with notebook, content, and source support
- list: filter by notebook/source, table and JSON output
- show: display note details (renamed from get)
- update: modify name, content, notebook, date
- delete: with confirmation prompt
Add NotebookByID helper to config package. Register shell completions
for notebook flag.
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
ae0f649
feat(validate): add validation for enum types
Click to expand commit body
Add validation functions that lowercase and match against known
constants for TaskStatus, Motivation, and RelationshipStrength.
Wire validation into task add/update/list to reject invalid input early
with clear error messages instead of passing bogus values to the API.
Assisted-by: Claude Opus 4 via Crush
Create journal entries with optional date and title. Content supports
Markdown formatting for rich text. Use "-" to read content from stdin
for multi-line input.
Assisted-by: Claude Opus 4 via Crush
Add ValidArgsFunction for positional KEY arguments:
- area show: completes area keys
- goal show: completes goal keys
Assisted-by: Claude Opus 4 via Crush
Full task update with fluent builder pattern from go-lunatask. Supports
name, area, goal, status, note, priority, estimate, motivation,
eisenhower (via --important/--urgent), and schedule.
Add dupl linter exclusion for cmd/ since TaskBuilder and
TaskUpdateBuilder share method signatures but differ in type.
Assisted-by: Claude Opus 4 via Crush
Amolith
created
538461b
refactor(task): use string-based priority flag
Click to expand commit body
Replace int priority flag (-2 to 2) with string values (lowest, low,
normal, high, highest) using lunatask.ParsePriority. Add shell
completion for priority values.
Assisted-by: Claude Opus 4 via Crush
Amolith
created
fd5b955
refactor(config): use ~/.config/lune as config dir
Click to expand commit body
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
6b9b9ee
refactor(task): use dateutil for schedule parsing
Click to expand commit body
Natural language dates now supported for --schedule flag.
Assisted-by: Claude Sonnet 4 via Crush
Uses go-dateparser for natural language date input (e.g., "yesterday",
"2 days ago", "March 5"). Adds internal/dateutil package for reuse.
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
1342923
fix(task): remove duplicate init in delete
Remove redundant ui.Error calls outside cmd/init/. Errors are now
returned directly to Cobra for consistent display. ui.Success is still
used for explicit success confirmations.
Assisted-by: Claude Sonnet 4 via Crush
Prompts for confirmation using huh unless --force is specified. Returns
error to Cobra rather than printing custom error message.
Assisted-by: Claude Sonnet 4 via Crush
Displays task metadata including status, area/goal (resolved to names
from config when available), scheduling dates, and attributes like
priority, estimate, progress, motivation, and eisenhower quadrant.
Adds AreaByID and GoalByID helpers to config package for name
resolution. Upgrades go-lunatask to v0.1.0-rc9 for Priority type
support.
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
3201482
refactor(task): rename get to show for consistency
Click to expand commit body
Assisted-by: Claude Sonnet 4 via Crush
Amolith
created
4f6020f
fix(goal): show area in no-goals msg when default
- list: table/JSON output, defaults to config's default area
- show: full details with ID, deeplink, task count
- Auto-detects area if goal key is unique, prompts for --area on
collision
Assisted-by: Claude Opus 4.5 via Crush
- list: table/JSON output with goal preview
- show: full details with ID, deeplink, goals, task counts
Uses H1/H2 headings for visual hierarchy.
Assisted-by: Claude Opus 4.5 via Crush
Supports all task metadata flags:
- area/goal (resolved from config keys)
- status, priority, estimate, motivation
- important/urgent (Eisenhower matrix)
- schedule date, note
Name and note support stdin via "-".
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
351587d
feat(stats): add TaskCounter for task counts
Click to expand commit body
Provides reusable helpers to count uncompleted tasks by area or goal ID
with lazy loading of task list.
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
0bbb38b
refactor(config): add goal lookup across areas
Click to expand commit body
Adds GoalMatch type and FindGoalsByKey helper for collision detection.
Also adds json tags to config structs for JSON output.
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
44130c1
refactor(ui): replace Muted with H1/H2 headings
Click to expand commit body
Muted (gray foreground) was hard to read on some terminal themes. H1/H2
use background colors for reliable contrast regardless of theme.
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
7aedbf9
chore(deps): bump go-lunatask to v0.1.0-rc8
Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
21675bd
refactor(ui): use lctime for date formatting
Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
1370900
feat(task): use default area filter from config
Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
f0a75b5
refactor(task): use lipgloss/table for list output
- Default filter: incomplete tasks + completed today
- --all flag to show full history
- --area and --status filters
- JSON and table output
- Locale-aware date formatting via ui.FormatDate
Assisted-by: Claude Opus 4.5 via Crush
- 'Track a habit activity' -> 'Track a habit'
- 'Add a timeline note to a person' -> 'Add a timeline note'
- 'Verify your access token is valid' -> 'Verify access token'
Assisted-by: Claude Opus 4.5 via Amp
- Token validation uses errTokenRequired instead of errKeyRequired
- Access-token step offers 'Skip for now' on errors instead of
discarding config
- Ctrl+C on save prompt shows clearer message
- Color summary shows 'auto' when config value is empty
- Extract printConfigSummary helper to reduce function length
- Add colorAuto constant to avoid magic string duplication
Assisted-by: Claude Opus 4.5 via Amp
Amolith
created
579789e
refactor: config permissions and done shortcut
Click to expand commit body
- Config file now written with 0o600 instead of 0o644
- done shortcut creates fresh command copy instead of mutating global
state
Assisted-by: Claude Opus 4.5 via Amp
Amolith
created
df1c4f4
refactor(init): deep links, nav, token rename
Click to expand commit body
- Add internal/deeplink package for parsing lunatask:// URLs
- Resource commands (task/note/person) now accept deep links or UUIDs
- Init wizard gains Back/Next navigation between steps
- Rename "API key" to "access token" throughout
- Remove LUNATASK_API_KEY env var fallback; keyring-only auth
Assisted-by: Claude Opus 4.5 via Crush
- Split monolithic init.go into focused files: areas, notebooks,
habits, defaults, apikey, ui
- Move API key configuration to last step with ping validation
- Add spinner feedback during API key verification
- Make keyring errors blocking instead of silent
- Add bounds checks on slice operations
- Handle ErrUserAborted consistently across all huh forms
- Change parseEditIndex to (int, bool) signature
- Add unit tests for validators
Assisted-by: Claude Opus 4.5 via Amp
5a9bab7
docs(agents): move E2E note to concepts section
Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush
Amolith
created
08bd405
refactor: centralize completions and ui helpers
Click to expand commit body
- Move completion functions to internal/completion package
- Add Static() helper for inline static value completions
- Extract ui.Confirm() using charmbracelet/huh
- Implement done command via task.UpdateCmd delegation
Assisted-by: Claude Opus 4.5 via Crush
75170db
feat(cmd): add CLI command structure with stubs
Click to expand commit body
Implements the command hierarchy for lune CLI:
- task: add, list, get, update, delete
- note: add, list, get, update, delete
- person: add, list, get, update, delete, timeline
- journal: add
- habit: track
- Shortcuts: add, done, jrnl
Includes supporting infrastructure:
- internal/client: API client with version from build info
- internal/config: TOML config with ErrNotFound sentinel
- internal/validate: UUID validation for IDs
- internal/ui: lipgloss styles
All commands use RunE flag lookups for testability, dynamic shell
completions for config-based flags, and delete commands require --force
or confirmation.
Assisted-by: Claude Opus 4.5 via Crush