6363
6464 {:chat-welcome-message (welcome-message config)})))
6565
66+ (defn ^:private send-progress! [db* messenger params]
67+ (when-not (:stopping @db*)
68+ (try
69+ (messenger/progress messenger params)
70+ (catch Exception _))))
71+
6672(defn initialized [{:keys [db* messenger config metrics start-remote-server!] :as components}]
6773 (metrics/task metrics :eca/initialized
6874 (let [sync-models-and-notify!
98104 messenger
99105 db*)))))))]
100106 (swap! db* assoc-in [:config-updated-fns :sync-models ] #(sync-models-and-notify! %))
101- (shared/future* config (sync-models-and-notify! config))))
102- (when (get-in config [:remote :enabled ])
103- (start-remote-server! components))
104- (future
105- (Thread/sleep 1000 ) ; ; wait chat window is open in some editors.
106- (when-let [error (config/validation-error )]
107- (messenger/chat-content-received
108- messenger
109- {:role " system"
110- :content {:type :text
111- :text (format " \n Failed to parse '%s' config, check stderr logs, double check your config and restart\n "
112- error)}}))
113- (config/listen-for-changes! db*))
114- (future
115- ; ; Resolve plugins before MCP init so plugin-provided servers are included
116- (try
117- (let [plugins-config (:plugins config)]
118- (when (seq plugins-config)
119- (reset! config/plugin-components* (f.plugins/resolve-all! plugins-config))))
120- (catch Exception e
121- (logger/warn " [PLUGINS]" " Plugin resolution failed:" (.getMessage e))))
122- (config/deliver-plugins-resolved! )
123- (let [config (config/all @db*)]
124- ; ; Trigger sessionStart with plugin-aware config
125107 (shared/future* config
126- (f.hooks/trigger-if-matches! :sessionStart
127- (f.hooks/base-hook-data @db*)
128- {}
129- @db*
130- config))
131- (f.tools/init-servers! db* messenger config metrics)))
132- (future
133- (cache/cleanup-tool-call-outputs! )
134- (db/cleanup-old-chats! db* metrics)))
108+ (do (send-progress! db* messenger {:type " start" :taskId " models" :title " Syncing models" })
109+ (sync-models-and-notify! config)
110+ (send-progress! db* messenger {:type " finish" :taskId " models" :title " Syncing models" }))))
111+ (when (get-in config [:remote :enabled ])
112+ (send-progress! db* messenger {:type " start" :taskId " remote-server" :title " Starting remote server" })
113+ (start-remote-server! components)
114+ (send-progress! db* messenger {:type " finish" :taskId " remote-server" :title " Starting remote server" }))
115+ (future
116+ (Thread/sleep 1000 ) ; ; wait chat window is open in some editors.
117+ (when-let [error (config/validation-error )]
118+ (messenger/chat-content-received
119+ messenger
120+ {:role " system"
121+ :content {:type :text
122+ :text (format " \n Failed to parse '%s' config, check stderr logs, double check your config and restart\n "
123+ error)}}))
124+ (config/listen-for-changes! db*))
125+ (future
126+ (send-progress! db* messenger {:type " start" :taskId " plugins" :title " Resolving plugins" })
127+ (try
128+ (let [plugins-config (:plugins config)]
129+ (when (seq plugins-config)
130+ (reset! config/plugin-components* (f.plugins/resolve-all! plugins-config))))
131+ (catch Exception e
132+ (logger/warn " [PLUGINS]" " Plugin resolution failed:" (.getMessage e))))
133+ (send-progress! db* messenger {:type " finish" :taskId " plugins" :title " Resolving plugins" })
134+ (config/deliver-plugins-resolved! )
135+ (let [config (config/all @db*)]
136+ ; ; Trigger sessionStart with plugin-aware config
137+ (shared/future* config
138+ (f.hooks/trigger-if-matches! :sessionStart
139+ (f.hooks/base-hook-data @db*)
140+ {}
141+ @db*
142+ config))
143+ (send-progress! db* messenger {:type " start" :taskId " mcp-servers" :title " Initializing MCP servers" })
144+ (f.tools/init-servers! db* messenger config metrics)
145+ (send-progress! db* messenger {:type " finish" :taskId " mcp-servers" :title " Initializing MCP servers" })))
146+ (future
147+ (send-progress! db* messenger {:type " start" :taskId " cleanup" :title " Cleaning up" })
148+ (cache/cleanup-tool-call-outputs! )
149+ (db/cleanup-old-chats! db* metrics)
150+ (send-progress! db* messenger {:type " finish" :taskId " cleanup" :title " Cleaning up" }))))
135151
136152(defn workspace-did-change-folders [{:keys [db*]} params]
137153 (let [{:keys [added removed]} (:event params)
156172 config)
157173
158174 ; ; 3. Then shutdown
159- (f.mcp/shutdown! db*)
160175 (swap! db* assoc :stopping true )
176+ (f.mcp/shutdown! db*)
161177 nil ))
162178
163179(defn chat-prompt [{:keys [messenger db* config metrics]} params]
292308 [{:keys [db* config metrics messenger]} params]
293309 (metrics/task metrics :eca/rewrite-prompt
294310 (handle-expected-errors
295- (f.rewrite/prompt params db* config messenger metrics))))
311+ (f.rewrite/prompt params db* config messenger metrics))))
0 commit comments