From f44bf26050827984d4cce0b540fe61ac3ae9a84c Mon Sep 17 00:00:00 2001 From: Aska Date: Thu, 20 Aug 2026 19:42:32 +0800 Subject: [PATCH] fix(build): stop ignoring cmd/cyrene sources The bare 'cyrene' .gitignore pattern matched the cmd/cyrene directory, so trace_adapter.go was never committed and a fresh clone failed to build (undefined: traceAdapter). Scope the pattern to the root binary and add the missing file. --- .gitignore | 2 +- backend/cmd/cyrene/trace_adapter.go | 51 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 backend/cmd/cyrene/trace_adapter.go diff --git a/.gitignore b/.gitignore index 29a7a45..de28a00 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ models.json *.dylib backend/cmd/*/main backend/cmd/*/cyrene -cyrene +/backend/cyrene # Go backend/vendor/ diff --git a/backend/cmd/cyrene/trace_adapter.go b/backend/cmd/cyrene/trace_adapter.go new file mode 100644 index 0000000..2ed7895 --- /dev/null +++ b/backend/cmd/cyrene/trace_adapter.go @@ -0,0 +1,51 @@ +package main + +import ( + "time" + + tracepkg "git.yeij.top/AskaEth/Cyrene_v2/services/ai-core/trace" +) + +// traceAdapter adapts trace.Logger to api.TraceLogger. +type traceAdapter struct{ *tracepkg.Logger } + +func (a *traceAdapter) Recent(n int) []map[string]any { + traces := a.Logger.Recent(n) + result := make([]map[string]any, len(traces)) + for i, t := range traces { + spans := make([]map[string]any, len(t.Spans)) + for j, s := range t.Spans { + children := make([]map[string]any, len(s.Children)) + for k, c := range s.Children { + children[k] = spanToMap(c) + } + spans[j] = spanToMap(s) + if len(children) > 0 { spans[j]["children"] = children } + } + result[i] = map[string]any{ + "id": t.ID, + "user_msg": t.UserMsg, + "start_time": t.StartTime.Format(time.RFC3339Nano), + "end_time": nil, + "status": t.Status, + "error": t.Error, + "spans": spans, + } + if !t.EndTime.IsZero() { + result[i]["end_time"] = t.EndTime.Format(time.RFC3339Nano) + } + } + return result +} + +func (a *traceAdapter) Clear() { a.Logger.Clear() } + +func spanToMap(s tracepkg.Span) map[string]any { + m := map[string]any{ + "name": s.Name, "label": s.Label, + "start_ms": s.StartMs, "duration_ms": s.Duration, + "status": s.Status, "detail": s.Detail, + } + if s.Data != nil { m["data"] = s.Data } + return m +}