Harden trading bridge integration and CI coverage#20
Conversation
Greptile SummaryConsolidated multiple trading control tools into a unified Key Changes:
Issues Found:
Confidence Score: 4/5
|
| Filename | Overview |
|---|---|
| .openclaw/extensions/trading-bridge/src/index.test.ts | New test file covering capabilities parsing, compatibility checks, and command building with good edge case coverage |
| .openclaw/extensions/trading-bridge/src/index.ts | Major refactoring to unified trading_hft tool with confidence-gated high-impact actions, capabilities caching, and precondition checks |
| crates/trading_daemon/src/main.rs | Added Control.Capabilities command support, schema version reporting in status responses, and comprehensive tests |
| crates/trading_protocol/src/lib.rs | Added Control.Capabilities command, STATUS_SCHEMA_VERSION constant, and new payload types for capability reporting |
| trading-cli | Added capabilities and doctor commands with comprehensive health checking of daemon and gateway integration |
Sequence Diagram
sequenceDiagram
participant Agent as AI Agent
participant Gateway as OpenClaw Gateway
participant Bridge as Trading Bridge Extension
participant Daemon as Trading Daemon (Rust)
Note over Agent,Daemon: High-Impact Action Flow (engine_start)
Agent->>Gateway: POST /tools/invoke<br/>trading_hft(action=engine_start)
Gateway->>Bridge: Execute tool
Bridge->>Bridge: Check connection status
Bridge->>Daemon: Control.Capabilities
Daemon-->>Bridge: protocol_version, status_schema_version, commands
Bridge->>Bridge: Validate compatibility<br/>(protocol>=1, schema>=2, commands)
Bridge->>Daemon: Control.Ping
Daemon-->>Bridge: ok + latency_ms
Bridge->>Bridge: Check latency <= 250ms
par Refresh Snapshots
Bridge->>Daemon: Engine.Status
Daemon-->>Bridge: engine state + strategies
and
Bridge->>Daemon: Risk.Status
Daemon-->>Bridge: risk state + limits
end
Bridge->>Bridge: Precondition Check<br/>(kill_switch_engaged?)
alt Confidence Gate Passed
Bridge->>Daemon: Control.Start
Daemon-->>Bridge: Status response
Bridge-->>Gateway: ok=true + confidence + data
Gateway-->>Agent: Success result
else Confidence Gate Failed
Bridge-->>Gateway: ok=false + failed checks
Gateway-->>Agent: Blocked by confidence gate
end
Note over Agent,Daemon: Low-Impact Action Flow (engine_status)
Agent->>Gateway: POST /tools/invoke<br/>trading_hft(action=engine_status)
Gateway->>Bridge: Execute tool
Bridge->>Daemon: Engine.Status
Daemon-->>Bridge: Status payload
Bridge-->>Gateway: ok=true + data
Gateway-->>Agent: Success result
Last reviewed commit: d380e5d
| case "risk_reset_kill_switch": { | ||
| const killSwitch = riskState?.kill_switch_engaged; | ||
| return { | ||
| name: "action_precondition", | ||
| passed: killSwitch === true, | ||
| details: | ||
| killSwitch === true | ||
| ? "kill switch engaged; reset allowed" | ||
| : "kill switch is not engaged; reset rejected for confidence", | ||
| }; |
There was a problem hiding this comment.
precondition check uses riskState?.kill_switch_engaged but should check engineState?.kill_switch_engaged for consistency with engine_start/engine_resume checks
| case "risk_reset_kill_switch": { | |
| const killSwitch = riskState?.kill_switch_engaged; | |
| return { | |
| name: "action_precondition", | |
| passed: killSwitch === true, | |
| details: | |
| killSwitch === true | |
| ? "kill switch engaged; reset allowed" | |
| : "kill switch is not engaged; reset rejected for confidence", | |
| }; | |
| case "risk_reset_kill_switch": { | |
| const killSwitch = engineState?.kill_switch_engaged; | |
| return { | |
| name: "action_precondition", | |
| passed: killSwitch === true, | |
| details: | |
| killSwitch === true | |
| ? "kill switch engaged; reset allowed" | |
| : "kill switch is not engaged; reset rejected for confidence", | |
| }; | |
| } |
Greptile SummaryThis PR significantly hardens the trading bridge integration by introducing a comprehensive confidence-gating system for high-impact trading actions. The changes unify the dual-tool pattern into a single Key changes:
Confidence Score: 5/5
|
| Filename | Overview |
|---|---|
| .github/workflows/non-agent-tests.yml | Adds two new CI jobs for testing Rust trading crates and trading bridge TypeScript extension |
| .openclaw/extensions/trading-bridge/src/index.ts | Major refactor: replaces dual tool pattern with unified trading_hft tool, adds confidence gate system with precondition checks, capabilities negotiation, and comprehensive health checks for high-impact actions |
| crates/trading_daemon/src/main.rs | Adds Control.Capabilities handler, status_schema_version tracking, daemon build info payload, and corresponding unit tests |
| crates/trading_protocol/src/lib.rs | Adds STATUS_SCHEMA_VERSION constant, Control.Capabilities command enum variant, and payload structs for capabilities and daemon build info |
| trading-cli | Adds doctor diagnostic command and capabilities command, with comprehensive health checks for daemon/gateway integration |
Sequence Diagram
sequenceDiagram
participant Agent as AI Agent
participant Gateway as OpenClaw Gateway
participant Bridge as Trading Bridge Extension
participant Daemon as Trading Daemon (Rust)
participant Engine as Trading Engine
Note over Bridge,Daemon: On Connection
Bridge->>Daemon: Control.Capabilities
Daemon-->>Bridge: protocol_version, status_schema_version, command_kinds_supported
Note over Agent,Engine: High-Impact Action Flow (e.g., engine_start)
Agent->>Gateway: trading_hft {action: "engine_start"}
Gateway->>Bridge: Execute Action
Bridge->>Daemon: Control.Capabilities (cached)
Bridge->>Bridge: Validate protocol compatibility
Bridge->>Daemon: Control.Ping
Daemon-->>Bridge: pong (latency check)
Bridge->>Daemon: Engine.Status + Risk.Status
Daemon-->>Bridge: Current state snapshot
Bridge->>Bridge: preconditionCheck(kill_switch_engaged)
alt Kill Switch Engaged
Bridge-->>Gateway: Confidence Gate Failed
Gateway-->>Agent: Action Blocked
else Kill Switch Clear
Bridge->>Daemon: Control.Start
Daemon->>Engine: Start Trading Engine
Daemon-->>Bridge: Success
Bridge-->>Gateway: Action Completed
Gateway-->>Agent: Success Response
end
Last reviewed commit: 04c0b54
No description provided.