Repository navigation
Release v0.5.0 (experimental) - #40
Merged
Merged
Conversation
…mations, authorizer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepares the v0.5.0 release. Merge this, then tag
v0.5.0onmain; the release workflow publishes to npm and creates the GitHub release from the CHANGELOG section below.scripts/release.mjs check v0.5.0passes)0.5.0 — experimental, with a summary and breaking changesmemory ✓,A2A (v0.6)215 tests pass, typecheck clean,
npm run test:packinstalls the 0.5.0 tarballs and blocks the leak.Release notes (from CHANGELOG)
Labels now survive memory servers that rewrite what they store, the audit log is tamper-evident, "ask" follows the confirmation proposal for SEP-2624, and the gateway can check who may use a tool before the policy runs.
Breaking changes
callHashnow covers the SEP-2624 call binding{ event, phase, target, payload }, so hashes in audit logs differ from 0.4.adtl-gateway ledger declassifyrequires--reason.ChainOutcomeis nowPhaseOutcome(@adtl/gateway), since SEP-2624 no longer has a chain concept.adtl.labelalso hooks the request phase oftools/call. This only matters if you run ADTL's interceptors behind your own invoker.@adtl/labelslabelInto(stamp the session label into a per-record argument such asmetadata) andreadLabels(join stamps found in results, stricter only), for memory servers that extract facts or merge records, which the ledger can't recognize.stampRecordLabel()andreadRecordLabels().callBindingHash().@adtl/interceptorsadtl.policyreturns "ask" with aconfirmationrequest (id,reason,callHash,expiresAt,token), as proposed in experimental-ext-interceptors#45, and acceptscontext.confirmationswhen invoked again. Each confirmation allows one call, in one session, before it expires. A confirmation never turns a block into an allow.info["adtl/decision"]is still set.adtl.labelstamps records for tools withlabelInto, and joins the stamps it finds for tools withreadLabels.@adtl/ledgerdeclassify()takes a subject (e.g. the file name), kept with the reason.declassifications()lists recent declassifications.@adtl/gatewayAuthorizerinterface: decides whether the caller may use a tool, resource or prompt at all, before the policy runs. A denial wins over any policy decision; failures deny; audit mode only logs. Pass it asnew AdtlGateway({ authorizer, principal }); denials are audited asdenied: { by, reason }. No config support yet (#8).context.targetto the upstream server, andcontext.principalto the configured principal, on every interceptor invocation.prevandhash.adtl-gateway audit verifydetects edited, removed, reordered and inserted lines and prints the last hash. The gateway and the Claude Code hook append through a lock file so the chain doesn't fork. Logs from 0.4 are continued, with their lines reported as written before the chain.Write/Editon it are blocked, shell commands that mention it ask first.ledger declassifyrecords the file with the reason. Newledger declassifiedlists recent declassifications: when, who, which file, why.records: { stamps, writers }when a result carried record stamps.Examples and docs
examples/fake-memory: a memory server that extracts facts on write, keeps per-item metadata and consolidates records, used in the tests.