Skip to main content

Read-only Provider presentation

AW exposes one desktop snapshot through aw inspect --config ABS_FILE --json. This interface performs no binding, tool event, approval, configuration edit or service startup. It uses the existing bounded executor and local service client; it adds no daemon, domain engine, database reader or statistics store.

Registration and compatibility​

Optional spec.providers.<id>.view contains protocol, implementation and a trusted transport using the existing stdio shape. Its executable must be absolute. Registration is separate from the event transport and opaque private configuration. It is supported by both the offline validator and package-generated Tokenless profiles. It does not change event admission or grant native effects. The shared example registers the same CLI/data directory for both entries.

aw-provider-view/v1alpha1 is independent of aw-provider/v1alpha1 and aw-service/v1alpha2. The event request/response schemas remain unchanged. Use matching Preview binaries/configuration; older binaries can reject the new registration. Missing/unsupported presentation capabilities do not change sec-core enforcement, after observers or custom Hook scheduling.

Executable contracts​

The bundled schema contains $defs/request, $defs/response and $defs/panel. The Rust validator reuses the existing bounded JSON parser to reject duplicate keys, excessive nesting, oversized messages and overflowing integer literals. All times with _ms are Unix milliseconds; no date-format dependency is needed. Counts use interoperable nonnegative JSON integers, at most 2^53 - 1.

MessageContract
describe requestprotocol, operation, request_id, provider_id, full config_revision, budget_ms
query requestSame identity, plus view: metrics.summary and parameters: {limit: 200}
responseEcho all identity fields including operation, then status, observed_at_ms, code, data
describe dataimplementation, nullable version, supported views
query dataAllowlisted totals/by_operation, explicit store/window scope, unknown recording state and unverified adoption
Panelapi_version, generated_at_ms, config_revision, service, providers, recent_execution

Describe and query share at most two seconds per Provider. A late reply, wrong identity/implementation, unknown schema field, incompatible version or unsupported view cannot become a successful metrics result. Commands, URLs, markup, arbitrary private fields and event effects are outside the response shape. This is trusted same-user process integration, not a sandbox for a malicious Provider.

Inspect bounds the snapshot to three seconds and 1 MiB. Existing executor cleanup can add its one-second verification budget and cooperative grace. Tokenless view mode handles termination by cancelling/reaping its nested CLI process group. The event entry's existing lifecycle is unchanged. Providers are queried serially within the snapshot budget; remaining views can time out without extending it. Consumers coalesce requests and discard late responses rather than overlapping unbounded pollers. Query failures never change event failure policy.

StatusMeaning
okThis view returned valid data for its stated scope
disabledNo enabled event step references this configured Provider
unsupportedNo registered/supported view, or unsupported statistics-store override
no_dataAbsent store or no active records in the selected window
unavailableQuery, transport, output, schema or identity failure
partialReserved for partially available consumer snapshots; individual cards retain their actual status
staleService observation can no longer be confirmed; consumer-retained data must be labelled stale

Codes are enumerated in $defs/code. No-data with an absent store uses store_absent; an empty existing store has no error code. Numeric unknowns are not fabricated as zeros. Static configuration health does not prove live backend health, Provider admission, native installation or model adoption. These stay unknown/unverified unless an independent contract supplies evidence.

Source boundaries and retention​

Tokenless view mode invokes public stats summary --json --limit 200 using its explicit data directory, and accepts source schema 1.1. Missing stats.db is detected before invocation, avoiding empty-store creation. Existing-store queries can perform component-owned migration/maintenance. Nonempty TOKENLESS_STATS_DB and effective DSH overrides are unsupported until a public resolved-store contract exists. AW does not reproduce component path resolution.

Validate record limits, safe counts, additive operation totals and before/after differences; project only the allowlist. Exclude dry runs using the public summary. Whole-table retrieval attribution is not mixed with this limited compression window. Store history can include non-AW integrations. No session, daily, billing, net-savings or native-adoption claim follows from those counts.

The service's additive read-only recent_executions operation returns at most 20 completed step projections from its current generation, newest first. A bounded memory ring is populated only after successful durable append. Presentation-cache publication shares the journal lock to preserve append order across workers; cache failure cannot fail the event or change audit health. Reads clone at most 20 entries, holding no lock across Provider I/O. No new persistent history is created; restart clears the ring while existing keyed durable audit remains available. Projection includes Provider/step, method, duration, status, failure category, failure action and structured policy block request. The optional kind field distinguishes provider, native and skipped; a skipped completion starts no invocation process. Readers also accept projections from services that omit kind. No raw input/output, native environment, replacement contents or approval receipt is retained there.

Inspect pins configuration revision and service generation. It rechecks the same client after view collection, clearing recent data if service state cannot be confirmed and refreshing audit health from that final response. A successful recent result requires data and a null code; other statuses carry null data. Component-store history is independent of a live AW session. Existing Tokenless SQLite/SLS retention remains a separate boundary; excluding bodies from Panel JSON does not delete or disable those sinks.

Regression and client fixtures​

Synthetic fixtures cover both methods and six Panel states. They do not establish native adoption. Tests exercise strict validation, subprocess limits/cancellation, no-start/no-initialization, identity/configuration mismatch, generation reset, bounded history and preserved blocking. Package CI additionally seeds statistics through the real public CLI, verifies dry-run exclusion and compares the view against the same summary.

The existing sec-core and Qoder/OpenClaw/QwenPaw/Hermes event suites remain the regression gate. No Adapter, native Hook scheduler, before/after permission rule, compression policy, recovery mechanism or UI implementation is changed here.