Repository navigation
v1.1.0-rc.2
Pre-release
Pre-release
·
163 commits
to main
since this release
Second release candidate of 1.1.0, themed "Real adapters, real parity". The runner integrations behave the same on every supported version: @attest-ai/vitest loads and reports cost on Vitest 3 and 4, and the Python helpers keep trace metadata, accept plain agents and fail an offline run in one line. Safe defaults landed early: shipped skills no longer auto-confirm a recorded command, --attest-egress=block covers provider calls through HTTP proxies, and attest capture templates session identifiers and redacts every server-sent event. Changes that alter results are marked Behavior change below.
Changed
- Guides document the
@attest-ai/vitest/reporterand/setupsubpaths for Vitest 3 and 4, the removal ofAttestCostReporter, the Pythonset_metadatamerge, string-returning@agent, and the one-line offline engine failure. - CI runs the
@attest-ai/vitestsuite on the newest Vitest 3.x and 4.x and runspnpm lintfor the TypeScript SDK; both are required checks. - Behavior change: a TypeScript lint finding or a failure on either Vitest major now fails the
requiredcheck.
Fixed
AttestReporterand@attest-ai/vitest/setupload on Vitest 3 (they importedvitestat runtime, failing with "Vitest failed to access its internal state"); the peer range>=3.0.0 <5is now exercised on both majors.@attest-ai/vitest/setupexportssetupandteardown, soglobalSetup: ["@attest-ai/vitest/setup"]works and downloads the engine once before tests run.- The unevaluated-
expect()-chain guard now fails the right test on Vitest before 4.1. pnpm lintinsdks/typescriptruns Biome with a committed config; it checked nothing before.TraceBuilder.set_metadatamerges fields across calls instead of replacing the metadata.@agentwraps a string return as{"message": ...}, accepts positional arguments and honorsadapter=for provider adapters.- A failed engine download ends the run with one line naming
ATTEST_ENGINE_PATH; the download notice prints outside pytest capture. - Behavior change: a cost or latency breach set through separate
set_metadatacalls now fails instead of skipping asmissing_evidence. - Behavior change:
@agent(adapter=...)with a non-provider, non-manual adapter raisesTypeErrorat decoration instead of being ignored. - A TypeScript engine that exits during startup now fails with its stderr:
EngineManager.launchwaits (bounded, 1 s) for the exit report on stdout EOF before terminating the child.
Security
- Shipped skills no longer tell agents to pass
--yestoattest capture --refresh. They show the recordedsource.commandwith its SHA-256 and stop for human confirmation. - Behavior change:
--attest-egress=block/ATTEST_EGRESS=blocknow also refuses provider calls made throughHTTP(S)_PROXY(CONNECT and absolute-URI targets), in both SDKs; calls that previously passed through a proxy now fail withEgressBlockedError. - The egress guard's provider host list now includes AWS Bedrock, Vertex AI, Mistral, Groq, OpenRouter and Together.
- Documented limit: child processes, SOCKS proxies and TLS-wrapped proxy connections are not covered.
- Behavior change:
attest captureandattest capture --check-redactionrefuse a.envthat is not a regular file or is over 1 MiB;attest replay(and--serve) warns once on stderr and ignores it. - Behavior change: a replay recorded before this change computes a different key for requests that carry
metadata.user_idor Claude Code environment reminders; keys are recomputed on load, so existing fixtures still replay, andattest capture --refreshrewrites them with templated identifiers. attest capturetemplates Claude Codemetadata.user_id(device, account and session ids) and leaves it out of the replay key, and normalizes environment<system-reminder>blocks for matching, so a replay in a new session hits.attest capturedecodes and redacts every server-sent event, so a secret containing a quote or backslash in a non-delta event such asresponse.completedno longer reaches the fixture;attest capture --check-redactionflags it without printing it.- Redaction covers JWTs, Azure, Mistral and Cohere keys introduced by
api-key,subscription-key,access-keyorclient_secret, those names as query parameters and headers, and the secret values in the working directory's.env. - Replay-key normalization of Claude Code environment values is limited to Claude Code's own sections (
# Environment,<env>,# currentDate,gitStatus:) and covers the indented entries underAdditional working directories:;Status:and similar lines in an application's own prompt keep their meaning. - Redaction matches secrets escaped twice (JSON arguments inside raw JSON text), and a
.envvalue with an unterminated quote no longer hides the variables after it.
Removed
- Behavior change:
AttestCostReporteris no longer exported from@attest-ai/vitest. It printed nothing on Vitest 4. UseAttestReporter(reporters: ["default", "@attest-ai/vitest/reporter"]): it prints theattest usage:line from per-test meta and writes the cost to the report-v2 file.
Published components
| Component | Status |
|---|---|
| Engine binaries and checksums (this release) | published |
PyPI attest-ai==1.1.0rc2 |
published |
npm @attest-ai/core@1.1.0-rc.2 |
published |
npm @attest-ai/vitest@1.1.0-rc.2 |
published |
| Website sync | dispatched (release-sync to attest-framework/attest-framework.github.io) |