@@ -51,6 +51,12 @@ enum AgentHookInstaller {
5151 marker: wrapperMarker,
5252 content: buildCodexWrapper ( )
5353 )
54+ ensureFile (
55+ url: AgentStatusPaths . copilotCliWrapperPath,
56+ mode: 0o755 ,
57+ marker: wrapperMarker,
58+ content: buildCopilotCliWrapper ( )
59+ )
5460
5561 ensureFile (
5662 url: AgentStatusPaths . opencodeGlobalPluginPath,
@@ -295,6 +301,61 @@ enum AgentHookInstaller {
295301 """
296302 }
297303
304+ private static func buildCopilotCliWrapper( ) -> String {
305+ let binDir = AgentStatusPaths . binDir. path
306+ let eventsDir = AgentStatusPaths . eventsCacheDir. path
307+ return """
308+ #!/bin/bash
309+ \( wrapperMarker)
310+ # Wrapper for Copilot CLI: emits Start/Stop lifecycle events.
311+
312+ \( pathAugmentSnippet ( ) )
313+
314+ find_real_binary() {
315+ local name= " $1 "
316+ local IFS=:
317+ for dir in $PATH; do
318+ [ -z " $dir " ] && continue
319+ dir= " ${dir%/} "
320+ if [ " $dir " = " \( binDir) " ]; then
321+ continue
322+ fi
323+ if [ -x " $dir/$name " ] && [ ! -d " $dir/$name " ]; then
324+ printf " %s \\ n " " $dir/$name "
325+ return 0
326+ fi
327+ done
328+ return 1
329+ }
330+
331+ REAL_BIN= " $(find_real_binary " copilot " ) "
332+ if [ -z " $REAL_BIN " ]; then
333+ echo " Ghostree: copilot not found in PATH. Install it and ensure it is on PATH, then retry. " >&2
334+ exit 127
335+ fi
336+
337+ _EVENTS_DIR= " ${GHOSTREE_AGENT_EVENTS_DIR:- \( eventsDir) } "
338+
339+ # Emit synthetic Start event
340+ printf '{ \" timestamp \" : \" %s \" , \" eventType \" : \" Start \" , \" cwd \" : \" %s \" } \\ n' \\
341+ " $(date -u +%Y-%m-%dT%H:%M:%S.000Z) " \\
342+ " $(pwd -P 2>/dev/null || pwd) " \\
343+ >> " $_EVENTS_DIR/agent-events.jsonl " 2>/dev/null
344+
345+ # Run copilot and capture exit code
346+ " $REAL_BIN " " $@ "
347+ _EXIT=$?
348+
349+ # Emit synthetic Stop event
350+ printf '{ \" timestamp \" : \" %s \" , \" eventType \" : \" Stop \" , \" cwd \" : \" %s \" } \\ n' \\
351+ " $(date -u +%Y-%m-%dT%H:%M:%S.000Z) " \\
352+ " $(pwd -P 2>/dev/null || pwd) " \\
353+ >> " $_EVENTS_DIR/agent-events.jsonl " 2>/dev/null
354+
355+ exit $_EXIT
356+ """
357+ }
358+
298359 private static func buildOpenCodePlugin( ) -> String {
299360 let marker = AgentStatusPaths . opencodePluginMarker
300361 return """
0 commit comments