Skip to content

Add pinwork extension#27684

Open
blankamo wants to merge 3 commits intoraycast:mainfrom
blankamo:ext/pinwork
Open

Add pinwork extension#27684
blankamo wants to merge 3 commits intoraycast:mainfrom
blankamo:ext/pinwork

Conversation

@blankamo
Copy link
Copy Markdown

@blankamo blankamo commented May 6, 2026

Description

Pinwork is a native task management app for Apple platforms. This extension lets users view Pinwork tasks and send common actions to the app through Pinwork's local URL scheme.

Commands included:

  • Show Today
  • Show Inbox
  • Show Next
  • Quick Add Task
  • Search Tasks
  • Show Projects

Pinwork is currently available through external TestFlight:
https://testflight.apple.com/join/aWxfGbtt

Screencast

Screenshots are included in the extension metadata.

Checklist

- Prepare Raycast extension for review
- Rename Northstar to Pinwork and prepare for Raycast Store submission
- improvements
- intial setup
@raycastbot raycastbot added new extension Label for PRs with new extensions platform: macOS labels May 6, 2026
@raycastbot
Copy link
Copy Markdown
Collaborator

Congratulations on your new Raycast extension! 🚀

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

Once the PR is approved and merged, the extension will be available on our Store.

@blankamo blankamo marked this pull request as ready for review May 6, 2026 07:35
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 6, 2026

Greptile Summary

This PR adds a new Pinwork extension that bridges to the native macOS task manager via AppleScript (read operations) and the pinwork:// URL scheme (write operations), exposing six commands: Show Today, Show Inbox, Show Next, Quick Add Task, Search Tasks, and Show Projects. The architecture is clean — availability gating, Zod-validated dual-format parsers, and optimistic mutations are all handled well. Two preference-wiring issues need to be resolved before merging:

  • The defaultList preference is declared in package.json and surfaced to users in Raycast settings, but getDefaultList() is never called anywhere — changing the setting has no effect on behaviour.
  • shouldShowCompletedTasks() is only applied inside useTodayTasks; the Inbox and Search list views ignore the preference, so completed tasks always appear there regardless of what the user configured.

Confidence Score: 3/5

Not ready to merge — two user-facing preferences are declared but not fully wired up, meaning the settings UI misleads users.

The defaultList preference is entirely inert: every command opens its own fixed view and nothing reads this setting. The showCompletedTasks preference is only respected in the Today view; Inbox and Search always show completed tasks regardless of what the user set. Both issues would immediately confuse end-users who customise their settings and see no change in behaviour.

src/utils/preferences.ts and src/hooks/useInboxTasks.ts (and search-tasks.tsx) need attention to wire the two preferences into the views that currently ignore them.

Important Files Changed

Filename Overview
extensions/pinwork/src/utils/preferences.ts Defines getDefaultList() which is never called anywhere — the defaultList preference is dead code; also shouldShowCompletedTasks() is only wired up to the Today view.
extensions/pinwork/src/hooks/useInboxTasks.ts Does not apply the showCompletedTasks preference, so the Inbox view always shows completed tasks regardless of user settings.
extensions/pinwork/src/api/pinwork.ts Bridges to Pinwork via AppleScript (reads) and URL scheme (writes); uses Promise.all for concurrent availability checks; clean separation of concerns.
extensions/pinwork/src/api/parsers.ts Handles both JSON and legacy delimited AppleScript payloads with Zod validation; booleanish/numberish coercions are defensive and correct.
extensions/pinwork/src/components/TaskListItem.tsx Full-featured task list item with optimistic updates, confirm-on-delete, defer targets, and copy actions; well structured.
extensions/pinwork/src/hooks/useTodayTasks.ts Only hook that correctly reads shouldShowCompletedTasks(); other list hooks do not, creating inconsistent preference behaviour across views.
extensions/pinwork/package.json Well-formed with $schema, correct categories and platform; declares a defaultList preference that is never consumed by any command.
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
extensions/pinwork/src/utils/preferences.ts:24-26
**`defaultList` preference is exposed but never read**

`getDefaultList()` is defined here but is not imported or called anywhere in the codebase. Users who change the "Default List" preference in Raycast settings will see no effect: all view commands always open their own fixed view, and there is no command that reads this preference to redirect. The preference should either be wired up (e.g., in a root command that pushes to the chosen view) or removed from `package.json` before shipping.

### Issue 2 of 2
extensions/pinwork/src/hooks/useInboxTasks.ts:8-20
**`showCompletedTasks` preference not honoured in Inbox or Search views**

`useTodayTasks` gates on `shouldShowCompletedTasks()`, but `useInboxTasks` (and by extension `show-inbox.tsx`) returns all tasks unconditionally. `search-tasks.tsx` also always renders a "Completed" section. The preference description reads "Include recently completed tasks in **list views**" — users who turn it off would reasonably expect the inbox and search results to hide completed items too.

Reviews (2): Last reviewed commit: "Address Raycast review comments" | Re-trigger Greptile

Comment thread extensions/pinwork/src/utils/preferences.ts Outdated
Comment thread extensions/pinwork/docs/ARCHITECTURE_REFACTOR_PLAN.md Outdated
Comment thread extensions/pinwork/src/hooks/usePinworkAvailability.ts Outdated
Comment thread extensions/pinwork/src/api/pinwork.ts
Comment on lines +24 to +26
export function getDefaultList(): "today" | "inbox" | "next" {
return getPreferences().defaultList;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 defaultList preference is exposed but never read

getDefaultList() is defined here but is not imported or called anywhere in the codebase. Users who change the "Default List" preference in Raycast settings will see no effect: all view commands always open their own fixed view, and there is no command that reads this preference to redirect. The preference should either be wired up (e.g., in a root command that pushes to the chosen view) or removed from package.json before shipping.

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/pinwork/src/utils/preferences.ts
Line: 24-26

Comment:
**`defaultList` preference is exposed but never read**

`getDefaultList()` is defined here but is not imported or called anywhere in the codebase. Users who change the "Default List" preference in Raycast settings will see no effect: all view commands always open their own fixed view, and there is no command that reads this preference to redirect. The preference should either be wired up (e.g., in a root command that pushes to the chosen view) or removed from `package.json` before shipping.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +8 to +20
export function useInboxTasks(options?: { execute?: boolean }) {
const { data, isLoading, error, revalidate, mutate } = useCachedPromise(
getInboxTasks,
[],
{
initialData: [],
keepPreviousData: true,
execute: options?.execute ?? true,
},
);

return { tasks: data, isLoading, error, revalidate, mutate };
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 showCompletedTasks preference not honoured in Inbox or Search views

useTodayTasks gates on shouldShowCompletedTasks(), but useInboxTasks (and by extension show-inbox.tsx) returns all tasks unconditionally. search-tasks.tsx also always renders a "Completed" section. The preference description reads "Include recently completed tasks in list views" — users who turn it off would reasonably expect the inbox and search results to hide completed items too.

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/pinwork/src/hooks/useInboxTasks.ts
Line: 8-20

Comment:
**`showCompletedTasks` preference not honoured in Inbox or Search views**

`useTodayTasks` gates on `shouldShowCompletedTasks()`, but `useInboxTasks` (and by extension `show-inbox.tsx`) returns all tasks unconditionally. `search-tasks.tsx` also always renders a "Completed" section. The preference description reads "Include recently completed tasks in **list views**" — users who turn it off would reasonably expect the inbox and search results to hide completed items too.

How can I resolve this? If you propose a fix, please make it concise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants