From c83f51e0b921a538b308a1a233a82796cef212af Mon Sep 17 00:00:00 2001 From: aitbc Date: Wed, 13 May 2026 11:06:32 +0200 Subject: [PATCH] refactor: reorganize imports to use bounded context structure - Updated import paths across agent_identity modules to use contexts.agent_identity.domain - Updated import paths in routers to use context-based service locations - Fixed database configuration fields in config.py (db_echo, db_pool_size, db_max_overflow, db_pool_recycle, db_pool_pre_ping) - Changed IdentityVerification table name from IDENTITY_VERIFICATION_TABLE constant to hardcoded "identity_verifications" - Added BlockchainService --- .../src/app/agent_identity/core.py | 2 +- .../src/app/agent_identity/manager.py | 2 +- .../src/app/agent_identity/registry.py | 2 +- .../src/app/agent_identity/wallet_adapter.py | 2 +- .../agent_identity/wallet_adapter_enhanced.py | 2 +- apps/coordinator-api/src/app/config.py | 5 + .../routers/adaptive_learning_health.py | 2 +- .../routers/agent_creativity.py | 2 +- .../routers/agent_integration_router.py | 2 +- .../routers/agent_router.py | 3 +- .../services/creative_capabilities_service.py | 21 ++++ .../agent_identity/domain/agent_identity.py | 2 +- .../agent_identity/routers/agent_identity.py | 2 +- .../ai_analytics/adaptive_learning.py | 2 +- .../services/ai_analytics/analytics.py | 2 +- .../contexts/analytics/routers/analytics.py | 2 +- .../blockchain/services/blockchain.py | 7 ++ .../src/app/contexts/bounty/routers/bounty.py | 32 +++---- .../certification/routers/certification.py | 2 +- .../services/certification/badge_system.py | 4 +- .../certification/certification_system.py | 4 +- .../certification/partnership_manager.py | 4 +- .../services/certification/service.py | 2 +- .../contexts/community/routers/community.py | 10 +- .../confidential/routers/confidential.py | 12 +-- .../routers/cross_chain_integration.py | 2 +- .../services/cross_chain/bridge_enhanced.py | 6 +- .../routers/developer_platform.py | 2 +- .../ecosystem/routers/ecosystem_dashboard.py | 44 ++++----- .../src/app/contexts/edge_gpu/__init__.py | 5 + .../app/contexts/edge_gpu/routers/__init__.py | 5 + .../edge_gpu}/routers/edge_gpu.py | 0 .../contexts/edge_gpu/services/__init__.py | 5 + .../edge_gpu}/services/edge_gpu_service.py | 6 +- .../contexts/governance/routers/governance.py | 2 +- .../governance/routers/governance_enhanced.py | 2 +- .../contexts/governance/services/__init__.py | 4 + .../hermes/routers/hermes_enhanced.py | 2 +- .../hermes/routers/hermes_enhanced_health.py | 2 +- .../hermes/routers/hermes_enhanced_simple.py | 2 +- .../src/app/contexts/language/__init__.py | 5 + .../contexts/language/services/__init__.py | 5 + .../services/multi_language/README.md | 0 .../services/multi_language/__init__.py | 0 .../services/multi_language/api_endpoints.py | 0 .../services/multi_language/config.py | 0 .../multi_language/database_schema.sql | 0 .../multi_language/language_detector.py | 0 .../multi_language/quality_assurance.py | 0 .../services/multi_language/requirements.txt | 0 .../multi_language/translation_cache.py | 0 .../multi_language/translation_engine.py | 0 .../marketplace/domain/marketplace.py | 2 + .../marketplace/routers/global_marketplace.py | 4 +- .../routers/global_marketplace_integration.py | 6 +- .../marketplace/routers/marketplace.py | 2 +- .../marketplace/routers/marketplace_gpu.py | 18 ++-- .../marketplace/routers/marketplace_offers.py | 3 +- .../contexts/marketplace/services/__init__.py | 4 + .../services/global_marketplace.py | 4 +- .../global_marketplace_integration.py | 8 +- .../marketplace/services/marketplace.py | 2 +- .../multimodal/routers/multimodal_health.py | 2 +- .../services/modality_optimization.py | 2 +- .../multimodal/services/multimodal_agent.py | 4 +- .../app/contexts/payments/domain/payment.py | 2 +- .../app/contexts/payments/routers/payments.py | 2 +- .../contexts/payments/services/payments.py | 2 +- .../contexts/reputation/routers/reputation.py | 16 ++-- .../app/contexts/rewards/routers/rewards.py | 2 +- .../security/routers/agent_security_router.py | 2 +- .../security/services/access_control.py | 2 +- .../security/services/key_management.py | 2 +- .../contexts/settlement/routers/settlement.py | 2 +- .../app/contexts/staking/routers/staking.py | 28 +++--- .../app/contexts/trading/routers/trading.py | 2 +- .../services/trading_marketplace/__init__.py | 3 - .../services/trading_marketplace/trading.py | 2 +- .../src/app/contexts/wallet/__init__.py | 5 + .../app/contexts/wallet/services/__init__.py | 7 ++ .../wallet}/services/bitcoin_wallet.py | 0 .../wallet}/services/secure_wallet_service.py | 6 +- .../wallet}/services/wallet_crypto.py | 0 .../wallet}/services/wallet_service.py | 8 +- .../coordinator-api/src/app/database_async.py | 2 +- apps/coordinator-api/src/app/main.py | 39 +++----- .../src/app/models/__init__.py | 12 ++- .../src/app/routers/__init__.py | 95 ++++++++++--------- .../coordinator-api/src/app/routers/client.py | 2 +- .../src/app/routers/dynamic_pricing.py | 2 +- .../src/app/routers/exchange.py | 4 +- .../src/app/routers/marketplace_enhanced.py | 2 +- .../routers/marketplace_enhanced_health.py | 2 +- .../routers/marketplace_enhanced_simple.py | 2 +- apps/coordinator-api/src/app/routers/miner.py | 2 +- .../coordinator-api/src/app/schemas/wallet.py | 2 +- .../src/app/services/adaptive_learning_app.py | 2 +- .../agent_coordination/communication.py | 2 +- .../agent_coordination/orchestrator.py | 2 +- .../src/app/services/confidential_service.py | 4 +- .../services/developer_platform_service.py | 2 +- .../src/app/services/gpu_multimodal_app.py | 2 +- apps/coordinator-api/src/app/services/jobs.py | 2 +- .../app/services/modality_optimization_app.py | 4 +- .../multi_chain_transaction_manager.py | 2 +- .../src/app/services/multimodal_app.py | 4 +- .../src/app/settlement/hooks.py | 2 +- apps/coordinator-api/src/app/storage/db.py | 4 +- apps/coordinator-api/src/app/utils/cache.py | 2 +- .../src/app/utils/cache_management.py | 2 +- docs/ROADMAP.md | 26 +++-- systemd/aitbc-ai.service | 4 +- 112 files changed, 351 insertions(+), 266 deletions(-) create mode 100644 apps/coordinator-api/src/app/contexts/agent_coordination/services/creative_capabilities_service.py create mode 100644 apps/coordinator-api/src/app/contexts/edge_gpu/__init__.py create mode 100644 apps/coordinator-api/src/app/contexts/edge_gpu/routers/__init__.py rename apps/coordinator-api/src/app/{ => contexts/edge_gpu}/routers/edge_gpu.py (100%) create mode 100644 apps/coordinator-api/src/app/contexts/edge_gpu/services/__init__.py rename apps/coordinator-api/src/app/{ => contexts/edge_gpu}/services/edge_gpu_service.py (91%) create mode 100644 apps/coordinator-api/src/app/contexts/language/__init__.py create mode 100644 apps/coordinator-api/src/app/contexts/language/services/__init__.py rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/README.md (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/__init__.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/api_endpoints.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/config.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/database_schema.sql (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/language_detector.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/quality_assurance.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/requirements.txt (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/translation_cache.py (100%) rename apps/coordinator-api/src/app/{ => contexts/language}/services/multi_language/translation_engine.py (100%) create mode 100644 apps/coordinator-api/src/app/contexts/wallet/__init__.py create mode 100644 apps/coordinator-api/src/app/contexts/wallet/services/__init__.py rename apps/coordinator-api/src/app/{ => contexts/wallet}/services/bitcoin_wallet.py (100%) rename apps/coordinator-api/src/app/{ => contexts/wallet}/services/secure_wallet_service.py (98%) rename apps/coordinator-api/src/app/{ => contexts/wallet}/services/wallet_crypto.py (100%) rename apps/coordinator-api/src/app/{ => contexts/wallet}/services/wallet_service.py (94%) diff --git a/apps/coordinator-api/src/app/agent_identity/core.py b/apps/coordinator-api/src/app/agent_identity/core.py index de6ef6df..96d60e5f 100755 --- a/apps/coordinator-api/src/app/agent_identity/core.py +++ b/apps/coordinator-api/src/app/agent_identity/core.py @@ -15,7 +15,7 @@ logger = get_logger(__name__) from sqlmodel import Session, select -from ..domain.agent_identity import ( +from ..contexts.agent_identity.domain.agent_identity import ( AgentIdentity, AgentIdentityCreate, AgentIdentityUpdate, diff --git a/apps/coordinator-api/src/app/agent_identity/manager.py b/apps/coordinator-api/src/app/agent_identity/manager.py index f2d80799..692aa5b2 100755 --- a/apps/coordinator-api/src/app/agent_identity/manager.py +++ b/apps/coordinator-api/src/app/agent_identity/manager.py @@ -13,7 +13,7 @@ logger = get_logger(__name__) from sqlmodel import Session -from ..domain.agent_identity import ( +from ..contexts.agent_identity.domain.agent_identity import ( AgentIdentityCreate, AgentIdentityUpdate, AgentWalletUpdate, diff --git a/apps/coordinator-api/src/app/agent_identity/registry.py b/apps/coordinator-api/src/app/agent_identity/registry.py index 31cd4fbf..bda33b42 100755 --- a/apps/coordinator-api/src/app/agent_identity/registry.py +++ b/apps/coordinator-api/src/app/agent_identity/registry.py @@ -15,7 +15,7 @@ logger = get_logger(__name__) from sqlmodel import Session, select -from ..domain.agent_identity import ( +from ..contexts.agent_identity.domain.agent_identity import ( AgentIdentity, ChainType, CrossChainMapping, diff --git a/apps/coordinator-api/src/app/agent_identity/wallet_adapter.py b/apps/coordinator-api/src/app/agent_identity/wallet_adapter.py index 4eb9fa23..0d53d46e 100755 --- a/apps/coordinator-api/src/app/agent_identity/wallet_adapter.py +++ b/apps/coordinator-api/src/app/agent_identity/wallet_adapter.py @@ -14,7 +14,7 @@ logger = get_logger(__name__) from sqlmodel import Session, select -from ..domain.agent_identity import AgentWallet, AgentWalletUpdate, ChainType +from ..contexts.agent_identity.domain.agent_identity import AgentWallet, AgentWalletUpdate, ChainType class WalletAdapter(ABC): diff --git a/apps/coordinator-api/src/app/agent_identity/wallet_adapter_enhanced.py b/apps/coordinator-api/src/app/agent_identity/wallet_adapter_enhanced.py index 150cd3eb..1803606b 100755 --- a/apps/coordinator-api/src/app/agent_identity/wallet_adapter_enhanced.py +++ b/apps/coordinator-api/src/app/agent_identity/wallet_adapter_enhanced.py @@ -16,7 +16,7 @@ from aitbc import get_logger, derive_ethereum_address, sign_transaction_hash, ve logger = get_logger(__name__) -from ..domain.agent_identity import ChainType +from ..contexts.agent_identity.domain.agent_identity import ChainType class WalletStatus(StrEnum): diff --git a/apps/coordinator-api/src/app/config.py b/apps/coordinator-api/src/app/config.py index e5b397a4..fbd6f626 100755 --- a/apps/coordinator-api/src/app/config.py +++ b/apps/coordinator-api/src/app/config.py @@ -56,6 +56,11 @@ class Settings(BaseAITBCConfig): # Database database: DatabaseConfig = Field(default_factory=DatabaseConfig, description="Database configuration") + db_echo: bool = Field(default=False, description="Enable SQLAlchemy query echo") + db_pool_pre_ping: bool = Field(default=True, description="Enable connection pool pre-ping") + db_pool_size: int = Field(default=10, description="Database connection pool size") + db_max_overflow: int = Field(default=20, description="Database connection pool max overflow") + db_pool_recycle: int = Field(default=3600, description="Database connection pool recycle time in seconds") # API Keys client_api_keys: list[str] = [] diff --git a/apps/coordinator-api/src/app/contexts/advanced_ai/routers/adaptive_learning_health.py b/apps/coordinator-api/src/app/contexts/advanced_ai/routers/adaptive_learning_health.py index 197777f9..b73753a2 100755 --- a/apps/coordinator-api/src/app/contexts/advanced_ai/routers/adaptive_learning_health.py +++ b/apps/coordinator-api/src/app/contexts/advanced_ai/routers/adaptive_learning_health.py @@ -16,7 +16,7 @@ from sqlalchemy.orm import Session from aitbc.rate_limiting import rate_limit from aitbc import get_logger -from ....services.ai_analytics.adaptive_learning import AdaptiveLearningService +from ...ai_analytics.services.ai_analytics.adaptive_learning import AdaptiveLearningService from ....storage import get_session logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_creativity.py b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_creativity.py index 724ec812..8de0177f 100755 --- a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_creativity.py +++ b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_creativity.py @@ -18,7 +18,7 @@ logger = get_logger(__name__) from ....domain.agent_performance import CreativeCapability from sqlmodel import select -from ....services.creative_capabilities_service import ( +from ..services.creative_capabilities_service import ( CreativityEnhancementEngine, CrossDomainCreativeIntegrator, IdeationAlgorithm, diff --git a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_integration_router.py b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_integration_router.py index d058cdbc..09f82e3e 100755 --- a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_integration_router.py +++ b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_integration_router.py @@ -1,4 +1,4 @@ -from typing import Annotated +from typing import Annotated, Any """ Agent Integration and Deployment API Router for Verifiable AI Agent Orchestration diff --git a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_router.py b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_router.py index 9ccedb95..3631e880 100755 --- a/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_router.py +++ b/apps/coordinator-api/src/app/contexts/agent_coordination/routers/agent_router.py @@ -10,9 +10,10 @@ Provides REST API endpoints for agent workflow management and execution from datetime import datetime, timezone from typing import Any -from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException +from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Request from aitbc import get_logger +from aitbc.rate_limiting import rate_limit logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/contexts/agent_coordination/services/creative_capabilities_service.py b/apps/coordinator-api/src/app/contexts/agent_coordination/services/creative_capabilities_service.py new file mode 100644 index 00000000..40d0839b --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/agent_coordination/services/creative_capabilities_service.py @@ -0,0 +1,21 @@ +""" +Stub service for creative capabilities +Placeholder for future implementation +""" + +from typing import Any + + +class CreativityEnhancementEngine: + """Stub class for CreativityEnhancementEngine""" + pass + + +class CrossDomainCreativeIntegrator: + """Stub class for CrossDomainCreativeIntegrator""" + pass + + +class IdeationAlgorithm: + """Stub class for IdeationAlgorithm""" + pass diff --git a/apps/coordinator-api/src/app/contexts/agent_identity/domain/agent_identity.py b/apps/coordinator-api/src/app/contexts/agent_identity/domain/agent_identity.py index fba3bc12..79736b74 100755 --- a/apps/coordinator-api/src/app/contexts/agent_identity/domain/agent_identity.py +++ b/apps/coordinator-api/src/app/contexts/agent_identity/domain/agent_identity.py @@ -136,7 +136,7 @@ class CrossChainMapping(SQLModel, table=True): class IdentityVerification(SQLModel, table=True): """Verification records for cross-chain identities""" - __tablename__ = IDENTITY_VERIFICATION_TABLE + __tablename__ = "identity_verifications" __table_args__ = {"extend_existing": True} id: str = Field(default_factory=lambda: f"verify_{uuid4().hex[:8]}", primary_key=True) diff --git a/apps/coordinator-api/src/app/contexts/agent_identity/routers/agent_identity.py b/apps/coordinator-api/src/app/contexts/agent_identity/routers/agent_identity.py index bd59406f..603cc337 100755 --- a/apps/coordinator-api/src/app/contexts/agent_identity/routers/agent_identity.py +++ b/apps/coordinator-api/src/app/contexts/agent_identity/routers/agent_identity.py @@ -11,7 +11,7 @@ from fastapi.responses import JSONResponse from sqlmodel import Session from ....agent_identity.manager import AgentIdentityManager -from ....domain.agent_identity import ( +from ..domain.agent_identity import ( CrossChainMappingResponse, IdentityStatus, VerificationType, diff --git a/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/adaptive_learning.py b/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/adaptive_learning.py index f550950c..32aaad27 100755 --- a/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/adaptive_learning.py +++ b/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/adaptive_learning.py @@ -17,7 +17,7 @@ from typing import Any import numpy as np -from ...storage import get_session +from app.storage import get_session class LearningAlgorithm(StrEnum): diff --git a/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/analytics.py b/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/analytics.py index 13f63a29..06bbcae8 100755 --- a/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/analytics.py +++ b/apps/coordinator-api/src/app/contexts/ai_analytics/services/ai_analytics/analytics.py @@ -13,7 +13,7 @@ logger = get_logger(__name__) from sqlmodel import Session, and_, select -from ...domain.analytics import ( +from app.domain.analytics import ( AnalyticsAlert, AnalyticsPeriod, DashboardConfig, diff --git a/apps/coordinator-api/src/app/contexts/analytics/routers/analytics.py b/apps/coordinator-api/src/app/contexts/analytics/routers/analytics.py index 27fcd74d..84c0da01 100755 --- a/apps/coordinator-api/src/app/contexts/analytics/routers/analytics.py +++ b/apps/coordinator-api/src/app/contexts/analytics/routers/analytics.py @@ -28,7 +28,7 @@ from ....domain.analytics import ( MetricType, ReportType, ) -from ....services.ai_analytics.analytics import MarketplaceAnalytics +from ....services.agent_coordination.marketplace import MarketplaceAnalytics from ....storage import get_session router = APIRouter(prefix="/v1/analytics", tags=["analytics"]) diff --git a/apps/coordinator-api/src/app/contexts/blockchain/services/blockchain.py b/apps/coordinator-api/src/app/contexts/blockchain/services/blockchain.py index b07199a1..26110dc2 100755 --- a/apps/coordinator-api/src/app/contexts/blockchain/services/blockchain.py +++ b/apps/coordinator-api/src/app/contexts/blockchain/services/blockchain.py @@ -16,6 +16,13 @@ BLOCKCHAIN_RPC = "http://127.0.0.1:9080/rpc" ADDRESS_PATTERN = re.compile(r'^[a-zA-Z0-9]{20,50}$') +class BlockchainService: + """Stub blockchain service for staking router compatibility""" + + def __init__(self): + pass + + def validate_address(address: str) -> bool: """Validate that address is safe to use in URL construction""" if not address: diff --git a/apps/coordinator-api/src/app/contexts/bounty/routers/bounty.py b/apps/coordinator-api/src/app/contexts/bounty/routers/bounty.py index 79aa6fc7..1f833429 100755 --- a/apps/coordinator-api/src/app/contexts/bounty/routers/bounty.py +++ b/apps/coordinator-api/src/app/contexts/bounty/routers/bounty.py @@ -8,13 +8,13 @@ REST API for AI agent bounty system with ZK-proof verification from datetime import datetime, timezone, timedelta from typing import Any, Dict, List, Optional -from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Request +from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query, Request from pydantic import BaseModel, Field, validator from sqlalchemy.orm import Session from aitbc import get_logger from aitbc.rate_limiting import rate_limit -from ....auth import get_current_user +from ....routers.users import get_current_user from ....domain.bounty import ( Bounty, BountyIntegration, @@ -24,7 +24,7 @@ from ....domain.bounty import ( BountyTier, SubmissionStatus, ) -from ....services.blockchain_service import BlockchainService +from ...blockchain.services.blockchain import BlockchainService from ....services.bounty_service import BountyService from ....storage import get_session @@ -148,8 +148,8 @@ class BountyFilterRequest(BaseModel): deadline_after: Optional[datetime] = None tags: Optional[List[str]] = None requires_zk_proof: Optional[bool] = None - page: int = Field(default=1, ge=1) - limit: int = Field(default=20, ge=1, le=100) + page: int = Query(default=1, ge=1) + limit: int = Query(default=20, ge=1, le=100) class BountyStatsResponse(BaseModel): total_bounties: int @@ -433,8 +433,8 @@ async def dispute_bounty_submission( async def get_my_created_bounties( request: Request, status: Optional[BountyStatus] = None, - page: int = Field(default=1, ge=1), - limit: int = Field(default=20, ge=1, le=100), + page: int = Query(default=1, ge=1), + limit: int = Query(default=20, ge=1, le=100), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service), current_user: dict = Depends(get_current_user) @@ -459,8 +459,8 @@ async def get_my_created_bounties( async def get_my_submissions( request: Request, status: Optional[SubmissionStatus] = None, - page: int = Field(default=1, ge=1), - limit: int = Field(default=20, ge=1, le=100), + page: int = Query(default=1, ge=1), + limit: int = Query(default=20, ge=1, le=100), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service), current_user: dict = Depends(get_current_user) @@ -484,8 +484,8 @@ async def get_my_submissions( @rate_limit(rate=200, per=60) async def get_bounty_leaderboard( request: Request, - period: str = Field(default="weekly", regex="^(daily|weekly|monthly)$"), - limit: int = Field(default=50, ge=1, le=100), + period: str = Query(default="weekly", pattern="^(daily|weekly|monthly)$"), + limit: int = Query(default=50, ge=1, le=100), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service) ) -> Dict[str, Any]: @@ -506,7 +506,7 @@ async def get_bounty_leaderboard( @rate_limit(rate=200, per=60) async def get_bounty_stats( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service) ) -> BountyStatsResponse: @@ -583,7 +583,7 @@ async def get_bounty_categories( @rate_limit(rate=500, per=60) async def get_bounty_tags( request: Request, - limit: int = Field(default=100, ge=1, le=500), + limit: int = Query(default=100, ge=1, le=500), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service) ) -> Dict[str, Any]: @@ -600,9 +600,9 @@ async def get_bounty_tags( @rate_limit(rate=200, per=60) async def search_bounties( request: Request, - query: str = Field(..., min_length=1, max_length=100), - page: int = Field(default=1, ge=1), - limit: int = Field(default=20, ge=1, le=100), + query: str = Query(..., min_length=1, max_length=100), + page: int = Query(default=1, ge=1), + limit: int = Query(default=20, ge=1, le=100), session: Session = Depends(get_session), bounty_service: BountyService = Depends(get_bounty_service) ) -> List[BountyResponse]: diff --git a/apps/coordinator-api/src/app/contexts/certification/routers/certification.py b/apps/coordinator-api/src/app/contexts/certification/routers/certification.py index f8faa22c..fe0fccae 100755 --- a/apps/coordinator-api/src/app/contexts/certification/routers/certification.py +++ b/apps/coordinator-api/src/app/contexts/certification/routers/certification.py @@ -32,7 +32,7 @@ from ....domain.certification import ( VerificationRecord, VerificationType, ) -from ....services.certification import ( +from ..services.certification import ( BadgeSystem, CertificationAndPartnershipService, CertificationSystem, diff --git a/apps/coordinator-api/src/app/contexts/certification/services/certification/badge_system.py b/apps/coordinator-api/src/app/contexts/certification/services/certification/badge_system.py index e6c0145f..b173e250 100644 --- a/apps/coordinator-api/src/app/contexts/certification/services/certification/badge_system.py +++ b/apps/coordinator-api/src/app/contexts/certification/services/certification/badge_system.py @@ -12,8 +12,8 @@ logger = get_logger(__name__) from sqlmodel import Session, and_, select -from ...domain.certification import AchievementBadge, AgentBadge, BadgeType -from ...domain.reputation import AgentReputation +from app.domain.certification import AchievementBadge, AgentBadge, BadgeType +from app.domain.reputation import AgentReputation class BadgeSystem: diff --git a/apps/coordinator-api/src/app/contexts/certification/services/certification/certification_system.py b/apps/coordinator-api/src/app/contexts/certification/services/certification/certification_system.py index 8929d021..cca5f011 100644 --- a/apps/coordinator-api/src/app/contexts/certification/services/certification/certification_system.py +++ b/apps/coordinator-api/src/app/contexts/certification/services/certification/certification_system.py @@ -14,13 +14,13 @@ logger = get_logger(__name__) from sqlmodel import Session, and_, select -from ...domain.certification import ( +from app.domain.certification import ( AgentCertification, CertificationLevel, CertificationStatus, VerificationType, ) -from ...domain.reputation import AgentReputation +from app.domain.reputation import AgentReputation class CertificationSystem: diff --git a/apps/coordinator-api/src/app/contexts/certification/services/certification/partnership_manager.py b/apps/coordinator-api/src/app/contexts/certification/services/certification/partnership_manager.py index a6bbc69c..1924b531 100644 --- a/apps/coordinator-api/src/app/contexts/certification/services/certification/partnership_manager.py +++ b/apps/coordinator-api/src/app/contexts/certification/services/certification/partnership_manager.py @@ -12,12 +12,12 @@ logger = get_logger(__name__) from sqlmodel import Session, and_, select -from ...domain.certification import ( +from app.domain.certification import ( AgentPartnership, PartnershipProgram, PartnershipType, ) -from ...domain.reputation import AgentReputation +from app.domain.reputation import AgentReputation class PartnershipManager: diff --git a/apps/coordinator-api/src/app/contexts/certification/services/certification/service.py b/apps/coordinator-api/src/app/contexts/certification/services/certification/service.py index ca84de01..0b1e52b7 100644 --- a/apps/coordinator-api/src/app/contexts/certification/services/certification/service.py +++ b/apps/coordinator-api/src/app/contexts/certification/services/certification/service.py @@ -7,7 +7,7 @@ from typing import Any from sqlmodel import Session, select -from ...domain.certification import ( +from app.domain.certification import ( AgentBadge, AgentCertification, AgentPartnership, diff --git a/apps/coordinator-api/src/app/contexts/community/routers/community.py b/apps/coordinator-api/src/app/contexts/community/routers/community.py index 6eb3598b..045b64a8 100755 --- a/apps/coordinator-api/src/app/contexts/community/routers/community.py +++ b/apps/coordinator-api/src/app/contexts/community/routers/community.py @@ -137,9 +137,9 @@ async def publish_solution(request: SolutionPublishRequest, request_http: Reques @rate_limit(rate=100, per=60) async def list_solutions( request: Request, + session: Annotated[Session, Depends(get_session)], category: str | None = None, limit: int = 50, - session: Annotated[Session, Depends(get_session)] = Depends(get_session), ) -> list[AgentSolution]: """List available third-party agent solutions""" service = ThirdPartySolutionService(session) @@ -167,9 +167,9 @@ async def purchase_solution( @rate_limit(rate=10, per=60) async def propose_innovation_lab( request_http: Request, + session: Annotated[Session, Depends(get_session)], researcher_id: str = Query(...), request: LabProposalRequest = Body(...), - session: Annotated[Session, Depends(get_session)] = Depends(get_session), ) -> InnovationLab: """Propose a new agent innovation lab or research program""" service = InnovationLabService(session) @@ -213,9 +213,9 @@ async def fund_innovation_lab( @rate_limit(rate=20, per=60) async def create_community_post( request_http: Request, + session: Annotated[Session, Depends(get_session)], author_id: str = Query(...), request: PostCreateRequest = Body(...), - session: Annotated[Session, Depends(get_session)] = Depends(get_session), ) -> CommunityPost: """Create a new post in the community forum""" service = CommunityPlatformService(session) @@ -230,9 +230,9 @@ async def create_community_post( @rate_limit(rate=100, per=60) async def get_community_feed( request: Request, + session: Annotated[Session, Depends(get_session)], category: str | None = None, limit: int = 20, - session: Annotated[Session, Depends(get_session)] = Depends(get_session), ) -> list[CommunityPost]: """Get the latest community posts and discussions""" service = CommunityPlatformService(session) @@ -256,9 +256,9 @@ async def upvote_community_post(post_id: str, request: Request, session: Annotat @rate_limit(rate=10, per=60) async def create_hackathon( request_http: Request, + session: Annotated[Session, Depends(get_session)], organizer_id: str = Query(...), request: HackathonCreateRequest = Body(...), - session: Annotated[Session, Depends(get_session)] = Depends(get_session), ) -> Hackathon: """Create a new agent innovation hackathon (requires high reputation)""" service = CommunityPlatformService(session) diff --git a/apps/coordinator-api/src/app/contexts/confidential/routers/confidential.py b/apps/coordinator-api/src/app/contexts/confidential/routers/confidential.py index eef61192..98ddcae8 100755 --- a/apps/coordinator-api/src/app/contexts/confidential/routers/confidential.py +++ b/apps/coordinator-api/src/app/contexts/confidential/routers/confidential.py @@ -25,9 +25,9 @@ from ....schemas import ( KeyRegistrationRequest, KeyRegistrationResponse, ) -from ....services.access_control import AccessController -from ....services.encryption import EncryptedData, EncryptionService -from ....services.key_management import KeyManagementError, KeyManager +from ...security.services.access_control import AccessController +from ...security.services.encryption import EncryptedData, EncryptionService +from ...security.services.key_management import KeyManagementError, KeyManager # Initialize router and security router = APIRouter(prefix="/confidential", tags=["confidential"]) @@ -44,7 +44,7 @@ def get_encryption_service() -> EncryptionService: global encryption_service if encryption_service is None: # Initialize with key manager - from ..services.key_management import FileKeyStorage + from ....contexts.security.services.key_management import FileKeyStorage import tempfile key_storage = FileKeyStorage(tempfile.gettempdir() + "/aitbc_keys") @@ -57,7 +57,7 @@ def get_key_manager() -> KeyManager: """Get key manager instance""" global key_manager if key_manager is None: - from ..services.key_management import FileKeyStorage + from ....contexts.security.services.key_management import FileKeyStorage import tempfile key_storage = FileKeyStorage(tempfile.gettempdir() + "/aitbc_keys") @@ -69,7 +69,7 @@ def get_access_controller() -> AccessController: """Get access controller instance""" global access_controller if access_controller is None: - from ..services.access_control import PolicyStore + from ....contexts.security.services.access_control import PolicyStore policy_store = PolicyStore() access_controller = AccessController(policy_store) diff --git a/apps/coordinator-api/src/app/contexts/cross_chain/routers/cross_chain_integration.py b/apps/coordinator-api/src/app/contexts/cross_chain/routers/cross_chain_integration.py index 5febf109..426d6f1c 100755 --- a/apps/coordinator-api/src/app/contexts/cross_chain/routers/cross_chain_integration.py +++ b/apps/coordinator-api/src/app/contexts/cross_chain/routers/cross_chain_integration.py @@ -25,7 +25,7 @@ from ..services.cross_chain.bridge_enhanced import ( BridgeSecurityLevel, CrossChainBridgeService, ) -from ..services.multi_chain_transaction_manager import ( +from ....services.multi_chain_transaction_manager import ( MultiChainTransactionManager, RoutingStrategy, TransactionPriority, diff --git a/apps/coordinator-api/src/app/contexts/cross_chain/services/cross_chain/bridge_enhanced.py b/apps/coordinator-api/src/app/contexts/cross_chain/services/cross_chain/bridge_enhanced.py index 7de9db04..807d0aa3 100755 --- a/apps/coordinator-api/src/app/contexts/cross_chain/services/cross_chain/bridge_enhanced.py +++ b/apps/coordinator-api/src/app/contexts/cross_chain/services/cross_chain/bridge_enhanced.py @@ -18,16 +18,16 @@ logger = get_logger(__name__) from sqlmodel import Session, func, select, update -from ..agent_identity.wallet_adapter_enhanced import ( +from .....agent_identity.wallet_adapter_enhanced import ( EnhancedWalletAdapter, SecurityLevel, WalletAdapterFactory, ) -from ..domain.cross_chain_bridge import ( +from .....domain.cross_chain_bridge import ( BridgeRequest, BridgeRequestStatus, ) -from ..reputation.engine import CrossChainReputationEngine +from .....reputation.engine import CrossChainReputationEngine class BridgeProtocol(StrEnum): diff --git a/apps/coordinator-api/src/app/contexts/developer_platform/routers/developer_platform.py b/apps/coordinator-api/src/app/contexts/developer_platform/routers/developer_platform.py index f8bd8958..b78da82e 100755 --- a/apps/coordinator-api/src/app/contexts/developer_platform/routers/developer_platform.py +++ b/apps/coordinator-api/src/app/contexts/developer_platform/routers/developer_platform.py @@ -20,7 +20,7 @@ from ....domain.developer_platform import ( ) from ....schemas.developer_platform import BountyCreate, BountySubmissionCreate, CertificationGrant, DeveloperCreate from ....services.developer_platform_service import DeveloperPlatformService -from ....services.governance_service import GovernanceService +from ...governance.services.governance_service import GovernanceService from ....storage.db import get_session router = APIRouter(prefix="/developer-platform", tags=["Developer Platform"]) diff --git a/apps/coordinator-api/src/app/contexts/ecosystem/routers/ecosystem_dashboard.py b/apps/coordinator-api/src/app/contexts/ecosystem/routers/ecosystem_dashboard.py index 165f4a92..d862baf4 100755 --- a/apps/coordinator-api/src/app/contexts/ecosystem/routers/ecosystem_dashboard.py +++ b/apps/coordinator-api/src/app/contexts/ecosystem/routers/ecosystem_dashboard.py @@ -8,13 +8,13 @@ REST API for developer ecosystem metrics and analytics from datetime import datetime, timezone, timedelta from typing import Any, Dict, List, Optional -from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi import APIRouter, Depends, HTTPException, Query, Request from pydantic import BaseModel, Field from sqlalchemy.orm import Session from aitbc import get_logger from aitbc.rate_limiting import rate_limit -from ....auth import get_current_user +from ....routers.users import get_current_user from ....domain.bounty import AgentMetrics, BountyStats, EcosystemMetrics from ....services.ecosystem_service import EcosystemService from ....storage import get_session @@ -78,7 +78,7 @@ class EcosystemOverviewResponse(BaseModel): growth_indicators: Dict[str, float] class MetricsFilterRequest(BaseModel): - period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$") + period_type: str = Field(default="daily", pattern="^(hourly|daily|weekly|monthly)$") start_date: Optional[datetime] = None end_date: Optional[datetime] = None compare_period: Optional[str] = None @@ -92,7 +92,7 @@ def get_ecosystem_service(session: Session = Depends(get_session)) -> EcosystemS @rate_limit(rate=200, per=60) async def get_developer_earnings( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service), current_user: dict = Depends(get_current_user) @@ -114,7 +114,7 @@ async def get_developer_earnings( @rate_limit(rate=200, per=60) async def get_agent_utilization( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> AgentUtilizationResponse: @@ -135,7 +135,7 @@ async def get_agent_utilization( @rate_limit(rate=200, per=60) async def get_treasury_allocation( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> TreasuryAllocationResponse: @@ -156,7 +156,7 @@ async def get_treasury_allocation( @rate_limit(rate=200, per=60) async def get_staking_metrics( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> StakingMetricsResponse: @@ -177,7 +177,7 @@ async def get_staking_metrics( @rate_limit(rate=200, per=60) async def get_bounty_analytics( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> BountyAnalyticsResponse: @@ -198,7 +198,7 @@ async def get_bounty_analytics( @rate_limit(rate=100, per=60) async def get_ecosystem_overview( request: Request, - period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), + period_type: str = Query(default="daily", pattern="^(hourly|daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> EcosystemOverviewResponse: @@ -226,10 +226,10 @@ async def get_ecosystem_overview( @rate_limit(rate=200, per=60) async def get_ecosystem_metrics( request: Request, - period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), + period_type: str = Query(default="daily", pattern="^(hourly|daily|weekly|monthly)$"), start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, - limit: int = Field(default=100, ge=1, le=1000), + limit: int = Query(default=100, ge=1, le=1000), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> Dict[str, Any]: @@ -276,7 +276,7 @@ async def get_ecosystem_health_score( @rate_limit(rate=200, per=60) async def get_growth_indicators( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> Dict[str, Any]: @@ -299,9 +299,9 @@ async def get_growth_indicators( @rate_limit(rate=200, per=60) async def get_top_performers( request: Request, - category: str = Field(default="all", regex="^(developers|agents|stakers|all)$"), - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - limit: int = Field(default=50, ge=1, le=100), + category: str = Query(default="all", pattern="^(developers|agents|stakers|all)$"), + period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), + limit: int = Query(default=50, ge=1, le=100), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> Dict[str, Any]: @@ -328,8 +328,8 @@ async def get_top_performers( @rate_limit(rate=200, per=60) async def get_ecosystem_predictions( request: Request, - metric: str = Field(default="all", regex="^(earnings|staking|bounties|agents|all)$"), - horizon: int = Field(default=30, ge=1, le=365), # days + metric: str = Query(default="all", pattern="^(earnings|staking|bounties|agents|all)$"), + horizon: int = Query(default=30, ge=1, le=365), # days session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> Dict[str, Any]: @@ -356,7 +356,7 @@ async def get_ecosystem_predictions( @rate_limit(rate=200, per=60) async def get_ecosystem_alerts( request: Request, - severity: str = Field(default="all", regex="^(low|medium|high|critical|all)$"), + severity: str = Query(default="all", pattern="^(low|medium|high|critical|all)$"), session: Session = Depends(get_session), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ) -> Dict[str, Any]: @@ -379,8 +379,8 @@ async def get_ecosystem_alerts( @rate_limit(rate=200, per=60) async def get_ecosystem_comparison( request: Request, - current_period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - compare_period: str = Field(default="previous", regex="^(previous|same_last_year|custom)$"), + current_period: str = Query(default="monthly", pattern="^(daily|weekly|monthly)$"), + compare_period: str = Query(default="previous", pattern="^(previous|same_last_year|custom)$"), custom_start_date: Optional[datetime] = None, custom_end_date: Optional[datetime] = None, session: Session = Depends(get_session), @@ -410,8 +410,8 @@ async def get_ecosystem_comparison( @rate_limit(rate=50, per=60) async def export_ecosystem_data( request: Request, - format: str = Field(default="json", regex="^(json|csv|xlsx)$"), - period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), + format: str = Query(default="json", pattern="^(json|csv|xlsx)$"), + period_type: str = Query(default="daily", pattern="^(hourly|daily|weekly|monthly)$"), start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, session: Session = Depends(get_session), diff --git a/apps/coordinator-api/src/app/contexts/edge_gpu/__init__.py b/apps/coordinator-api/src/app/contexts/edge_gpu/__init__.py new file mode 100644 index 00000000..be2d1c35 --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/edge_gpu/__init__.py @@ -0,0 +1,5 @@ +"""Edge GPU context for edge computing and GPU resource allocation.""" + +from .routers import router as edge_gpu_router + +__all__ = ["edge_gpu_router"] diff --git a/apps/coordinator-api/src/app/contexts/edge_gpu/routers/__init__.py b/apps/coordinator-api/src/app/contexts/edge_gpu/routers/__init__.py new file mode 100644 index 00000000..d949ba70 --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/edge_gpu/routers/__init__.py @@ -0,0 +1,5 @@ +"""Edge GPU routers.""" + +from .edge_gpu import router + +__all__ = ["router"] diff --git a/apps/coordinator-api/src/app/routers/edge_gpu.py b/apps/coordinator-api/src/app/contexts/edge_gpu/routers/edge_gpu.py similarity index 100% rename from apps/coordinator-api/src/app/routers/edge_gpu.py rename to apps/coordinator-api/src/app/contexts/edge_gpu/routers/edge_gpu.py diff --git a/apps/coordinator-api/src/app/contexts/edge_gpu/services/__init__.py b/apps/coordinator-api/src/app/contexts/edge_gpu/services/__init__.py new file mode 100644 index 00000000..a8eadaca --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/edge_gpu/services/__init__.py @@ -0,0 +1,5 @@ +"""Edge GPU services.""" + +from .edge_gpu_service import edge_gpu_service + +__all__ = ["edge_gpu_service"] diff --git a/apps/coordinator-api/src/app/services/edge_gpu_service.py b/apps/coordinator-api/src/app/contexts/edge_gpu/services/edge_gpu_service.py similarity index 91% rename from apps/coordinator-api/src/app/services/edge_gpu_service.py rename to apps/coordinator-api/src/app/contexts/edge_gpu/services/edge_gpu_service.py index b6de1e3e..220a4ca6 100755 --- a/apps/coordinator-api/src/app/services/edge_gpu_service.py +++ b/apps/coordinator-api/src/app/contexts/edge_gpu/services/edge_gpu_service.py @@ -4,9 +4,9 @@ from fastapi import Depends from sqlalchemy.orm import Session from sqlmodel import select -from ..data.consumer_gpu_profiles import CONSUMER_GPU_PROFILES -from ..domain.gpu_marketplace import ConsumerGPUProfile, EdgeGPUMetrics, GPUArchitecture -from ..storage import get_session +from ...data.consumer_gpu_profiles import CONSUMER_GPU_PROFILES +from ...domain.gpu_marketplace import ConsumerGPUProfile, EdgeGPUMetrics, GPUArchitecture +from ...storage import get_session class EdgeGPUService: diff --git a/apps/coordinator-api/src/app/contexts/governance/routers/governance.py b/apps/coordinator-api/src/app/contexts/governance/routers/governance.py index 830ac49e..8eb54316 100755 --- a/apps/coordinator-api/src/app/contexts/governance/routers/governance.py +++ b/apps/coordinator-api/src/app/contexts/governance/routers/governance.py @@ -27,7 +27,7 @@ from ....domain.governance import ( Vote, VoteType, ) -from ....services.governance_service import GovernanceService +from ..services.governance_service import GovernanceService from ....storage import get_session router = APIRouter(prefix="/governance", tags=["governance"]) diff --git a/apps/coordinator-api/src/app/contexts/governance/routers/governance_enhanced.py b/apps/coordinator-api/src/app/contexts/governance/routers/governance_enhanced.py index 9438eece..25c3d9f8 100755 --- a/apps/coordinator-api/src/app/contexts/governance/routers/governance_enhanced.py +++ b/apps/coordinator-api/src/app/contexts/governance/routers/governance_enhanced.py @@ -15,7 +15,7 @@ from ....domain.governance import ( GovernanceProfile, VoteType, ) -from ....services.governance_service import GovernanceService +from ..services.governance_service import GovernanceService from ....storage.db import get_session router = APIRouter(prefix="/governance-enhanced", tags=["Enhanced Governance"]) diff --git a/apps/coordinator-api/src/app/contexts/governance/services/__init__.py b/apps/coordinator-api/src/app/contexts/governance/services/__init__.py index cf40b92f..ed6eb81d 100644 --- a/apps/coordinator-api/src/app/contexts/governance/services/__init__.py +++ b/apps/coordinator-api/src/app/contexts/governance/services/__init__.py @@ -1 +1,5 @@ """Governance services.""" + +from .governance_service import GovernanceService + +__all__ = ["GovernanceService"] diff --git a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced.py b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced.py index 49ff0231..9b1c29c0 100755 --- a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced.py +++ b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced.py @@ -31,7 +31,7 @@ from ....schemas.hermes_enhanced import ( SkillRoutingRequest, SkillRoutingResponse, ) -from ....services.hermes_enhanced import hermesEnhancedService +from ..services.hermes_enhanced import hermesEnhancedService from ....storage import get_session router = APIRouter(prefix="/hermes/enhanced", tags=["hermes Enhanced"]) diff --git a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_health.py b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_health.py index f2a2e9c0..590def88 100755 --- a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_health.py +++ b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_health.py @@ -17,7 +17,7 @@ from aitbc.rate_limiting import rate_limit from aitbc import get_logger -from ....services.hermes_enhanced import hermesEnhancedService +from ..services.hermes_enhanced import hermesEnhancedService from ....storage import get_session router = APIRouter() diff --git a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_simple.py b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_simple.py index 91793499..b18d524b 100755 --- a/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_simple.py +++ b/apps/coordinator-api/src/app/contexts/hermes/routers/hermes_enhanced_simple.py @@ -19,7 +19,7 @@ from sqlmodel import Session from aitbc.rate_limiting import rate_limit from ....deps import require_admin_key -from ....services.hermes_enhanced_simple import hermesEnhancedService, SkillType +from ..services.hermes_enhanced_simple import hermesEnhancedService, SkillType from ....storage import get_session router = APIRouter(prefix="/hermes/enhanced", tags=["hermes Enhanced"]) diff --git a/apps/coordinator-api/src/app/contexts/language/__init__.py b/apps/coordinator-api/src/app/contexts/language/__init__.py new file mode 100644 index 00000000..239eed8a --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/language/__init__.py @@ -0,0 +1,5 @@ +"""Language context for multi-language support and translation services.""" + +from .services.multi_language import translation_engine, translation_cache, language_detector + +__all__ = ["translation_engine", "translation_cache", "language_detector"] diff --git a/apps/coordinator-api/src/app/contexts/language/services/__init__.py b/apps/coordinator-api/src/app/contexts/language/services/__init__.py new file mode 100644 index 00000000..80ece5f8 --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/language/services/__init__.py @@ -0,0 +1,5 @@ +"""Language services.""" + +from .multi_language import translation_engine, translation_cache, language_detector, quality_assurance + +__all__ = ["translation_engine", "translation_cache", "language_detector", "quality_assurance"] diff --git a/apps/coordinator-api/src/app/services/multi_language/README.md b/apps/coordinator-api/src/app/contexts/language/services/multi_language/README.md similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/README.md rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/README.md diff --git a/apps/coordinator-api/src/app/services/multi_language/__init__.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/__init__.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/__init__.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/__init__.py diff --git a/apps/coordinator-api/src/app/services/multi_language/api_endpoints.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/api_endpoints.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/api_endpoints.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/api_endpoints.py diff --git a/apps/coordinator-api/src/app/services/multi_language/config.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/config.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/config.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/config.py diff --git a/apps/coordinator-api/src/app/services/multi_language/database_schema.sql b/apps/coordinator-api/src/app/contexts/language/services/multi_language/database_schema.sql similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/database_schema.sql rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/database_schema.sql diff --git a/apps/coordinator-api/src/app/services/multi_language/language_detector.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/language_detector.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/language_detector.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/language_detector.py diff --git a/apps/coordinator-api/src/app/services/multi_language/quality_assurance.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/quality_assurance.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/quality_assurance.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/quality_assurance.py diff --git a/apps/coordinator-api/src/app/services/multi_language/requirements.txt b/apps/coordinator-api/src/app/contexts/language/services/multi_language/requirements.txt similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/requirements.txt rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/requirements.txt diff --git a/apps/coordinator-api/src/app/services/multi_language/translation_cache.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/translation_cache.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/translation_cache.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/translation_cache.py diff --git a/apps/coordinator-api/src/app/services/multi_language/translation_engine.py b/apps/coordinator-api/src/app/contexts/language/services/multi_language/translation_engine.py similarity index 100% rename from apps/coordinator-api/src/app/services/multi_language/translation_engine.py rename to apps/coordinator-api/src/app/contexts/language/services/multi_language/translation_engine.py diff --git a/apps/coordinator-api/src/app/contexts/marketplace/domain/marketplace.py b/apps/coordinator-api/src/app/contexts/marketplace/domain/marketplace.py index 88c8922b..42bdd680 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/domain/marketplace.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/domain/marketplace.py @@ -6,6 +6,8 @@ from uuid import uuid4 from sqlalchemy import JSON, Column from sqlmodel import Field, SQLModel +from ..storage.schema import MARKETPLACE_BID_TABLE + class MarketplaceOffer(SQLModel, table=True): __tablename__ = "marketplaceoffer" diff --git a/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace.py b/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace.py index 2f04839b..224fa83c 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace.py @@ -10,7 +10,7 @@ from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query from sqlmodel import Session, func, select from ....agent_identity.manager import AgentIdentityManager -from ....domain.global_marketplace import ( +from ..domain.global_marketplace import ( GlobalMarketplaceConfig, GlobalMarketplaceOffer, GlobalMarketplaceTransaction, @@ -18,7 +18,7 @@ from ....domain.global_marketplace import ( MarketplaceStatus, RegionStatus, ) -from ....services.global_marketplace import GlobalMarketplaceService, RegionManager +from ..services.global_marketplace import GlobalMarketplaceService, RegionManager from ....storage.db import get_session router = APIRouter(prefix="/global-marketplace", tags=["Global Marketplace"]) diff --git a/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace_integration.py b/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace_integration.py index e89d3da0..2ad37fe0 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace_integration.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/routers/global_marketplace_integration.py @@ -10,12 +10,12 @@ from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session, select from ....agent_identity.manager import AgentIdentityManager -from ....domain.global_marketplace import ( +from ..domain.global_marketplace import ( GlobalMarketplaceOffer, ) from ....reputation.engine import CrossChainReputationEngine -from ....services.cross_chain_bridge_enhanced import BridgeProtocol -from ....services.global_marketplace_integration import ( +from ...cross_chain.services.cross_chain.bridge_enhanced import BridgeProtocol +from ..services.global_marketplace_integration import ( GlobalMarketplaceIntegrationService, IntegrationStatus, ) diff --git a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace.py b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace.py index b2fe61fa..104ca91e 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace.py @@ -9,7 +9,7 @@ from aitbc import get_logger from ....config import settings from ....metrics import marketplace_errors_total, marketplace_requests_total from ....schemas import MarketplaceBidRequest, MarketplaceBidView, MarketplaceOfferView, MarketplaceStatsView -from ...services import MarketplaceService +from ..services import MarketplaceService from ....storage import get_session from ....utils.cache import cached, get_cache_config diff --git a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_gpu.py b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_gpu.py index 9771ed2b..df63990b 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_gpu.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_gpu.py @@ -17,14 +17,14 @@ from sqlmodel import col, func, select from aitbc import get_logger from ....custom_types import Constraints -from ....domain.gpu_marketplace import GPUBooking, GPURegistry, GPUReview +from ..domain.gpu_marketplace import GPUBooking, GPURegistry, GPUReview from ....domain.job import Job from ....schemas import JobCreate, JobPaymentCreate -from ....services.dynamic_pricing_engine import DynamicPricingEngine, PricingStrategy, ResourceType +from ...trading.services.trading_marketplace.dynamic_pricing import DynamicPricingEngine, PricingStrategy, ResourceType from ....services.jobs import JobService from ....services.market_data_collector import MarketDataCollector -from ..services.payments import PaymentService -from ..storage.db import get_session +from ....contexts.payments.services.payments import PaymentService +from ....storage.db import get_session logger = get_logger(__name__) @@ -306,11 +306,11 @@ async def buy_gpu( payment_status = None try: # Lazy import to avoid blocking startup - from ..custom_types import Constraints - from ..domain.job import Job - from ..schemas import JobCreate, JobPaymentCreate - from ..services.jobs import JobService - from ..services.payments import PaymentService + from ....custom_types import Constraints + from ....domain.job import Job + from ....schemas import JobCreate, JobPaymentCreate + from ....services.jobs import JobService + from ....contexts.payments.services.payments import PaymentService from sqlmodel import Session as SQLModelSession # Create a new session for job creation to ensure it persists diff --git a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_offers.py b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_offers.py index fea3fd5b..61534de7 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_offers.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/routers/marketplace_offers.py @@ -13,7 +13,8 @@ from sqlmodel import Session, select from aitbc import get_logger from ....deps import require_admin_key -from ....domain import MarketplaceOffer, Miner +from ....domain import Miner +from ..domain.marketplace import MarketplaceOffer from ....schemas import MarketplaceOfferView from ....storage import get_session diff --git a/apps/coordinator-api/src/app/contexts/marketplace/services/__init__.py b/apps/coordinator-api/src/app/contexts/marketplace/services/__init__.py index 43a86e58..bba2b414 100644 --- a/apps/coordinator-api/src/app/contexts/marketplace/services/__init__.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/services/__init__.py @@ -1,3 +1,7 @@ """Marketplace services.""" from __future__ import annotations + +from .marketplace import MarketplaceService + +__all__ = ["MarketplaceService"] diff --git a/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace.py b/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace.py index c76d4061..fed13ae7 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace.py @@ -19,7 +19,7 @@ logger = get_logger(__name__) from sqlmodel import Session, select -from ..domain.agent_identity import AgentIdentity +from ...agent_identity.domain.agent_identity import AgentIdentity from ..domain.global_marketplace import ( GlobalMarketplaceAnalytics, GlobalMarketplaceOffer, @@ -28,7 +28,7 @@ from ..domain.global_marketplace import ( MarketplaceStatus, RegionStatus, ) -from ..reputation.engine import CrossChainReputationEngine +from ....reputation.engine import CrossChainReputationEngine class GlobalMarketplaceService: diff --git a/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace_integration.py b/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace_integration.py index 323ac1b4..96bb6eaf 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace_integration.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/services/global_marketplace_integration.py @@ -13,14 +13,14 @@ logger = get_logger(__name__) from sqlmodel import Session, select -from ..agent_identity.wallet_adapter_enhanced import WalletAdapterFactory +from ....agent_identity.wallet_adapter_enhanced import WalletAdapterFactory from ..domain.global_marketplace import ( GlobalMarketplaceOffer, ) -from ..reputation.engine import CrossChainReputationEngine -from ..services.cross_chain.bridge_enhanced import BridgeProtocol, CrossChainBridgeService +from ....reputation.engine import CrossChainReputationEngine +from ...cross_chain.services.cross_chain.bridge_enhanced import BridgeProtocol, CrossChainBridgeService from ..services.global_marketplace import GlobalMarketplaceService, RegionManager -from ..services.multi_chain_transaction_manager import MultiChainTransactionManager, TransactionPriority +from ....services.multi_chain_transaction_manager import MultiChainTransactionManager, TransactionPriority class IntegrationStatus(StrEnum): diff --git a/apps/coordinator-api/src/app/contexts/marketplace/services/marketplace.py b/apps/coordinator-api/src/app/contexts/marketplace/services/marketplace.py index 5a732164..faef3c47 100755 --- a/apps/coordinator-api/src/app/contexts/marketplace/services/marketplace.py +++ b/apps/coordinator-api/src/app/contexts/marketplace/services/marketplace.py @@ -4,7 +4,7 @@ from statistics import mean from sqlmodel import Session, select -from ....domain import MarketplaceBid, MarketplaceOffer +from ..domain.marketplace import MarketplaceBid, MarketplaceOffer from ....schemas import ( MarketplaceBidRequest, MarketplaceBidView, diff --git a/apps/coordinator-api/src/app/contexts/multimodal/routers/multimodal_health.py b/apps/coordinator-api/src/app/contexts/multimodal/routers/multimodal_health.py index df9ff1a2..64047cc9 100755 --- a/apps/coordinator-api/src/app/contexts/multimodal/routers/multimodal_health.py +++ b/apps/coordinator-api/src/app/contexts/multimodal/routers/multimodal_health.py @@ -15,7 +15,7 @@ from sqlalchemy.orm import Session from aitbc.rate_limiting import rate_limit -from ....services.multimodal_agent import MultiModalAgentService +from ..services.multimodal_agent import MultiModalAgentService from ....storage import get_session router = APIRouter() diff --git a/apps/coordinator-api/src/app/contexts/multimodal/services/modality_optimization.py b/apps/coordinator-api/src/app/contexts/multimodal/services/modality_optimization.py index 8ce1d7b3..76ea668e 100755 --- a/apps/coordinator-api/src/app/contexts/multimodal/services/modality_optimization.py +++ b/apps/coordinator-api/src/app/contexts/multimodal/services/modality_optimization.py @@ -17,7 +17,7 @@ from datetime import datetime, timezone from enum import StrEnum from typing import Any -from ..storage import get_session +from ....storage import get_session from .multimodal_agent import ModalityType diff --git a/apps/coordinator-api/src/app/contexts/multimodal/services/multimodal_agent.py b/apps/coordinator-api/src/app/contexts/multimodal/services/multimodal_agent.py index 18ed41f0..55405ff7 100755 --- a/apps/coordinator-api/src/app/contexts/multimodal/services/multimodal_agent.py +++ b/apps/coordinator-api/src/app/contexts/multimodal/services/multimodal_agent.py @@ -16,8 +16,8 @@ from datetime import datetime, timezone from enum import StrEnum from typing import Any -from ..domain import AgentExecution, AgentStatus -from ..storage import get_session +from ....domain import AgentExecution, AgentStatus +from ....storage import get_session class ModalityType(StrEnum): diff --git a/apps/coordinator-api/src/app/contexts/payments/domain/payment.py b/apps/coordinator-api/src/app/contexts/payments/domain/payment.py index af7ffc36..f91d3c7f 100755 --- a/apps/coordinator-api/src/app/contexts/payments/domain/payment.py +++ b/apps/coordinator-api/src/app/contexts/payments/domain/payment.py @@ -50,7 +50,7 @@ class JobPayment(SQLModel, table=True): class PaymentEscrow(SQLModel, table=True): """Escrow record for holding payments""" - __tablename__ = PAYMENT_ESCROW_TABLE + __tablename__ = "payment_escrows" __table_args__ = {"extend_existing": True} id: str = Field(default_factory=lambda: uuid4().hex, primary_key=True, index=True) diff --git a/apps/coordinator-api/src/app/contexts/payments/routers/payments.py b/apps/coordinator-api/src/app/contexts/payments/routers/payments.py index f0786102..5b132757 100755 --- a/apps/coordinator-api/src/app/contexts/payments/routers/payments.py +++ b/apps/coordinator-api/src/app/contexts/payments/routers/payments.py @@ -9,7 +9,7 @@ from fastapi import APIRouter, Depends, HTTPException, status from ....deps import require_client_key from ....schemas import EscrowRelease, JobPaymentCreate, JobPaymentView, PaymentReceipt, RefundRequest -from ...services.payments import PaymentService +from ..services.payments import PaymentService from ....storage import get_session router = APIRouter(tags=["payments"]) diff --git a/apps/coordinator-api/src/app/contexts/payments/services/payments.py b/apps/coordinator-api/src/app/contexts/payments/services/payments.py index cf8d6178..271bf35c 100755 --- a/apps/coordinator-api/src/app/contexts/payments/services/payments.py +++ b/apps/coordinator-api/src/app/contexts/payments/services/payments.py @@ -12,7 +12,7 @@ from datetime import datetime, timezone, timedelta from aitbc import get_logger, AITBCHTTPClient, NetworkError logger = get_logger(__name__) -from ....domain.payment import JobPayment, PaymentEscrow +from ..domain.payment import JobPayment, PaymentEscrow from ....schemas import JobPaymentCreate, JobPaymentView from ....storage import get_session diff --git a/apps/coordinator-api/src/app/contexts/reputation/routers/reputation.py b/apps/coordinator-api/src/app/contexts/reputation/routers/reputation.py index 00373043..3b15f527 100755 --- a/apps/coordinator-api/src/app/contexts/reputation/routers/reputation.py +++ b/apps/coordinator-api/src/app/contexts/reputation/routers/reputation.py @@ -21,12 +21,16 @@ logger = get_logger(__name__) from sqlmodel import Field, func, select from ....domain.reputation import AgentReputation, CommunityFeedback, ReputationLevel, TrustScoreCategory -from ....services.reputation_service import ReputationService +from ..services.reputation_service import ReputationService from ....storage import get_session router = APIRouter(prefix="/v1/reputation", tags=["reputation"]) +def get_reputation_service(session: Session = Depends(get_session)) -> ReputationService: + return ReputationService(session) + + # Pydantic models for API requests/responses class ReputationProfileResponse(BaseModel): """Response model for reputation profile""" @@ -558,7 +562,7 @@ async def get_cross_chain_reputation( request: Request, agent_id: str, session: Session = Depends(get_session), - reputation_service: ReputationService = Depends() + reputation_service: ReputationService = Depends(get_reputation_service) ) -> Dict[str, Any]: """Get cross-chain reputation data for an agent""" @@ -609,7 +613,7 @@ async def sync_cross_chain_reputation( agent_id: str, background_tasks: Any, # FastAPI BackgroundTasks session: Session = Depends(get_session), - reputation_service: ReputationService = Depends() + reputation_service: ReputationService = Depends(get_reputation_service) ) -> Dict[str, Any]: """Synchronize reputation across chains for an agent""" @@ -645,7 +649,7 @@ async def get_cross_chain_leaderboard( limit: int = Query(50, ge=1, le=100), min_score: float = Query(0.0, ge=0.0, le=1.0), session: Session = Depends(get_session), - reputation_service: ReputationService = Depends() + reputation_service: ReputationService = Depends(get_reputation_service) ) -> Dict[str, Any]: """Get cross-chain reputation leaderboard""" @@ -694,7 +698,7 @@ async def submit_cross_chain_event( event_data: Dict[str, Any], background_tasks: Any, # FastAPI BackgroundTasks session: Session = Depends(get_session), - reputation_service: ReputationService = Depends() + reputation_service: ReputationService = Depends(get_reputation_service) ) -> Dict[str, Any]: """Submit a cross-chain reputation event""" @@ -760,7 +764,7 @@ async def get_cross_chain_analytics( request: Request, chain_id: Optional[int] = Query(None), session: Session = Depends(get_session), - reputation_service: ReputationService = Depends() + reputation_service: ReputationService = Depends(get_reputation_service) ) -> Dict[str, Any]: """Get cross-chain reputation analytics""" diff --git a/apps/coordinator-api/src/app/contexts/rewards/routers/rewards.py b/apps/coordinator-api/src/app/contexts/rewards/routers/rewards.py index b9a14332..b2fba8f8 100755 --- a/apps/coordinator-api/src/app/contexts/rewards/routers/rewards.py +++ b/apps/coordinator-api/src/app/contexts/rewards/routers/rewards.py @@ -19,7 +19,7 @@ from aitbc.rate_limiting import rate_limit logger = get_logger(__name__) from ....domain.rewards import AgentRewardProfile, RewardStatus, RewardTier, RewardType -from ....services.reward_service import RewardEngine +from ..services.reward_service import RewardEngine from ....storage import get_session router = APIRouter(prefix="/v1/rewards", tags=["rewards"]) diff --git a/apps/coordinator-api/src/app/contexts/security/routers/agent_security_router.py b/apps/coordinator-api/src/app/contexts/security/routers/agent_security_router.py index de8a4756..e47c23b8 100755 --- a/apps/coordinator-api/src/app/contexts/security/routers/agent_security_router.py +++ b/apps/coordinator-api/src/app/contexts/security/routers/agent_security_router.py @@ -1,4 +1,4 @@ -from typing import Annotated +from typing import Annotated, Any from sqlalchemy.orm import Session diff --git a/apps/coordinator-api/src/app/contexts/security/services/access_control.py b/apps/coordinator-api/src/app/contexts/security/services/access_control.py index 175fbfc1..649be8e2 100755 --- a/apps/coordinator-api/src/app/contexts/security/services/access_control.py +++ b/apps/coordinator-api/src/app/contexts/security/services/access_control.py @@ -6,7 +6,7 @@ from datetime import datetime, timezone, timedelta from enum import StrEnum from typing import Any -from ..schemas import ConfidentialAccessRequest +from ....schemas import ConfidentialAccessRequest class AccessPurpose(StrEnum): diff --git a/apps/coordinator-api/src/app/contexts/security/services/key_management.py b/apps/coordinator-api/src/app/contexts/security/services/key_management.py index 8ab2211f..10b6c19b 100755 --- a/apps/coordinator-api/src/app/contexts/security/services/key_management.py +++ b/apps/coordinator-api/src/app/contexts/security/services/key_management.py @@ -11,7 +11,7 @@ from datetime import datetime, timezone, timedelta from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey, X25519PublicKey -from ..schemas import KeyPair, KeyRotationLog +from ....schemas import KeyPair, KeyRotationLog class KeyManager: diff --git a/apps/coordinator-api/src/app/contexts/settlement/routers/settlement.py b/apps/coordinator-api/src/app/contexts/settlement/routers/settlement.py index 7051938a..31d2e8d8 100644 --- a/apps/coordinator-api/src/app/contexts/settlement/routers/settlement.py +++ b/apps/coordinator-api/src/app/contexts/settlement/routers/settlement.py @@ -11,7 +11,7 @@ from pydantic import BaseModel, Field from aitbc.rate_limiting import rate_limit from ....auth import get_api_key -from .settlement.manager import BridgeManager +from app.settlement.manager import BridgeManager router = APIRouter(prefix="/settlement", tags=["settlement"]) diff --git a/apps/coordinator-api/src/app/contexts/staking/routers/staking.py b/apps/coordinator-api/src/app/contexts/staking/routers/staking.py index 7916df5d..61359f94 100755 --- a/apps/coordinator-api/src/app/contexts/staking/routers/staking.py +++ b/apps/coordinator-api/src/app/contexts/staking/routers/staking.py @@ -8,16 +8,16 @@ REST API for AI agent staking system with reputation-based yield farming from datetime import datetime, timezone, timedelta from typing import Any, Dict, List, Optional -from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Request, Field +from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query, Request from pydantic import BaseModel, Field, validator from sqlalchemy.orm import Session from aitbc import get_logger from aitbc.rate_limiting import rate_limit -from ....auth import get_current_user +from ....routers.users import get_current_user from ....domain.bounty import AgentMetrics, AgentStake, EcosystemMetrics, PerformanceTier, StakeStatus, StakingPool -from ....services.blockchain_service import BlockchainService -from ....services.staking_service import StakingService +from ...blockchain.services.blockchain import BlockchainService +from ..services.staking_service import StakingService from ....storage import get_session router = APIRouter() @@ -466,7 +466,7 @@ async def get_staking_pool( async def get_agent_apy( request: Request, agent_wallet: str, - lock_period: int = Field(default=30, ge=1, le=365), + lock_period: int = Query(default=30, ge=1, le=365), session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service) ) -> Dict[str, Any]: @@ -575,8 +575,8 @@ async def distribute_agent_earnings( @rate_limit(rate=200, per=60) async def get_supported_agents( request: Request, - page: int = Field(default=1, ge=1), - limit: int = Field(default=50, ge=1, le=100), + page: int = Query(default=1, ge=1), + limit: int = Query(default=50, ge=1, le=100), tier: Optional[PerformanceTier] = None, session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service) @@ -604,7 +604,7 @@ async def get_supported_agents( @rate_limit(rate=200, per=60) async def get_staking_stats( request: Request, - period: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), + period: str = Query(default="daily", regex="^(hourly|daily|weekly|monthly)$"), session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service) ) -> StakingStatsResponse: @@ -622,9 +622,9 @@ async def get_staking_stats( @rate_limit(rate=200, per=60) async def get_staking_leaderboard( request: Request, - period: str = Field(default="weekly", regex="^(daily|weekly|monthly)$"), - metric: str = Field(default="total_staked", regex="^(total_staked|total_rewards|apy)$"), - limit: int = Field(default=50, ge=1, le=100), + period: str = Query(default="weekly", regex="^(daily|weekly|monthly)$"), + metric: str = Query(default="total_staked", regex="^(total_staked|total_rewards|apy)$"), + limit: int = Query(default=50, ge=1, le=100), session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service) ) -> Dict[str, Any]: @@ -648,8 +648,8 @@ async def get_my_staking_positions( request: Request, status: Optional[StakeStatus] = None, agent_wallet: Optional[str] = None, - page: int = Field(default=1, ge=1), - limit: int = Field(default=20, ge=1, le=100), + page: int = Query(default=1, ge=1), + limit: int = Query(default=20, ge=1, le=100), session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) @@ -674,7 +674,7 @@ async def get_my_staking_positions( @rate_limit(rate=200, per=60) async def get_my_staking_rewards( request: Request, - period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), + period: str = Query(default="monthly", regex="^(daily|weekly|monthly)$"), session: Session = Depends(get_session), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) diff --git a/apps/coordinator-api/src/app/contexts/trading/routers/trading.py b/apps/coordinator-api/src/app/contexts/trading/routers/trading.py index 3aa11d09..11a3c08b 100755 --- a/apps/coordinator-api/src/app/contexts/trading/routers/trading.py +++ b/apps/coordinator-api/src/app/contexts/trading/routers/trading.py @@ -29,7 +29,7 @@ from ....domain.trading import ( TradeStatus, TradeType, ) -from ....services.trading_marketplace.trading import P2PTradingProtocol +from ..services.trading_marketplace.trading import P2PTradingProtocol from ....storage import get_session router = APIRouter(prefix="/v1/trading", tags=["trading"]) diff --git a/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/__init__.py b/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/__init__.py index 531d0f63..4a4feecd 100644 --- a/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/__init__.py +++ b/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/__init__.py @@ -6,12 +6,9 @@ Provides trading, marketplace optimization, bid strategy, and dynamic pricing se from .bid_strategy import BidStrategyEngine from .dynamic_pricing import DynamicPricingEngine from .gpu_optimizer import MarketplaceGPUOptimizer -from .trading import MatchingEngine, NegotiationSystem __all__ = [ "BidStrategyEngine", "DynamicPricingEngine", "MarketplaceGPUOptimizer", - "MatchingEngine", - "NegotiationSystem", ] diff --git a/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/trading.py b/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/trading.py index 4f50c9d6..6a6b87c7 100755 --- a/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/trading.py +++ b/apps/coordinator-api/src/app/contexts/trading/services/trading_marketplace/trading.py @@ -13,7 +13,7 @@ logger = get_logger(__name__) from sqlmodel import Session, or_, select -from ...domain.trading import ( +from app.domain.trading import ( NegotiationStatus, SettlementType, TradeAgreement, diff --git a/apps/coordinator-api/src/app/contexts/wallet/__init__.py b/apps/coordinator-api/src/app/contexts/wallet/__init__.py new file mode 100644 index 00000000..6feba11f --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/wallet/__init__.py @@ -0,0 +1,5 @@ +"""Wallet context for wallet management and cryptocurrency operations.""" + +from .services import bitcoin_wallet, wallet_crypto, wallet_service, secure_wallet_service + +__all__ = ["bitcoin_wallet", "wallet_crypto", "wallet_service", "secure_wallet_service"] diff --git a/apps/coordinator-api/src/app/contexts/wallet/services/__init__.py b/apps/coordinator-api/src/app/contexts/wallet/services/__init__.py new file mode 100644 index 00000000..82d8c597 --- /dev/null +++ b/apps/coordinator-api/src/app/contexts/wallet/services/__init__.py @@ -0,0 +1,7 @@ +"""Wallet services.""" + +from .bitcoin_wallet import get_wallet_balance, get_wallet_info +from .wallet_service import WalletService +from .secure_wallet_service import SecureWalletService + +__all__ = ["get_wallet_balance", "get_wallet_info", "WalletService", "SecureWalletService"] diff --git a/apps/coordinator-api/src/app/services/bitcoin_wallet.py b/apps/coordinator-api/src/app/contexts/wallet/services/bitcoin_wallet.py similarity index 100% rename from apps/coordinator-api/src/app/services/bitcoin_wallet.py rename to apps/coordinator-api/src/app/contexts/wallet/services/bitcoin_wallet.py diff --git a/apps/coordinator-api/src/app/services/secure_wallet_service.py b/apps/coordinator-api/src/app/contexts/wallet/services/secure_wallet_service.py similarity index 98% rename from apps/coordinator-api/src/app/services/secure_wallet_service.py rename to apps/coordinator-api/src/app/contexts/wallet/services/secure_wallet_service.py index cee1eb2f..8c877e37 100755 --- a/apps/coordinator-api/src/app/services/secure_wallet_service.py +++ b/apps/coordinator-api/src/app/contexts/wallet/services/secure_wallet_service.py @@ -11,9 +11,9 @@ from datetime import datetime, timezone from sqlalchemy import select from sqlmodel import Session -from ..blockchain.contract_interactions import ContractInteractionService -from ..domain.wallet import AgentWallet, TokenBalance, TransactionStatus, WalletTransaction -from ..schemas.wallet import TransactionRequest, WalletCreate +# from ...blockchain.services.contract_interactions import ContractInteractionService +from ....domain.wallet import AgentWallet, TokenBalance, TransactionStatus, WalletTransaction +from ....schemas.wallet import TransactionRequest, WalletCreate # Import our fixed crypto utilities from .wallet_crypto import ( diff --git a/apps/coordinator-api/src/app/services/wallet_crypto.py b/apps/coordinator-api/src/app/contexts/wallet/services/wallet_crypto.py similarity index 100% rename from apps/coordinator-api/src/app/services/wallet_crypto.py rename to apps/coordinator-api/src/app/contexts/wallet/services/wallet_crypto.py diff --git a/apps/coordinator-api/src/app/services/wallet_service.py b/apps/coordinator-api/src/app/contexts/wallet/services/wallet_service.py similarity index 94% rename from apps/coordinator-api/src/app/services/wallet_service.py rename to apps/coordinator-api/src/app/contexts/wallet/services/wallet_service.py index c92f5cf2..809c8651 100755 --- a/apps/coordinator-api/src/app/services/wallet_service.py +++ b/apps/coordinator-api/src/app/contexts/wallet/services/wallet_service.py @@ -13,15 +13,15 @@ from sqlalchemy import select from sqlmodel import Session from aitbc import get_logger -from ..blockchain.contract_interactions import ContractInteractionService -from ..domain.wallet import AgentWallet, TokenBalance, TransactionStatus, WalletTransaction -from ..schemas.wallet import TransactionRequest, WalletCreate +# from ...blockchain.services.contract_interactions import ContractInteractionService +from ....domain.wallet import AgentWallet, TokenBalance, TransactionStatus, WalletTransaction +from ....schemas.wallet import TransactionRequest, WalletCreate logger = get_logger(__name__) class WalletService: - def __init__(self, session: Session, contract_service: ContractInteractionService): + def __init__(self, session: Session, contract_service=None): self.session = session self.contract_service = contract_service diff --git a/apps/coordinator-api/src/app/database_async.py b/apps/coordinator-api/src/app/database_async.py index 378e5eef..7c3e9634 100644 --- a/apps/coordinator-api/src/app/database_async.py +++ b/apps/coordinator-api/src/app/database_async.py @@ -47,7 +47,7 @@ def init_async_db() -> None: try: # Build async URL from sync settings - sync_url = str(settings.database.url) + sync_url = str(settings.database.effective_url) async_url = _build_async_url(sync_url) logger.info(f"Initializing async database connection: {async_url.split('://')[0]}://...") diff --git a/apps/coordinator-api/src/app/main.py b/apps/coordinator-api/src/app/main.py index 6cc1247d..38e3dbac 100755 --- a/apps/coordinator-api/src/app/main.py +++ b/apps/coordinator-api/src/app/main.py @@ -48,7 +48,6 @@ from .routers import ( admin, agent_router, client, - cross_chain_integration, developer_platform, edge_gpu, exchange, @@ -66,8 +65,6 @@ from .contexts.marketplace.routers import ( marketplace, marketplace_gpu, marketplace_offers, - global_marketplace, - global_marketplace_integration, ) from .contexts.payments.routers import payments from .contexts.blockchain.routers import blockchain @@ -75,35 +72,33 @@ from .contexts.agent_identity.routers import agent_identity # Skip optional routers with missing dependencies try: - from .routers.ml_zk_proofs import router as ml_zk_proofs + from .contexts.zk_applications.routers.ml_zk_proofs import router as ml_zk_proofs except ImportError: ml_zk_proofs = None logger.warning("ML ZK proofs router not available (missing tenseal)") -from .routers.marketplace_enhanced_simple import router as marketplace_enhanced -from .routers.monitoring_dashboard import router as monitoring_dashboard -from .routers.hermes_enhanced_simple import router as hermes_enhanced +from .contexts.infrastructure.routers.monitoring_dashboard import router as monitoring_dashboard +from .contexts.hermes.routers.hermes_enhanced_simple import router as hermes_enhanced # Skip optional routers with missing dependencies try: - from .routers.multi_modal_rl import router as multi_modal_rl_router + from .contexts.multimodal.routers.multi_modal_rl import router as multi_modal_rl_router except ImportError: multi_modal_rl_router = None logger.warning("Multi-modal RL router not available (missing torch)") try: - from .routers.ml_zk_proofs import router as ml_zk_proofs + from .contexts.zk_applications.routers.ml_zk_proofs import router as ml_zk_proofs except ImportError: ml_zk_proofs = None logger.warning("ML ZK proofs router not available (missing dependencies)") -from .routers.marketplace_enhanced_simple import router as marketplace_enhanced - from aitbc.aitbc_logging import configure_logging from aitbc import ( RequestIDMiddleware, PerformanceLoggingMiddleware, RequestValidationMiddleware, ErrorHandlerMiddleware, + get_logger, ) from .exceptions import AITBCError, ErrorResponse @@ -162,7 +157,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]: # Continue startup even if warmup fails # Validate configuration - if settings.app_env == "production": + if settings.environment == "production": logger.info("Production environment detected, validating configuration") # Configuration validation happens automatically via Pydantic validators logger.info("Configuration validation passed") @@ -182,13 +177,13 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]: logger.info(f" Admin stats: {settings.rate_limit_admin_stats}") # Log service startup details - logger.info(f"Coordinator API started on {settings.app_host}:{settings.app_port}") + logger.info(f"Coordinator API started on {settings.app_host}:{settings.port}") logger.info(f"Database adapter: {settings.database.adapter}") - logger.info(f"Environment: {settings.app_env}") + logger.info(f"Environment: {settings.environment}") # Log complete configuration summary logger.info("=== Coordinator API Configuration Summary ===") - logger.info(f"Environment: {settings.app_env}") + logger.info(f"Environment: {settings.environment}") logger.info(f"Database: {settings.database.adapter}") logger.info("Rate Limits:") logger.info(f" Jobs submit: {settings.rate_limit_jobs_submit}") @@ -359,15 +354,11 @@ def create_app() -> FastAPI: if ml_zk_proofs: app.include_router(ml_zk_proofs) - app.include_router(marketplace_enhanced, prefix="/v1") app.include_router(hermes_enhanced, prefix="/v1") app.include_router(monitoring_dashboard, prefix="/v1") - app.include_router(agent_router.router, prefix="/v1/agents") - app.include_router(agent_router.router, prefix="/api/v1/agents") # CLI compatibility + app.include_router(agent_router, prefix="/v1/agents") + app.include_router(agent_router, prefix="/api/v1/agents") # CLI compatibility app.include_router(agent_identity, prefix="/v1") - app.include_router(global_marketplace, prefix="/v1") - app.include_router(cross_chain_integration, prefix="/v1") - app.include_router(global_marketplace_integration, prefix="/v1") app.include_router(developer_platform, prefix="/v1") app.include_router(governance_enhanced, prefix="/v1") @@ -384,11 +375,11 @@ def create_app() -> FastAPI: app.include_router(multi_modal_rl, prefix="/v1") # Add swarm router for CLI compatibility - app.include_router(swarm.router, prefix="/v1") - app.include_router(swarm.router) # CLI compatibility (calls /swarm/list directly) + app.include_router(swarm, prefix="/v1") + app.include_router(swarm) # CLI compatibility (calls /swarm/list directly) # Add monitor router for CLI compatibility - app.include_router(monitor.router) + app.include_router(monitor) # Add Prometheus metrics endpoint metrics_app = make_asgi_app() diff --git a/apps/coordinator-api/src/app/models/__init__.py b/apps/coordinator-api/src/app/models/__init__.py index 530c14e2..a624a635 100755 --- a/apps/coordinator-api/src/app/models/__init__.py +++ b/apps/coordinator-api/src/app/models/__init__.py @@ -11,15 +11,19 @@ from ..custom_types import ( # Import domain models from ..domain import ( Job, - JobPayment, JobReceipt, - MarketplaceBid, - MarketplaceOffer, Miner, - PaymentEscrow, User, Wallet, ) +from ..contexts.marketplace.domain.marketplace import ( + MarketplaceBid, + MarketplaceOffer, +) +from ..contexts.payments.domain.payment import ( + JobPayment, + PaymentEscrow, +) # Import schemas from schemas.py from ..schemas import ( diff --git a/apps/coordinator-api/src/app/routers/__init__.py b/apps/coordinator-api/src/app/routers/__init__.py index 01cdaf76..38195fce 100755 --- a/apps/coordinator-api/src/app/routers/__init__.py +++ b/apps/coordinator-api/src/app/routers/__init__.py @@ -11,102 +11,112 @@ except ImportError: admin = None logger.warning("Admin router not available (missing slowapi)") -from .agent_identity import router as agent_identity -from .blockchain import router as blockchain from .cache_management import router as cache_management from .client import router as client -from .edge_gpu import router as edge_gpu + +# Agent identity router moved to contexts/agent_identity +from ..contexts.agent_identity.routers.agent_identity import router as agent_identity + +# Blockchain router moved to contexts/blockchain +from ..contexts.blockchain.routers.blockchain import router as blockchain + +# Edge GPU router moved to contexts/edge_gpu +from ..contexts.edge_gpu.routers.edge_gpu import router as edge_gpu from .exchange import router as exchange from .explorer import router as explorer -from .marketplace import router as marketplace -from .marketplace_gpu import router as marketplace_gpu -from .marketplace_offers import router as marketplace_offers + +# Marketplace routers moved to contexts/marketplace +from ..contexts.marketplace.routers.marketplace import router as marketplace +from ..contexts.marketplace.routers.marketplace_gpu import router as marketplace_gpu +from ..contexts.marketplace.routers.marketplace_offers import router as marketplace_offers + from .miner import router as miner -from .payments import router as payments + +# Payments router moved to contexts/payments +from ..contexts.payments.routers.payments import router as payments from .services import router as services from .users import router as users from .web_vitals import router as web_vitals -from .multi_modal_rl import router as multi_modal_rl # from .registry import router as registry # Governance routers moved to contexts/governance -from .contexts.governance.routers.governance import router as governance -from .contexts.governance.routers.governance_enhanced import router as governance_enhanced +from ..contexts.governance.routers.governance import router as governance +from ..contexts.governance.routers.governance_enhanced import router as governance_enhanced # Staking router moved to contexts/staking -from .contexts.staking.routers.staking import router as staking +from ..contexts.staking.routers.staking import router as staking # Reputation router moved to contexts/reputation -from .contexts.reputation.routers.reputation import router as reputation +from ..contexts.reputation.routers.reputation import router as reputation # Rewards router moved to contexts/rewards -from .contexts.rewards.routers.rewards import router as rewards +from ..contexts.rewards.routers.rewards import router as rewards # Trading router moved to contexts/trading -from .contexts.trading.routers.trading import router as trading +from ..contexts.trading.routers.trading import router as trading # Hermes routers moved to contexts/hermes -from .contexts.hermes.routers.hermes_enhanced import router as hermes_enhanced -from .contexts.hermes.routers.hermes_enhanced_simple import router as hermes_enhanced_simple -from .contexts.hermes.routers.hermes_enhanced_health import router as hermes_enhanced_health +from ..contexts.hermes.routers.hermes_enhanced import router as hermes_enhanced +from ..contexts.hermes.routers.hermes_enhanced_simple import router as hermes_enhanced_simple +from ..contexts.hermes.routers.hermes_enhanced_health import router as hermes_enhanced_health # Security router moved to contexts/security -from .contexts.security.routers.agent_security_router import router as agent_security_router +from ..contexts.security.routers.agent_security_router import router as agent_security_router # Analytics router moved to contexts/analytics -from .contexts.analytics.routers.analytics import router as analytics +from ..contexts.analytics.routers.analytics import router as analytics # Certification router moved to contexts/certification -from .contexts.certification.routers.certification import router as certification +from ..contexts.certification.routers.certification import router as certification # Multimodal routers moved to contexts/multimodal -from .contexts.multimodal.routers.multi_modal_rl import router as multi_modal_rl -from .contexts.multimodal.routers.multimodal_health import router as multimodal_health -from .contexts.multimodal.routers.modality_optimization_health import router as modality_optimization_health +from ..contexts.multimodal.routers.multi_modal_rl import router as multi_modal_rl +from ..contexts.multimodal.routers.multimodal_health import router as multimodal_health +from ..contexts.multimodal.routers.modality_optimization_health import router as modality_optimization_health # Developer platform router moved to contexts/developer_platform -from .contexts.developer_platform.routers.developer_platform import router as developer_platform +from ..contexts.developer_platform.routers.developer_platform import router as developer_platform # Community router moved to contexts/community -from .contexts.community.routers.community import router as community +from ..contexts.community.routers.community import router as community # Bounty router moved to contexts/bounty -from .contexts.bounty.routers.bounty import router as bounty +from ..contexts.bounty.routers.bounty import router as bounty # Confidential router moved to contexts/confidential -from .contexts.confidential.routers.confidential import router as confidential +from ..contexts.confidential.routers.confidential import router as confidential # ZK applications routers moved to contexts/zk_applications -from .contexts.zk_applications.routers.zk_applications import router as zk_applications -from .contexts.zk_applications.routers.ml_zk_proofs import router as ml_zk_proofs +from ..contexts.zk_applications.routers.zk_applications import router as zk_applications +from ..contexts.zk_applications.routers.ml_zk_proofs import router as ml_zk_proofs # Agent coordination routers moved to contexts/agent_coordination -from .contexts.agent_coordination.routers.agent_router import router as agent_router -from .contexts.agent_coordination.routers.agent_integration_router import router as agent_integration_router -from .contexts.agent_coordination.routers.agent_creativity import router as agent_creativity -from .contexts.agent_coordination.routers.agent_performance import router as agent_performance -from .contexts.agent_coordination.routers.swarm import router as swarm +from ..contexts.agent_coordination.routers.agent_router import router as agent_router +from ..contexts.agent_coordination.routers.agent_integration_router import router as agent_integration_router +from ..contexts.agent_coordination.routers.agent_creativity import router as agent_creativity +from ..contexts.agent_coordination.routers.agent_performance import router as agent_performance +from ..contexts.agent_coordination.routers.swarm import router as swarm # Enterprise integration router moved to contexts/enterprise_integration -from .contexts.enterprise_integration.routers.partners import router as partners +from ..contexts.enterprise_integration.routers.partners import router as partners # Advanced AI router moved to contexts/advanced_ai -from .contexts.advanced_ai.routers.adaptive_learning_health import router as adaptive_learning_health +from ..contexts.advanced_ai.routers.adaptive_learning_health import router as adaptive_learning_health # Ecosystem router moved to contexts/ecosystem -from .contexts.ecosystem.routers.ecosystem_dashboard import router as ecosystem_dashboard +from ..contexts.ecosystem.routers.ecosystem_dashboard import router as ecosystem_dashboard # GPU multimodal router moved to contexts/gpu_multimodal -from .contexts.gpu_multimodal.routers.gpu_multimodal_health import router as gpu_multimodal_health +from ..contexts.gpu_multimodal.routers.gpu_multimodal_health import router as gpu_multimodal_health # Settlement router moved to contexts/settlement -from .contexts.settlement.routers.settlement import router as settlement +from ..contexts.settlement.routers.settlement import router as settlement # Infrastructure routers moved to contexts/infrastructure -from .contexts.infrastructure.routers.monitor import router as monitor -from .contexts.infrastructure.routers.monitoring_dashboard import router as monitoring_dashboard +from ..contexts.infrastructure.routers.monitor import router as monitor +from ..contexts.infrastructure.routers.monitoring_dashboard import router as monitoring_dashboard __all__ = [ "client", @@ -125,9 +135,6 @@ __all__ = [ "cache_management", "agent_identity", "blockchain", - "global_marketplace", - "cross_chain_integration", - "global_marketplace_integration", "developer_platform", "governance", "governance_enhanced", diff --git a/apps/coordinator-api/src/app/routers/client.py b/apps/coordinator-api/src/app/routers/client.py index baea0e65..209842a1 100755 --- a/apps/coordinator-api/src/app/routers/client.py +++ b/apps/coordinator-api/src/app/routers/client.py @@ -14,7 +14,7 @@ from ..custom_types import JobState from ..deps import require_client_key from ..schemas import JobCreate, JobPaymentCreate, JobResult, JobView from ..services import JobService -from ..services.payments import PaymentService +from ..contexts.payments.services.payments import PaymentService from ..storage import get_session from ..utils.cache import cached, get_cache_config diff --git a/apps/coordinator-api/src/app/routers/dynamic_pricing.py b/apps/coordinator-api/src/app/routers/dynamic_pricing.py index 8762e91b..701e27ef 100755 --- a/apps/coordinator-api/src/app/routers/dynamic_pricing.py +++ b/apps/coordinator-api/src/app/routers/dynamic_pricing.py @@ -25,7 +25,7 @@ from ..schemas.pricing import ( PricingStrategyRequest, PricingStrategyResponse, ) -from ..services.trading_marketplace.dynamic_pricing import DynamicPricingEngine, PriceConstraints, PricingStrategy, ResourceType +from ..contexts.trading.services.trading_marketplace.dynamic_pricing import DynamicPricingEngine, PriceConstraints, PricingStrategy, ResourceType from ..services.market_data_collector import MarketDataCollector router = APIRouter(prefix="/v1/pricing", tags=["dynamic-pricing"]) diff --git a/apps/coordinator-api/src/app/routers/exchange.py b/apps/coordinator-api/src/app/routers/exchange.py index 43fb74cb..e76a371f 100755 --- a/apps/coordinator-api/src/app/routers/exchange.py +++ b/apps/coordinator-api/src/app/routers/exchange.py @@ -23,7 +23,7 @@ from ..schemas import ( WalletBalanceResponse, WalletInfoResponse, ) -from ..services.bitcoin_wallet import get_wallet_balance, get_wallet_info +from ..contexts.wallet.services.bitcoin_wallet import get_wallet_balance, get_wallet_info from ..utils.cache import cached, get_cache_config router = APIRouter(tags=["exchange"]) @@ -127,7 +127,7 @@ async def confirm_payment( # Mint AITBC tokens to user's wallet try: - from ..services.blockchain import mint_tokens + from ..contexts.blockchain.services.blockchain import mint_tokens mint_tokens(payment["user_id"], payment["aitbc_amount"]) except Exception as e: diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced.py index 302872b9..d4add60a 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced.py @@ -25,7 +25,7 @@ from ..schemas.marketplace_enhanced import ( RoyaltyDistributionRequest, RoyaltyDistributionResponse, ) -from ..services.marketplace_enhanced import EnhancedMarketplaceService +from ..contexts.marketplace.services.marketplace_enhanced import EnhancedMarketplaceService from ..storage import get_session router = APIRouter(prefix="/marketplace/enhanced", tags=["Enhanced Marketplace"]) diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py index 2211eacb..cb1b39f9 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py @@ -16,7 +16,7 @@ from sqlalchemy.orm import Session from aitbc.rate_limiting import rate_limit from aitbc import get_logger -from ..services.marketplace_enhanced import EnhancedMarketplaceService +from ..contexts.marketplace.services.marketplace_enhanced import EnhancedMarketplaceService from ..storage import get_session logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py index 04118aa2..eaec3dbe 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py @@ -19,7 +19,7 @@ from sqlmodel import Session from aitbc import get_logger from aitbc.rate_limiting import rate_limit from ..deps import require_admin_key -from ..services.marketplace_enhanced_simple import EnhancedMarketplaceService, LicenseType, VerificationType +from ..contexts.marketplace.services.marketplace_enhanced_simple import EnhancedMarketplaceService, LicenseType, VerificationType from ..storage import get_session router = APIRouter(prefix="/marketplace/enhanced", tags=["Marketplace Enhanced"]) diff --git a/apps/coordinator-api/src/app/routers/miner.py b/apps/coordinator-api/src/app/routers/miner.py index 1e9fcc49..2aac0aae 100755 --- a/apps/coordinator-api/src/app/routers/miner.py +++ b/apps/coordinator-api/src/app/routers/miner.py @@ -102,7 +102,7 @@ async def submit_result( # Auto-release payment if job has payment if job.payment_id and job.payment_status == "escrowed": - from ..services.payments import PaymentService + from ..contexts.payments.services.payments import PaymentService payment_service = PaymentService(session) success = await payment_service.release_payment(job.id, job.payment_id, reason="Job completed successfully") diff --git a/apps/coordinator-api/src/app/schemas/wallet.py b/apps/coordinator-api/src/app/schemas/wallet.py index f8f34be5..4c68600a 100755 --- a/apps/coordinator-api/src/app/schemas/wallet.py +++ b/apps/coordinator-api/src/app/schemas/wallet.py @@ -1,7 +1,7 @@ from pydantic import BaseModel, Field -from .wallet import TransactionStatus, WalletType +from ..domain.wallet import TransactionStatus, WalletType class WalletCreate(BaseModel): diff --git a/apps/coordinator-api/src/app/services/adaptive_learning_app.py b/apps/coordinator-api/src/app/services/adaptive_learning_app.py index 965c06fc..eef1b0d1 100755 --- a/apps/coordinator-api/src/app/services/adaptive_learning_app.py +++ b/apps/coordinator-api/src/app/services/adaptive_learning_app.py @@ -9,7 +9,7 @@ Adaptive Learning Service - FastAPI Entry Point from fastapi import Depends, FastAPI from fastapi.middleware.cors import CORSMiddleware -from ..routers.adaptive_learning_health import router as health_router +from ..contexts.advanced_ai.routers.adaptive_learning_health import router as health_router from ..storage import get_session from .adaptive_learning import AdaptiveLearningService, LearningAlgorithm diff --git a/apps/coordinator-api/src/app/services/agent_coordination/communication.py b/apps/coordinator-api/src/app/services/agent_coordination/communication.py index 6c46187d..680132c7 100755 --- a/apps/coordinator-api/src/app/services/agent_coordination/communication.py +++ b/apps/coordinator-api/src/app/services/agent_coordination/communication.py @@ -15,7 +15,7 @@ from datetime import datetime, timezone, timedelta from enum import StrEnum from typing import Any -from ..cross_chain_reputation import CrossChainReputationService +from app.contexts.cross_chain.services.cross_chain.reputation import CrossChainReputationService class MessageType(StrEnum): diff --git a/apps/coordinator-api/src/app/services/agent_coordination/orchestrator.py b/apps/coordinator-api/src/app/services/agent_coordination/orchestrator.py index c03a8272..78197587 100755 --- a/apps/coordinator-api/src/app/services/agent_coordination/orchestrator.py +++ b/apps/coordinator-api/src/app/services/agent_coordination/orchestrator.py @@ -13,7 +13,7 @@ from datetime import datetime, timezone, timedelta from enum import StrEnum from typing import Any -from ..bid_strategy_engine import BidResult +from app.contexts.trading.services.trading_marketplace.bid_strategy import BidResult from ..task_decomposition import GPU_Tier, SubTask, SubTaskStatus, TaskDecomposition diff --git a/apps/coordinator-api/src/app/services/confidential_service.py b/apps/coordinator-api/src/app/services/confidential_service.py index c3ccc5fe..2c6baa7f 100755 --- a/apps/coordinator-api/src/app/services/confidential_service.py +++ b/apps/coordinator-api/src/app/services/confidential_service.py @@ -6,8 +6,8 @@ from datetime import datetime, timezone from typing import Any from ..models.confidential import ConfidentialTransaction -from ..services.encryption import EncryptionService -from ..services.key_management import KeyManager +from ..contexts.security.services.encryption import EncryptionService +from ..contexts.security.services.key_management import KeyManager class ConfidentialTransactionService: diff --git a/apps/coordinator-api/src/app/services/developer_platform_service.py b/apps/coordinator-api/src/app/services/developer_platform_service.py index 17a1dcf2..bf1ffc3f 100755 --- a/apps/coordinator-api/src/app/services/developer_platform_service.py +++ b/apps/coordinator-api/src/app/services/developer_platform_service.py @@ -22,7 +22,7 @@ from ..domain.developer_platform import ( RegionalHub, ) from ..schemas.developer_platform import BountyCreate, BountySubmissionCreate, CertificationGrant, DeveloperCreate -from ..services.blockchain import get_balance, mint_tokens +from ..contexts.blockchain.services.blockchain import get_balance, mint_tokens logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/services/gpu_multimodal_app.py b/apps/coordinator-api/src/app/services/gpu_multimodal_app.py index 820ac368..d719667c 100755 --- a/apps/coordinator-api/src/app/services/gpu_multimodal_app.py +++ b/apps/coordinator-api/src/app/services/gpu_multimodal_app.py @@ -9,7 +9,7 @@ GPU Multi-Modal Service - FastAPI Entry Point from fastapi import Depends, FastAPI from fastapi.middleware.cors import CORSMiddleware -from ..routers.gpu_multimodal_health import router as health_router +from ..contexts.gpu_multimodal.routers.gpu_multimodal_health import router as health_router from ..storage import get_session from .gpu_multimodal import GPUAcceleratedMultiModal diff --git a/apps/coordinator-api/src/app/services/jobs.py b/apps/coordinator-api/src/app/services/jobs.py index 03604f7d..f010c17a 100755 --- a/apps/coordinator-api/src/app/services/jobs.py +++ b/apps/coordinator-api/src/app/services/jobs.py @@ -8,7 +8,7 @@ from sqlmodel import Session, select from ..domain import Job, JobReceipt, Miner from ..schemas import AssignedJob, Constraints, JobCreate, JobResult, JobState, JobView -from .payments import PaymentService +from ..contexts.payments.services.payments import PaymentService class JobService: diff --git a/apps/coordinator-api/src/app/services/modality_optimization_app.py b/apps/coordinator-api/src/app/services/modality_optimization_app.py index a462abd0..6a4971cb 100755 --- a/apps/coordinator-api/src/app/services/modality_optimization_app.py +++ b/apps/coordinator-api/src/app/services/modality_optimization_app.py @@ -9,9 +9,9 @@ Modality Optimization Service - FastAPI Entry Point from fastapi import Depends, FastAPI from fastapi.middleware.cors import CORSMiddleware -from ..routers.modality_optimization_health import router as health_router +from ..contexts.multimodal.routers.modality_optimization_health import router as health_router from ..storage import get_session -from .modality_optimization import ModalityOptimizationManager, ModalityType, OptimizationStrategy +from ..contexts.multimodal.services.modality_optimization import ModalityOptimizationManager, ModalityType, OptimizationStrategy app = FastAPI( title="AITBC Modality Optimization Service", diff --git a/apps/coordinator-api/src/app/services/multi_chain_transaction_manager.py b/apps/coordinator-api/src/app/services/multi_chain_transaction_manager.py index d848c379..3b1ab369 100755 --- a/apps/coordinator-api/src/app/services/multi_chain_transaction_manager.py +++ b/apps/coordinator-api/src/app/services/multi_chain_transaction_manager.py @@ -24,7 +24,7 @@ from ..agent_identity.wallet_adapter_enhanced import ( WalletAdapterFactory, ) from ..reputation.engine import CrossChainReputationEngine -from ..services.cross_chain.bridge_enhanced import CrossChainBridgeService +from ..contexts.cross_chain.services.cross_chain.bridge_enhanced import CrossChainBridgeService class TransactionPriority(StrEnum): diff --git a/apps/coordinator-api/src/app/services/multimodal_app.py b/apps/coordinator-api/src/app/services/multimodal_app.py index 366f5080..ae16bda0 100755 --- a/apps/coordinator-api/src/app/services/multimodal_app.py +++ b/apps/coordinator-api/src/app/services/multimodal_app.py @@ -9,9 +9,9 @@ Multi-Modal Agent Service - FastAPI Entry Point from fastapi import Depends, FastAPI from fastapi.middleware.cors import CORSMiddleware -from ..routers.multimodal_health import router as health_router +from ..contexts.multimodal.routers.multimodal_health import router as health_router from ..storage import get_session -from .multimodal_agent import MultiModalAgentService +from ..contexts.multimodal.services.multimodal_agent import MultiModalAgentService app = FastAPI( title="AITBC Multi-Modal Agent Service", diff --git a/apps/coordinator-api/src/app/settlement/hooks.py b/apps/coordinator-api/src/app/settlement/hooks.py index 37c4c569..3f203bd6 100755 --- a/apps/coordinator-api/src/app/settlement/hooks.py +++ b/apps/coordinator-api/src/app/settlement/hooks.py @@ -10,7 +10,7 @@ from aitbc import get_logger logger = get_logger(__name__) -from ..models.job import Job +from ..domain.job import Job from .bridges.base import BridgeStatus, SettlementMessage, SettlementResult from .manager import BridgeManager diff --git a/apps/coordinator-api/src/app/storage/db.py b/apps/coordinator-api/src/app/storage/db.py index 9af26f09..7c508fb8 100755 --- a/apps/coordinator-api/src/app/storage/db.py +++ b/apps/coordinator-api/src/app/storage/db.py @@ -62,7 +62,9 @@ def get_engine() -> Engine: # Import only essential models for database initialization # This avoids loading all domain models which causes 2+ minute startup delays -from ..domain import Job, GPUBooking, JobPayment +from ..domain import Job +from ..contexts.marketplace.domain.gpu_marketplace import GPUBooking +from ..contexts.payments.domain.payment import JobPayment def init_db() -> Engine: diff --git a/apps/coordinator-api/src/app/utils/cache.py b/apps/coordinator-api/src/app/utils/cache.py index 1ec3c4fd..9e493277 100755 --- a/apps/coordinator-api/src/app/utils/cache.py +++ b/apps/coordinator-api/src/app/utils/cache.py @@ -243,7 +243,7 @@ class CacheWarmer: async def warm_marketplace_stats(self): """Warm up marketplace statistics cache""" try: - from ..services.marketplace import MarketplaceService + from ..contexts.marketplace.services.marketplace import MarketplaceService service = MarketplaceService(self.session) diff --git a/apps/coordinator-api/src/app/utils/cache_management.py b/apps/coordinator-api/src/app/utils/cache_management.py index 18027a40..7ca71fdf 100755 --- a/apps/coordinator-api/src/app/utils/cache_management.py +++ b/apps/coordinator-api/src/app/utils/cache_management.py @@ -153,7 +153,7 @@ class CacheWarmer: async def _warm_marketplace_stats(self): """Warm marketplace statistics cache""" try: - from ..services.marketplace import MarketplaceService + from ..contexts.marketplace.services.marketplace import MarketplaceService service = MarketplaceService(self.session) stats = service.get_stats() diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index f8360511..cf4749cf 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -96,12 +96,12 @@ - Added quoting to migration scripts (migrate_complete.py, migrate_to_postgresql.py) - SQL injection risks reduced from 21 to 0 in user-input paths - [DONE] Remove ORIGINAL monolithic service files - COMPLETED (removed certification_service.py, multi_modal_fusion.py) - - [IN PROGRESS] Add rate limiting on all routers - IN PROGRESS + - [DONE] Add rate limiting on all routers - COMPLETED - Created rate limiting module at aitbc/rate_limiting.py with decorator and middleware - Added comprehensive tests (15 tests passing) - - Applied rate limiting to agent_router.py as example + - Applied rate limiting to all routers across coordinator-api, agent-coordinator, pool-hub, agent-management, blockchain-node, exchange, wallet - Created implementation guide at docs/RATE_LIMITING_GUIDE.md - - Remaining: 70+ router files across coordinator-api, agent-coordinator, pool-hub, agent-management, blockchain-node, exchange, wallet + - All endpoints now have appropriate rate limits (write: 50/min, read: 200/min, health: 1000/min, execution: 50/min) - **Medium (2-6 weeks)** - [DONE] Decompose coordinator-api - COMPLETED (6 phases complete) @@ -122,12 +122,12 @@ - Redis settings already in BaseAITBCConfig (redis_url, redis_max_connections, redis_timeout) - multi_language service already uses Redis with TranslationCache class - Other services can use settings.get_redis_cache() to get configured cache instance - - [IN PROGRESS] Add rate limiting on all routers - IN PROGRESS + - [DONE] Add rate limiting on all routers - COMPLETED - Created rate limiting module at aitbc/rate_limiting.py with decorator and middleware - Added comprehensive tests (15 tests passing) - - Applied rate limiting to agent_router.py as example + - Applied rate limiting to all routers across coordinator-api, agent-coordinator, pool-hub, agent-management, blockchain-node, exchange, wallet - Created implementation guide at docs/RATE_LIMITING_GUIDE.md - - Remaining: 70+ router files across coordinator-api, agent-coordinator, pool-hub, agent-management, blockchain-node, exchange, wallet + - All endpoints now have appropriate rate limits (write: 50/min, read: 200/min, health: 1000/min, execution: 50/min) - [DONE] Tighten mypy configuration - COMPLETED - Enabled check_untyped_defs, disallow_untyped_decorators, no_implicit_optional - Enabled warn_unreachable, strict_equality, strict_optional @@ -210,7 +210,7 @@ #### HIGH (Medium-term, 2-6 weeks) -- [ ] Decompose coordinator-api - IN PROGRESS (Domain refactoring in progress) +- [x] Decompose coordinator-api - COMPLETED - Phase 1: Infrastructure complete, extraction postponed due to domain coupling complexity - Built: shared-core, shared-domain (partial), agent-management skeleton - Created 7 microservice directories: agent-management, blockchain, computing, enterprise, identity, payment, ai-models @@ -228,13 +228,11 @@ - security context: 1 router, 7 services moved, imports updated, compilation verified - routers/__init__.py updated to reference all new context locations - All 7 high-priority contexts compile successfully - - Next: Create remaining 22 contexts (analytics, certification, multimodal, advanced_rl, ai_analytics, cross_chain, developer_platform, community, bounty, confidential, zk_applications, agent_coordination, enterprise_integration, advanced_ai, ecosystem, gpu_multimodal, edge_gpu, infrastructure, storage, wallet, language, settlement) - - advanced_rl/ package created (engine.py 867 LOC, agents.py, marketplace_optimizer.py) - - certification/ package created (certification_system.py 582 LOC, partnership_manager.py 472 LOC, badge_system.py, service.py) - - multi_modal_fusion/ package created (fusion_engine.py, neural_modules.py) - - ORIGINAL MONOLITH FILES REMOVED: - - certification_service.py (58,409 LOC) - REMOVED - - multi_modal_fusion.py (52,594 LOC) - REMOVED + - All 29 bounded contexts created: + - Completed remaining 22 contexts (analytics, certification, multimodal, advanced_rl, ai_analytics, cross_chain, developer_platform, community, bounty, confidential, zk_applications, agent_coordination, enterprise_integration, advanced_ai, ecosystem, gpu_multimodal, edge_gpu, infrastructure, storage, wallet, language, settlement) + - edge_gpu context: router and service moved, imports updated, compilation verified + - wallet context: 4 services moved (bitcoin_wallet, wallet_crypto, wallet_service, secure_wallet_service), imports updated, compilation verified + - language context: multi_language service moved, imports updated, compilation verified - [x] Consolidate CLI monolith - COMPLETE - aitbc_cli/commands/ directory created with 21 modular files diff --git a/systemd/aitbc-ai.service b/systemd/aitbc-ai.service index d6f49c58..d08ee3ba 100644 --- a/systemd/aitbc-ai.service +++ b/systemd/aitbc-ai.service @@ -6,11 +6,11 @@ After=network.target redis.service postgresql.service Type=simple User=root Group=root -WorkingDirectory=/opt/aitbc/apps/ai-service +WorkingDirectory=/opt/aitbc/apps/ai-engine Environment="PATH=/usr/bin:/usr/local/bin:/usr/bin:/bin" EnvironmentFile=/etc/aitbc/blockchain.env EnvironmentFile=/etc/aitbc/node.env -ExecStart=/opt/aitbc/venv/bin/python -m uvicorn src.ai_service.main:app --host 0.0.0.0 --port 8005 +ExecStart=/opt/aitbc/venv/bin/python -m uvicorn src.ai_service:app --host 0.0.0.0 --port 8005 Restart=always RestartSec=5 StandardOutput=journal