-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlifecycle_hooks.clj
More file actions
58 lines (48 loc) Β· 2.39 KB
/
lifecycle_hooks.clj
File metadata and controls
58 lines (48 loc) Β· 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
(ns lifecycle-hooks
"Lifecycle hooks: register callbacks for session start/end, tool use, prompts, and errors."
(:require [github.copilot-sdk :as copilot]
[github.copilot-sdk.helpers :as h]))
;; See examples/README.md for usage
(def defaults
{:prompt "Use the glob tool to list all .clj files in the examples directory. Just list the filenames."})
(defn run
[{:keys [prompt] :or {prompt (:prompt defaults)}}]
(let [fired-hooks (atom [])
record! (fn [hook-name data]
(swap! fired-hooks conj {:hook hook-name :data data}))]
(copilot/with-client-session
[session {:on-permission-request copilot/approve-all
:model "claude-haiku-4.5"
:hooks {:on-session-start
(fn [data _ctx]
(println "π Hook: session-start")
(record! :on-session-start data))
:on-session-end
(fn [data _ctx]
(println "π Hook: session-end")
(record! :on-session-end data))
:on-pre-tool-use
(fn [data _ctx]
(println "π§ Hook: pre-tool-use β" (:tool-name data))
(record! :on-pre-tool-use data)
{:approved true})
:on-post-tool-use
(fn [data _ctx]
(println "β
Hook: post-tool-use β" (:tool-name data))
(record! :on-post-tool-use data))
:on-user-prompt-submitted
(fn [data _ctx]
(println "π¬ Hook: user-prompt-submitted")
(record! :on-user-prompt-submitted data))
:on-error-occurred
(fn [data _ctx]
(println "β Hook: error-occurred")
(record! :on-error-occurred data))}}]
(println "\nPrompt:" prompt "\n")
(println "π€:" (h/query prompt :session session))
(println "\n--- Hook summary ---")
(let [events @fired-hooks
freqs (frequencies (map :hook events))]
(println "Total hooks fired:" (count events))
(doseq [[hook cnt] (sort-by (comp str key) freqs)]
(println (str " " hook " Γ " cnt)))))))