@trygocode/notify 0.6.7 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -530,6 +530,21 @@ npm publish, real-device E2E), see
530
530
 
531
531
  ## Changelog
532
532
 
533
+ ### 0.6.8
534
+
535
+ - **Fixed: Claude questions inside Cursor now notify.** When Claude Code runs
536
+ inside Cursor and asks a question (permission prompt, idle/elicitation, agent
537
+ needs input), the notification was being **suppressed** because the imported
538
+ Claude `Notification` payload carries `cursor_version`. That suppression is
539
+ correct for *completions* (Cursor's own `stop` hook already fires, so the
540
+ imported Claude `Stop` would double-notify) — but **wrong for questions**:
541
+ Cursor's native question hook (`AskQuestion` via `postToolUse`) is broken
542
+ upstream and Cursor has no `Notification` event, so the imported Claude
543
+ `Notification` is the *only* question signal. `on-notification` now always
544
+ forwards a genuine input-requiring notification, even when Cursor imported it.
545
+ The non-input `notification_type` filter and per-question `--dedupe-key` still
546
+ apply, so no extra noise or duplicates.
547
+
533
548
  ### 0.6.7
534
549
 
535
550
  - **Notification project name now matches your IDE.** The per-turn completion
package/dist/src/cli.js CHANGED
@@ -20,7 +20,7 @@ import { serveStdio } from "./mcp.js";
20
20
  import { setup } from "./setup.js";
21
21
  import { uninstall } from "./uninstall.js";
22
22
  import { cmdConfig } from "./config.js";
23
- import { onStop, isClaudeHookImportedByCursor, parseCursorStopStatus, cursorStopStatusToKind, clickTarget, projectLabel, } from "./on_stop.js";
23
+ import { onStop, parseCursorStopStatus, cursorStopStatusToKind, clickTarget, projectLabel, } from "./on_stop.js";
24
24
  import { notifyDesktop, requestDesktopPermission, desktopDisabledByEnv, } from "./desktop_notify.js";
25
25
  import { resolveNotifySettings } from "./config.js";
26
26
  import { deriveRepoIdentity } from "./repo_key.js";
@@ -795,8 +795,23 @@ export async function cmdOnNotification(args, deps = {}) {
795
795
  const hookStdin = deps.hookStdin !== undefined
796
796
  ? deps.hookStdin
797
797
  : await (deps.readStdin ?? readStdinIfPipe)();
798
- if (isClaudeHookImportedByCursor(source, hookStdin))
799
- return 0;
798
+ // NOTE (2026-07-28): we DELIBERATELY do NOT suppress Cursor-imported Claude
799
+ // hooks here (unlike the `on-stop`/completion path). The `cursor_version`
800
+ // suppression exists to avoid DOUBLE notifications when BOTH a native Cursor
801
+ // hook AND the imported Claude hook fire for the same turn. That double-fire
802
+ // only happens for COMPLETION: Cursor's native `stop` hook works, so its
803
+ // imported Claude `Stop` would duplicate it → suppress.
804
+ //
805
+ // For QUESTIONS there is no competing native hook to dedupe against: Cursor's
806
+ // own question signal (the `AskQuestion` `postToolUse` hook) is BROKEN upstream
807
+ // (Cursor docs: "postToolUse ... excluding the AskQuestion tool, which is a
808
+ // known bug") and Cursor has NO `Notification` event at all. So when Claude
809
+ // runs inside Cursor and asks a question, the imported Claude `Notification`
810
+ // hook is the ONLY signal we get. Suppressing it (the old behaviour) silently
811
+ // dropped every in-Cursor Claude question — the exact "questions don't notify"
812
+ // regression. We now always forward a genuine input-requiring notification,
813
+ // regardless of whether Cursor imported it. The per-turn `--dedupe-key` still
814
+ // coalesces any accidental repeat of the SAME question.
800
815
  const notificationType = parseClaudeNotificationType(hookStdin);
801
816
  if (notificationType !== undefined &&
802
817
  !CLAUDE_INPUT_NOTIFICATION_TYPES.has(notificationType)) {
@@ -1,2 +1,2 @@
1
1
  // Single source of truth for the CLI version. Keep in sync with package.json.
2
- export const VERSION = "0.6.7";
2
+ export const VERSION = "0.6.8";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trygocode/notify",
3
- "version": "0.6.7",
3
+ "version": "0.6.8",
4
4
  "description": "Free phone + branded desktop notifications for any coding agent (Cursor, Claude Code, OpenCode, Ralph/Homer) via the GoCode app.",
5
5
  "license": "MIT",
6
6
  "type": "module",