Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
4f4b1cf
feat(dashboard): improve audit log interactions
SantiagoDePolonia Aug 6, 2026
c50c3a8
feat(dashboard): refine interactions status controls
SantiagoDePolonia Aug 7, 2026
e344a5a
fix(dashboard): exclude attachment placeholders from cache fill
SantiagoDePolonia Aug 7, 2026
91b6bff
fix(dashboard): distinguish active interactions
SantiagoDePolonia Aug 7, 2026
1ff3e95
fix(dashboard): correlate response call aliases
SantiagoDePolonia Aug 7, 2026
da16d3d
feat(dashboard): animate interactions drawer
SantiagoDePolonia Aug 7, 2026
359eaef
fix(dashboard): animate interactions panel width
SantiagoDePolonia Aug 7, 2026
b70af9a
refactor(dashboard): use svelte slide for interactions
SantiagoDePolonia Aug 7, 2026
7f7930b
fix(dashboard): direct fullscreen exit toward drawer
SantiagoDePolonia Aug 7, 2026
1af1bc1
fix(dashboard): animate interactions visibility
SantiagoDePolonia Aug 7, 2026
eb686ba
fix(dashboard): preserve responses cache and refusals
SantiagoDePolonia Aug 7, 2026
e37eabc
fix(dashboard): remove interactions button shadow
SantiagoDePolonia Aug 7, 2026
4531bae
fix(dashboard): retain anthropic responses tool turns
SantiagoDePolonia Aug 7, 2026
3bdcdb1
fix(dashboard): hide repeated thread endpoints
SantiagoDePolonia Aug 7, 2026
8e03367
fix(dashboard): retain responses output tool use
SantiagoDePolonia Aug 7, 2026
6d535ae
fix(dashboard): highlight cached tool calls
SantiagoDePolonia Aug 7, 2026
323eadf
feat(dashboard): add interaction message controls
SantiagoDePolonia Aug 7, 2026
fe95614
fix(dashboard): keep interaction arrows square
SantiagoDePolonia Aug 7, 2026
d073d8c
fix(dashboard): scroll past final interaction message
SantiagoDePolonia Aug 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 20 additions & 102 deletions cmd/gomodel/docs/docs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

122 changes: 20 additions & 102 deletions docs/openapi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 0 additions & 67 deletions internal/admin/dashboard/static/dist/assets/index-BFUCi3g4.js

This file was deleted.

68 changes: 68 additions & 0 deletions internal/admin/dashboard/static/dist/assets/index-CaLK2wmu.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions internal/admin/dashboard/static/dist/index.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions internal/admin/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,15 @@ type auditLogListResponse struct {
Offset int `json:"offset"`
}

type auditConversationResponse struct {
AnchorID string `json:"anchor_id"`
Entries []auditLogEntryResponse `json:"entries"`

// Truncated reports that more session or linkage entries exist than were
// returned.
Truncated bool `json:"truncated,omitempty"`
}

type auditSessionResponse struct {
SessionID string `json:"session_id,omitempty"`
Count int `json:"count"`
Expand Down
25 changes: 17 additions & 8 deletions internal/admin/handler_audit.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,14 +420,15 @@ func (h *Handler) AuditLogDetail(c *echo.Context) error {
// @Summary Get the interaction session containing an audit log entry
// @Description Thread entries carry the request/response bodies the
// @Description transcript is built from; attempts, request revisions, and
// @Description response headers are omitted; redacted request headers are
// @Description retained so the dashboard can continue the same session.
// @Description response headers are omitted; redacted request headers and
// @Description per-request usage summaries are retained for continuation
// @Description and prompt-cache visualization.
// @Tags admin
// @Produce json
// @Security BearerAuth
// @Param log_id query string true "Anchor audit log entry ID"
// @Param limit query int false "Max entries in thread (default 40, max 200)"
// @Success 200 {object} auditlog.ConversationResult
// @Success 200 {object} auditConversationResponse
// @Failure 400 {object} core.GatewayError
// @Failure 401 {object} core.GatewayError
// @Router /admin/audit/conversation [get]
Expand All @@ -453,9 +454,9 @@ func (h *Handler) AuditConversation(c *echo.Context) error {
}

if h.auditReader == nil {
return c.JSON(http.StatusOK, auditlog.ConversationResult{
return c.JSON(http.StatusOK, auditConversationResponse{
AnchorID: logID,
Entries: []auditlog.LogEntry{},
Entries: []auditLogEntryResponse{},
})
}

Expand All @@ -478,9 +479,17 @@ func (h *Handler) AuditConversation(c *echo.Context) error {
if result.Entries == nil {
result.Entries = []auditlog.LogEntry{}
}
for i := range result.Entries {
slimConversationEntry(&result.Entries[i])
enriched, err := h.auditLogResponse(ctx, &auditlog.LogListResult{Entries: result.Entries})
if err != nil {
return handleError(c, err)
}
for i := range enriched.Entries {
slimConversationEntry(&enriched.Entries[i].LogEntry)
}

return c.JSON(http.StatusOK, result)
return c.JSON(http.StatusOK, auditConversationResponse{
AnchorID: result.AnchorID,
Entries: enriched.Entries,
Truncated: result.Truncated,
})
}
Loading