Migrate all agent roles from Legacy to EvoAgent architecture: - fundamentals_analyst, technical_analyst, sentiment_analyst, valuation_analyst - risk_manager, portfolio_manager Key changes: - EvoAgent now supports Portfolio Manager compatibility methods (_make_decision, get_decisions, get_portfolio_state, load_portfolio_state, update_portfolio) - Add UnifiedAgentFactory for centralized agent creation - ToolGuard with batch approval API and WebSocket broadcast - Legacy agents marked deprecated (AnalystAgent, RiskAgent, PMAgent) - Remove backend/agents/compat.py migration shim - Add run_id alongside workspace_id for semantic clarity - Complete integration test coverage (13 tests) - All smoke tests passing for 6 agent roles Constraint: Must maintain backward compatibility with existing run configs Constraint: Memory support must work with EvoAgent (no fallback to Legacy) Rejected: Separate PM implementation for EvoAgent | unified approach cleaner Confidence: high Scope-risk: broad Directive: EVO_AGENT_IDS env var still respected but defaults to all roles Not-tested: Kubernetes sandbox mode for skill execution
1239 lines
31 KiB
Plaintext
1239 lines
31 KiB
Plaintext
{
|
|
"type": "excalidraw",
|
|
"version": 2,
|
|
"source": "https://excalidraw.com",
|
|
"elements": [
|
|
{
|
|
"id": "frontend-box",
|
|
"type": "rectangle",
|
|
"x": 80,
|
|
"y": 80,
|
|
"width": 220,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffd43b",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 1,
|
|
"version": 1,
|
|
"versionNonce": 1,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-front-runtime", "type": "arrow" },
|
|
{ "id": "a-front-agent", "type": "arrow" },
|
|
{ "id": "a-front-trading", "type": "arrow" },
|
|
{ "id": "a-front-news", "type": "arrow" },
|
|
{ "id": "a-front-ws", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "frontend-text",
|
|
"type": "text",
|
|
"x": 110,
|
|
"y": 104,
|
|
"width": 160,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 2,
|
|
"version": 1,
|
|
"versionNonce": 2,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "Frontend\\nReact + Vite + Zustand",
|
|
"fontSize": 20,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "Frontend\nReact + Vite + Zustand",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "agent-box",
|
|
"type": "rectangle",
|
|
"x": 390,
|
|
"y": 40,
|
|
"width": 260,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#a5d8ff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 3,
|
|
"version": 1,
|
|
"versionNonce": 3,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-agent-runs", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "agent-text",
|
|
"type": "text",
|
|
"x": 425,
|
|
"y": 64,
|
|
"width": 190,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 4,
|
|
"version": 1,
|
|
"versionNonce": 4,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "agent_service :8000\\ncontrol plane / skills / files",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "agent_service :8000\ncontrol plane / skills / files",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "runtime-box",
|
|
"type": "rectangle",
|
|
"x": 390,
|
|
"y": 170,
|
|
"width": 260,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#a5d8ff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 5,
|
|
"version": 1,
|
|
"versionNonce": 5,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-runtime-gateway", "type": "arrow" },
|
|
{ "id": "a-runtime-runs", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "runtime-text",
|
|
"type": "text",
|
|
"x": 420,
|
|
"y": 194,
|
|
"width": 200,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 6,
|
|
"version": 1,
|
|
"versionNonce": 6,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "runtime_service :8003\\nstart / stop / history / logs",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "runtime_service :8003\nstart / stop / history / logs",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "trading-box",
|
|
"type": "rectangle",
|
|
"x": 390,
|
|
"y": 300,
|
|
"width": 260,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#b2f2bb",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 7,
|
|
"version": 1,
|
|
"versionNonce": 7,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-trading-market", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "trading-text",
|
|
"type": "text",
|
|
"x": 425,
|
|
"y": 324,
|
|
"width": 190,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 8,
|
|
"version": 1,
|
|
"versionNonce": 8,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "trading_service :8001\\nprices / financials / market APIs",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "trading_service :8001\nprices / financials / market APIs",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "news-box",
|
|
"type": "rectangle",
|
|
"x": 390,
|
|
"y": 430,
|
|
"width": 260,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#b2f2bb",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 9,
|
|
"version": 1,
|
|
"versionNonce": 9,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-news-market", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "news-text",
|
|
"type": "text",
|
|
"x": 428,
|
|
"y": 454,
|
|
"width": 184,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 10,
|
|
"version": 1,
|
|
"versionNonce": 10,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "news_service :8002\\nnews / story / explain APIs",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "news_service :8002\nnews / story / explain APIs",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "gateway-box",
|
|
"type": "rectangle",
|
|
"x": 760,
|
|
"y": 170,
|
|
"width": 300,
|
|
"height": 120,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffc9c9",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 11,
|
|
"version": 1,
|
|
"versionNonce": 11,
|
|
"isDeleted": false,
|
|
"boundElements": [
|
|
{ "id": "a-gateway-market", "type": "arrow" },
|
|
{ "id": "a-gateway-storage", "type": "arrow" },
|
|
{ "id": "a-gateway-pipeline", "type": "arrow" },
|
|
{ "id": "a-gateway-openclaw", "type": "arrow" }
|
|
],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "gateway-text",
|
|
"type": "text",
|
|
"x": 810,
|
|
"y": 204,
|
|
"width": 200,
|
|
"height": 52,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 12,
|
|
"version": 1,
|
|
"versionNonce": 12,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "Gateway :8765\\nbackend.main\\nWebSocket + runtime orchestration",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "Gateway :8765\nbackend.main\nWebSocket + runtime orchestration",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "pipeline-box",
|
|
"type": "rectangle",
|
|
"x": 1150,
|
|
"y": 80,
|
|
"width": 260,
|
|
"height": 100,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffe8cc",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 13,
|
|
"version": 1,
|
|
"versionNonce": 13,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "pipeline-text",
|
|
"type": "text",
|
|
"x": 1180,
|
|
"y": 108,
|
|
"width": 200,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 14,
|
|
"version": 1,
|
|
"versionNonce": 14,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "TradingPipeline\\nanalysts + risk + PM",
|
|
"fontSize": 20,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "TradingPipeline\nanalysts + risk + PM",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "market-box",
|
|
"type": "rectangle",
|
|
"x": 1150,
|
|
"y": 230,
|
|
"width": 260,
|
|
"height": 100,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffe8cc",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 15,
|
|
"version": 1,
|
|
"versionNonce": 15,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "market-text",
|
|
"type": "text",
|
|
"x": 1190,
|
|
"y": 258,
|
|
"width": 180,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 16,
|
|
"version": 1,
|
|
"versionNonce": 16,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "MarketService\\nprovider router / polling",
|
|
"fontSize": 20,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "MarketService\nprovider router / polling",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "storage-box",
|
|
"type": "rectangle",
|
|
"x": 1150,
|
|
"y": 380,
|
|
"width": 260,
|
|
"height": 100,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffe8cc",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 17,
|
|
"version": 1,
|
|
"versionNonce": 17,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "storage-text",
|
|
"type": "text",
|
|
"x": 1180,
|
|
"y": 408,
|
|
"width": 200,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 18,
|
|
"version": 1,
|
|
"versionNonce": 18,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "StorageService\\ndashboard + state exports",
|
|
"fontSize": 20,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "StorageService\ndashboard + state exports",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "runs-box",
|
|
"type": "rectangle",
|
|
"x": 760,
|
|
"y": 410,
|
|
"width": 300,
|
|
"height": 140,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#d0ebff",
|
|
"fillStyle": "hachure",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 19,
|
|
"version": 1,
|
|
"versionNonce": 19,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "runs-text",
|
|
"type": "text",
|
|
"x": 795,
|
|
"y": 446,
|
|
"width": 230,
|
|
"height": 68,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 20,
|
|
"version": 1,
|
|
"versionNonce": 20,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "runs/<run_id>/\\nBOOTSTRAP.md\\nstate/runtime_state.json\\nteam_dashboard/*.json",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "runs/<run_id>/\nBOOTSTRAP.md\nstate/runtime_state.json\nteam_dashboard/*.json",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "openclaw-box",
|
|
"type": "rectangle",
|
|
"x": 1150,
|
|
"y": 530,
|
|
"width": 260,
|
|
"height": 100,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#fff3bf",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 21,
|
|
"version": 1,
|
|
"versionNonce": 21,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "openclaw-text",
|
|
"type": "text",
|
|
"x": 1180,
|
|
"y": 558,
|
|
"width": 200,
|
|
"height": 42,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 22,
|
|
"version": 1,
|
|
"versionNonce": 22,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "OpenClaw WS :18789\\noptional REST :8004",
|
|
"fontSize": 20,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "OpenClaw WS :18789\noptional REST :8004",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "legacy-box",
|
|
"type": "rectangle",
|
|
"x": 80,
|
|
"y": 350,
|
|
"width": 220,
|
|
"height": 190,
|
|
"angle": 0,
|
|
"strokeColor": "#868e96",
|
|
"backgroundColor": "#f1f3f5",
|
|
"fillStyle": "cross-hatch",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "dashed",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": { "type": 3 },
|
|
"seed": 23,
|
|
"version": 1,
|
|
"versionNonce": 23,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "legacy-text",
|
|
"type": "text",
|
|
"x": 105,
|
|
"y": 392,
|
|
"width": 170,
|
|
"height": 106,
|
|
"angle": 0,
|
|
"strokeColor": "#495057",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 24,
|
|
"version": 1,
|
|
"versionNonce": 24,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"text": "Legacy / compatibility\\nworkspaces/\\nlive/\\nbacktest/\\nproduction/\\nnot source of truth",
|
|
"fontSize": 18,
|
|
"fontFamily": 5,
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "Legacy / compatibility\nworkspaces/\nlive/\nbacktest/\nproduction/\nnot source of truth",
|
|
"lineHeight": 1.2
|
|
},
|
|
{
|
|
"id": "a-front-runtime",
|
|
"type": "arrow",
|
|
"x": 300,
|
|
"y": 125,
|
|
"width": 90,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 25,
|
|
"version": 1,
|
|
"versionNonce": 25,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [90, 90]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "frontend-box", "focus": 0.1, "gap": 0 },
|
|
"endBinding": { "elementId": "runtime-box", "focus": -0.8, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-front-agent",
|
|
"type": "arrow",
|
|
"x": 300,
|
|
"y": 105,
|
|
"width": 90,
|
|
"height": 0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 26,
|
|
"version": 1,
|
|
"versionNonce": 26,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [90, 0]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "frontend-box", "focus": -0.45, "gap": 0 },
|
|
"endBinding": { "elementId": "agent-box", "focus": 0, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-front-trading",
|
|
"type": "arrow",
|
|
"x": 300,
|
|
"y": 140,
|
|
"width": 90,
|
|
"height": 205,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 27,
|
|
"version": 1,
|
|
"versionNonce": 27,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [90, 205]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "frontend-box", "focus": 0.35, "gap": 0 },
|
|
"endBinding": { "elementId": "trading-box", "focus": -0.85, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-front-news",
|
|
"type": "arrow",
|
|
"x": 300,
|
|
"y": 145,
|
|
"width": 90,
|
|
"height": 330,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 28,
|
|
"version": 1,
|
|
"versionNonce": 28,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [90, 330]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "frontend-box", "focus": 0.45, "gap": 0 },
|
|
"endBinding": { "elementId": "news-box", "focus": -0.85, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-front-ws",
|
|
"type": "arrow",
|
|
"x": 300,
|
|
"y": 122,
|
|
"width": 460,
|
|
"height": 98,
|
|
"angle": 0,
|
|
"strokeColor": "#c2255c",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 3,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 29,
|
|
"version": 1,
|
|
"versionNonce": 29,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [460, 98]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "frontend-box", "focus": 0.05, "gap": 0 },
|
|
"endBinding": { "elementId": "gateway-box", "focus": -0.45, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-runtime-gateway",
|
|
"type": "arrow",
|
|
"x": 650,
|
|
"y": 215,
|
|
"width": 110,
|
|
"height": 0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 30,
|
|
"version": 1,
|
|
"versionNonce": 30,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [110, 0]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "runtime-box", "focus": 0, "gap": 0 },
|
|
"endBinding": { "elementId": "gateway-box", "focus": 0, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-runtime-runs",
|
|
"type": "arrow",
|
|
"x": 575,
|
|
"y": 260,
|
|
"width": 265,
|
|
"height": 150,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 31,
|
|
"version": 1,
|
|
"versionNonce": 31,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [265, 150]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "runtime-box", "focus": 0.3, "gap": 0 },
|
|
"endBinding": { "elementId": "runs-box", "focus": -0.8, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-agent-runs",
|
|
"type": "arrow",
|
|
"x": 530,
|
|
"y": 130,
|
|
"width": 315,
|
|
"height": 280,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "dashed",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 32,
|
|
"version": 1,
|
|
"versionNonce": 32,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [315, 280]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "agent-box", "focus": 0.1, "gap": 0 },
|
|
"endBinding": { "elementId": "runs-box", "focus": -0.9, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-gateway-pipeline",
|
|
"type": "arrow",
|
|
"x": 960,
|
|
"y": 170,
|
|
"width": 190,
|
|
"height": 40,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 33,
|
|
"version": 1,
|
|
"versionNonce": 33,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 40], [190, 0]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "gateway-box", "focus": -0.65, "gap": 0 },
|
|
"endBinding": { "elementId": "pipeline-box", "focus": 0.3, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-gateway-market",
|
|
"type": "arrow",
|
|
"x": 1060,
|
|
"y": 230,
|
|
"width": 90,
|
|
"height": 40,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 34,
|
|
"version": 1,
|
|
"versionNonce": 34,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [90, 40]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "gateway-box", "focus": 0.05, "gap": 0 },
|
|
"endBinding": { "elementId": "market-box", "focus": -0.3, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-gateway-storage",
|
|
"type": "arrow",
|
|
"x": 1020,
|
|
"y": 290,
|
|
"width": 130,
|
|
"height": 90,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 35,
|
|
"version": 1,
|
|
"versionNonce": 35,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [130, 90]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "gateway-box", "focus": 0.55, "gap": 0 },
|
|
"endBinding": { "elementId": "storage-box", "focus": -0.5, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-gateway-openclaw",
|
|
"type": "arrow",
|
|
"x": 1005,
|
|
"y": 290,
|
|
"width": 145,
|
|
"height": 240,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "dashed",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 36,
|
|
"version": 1,
|
|
"versionNonce": 36,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [145, 240]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "gateway-box", "focus": 0.7, "gap": 0 },
|
|
"endBinding": { "elementId": "openclaw-box", "focus": -0.8, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-trading-market",
|
|
"type": "arrow",
|
|
"x": 650,
|
|
"y": 345,
|
|
"width": 500,
|
|
"height": 0,
|
|
"angle": 0,
|
|
"strokeColor": "#2b8a3e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 37,
|
|
"version": 1,
|
|
"versionNonce": 37,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [500, -65]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "trading-box", "focus": 0.1, "gap": 0 },
|
|
"endBinding": { "elementId": "market-box", "focus": 0.25, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
},
|
|
{
|
|
"id": "a-news-market",
|
|
"type": "arrow",
|
|
"x": 650,
|
|
"y": 475,
|
|
"width": 500,
|
|
"height": 195,
|
|
"angle": 0,
|
|
"strokeColor": "#2b8a3e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"roundness": null,
|
|
"seed": 38,
|
|
"version": 1,
|
|
"versionNonce": 38,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 1,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [[0, 0], [500, -195]],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": { "elementId": "news-box", "focus": 0.1, "gap": 0 },
|
|
"endBinding": { "elementId": "market-box", "focus": 0.6, "gap": 0 },
|
|
"startArrowhead": null,
|
|
"endArrowhead": "triangle"
|
|
}
|
|
],
|
|
"appState": {
|
|
"viewBackgroundColor": "#ffffff",
|
|
"gridSize": 20
|
|
},
|
|
"files": {}
|
|
}
|