Skip to content

Commit 309348f

Browse files
ericdalloeca-agent
andcommitted
Fix sessionStart/chatStart hook race condition
sessionStart was fired in a fire-and-forget future* after deliver-plugins-resolved!, allowing chatStart (which waits on await-plugins-resolved!) to run before sessionStart completed. Now sessionStart runs synchronously before deliver-plugins-resolved!, guaranteeing it completes before any chatStart hook can fire. 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca-agent <git@eca.dev>
1 parent 43478e4 commit 309348f

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/eca/handlers.clj

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,16 @@
133133
(catch Exception e
134134
(logger/warn "[PLUGINS]" "Plugin resolution failed:" (.getMessage e))))
135135
(send-progress! db* messenger {:type "finish" :taskId "plugins" :title "Resolving plugins"})
136-
(config/deliver-plugins-resolved!)
137136
(let [config (config/all @db*)]
138-
;; Trigger sessionStart with plugin-aware config
139-
(shared/future* config
140-
(f.hooks/trigger-if-matches! :sessionStart
141-
(f.hooks/base-hook-data @db*)
142-
{}
143-
@db*
144-
config))
137+
;; Trigger sessionStart before delivering plugins-resolved so it
138+
;; completes before any chatStart hook can fire (chatStart waits
139+
;; on await-plugins-resolved!).
140+
(f.hooks/trigger-if-matches! :sessionStart
141+
(f.hooks/base-hook-data @db*)
142+
{}
143+
@db*
144+
config)
145+
(config/deliver-plugins-resolved!)
145146
(send-progress! db* messenger {:type "start" :taskId "mcp-servers" :title "Initializing MCP servers"})
146147
(f.tools/init-servers! db* messenger config metrics)
147148
(send-progress! db* messenger {:type "finish" :taskId "mcp-servers" :title "Initializing MCP servers"})))

0 commit comments

Comments
 (0)