server@0.92.0
Minor Changes
-
c08521f: Expose per-schedule state for AI integrations and rebuild the dashboard page around it. New aiIntegrations.listSchedules, setScheduleEnabled, and retrySchedule endpoints surface each sync schedule's status (pending/success/failed/auto-paused/disabled), last error, and timestamps, backed by a new user-controlled disabled_at pause that is independent of auto-pause. Each schedule also carries a backend-owned product-level stream identifier and kind (e.g. claude.chat.message events, cursor.usage and claude.chat.cost.usd metrics). The AI Integrations dashboard section moves to a dedicated page with one expandable row per provider connection showing its event and metric streams, each with live status, inline errors, retry, an independent pause toggle, and a link to where the imported data lands.
-
3ca88b2: Add organizationRemoteSessionIssuers.migrate API and UI to consolidate two remote identity providers that point at the same upstream authorization server, re-pointing the source's clients onto the target and soft-deleting the source without forcing anyone to re-authenticate
-
797c761: Secret scanning no longer flags an AWS access key id as a leaked secret — it's an identifier, used only to anchor detection of the co-located secret access key. Findings now mask just the secret value, not its surrounding label.
-
372b70b: Secret scanning now flags AWS secret access keys and session tokens, not just the access key id — and masks them while leaving the access key id (an identifier, not a secret) visible.
-
041e7af: feat: add Codex compliance cost polling
-
bb9aac8: Enable project assistants in the dashboard to emit Elements chart and generative UI blocks by sharing the canonical widget prompts between the client and server.
-
1b9057a: Add organization-scoped
externalKeysmanagement API for CRUD of external keys (AWS/GCP KMS) Gram signs with, each backed by an external credential. Per-provider create/update/get/delete plus a generic supertype-only list with an optional provider filter. Gated onorg:read/org:adminand audited under per-provider subjects (aws_kms_key,gcp_kms_key). -
628ffbc: Add organization-wide skill efficacy sampling settings endpoints.
-
ccdc7f4: Add project skill efficacy, activation, attributed session cost, estimated savings, trends, and scored-session insights.
-
ad4fcee: The
pending_messagesandtotal_messagesfields onRiskPolicyare now optional and omitted fromrisk.listPoliciesresponses. Computing them re-aggregated every risk result for the project on each list call, and no consumer read them from the list. Single-policy responses (risk.getRiskPolicy, create/update) still populate both fields, and analysis progress remains available viarisk.getRiskPolicyStatus. -
e980481: Add atomic Shadow MCP policy setup with project inventory URL selection, searchable modal review, and URL allow-rule reconciliation.
-
afe7ab4: Add public share links for skills. New management endpoints
skills.shareandskills.unsharemint and revoke an unguessable share token per skill, and the unauthenticatedskills.getSharedendpoint serves a redacted public view (name, display name, summary, latest content) by token. Archiving a skill revokes its active share link, share and revoke events are audited, and skill list/get responses surface the activeshare_token. -
fd17ed6: Split the tool-usage summary into per-panel endpoints so the MCP & Tools dashboard streams in each card as its data arrives instead of blocking on the slowest aggregate (INC-417).
getToolUsageSummarynow has seven sibling endpoints —getToolUsageTotals,getToolUsageTargets,getToolUsageUsers,getToolUsageTargetTimeSeries,getToolUsageUserTimeSeries,getToolUsageUsersByTarget, andgetToolUsageTargetToolBreakdown— each returning one section of the summary from the same shared query helpers and filter payload. The aggregate endpoint is unchanged for the platform agent tool that wants everything in one call. The MCP & Tools page fetches the seven sections in parallel (the cheap totals query gates the page shell; each panel shows its own loading skeleton and, if its section query fails, its own error state rather than a misleading empty chart), and the MCP overview "Top users" table now fetches only the users section it needs.
Patch Changes
- 5778d9a: Move the shadow-MCP inventory upsert off the synchronous hook request path. The capture previously ran inside SessionStart/ConfigChange handling and issued one
custom_domainsquery plus one sequential ClickHouse point-SELECT per inventory entry, holding hook responses for seconds on large inventories. The whole unit now runs detached from the request, the existing-row lookup is batched into one query per project, and the org's trusted hosts are resolved once per capture. Enforcement is unaffected — the shadow-MCP guard reads the Redis snapshot, which is still written synchronously. - 8197aec: Add the one-time production backfill runbook for chat_session_summaries, covering telemetry history before the materialized view's live-ingestion cutoff.
- 1705403: Add the chat_session_summaries ClickHouse table and materialized view: per-chat hourly session rollups (tokens, cost, message/tool-call counts, status, model, and filter-dimension value sets) so the org-scoped sessions list can read pre-aggregated data instead of scanning raw telemetry_logs.
- eb24395: Serve the org-scoped sessions list from the chat_session_summaries materialized view on windows of 48 hours or more, keeping narrow windows on the raw telemetry_logs scan. Filters, sorting, and cursor pagination translate onto the pre-aggregated table, and a sync test pins the shared session predicates across the Go constants and the MV definition.
- 3203363: Fix Claude Desktop agent sessions showing an opaque user ID instead of the user's name. The Anthropic compliance import no longer clobbers a previously resolved chat owner when a later sync activity carries no actor identity (empty strings defeated the upsert's COALESCE guard — NULL is passed instead), and connected-user email resolution is now case-insensitive on both the server and the dashboard. When a session's owner still can't be matched to an org member, the agent-sessions list and session details now show a tooltip explaining why.
- a0a0410: Trace every ClickHouse client call by default: the connection is wrapped once at creation so all Query/QueryRow/Select/Exec calls — from any repo, current or future — emit client spans labeled with the target table and issuing function (no SQL text), forward their span context to ClickHouse's server-side execution spans, and record a duration histogram (clickhouse.client.query.duration) per table, operation, and outcome for dashboards and monitors. The Logger's per-write wrapper spans and the telemetry.clickhouse.write.duration metric are removed — the connection layer now measures writes and reads in one place (no Datadog dashboards or monitors referenced the old metric).
- c2e07e2: Remove stale references to the retired prompt-injection ML classifier. Dashboard copy and the managed-assistant instructions now describe the LLM judge, which has been the only prompt-injection engine since the classifier and heuristics were dropped.
- 12fa9a3: Hook traces now begin on the device. The speakeasy-hooks binary starts the trace for each hook invocation and reports on-device telemetry — operating system, architecture, binary build, coding-agent harness, and on-device elapsed time — which the server stamps onto hook endpoint spans so hook performance can be measured end to end and issues diagnosed per platform.
- d382998: Serve the hooks@0.3.1 binary to hook installations. Previously pinned releases stay available so installations that have not regenerated their bootstrap script can still install.
- 50cd8c5: Serve the hooks@0.3.2 binary to hook installations. Previously pinned releases stay available so installations that have not regenerated their bootstrap script can still install.
- 7acc38a: Serve the hooks@0.3.3 binary to hook installations. Previously pinned releases stay available so installations that have not regenerated their bootstrap script can still install.
- 6bc2557: Record exact skill versions loaded by assistants for skill efficacy attribution.
- 54689df: Stop rejecting proxied MCP tool calls that do not echo back the internal
x-gram-toolset-idproperty. Gram no longer adds that property to tool schemas served by the remote MCP proxy, so calls to remote and tunneled MCP servers succeed even when the model omits the value or invents its own. - ccd67f6: Serve the hooks@0.3.0 binary to hook installations. Activated skills now upload their manifest content, so captured skills show a summary and a version instead of a name-only entry. The previously served 0.1.1 archives stay available so existing installations can still cold-install.
- aea545a: Simplify the ClickHouse connection wrapper to span-context forwarding only. The client-side spans, the
clickhouse.client.query.durationhistogram, and the operation/table label derivation introduced in the previous release are removed: per-query latency is investigated via ClickHouse's ownquery_log/opentelemetry_span_log(joined by trace id, which the wrapper still forwards on every call), and service-level latency comes from the ClickHouse Cloud Datadog integration. - 6ee26e5: Add
skill_versiongrouping and filtering to the generic telemetry query API. - 96f7f73: Skill summaries now stay in sync with the current version: publishing a new version — whether recorded manually or captured from a session — updates the skill's registry summary from the manifest description, so skills captured before their contents arrived no longer show "No summary" forever. The dashboard's Add Skills dialog on the plugin page is now a multi-select that batches distributions, keeps skills without a distributable version listed but disabled with the reason and a Fix link, and the skill page's distribution banner turns red and explains what blocks distribution when a skill has no versions or none pass validation. Version badges in the version history table no longer overlap the Validity column.
- fd17ed6: Speed up the MCP & Tools observability endpoints (INC-417): the tool-usage and tool-logs queries over
trace_summariesnow add a slop-paddedWHERE start_time_unix_nanopre-filter so the new minmax skip index prunes the scan to roughly the query window instead of the project's full 90-day history (the exact window predicate stays inHAVINGover the per-trace minimum), andGetToolUsageSummary/GetToolUsageFilterOptionsrun their independent aggregate queries concurrently instead of sequentially.