Conversation
|
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. |
Greptile SummaryThis PR adds a new Simple Timer extension for Raycast on Windows, providing a keyboard-first timer with stopwatch and Pomodoro modes backed by a native .NET worker process for background operation. The overall architecture is well thought-out, but there are two TypeScript compilation errors that will prevent the extension from building, plus a platform misconfiguration and a potentially disruptive system-level side effect. Key issues found:
Confidence Score: 2/5
Important Files Changed
Prompt To Fix All With AIThis is a comment left during a code review.
Path: extensions/simple-timer/package.json
Line: 87
Comment:
**Invalid platform capitalization**
The `platforms` value `"windows"` uses incorrect casing. Per the Raycast schema, the correct value is `"Windows"` (Title Case). Using lowercase may cause the extension to fail validation or not load correctly.
```suggestion
"Windows"
```
**Rule Used:** What: Ensure `platforms` only contains macOS and/o... ([source](https://app.greptile.com/review/custom-context?memory=b3b94d4e-bae6-49ea-b437-ed0f62a1456c))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/simple-timer/src/utils.ts
Line: 223-230
Comment:
**Duplicate interface declaration causes a TypeScript error**
`PomodoroInput` is declared twice — once at line 215 and again at line 223. TypeScript does not allow duplicate interface identifiers in the same module scope, so this will cause a compilation error and the extension will fail to build. The second declaration is an exact copy and should be removed.
```suggestion
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/simple-timer/src/pomodoro-running.tsx
Line: 67-72
Comment:
**Duplicate function declaration causes a TypeScript error**
`toggleNotifications` is already declared at line 59. Declaring it a second time here is a copy-paste artifact that will produce a "Duplicate identifier 'toggleNotifications'" TypeScript error, preventing the extension from building. The second declaration should be removed.
```suggestion
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/simple-timer/src/pomodoro-running.tsx
Line: 34-35
Comment:
**Duplicate `setNotificationsState` call**
`setNotificationsState(state.notificationsEnabled ?? true)` is called twice in a row. While harmless in practice (both calls set the same value), the second call is redundant and is likely an unintentional copy-paste error. Remove one of them.
```suggestion
setNotificationsState(state.notificationsEnabled ?? true);
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/simple-timer/src/sound.ts
Line: 99-101
Comment:
**Kills all `powershell.exe` processes system-wide**
`taskkill /IM powershell.exe /F` terminates every running PowerShell process on the machine, not just the ones spawned by this extension. If the user has unrelated scripts or automation running in PowerShell at that moment, they will be forcibly killed with no warning. The comment says "covers both Raycast and worker sound processes," but the individual PID-based approach above already handles the in-memory sound processes. Consider only killing the tracked PIDs instead of broadcasting a process-wide kill.
```suggestion
// All per-timer pids are already killed above; skip the broadcast kill.
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/simple-timer/CHANGELOG.md
Line: 3
Comment:
**Hardcoded dates should use `{PR_MERGE_DATE}` placeholder**
Both changelog entries (lines 3 and 11) use a hardcoded date `2026-03-23` instead of the standard `{PR_MERGE_DATE}` template variable. Since neither version has been released yet, both should use the placeholder so the merge date is automatically substituted during release.
```suggestion
## [1.0.1] - {PR_MERGE_DATE}
```
**Rule Used:** What: Changelog entries must use `{PR_MERGE_DATE}`... ([source](https://app.greptile.com/review/custom-context?memory=c2214c11-df56-490a-b1c0-09a385df481a))
How can I resolve this? If you propose a fix, please make it concise.Reviews (1): Last reviewed commit: "Add Simple Timer extension" | Re-trigger Greptile |
| "publish": "npx @raycast/api@latest publish" | ||
| }, | ||
| "platforms": [ | ||
| "windows" |
There was a problem hiding this comment.
Invalid platform capitalization
The platforms value "windows" uses incorrect casing. Per the Raycast schema, the correct value is "Windows" (Title Case). Using lowercase may cause the extension to fail validation or not load correctly.
| "windows" | |
| "Windows" |
Rule Used: What: Ensure platforms only contains macOS and/o... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/package.json
Line: 87
Comment:
**Invalid platform capitalization**
The `platforms` value `"windows"` uses incorrect casing. Per the Raycast schema, the correct value is `"Windows"` (Title Case). Using lowercase may cause the extension to fail validation or not load correctly.
```suggestion
"Windows"
```
**Rule Used:** What: Ensure `platforms` only contains macOS and/o... ([source](https://app.greptile.com/review/custom-context?memory=b3b94d4e-bae6-49ea-b437-ed0f62a1456c))
How can I resolve this? If you propose a fix, please make it concise.| export interface PomodoroInput { | ||
| workSeconds: number; | ||
| breakSeconds: number; | ||
| note: string; | ||
| maxCycles: number; // 0 = infinite | ||
| } | ||
|
|
||
| // Parse time string like: 25m, 5m30s, 1h30m, 45s, 2h, 33m40s |
There was a problem hiding this comment.
Duplicate interface declaration causes a TypeScript error
PomodoroInput is declared twice — once at line 215 and again at line 223. TypeScript does not allow duplicate interface identifiers in the same module scope, so this will cause a compilation error and the extension will fail to build. The second declaration is an exact copy and should be removed.
| export interface PomodoroInput { | |
| workSeconds: number; | |
| breakSeconds: number; | |
| note: string; | |
| maxCycles: number; // 0 = infinite | |
| } | |
| // Parse time string like: 25m, 5m30s, 1h30m, 45s, 2h, 33m40s |
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/src/utils.ts
Line: 223-230
Comment:
**Duplicate interface declaration causes a TypeScript error**
`PomodoroInput` is declared twice — once at line 215 and again at line 223. TypeScript does not allow duplicate interface identifiers in the same module scope, so this will cause a compilation error and the extension will fail to build. The second declaration is an exact copy and should be removed.
```suggestion
```
How can I resolve this? If you propose a fix, please make it concise.| function toggleNotifications() { | ||
| const next = !notificationsEnabled; | ||
| setNotificationsState(next); | ||
| setNotificationsInState(next); | ||
| showHUD(next ? "🔔 Notifications on" : "🔕 Notifications off"); | ||
| } |
There was a problem hiding this comment.
Duplicate function declaration causes a TypeScript error
toggleNotifications is already declared at line 59. Declaring it a second time here is a copy-paste artifact that will produce a "Duplicate identifier 'toggleNotifications'" TypeScript error, preventing the extension from building. The second declaration should be removed.
| function toggleNotifications() { | |
| const next = !notificationsEnabled; | |
| setNotificationsState(next); | |
| setNotificationsInState(next); | |
| showHUD(next ? "🔔 Notifications on" : "🔕 Notifications off"); | |
| } |
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/src/pomodoro-running.tsx
Line: 67-72
Comment:
**Duplicate function declaration causes a TypeScript error**
`toggleNotifications` is already declared at line 59. Declaring it a second time here is a copy-paste artifact that will produce a "Duplicate identifier 'toggleNotifications'" TypeScript error, preventing the extension from building. The second declaration should be removed.
```suggestion
```
How can I resolve this? If you propose a fix, please make it concise.| setNotificationsState(state.notificationsEnabled ?? true); | ||
| setNotificationsState(state.notificationsEnabled ?? true); |
There was a problem hiding this comment.
Duplicate
setNotificationsState call
setNotificationsState(state.notificationsEnabled ?? true) is called twice in a row. While harmless in practice (both calls set the same value), the second call is redundant and is likely an unintentional copy-paste error. Remove one of them.
| setNotificationsState(state.notificationsEnabled ?? true); | |
| setNotificationsState(state.notificationsEnabled ?? true); | |
| setNotificationsState(state.notificationsEnabled ?? true); |
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/src/pomodoro-running.tsx
Line: 34-35
Comment:
**Duplicate `setNotificationsState` call**
`setNotificationsState(state.notificationsEnabled ?? true)` is called twice in a row. While harmless in practice (both calls set the same value), the second call is redundant and is likely an unintentional copy-paste error. Remove one of them.
```suggestion
setNotificationsState(state.notificationsEnabled ?? true);
```
How can I resolve this? If you propose a fix, please make it concise.| // Kill all powershell (covers both Raycast and worker sound processes) | ||
| try { | ||
| execSync(`taskkill /IM powershell.exe /F`, { stdio: "ignore" }); |
There was a problem hiding this comment.
Kills all
powershell.exe processes system-wide
taskkill /IM powershell.exe /F terminates every running PowerShell process on the machine, not just the ones spawned by this extension. If the user has unrelated scripts or automation running in PowerShell at that moment, they will be forcibly killed with no warning. The comment says "covers both Raycast and worker sound processes," but the individual PID-based approach above already handles the in-memory sound processes. Consider only killing the tracked PIDs instead of broadcasting a process-wide kill.
| // Kill all powershell (covers both Raycast and worker sound processes) | |
| try { | |
| execSync(`taskkill /IM powershell.exe /F`, { stdio: "ignore" }); | |
| // All per-timer pids are already killed above; skip the broadcast kill. |
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/src/sound.ts
Line: 99-101
Comment:
**Kills all `powershell.exe` processes system-wide**
`taskkill /IM powershell.exe /F` terminates every running PowerShell process on the machine, not just the ones spawned by this extension. If the user has unrelated scripts or automation running in PowerShell at that moment, they will be forcibly killed with no warning. The comment says "covers both Raycast and worker sound processes," but the individual PID-based approach above already handles the in-memory sound processes. Consider only killing the tracked PIDs instead of broadcasting a process-wide kill.
```suggestion
// All per-timer pids are already killed above; skip the broadcast kill.
```
How can I resolve this? If you propose a fix, please make it concise.| @@ -0,0 +1,53 @@ | |||
| # Changelog | |||
|
|
|||
| ## [1.0.1] - 2026-03-23 | |||
There was a problem hiding this comment.
Hardcoded dates should use
{PR_MERGE_DATE} placeholder
Both changelog entries (lines 3 and 11) use a hardcoded date 2026-03-23 instead of the standard {PR_MERGE_DATE} template variable. Since neither version has been released yet, both should use the placeholder so the merge date is automatically substituted during release.
| ## [1.0.1] - 2026-03-23 | |
| ## [1.0.1] - {PR_MERGE_DATE} |
Rule Used: What: Changelog entries must use {PR_MERGE_DATE}... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/simple-timer/CHANGELOG.md
Line: 3
Comment:
**Hardcoded dates should use `{PR_MERGE_DATE}` placeholder**
Both changelog entries (lines 3 and 11) use a hardcoded date `2026-03-23` instead of the standard `{PR_MERGE_DATE}` template variable. Since neither version has been released yet, both should use the placeholder so the merge date is automatically substituted during release.
```suggestion
## [1.0.1] - {PR_MERGE_DATE}
```
**Rule Used:** What: Changelog entries must use `{PR_MERGE_DATE}`... ([source](https://app.greptile.com/review/custom-context?memory=c2214c11-df56-490a-b1c0-09a385df481a))
How can I resolve this? If you propose a fix, please make it concise.|
This pull request has been automatically marked as stale because it did not have any recent activity. It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊 |
Hey, yes, that would be good as I vibe-coded this just because of missing windows timer. No need for 2 timers :) |
|
This pull request has been automatically marked as stale because it did not have any recent activity. It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊 |
Description
A keyboard-first timer extension for Raycast on Windows. Supports timers, stopwatch, and Pomodoro sessions with background operation via .NET worker.
Screencast
Screenshots are included in the metadata/ folder.
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare located outside the metadata folder if they were not generated with our metadata tool