New router intelligence modules (26 files): alert_ingest/store, audit_store, architecture_pressure, backlog_generator/store, cost_analyzer, data_governance, dependency_scanner, drift_analyzer, incident_* (5 files), llm_enrichment, platform_priority_digest, provider_budget, release_check_runner, risk_* (6 files), signature_state_store, sofiia_auto_router, tool_governance New services: - sofiia-console: Dockerfile, adapters/, monitor/nodes/ops/voice modules, launchd, react static - memory-service: integration_endpoints, integrations, voice_endpoints, static UI - aurora-service: full app suite (analysis, job_store, orchestrator, reporting, schemas, subagents) - sofiia-supervisor: new supervisor service - aistalk-bridge-lite: Telegram bridge lite - calendar-service: CalDAV calendar service with reminders - mlx-stt-service / mlx-tts-service: Apple Silicon speech services - binance-bot-monitor: market monitor service - node-worker: STT/TTS memory providers New tools (9): agent_email, browser_tool, contract_tool, observability_tool, oncall_tool, pr_reviewer_tool, repo_tool, safe_code_executor, secure_vault New crews: agromatrix_crew (10 modules: depth_classifier, doc_facts, doc_focus, farm_state, light_reply, llm_factory, memory_manager, proactivity, reflection_engine, session_context, style_adapter, telemetry) Tests: 85+ test files for all new modules Made-with: Cursor
141 lines
4.0 KiB
Python
141 lines
4.0 KiB
Python
"""
|
|
Test 2: Bank Account Data Extraction
|
|
|
|
Demonstrates:
|
|
- Login to bank portal
|
|
- Extract account balances
|
|
- Extract transaction history
|
|
- Extract credit card info
|
|
- Handle multi-page data
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from browser_tool import BrowserTool
|
|
|
|
|
|
def test_bank_extraction():
|
|
"""Test extracting data from a bank account"""
|
|
|
|
browser = BrowserTool(
|
|
agent_id="sofiia-test",
|
|
headless=False,
|
|
stealth=True
|
|
)
|
|
|
|
print("=== Starting browser session ===")
|
|
session = browser.start_session()
|
|
print(f"Session: {session['session_id']}")
|
|
|
|
# Navigate to demo bank site (using a simple example)
|
|
print("\n=== Navigating to bank login ===")
|
|
browser.goto("https://demo.aponline.com.au/login")
|
|
|
|
# Take screenshot
|
|
browser.screenshot("/tmp/bank_login.png")
|
|
|
|
# Observe login fields
|
|
print("\n=== Observing bank login page ===")
|
|
actions = browser.observe("What login fields are available?")
|
|
print(f"Found {len(actions)} elements")
|
|
|
|
# Note: In production, you'd use actual bank credentials
|
|
# For demo, we'll just show the extraction part
|
|
|
|
# After login, extract account data
|
|
print("\n=== Extracting account balances ===")
|
|
balances = browser.extract(
|
|
"Extract all account balances and account numbers",
|
|
schema={
|
|
"account_name": "string",
|
|
"account_number": "string",
|
|
"balance": "number",
|
|
"currency": "string"
|
|
}
|
|
)
|
|
print(f"Found {balances.get('count', 0)} accounts")
|
|
for acc in balances.get('data', [])[:5]:
|
|
print(f" - {acc}")
|
|
|
|
# Extract transactions
|
|
print("\n=== Extracting transactions ===")
|
|
transactions = browser.extract(
|
|
"Extract recent transactions with date, description, amount",
|
|
schema={
|
|
"date": "string",
|
|
"description": "string",
|
|
"amount": "number",
|
|
"type": "string"
|
|
}
|
|
)
|
|
print(f"Found {transactions.get('count', 0)} transactions")
|
|
for tx in transactions.get('data', [])[:10]:
|
|
print(f" - {tx}")
|
|
|
|
# Extract credit card info
|
|
print("\n=== Extracting credit card info ===")
|
|
cards = browser.extract(
|
|
"Extract credit card details",
|
|
schema={
|
|
"card_name": "string",
|
|
"last_4": "string",
|
|
"balance": "number",
|
|
"limit": "number"
|
|
}
|
|
)
|
|
print(f"Found {cards.get('count', 0)} cards")
|
|
|
|
# Extract pending payments
|
|
print("\n=== Extracting pending payments ===")
|
|
pending = browser.extract("Extract pending payments or bills")
|
|
print(f"Found {pending.get('count', 0)} pending items")
|
|
|
|
# Screenshot of dashboard
|
|
browser.screenshot("/tmp/bank_dashboard.png")
|
|
|
|
# Close
|
|
print("\n=== Closing session ===")
|
|
browser.close_session()
|
|
|
|
return True
|
|
|
|
|
|
def test_crypto_exchange():
|
|
"""Test extracting data from crypto exchange"""
|
|
|
|
browser = BrowserTool(agent_id="sofiia-test", headless=True)
|
|
session = browser.start_session()
|
|
|
|
# Navigate to crypto exchange (e.g., Binance demo)
|
|
print("\n=== Navigating to exchange ===")
|
|
browser.goto("https://www.binance.com/en/trade/BTC_USDT")
|
|
|
|
# Wait for page load
|
|
import time
|
|
time.sleep(3)
|
|
|
|
# Extract balances
|
|
print("\n=== Extracting wallet balances ===")
|
|
balances = browser.extract("Extract all wallet balances")
|
|
print(f"Found {balances.get('count', 0)} wallets")
|
|
|
|
# Extract current price
|
|
print("\n=== Extracting BTC price ===")
|
|
price = browser.extract("Extract BTC/USDT current price")
|
|
print(f"Price data: {price}")
|
|
|
|
# Extract open orders
|
|
orders = browser.extract("Extract open orders")
|
|
print(f"Open orders: {orders.get('count', 0)}")
|
|
|
|
browser.screenshot("/tmp/exchange_dashboard.png")
|
|
browser.close_session()
|
|
|
|
return True
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_bank_extraction()
|