Skip to content

chore(repo): version packages - #502

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore(repo): version packages#502
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

evlog@2.25.0

Minor Changes

  • #501 16d5323 Thanks @HugoRCD! - Cover the eve 0.30 event surface. evlog/eve now requires eve >= 0.30 — the peer range moves from >=0.24.3. The eve integration is still beta and its peer floor moves with it, so this ships as a minor; nothing outside evlog/eve is affected. Agents on an older eve keep working on the previous evlog — upgrade eve first.

    The wide event now carries what eve started reporting since 0.24:

    • eve.runtime — eve version, agent id, model, and the deployed git sha, branch and date, from session.started
    • eve.parent — parent and root session ids for a subagent run, so a drain can rebuild the delegation tree
    • eve.authorizations — connection sign-ins with their outcome, reason and duration; a turn parked on one ends as eve.phase: 'awaiting-authorization'
    • eve.compaction — how many compactions ran, on which model, and how full the context was when the first one triggered
    • eve.contextCleared, eve.stepFailures and eve.failedSteps — a model call that failed and was retried no longer disappears from a turn that ends up succeeding
    • ai.costUsd — the cost eve reports, used in place of the cost pricing map when available. ai.model falls back to the model reported at session start, so model is only needed for dynamic-model agents
    • subagents record durationMs and a started status

    message replaces redactMessage with three modes: 'omit' (default), 'preview' (text truncated to messagePreviewLength, attachments reduced to their type and media type) and 'full'. Attachment parts were previously not redacted at all. redactMessage still works and is deprecated.

    sessionEvent: true adds one wide event per session on top of the per-turn ones, rolling up turns, tokens, cost, tools used, compactions and authorizations — one row per conversation, which is what makes tail sampling useful on an agent.

  • #506 f8fb677 Thanks @HugoRCD! - Close the remaining gaps in the eve integration, and add defineEvlogInstrumentation().

    A wide event and an Agent Runs span describe the same turn, but nothing joined them: you could not jump from a trace in Braintrust, Datadog or the Vercel dashboard to the event in your drain. Export the new definition from agent/instrumentation.ts and every model-call span carries evlog.request_id and evlog.session_id, the values the wide event reports as requestId and eve.sessionId:

    // agent/instrumentation.ts
    import { defineEvlogInstrumentation } from "evlog/eve";
    
    export default defineEvlogInstrumentation();

    Without setup, OpenTelemetry export is untouched and eve keeps writing its local traces. functionId, recordInputs, recordOutputs and traceChannelRequests pass through to eve.

    Three more of eve's stream events now reach the wide event:

    • eve.reasoningblocks and chars, the size of the model's thinking. The reasoning text itself is never recorded.
    • message.responseChars, and message.response once message is 'preview' or 'full' — the agent's answer, following the same rule as the incoming message.
    • eve.result — the structured result of an agent with an output schema.
  • #507 1838d60 Thanks @HugoRCD! - evlog/eve records the caller, and composes with another observability backend.

    An agent has exactly one agent/instrumentation.ts, and every observability item in eve's registry writes it. defineEvlogInstrumentation() owns that file, so it only fits an agent whose instrumentation is evlog's alone. The new evlogRuntimeContext contributes evlog's span attributes to instrumentation you already have, the way the other integrations do:

    import { defineInstrumentation } from 'eve/instrumentation'
    import { evlogRuntimeContext } from 'evlog/eve'
    
    export default defineInstrumentation({
      setup: ({ agentName }) => registerOTel({ serviceName: agentName, spanProcessors: [...] }),
      events: {
        'step.started': input => ({
          runtimeContext: {
            ...evlogRuntimeContext(input),
            posthog_distinct_id: input.session.auth.current?.principalId ?? '',
          },
        }),
      },
    })

    It returns undefined outside a tracked turn, so spreading it adds nothing.

    Turn and session events now carry eve.caller with the principal eve resolved at dispatch: principalId, principalType and authenticator. On a multi-user channel that is the dimension you group cost, volume and refusals by, and it was previously unreachable — the enrich hook is HTTP-shaped and exposes no path to the eve session. subject and attributes are deliberately excluded, since a channel may put a name or an email in them.

Patch Changes

  • #500 8ffba92 Thanks @HugoRCD! - Emit a wide event for eve turns that end without turn.completed or turn.failed.

    A turn cancelled by eve produced no wide event, and its logger, accumulator and session slot stayed in memory for good: LRU eviction skips any session that still has an active turn, so nothing ever reclaimed them. turn.cancelled now closes the turn on its own terminal path — status 499, eve.phase: 'cancelled', level info, because cancellation is not a failure in eve's model.

    session.failed and session.completed flush any turn still open for that session and drop its carried-over context, which also ends the indefinite retention of snapshots for finished sessions.

  • #510 68b05fa Thanks @HugoRCD! - The file system drain now detects an unwritable directory reliably.

    The previous check probed with mkdir({ recursive: true }), which is a no-op on a directory that already exists and therefore succeeds even when that directory is read-only. A deployment whose log directory already existed still threw on every batch. The probe also ran per call rather than per resolved state, so concurrent batches could each warn.

    The write itself is now the check: once an append fails with EROFS, EACCES or EPERM, the drain is disabled for that directory and warns once. Batches already in flight when that happens still attempt their own append. Any other failure, including a full disk, is reported by the drain as before.

  • #509 2dfde11 Thanks @HugoRCD! - The file system drain disables itself when its directory is not writable.

    createFsDrain() guarded neither its mkdir nor its appendFile, so attaching it on a serverless host — where everything outside the temp directory is read-only — threw once per batch for the lifetime of the deployment, and the events went nowhere regardless. Callers had to guess at the environment to avoid it:

    // no longer needed
    const drain = process.env.VERCEL !== "1" ? createFsDrain() : undefined;

    The drain now disables itself once it observes an EROFS, EACCES or EPERM write failure for that directory, warning a single time, the same way it already disables itself in the Edge runtime. Attach it unconditionally. Any other failure — a full disk, a genuine bug — still propagates.

@evlog/cli@0.5.1

Patch Changes

@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
evi Ready Ready Preview Aug 8, 2026 2:21pm
evlog-docs Ready Ready Preview, v0 Aug 8, 2026 2:21pm
evlog-render-lab Ready Ready Preview Aug 8, 2026 2:21pm
evlog-telemetry Ready Ready Preview Aug 8, 2026 2:21pm
just-use-evlog Ready Ready Preview Aug 8, 2026 2:21pm

Request Review

@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 1b25ae8 to 1043e26 Compare August 6, 2026 20:09
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 1043e26 to c0751dc Compare August 7, 2026 07:55
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from c0751dc to b87ebb4 Compare August 7, 2026 18:23
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from b87ebb4 to b6f9ea6 Compare August 7, 2026 20:11
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 335ce5f to ae73da7 Compare August 7, 2026 21:39
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from ae73da7 to 2944315 Compare August 7, 2026 22:01
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 2944315 to cc1ff25 Compare August 7, 2026 22:49
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from cc1ff25 to a1f8f61 Compare August 7, 2026 23:02
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from a1f8f61 to 4ebb00a Compare August 7, 2026 23:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants