Agentic WAVS#1144
Closed
JakeHartnell wants to merge 292 commits into
Closed
Conversation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…e to build components in empty folders, add validate component tool
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ruction sites - Add uuid workspace dependency to wavs-types, wavs, wavs-benchmark-common, wavs-engine (dev) - Add correlation_id: String field to TriggerAction struct - Add use uuid::Uuid to packages/types/src/service.rs - Fix all ~20 TriggerAction construction sites with Uuid::now_v7() correlation_id across trigger.rs, debug.rs, wasm_engine.rs, mock_trigger_manager.rs, mock_submissions.rs, mock_e2e.rs, engine_setup.rs, exec_aggregator.rs, exec_component.rs, aggregator_basic.rs, helpers/service.rs - cargo check -p wavs-types -p wavs passes cleanly
… through SubmissionConfirmed - Add correlation_id: String field to SubmissionEvent struct - Add SubmissionFailedEvent struct with TauriEventExt impl (event name: submission_failed) - Add SubmissionFailed variant to DispatcherCommand with service_id, workflow_id, correlation_id, error - Update SubmissionConfirmed variant to carry correlation_id - Update dispatcher match arm to destructure and pass correlation_id for SubmissionConfirmed - Add new match arm in dispatcher to emit SubmissionFailedEvent to GUI - Add SubmissionFailed sends at both signing error and dispatch error sites in submission.rs - Update aggregator.rs SubmissionConfirmed send to include correlation_id from trigger_action
…listeners - Add correlation_id: string to TriggerAction interface - Add correlation_id: string to SubmissionEvent interface - Add SubmissionFailedEvent interface with service_id, workflow_id, correlation_id, error - Add 'submission_failed' to ActivityKind union type - Make triggerData optional in ActivityItem (submission_failed events have no trigger data) - Add correlationId?: string and error?: string to ActivityItem - Add SUBMISSION_FAILED to EVENTS constant in listeners.ts - Add SubmissionFailedEvent to listeners.ts import - Update trigger listener to pass correlationId: action.correlation_id - Update submission listener to pass correlationId: payload.correlation_id - Add new submission_failed listener - Update ActivityCard.tsx to handle optional triggerData (null checks, error display) - Update ActivityFeed.tsx to handle optional triggerData in search filter
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ity Frontend) to roadmap Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Export SectionKey union type with 6 values: wallet, node, environment, agent, mcp, reset - Export SettingsSidebar pure presentational component with fixed 200px width - Active item: border-l-2 border-purple-2 bg-charcoal-medium styling - Inactive item: border-l-2 border-transparent with hover transitions
…on components - WalletSection: encapsulates wallet state, balance fetching, export/reset handlers - NodeSection: encapsulates TOML editor + WAVS home dir with onUnsavedChange callback - EnvironmentSection: encapsulates env vars management with ENV_VAR_SUGGESTIONS - Each component owns its local state with no cross-section dependencies
…shell - Add SettingsSidebar with 6-item navigation (wallet/node/environment/agent/mcp/reset) - Move OAuth listener to parent (survives section navigation) - AgentApiKeyField updated to accept oauthLoading/oauthStatus/onOAuthStart props - Restart banner rendered above sidebar+content row - Wallet/Node/Environment extracted to separate components - Agent/MCP/Reset sections remain inline until Plan 02 - Remove BalanceRow, ENV_VAR_SUGGESTIONS, fetchBalances, useWalletStore from parent
…plan - SettingsSidebar with SectionKey type and 6 sidebar items - WalletSection, NodeSection, EnvironmentSection isolated components - Settings.tsx rewritten as 615-line sidebar-navigated shell - OAuth listener lifted to parent for navigation persistence
Covers: wasmtime async feature requirement, selective async bindgen imports pattern, RpcCaller trait injection, call_stack cycle detection, AllowedServiceCalls/AllowedCallers permission model, and all pitfalls. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 plans across 2 waves: Plan 01 (wave 1) builds engine-side RPC infrastructure (wasmtime async, RpcCaller trait, async call_service with permission/cycle checks). Plan 02 (wave 2) wires RpcCallerImpl in wavs crate with callee AllowedCallers enforcement and tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SUMMARY.md for phase 22 plan 01 - Captures: async call_service, RpcCaller trait, all 7 construction site updates - Deviation documented: 'host.call-service' key (not 'call-service') for inline interface
- Add 'async' to wasmtime workspace features to enable func_wrap_async
- Add imports: { 'host.call-service': async } to both bindgen blocks in world.rs
- Create packages/engine/src/rpc.rs with RpcCaller trait, RpcResult, RpcFuture types
- Add rpc module to packages/engine/src/lib.rs
- Add RpcPermissionDenied, RpcCycleDetected, RpcDepthExceeded variants to EngineError
…InstanceDepsBuilder wiring - Add call_stack: Vec<String> and rpc_caller: Option<Arc<dyn RpcCaller>> to OperatorHostComponent - Replace sync call_service stub with async implementation: AllowedServiceCalls check (RPC-02), cycle detection, depth limit (RPC_MAX_DEPTH=5), delegates to injected rpc_caller (RPC-04) - Add rpc_caller + call_stack fields to InstanceDepsBuilder; thread them into OperatorHostComponent - Update all 7 InstanceDepsBuilder construction sites with rpc_caller: None, call_stack: vec![] - wavs-engine and wavs crates compile cleanly
…gineManager injection - Create packages/wavs/src/subsystems/engine/rpc_caller.rs with RpcCallerImpl - RpcCallerImpl resolves callee service, enforces AllowedCallers (RPC-03), builds synthetic TriggerAction - Refactor execute_operator_component to delegate to execute_operator_component_inner - Add execute_operator_component_with_rpc that accepts rpc_caller + call_stack - Update EngineManager::run_trigger to construct and inject RpcCallerImpl for all operator executions
…pth limit logic - 6 tests: rpc_permission_denied_error_format, rpc_cycle_detected_error_format, rpc_depth_exceeded_error_format, rpc_permission_denied_error_fields, rpc_cycle_detection_logic, rpc_depth_limit_logic - All 6 tests pass
…orcement + RPC tests
… integration test
…t world - Add pub mod legacy_world in world.rs: wit_bindgen for wavs-legacy-world with type remappings back to main world (input/output/types) to avoid duplication - Change export_layer_trigger_world! to use legacy_world::export! with a blanket impl that delegates world::Guest::run to legacy_world::Guest::run - Add export_layer_agent_world! macro for components implementing both Guest and GuestAgent - All existing legacy components compile: square, kv-store, echo-data, permissions
…ntegration test - Add examples/components/multi-step-agent: agent component that runs 4 steps (0-2 → Continue, 3 → Done) with KV-persisted checkpoints in agent_state bucket - Implement GuestAgent::run_agent using wasi::keyvalue::store with step counter - Build WASM binary: examples/build/components/multi_step_agent.wasm - Add COMPONENT_MULTI_STEP_AGENT_BYTES constant to mock_engine.rs - Create packages/engine/tests/continuation_e2e.rs with 2 tests: multi_step_agent_runs_to_completion: verifies JSON summary with 4 checkpoints multi_step_agent_kv_checkpoints_exist: verifies KV keys checkpoint:0..3 exist - Both tests pass: 2/2 ok
- utility-service: legacy run-only component that echoes payload with 'utility-response: ' prefix - composition-agent: agent component that calls utility-service via call_service host import - Both WASM binaries built natively via cargo build --target wasm32-wasip2 - utility-service service.json: allowed_callers = 'all' - composition-agent service.json: allowed_service_calls = 'all', max_continuation_steps = 5 - Both crates added to workspace Cargo.toml members
… E2E-06 - Add COMPONENT_UTILITY_SERVICE_BYTES and COMPONENT_COMPOSITION_AGENT_BYTES constants - Add MockRpcCaller in helpers/mock_rpc.rs: executes callee WASM inline via engine - Add make_service_with_allowed_calls helper for services with AllowedServiceCalls::All - Add try_execute_component_raw_with_rpc helper for tests needing RPC injection - Add rpc_e2e.rs with 3 tests: - composition_agent_calls_utility_service: proves E2E RPC works end-to-end - caller_without_allowed_service_calls_denied: proves caller permission enforcement - callee_without_allowed_callers_rejected_error_format: proves callee error message format - All 3 tests pass: cargo test -p wavs-engine --test rpc_e2e - Full engine suite regression-free: all existing tests still pass
…comparison, restore reqwest as default feature for native builds
Contributor
Author
|
Closing, will reopen as smaller PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contains a lot of the #1142 Better MCP work and more... do not merge.\
Will likely break this work up into some smaller PRs.