This file tracks notable changes to the workspace tag stream
(launchapp-dev/animus-protocol). Per-crate Cargo.toml versions are the
source of truth for individual crate bumps. Tags map roughly to
"workspace cuts" — a tag may bump multiple crates at once.
animus-config-protocol: a write-back path so config sources can persist a
kernel-validated canonical model.
METHOD_CONFIG_WRITE(config/write) — optional, gated on the newCAPABILITY_CONFIG_WRITE("config_write") manifest capability. The kernel ships the entire validatedConfigModel; the plugin persists it. Coarse full-model write only — no granular per-entity wire methods. Sources that cannot persist (e.g. the YAML source) omit the capability; if they receiveconfig/writeanyway they MUST respondMETHOD_NOT_SUPPORTED.ConfigWriteRequest { project_root, repo_scope, config }andConfigWriteResponse { cache_token }wire types + exported JSON schemas.
Moved the kernel protocol crate and animus-config-protocol out of
launchapp-dev/animus-cli into this repo, per the architecture rule that no
protocol/wire-type crates live inside the CLI. They now build as workspace
members alongside the other animus-*-protocol crates:
protocol0.1.0 — kernel wire types (orchestrator enums,PhaseCapabilities,PhaseRoutingConfig,McpRuntimeConfig,hook_policy, model routing, repository scope, sync config, error classification). Sibling dep onanimus-subject-protocolis now a path dep within this workspace.animus-config-protocol0.1.0 —config_sourceplugin wire types (ConfigModelenvelope + the canonical YAML parser +WorkflowConfigtypes). Path-depsprotocol.
ao-cli and out-of-tree plugins (config-yaml, workflow-runner) git-dep both by this tag instead of pinning the CLI repo rev.
animus-subject-protocol 0.1.16 (additive):
- Added [
METHOD_SUBJECT_UNWATCH] ("subject/unwatch") and theSubjectUnwatchRequest { watch_id: String }request type. The daemon issues this when it drops asubject/watchsubscription so the backend can cancel the backingwatch()task instead of leaking it until plugin shutdown. Thewatch_idcorrelates with the JSON-RPC request id used in the originatingsubject/watchcall. Best-effort — backends that do not track per-watch tasks may treat it as a no-op. The schema export binary now emitsSubjectUnwatchRequest.json.
animus-plugin-runtime 0.2.1 (additive, restores dropped public API):
- Restored
transport_backend_mainandtransport_backend_main_with_capabilities, the stdio-loop entrypoints every transport plugin (animus-transport-http,animus-transport-graphql,animus-web-uiwrapper) calls frommain.rs. They were accidentally dropped in commitaed9f42("v0.1.14: sync ... from animus-cli") when the crate was refactored to its provider-focused shape, which broke transport-plugin compilation against the current protocol. The restored code lives in a newsrc/transport.rsmodule (coexisting withplugin.rs/subject.rs) and is adapted to the currentanimus-plugin-protocolwire types (PluginCapabilities.projections,InitializeResult.kind_capabilities,PluginManifest.env_required/notification_buffer_size).extra_capabilitiesisVec<String>. Adds ananimus-transport-protocolpath dependency to the crate.
animus-agent-runner-protocolcrate deleted. It was the wire protocol for the agent-runner sidecar removed in v0.5.3 (providers now spawn/supervise the coding-agent CLIs end to end), was bumped tov0.1.1 deprecated, and had zero consumers across the entire fleet (ao-cli + all plugin repos). Older git tags still contain the crate, so any historical pin is unaffected. ThePLUGIN_KIND_AGENT_RUNNERwire constant onanimus-plugin-protocolis retained (manifest-parse compatibility) with an updated doc comment.
animus-queue-protocol 0.3.1 -> 0.3.2 (additive, backward compatible):
METHOD_QUEUE_NEXT_DEADLINE = "queue/next_deadline"+QueueNextDeadlineResponse { next_run_at: Option<String> }— reports the earliest futurerun_atacross pending deferred entries so the daemon can sleep until exactly that instant (precise wake) instead of relying on its heartbeat.Nonewhen the queue holds no future-dated entries.
animus-queue-protocol 0.3.0 -> 0.3.1 (additive, backward compatible):
QueueEnqueueRequest.run_at: Option<String>— RFC 3339 earliest-dispatch time. When set and in the future, the entry is enqueued deferred: it stayspendingbut is excluded fromqueue/leaseuntil the instant passes.Nonepreserves dispatch-ASAP behavior.QueueEnqueueRequest.expire_after_secs: Option<u64>— grace window afterrun_at; a still-pending deferred entry pastrun_at + expire_after_secsis dropped on sweep instead of dispatched late.None= never expire.QueueEnqueueResponse.warning: Option<String>— non-fatal advisory. Set (most commonly) when another entry already exists for the same subject; the duplicate is still enqueued (deferred enqueues are never deduped) and the caller decides whether to drop it.QueueEntry.run_at/QueueEntry.expire_after_secs— surfaced on list/lease so callers can distinguish scheduled-for-later entries.QueueStats.deferred: usize— subset ofpendingnot yet leasable.
All new fields use serde defaults / skip_serializing_if, so older
clients and stored payloads round-trip unchanged.
Reverts the regression introduced by aed9f42 ("v0.1.14: sync ... from
animus-cli"), which dropped a number of load-bearing surfaces on
animus-subject-protocol. Downstream Rust subject plugins were still
pinned to v0.1.13 because of the regression; v0.5.7 makes the canonical
tag forward-compatible again.
animus-subject-protocol 0.1.14 -> 0.1.15:
METHOD_SUBJECT_DELETE = "subject/delete"wire constant.BackendError::Unsupported(String)variant + JSON-RPC mapping toMETHOD_NOT_SUPPORTED(-32001) with{"category": "unsupported"}.SubjectBackend::deletetrait method with default impl returningUnsupported, so existing implementors compile unchanged.DeleteSubjectRequest { id: SubjectId }andDeleteSubjectResponse { ok: bool }.Subject::native_status: Option<String>,Subject::status_metadata: Value,Subject::attachments: Vec<SubjectAttachment>.SubjectAttachment { id, kind, uri, title, mime_type, metadata }.StatusDispatchHint { native_status, maps_to, dispatch_label, description }.SubjectSchema::native_status_values: Vec<String>,SubjectSchema::status_dispatch_hints: Vec<StatusDispatchHint>.SubjectFilter::native_status,dispatch_label,has_attachment_kindfields.SubjectChangedEvent::previous_native_status,previous_dispatch_labelfields.ChangeKind::DispatchLabelChanged,::AttachmentAdded,::AttachmentRemovedvariants.
animus-plugin-runtime 0.2.0 -> 0.2.1:
subject_backend_main(info, backend)— drop-in for the v0.1.13 entrypoint of the same name. Wires the five non-streaming subject verbs (list,get,update,delete,schema) onto a genericPluginshell and runs the stdio loop. Readsbackend.schema().kindsonce at startup and registers both the canonicalsubject/<verb>and the kind-prefixed<kind>/<verb>aliases for every declared kind, matching the dispatcher shape the daemon'sSubjectRouterproduces in production. Forwardshealth/checktobackend.health()via the newPlugin::on_healthhook so backends correctly report upstream outages instead of always reporting healthy. The streamingsubject/watchsubscription is NOT registered — the genericPluginshell does not yet model per-subscription notification streams. Backends that need watch should drive thePluginbuilder directly and register a custom subscription handler.subject_backend_main_with_capabilities(info, backend, extra)— parity with v0.1.13.subject_backend_main_with_kinds(info, backend, kinds)— registers the kind-prefixed<kind>/<verb>aliases for an explicit kinds list (use when the backend declares more kinds thanschema().kindswould return).subject_plugin(info, backend)/subject_plugin_with_kind_aliases— builder-style alternatives for plugins that need to keep customizing thePluginbefore.run().await.- Kind-prefixed
<kind>/listinvocations inject the kind intoSubjectFilter.kindbefore callingbackend.list, so a single backend serving multiple kinds can distinguishtask/listfromissue/listeven when the caller sends an empty filter. Plugin::advertised_methods()andPlugin::has_method_handler()read-only accessors so tests can verify the manifest shape without driving the stdio loop.Plugin::on_health(hook)builder method registers a backend-specifichealth/checkhook. When set, the shell awaits the hook and returns the backend'sHealthCheckResult(or anRpcErrorfrom the hook). Unset plugins continue to reportHealthStatus::Healthyas before.
SubjectSchema::supports_delete: bool— mirror ofsupports_create, defaults tofalsefor back-compat. Backends that overrideSubjectBackend::deleteshould set this totrue.- The
supports_createdoc comment is updated. The "reserved for v0.4.x" text is removed. The new wording documents the actual semantics: the field declares whether the plugin honors<kind>/createverb invocations. The protocol-canonicalsubject/createverb is not wired in any first-party plugin or daemon path today; it remains a candidate for a future revision but v0.5.7 does not introduce a new wire surface for it. - JSON Schema export bin (
animus-subject-protocol-export-schema) now emits artifacts for the restoredSubjectAttachment,StatusDispatchHint,DeleteSubjectRequest,DeleteSubjectResponsetypes alongside the existing entries.
- The
schemars::JsonSchemaderives on every public message type. - The
export_schemabin that dumps per-type JSON Schema artifacts.
The v0.1.14 "sync from animus-cli" merge replaced the upstream protocol
crate with a snapshot of the in-tree ao-cli copy, which had been
incrementally pruned of subject extensions that downstream plugins
depended on. The regression silently broke any plugin author who tried
to upgrade past v0.1.13 and forced launchapp-dev/animus-subject-default
v0.1.3 to stay pinned to v0.1.13.
v0.5.7 makes the upstream protocol forward-compatible with v0.1.13
again. Downstream Rust subject plugins can now bump their pin to v0.5.7
in a single edit, pick up subject/delete, and stop being trapped on
v0.1.13.
If you find yourself authoring an "sync from animus-cli" commit in this repo, read this file first. Sync the direction is from protocol-out (this repo) to ao-cli-in, not the other way around.
animus-agent-runner-protocol 0.1.0 -> 0.1.1: marks the crate
deprecated. The agent-runner sidecar was removed from ao-cli in v0.5.3;
no first-party agent_runner plugin will ship. Plugin authors should
target animus-provider-protocol / animus-session-backend instead.
- Four new plugin-kind protocol crates:
animus-workflow-runner-protocol,animus-queue-protocol,animus-durable-store-protocol,animus-memory-store-protocol. animus-plugin-runtimev0.2.0: genericPluginshell +register_method!macro replaces the kind-specific*_backend_mainhelpers.animus-notifier-protocolv0.1.0: notifier plugin-kind wire types.animus-queue-protocolv0.3.0:exclude_subjectsonQueueLeaseRequest.
See git log on this repository. v0.1.x marks the original protocol
extraction era; v0.5.x is the protocol-stabilization era.