9dff3c6
docs: mention lune as primary consumer
Click to expand commit body
Assisted-by: Claude Opus 4.5 via Amp
Amolith created
9dff3c6
docs: mention lune as primary consumer
Assisted-by: Claude Opus 4.5 via Amp
Amolith created
cffcd2c
feat(enum): add All*() and status translation
Add convenience functions to enumerate all valid values: - AllTaskStatuses() - AllPriorities() - AllMotivations() - AllRelationshipStrengths() Each returns a slice in natural order with roundtrip tests. Also translate StatusInProgress between user-facing "in-progress" and API wire format "started" via JSON marshal/unmarshal. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
34d254f
docs(license): add for go.sum
Amolith created
4527645
feat(workflow): add Workflow type and helpers
Supports all six Lunatask workflows: priority_list, now_later, kanban, plan_your_days, must_should_want, and eisenhower. Includes methods for determining which task fields are relevant per workflow (ValidStatuses, UsesMotivation, UsesEisenhower, UsesScheduling, UsesPriority) and human-readable descriptions for MCP/LLM consumption. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
2b6ea0c
feat(filter): add FilterTasks and IsOldCompleted
Add TaskFilterOptions struct for configuring task list filtering by area, goal, status, and completed date. FilterTasks applies these filters to a task slice. IsOldCompleted is exported for custom filtering needs. Consolidates duplicate filtering logic from lune's CLI and MCP. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
8646808
feat(deeplink): add ParseReference function
Add ResourceUnknown constant and ErrInvalidReference error for clearer
API semantics. ParseReference provides better error messages for invalid
input ("expected UUID or lunatask:// deep link").
ParseDeepLink is deprecated and wraps ParseReference for backwards
compatibility.
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
b1d6c21
test(integration): add workflow metadata tests
Test combinations of status, eisenhower, priority, and motivation fields to determine whether lune needs to warn users about workflow restrictions. Covers: - All metadata fields together - Individual field isolation - All eisenhower quadrants - All kanban status values - Field clearing and preservation - Cross-workflow updates Assisted-by: Claude Opus 4 via Crush
Amolith created
a18734a
feat(deeplink): add UUID validation and helpers
Add ValidateUUID using github.com/google/uuid. Add Resource.Valid() and Resource.String() methods. Refactor ParseDeepLink/BuildDeepLink to use new helpers. UUIDs are now validated in both parse and build operations. Assisted-by: Claude Opus 4.5 via Amp
Amolith created
f8e2e43
feat(eisenhower): add ParseEisenhower function
Parses strings like "do-now", "delegate", or numeric "0"-"4" to Eisenhower quadrants. Adds ErrInvalidEisenhower sentinel error. Assisted-by: Claude Opus 4.5 via Amp
Amolith created
0041837
feat: add String methods to enum types
Add String() to Motivation, TaskStatus, and RelationshipStrength for consistency with Eisenhower. Assisted-by: Claude Opus 4.5 via Amp
Amolith created
fad07e7
refactor: move enum types to companion files
Move Motivation, TaskStatus, RelationshipStrength types and constants from types.go to their respective files (motivation.go, status.go, relationship.go). types.go now contains only Source and Date. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
f752909
feat(relationship): add parse function
ParseRelationshipStrength with case-insensitive parsing for all 7 values. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
5698fed
feat(deeplink): add parse and build functions
Resource type with 6 constants (areas, goals, tasks, notes, people, notebooks). ParseDeepLink accepts lunatask://resource/uuid or plain UUID. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
935a005
refactor(status): rename Started to InProgress
Matches Lunatask UI which shows "In Progress" instead of "Started". Wire format remains "started"; also accepts "in-progress" as input. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
8e81585
feat(motivation): add ParseMotivation function
Case-insensitive parsing for unknown/must/should/want values. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
6584af4
refactor(eisenhower): extract to file, add String
Move Eisenhower type, constants, and methods from types.go to eisenhower.go. Add String() method returning human-readable quadrant descriptions for CLI display. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
bad3517
feat(status): add ParseTaskStatus function
Case-insensitive parsing of task status strings to typed TaskStatus values. Matches ParsePriority pattern with ErrInvalidTaskStatus sentinel error. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
c080677
docs(agents): mention context7 ID
Amolith created
46113d9
feat(tasks): add typed Priority API
Replace *int with *Priority for type safety. Rename WithPriority(int) to Priority(Priority) on TaskBuilder and TaskUpdateBuilder. Includes: - Priority constants: PriorityLowest (-2) to PriorityHighest (2) - String(), Valid(), ParsePriority(), JSON marshal/unmarshal - Sentinel errors: ErrInvalidPriority, ErrPriorityOutOfRange Assisted-by: Claude Sonnet 4 via Amp
Amolith created
84c1b8a
feat(tasks): add Eisenhower semantic builder API
Replaces raw int eisenhower values with typed Eisenhower constants and
adds intuitive builder methods (.Important(), .Urgent(),
.NotImportant(), .NotUrgent()) that compute the correct quadrant at
create/update time.
Consumers can now use:
client.NewTask("x").Important().Urgent().Create(ctx) // DoNow
client.NewTask("x").Important().Create(ctx) // DoLater
Reading tasks also benefits from helper methods:
task.Eisenhower.IsImportant()
task.Eisenhower.IsUrgent()
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
7dbcb31
test(integration): add live API validation tests
Adds build-tagged integration tests that run against the live Lunatask API. Requires LUNATASK_API_KEY and LUNATASK_TEST_AREA environment variables. Tests cover ping, list operations, and full create/read/update/delete round-trips for tasks and notes. Also excludes dupl and goconst linters from test files and updates coverage badge. Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
1093ede
feat(people): add update person endpoint
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
ab6ef3b
chore: remove exhaustruct linter
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
ae0941f
refactor(client): move builders to Client methods
Builders are now created via client.NewX() instead of lunatask.NewX(),
and Create/Update methods no longer require a client parameter.
Before: lunatask.NewTask("x").Create(ctx, client) After:
client.NewTask("x").Create(ctx)
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
780cc03
docs: add coverage badge and update task
Add coverage badge to README and task to update it automatically. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
47bac30
test: add comprehensive API endpoint tests
Cover all major client methods with unit tests: - helpers_test.go: shared mock servers and assertions - Individual test files for habits, journal, notes, people, ping, tasks, timeline Include two small fixes discovered during testing: - Remove client-side name validation for tasks (API says it's optional, if impractical) - Use value receiver for Date.MarshalJSON to support non-pointer dates Assisted-by: Claude Opus 4.5 via Crush
Amolith created
c81f221
refactor(client): drop With prefix from options
Functional options now use plain names (HTTPClient, BaseURL, UserAgent) to distinguish them from builder pattern methods (WithNote, WithStatus). Updated package docs and README with UserAgent example. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
69026b1
feat(client): add dynamic version and UA option
Version is now determined at runtime via debug.ReadBuildInfo() instead of being hardcoded. WithUserAgent option allows consumers to set a custom User-Agent prefix; the library identifier is always appended. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
a1ba550
fix(journal): validate date_on is required
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
6c35add
refactor(people): require name in NewPerson
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
309d7c6
feat(notes): add Pinned field to Note struct
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
18f4b49
feat(types): add MotivationUnknown, doc defaults
Add MotivationUnknown constant for clearing/unsetting motivation. Document default values for StatusLater, RelationshipCasualFriend, and MotivationUnknown. Clarify Eisenhower quadrant meanings and task duplicate detection constraints. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
a50e896
chore(lint): add varnamelen ignore rules
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
c5d2d01
refactor: use direct Create/Update on builders
- Add generic CRUD helpers in crud.go to reduce duplication - Move builders from builders.go into their respective domain files - Builders now call Create/Update directly instead of returning request structs - Make request types unexported (createTaskRequest, etc.) - Update examples in README and AGENTS.md Assisted-by: Claude Sonnet 4 via Crush
Amolith created
4a6f76b
docs: fix examples and add doc links
- Fix PersonBuilder example to use RelationshipCloseFriend constant - Add godoc links for RelationshipCloseFriend, ErrUnauthorized Assisted-by: Claude Sonnet 4 via Crush
Amolith created
8bc2980
feat(tasks): add TaskStatus and Motivation types
Replace raw strings with typed constants for better discoverability and compile-time safety. - TaskStatus: StatusLater, StatusNext, StatusStarted, StatusWaiting, StatusCompleted - Motivation: MotivationMust, MotivationShould, MotivationWant Assisted-by: Claude Sonnet 4 via Crush
Amolith created
2bfbde0
docs(readme): point to module docs
Amolith created
81835f7
docs(badges): add pkg.do.dev alongside godocs.io
Amolith created
00ce7e1
fix: use real LICENSE file, not symlink
Go module zips strip symlinks entirely. Assisted-by: Kimi K2 Thinking via Crush
Amolith created
15c63ed
chore: add LICENSE symlink for pkg.go.dev
Assisted-by: Kimi K2 Thinking via Crush
Amolith created
152fc32
feat(people): typed enums, custom field support
- Add RelationshipStrength type with constants for valid values - Add CustomFields map for arbitrary fields (email, birthday, phone, etc.) - Custom MarshalJSON flattens CustomFields to top-level JSON - Add WithCustomField builder method Assisted-by: Claude Opus 4.5 via Crush
Amolith created
f4ceb65
docs(client): fix access token instructions
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
2300d24
docs(readme): add
Amolith created
ed05579
extract from lunatask-mcp-server, polish
Amolith created