- Write tests for WasmTapAgent wrapper around existing TapAgent
- Write tests for private key export functionality
- Write tests for private key import functionality
- Write tests for JsValue to Rust type conversions
- Create WasmTapAgent wrapper struct in tap-wasm
- Implement private key export from AgentKeyManager
- Implement private key import to create TapAgent
- Implement JsValue conversion layer
- Write tests for delegating pack_message to existing TapAgent
- Write tests for delegating unpack_message to existing TapAgent
- Write tests for all TAP message types via WASM
- Write tests for WASM-specific error handling
- Implement pack_message delegation to TapAgent
- Implement unpack_message delegation to TapAgent
- Ensure TAP message type compatibility
- Add WASM error conversion layer
- Write tests for WASM bindings (new, from_private_key, get_did)
- Write tests for async pack_message and unpack_message
- Write tests for utility functions (generate_private_key, generate_uuid)
- Write tests for JavaScript type conversions (JsValue <-> Rust types)
- Implement WASM bindings for TapAgent
- Implement async message operations
- Implement utility function exports
- Implement type conversion layer
- Update tap-wasm/CLAUDE.md
- Write tests for TypeScript TapAgent class
- Write tests for type mapping with @taprsvp/types
- Write tests for static factory methods (create, fromPrivateKey)
- Write tests for message creation helpers
- Create TypeScript wrapper in tap-ts
- Implement type mapping with @taprsvp/types
- Implement factory methods and utilities
- Setup npm package structure (@taprsvp/agent)
- Create tap-ts/CLAUDE.md documentation
- Write tests for pluggable DID resolver interface
- Write tests for resolution error handling
- Implement pluggable resolver interface
- Implement JavaScript resolver delegation
- Write tests for Veramo message format compatibility
- Write tests for TAP -> Veramo message unpacking
- Write tests for Veramo -> TAP message unpacking
- Write cross-implementation test suite with real Veramo DIDComm library
- Verify message format compatibility between TAP and Veramo agents
- Test with real Veramo instances (15 comprehensive integration tests)
- Document compatibility - Full DIDComm v2 compatibility confirmed
- Create interoperability test fixtures and real integration tests
- Implement wee_alloc for smaller WASM
- Remove unused dependencies
- Optimize TypeScript bundle
- Verify < 500KB WASM target (272KB gzipped ✅)
- Verify < 50KB gzipped TypeScript (3.72KB gzipped ✅)
- Write API documentation
- Write getting started guide
- Write example applications
- Create API reference docs
- Publish to npm as @taprsvp/agent
- Update main README
- Create release notes
- Write tests for CLI argument parsing and global flags
- Write tests for TapIntegration initialization from CLI args
- Create tap-cli crate with Cargo.toml, add to workspace
- Implement main.rs with global flags (--agent-did, --tap-root, --debug, --format)
- Implement TapIntegration setup (reuse pattern from tap-mcp)
- Implement output formatting layer (JSON and text modes)
- Write tests for
agent createandagent listcommands - Implement
agent createsubcommand - Implement
agent listsubcommand
- Write tests for
transfercommand - Write tests for
paymentcommand - Write tests for
connectcommand - Write tests for
escrowandcapturecommands - Implement
transfersubcommand - Implement
paymentsubcommand - Implement
connectsubcommand - Implement
escrowsubcommand - Implement
capturesubcommand
- Write tests for
authorize,reject,cancelcommands - Write tests for
settleandrevertcommands - Implement
authorizesubcommand - Implement
rejectsubcommand - Implement
cancelsubcommand - Implement
settlesubcommand - Implement
revertsubcommand
- Write tests for
transaction listcommand - Write tests for
delivery listcommand - Write tests for
received list/pending/viewcommands - Implement
transaction listsubcommand - Implement
delivery listsubcommand - Implement
received list,received pending,received viewsubcommands
- Write tests for customer CRUD commands
- Implement
customer listsubcommand - Implement
customer createsubcommand - Implement
customer detailssubcommand - Implement
customer updatesubcommand - Implement
customer ivms101subcommand
- Write tests for
pingandmessagecommands - Implement
pingsubcommand - Implement
messagesubcommand - Integrate existing DID commands from tap-agent-cli (
did generate,did lookup,did keys)
- Run cargo fmt, clippy, and tests with CI flags
- Fix any warnings or errors
- Write tests for
decision listanddecision resolvecommands - Implement
decision listsubcommand - Implement
decision resolvesubcommand - Add auto-resolve to action commands (authorize, reject, cancel, settle, revert)
- Add detailed help text to tap-cli and tap-http for agent discoverability
- Update README with decision commands documentation
- Run cargo fmt, clippy, and tests with CI flags
- Write tests for decision_log insert, update status, list pending, and expire operations
- Create migration
008_create_decision_log.sqlwith table, indexes, and status constraints - Add
DecisionLogEntrymodel tomodels.rs - Implement
insert_decision()indb.rs - Implement
update_decision_status()indb.rs - Implement
list_pending_decisions()indb.rs - Implement
expire_decisions_for_transaction()indb.rs
- Write tests for automatic expiration when transactions reach terminal states
- Implement
DecisionExpirationHandleras anEventSubscriberthat listens forTransactionStateChangedto terminal states and expires pending decisions
- Write tests for
tap_list_pending_decisionstool - Write tests for
tap_resolve_decisiontool - Implement
tap_list_pending_decisionstool intools/decision_tools.rs - Implement
tap_resolve_decisiontool (marks resolved + executes action via TapNode) - Register both tools in
ToolRegistry
- Write tests for serialization/deserialization of decision protocol messages (tap/decision, tap/event, tap/initialize)
- Define protocol message types for stdin/stdout communication (decision requests, event notifications, initialization handshake)
- Write tests for
ExternalDecisionManagerimplementingDecisionHandler(writes to decision_log, sends via stdin) - Write tests for process lifecycle (spawn, detect exit, restart with backoff)
- Write tests for stdout reader (parse JSON-RPC tool calls, route to ToolRegistry)
- Write tests for decision replay on process reconnect
- Implement
ExternalDecisionManagerstruct with child process management - Implement
DecisionHandlertrait — insert into decision_log and send over stdin - Implement
EventSubscribertrait — forward events when in "all" mode - Implement stdout reader task — parse JSON-RPC requests, dispatch to
ToolRegistry - Implement stdin writer — send decisions, events, and initialization messages
- Implement process health monitoring and restart with exponential backoff
- Implement decision replay on reconnect (query pending/delivered, send in order)
- Implement graceful shutdown (EOF on stdin, SIGTERM, SIGKILL timeout)
- Write tests for CLI flag parsing (--decision-exec, --decision-exec-args, --decision-subscribe)
- Add CLI flags and environment variables to
main.rs - Wire
ExternalDecisionManagerintoNodeConfig.decision_modewhen --decision-exec is set - Subscribe
ExternalDecisionManagerto event bus - Disable
auto_actwhen external decision executable is configured - Forward child process stderr to tap-http log output
- Create a mock external executable (auto-approve script) for testing
- Write integration test: decision flow end-to-end (receive transfer → decision → authorize)
- Write integration test: process crash and catch-up (kill process, accumulate decisions, restart, verify replay)
- Write integration test: decision expiration (decision pending → transaction rejected → decision expired)
- Write integration test: external process uses tool calls to act (tap_authorize via stdout)
- Run cargo fmt, clippy, and tests with CI flags
- Fix any warnings or errors
- Add
resolve_decisions_for_transaction()to Storage in tap-node - Create
DecisionLogHandlerin tap-node (implementsDecisionHandler, writes to decision_log) - Rename
DecisionExpirationHandlertoDecisionStateHandler, add resolution on state changes - Add auto-resolve to
tap_authorizetool (resolveauthorization_requireddecisions) - Add auto-resolve to
tap_rejecttool (expire all pending decisions) - Add auto-resolve to
tap_settletool (resolvesettlement_requireddecisions) - Add auto-resolve to
tap_canceltool (expire all pending decisions) - Add auto-resolve to
tap_reverttool (expire all pending decisions) - Add
--decision-modeCLI flag to tap-http (auto,poll) - Wire poll mode in tap-http main.rs (DecisionLogHandler + DecisionStateHandler)
- Run cargo fmt, clippy, and tests with CI flags
- Update tap-http README with decision modes and configuration
- Update tap-mcp README with decision tools and auto-resolve
- Update tap-node README with decision log and DecisionLogHandler
- Update main README with decision support overview