You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The parent-control web UI's step-9 audit view must decode every action and its Heima TX (user flow step 9: "we should be able to decode all the messages"). Today the UI ships a mockdecodeCalldata (event-kind → 4-byte selector + function signature) and a deterministic txHash. We need real decoding.
Two halves to decode
CBOR AuditEnvelope v1 — agentkeys-core: AuditEnvelope v1 cross-language CBOR vector exporter #137 shipped the cross-language CBOR vector exporter (crates/agentkeys-core/examples/export_audit_vectors.rs) + frozen vectors. We need a decoder path the web UI can call (the audit-service stores envelopes; the UI should render the decoded {op, actor_omni, intent_commitment, ...}).
EVM calldata → typed args — decode registerAgentDevice / setScopeWithWebauthn / CredentialAudit.append / appendRoot calldata against the four deployed contract ABIs (AgentKeysScope, SidecarRegistry, K3EpochCounter, CredentialAudit) so the TX panel shows real selectors + decoded params, not a static map.
Proposed shape
A daemon (ui-bridge) endpoint, e.g. GET /v1/audit/:id/decode → { envelope: {...decoded CBOR...}, tx: { hash, to, selector, fn, args: [...] }, status }.
Decoder reuses agentkeys-core for the CBOR side (do not re-implement the schema in TS) and an ABI decoder (ethabi / alloy) for the calldata side.
The web UI's decodeCalldata mock (apps/parent-control) is replaced by a call to this endpoint — already structured as a one-function swap.
Acceptance
Daemon endpoint returns the decoded CBOR envelope for a real audit row.
Calldata decoded against the verified ABIs (selector + typed args).
Web UI step-9 modal renders real decode (replaces the mock).
Why
The parent-control web UI's step-9 audit view must decode every action and its Heima TX (user flow step 9: "we should be able to decode all the messages"). Today the UI ships a mock
decodeCalldata(event-kind → 4-byte selector + function signature) and a deterministictxHash. We need real decoding.Two halves to decode
AuditEnvelopev1 — agentkeys-core: AuditEnvelope v1 cross-language CBOR vector exporter #137 shipped the cross-language CBOR vector exporter (crates/agentkeys-core/examples/export_audit_vectors.rs) + frozen vectors. We need a decoder path the web UI can call (the audit-service stores envelopes; the UI should render the decoded{op, actor_omni, intent_commitment, ...}).registerAgentDevice/setScopeWithWebauthn/CredentialAudit.append/appendRootcalldata against the four deployed contract ABIs (AgentKeysScope, SidecarRegistry, K3EpochCounter, CredentialAudit) so the TX panel shows real selectors + decoded params, not a static map.Proposed shape
ui-bridge) endpoint, e.g.GET /v1/audit/:id/decode→{ envelope: {...decoded CBOR...}, tx: { hash, to, selector, fn, args: [...] }, status }.agentkeys-corefor the CBOR side (do not re-implement the schema in TS) and an ABI decoder (ethabi / alloy) for the calldata side.decodeCalldatamock (apps/parent-control) is replaced by a call to this endpoint — already structured as a one-function swap.Acceptance
Refs