fix: resolve CLI service imports and update blockchain documentation

- Add proper package imports for coordinator-api services
- Fix 6 command modules to use app.services.* with clean path resolution
- Remove brittle path hacks and user-specific fallbacks
- Update blockchain-node README with operational status, API endpoints, and troubleshooting
- Add blockchain section to main README with quick launch and CLI examples
- Remove generated genesis.json from repository (should be ignored)

These changes fix import errors in surveillance, ai-trading, ai-surveillance,
advanced-analytics, regulatory, and enterprise-integration commands, and
document the now-operational Brother Chain (blockchain node).

Co-authored with sibling aitbc instance (coordination via Gitea).
This commit is contained in:
2026-03-15 10:09:48 +00:00
parent 0a0a8a1e15
commit c390ba07c1
9 changed files with 259 additions and 177 deletions

View File

@@ -10,33 +10,16 @@ import json
from typing import Optional, List, Dict, Any
from datetime import datetime, timedelta
# Import surveillance system with robust path resolution
# Ensure coordinator-api src is on path for app.services imports
import os
import sys
# Determine services path: use AITBC_SERVICES_PATH if set, else compute relative to repo layout
_services_path = os.environ.get('AITBC_SERVICES_PATH')
if _services_path:
if os.path.isdir(_services_path):
if _services_path not in sys.path:
sys.path.insert(0, _services_path)
else:
print(f"Warning: AITBC_SERVICES_PATH set but not a directory: {_services_path}", file=sys.stderr)
else:
# Compute project root relative to this file: cli/aitbc_cli/commands -> 3 levels up to project root
_project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
_computed_services = os.path.join(_project_root, 'apps', 'coordinator-api', 'src', 'app', 'services')
if os.path.isdir(_computed_services) and _computed_services not in sys.path:
sys.path.insert(0, _computed_services)
else:
# Fallback to known hardcoded path if it exists (for legacy deployments)
_fallback = '/home/oib/windsurf/aitbc/apps/coordinator-api/src/app/services'
if os.path.isdir(_fallback) and _fallback not in sys.path:
sys.path.insert(0, _fallback)
_src_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'apps', 'coordinator-api', 'src'))
if _src_path not in sys.path:
sys.path.insert(0, _src_path)
try:
from trading_surveillance import (
start_surveillance, stop_surveillance, get_alerts,
from app.services.trading_surveillance import (
start_surveillance, stop_surveillance, get_alerts,
get_surveillance_summary, AlertLevel
)
_import_error = None
@@ -45,8 +28,8 @@ except ImportError as e:
def _missing(*args, **kwargs):
raise ImportError(
f"Required service module 'trading_surveillance' could not be imported: {_import_error}. "
"Ensure coordinator-api dependencies are installed or set AITBC_SERVICES_PATH."
f"Required service module 'app.services.trading_surveillance' could not be imported: {_import_error}. "
"Ensure coordinator-api dependencies are installed and the source directory is accessible."
)
start_surveillance = stop_surveillance = get_alerts = get_surveillance_summary = _missing
@@ -237,7 +220,7 @@ def resolve(ctx, alert_id: str, resolution: str):
click.echo(f"🔍 Resolving alert: {alert_id}")
# Import surveillance to access resolve function
from trading_surveillance import surveillance
from app.services.trading_surveillance import surveillance
success = surveillance.resolve_alert(alert_id, resolution)
@@ -263,7 +246,7 @@ def test(ctx, symbols: str, duration: int):
click.echo(f"⏱️ Duration: {duration} seconds")
# Import test function
from trading_surveillance import test_trading_surveillance
from app.services.trading_surveillance import test_trading_surveillance
# Run test
asyncio.run(test_trading_surveillance())
@@ -289,7 +272,7 @@ def test(ctx, symbols: str, duration: int):
def status(ctx):
"""Show current surveillance status"""
try:
from trading_surveillance import surveillance
from app.services.trading_surveillance import surveillance
click.echo(f"📊 Trading Surveillance Status")