@@ -93,13 +93,16 @@ func onPrompt() {
9393 }
9494 ts := isoNow ()
9595
96+ cwd , headStart := captureCwdAndHead ()
9697 state := & State {
97- TraceID : traceID ,
98- StartTime : ts ,
99- SessionID : input .SessionID ,
100- Transcript : input .TranscriptPath ,
101- StartLine : startLine ,
102- LastFlush : time .Now ().Unix (),
98+ TraceID : traceID ,
99+ StartTime : ts ,
100+ SessionID : input .SessionID ,
101+ Transcript : input .TranscriptPath ,
102+ StartLine : startLine ,
103+ LastFlush : time .Now ().Unix (),
104+ Cwd : cwd ,
105+ HeadSHAStart : headStart ,
103106 }
104107 if err := SaveState (state ); err != nil {
105108 debugLog ("save state: %v" , err )
@@ -117,6 +120,7 @@ func onPrompt() {
117120 Tags : []string {"claude-code" },
118121 Input : map [string ]string {"text" : input .Prompt },
119122 }
123+ loadClaudeIdentity ().applyToTrace (& trace )
120124 if err := api .Post ("/traces" , trace ); err != nil {
121125 debugLog ("create trace: %v" , err )
122126 }
@@ -135,9 +139,10 @@ func onTool() {
135139 debugLog ("flushing (%ds)" , now - state .LastFlush )
136140 flush (state )
137141 state .LastFlush = now
138- if err := SaveState (state ); err != nil {
139- debugLog ("save state: %v" , err )
140- }
142+ }
143+
144+ if err := SaveState (state ); err != nil {
145+ debugLog ("save state: %v" , err )
141146 }
142147}
143148
@@ -151,6 +156,7 @@ func onStop() {
151156 }
152157
153158 flush (state )
159+ postTraceMetrics (state )
154160
155161 output := getLastOutput (state )
156162 ts := isoNow ()
@@ -180,6 +186,7 @@ func onSessionEnd() {
180186 state , err := LoadState (input .SessionID )
181187 if err == nil {
182188 flush (state )
189+ postTraceMetrics (state )
183190 ts := isoNow ()
184191 finalUpdate := map [string ]interface {}{
185192 "project_name" : config .Project ,
@@ -202,13 +209,17 @@ func onCompact() {
202209 traceID = uuid7 ()
203210 }
204211 ts := isoNow ()
212+ startLine := countLines (input .TranscriptPath )
213+ cwd , headStart := captureCwdAndHead ()
205214 state = & State {
206- TraceID : traceID ,
207- StartTime : ts ,
208- SessionID : input .SessionID ,
209- Transcript : input .TranscriptPath ,
210- StartLine : countLines (input .TranscriptPath ),
211- LastFlush : time .Now ().Unix (),
215+ TraceID : traceID ,
216+ StartTime : ts ,
217+ SessionID : input .SessionID ,
218+ Transcript : input .TranscriptPath ,
219+ StartLine : startLine ,
220+ LastFlush : time .Now ().Unix (),
221+ Cwd : cwd ,
222+ HeadSHAStart : headStart ,
212223 }
213224
214225 if config .ParentTraceID == "" {
@@ -220,6 +231,7 @@ func onCompact() {
220231 ThreadID : input .SessionID ,
221232 Tags : []string {"claude-code" },
222233 }
234+ loadClaudeIdentity ().applyToTrace (& trace )
223235 if err := api .Post ("/traces" , trace ); err != nil {
224236 debugLog ("compact: create trace: %v" , err )
225237 }
@@ -230,6 +242,7 @@ func onCompact() {
230242 }
231243 } else {
232244 flush (state )
245+ postTraceMetrics (state )
233246 }
234247
235248 compactTraceID := uuid7 ()
@@ -250,6 +263,7 @@ func onCompact() {
250263 ThreadID : input .SessionID ,
251264 Tags : []string {"claude-code" , "compaction" },
252265 }
266+ loadClaudeIdentity ().applyToTrace (& trace )
253267 if err := api .Post ("/traces" , trace ); err != nil {
254268 debugLog ("compact: create trace: %v" , err )
255269 }
@@ -272,6 +286,7 @@ func onCompact() {
272286 state .TraceID = compactTraceID
273287 state .StartLine = countLines (input .TranscriptPath )
274288 state .LastFlush = time .Now ().Unix ()
289+ state .Cwd , state .HeadSHAStart = captureCwdAndHead ()
275290 if err := SaveState (state ); err != nil {
276291 debugLog ("save state: %v" , err )
277292 }
@@ -802,3 +817,4 @@ func debugLog(format string, args ...interface{}) {
802817 fmt .Fprintf (f , "[%s] " , ts )
803818 fmt .Fprintf (f , format + "\n " , args ... )
804819}
820+
0 commit comments