Releases: actcore/act-cli
0.7.3
Added
-
act-build push <wasm> <ref>— publish a WASM component as a CNCF
Wasm OCI Artifact. The manifest carries an
application/vnd.wasm.config.v0+jsonconfig blob (with
architecture,os,layerDigests, andcomponent.{exports, imports}derived from the component's exports/imports) per the
CNCF TAG-Runtime Wasm OCI Artifact spec,
and the layer isapplication/wasm. Replaces inlineoras push
shell blocks in component justfiles.Flags:
--also-tag,--annotation key=value,--source,
--description,--skip-if-identical(matching-content skip /
drift error),--skip-if-exists(unconditional skip for
non-reproducible builds),--dry-run. Output ends with an
oras-compatibleDigest: sha256:...line so existing scripts that
grep for it keep working.Auth resolution:
OCI_USERNAME/OCI_PASSWORDenv →
GITHUB_TOKENfor ghcr.io →~/.docker/config.json
(DOCKER_CONFIGhonored) → anonymous.
Changed
act(host):resolve_ocinow validates that the OCI layer media
type isapplication/wasm. Empty/legacy media types log a
warning; anything else is rejected.
0.7.2
Added
-
act call --session-args '{...}'. When set, the host opens a
session against the component before the call (open-session(args, metadata)), injects the returned id asstd:session-idmetadata
for the tool call, prints the result, and closes the session
before exit. The whole open / call / close cycle runs in one
process, so the wasm instance stays alive for the full sequence.
This makes session-aware components (bridges, stateful components)
usable as ordinary one-shot CLI invocations:act call ghcr.io/actpkg/openapi-bridge:0.2.0 find_pets_by_status \ --args '{"status":"sold"}' \ --session-args '{"spec_url":"https://petstore3.swagger.io/api/v3/openapi.json"}' \ --http-policy open
If the component doesn't export
act:sessions/session-provider,
using--session-argsis a clear error rather than a silent no-op.
0.7.1
Removed
act session openandact session closeCLI subcommands. They
inherently can't deliver the primary use case for sessions
(component-side ephemeral state) — each invocation is a one-shot
process whose wasm instance dies on exit, so a session opened in
oneact session openis unusable from a subsequentact call.
For real session work, useact run --httporact run --mcp,
where the host process holds the wasm instance and the session
lives as long as the host.act session open-args-schemastays
— it's a useful smoke test that doesn't depend on persistent state.
0.7.0
Adds first-class support for act:sessions/session-provider. Stateful
components (database connections, browser automation, REPLs, the new
act-http-bridge / mcp-bridge / openapi-bridge) can now expose
typed open-session args, and agents address per-session state via
std:session-id metadata.
Added
act session open-args-schema | open | closeCLI subcommands.- ACT-HTTP
/sessions/open-args-schema,POST /sessions, and
DELETE /sessions/{id}endpoints (per ACT-SESSIONS §6.2). Mapped
tostd:session-not-found → 404via the bumped act-types. - MCP transport: synthetic
open_session/close_sessiontools
intools/listfor components that export session-provider, with
_meta.std:session-opannotations (per ACT-SESSIONS §6.1). - MCP
_meta.std:session-id(and any other request-level meta keys)
is now forwarded into the WIT call metadata so components see the
agent's session-id. - Host runtime tracks open session-ids per actor and auto-closes
them on shutdown (ACT-SESSIONS §2.5). tests/fixtures/sessions-canary.wasm— hand-rolled canary
exercising session-provider for host-side integration tests.
Changed
- Bumped
act-types0.5 → 0.7. Drops the inline session HTTP wire
types fromsrc/http.rsin favour of the canonical
act_types::http::OpenSessionRequest/OpenSessionResponse.
0.6.0
Breaking — WIT package layout
- World now imports
act:tools/tool-provider@0.1.0instead of
act:core/tool-provider@0.3.0. Components built against the old WIT
will not load — rebuild withact-sdk0.6.x (Rust) oract-sdk-py
0.2.x. call-tooltakes flat(name, arguments, metadata)instead of a
tool-callrecord.ErrorreplacesToolError(the type lives inact:core/typesnow
and is shared by non-tool providers).
Added
-v/-vvverbosity flag — opt-in plumbing logs (default level
demoted toinfo).
Changed
- MCP transport rewritten on rmcp 1.5: hand-rolled
src/mcp.rs
replaced with a thinActRmcpBridgeover the official Anthropic
crate. Tool discovery, calls, content mapping, and error mapping
go throughrmcp::modeltypes. Includes a stdio round-trip
integration test. act infotext output restyled with terminal colors (yellow
component name, dimmed version, cyan tool names, green annotations).
Output evaporates to plain text when stdout isn't a TTY or
NO_COLORis set. Tool parameters show(optional)markers; the
Option<T>wrapper is stripped from rendered types.
Removed
- The
--schemaflag onact info, the/metadata-schemaHTTP
route, themetadata_schemafield onact infoJSON output, and
the rmcp bridge's metadata-schema fetch/inject path. The WIT
function is gone inact:tools@0.1.0; a discovery mechanism is
planned for a future minor version.
Fixed
act info --tools --format textnow extracts the real inner type
from schemars'Option<T>JSON Schema instead of rendering the
union.
0.5.1
Fixed
--fs-allownow implicitly grants traversal of ancestor directories
on the path to any allowed target. WASI's path-resolver stats every
intermediate directory when opening nested files; without this, users
had to list each parent explicitly (--fs-allow /tmp --fs-allow "$DB/**"just to reach a file under$DB). An allow entry for
/tmp/work/db.sqlitenow implicitly permits/tmp/workand/tmp
for directory traversal — sibling files in those directories remain
denied.
0.5.0
Added
- Runtime policy (Layer 1) for outgoing HTTP and filesystem access. Declarative
allow/deny/openmodes, configured via~/.config/act/config.tomlor CLI flags (--fs-allow,--fs-deny,--http-allow,--http-deny,--fs-policy,--http-policy). Filesystem gates every path op through a glob matcher with a virtual-root preopen (Unix:/; Windows: one/c,/d, … per accessible drive). HTTP gates each request by host / scheme / method / port / CIDR and filters DNS-resolved IPs against both deny- and allow-CIDR rules via a reqwest DNS resolver hook. Per-hop redirect policy re-checks each target URL. - Enforcing capability declarations. Components'
[std.capabilities.*]entries inact.tomlare now a ceiling the host applies to the user's policy — missing declaration or declared-but-emptyallowis a hard deny regardless of user config.[std.capabilities."wasi:filesystem"].allowtakes{path, mode}entries withmode = "ro"/"rw".[std.capabilities."wasi:http"].allowtakes{host, scheme?, methods?, ports?}. Wildcards:host = "*"(any host),path = "**"(any path).act-build packvalidates declarations at pack time. - reqwest-backed HTTP client replacing wasmtime-wasi-http's
default_send_request. Outgoingwasi:httprequests route through a per-componentActHttpClient. Negotiates HTTP/2 via ALPN; HTTP/3 compiles in (--cfg reqwest_unstable) but stays dormant pending alt-svc cache warmup. SSE-friendly defaults: HTTP/2 keep-alive pings every 30s, TCP keep-alive, 10-minute idle-pool timeout. - Windows long-path support via an embedded application manifest.
- READMEs ship with the
actandact-buildrelease packages.
Changed
- Metadata key renamed
[act-component]→[act]acrossCargo.toml/pyproject.toml/package.json. Components must update the one-line key. act-typesbumped to 0.5 — required for the newFilesystemAllow/HttpAllow/FsModetypes.- Deny-CIDR denials surface as
DnsErrorinstead ofConnectionRefusedby walking the reqwest error chain. Policy-denied requests are attributable to DNS rather than a refused socket. - p3
wasi:filesystem/preopensis shadowed when fs policy is anything other thanopen. Returns zero preopens; p3 guests can't obtain aDescriptor::Dirand every path op fails at the default impl. Per-op gating for p3 filesystem awaits upstream wasmtime-wasi API changes.
Removed
- Advisory
warn_missing_capabilitieshelper — undeclared capability classes now hard-deny at policy check time, which is a stronger signal than a startup warning.
Fixed
fs.denyentries no longer silently ignored — unused rules now emit a warning at startup.
0.4.0
Changed
- Upgrade to
act:core@0.3.0. Host runtime dispatches on the newtool-resultvariant:streaming(stream<tool-event>)uses the existing pipe-to-consumer path;immediate(list<tool-event>)pushes events directly into the consumer without stream machinery. - Rename
StreamEvent→ToolEventthroughout the runtime, HTTP, MCP, and CLI code paths. - Remove the hardcoded 30s stream-consumption timeout; cancellation is now driven by the protocol (dropping the stream reader) or runtime-level interruption (epoch/fuel).
- Bump
act-typesto 0.4 andwasmparser/wasm-encoderto 0.247.
Added
--versionflag onactandact-buildbinaries.
Fixed
publishCI steps are now idempotent and safe to re-run.
0.3.10
Fixed
- npm packages now preserve executable permissions on binaries (fixes silent failure when running
npx @actcore/acton CI) - npm shims (
bin/act,bin/act-build) ensure executable permission before spawning the binary as a fallback
Changed
- npm release pipeline packs
.tgzarchives before upload to preserve file permissions across artifact transfer - Per-crate SBOM attestation in release workflow
0.3.9
Fixed
- npm packages now preserve executable permissions on binaries (fixes silent failure when running
npx @actcore/acton CI) - npm shims (
bin/act,bin/act-build) ensure executable permission before spawning the binary as a fallback
Changed
- npm release pipeline packs
.tgzarchives before upload to preserve file permissions across artifact transfer - Per-crate SBOM attestation in release workflow