@@ -88,7 +88,10 @@ local state = require('opencode.state')
8888
8989--- @class ServerStoppedEvent
9090
91- --- @alias EventName
91+ --- @class RestorePointCreatedEvent
92+ --- @field restore_point RestorePoint
93+
94+ --- @alias OpencodeEventName
9295--- | "installation.updated"
9396--- | "lsp.client.diagnostics"
9497--- | "message.updated"
@@ -109,6 +112,7 @@ local state = require('opencode.state')
109112--- | "custom.server_starting"
110113--- | "custom.server_ready"
111114--- | "custom.server_stopped"
115+ --- | "custom.restore_point.created"
112116
113117--- @class EventManager
114118--- @field events table<string , function[]> Event listener registry
150154--- @overload fun ( self : EventManager , event_name : " custom.server_starting" , callback : fun ( data : ServerStartingEvent ): nil )
151155--- @overload fun ( self : EventManager , event_name : " custom.server_ready" , callback : fun ( data : ServerReadyEvent ): nil )
152156--- @overload fun ( self : EventManager , event_name : " custom.server_stopped" , callback : fun ( data : ServerStoppedEvent ): nil )
153- --- @param event_name EventName The event name to listen for
157+ --- @overload fun ( self : EventManager , event_name : " custom.restore_point.created" , callback : fun ( data : RestorePointCreatedEvent ): nil )
158+ --- @param event_name OpencodeEventName The event name to listen for
154159--- @param callback function Callback function to execute when event is triggered
155160function EventManager :subscribe (event_name , callback )
156161 if not self .events [event_name ] then
180185--- @overload fun ( self : EventManager , event_name : " custom.server_starting" , callback : fun ( data : ServerStartingEvent ): nil )
181186--- @overload fun ( self : EventManager , event_name : " custom.server_ready" , callback : fun ( data : ServerReadyEvent ): nil )
182187--- @overload fun ( self : EventManager , event_name : " custom.server_stopped" , callback : fun ( data : ServerStoppedEvent ): nil )
183- --- @param event_name EventName The event name
188+ --- @overload fun ( self : EventManager , event_name : " custom.restore_point.created" , callback : fun ( data : RestorePointCreatedEvent ): nil )
189+ --- @param event_name OpencodeEventName The event name
184190--- @param callback function The callback function to remove
185191function EventManager :unsubscribe (event_name , callback )
186192 local listeners = self .events [event_name ]
@@ -197,14 +203,21 @@ function EventManager:unsubscribe(event_name, callback)
197203end
198204
199205--- Emit an event to all subscribers
200- --- @param event_name EventName The event name
206+ --- @param event_name OpencodeEventName The event name
201207--- @param data any Data to pass to event listeners
202208function EventManager :emit (event_name , data )
203209 local listeners = self .events [event_name ]
204210 if not listeners then
205211 return
206212 end
207213
214+ local event = { type = event_name , properties = data }
215+
216+ if require (' opencode.config' ).debug .capture_streamed_events then
217+ table.insert (self .captured_events , vim .deepcopy (event ))
218+ end
219+
220+ -- schedule events to allow for similar pieces of state to be updated
208221 for _ , callback in ipairs (listeners ) do
209222 pcall (callback , data )
210223 end
@@ -269,22 +282,11 @@ function EventManager:_subscribe_to_server_events(server)
269282 local api_client = state .api_client
270283
271284 local emitter = function (event )
272- -- schedule events to allow for similar pieces of state to be updated
273285 vim .schedule (function ()
274286 self :emit (event .type , event .properties )
275287 end )
276288 end
277289
278- if require (' opencode.config' ).debug .capture_streamed_events then
279- local _emitter = emitter
280- emitter = function (event )
281- -- make a deepcopy to make sure we're saving a clean copy
282- -- (we modify event in renderer)
283- table.insert (self .captured_events , vim .deepcopy (event ))
284- _emitter (event )
285- end
286- end
287-
288290 self .server_subscription = api_client :subscribe_to_events (nil , emitter )
289291end
290292
@@ -312,7 +314,7 @@ function EventManager:get_event_names()
312314end
313315
314316--- Get number of subscribers for an event
315- --- @param event_name EventName The event name
317+ --- @param event_name OpencodeEventName The event name
316318--- @return number Number of subscribers
317319function EventManager :get_subscriber_count (event_name )
318320 local listeners = self .events [event_name ]
0 commit comments