Skip to content

Update hakuna extension#27506

Open
cimnine wants to merge 15 commits intoraycast:mainfrom
cimnine:ext/hakuna
Open

Update hakuna extension#27506
cimnine wants to merge 15 commits intoraycast:mainfrom
cimnine:ext/hakuna

Conversation

@cimnine
Copy link
Copy Markdown
Contributor

@cimnine cimnine commented Apr 29, 2026

Description

A complete rewrite of the Hakuna extension. It is now very interactive and usable for non-technical users. Before, one had to figure out task- and project ids.

Screencast

Checklist

- Merge branch \'contributions/merge-1777445277238\'
- Pull contributions
- Fix linter issues
- Fix naming
- Add screenshots
- Ignore dist folder
- Build fixes
- Initial changelog draft
- Remove Get Overtime (it\'s now in Profiles)
- Filter by absence types
- Navigate absences by year
- Merge branch \'hakuna-menu\'
- Show absences of other users
- Add Hakuna Menu
- Absence overview
- Filter profiles by group
- Merge branch \'hakuna-storeValue\'
- Profiles view
- Note about duration
- Add budget info to entry view
- Remember most recently selected project and tasks
- Rename CLAUDE.md to AGENTS.md and symlink CLAUDE.md
- Show timer on the entries list
- Format duration according to tenant preferences
- Edit entry
- Add entry
- Start a timer from the time entries view
- Merge branch \'hakuna-entries\'
- Go from project to timer
- Nicer time entries
- Add list of time entries and action to delete one entry
- Nice timer
- Improvements
@raycastbot raycastbot added extension fix / improvement Label for PRs with extension's fix improvements extension: hakuna Issues related to the hakuna extension platform: macOS labels Apr 29, 2026
@raycastbot
Copy link
Copy Markdown
Collaborator

raycastbot commented Apr 29, 2026

Thank you for your contribution! 🎉

🔔 @r3361 you might want to have a look.

You can use this guide to learn how to check out the Pull Request locally in order to test it.

📋 Quick checkout commands
BRANCH="ext/hakuna"
FORK_URL="https://github.com/cimnine/raycast-extensions.git"
EXTENSION_NAME="hakuna"
REPO_NAME="raycast-extensions"

git clone -n --depth=1 --filter=tree:0 -b $BRANCH $FORK_URL
cd $REPO_NAME
git sparse-checkout set --no-cone "extensions/$EXTENSION_NAME"
git checkout
cd "extensions/$EXTENSION_NAME"
npm install && npm run dev

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

cimnine added 6 commits April 29, 2026 08:54
- Remove the technical instructions from the README
- Remove Get Worktime and Get Vacation Days, as these are now in the profile
@cimnine cimnine marked this pull request as ready for review April 29, 2026 08:41
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 29, 2026

Greptile Summary

This is a complete rewrite of the Hakuna extension, replacing raw ID-based commands with a rich interactive UI: a menu-bar widget, absences view, project/task dropdowns, day-navigation in time entries, and a shared TimerForm with live duration feedback. The rewrite is architecturally sound and well-structured, with proper caching, rate-limiting, and auto-generated Preferences types. Two pre-existing concerns from earlier rounds remain open: the offsetDate UTC-timezone bug in time-entries.tsx and new time entries always targeting today instead of the currently browsed date.

Confidence Score: 4/5

Safe to merge with awareness that the UTC timezone and browsed-date issues flagged in earlier rounds are still unresolved.

P1 findings from previous rounds (offsetDate UTC bug, new entries ignoring browsed date) are still present in the code. No new P0/P1 issues were found in this pass. The rest of the codebase is clean and well-implemented.

extensions/hakuna/src/time-entries.tsx (offsetDate timezone), extensions/hakuna/src/time-entry.tsx (hardcoded today for new entries)

Important Files Changed

Filename Overview
extensions/hakuna/src/hakuna-api.ts Complete rewrite of the API client; well-structured with caching, rate-limiting, and typed responses. The delete-then-create ordering in updateTimer is a known API constraint acknowledged by the author.
extensions/hakuna/src/time-entries.tsx The offsetDate helper still uses toISOString() for date arithmetic, which shifts dates one day back for UTC+ users. The timerElapsed-for-wrong-date bug was correctly fixed with the runningTimer?.date === date guard.
extensions/hakuna/src/time-entry.tsx Always creates entries using today (UTC-based) regardless of the date being browsed in the Time Entries view; no date prop is accepted, so historical-day entry creation silently targets today.
extensions/hakuna/src/timer-form.tsx Well-crafted shared form with flexible time parsing, live duration display, project/task cascading, and conflict validation against running timers. No new issues beyond the UTC-date class problem inherited from callers.
extensions/hakuna/src/timer.tsx Handles start/update/stop/cancel flows correctly. The delete-before-create ordering when converting a running timer to a time entry is a known API limitation.
extensions/hakuna/src/menubar.tsx New menu-bar command showing worktime, active timer, absences, and recent entries. today derived via toISOString() (UTC) in multiple places — same class as the flagged timezone issue, could show wrong day for UTC+ users near midnight.
extensions/hakuna/src/absences.tsx Clean absences view with year navigation, type filtering, and detail panel. Uses undefined locale for toLocaleDateString (respects system locale). No issues found.
extensions/hakuna/src/settings.ts Uses auto-generated Preferences type correctly via getPreferenceValues<Preferences>(). No manually defined interface.
extensions/hakuna/package.json Correctly includes $schema, appropriate categories, all declared dependencies are imported in source files, and platforms is set to ["macOS"].
extensions/hakuna/src/duration.ts Tiny utility for parsing/formatting durations in HH:MM:SS and decimal formats. Correct implementation, no issues.

Reviews (7): Last reviewed commit: "Update hakuna extension" | Re-trigger Greptile

Comment thread extensions/hakuna/CHANGELOG.md Outdated
Comment thread extensions/hakuna/src/time-entries.tsx
@cimnine
Copy link
Copy Markdown
Contributor Author

cimnine commented Apr 29, 2026

P1: updateTimer loses data on partial failure

updateTimer calls deleteTimer() first, then startTimer(). If the second request fails (network error, server error, etc.), the timer is permanently deleted with no way to recover the original start time or task. Consider swapping the order — start the new timer first, then delete the old one — or at minimum preserve the original data for a retry message if the POST fails.

This is not ideal, but the API does not offer another solution. There is no PATCH. And a new timer can't be started if a timer is already running.

Comment thread extensions/hakuna/src/time-entries.tsx
cimnine added 2 commits April 29, 2026 13:16
- Remove dist
- Refactoring and rate-limit
Comment thread extensions/hakuna/src/timer.tsx
cimnine added 3 commits April 29, 2026 14:22
- Refactoring: Extract Fetch&Cache logic
- Optimize tasks view
- Cache some requests to Hakuna
Comment thread extensions/hakuna/src/time-entries.tsx Outdated
- Make linter happy
- Merge branch \'hakuna-timer-entry\'
- Can\'t submit entry with start or end time after timer start
- Fix bug when entering \'19\' as end-time
- Further improve menu bar
- Show the active running timer
- Fix rendering of total hours in menu bar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extension fix / improvement Label for PRs with extension's fix improvements extension: hakuna Issues related to the hakuna extension platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants