server@0.93.0
Minor Changes
-
5e8e13f: Speed up the Employee Enrollment page (DNO-618).
telemetry.searchUsersgains ametricslevel:full(default, unchanged) computes the complete set of aggregates, whilebasicprojects only user identity, first/last activity, input/output token sums, and the raw user ids the account-enrichment join needs — skipping the per-tool and per-hook-source map aggregations (sumMapIf), chat-cardinality (uniqExactIf), and cost/cache/avg columns that dominate the per-row ClickHouse work. The enrollment list, which renders only the lean fields (linked accounts come from Postgres), now requestsbasic, so its query no longer builds breakdowns it discards. -
cc076e2: Serve the Employee Enrollment list from the pre-aggregated
attribute_metrics_summariesview (DNO-618).telemetry.searchUsersgains asourcelevel:logs(default, unchanged) scans rawtelemetry_logs, whileagent_metricsreads the pre-aggregated view — canonical observed agent usage (Claude Code, Codex, Cursor, Claude Chat), keyed by email — which is far cheaper (the enrollment query drops from ~seconds to tens of milliseconds on large projects). Identities that never carry an email in the window (which have no token usage) are surfaced separately from raw logs with activity but no token counts, so unknown users stay visible.Note the enrollment token numbers change: they now reflect the same canonical agent-usage measure the costs/billing pages use, rather than the previous raw
gen_ai.usage.*sum that mixed in Gram-hosted completions and duplicate usage-metric rows while missing Claude Code OTEL usage. Only the enrollment list opts in viasource=agent_metrics; all othersearchUsersconsumers are unchanged. -
d85fa7a: Add tool metadata management methods to the mcpServers service.
Two batch writes with deliberately different contracts:
setToolMetadataBatchis authoritative — it upserts every tool in the payload and soft-deletes every stored tool the payload omits.addToolMetadataBatchis strictly additive — it inserts the tools in the payload, leaves stored tools absent from the payload untouched, and deletes nothing. A tool that already has a live stored entry fails the whole batch with a 409 rather than being upserted or skipped, so a caller working from a stale view of stored state is told so instead of having the discrepancy silently absorbed. A tool whose only prior entry is soft-deleted is recorded fresh.
Also adds
listToolMetadata,setToolMetadata, anddeleteToolMetadata. Mutations require mcp:write, are scoped to the target MCP server, and record one collection-level audit entry per write; reads require mcp:read.
Patch Changes
- c4f6057: Show actionable permission errors when an organization's access policy blocks an MCP server or tool.