add ping toggle

This commit is contained in:
2026-01-08 03:01:26 -05:00
parent f9ec72d808
commit bec42359e0
3 changed files with 129 additions and 28 deletions
+39 -18
View File
@@ -18,7 +18,8 @@
(System/getenv "IAMWAITING_USER_ID"))
toggles (or (:toggles config)
{:idle-prompt true
:permission-prompt true})]
:permission-prompt true
:permission-prompt-ping true})]
{:webhook-url webhook-url
:user-id user-id
:toggles toggles}))
@@ -38,7 +39,7 @@
(catch Exception e
{:success false :error (.getMessage e)})))
(defn format-waiting-message [event-data user-id]
(defn format-waiting-message [event-data user-id toggles]
"Format a message for Claude waiting event"
(let [cwd (or (:cwd event-data) (System/getProperty "user.dir"))
project-name (fs/file-name cwd)
@@ -54,8 +55,9 @@
;; Check if this is a permission prompt
is-permission-prompt? (or (= notification-type "permission_prompt")
(some? permission-mode))
;; Ping user if configured and it's a permission prompt
user-ping (when (and user-id is-permission-prompt?)
;; Ping user if configured, it's a permission prompt, and ping toggle is enabled
ping-enabled? (get toggles :permission-prompt-ping true)
user-ping (when (and user-id is-permission-prompt? ping-enabled?)
(str "<@" user-id "> "))]
(str user-ping
"⏳ **Claude is waiting** in `" project-name "`\n"
@@ -99,10 +101,20 @@
(let [perm-response (str/lower-case (str/trim (read-line)))
perm-enabled? (not= perm-response "n")
;; Ask about ping preference if user ID provided
ping-enabled? (if user-id
(do
(print "@mention you on permission prompts? (y/n, default: y): ")
(flush)
(let [ping-response (str/lower-case (str/trim (read-line)))]
(not= ping-response "n")))
true)
;; Build config with toggles
config (cond-> {:webhook-url webhook-url
:toggles {:idle-prompt idle-enabled?
:permission-prompt perm-enabled?}}
:permission-prompt perm-enabled?
:permission-prompt-ping ping-enabled?}}
user-id (assoc :user-id user-id))]
;; Create config directory
@@ -112,7 +124,8 @@
(spit config-file (pr-str config))
(println "\n✓ Configuration saved to" config-file)
(when user-id
(println "✓ User ID configured - you will be @mentioned on permission prompts"))
(println (str "✓ User ID configured - you will be @mentioned on permission prompts: "
(if ping-enabled? "enabled" "disabled"))))
(println (str "✓ Idle prompts: " (if idle-enabled? "enabled" "disabled")))
(println (str "✓ Permission prompts: " (if perm-enabled? "enabled" "disabled")))
(println "\nTest the webhook with: ./iamwaiting test"))))))
@@ -177,7 +190,7 @@
(println (str "Notification disabled for " toggle-key)))
;; Original notification logic
(let [message (format-waiting-message event-data (:user-id config))
(let [message (format-waiting-message event-data (:user-id config) (:toggles config))
result (send-discord-webhook (:webhook-url config) message)]
(if (:success result)
(println "✓ Notification sent")
@@ -191,6 +204,7 @@
feature-key (case feature
"idle-prompt" :idle-prompt
"permission-prompt" :permission-prompt
"permission-prompt-ping" :permission-prompt-ping
nil)
action-bool (case action
"on" true
@@ -200,7 +214,7 @@
(cond
(nil? feature-key)
(do
(println "❌ Invalid feature. Use: idle-prompt | permission-prompt")
(println "❌ Invalid feature. Use: idle-prompt | permission-prompt | permission-prompt-ping")
(System/exit 1))
(nil? action-bool)
@@ -219,21 +233,27 @@
(let [config (load-config)
toggles (or (:toggles config)
{:idle-prompt true
:permission-prompt true})]
:permission-prompt true
:permission-prompt-ping true})
user-id (:user-id config)]
(println "📊 Current Toggle Status\n")
(println (str "Idle prompts: " (if (:idle-prompt toggles) "✅ enabled" "❌ disabled")))
(println (str "Permission prompts: " (if (:permission-prompt toggles) "✅ enabled" "❌ disabled")))))
(println (str "Idle prompts: " (if (:idle-prompt toggles) "✅ enabled" "❌ disabled")))
(println (str "Permission prompts: " (if (:permission-prompt toggles) "✅ enabled" "❌ disabled")))
(println (str "Permission ping: " (if (:permission-prompt-ping toggles) "✅ enabled" "❌ disabled")))
(when user-id
(println (str "\n👤 User ID configured: " user-id)))))
(defn show-help []
(println "iamwaiting - Send Discord notifications when Claude is waiting")
(println "")
(println "Usage:")
(println " iamwaiting setup Set up Discord webhook configuration")
(println " iamwaiting test Test webhook configuration")
(println " iamwaiting toggle status Show current toggle status")
(println " iamwaiting toggle idle-prompt <on|off> Toggle idle prompt notifications")
(println " iamwaiting toggle permission-prompt <on|off> Toggle permission prompt notifications")
(println " iamwaiting [event-data-json] Send waiting notification")
(println " iamwaiting setup Set up Discord webhook configuration")
(println " iamwaiting test Test webhook configuration")
(println " iamwaiting toggle status Show current toggle status")
(println " iamwaiting toggle idle-prompt <on|off> Toggle idle prompt notifications")
(println " iamwaiting toggle permission-prompt <on|off> Toggle permission prompt notifications")
(println " iamwaiting toggle permission-prompt-ping <on|off> Toggle @mentions on permission prompts")
(println " iamwaiting [event-data-json] Send waiting notification")
(println "")
(println "Configuration:")
(println " Config file: ~/.iamwaiting/config.edn")
@@ -258,8 +278,9 @@
"status" (show-toggle-status)
"idle-prompt" (toggle-feature "idle-prompt" (nth args 2 nil))
"permission-prompt" (toggle-feature "permission-prompt" (nth args 2 nil))
"permission-prompt-ping" (toggle-feature "permission-prompt-ping" (nth args 2 nil))
(do
(println "Usage: iamwaiting toggle <status|idle-prompt|permission-prompt> [on|off]")
(println "Usage: iamwaiting toggle <status|idle-prompt|permission-prompt|permission-prompt-ping> [on|off]")
(System/exit 1))))
"help" (show-help)
"--help" (show-help)