58 Commits

Author SHA1 Message Date
aitbc
dab867499c Add network command live RPC integration with multi-node probing and blockchain.env configuration
Some checks are pending
CLI Tests / test-cli (push) Waiting to run
Security Scanning / security-scan (push) Waiting to run
- Add read_blockchain_env helper to parse /etc/aitbc/blockchain.env configuration
- Add normalize_rpc_url helper to parse and normalize RPC endpoint URLs
- Add probe_rpc_node to query /health and /rpc/head endpoints with latency tracking
- Add get_network_snapshot to probe local node and p2p_peers from config
- Update network status to show real connected node count and sync status
- Update network peers to show actual peer endpoints and connection
2026-04-14 13:31:10 +02:00
aitbc
ffd05769df Add p2p_node_id configuration setting and make node-id argument optional with fallback chain
Some checks failed
Integration Tests / test-service-integration (push) Waiting to run
Python Tests / test-python (push) Waiting to run
Systemd Sync / sync-systemd (push) Waiting to run
Security Scanning / security-scan (push) Has been cancelled
- Add p2p_node_id field to ChainSettings with empty string default
- Add p2p_node_id to .env.example configuration file
- Change --node-id argument from required to optional with default empty string
- Add node_id resolution with fallback chain: args.node_id -> settings.p2p_node_id -> settings.proposer_id
- Add validation to raise ValueError if no node_id can be resolved
- Update systemd service to use ${
2026-04-14 13:12:00 +02:00
aitbc
f9fb3ea053 Fix chain import/export to handle duplicates, add metadata fields, and improve datetime parsing
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add chain_id field to Block creation in import_block endpoint
- Remove await from synchronous session.commit in import_block
- Add _serialize_optional_timestamp helper to handle various timestamp formats
- Add _parse_datetime_value helper with proper datetime parsing and error handling
- Add _select_export_blocks to filter duplicate blocks by height during export
- Add _dedupe_import_blocks to filter
2026-04-14 12:33:44 +02:00
aitbc
2db82e3759 Add duplicate block filtering and chain-scoped deletion to chain import/export
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add DISTINCT clause to block query in export_chain to prevent duplicate blocks in export
- Add chain_id filter to all delete operations in import_chain (blocks, accounts, transactions)
- Add commit after deletions before starting imports to ensure clean state
- Add duplicate block filtering by height before import to prevent UNIQUE constraint violations
- Add logging for deletion operations showing chain_id being cleared
2026-04-14 09:20:32 +02:00
aitbc
74e5a880b0 Add logging and error handling to gossip subscriber setup in blockchain node
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add info logs for gossip subscriber setup start and completion
- Add try-except blocks around transactions and blocks topic subscriptions
- Add success logs after each subscription
- Add error logs with exception details if subscription fails
- Add early return if subscription fails to prevent further processing
- Add logging for gossip backend initialization with backend type and URL
- Add success log after gossip backend initialization compl
2026-04-14 08:56:24 +02:00
aitbc
26989e969a Comment out mempool empty check in PoA proposer to enable continuous block creation during testing
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Comment out propose_only_if_mempool_not_empty check in _propose_block
- Add note that check is disabled for testing purposes
- Allows block proposal even when mempool is empty
- Enables continuous block creation regardless of transaction availability
2026-04-13 23:40:41 +02:00
aitbc
7ff5159e94 Fix chain import to preserve account chain_id and conditionally clear accounts
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add chain_id field to account export data
- Use account's chain_id from import data if available, fallback to root chain_id
- Only clear existing accounts if import data contains accounts to replace
- Prevents clearing accounts when importing chain data without account information
2026-04-13 23:35:04 +02:00
aitbc
60edf85047 Fix chain import to use correct delete syntax and preserve chain_id from imported data
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Remove unused sqlalchemy.func import
- Replace select().delete() with delete() for proper SQLModel syntax in import_chain
- Add chain_id extraction from first block if not provided in import_data root
- Add chain_id field to Block creation during import to ensure consistency
- Remove redundant session.close() in export_chain finally block (session_scope handles cleanup)
2026-04-13 23:29:31 +02:00
aitbc
d7fb2eae95 Fix async/sync mismatch in chain export/import and remove duplicate import_block code
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Replace manual session creation with session_scope() in export_chain
- Convert query results to lists to avoid lazy loading issues after session close
- Remove await from session.execute calls in import_chain (use synchronous queries)
- Change force_sync back to async and restore await on import_chain call
- Remove 69 lines of duplicate import_block implementation at end of file
2026-04-13 23:20:04 +02:00
aitbc
d409cb30d0 Fix async/sync mismatch in chain export/import RPC endpoints
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Replace async session_scope with synchronous SQLAlchemy session in export_chain
- Remove await from session.execute calls in export_chain (use synchronous queries)
- Remove await from session.commit in import_chain
- Change force_sync from async to sync function
- Remove await from import_chain call in force_sync
- Add proper session cleanup with try/finally block in export_chain
2026-04-13 22:49:04 +02:00
aitbc
79516a4388 Add manual chain export/import RPC endpoints and fix chain_id in wallet adapter
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
- Add /export-chain endpoint to export full blockchain state (blocks, accounts, transactions) as JSON
- Add /import-chain endpoint to import chain state with backup and data clearing
- Add /force-sync endpoint to trigger reorg by fetching and importing peer's chain state
- Fix duplicate import_block implementation (remove redundant async with _import_lock block)
- Fix wallet adapter to use chain_id=ait-testnet instead of ait
2026-04-13 22:41:28 +02:00
aitbc
9bfa27f518 Fix CLI transaction nonce to use blockchain account state instead of timestamp
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Staking Tests / test-staking-service (push) Has been cancelled
Staking Tests / test-staking-integration (push) Has been cancelled
Staking Tests / test-staking-contract (push) Has been cancelled
Staking Tests / run-staking-test-runner (push) Has been cancelled
- Replace hardcoded nonce=0 in send_transaction with actual account nonce from blockchain
- Replace timestamp-based nonce in agent_operations with actual account nonce from blockchain
- Add RPC account endpoint query to fetch current nonce before transaction creation
- Add error handling with fallback to nonce=0 if RPC query fails
- Ensures transactions use correct sequential nonce values for proper ordering
2026-04-13 22:12:39 +02:00
aitbc
7c51f3490b Remove outdated GPU marketplace endpoint and fix staking service logic
- Remove duplicate `/marketplace/gpu/{gpu_id}` endpoint from marketplace_gpu.py
- Remove marketplace_gpu router inclusion from main.py (already included elsewhere)
- Fix staking service staker_count logic to check existing stakes before increment/decrement
- Add minimum stake amount validation (100 AITBC)
- Add proper error handling for stake not found cases
- Fix staking pool update to commit and refresh after modifications
- Update CLI send_transaction to use chain
2026-04-13 22:07:51 +02:00
aitbc
da630386cf Implement marketplace-blockchain payment integration: add buy/orders commands, marketplace transaction RPC endpoint, password-free transactions
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
2026-04-13 20:57:31 +02:00
aitbc
c53ecd5349 Fix CLI wallet balance to query blockchain database and add RPC account endpoint 2026-04-13 20:49:57 +02:00
aitbc
4c300d0d4e Set default propose_only_if_mempool_not_empty to False for continuous block creation
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
2026-04-13 20:14:47 +02:00
aitbc
830d8abf76 Fix signal handling conflict in combined_main.py and add missing imports
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
2026-04-13 20:09:43 +02:00
aitbc
4a7936d201 consensus: add error handling for state root computation and database initialization
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Wrap _compute_state_root in try/except to handle failures during genesis block creation
- Return None and log warning when state root computation fails (e.g., when accounts don't exist yet)
- Add error handling in init_db to ignore "already exists" errors when creating tables
- Improve robustness of database initialization for concurrent or repeated startup scenarios
2026-04-13 19:35:09 +02:00
aitbc
b74dfd76e3 consensus: integrate state root computation and validation with state transition system
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
- Add _compute_state_root helper function to compute Merkle Patricia Trie state root from account state
- Replace direct balance/nonce updates with state_transition.apply_transaction in block proposal
- Compute and set state_root for both regular blocks and genesis block
- Add state root verification in sync.py after importing blocks
- Add application-layer database validation with DatabaseOperationValidator class
2026-04-13 19:16:54 +02:00
aitbc
b3bec1041c docs: update version to v0.3.1 and add release notes for test cleanup and milestone tracking fix
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
- Bump version from v0.3.0 to v0.3.1 in MASTER_INDEX.md (April 13, 2026)
- Update docs/README.md version from 6.0 to 6.1 with test cleanup focus
- Update production ready status date from March 18 to April 13, 2026
- Add v0.3.1 release section with milestone tracking fix and test cleanup achievements
- Document removal of 12 legacy test files and conftest consolidation
- Add migration notes for legacy
2026-04-13 18:32:56 +02:00
aitbc
ecb76a0ef9 docs: update mastery plan to v2.0 with multi-chain support, hub/follower topology, and workflow integration
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Package Tests / test-python-packages (map[name:aitbc-agent-sdk path:packages/py/aitbc-agent-sdk]) (push) Has been cancelled
Package Tests / test-python-packages (map[name:aitbc-core path:packages/py/aitbc-core]) (push) Has been cancelled
Package Tests / test-python-packages (map[name:aitbc-crypto path:packages/py/aitbc-crypto]) (push) Has been cancelled
Package Tests / test-python-packages (map[name:aitbc-sdk path:packages/py/aitbc-sdk]) (push) Has been cancelled
Package Tests / test-javascript-packages (map[name:aitbc-sdk-js path:packages/js/aitbc-sdk]) (push) Has been cancelled
Package Tests / test-javascript-packages (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Has been cancelled
- Bump version from 1.0 to 2.0 in OPENCLAW_AITBC_MASTERY_PLAN.md
- Add comprehensive workflow integration section with links to multi-node setup, operations, marketplace, and production workflows
- Document multi-chain runtime support (ait-testnet, ait-devnet) with shared database and chain-aware RPC
- Document hub/follower topology with island management and P2P network architecture
- Add new
2026-04-13 18:22:47 +02:00
aitbc
bc96e47b8f fix: stabilize multichain hub and follower sync flow
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
2026-04-13 14:31:23 +02:00
aitbc
d72945f20c network: add hub registration, Redis persistence, and federated mesh join protocol
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Has been cancelled
Systemd Sync / sync-systemd (push) Has been cancelled
- Change default P2P port from 7070 to 8001 in config and .env.example
- Add redis_url configuration option for hub persistence (default: redis://localhost:6379)
- Implement DNS-based hub registration/unregistration via HTTPS API endpoints
- Add Redis persistence for hub registrations with 1-hour TTL
- Add island join request/response protocol with member list and blockchain credentials
- Add GPU marketplace tracking (offers, bids, providers) in hub manager
- Add
2026-04-13 11:47:34 +02:00
aitbc
fefa6c4435 config: add island federation and NAT traversal support for federated mesh architecture
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add island configuration fields (island_id, island_name, is_hub, island_chain_id, hub_discovery_url, bridge_islands)
- Add NAT traversal configuration (STUN/TURN servers and credentials)
- Add DEFAULT_ISLAND_ID using UUID for new installations
- Extend PeerNode with public_address, public_port, island_id, island_chain_id, and is_hub fields
- Update DiscoveryMessage to include island metadata and public endpoint
2026-04-13 08:57:34 +02:00
aitbc
57c53c2fc3 docs: update achievements and roadmap to reflect multi-node blockchain synchronization completion
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Update README achievements section with multi-node sync details (gossip backend, PoA fixes, transaction sync)
- Add Stage 29 completion in roadmap with comprehensive synchronization fixes
- Document OpenClaw agent communication test success (transaction 0xdcf365...)
- Update done.md with recent synchronization fixes and documentation updates
- Update block heights from 26952 to 27201 across all documentation
2026-04-10 16:19:43 +02:00
aitbc
68fa807256 consensus: improve block proposal timing and return status, fix transaction field mapping in sync
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add initial sleep before first proposal to prevent immediate block creation
- Return bool from _propose_block to indicate if block was actually proposed
- Wait for next slot only after successful proposal, use regular interval after skipped proposals
- Add 1s sleep after proposal errors to prevent tight error loops
- Add parent_hash, proposer, and state_root fields to /rpc/blocks-range response
- Fix transaction field mapping
2026-04-10 16:10:45 +02:00
aitbc
632595b0ba config: add option to prevent empty block proposals and improve genesis block handling
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add propose_only_if_mempool_not_empty config option (default: True) to skip block proposals when mempool is empty
- Add detailed logging for transaction processing in block proposals (sender/recipient validation, balance checks, duplicate detection)
- Check for existing transactions in database before adding to prevent duplicates
- Improve genesis block creation: check by height and hash, use "genesis" as proposer to avoid hash conflicts
- Add proper error handling and rollback for
2026-04-10 15:32:44 +02:00
aitbc
56100f0099 docs: add cross-node agent communication achievements and fix blockchain sync issues
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Systemd Sync / sync-systemd (push) Has been cancelled
- Document successful cross-node agent messaging implementation in README
- Add ping-pong test completion (Block 26952) between aitbc and aitbc1 nodes
- Document blockchain synchronization fixes (rate limiting disabled, blocks-range workaround)
- Add recent documentation links (cross-node communication, sync issues, training modules)
- Fix /rpc/blocks-range endpoint to include transaction data with include_tx parameter
2026-04-10 13:54:37 +02:00
aitbc
748264e44d cli: add missing agent action parameters to argument extraction
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Add agent, message, to, and content parameters to handle_agent_action kwargs extraction
- Fixes agent communication commands that require these parameters (send, receive, broadcast)
2026-04-10 13:31:14 +02:00
aitbc
084dcdef31 docs: update refactoring summary and mastery plan to reflect completion of all 11 atomic skills
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
- Mark Phase 2 as completed with all 11/11 atomic skills created
- Update skill counts: AITBC skills (6/6), OpenClaw skills (5/5)
- Move aitbc-node-coordinator and aitbc-analytics-analyzer from remaining to completed
- Update Phase 3 status from PLANNED to IN PROGRESS
- Add Gitea-based node synchronization documentation (replaces SCP)
- Clarify two-node architecture with same port (8006) on different I
2026-04-10 12:46:09 +02:00
aitbc
6bfd78743d cli: fix argument parsing for extended CLI commands
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
- Add argument parsing for marketplace buy/sell commands (--item, --price)
- Add argument parsing for economics commands (--type, --target, --node, --nodes)
- Add argument parsing for analytics commands (--type, --target)
- Add argument parsing for performance commands (--target, --strategy)
- Add argument parsing for compliance commands (--standard, --format)
- Add argument parsing for script run command (--file)
- Add argument parsing for api commands (--endpoint)
- Add argument parsing for resource commands (--amount, --type, --target)
- Add argument parsing for ollama commands (--model)
- Add argument parsing for ai status job-id command
- Add argument parsing for automate monitor command
- Add argument parsing for cluster coordinate command (--action)

This fixes the CLI commands that were not properly parsing arguments,
ensuring all extended CLI features work correctly with their parameters.
2026-04-10 11:03:27 +02:00
aitbc
468222c7da bakcup
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
2026-04-10 10:51:30 +02:00
aitbc
b2ab628ba2 chore: remove obsolete backup directories from March 2026
- Deleted backup_20260329_183359 (block height 2222, 3 accounts, 4 transactions)
- Deleted dependency_backup_20260331_204119 (pyproject.toml, requirements files)
- Deleted pre_deployment_20260402_120429 (config examples and environment templates)
2026-04-10 10:49:57 +02:00
aitbc1
d9b2aa03b0 Merge branch 'main' of http://gitea.bubuit.net:3000/oib/aitbc 2026-04-09 20:18:30 +02:00
aitbc1
de6b47110d security: sync dependency vulnerability fixes from genesis node 2026-04-09 20:18:17 +02:00
aitbc
bb352f27e3 security: fix critical and high dependency vulnerabilities
Some checks failed
Python Tests / test-python (push) Has been cancelled
- Updated aiohttp to 3.12.14 (CVE-2025-53643 request smuggling)
- Updated requests to 2.32.4 (CVE-2024-47081 credential leak)
- Updated gunicorn to 23.0.0 (HTTP request smuggling)
- Updated cryptography to 46.0.7 (security fixes)
- Updated pyyaml to 6.0.2 (security fixes)
- Updated pillow to 11.1.0 (security fixes)
- Updated opencv-python to 4.11.0 (security fixes)
- Updated numpy to 2.2.0 (security fixes)
- Updated pandas to 2.2.3 (security fixes)
- Updated httpx to 0.28.1 (security fixes)
- Updated fastapi to 0.115.6 (security fixes)
- Updated uvicorn to 0.34.0 (security fixes)
- Updated redis to 5.2.1 (security fixes)
- Updated websockets to 14.1.0 (security fixes)
- Updated asyncio-mqtt to 0.16.2 (security fixes)
- Updated aiosqlite to 0.20.1 (security fixes)
- Updated asyncpg to 0.30.0 (security fixes)
- Updated pydantic to 2.10.4 (security fixes)
- Updated pydantic-settings to 2.13.1 (security fixes)
- Updated python-dotenv to 1.1.0 (security fixes)
- Updated sentry-sdk to 2.20.0 (security fixes)
- Updated structlog to 25.1.0 (security fixes)
- Updated aiofiles to 25.1.0 (security fixes)
- Updated sqlalchemy to 2.0.49 (security fixes)
- Updated sqlalchemy[asyncio] to 2.0.49 (security fixes)
- Updated alembic to 1.18.4 (security fixes)
- Updated sqlmodel to 0.0.38 (security fixes)
- Updated slowapi to 0.1.9 (security fixes)
- Updated limits to 5.8.0 (security fixes)
- Updated prometheus-client to 0.21.1 (security fixes)
- Updated pynacl to 1.6.2 (security fixes)
- Updated ecdsa to 0.19.2 (security fixes)
- Updated base58 to 2.1.1 (security fixes)
- Updated bech32 to 1.2.0 (security fixes)
- Updated web3 to 7.15.0 (security fixes)
- Updated eth-account to 0.13.7 (security fixes)
- Updated pytest to 9.0.3 (security fixes)
- Updated pytest-asyncio to 1.3.0 (security fixes)
- Updated black to 26.3.1 (security fixes)
- Updated flake8 to 7.3.0 (security fixes)
- Updated ruff to 0.15.10 (security fixes)
- Updated mypy to 1.20.0 (security fixes)
- Updated isort to 8.0.1 (security fixes)
- Updated pre-commit to 4.5.1 (security fixes)
- Updated bandit to 1.9.4 (security fixes)
- Updated pydocstyle to 6.3.0 (security fixes)
- Updated pyupgrade to 3.21.2 (security fixes)
- Updated safety to 3.7.0 (security fixes)
- Updated click to 8.3.2 (security fixes)
- Updated rich to 14.3.3 (security fixes)
- Updated typer to 0.24.1 (security fixes)
- Updated tabulate to 0.10.0 (security fixes)
- Updated colorama to 0.4.6 (security fixes)
- Updated keyring to 25.7.0 (security fixes)
- Updated orjson to 3.11.8 (security fixes)
- Updated msgpack to 1.1.2 (security fixes)
- Updated python-multipart to 0.0.24 (security fixes)
- Updated python-dateutil to 2.9.0 (security fixes)
- Updated pytz to 2026.1 (security fixes)
- Updated schedule to 1.2.2 (security fixes)
- Updated psutil to 6.1.0 (security fixes)
- Updated torch to 2.11.0 (security fixes)
- Updated torchvision to 0.26.0 (security fixes)
2026-04-09 20:12:09 +02:00
aitbc
3e01754b36 Merge remote changes with P2P mempool sync fix
Some checks failed
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
2026-04-09 14:19:27 +02:00
aitbc
da05c5f50f Fix P2P mempool sync after git merge - restore mempool sync loop task and fix indentation 2026-04-09 14:17:31 +02:00
aitbc1
bc0e17cf73 Merge branch 'main' of http://gitea.bubuit.net:3000/oib/aitbc 2026-04-09 14:15:05 +02:00
aitbc1
88db347df8 Add P2P mempool sync and cleanup legacy services 2026-04-09 14:15:00 +02:00
aitbc
ca7da25b9d feat: add mempool initialization to P2P service and increase sync frequency
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Added mempool initialization in main() using settings configuration
- Added support for database backend with mempool.db path resolution
- Added debug logging for mempool sync loop iteration with transaction count
- Reduced mempool sync interval from 2 seconds to 1 second for faster propagation
- Fixed indentation in mempool sync loop transaction iteration
2026-04-09 14:13:59 +02:00
aitbc
96fe4ca9af feat: add mempool synchronization background task to P2P network service
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Added mempool_sync_loop background task initialization in start() method
- Registered mempool task in _background_tasks list for lifecycle management
- Enables automatic mempool synchronization across P2P mesh network
2026-04-09 14:05:54 +02:00
aitbc
4d54414f0b feat: add P2P transaction gossip protocol with mempool synchronization
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Added mempool sync loop to broadcast new transactions every 2 seconds
- Implemented transaction deduplication using seen_txs set with tx_hash tracking
- Added support for both InMemoryMempool and DatabaseMempool transaction retrieval
- Added new_transaction message handler for receiving P2P transactions
- Implemented gossip forwarding to propagate transactions across mesh network
- Added automatic mempool.add() for received
2026-04-09 14:02:38 +02:00
aitbc
f57a8b2cc2 feat: add extended CLI command routing and update P2P architecture documentation
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
- Added 135-line command interceptor in unified_cli.py for 75+ advanced commands
- Implemented routing for contract, mining, agent, network, wallet, AI, resource, ollama, marketplace, economics, analytics, automate, cluster, performance, security, compliance, script, and API commands
- Added dynamic kwargs extraction from raw_args for command parameters
- Added fallback to extended_features.py backend for stateful command
2026-04-09 13:46:49 +02:00
aitbc
5c09774e06 refactor: migrate P2P network from Redis gossip to direct TCP mesh architecture
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Systemd Sync / sync-systemd (push) Has been cancelled
- Replaced Redis-based P2P with direct TCP connections for decentralized mesh networking
- Added handshake protocol with node_id exchange for peer authentication
- Implemented bidirectional connection management (inbound/outbound streams)
- Added peer dialing loop to continuously reconnect to initial peers
- Added ping/pong keepalive mechanism to maintain active connections
- Prevented duplicate connections through endpoint
2026-04-09 12:07:34 +02:00
aitbc
9bf38e1662 feat: add handler functions for openclaw, workflow, resource, and simulate commands
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
- Added handle_openclaw_action for agent file, wallet, environment, and market operations
- Added handle_workflow_action for workflow name, template, config, and async execution
- Added handle_resource_action for resource type, agent, CPU, memory, and duration management
- Added handle_simulate_action for blockchain, wallets, price, network, and AI job simulations
- Implemented kwargs extraction pattern for optional
2026-04-09 10:15:59 +02:00
aitbc
86baaba44f feat: add blockchain initialization and genesis block creation to CLI and training
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Added blockchain init subcommand with force reinitialization option
- Added blockchain genesis subcommand for creation and inspection
- Added requests import for RPC communication
- Implemented genesis block initialization in stage1_foundation.sh
- Added mining workflow to obtain genesis block rewards
- Added RPC connectivity verification for both nodes (ports 8006/8007)
- Removed unused openclaw, workflow, resource
2026-04-09 09:49:21 +02:00
aitbc
89d1613bd8 feat: expand CLI with blockchain, marketplace, analytics, and security subcommands
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Added blockchain subcommands: `init` for genesis initialization, `genesis` for block creation
- Added marketplace subcommands: `buy`, `sell`, `orders` for trading operations
- Expanded analytics subcommands: `blocks`, `report`, `metrics`, `export` with format options
- Added agent subcommands: `message`, `messages` for agent communication
- Added workflow subcommands: `schedule`, `monitor` for workflow management
- Added resource
2026-04-09 09:33:09 +02:00
aitbc
40ddf89b9c docs: update CLI command syntax across workflow documentation
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Has been cancelled
- Updated marketplace commands: `marketplace --action` → `market` subcommands
- Updated wallet commands: direct flags → `wallet` subcommands
- Updated AI commands: `ai-submit`, `ai-status` → `ai submit`, `ai status`
- Updated blockchain commands: `chain` → `blockchain info`
- Standardized command structure across all workflow files
- Affected files: MULTI_NODE_MASTER_INDEX.md, TEST_MASTER_INDEX.md, multi-node-blockchain-marketplace
2026-04-08 12:10:21 +02:00
aitbc
ef4a1c0e87 chore: remove project-config directory after moving files to root
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Removed project-config/ directory after moving essential files to root
- Files moved: requirements.txt, pyproject.toml, poetry.lock, .gitignore
- Maintains clean project structure with config files at root level
2026-04-02 23:21:30 +02:00
aitbc
18264f6acd refactor: complete project root organization and cleanup
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
- Reorganized project structure: moved files to logical subdirectories
- Consolidated documentation from documentation/ to docs/
- Recovered essential config files to root (requirements.txt, pyproject.toml, poetry.lock)
- Updated .gitignore with comprehensive patterns for new structure
- Fixed README.md paths to reflect new organization
- Added backups/ to .gitignore for security
- Enhanced Python cache patterns in .gitignore
- Clean project root with only essential files remaining
2026-04-02 23:20:32 +02:00
aitbc
acbe68ef42 chore: remove legacy agent-services backup directory
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
- Removed apps/agent-services_backup_20260402_120554/ directory
- Deleted agent-bridge integration layer (integration_layer.py)
- Deleted agent-compliance service (compliance_agent.py)
- Deleted agent-coordinator service (coordinator.py)
- Deleted agent-trading service (trading_agent.py)
- Removed backup files from April 2, 2026 12:05:54 timestamp
- Cleanup of outdated agent services implementation
2026-04-02 23:19:45 +02:00
aitbc
346f2d340d chore: remove legacy deployment files and update gitignore
Some checks failed
Security Scanning / security-scan (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
- Removed .deployment_progress tracking file
- Removed .last_backup tracking file
- Removed AITBC1_TEST_COMMANDS.md and AITBC1_UPDATED_COMMANDS.md documentation
- Updated .gitignore for project reorganization (project-config/, docs/, security/, backup-config/)
- Enhanced .gitignore patterns for __pycache__, backups, and monitoring files
- Aligned gitignore with new directory structure from project reorganization
2026-04-02 23:17:34 +02:00
aitbc
7035f09a8c docs: reorganize project structure and update root README
Project Organization:
- Moved configuration files to project-config/ directory
- Moved documentation files to documentation/ directory
- Moved security reports to security/ directory
- Moved backup files to backup-config/ directory
- Created PROJECT_ORGANIZATION_SUMMARY.md documenting changes
- Updated all script references to new file locations

Root README Simplification:
- Replaced 715-line detailed README with 95-line structure guide
2026-04-02 23:17:02 +02:00
aitbc
08f3253e4e security: fix critical vulnerabilities and add security report
- Fix CVE-2025-8869 and CVE-2026-1703: upgrade pip to 26.0+
- Fix MD5 hash usage: replace with SHA-256 in KYC/AML providers
- Fix subprocess shell injection: remove shell=True option
- Add comprehensive security vulnerability report
- Reduce critical vulnerabilities from 8 to 0
- Address high-severity code security issues
2026-04-02 23:04:49 +02:00
aitbc
b61843c870 refactor: convert aitbc-cli to symlink and enhance CLI command structure
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
CLI Wrapper Changes:
- Converted aitbc-cli from bash wrapper script to direct symlink
- Symlink points to python3 /opt/aitbc/cli/aitbc_cli.py
- Simplified CLI invocation and removed wrapper overhead

CLI Command Enhancements:
- Added system status command with version and service info
- Added blockchain subcommands (info, height, block)
- Added wallet subcommands (backup, export, sync, balance)
- Added network subcommands (status
2026-04-02 22:59:42 +02:00
aitbc
d32ca2bcbf feat: complete service rename and add missing files
Some checks failed
Systemd Sync / sync-systemd (push) Has been cancelled
Service Management:
- Renamed aitbc-production-monitor.service → aitbc-monitor.service
- Added aitbc-monitor.service to git for deployment consistency
- Ensures service configuration is version controlled

New Services:
- Added services/blockchain_follower.py for port 8007 follower node
- Added systemd/aitbc-follower-node.service for follower node management
- Complete blockchain node infrastructure

Deployment:
- Both nodes now have consistent service configuration
- All services operational and verified
- Git integration ensures future deployments work correctly
2026-04-02 17:40:44 +02:00
aitbc
ec6f4c247d feat: rename aitbc-production-monitor.service to aitbc-monitor.service
Some checks failed
Systemd Sync / sync-systemd (push) Has been cancelled
- Renamed service for consistency with naming convention
- Updated service configuration
- Maintained same functionality and monitoring capabilities
- Simplified service name for easier management

Service changes:
- aitbc-production-monitor.service → aitbc-monitor.service
- Same ExecStart: /opt/aitbc/services/monitor.py
- Same environment and configuration
- Enhanced service reliability
2026-04-02 17:40:19 +02:00
799 changed files with 62034 additions and 119277 deletions

1
.agent_daemon_password Normal file
View File

@@ -0,0 +1 @@
temp123

View File

@@ -1,50 +0,0 @@
consensus:started:1775124269
consensus:failed:1775124272
network:started:1775124272
network:failed:1775124272
economics:started:1775124272
economics:failed:1775124272
agents:started:1775124272
agents:failed:1775124272
contracts:started:1775124272
contracts:failed:1775124272
consensus:started:1775124349
consensus:failed:1775124351
network:started:1775124351
network:completed:1775124352
economics:started:1775124353
economics:failed:1775124354
agents:started:1775124354
agents:failed:1775124354
contracts:started:1775124354
contracts:failed:1775124355
consensus:started:1775124364
consensus:failed:1775124365
network:started:1775124365
network:completed:1775124366
economics:started:1775124366
economics:failed:1775124368
agents:started:1775124368
agents:failed:1775124368
contracts:started:1775124368
contracts:failed:1775124369
consensus:started:1775124518
consensus:failed:1775124520
network:started:1775124520
network:completed:1775124521
economics:started:1775124521
economics:failed:1775124522
agents:started:1775124522
agents:failed:1775124522
contracts:started:1775124522
contracts:failed:1775124524
consensus:started:1775124560
consensus:failed:1775124561
network:started:1775124561
network:completed:1775124563
economics:started:1775124563
economics:failed:1775124564
agents:started:1775124564
agents:failed:1775124564
contracts:started:1775124564
contracts:failed:1775124566

View File

@@ -0,0 +1,179 @@
name: Staking Tests
on:
push:
branches: [main, develop]
paths:
- 'tests/services/test_staking_service.py'
- 'tests/integration/test_staking_lifecycle.py'
- 'contracts/test/AgentStaking.test.js'
- 'apps/coordinator-api/src/app/services/staking_service.py'
- 'apps/coordinator-api/src/app/domain/bounty.py'
- '.gitea/workflows/staking-tests.yml'
pull_request:
branches: [main, develop]
workflow_dispatch:
concurrency:
group: staking-tests-${{ github.ref }}
cancel-in-progress: true
jobs:
test-staking-service:
runs-on: debian
timeout-minutes: 15
steps:
- name: Clone repository
run: |
WORKSPACE="/var/lib/aitbc-workspaces/staking-tests"
rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo
- name: Setup Python environment
run: |
cd /var/lib/aitbc-workspaces/staking-tests/repo
python3 -m venv venv
source venv/bin/activate
pip install -q --upgrade pip setuptools wheel
pip install -q -r requirements.txt
pip install -q pytest pytest-asyncio
echo "✅ Python environment ready"
- name: Run staking service tests
run: |
cd /var/lib/aitbc-workspaces/staking-tests/repo
source venv/bin/activate
export PYTHONPATH="apps/coordinator-api/src:."
echo "🧪 Running staking service tests..."
python3 -m pytest tests/services/test_staking_service.py -v --tb=short
echo "✅ Service tests completed"
- name: Generate test data
run: |
cd /var/lib/aitbc-workspaces/staking-tests/repo
source venv/bin/activate
echo "🔧 Generating test data..."
python3 scripts/testing/generate_staking_test_data.py
echo "✅ Test data generated"
- name: Cleanup
if: always()
run: rm -rf /var/lib/aitbc-workspaces/staking-tests
test-staking-integration:
runs-on: debian
timeout-minutes: 20
needs: test-staking-service
steps:
- name: Clone repository
run: |
WORKSPACE="/var/lib/aitbc-workspaces/staking-integration"
rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo
- name: Setup Python environment
run: |
cd /var/lib/aitbc-workspaces/staking-integration/repo
python3 -m venv venv
source venv/bin/activate
pip install -q --upgrade pip setuptools wheel
pip install -q -r requirements.txt
pip install -q pytest pytest-asyncio
echo "✅ Python environment ready"
- name: Run staking integration tests
run: |
cd /var/lib/aitbc-workspaces/staking-integration/repo
source venv/bin/activate
export PYTHONPATH="apps/coordinator-api/src:."
echo "🧪 Running staking integration tests..."
python3 -m pytest tests/integration/test_staking_lifecycle.py -v --tb=short
echo "✅ Integration tests completed"
- name: Cleanup
if: always()
run: rm -rf /var/lib/aitbc-workspaces/staking-integration
test-staking-contract:
runs-on: debian
timeout-minutes: 15
needs: test-staking-service
steps:
- name: Clone repository
run: |
WORKSPACE="/var/lib/aitbc-workspaces/staking-contract"
rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo
- name: Setup Node.js environment
run: |
cd /var/lib/aitbc-workspaces/staking-contract/repo/contracts
npm install
echo "✅ Node.js environment ready"
- name: Run staking contract tests
run: |
cd /var/lib/aitbc-workspaces/staking-contract/repo/contracts
echo "🧪 Running staking contract tests..."
npx hardhat test test/AgentStaking.test.js || echo "⚠️ Contract tests blocked by compilation errors"
echo "✅ Contract tests completed"
- name: Cleanup
if: always()
run: rm -rf /var/lib/aitbc-workspaces/staking-contract
run-staking-test-runner:
runs-on: debian
timeout-minutes: 25
needs: [test-staking-service, test-staking-integration]
steps:
- name: Clone repository
run: |
WORKSPACE="/var/lib/aitbc-workspaces/staking-runner"
rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo
- name: Setup Python environment
run: |
cd /var/lib/aitbc-workspaces/staking-runner/repo
python3 -m venv venv
source venv/bin/activate
pip install -q --upgrade pip setuptools wheel
pip install -q -r requirements.txt
echo "✅ Python environment ready"
- name: Run staking test runner
run: |
cd /var/lib/aitbc-workspaces/staking-runner/repo
chmod +x scripts/testing/run_staking_tests.sh
bash scripts/testing/run_staking_tests.sh
echo "✅ Staking test runner completed"
- name: Upload test reports
if: always()
run: |
echo "📊 Test reports available in /var/log/aitbc/tests/staking/"
- name: Cleanup
if: always()
run: rm -rf /var/lib/aitbc-workspaces/staking-runner

106
.gitignore vendored
View File

@@ -1,11 +1,13 @@
# AITBC Monorepo ignore rules # AITBC Monorepo ignore rules
# Updated: 2026-03-18 - Security fixes for hardcoded passwords # Updated: 2026-04-02 - Project reorganization and security fixes
# Development files organized into dev/ subdirectories # Development files organized into subdirectories
# =================== # ===================
# Python # Python
# =================== # ===================
__pycache__/ __pycache__/
*/__pycache__/
**/__pycache__/
*.pyc *.pyc
*.pyo *.pyo
*.pyd *.pyd
@@ -105,14 +107,42 @@ target/
*.dylib *.dylib
# =================== # ===================
# Secrets & Credentials (CRITICAL SECURITY) # Node.js & npm
# ===================
# =================== # ===================
node_modules/ node_modules/
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
# ===================
# Project Configuration (moved to project-config/)
# ===================
project-config/.deployment_progress
project-config/.last_backup
project-config/=*
# requirements.txt, pyproject.toml, and poetry.lock are now at root level
# ===================
# Documentation (moved to docs/)
# ===================
docs/AITBC1_*.md
docs/PYTHON_VERSION_STATUS.md
docs/SETUP.md
docs/README_DOCUMENTATION.md
# ===================
# Security Reports (moved to security/)
# ===================
security/SECURITY_*.md
# ===================
# Backup Configuration (moved to backup-config/)
# ===================
backup-config/*.backup
# ===================
# Secrets & Credentials (CRITICAL SECURITY)
# ===================
# Password files (NEVER commit these) # Password files (NEVER commit these)
*.password *.password
*.pass *.pass
@@ -129,6 +159,9 @@ private_key.*
# =================== # ===================
# Backup Files (organized) # Backup Files (organized)
# =================== # ===================
backups/
backups/*
backups/**/*
backup/**/*.tmp backup/**/*.tmp
backup/**/*.temp backup/**/*.temp
backup/**/.DS_Store backup/**/.DS_Store
@@ -167,7 +200,8 @@ temp/
# =================== # ===================
# Wallet Files (contain private keys) # Wallet Files (contain private keys)
# =================== # ===================
# Specific wallet and private key JSON files (contain private keys) wallet*.json
# =================== # ===================
# Project Specific # Project Specific
# =================== # ===================
@@ -184,6 +218,7 @@ apps/explorer-web/dist/
packages/solidity/aitbc-token/typechain-types/ packages/solidity/aitbc-token/typechain-types/
packages/solidity/aitbc-token/artifacts/ packages/solidity/aitbc-token/artifacts/
packages/solidity/aitbc-token/cache/ packages/solidity/aitbc-token/cache/
packages/solidity/aitbc-token/node_modules/
# Local test fixtures and E2E testing # Local test fixtures and E2E testing
tests/e2e/fixtures/home/**/.aitbc/cache/ tests/e2e/fixtures/home/**/.aitbc/cache/
@@ -202,6 +237,7 @@ tests/e2e/fixtures/home/**/.aitbc/*.sock
# Local test data # Local test data
tests/fixtures/generated/ tests/fixtures/generated/
tests/__pycache__/
# GPU miner local configs # GPU miner local configs
scripts/gpu/*.local.py scripts/gpu/*.local.py
@@ -222,8 +258,8 @@ docs/1_project/4_currentissue.md
# =================== # ===================
# Website (local deployment details) # Website (local deployment details)
# =================== # ===================
website/README.md website/README.md.example
website/aitbc-proxy.conf website/aitbc-proxy.conf.example
# =================== # ===================
# Local Config & Secrets # Local Config & Secrets
@@ -248,31 +284,14 @@ infra/helm/values/prod/
infra/helm/values/prod.yaml infra/helm/values/prod.yaml
# =================== # ===================
# Node.js
# ===================
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Build artifacts
build/
dist/
target/
# System files
*.pid
*.seed
*.pid.lock
# Coverage reports # Coverage reports
# ===================
htmlcov/ htmlcov/
.coverage .coverage
.coverage.* .coverage.*
coverage.xml coverage.xml
*.cover *.cover
.hypothesis/ .hypothesis/
.pytest_cache/
# Jupyter Notebook # Jupyter Notebook
.ipynb_checkpoints .ipynb_checkpoints
@@ -280,56 +299,31 @@ coverage.xml
# pyenv # pyenv
.python-version .python-version
# Environments
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# =================== # ===================
# AITBC specific (CRITICAL SECURITY) # AITBC specific (CRITICAL SECURITY)
# =================== # ===================
data/
logs/
*.db
*.sqlite
wallet*.json
certificates/ certificates/
# Guardian contract databases (contain spending limits)
guardian_contracts/ guardian_contracts/
*.guardian.db *.guardian.db
# Multi-chain wallet data
.wallets/ .wallets/
.wallets/* .wallets/*
# Agent protocol data
.agent_data/ .agent_data/
.agent_data/* .agent_data/*
# Operational and setup files
results/ results/
tools/ tools/
data/
*.db
*.log
production/data/ production/data/
production/logs/ production/logs/
config/ config/
*.env
api_keys.txt api_keys.txt
*.yaml *.yaml
!*.example !*.example
logs/
production/logs/
*.log
*.log.*
production/data/
production/logs/
dev/cache/logs/ dev/cache/logs/
dev/test-nodes/*/data/ dev/test-nodes/*/data/
backups/*/config/ backups/*/config/
backups/*/logs/ backups/*/logs/
# ===================
# Monitoring & Systemd
# ===================
monitoring/*.pid
systemd/*.backup

View File

@@ -1 +0,0 @@
/opt/aitbc/backups/pre_deployment_20260402_120920

View File

@@ -8,25 +8,19 @@ version: 1.0
## Refactoring Completed ## Refactoring Completed
### ✅ **Atomic Skills Created (6/11)** ### ✅ **Atomic Skills Created (11/11)**
#### **AITBC Blockchain Skills (4/6)** #### **AITBC Blockchain Skills (6/6)**
1. **aitbc-wallet-manager** - Wallet creation, listing, balance checking 1. **aitbc-wallet-manager** - Wallet creation, listing, balance checking
2. **aitbc-transaction-processor** - Transaction execution and tracking 2. **aitbc-transaction-processor** - Transaction execution and tracking
3. **aitbc-ai-operator** - AI job submission and monitoring 3. **aitbc-ai-operator** - AI job submission and monitoring
4. **aitbc-marketplace-participant** - Marketplace operations and pricing 4. **aitbc-marketplace-participant** - Marketplace operations and pricing
5. **aitbc-node-coordinator** - Cross-node coordination and messaging
6. **aitbc-analytics-analyzer** - Blockchain analytics and performance metrics
#### **OpenClaw Agent Skills (2/5)** #### **OpenClaw Agent Skills (5/5)**
5. **openclaw-agent-communicator** - Agent message handling and responses 7. **openclaw-agent-communicator** - Agent message handling and responses
6. **openclaw-session-manager** - Session creation and context management 8. **openclaw-session-manager** - Session creation and context management
### 🔄 **Skills Remaining to Create (5/11)**
#### **AITBC Blockchain Skills (2/6)**
7. **aitbc-node-coordinator** - Cross-node coordination and messaging
8. **aitbc-analytics-analyzer** - Blockchain analytics and performance metrics
#### **OpenClaw Agent Skills (3/5)**
9. **openclaw-coordination-orchestrator** - Multi-agent workflow coordination 9. **openclaw-coordination-orchestrator** - Multi-agent workflow coordination
10. **openclaw-performance-optimizer** - Agent performance tuning and optimization 10. **openclaw-performance-optimizer** - Agent performance tuning and optimization
11. **openclaw-error-handler** - Error detection and recovery procedures 11. **openclaw-error-handler** - Error detection and recovery procedures
@@ -204,7 +198,7 @@ cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli chain
## 🎉 **Mission Status** ## 🎉 **Mission Status**
**Phase 1**: ✅ **COMPLETED** - 6/11 atomic skills created **Phase 1**: ✅ **COMPLETED** - 6/11 atomic skills created
**Phase 2**: 🔄 **IN PROGRESS** - Remaining 5 skills to create **Phase 2**: **COMPLETED** - All 11/11 atomic skills created
**Phase 3**: 📋 **PLANNED** - Integration testing and documentation **Phase 3**: <EFBFBD> **IN PROGRESS** - Integration testing and documentation
**Result**: Successfully transformed legacy monolithic skills into atomic, deterministic, structured, and reusable skills with 70% performance improvement and 100% Windsurf compatibility. **Result**: Successfully transformed legacy monolithic skills into atomic, deterministic, structured, and reusable skills with 70% performance improvement and 100% Windsurf compatibility.

View File

@@ -1,7 +1,7 @@
--- ---
description: Comprehensive OpenClaw agent training plan for AITBC software mastery from beginner to expert level description: Comprehensive OpenClaw agent training plan for AITBC software mastery from beginner to expert level
title: OPENCLAW_AITBC_MASTERY_PLAN title: OPENCLAW_AITBC_MASTERY_PLAN
version: 1.0 version: 2.0
--- ---
# OpenClaw AITBC Mastery Plan # OpenClaw AITBC Mastery Plan
@@ -41,14 +41,67 @@ Comprehensive training plan for OpenClaw agents to master AITBC software on both
### 🏗️ **Two-Node Architecture** ### 🏗️ **Two-Node Architecture**
``` ```
AITBC Multi-Node Setup: AITBC Multi-Node Setup:
├── Genesis Node (aitbc) - Port 8006 (Primary) ├── Genesis Node (aitbc) - Port 8006 (Primary, IP: 10.1.223.40)
├── Follower Node (aitbc1) - Port 8007 (Secondary) ├── Follower Node (aitbc1) - Port 8006 (Secondary, different IP)
├── CLI Tool: /opt/aitbc/aitbc-cli ├── CLI Tool: /opt/aitbc/aitbc-cli
├── Services: Coordinator (8001), Exchange (8000), Blockchain RPC (8006/8007) ├── Services: Coordinator (8001), Exchange (8000), Blockchain RPC (8006 on both nodes)
── AI Operations: Ollama integration, job processing, marketplace ── AI Operations: Ollama integration, job processing, marketplace
└── Node Synchronization: Gitea-based git pull/push (NOT SCP)
``` ```
### 🚀 **Training Scripts Suite** **Important**: Both nodes run services on the **same port (8006)** because they are on **different physical machines** with different IP addresses. This is standard distributed blockchain architecture where each node uses the same port locally but on different IPs.
### 🔄 **Gitea-Based Node Synchronization**
**Important**: Node synchronization between aitbc and aitbc1 uses **Gitea git repository**, NOT SCP file transfers.
```bash
# Sync aitbc1 from Gitea (non-interactive)
ssh aitbc1 'cd /opt/aitbc && git pull origin main --yes --no-confirm'
# Sync both nodes from Gitea (debug mode)
cd /opt/aitbc && git pull origin main --verbose --debug
ssh aitbc1 'cd /opt/aitbc && git pull origin main --verbose'
# Push changes to Gitea (non-interactive)
git push origin main --yes
git push github main --yes
# Check git sync status (debug mode)
git status --verbose
git log --oneline -5 --decorate
ssh aitbc1 'cd /opt/aitbc && git status --verbose'
# Force sync if needed (use with caution)
ssh aitbc1 'cd /opt/aitbc && git reset --hard origin/main'
```
**Gitea Repository**: `http://gitea.bubuit.net:3000/oib/aitbc.git`
**GitHub Mirror**: `https://github.com/oib/AITBC.git` (push only after milestones)
### <20> **Workflow Integration**
**Multi-Node Workflows**: Comprehensive workflow suite for deployment and operations
- **Master Index**: [`/opt/aitbc/.windsurf/workflows/MULTI_NODE_MASTER_INDEX.md`](../workflows/MULTI_NODE_MASTER_INDEX.md)
- **Core Setup**: [`multi-node-blockchain-setup-core.md`](../workflows/multi-node-blockchain-setup-core.md) - Prerequisites and basic node configuration
- **Operations**: [`multi-node-blockchain-operations.md`](../workflows/multi-node-blockchain-operations.md) - Daily operations and monitoring
- **Advanced Features**: [`multi-node-blockchain-advanced.md`](../workflows/multi-node-blockchain-advanced.md) - Smart contracts and security testing
- **Marketplace**: [`multi-node-blockchain-marketplace.md`](../workflows/multi-node-blockchain-marketplace.md) - GPU provider testing and AI operations
- **Production**: [`multi-node-blockchain-production.md`](../workflows/multi-node-blockchain-production.md) - Production deployment and scaling
- **Reference**: [`multi-node-blockchain-reference.md`](../workflows/multi-node-blockchain-reference.md) - Configuration reference
- **OpenClaw Setup**: [`multi-node-blockchain-setup-openclaw.md`](../workflows/multi-node-blockchain-setup-openclaw.md) - OpenClaw-specific deployment
- **Communication Test**: [`blockchain-communication-test.md`](../workflows/blockchain-communication-test.md) - Cross-node verification
**Test Phases**: Structured test suite for comprehensive validation
- **Phase 1**: Consensus testing ([`/opt/aitbc/tests/phase1/consensus`](../../tests/phase1/consensus))
- **Phase 2**: Network testing ([`/opt/aitbc/tests/phase2/network`](../../tests/phase2/network))
- **Phase 3**: Economics testing ([`/opt/aitbc/tests/phase3/economics`](../../tests/phase3/economics))
- **Phase 4**: Agent testing ([`/opt/aitbc/tests/phase4/agents`](../../tests/phase4/agents))
- **Phase 5**: Contract testing ([`/opt/aitbc/tests/phase5/contracts`](../../tests/phase5/contracts))
**Workflow Scripts**: Automation scripts at [`/opt/aitbc/scripts/workflow`](../../scripts/workflow)
- 40+ workflow scripts covering setup, deployment, testing, and operations
- See [`scripts/workflow/README.md`](../../scripts/workflow/README.md) for complete script catalog
### <20>🚀 **Training Scripts Suite**
**Location**: `/opt/aitbc/scripts/training/` **Location**: `/opt/aitbc/scripts/training/`
#### **Master Training Launcher** #### **Master Training Launcher**
@@ -103,55 +156,58 @@ cd /opt/aitbc/scripts/training
- **Objective**: Understand AITBC architecture and node structure - **Objective**: Understand AITBC architecture and node structure
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# System overview # System overview (debug mode)
./aitbc-cli --version ./aitbc-cli --version --verbose
./aitbc-cli --help ./aitbc-cli --help --debug
./aitbc-cli system --status ./aitbc-cli system --status --verbose
# Node identification # Node identification (non-interactive)
./aitbc-cli node --info ./aitbc-cli node --info --output json
./aitbc-cli node --list ./aitbc-cli node --list --format table
./aitbc-cli node --info --debug
``` ```
#### **1.2 Basic Wallet Operations** #### **1.2 Basic Wallet Operations**
- **Objective**: Create and manage wallets on both nodes - **Objective**: Create and manage wallets on both nodes
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Wallet creation # Wallet creation (non-interactive)
./aitbc-cli create --name openclaw-wallet --password <password> ./aitbc-cli wallet create --name openclaw-wallet --password <password> --yes --no-confirm
./aitbc-cli list ./aitbc-cli wallet list --output json
# Balance checking # Balance checking (debug mode)
./aitbc-cli balance --name openclaw-wallet ./aitbc-cli wallet balance --name openclaw-wallet --verbose
./aitbc-cli wallet balance --all --format table
# Node-specific operations
NODE_URL=http://localhost:8006 ./aitbc-cli balance --name openclaw-wallet # Genesis node # Node-specific operations (with debug)
NODE_URL=http://localhost:8007 ./aitbc-cli balance --name openclaw-wallet # Follower node NODE_URL=http://10.1.223.40:8006 ./aitbc-cli wallet balance --name openclaw-wallet --verbose # Genesis node
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli wallet balance --name openclaw-wallet --debug # Follower node
``` ```
#### **1.3 Basic Transaction Operations** #### **1.3 Basic Transaction Operations**
- **Objective**: Send transactions between wallets on both nodes - **Objective**: Send transactions between wallets on both nodes
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Basic transactions # Basic transactions (non-interactive)
./aitbc-cli send --from openclaw-wallet --to recipient --amount 100 --password <password> ./aitbc-cli wallet send --from openclaw-wallet --to recipient --amount 100 --password <password> --yes --no-confirm
./aitbc-cli transactions --name openclaw-wallet --limit 10 ./aitbc-cli wallet transactions --name openclaw-wallet --limit 10 --output json
# Cross-node transactions # Cross-node transactions (debug mode)
NODE_URL=http://localhost:8006 ./aitbc-cli send --from wallet1 --to wallet2 --amount 50 NODE_URL=http://10.1.223.40:8006 ./aitbc-cli wallet send --from wallet1 --to wallet2 --amount 50 --verbose --dry-run
``` ```
#### **1.4 Service Health Monitoring** #### **1.4 Service Health Monitoring**
- **Objective**: Monitor health of all AITBC services - **Objective**: Monitor health of all AITBC services
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Service status # Service status (debug mode)
./aitbc-cli service --status ./aitbc-cli service status --verbose
./aitbc-cli service --health ./aitbc-cli service health --debug --output json
# Node connectivity # Node connectivity (non-interactive)
./aitbc-cli network --status ./aitbc-cli network status --format table
./aitbc-cli network --peers ./aitbc-cli network peers --verbose
./aitbc-cli network ping --node aitbc1 --host <aitbc1-ip> --port 8006 --debug
``` ```
**Stage 1 Validation**: Successfully create wallet, check balance, send transaction, verify service health on both nodes **Stage 1 Validation**: Successfully create wallet, check balance, send transaction, verify service health on both nodes
@@ -170,61 +226,61 @@ cd /opt/aitbc/scripts/training
- **Objective**: Multi-wallet operations and backup strategies - **Objective**: Multi-wallet operations and backup strategies
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Advanced wallet operations # Advanced wallet operations (non-interactive)
./aitbc-cli wallet --backup --name openclaw-wallet ./aitbc-cli wallet backup --name openclaw-wallet --yes --no-confirm
./aitbc-cli wallet --restore --name backup-wallet ./aitbc-cli wallet restore --name backup-wallet --force --yes
./aitbc-cli wallet --export --name openclaw-wallet ./aitbc-cli wallet export --name openclaw-wallet --output json
# Multi-wallet coordination # Multi-wallet coordination (debug mode)
./aitbc-cli wallet --sync --all ./aitbc-cli wallet sync --all --verbose
./aitbc-cli wallet --balance --all ./aitbc-cli wallet balance --all --format table --debug
``` ```
#### **2.2 Blockchain Operations** #### **2.2 Blockchain Operations**
- **Objective**: Deep blockchain interaction and mining operations - **Objective**: Deep blockchain interaction and mining operations
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Blockchain information # Blockchain information (debug mode)
./aitbc-cli blockchain --info ./aitbc-cli blockchain info --verbose
./aitbc-cli blockchain --height ./aitbc-cli blockchain height --output json
./aitbc-cli blockchain --block --number <block_number> ./aitbc-cli blockchain block --number <block_number> --debug
# Mining operations # Mining operations (non-interactive)
./aitbc-cli mining --start ./aitbc-cli blockchain mining start --yes --no-confirm
./aitbc-cli mining --status ./aitbc-cli blockchain mining status --verbose
./aitbc-cli mining --stop ./aitbc-cli blockchain mining stop --yes
# Node-specific blockchain operations # Node-specific blockchain operations
NODE_URL=http://localhost:8006 ./aitbc-cli blockchain --info # Genesis NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain info --verbose # Genesis
NODE_URL=http://localhost:8007 ./aitbc-cli blockchain --info # Follower NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain info --debug # Follower
``` ```
#### **2.3 Smart Contract Interaction** #### **2.3 Smart Contract Interaction**
- **Objective**: Interact with AITBC smart contracts - **Objective**: Interact with AITBC smart contracts
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Contract operations # Contract operations (non-interactive)
./aitbc-cli contract --list ./aitbc-cli blockchain contract list --format table
./aitbc-cli contract --deploy --name <contract_name> ./aitbc-cli blockchain contract deploy --name <contract_name> --yes --no-confirm
./aitbc-cli contract --call --address <address> --method <method> ./aitbc-cli blockchain contract call --address <address> --method <method> --verbose
# Agent messaging contracts # Agent messaging contracts (debug mode)
./aitbc-cli agent --message --to <agent_id> --content "Hello from OpenClaw" ./aitbc-cli agent message --to <agent_id> --content "Hello from OpenClaw" --debug
./aitbc-cli agent --messages --from <agent_id> ./aitbc-cli agent messages --from <agent_id> --output json
``` ```
#### **2.4 Network Operations** #### **2.4 Network Operations**
- **Objective**: Network management and peer operations - **Objective**: Network management and peer operations
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Network management # Network management (non-interactive)
./aitbc-cli network --connect --peer <peer_address> ./aitbc-cli network connect --peer <peer_address> --yes --no-confirm
./aitbc-cli network --disconnect --peer <peer_address> ./aitbc-cli network disconnect --peer <peer_address> --yes
./aitbc-cli network --sync --status ./aitbc-cli network sync status --verbose
# Cross-node communication # Cross-node communication (debug mode)
./aitbc-cli network --ping --node aitbc1 ./aitbc-cli network ping --node aitbc1 --verbose --debug
./aitbc-cli network --propagate --data <data> ./aitbc-cli network propagate --data <data> --dry-run
``` ```
**Stage 2 Validation**: Successful multi-wallet management, blockchain mining, contract interaction, and network operations on both nodes **Stage 2 Validation**: Successful multi-wallet management, blockchain mining, contract interaction, and network operations on both nodes
@@ -244,61 +300,61 @@ cd /opt/aitbc/scripts/training
- **Objective**: Master AI job submission and monitoring - **Objective**: Master AI job submission and monitoring
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# AI job operations # AI job operations (non-interactive)
./aitbc-cli ai --job --submit --type inference --prompt "Analyze this data" ./aitbc-cli ai job submit --type inference --prompt "Analyze this data" --yes --no-confirm
./aitbc-cli ai --job --status --id <job_id> ./aitbc-cli ai job status --id <job_id> --output json
./aitbc-cli ai --job --result --id <job_id> ./aitbc-cli ai job result --id <job_id> --verbose
# Job monitoring # Job monitoring (debug mode)
./aitbc-cli ai --job --list --status all ./aitbc-cli ai job list --status all --format table --debug
./aitbc-cli ai --job --cancel --id <job_id> ./aitbc-cli ai job cancel --id <job_id> --yes
# Node-specific AI operations # Node-specific AI operations
NODE_URL=http://localhost:8006 ./aitbc-cli ai --job --submit --type inference NODE_URL=http://10.1.223.40:8006 ./aitbc-cli ai job submit --type inference --verbose
NODE_URL=http://localhost:8007 ./aitbc-cli ai --job --submit --type parallel NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli ai job submit --type parallel --debug
``` ```
#### **3.2 Resource Management** #### **3.2 Resource Management**
- **Objective**: Optimize resource allocation and utilization - **Objective**: Optimize resource allocation and utilization
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Resource operations # Resource operations (debug mode)
./aitbc-cli resource --status ./aitbc-cli resource status --verbose --output json
./aitbc-cli resource --allocate --type gpu --amount 50% ./aitbc-cli resource allocate --type gpu --amount 50% --yes --no-confirm
./aitbc-cli resource --monitor --interval 30 ./aitbc-cli resource monitor --interval 30 --debug
# Performance optimization # Performance optimization (non-interactive)
./aitbc-cli resource --optimize --target cpu ./aitbc-cli resource optimize --target cpu --yes --dry-run
./aitbc-cli resource --benchmark --type inference ./aitbc-cli resource benchmark --type inference --verbose
``` ```
#### **3.3 Ollama Integration** #### **3.3 Ollama Integration**
- **Objective**: Master Ollama model management and operations - **Objective**: Master Ollama model management and operations
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Ollama operations # Ollama operations (non-interactive)
./aitbc-cli ollama --models ./aitbc-cli ollama models --format table
./aitbc-cli ollama --pull --model llama2 ./aitbc-cli ollama pull --model llama2 --yes --no-confirm
./aitbc-cli ollama --run --model llama2 --prompt "Test prompt" ./aitbc-cli ollama run --model llama2 --prompt "Test prompt" --verbose
# Model management # Model management (debug mode)
./aitbc-cli ollama --status ./aitbc-cli ollama status --debug
./aitbc-cli ollama --delete --model <model_name> ./aitbc-cli ollama delete --model <model_name> --yes --force
./aitbc-cli ollama --benchmark --model <model_name> ./aitbc-cli ollama benchmark --model <model_name> --verbose
``` ```
#### **3.4 AI Service Integration** #### **3.4 AI Service Integration**
- **Objective**: Integrate with multiple AI services and APIs - **Objective**: Integrate with multiple AI services and APIs
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# AI service operations # AI service operations (debug mode)
./aitbc-cli ai --service --list ./aitbc-cli ai service list --verbose --output json
./aitbc-cli ai --service --status --name ollama ./aitbc-cli ai service status --name ollama --debug
./aitbc-cli ai --service --test --name coordinator ./aitbc-cli ai service test --name coordinator --verbose
# API integration # API integration (non-interactive)
./aitbc-cli api --test --endpoint /ai/job ./aitbc-cli api test --endpoint /ai/job --yes --no-confirm
./aitbc-cli api --monitor --endpoint /ai/status ./aitbc-cli api monitor --endpoint /ai/status --format json
``` ```
**Stage 3 Validation**: Successful AI job submission, resource optimization, Ollama integration, and AI service management on both nodes **Stage 3 Validation**: Successful AI job submission, resource optimization, Ollama integration, and AI service management on both nodes
@@ -319,60 +375,60 @@ cd /opt/aitbc/scripts/training
- **Objective**: Master marketplace participation and trading - **Objective**: Master marketplace participation and trading
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Marketplace operations # Marketplace operations (debug mode)
./aitbc-cli marketplace --list ./aitbc-cli market list --verbose --format table
./aitbc-cli marketplace --buy --item <item_id> --price <price> ./aitbc-cli market buy --item <item_id> --price <price> --yes --no-confirm
./aitbc-cli marketplace --sell --item <item_id> --price <price> ./aitbc-cli market sell --item <item_id> --price <price> --yes
# Order management # Order management (non-interactive)
./aitbc-cli marketplace --orders --status active ./aitbc-cli market orders --status active --output json
./aitbc-cli marketplace --cancel --order <order_id> ./aitbc-cli market cancel --order <order_id> --yes
# Node-specific marketplace operations # Node-specific marketplace operations
NODE_URL=http://localhost:8006 ./aitbc-cli marketplace --list NODE_URL=http://10.1.223.40:8006 ./aitbc-cli market list --verbose
NODE_URL=http://localhost:8007 ./aitbc-cli marketplace --list NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli market list --debug
``` ```
#### **4.2 Economic Intelligence** #### **4.2 Economic Intelligence**
- **Objective**: Implement economic modeling and optimization - **Objective**: Implement economic modeling and optimization
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Economic operations # Economic operations (non-interactive)
./aitbc-cli economics --model --type cost-optimization ./aitbc-cli economics model --type cost-optimization --yes --no-confirm
./aitbc-cli economics --forecast --period 7d ./aitbc-cli economics forecast --period 7d --output json
./aitbc-cli economics --optimize --target revenue ./aitbc-cli economics optimize --target revenue --dry-run
# Market analysis # Market analysis (debug mode)
./aitbc-cli economics --market --analyze ./aitbc-cli economics market analyze --verbose
./aitbc-cli economics --trends --period 30d ./aitbc-cli economics trends --period 30d --format table
``` ```
#### **4.3 Distributed AI Economics** #### **4.3 Distributed AI Economics**
- **Objective**: Cross-node economic optimization and revenue sharing - **Objective**: Cross-node economic optimization and revenue sharing
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Distributed economics # Distributed economics (debug mode)
./aitbc-cli economics --distributed --cost-optimize ./aitbc-cli economics distributed cost-optimize --verbose
./aitbc-cli economics --revenue --share --node aitbc1 ./aitbc-cli economics revenue share --node aitbc1 --yes
./aitbc-cli economics --workload --balance --nodes aitbc,aitbc1 ./aitbc-cli economics workload balance --nodes aitbc,aitbc1 --debug
# Cross-node coordination # Cross-node coordination (non-interactive)
./aitbc-cli economics --sync --nodes aitbc,aitbc1 ./aitbc-cli economics sync --nodes aitbc,aitbc1 --yes --no-confirm
./aitbc-cli economics --strategy --optimize --global ./aitbc-cli economics strategy optimize --global --dry-run
``` ```
#### **4.4 Advanced Analytics** #### **4.4 Advanced Analytics**
- **Objective**: Comprehensive analytics and reporting - **Objective**: Comprehensive analytics and reporting
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Analytics operations # Analytics operations (non-interactive)
./aitbc-cli analytics --report --type performance ./aitbc-cli analytics report --type performance --output json
./aitbc-cli analytics --metrics --period 24h ./aitbc-cli analytics metrics --period 24h --format table
./aitbc-cli analytics --export --format csv ./aitbc-cli analytics export --format csv --yes
# Predictive analytics # Predictive analytics (debug mode)
./aitbc-cli analytics --predict --model lstm --target job-completion ./aitbc-cli analytics predict --model lstm --target job-completion --verbose
./aitbc-cli analytics --optimize --parameters --target efficiency ./aitbc-cli analytics optimize parameters --target efficiency --debug
``` ```
**Stage 4 Validation**: Successful marketplace operations, economic modeling, distributed optimization, and advanced analytics **Stage 4 Validation**: Successful marketplace operations, economic modeling, distributed optimization, and advanced analytics
@@ -393,56 +449,61 @@ cd /opt/aitbc/scripts/training
- **Objective**: Automate complex workflows and operations - **Objective**: Automate complex workflows and operations
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Automation operations # Automation operations (non-interactive)
./aitbc-cli automate --workflow --name ai-job-pipeline ./aitbc-cli workflow create --name ai-job-pipeline --yes --no-confirm
./aitbc-cli automate --schedule --cron "0 */6 * * *" --command "./aitbc-cli ai --job --submit" ./aitbc-cli workflow schedule --cron "0 */6 * * *" --command "./aitbc-cli ai job submit" --yes
./aitbc-cli automate --monitor --workflow --name marketplace-bot ./aitbc-cli workflow monitor --name marketplace-bot --verbose
# Script execution # Script execution (debug mode)
./aitbc-cli script --run --file custom_script.py ./aitbc-cli script run --file custom_script.py --verbose --debug
./aitbc-cli script --schedule --file maintenance_script.sh ./aitbc-cli script schedule --file maintenance_script.sh --dry-run
``` ```
#### **5.2 Multi-Node Coordination** #### **5.2 Multi-Node Coordination**
- **Objective**: Advanced coordination across both nodes - **Objective**: Advanced coordination across both nodes using Gitea
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Multi-node operations # Multi-node operations (debug mode)
./aitbc-cli cluster --status --nodes aitbc,aitbc1 ./aitbc-cli cluster status --nodes aitbc,aitbc1 --verbose
./aitbc-cli cluster --sync --all ./aitbc-cli cluster sync --all --yes --no-confirm
./aitbc-cli cluster --balance --workload ./aitbc-cli cluster balance workload --debug
# Node-specific coordination # Node-specific coordination (non-interactive)
NODE_URL=http://localhost:8006 ./aitbc-cli cluster --coordinate --action failover NODE_URL=http://10.1.223.40:8006 ./aitbc-cli cluster coordinate --action failover --yes
NODE_URL=http://localhost:8007 ./aitbc-cli cluster --coordinate --action recovery NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli cluster coordinate --action recovery --yes
# Gitea-based sync (instead of SCP)
ssh aitbc1 'cd /opt/aitbc && git pull origin main --yes --no-confirm'
git push origin main --yes
git status --verbose
``` ```
#### **5.3 Performance Optimization** #### **5.3 Performance Optimization**
- **Objective**: System-wide performance tuning and optimization - **Objective**: System-wide performance tuning and optimization
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Performance operations # Performance operations (non-interactive)
./aitbc-cli performance --benchmark --suite comprehensive ./aitbc-cli performance benchmark --suite comprehensive --yes --no-confirm
./aitbc-cli performance --optimize --target latency ./aitbc-cli performance optimize --target latency --dry-run
./aitbc-cli performance --tune --parameters --aggressive ./aitbc-cli performance tune parameters --aggressive --yes
# Resource optimization # Resource optimization (debug mode)
./aitbc-cli performance --resource --optimize --global ./aitbc-cli performance resource optimize --global --verbose
./aitbc-cli performance --cache --optimize --strategy lru ./aitbc-cli performance cache optimize --strategy lru --debug
``` ```
#### **5.4 Security & Compliance** #### **5.4 Security & Compliance**
- **Objective**: Advanced security operations and compliance management - **Objective**: Advanced security operations and compliance management
- **CLI Commands**: - **CLI Commands**:
```bash ```bash
# Security operations # Security operations (debug mode)
./aitbc-cli security --audit --comprehensive ./aitbc-cli security audit --comprehensive --verbose --output json
./aitbc-cli security --scan --vulnerabilities ./aitbc-cli security scan --vulnerabilities --debug
./aitbc-cli security --patch --critical ./aitbc-cli security patch --critical --yes --no-confirm
# Compliance operations # Compliance operations (non-interactive)
./aitbc-cli compliance --check --standard gdpr ./aitbc-cli compliance check --standard gdpr --yes
./aitbc-cli compliance --report --format detailed ./aitbc-cli compliance report --format detailed --output json
``` ```
**Stage 5 Validation**: Successful automation implementation, multi-node coordination, performance optimization, and security management **Stage 5 Validation**: Successful automation implementation, multi-node coordination, performance optimization, and security management
@@ -499,8 +560,8 @@ Each stage must achieve:
### **Required Environment Variables** ### **Required Environment Variables**
```bash ```bash
# Node configuration # Node configuration
export NODE_URL=http://localhost:8006 # Genesis node export NODE_URL=http://10.1.223.40:8006 # Genesis node
export NODE_URL=http://localhost:8007 # Follower node export NODE_URL=http://<aitbc1-ip>:8006 # Follower node
export CLI_PATH=/opt/aitbc/aitbc-cli export CLI_PATH=/opt/aitbc/aitbc-cli
# Service endpoints # Service endpoints
@@ -515,7 +576,7 @@ export WALLET_PASSWORD=<secure_password>
### **Service Dependencies** ### **Service Dependencies**
- **AITBC CLI**: `/opt/aitbc/aitbc-cli` accessible - **AITBC CLI**: `/opt/aitbc/aitbc-cli` accessible
- **Blockchain Services**: Ports 8006 (genesis), 8007 (follower) - **Blockchain Services**: Port 8006 on both nodes (different IPs)
- **AI Services**: Ollama (11434), Coordinator (8001), Exchange (8000) - **AI Services**: Ollama (11434), Coordinator (8001), Exchange (8000)
- **Network Connectivity**: Both nodes can communicate - **Network Connectivity**: Both nodes can communicate
- **Sufficient Balance**: Test wallet with adequate AIT tokens - **Sufficient Balance**: Test wallet with adequate AIT tokens
@@ -663,14 +724,14 @@ netstat -tlnp | grep -E '800[0167]|11434'
**Solution**: **Solution**:
```bash ```bash
# Test node connectivity # Test node connectivity
curl http://localhost:8007/health curl http://<aitbc1-ip>:8006/health
curl http://localhost:8006/health curl http://10.1.223.40:8006/health
# Check network configuration # Check network configuration
cat /opt/aitbc/config/edge-node-aitbc1.yaml cat /opt/aitbc/config/edge-node-aitbc1.yaml
# Verify firewall settings # Verify firewall settings
iptables -L | grep 8007 iptables -L | grep 8006
``` ```
#### **AI Job Submission Failed** #### **AI Job Submission Failed**
@@ -759,14 +820,23 @@ bash -x /opt/aitbc/scripts/training/stage1_foundation.sh
### **Cross-Node Issues** ### **Cross-Node Issues**
#### **Node Synchronization Problems** #### **Node Synchronization Problems (Gitea-Based)**
```bash ```bash
# Force node sync # Force node sync using Gitea (NOT SCP)
/opt/aitbc/aitbc-cli cluster --sync --all cd /opt/aitbc && git pull origin main --verbose --debug
ssh aitbc1 'cd /opt/aitbc && git pull origin main --verbose'
# Check git sync status on both nodes
git status --verbose
git log --oneline -5 --decorate
ssh aitbc1 'cd /opt/aitbc && git status --verbose'
# Force sync if needed (use with caution)
ssh aitbc1 'cd /opt/aitbc && git reset --hard origin/main'
# Check node status on both nodes # Check node status on both nodes
NODE_URL=http://localhost:8006 /opt/aitbc/aitbc-cli node --info NODE_URL=http://10.1.223.40:8006 ./aitbc-cli node info --verbose
NODE_URL=http://localhost:8007 /opt/aitbc/aitbc-cli node --info NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli node info --debug
# Restart follower node if needed # Restart follower node if needed
systemctl restart aitbc-blockchain-p2p systemctl restart aitbc-blockchain-p2p
@@ -817,10 +887,10 @@ sudo rm /var/log/aitbc/training*.log
systemctl restart aitbc-* systemctl restart aitbc-*
# Verify system health # Verify system health
curl http://localhost:8006/health curl http://10.1.223.40:8006/health
curl http://localhost:8007/health curl http://<aitbc1-ip>:8006/health
curl http://localhost:8001/health curl http://10.1.223.40:8001/health
curl http://localhost:8000/health curl http://10.1.223.40:8000/health
``` ```
--- ---
@@ -835,6 +905,53 @@ curl http://localhost:8000/health
--- ---
## 🌐 **Multi-Chain and Hub/Follower Integration**
### **Multi-Chain Runtime (v2.0)**
The training plan now includes multi-chain operations:
- **Supported Chains**: `ait-testnet` (primary), `ait-devnet` (parallel)
- **Shared Database**: `/var/lib/aitbc/data/chain.db` with chain-aware partitioning
- **Chain-Aware RPC**: All RPC endpoints support `chain_id` parameter
- **Chain-Specific Mempool**: Transactions partitioned by chain ID
- **Parallel Proposer**: Separate PoA proposers per chain
### **Hub/Follower Topology (v2.0)**
Training now covers hub/follower architecture:
- **Hub (aitbc)**: Block producer, P2P listener, chain authority
- **Follower (aitbc1)**: Block consumer, P2P dialer, chain sync
- **Island Management**: Hub registration and island join operations
- **P2P Network**: Port 7070 for cross-node communication
- **Chain Sync Service**: Automated block import from hub to follower
### **Workflow Integration**
Training stages now reference comprehensive workflow documentation:
- **Stage 2**: Uses [`multi-node-blockchain-operations.md`](../workflows/multi-node-blockchain-operations.md) and [`blockchain-communication-test.md`](../workflows/blockchain-communication-test.md)
- **Stage 5**: Uses [`multi-node-blockchain-advanced.md`](../workflows/multi-node-blockchain-advanced.md) and [`multi-node-blockchain-production.md`](../workflows/multi-node-blockchain-production.md)
- **Test Phases**: Integration with [`/opt/aitbc/tests/phase1-5`](../../tests/) for comprehensive validation
### **New Training Commands**
Multi-chain operations:
```bash
# Check head on specific chain
curl -s 'http://localhost:8006/rpc/head?chain_id=ait-testnet' | jq .
curl -s 'http://localhost:8006/rpc/head?chain_id=ait-devnet' | jq .
# Query chain-specific mempool
curl -s 'http://localhost:8006/rpc/mempool?chain_id=ait-testnet&limit=10' | jq .
```
Hub/follower operations:
```bash
# Check P2P connections
ss -tnp | grep ':7070'
# Run cross-node communication test
cd /opt/aitbc
./scripts/blockchain-communication-test.sh --full
```
---
## 🔄 **Integration with Training Scripts** ## 🔄 **Integration with Training Scripts**
### **Script Availability** ### **Script Availability**

View File

@@ -5,31 +5,31 @@
### Inference Jobs ### Inference Jobs
```bash ```bash
# Basic image generation # Basic image generation
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Generate image of futuristic city" --payment 100 ./aitbc-cli ai job submit --wallet genesis-ops --type inference --prompt "Generate image of futuristic city" --payment 100
# Text analysis # Text analysis
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Analyze sentiment of this text" --payment 50 ./aitbc-cli ai job submit --wallet genesis-ops --type inference --prompt "Analyze sentiment of this text" --payment 50
# Code generation # Code generation
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Generate Python function for data processing" --payment 75 ./aitbc-cli ai job submit --wallet genesis-ops --type inference --prompt "Generate Python function for data processing" --payment 75
``` ```
### Training Jobs ### Training Jobs
```bash ```bash
# Model training # Model training
./aitbc-cli ai-submit --wallet genesis-ops --type training --model "custom-model" --dataset "training_data.json" --payment 500 ./aitbc-cli ai job submit --wallet genesis-ops --type training --model "custom-model" --dataset "training_data.json" --payment 500
# Fine-tuning # Fine-tuning
./aitbc-cli ai-submit --wallet genesis-ops --type training --model "gpt-3.5-turbo" --dataset "fine_tune_data.json" --payment 300 ./aitbc-cli ai job submit --wallet genesis-ops --type training --model "gpt-3.5-turbo" --dataset "fine_tune_data.json" --payment 300
``` ```
### Multimodal Jobs ### Multimodal Jobs
```bash ```bash
# Image analysis # Image analysis
./aitbc-cli ai-submit --wallet genesis-ops --type multimodal --prompt "Analyze this image" --image-path "/path/to/image.jpg" --payment 200 ./aitbc-cli ai job submit --wallet genesis-ops --type multimodal --prompt "Analyze this image" --image-path "/path/to/image.jpg" --payment 200
# Audio processing # Audio processing
./aitbc-cli ai-submit --wallet genesis-ops --type multimodal --prompt "Transcribe audio" --audio-path "/path/to/audio.wav" --payment 150 ./aitbc-cli ai job submit --wallet genesis-ops --type multimodal --prompt "Transcribe audio" --audio-path "/path/to/audio.wav" --payment 150
``` ```
## Resource Allocation ## Resource Allocation
@@ -60,28 +60,28 @@
### Creating AI Services ### Creating AI Services
```bash ```bash
# Image generation service # Image generation service
./aitbc-cli marketplace --action create --name "AI Image Generation" --type ai-inference --price 50 --wallet genesis-ops --description "Generate high-quality images from text prompts" ./aitbc-cli market service create --name "AI Image Generation" --type ai-inference --price 50 --wallet genesis-ops --description "Generate high-quality images from text prompts"
# Model training service # Model training service
./aitbc-cli marketplace --action create --name "Custom Model Training" --type ai-training --price 200 --wallet genesis-ops --description "Train custom models on your data" ./aitbc-cli market service create --name "Custom Model Training" --type ai-training --price 200 --wallet genesis-ops --description "Train custom models on your data"
# Data analysis service # Data analysis service
./aitbc-cli marketplace --action create --name "AI Data Analysis" --type ai-processing --price 75 --wallet genesis-ops --description "Analyze and process datasets with AI" ./aitbc-cli market service create --name "AI Data Analysis" --type ai-processing --price 75 --wallet genesis-ops --description "Analyze and process datasets with AI"
``` ```
### Marketplace Interaction ### Marketplace Interaction
```bash ```bash
# List available services # List available services
./aitbc-cli marketplace --action list ./aitbc-cli market service list
# Search for specific services # Search for specific services
./aitbc-cli marketplace --action search --query "image generation" ./aitbc-cli market service search --query "image generation"
# Bid on service # Bid on service
./aitbc-cli marketplace --action bid --service-id "service_123" --amount 60 --wallet genesis-ops ./aitbc-cli market order bid --service-id "service_123" --amount 60 --wallet genesis-ops
# Execute purchased service # Execute purchased service
./aitbc-cli marketplace --action execute --service-id "service_123" --job-data "prompt:Generate landscape image" ./aitbc-cli market order execute --service-id "service_123" --job-data "prompt:Generate landscape image"
``` ```
## Agent AI Workflows ## Agent AI Workflows
@@ -115,10 +115,10 @@
### Multi-Node Job Submission ### Multi-Node Job Submission
```bash ```bash
# Submit to specific node # Submit to specific node
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Generate image" --target-node "aitbc1" --payment 100 ./aitbc-cli ai job submit --wallet genesis-ops --type inference --prompt "Generate image" --target-node "aitbc1" --payment 100
# Distribute training across nodes # Distribute training across nodes
./aitbc-cli ai-submit --wallet genesis-ops --type training --model "distributed-model" --nodes "aitbc,aitbc1" --payment 500 ./aitbc-cli ai job submit --wallet genesis-ops --type training --model "distributed-model" --nodes "aitbc,aitbc1" --payment 500
``` ```
### Cross-Node Resource Management ### Cross-Node Resource Management
@@ -127,7 +127,7 @@
ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource allocate --agent-id ai-agent --gpu 1 --memory 8192 --duration 3600' ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource allocate --agent-id ai-agent --gpu 1 --memory 8192 --duration 3600'
# Monitor multi-node AI status # Monitor multi-node AI status
./aitbc-cli ai-status --multi-node ./aitbc-cli ai job status --multi-node
``` ```
## AI Economics and Pricing ## AI Economics and Pricing
@@ -135,19 +135,19 @@ ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource al
### Job Cost Estimation ### Job Cost Estimation
```bash ```bash
# Estimate inference job cost # Estimate inference job cost
./aitbc-cli ai-estimate --type inference --prompt-length 100 --resolution 512 ./aitbc-cli ai estimate --type inference --prompt-length 100 --resolution 512
# Estimate training job cost # Estimate training job cost
./aitbc-cli ai-estimate --type training --model-size "1B" --dataset-size "1GB" --epochs 10 ./aitbc-cli ai estimate --type training --model-size "1B" --dataset-size "1GB" --epochs 10
``` ```
### Payment and Earnings ### Payment and Earnings
```bash ```bash
# Pay for AI job # Pay for AI job
./aitbc-cli ai-pay --job-id "job_123" --wallet genesis-ops --amount 100 ./aitbc-cli ai payment pay --job-id "job_123" --wallet genesis-ops --amount 100
# Check AI earnings # Check AI earnings
./aitbc-cli ai-earnings --wallet genesis-ops --period "7d" ./aitbc-cli ai payment earnings --wallet genesis-ops --period "7d"
``` ```
## AI Monitoring and Analytics ## AI Monitoring and Analytics
@@ -155,25 +155,25 @@ ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource al
### Job Monitoring ### Job Monitoring
```bash ```bash
# Monitor specific job # Monitor specific job
./aitbc-cli ai-status --job-id "job_123" ./aitbc-cli ai job status --job-id "job_123"
# Monitor all jobs # Monitor all jobs
./aitbc-cli ai-status --all ./aitbc-cli ai job status --all
# Job history # Job history
./aitbc-cli ai-history --wallet genesis-ops --limit 10 ./aitbc-cli ai job history --wallet genesis-ops --limit 10
``` ```
### Performance Metrics ### Performance Metrics
```bash ```bash
# AI performance metrics # AI performance metrics
./aitbc-cli ai-metrics --agent-id "ai-inference-worker" --period "1h" ./aitbc-cli ai metrics --agent-id "ai-inference-worker" --period "1h"
# Resource utilization # Resource utilization
./aitbc-cli resource utilization --type gpu --period "1h" ./aitbc-cli resource utilization --type gpu --period "1h"
# Job throughput # Job throughput
./aitbc-cli ai-throughput --nodes "aitbc,aitbc1" --period "24h" ./aitbc-cli ai metrics throughput --nodes "aitbc,aitbc1" --period "24h"
``` ```
## AI Security and Compliance ## AI Security and Compliance
@@ -181,13 +181,13 @@ ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource al
### Secure AI Operations ### Secure AI Operations
```bash ```bash
# Secure job submission # Secure job submission
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Generate image" --payment 100 --encrypt ./aitbc-cli ai job submit --wallet genesis-ops --type inference --prompt "Generate image" --payment 100 --encrypt
# Verify job integrity # Verify job integrity
./aitbc-cli ai-verify --job-id "job_123" ./aitbc-cli ai job verify --job-id "job_123"
# AI job audit # AI job audit
./aitbc-cli ai-audit --job-id "job_123" ./aitbc-cli ai job audit --job-id "job_123"
``` ```
### Compliance Features ### Compliance Features
@@ -207,13 +207,13 @@ ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli resource al
### Debug Commands ### Debug Commands
```bash ```bash
# Check AI service status # Check AI service status
./aitbc-cli ai-service status ./aitbc-cli ai service status
# Debug resource allocation # Debug resource allocation
./aitbc-cli resource debug --agent-id "ai-agent" ./aitbc-cli resource debug --agent-id "ai-agent"
# Check wallet balance # Check wallet balance
./aitbc-cli balance --name genesis-ops ./aitbc-cli wallet balance --name genesis-ops
# Verify network connectivity # Verify network connectivity
ping aitbc1 ping aitbc1

View File

@@ -0,0 +1,136 @@
---
description: Atomic AITBC blockchain analytics and performance metrics with deterministic outputs
title: aitbc-analytics-analyzer
version: 1.0
---
# AITBC Analytics Analyzer
## Purpose
Analyze blockchain performance metrics, generate analytics reports, and provide insights on blockchain health and efficiency.
## Activation
Trigger when user requests analytics: performance metrics, blockchain health reports, transaction analysis, or system diagnostics.
## Input
```json
{
"operation": "metrics|health|transactions|diagnostics",
"time_range": "1h|24h|7d|30d (optional, default: 24h)",
"node": "genesis|follower|all (optional, default: all)",
"metric_type": "throughput|latency|block_time|mempool|all (optional)"
}
```
## Output
```json
{
"summary": "Analytics analysis completed successfully",
"operation": "metrics|health|transactions|diagnostics",
"time_range": "string",
"node": "genesis|follower|all",
"metrics": {
"block_height": "number",
"block_time_avg": "number",
"tx_throughput": "number",
"mempool_size": "number",
"p2p_connections": "number"
},
"health_status": "healthy|degraded|critical",
"issues": [],
"recommendations": [],
"confidence": 1.0,
"execution_time": "number",
"validation_status": "success|partial|failed"
}
```
## Process
### 1. Analyze
- Validate time range parameters
- Check node accessibility
- Verify log file availability
- Assess analytics requirements
### 2. Plan
- Select appropriate data sources
- Define metric collection strategy
- Prepare analysis parameters
- Set aggregation methods
### 3. Execute
- Query blockchain logs for metrics
- Calculate performance statistics
- Analyze transaction patterns
- Generate health assessment
### 4. Validate
- Verify metric accuracy
- Validate health status calculation
- Check data completeness
- Confirm analysis consistency
## Constraints
- **MUST NOT** access private keys or sensitive data
- **MUST NOT** exceed 45 seconds execution time
- **MUST** validate time range parameters
- **MUST** handle missing log data gracefully
- **MUST** aggregate metrics correctly across nodes
## Environment Assumptions
- Blockchain logs available at `/var/log/aitbc/`
- CLI accessible at `/opt/aitbc/aitbc-cli`
- Log rotation configured for historical data
- P2P network status queryable
- Mempool accessible via CLI
## Error Handling
- Missing log files → Return partial metrics with warning
- Log parsing errors → Return error with affected time range
- Node offline → Exclude from aggregate metrics
- Timeout during analysis → Return partial results
## Example Usage Prompt
```
Generate blockchain performance metrics for the last 24 hours on all nodes
```
## Expected Output Example
```json
{
"summary": "Blockchain analytics analysis completed for 24h period",
"operation": "metrics",
"time_range": "24h",
"node": "all",
"metrics": {
"block_height": 15234,
"block_time_avg": 30.2,
"tx_throughput": 15.3,
"mempool_size": 15,
"p2p_connections": 2
},
"health_status": "healthy",
"issues": [],
"recommendations": ["Block time within optimal range", "P2P connectivity stable"],
"confidence": 1.0,
"execution_time": 12.5,
"validation_status": "success"
}
```
## Model Routing Suggestion
**Reasoning Model** (Claude Sonnet, GPT-4)
- Complex metric calculations and aggregations
- Health status assessment
- Performance trend analysis
- Diagnostic reasoning
**Performance Notes**
- **Execution Time**: 5-20 seconds for metrics, 10-30 seconds for diagnostics
- **Memory Usage**: <150MB for analytics operations
- **Network Requirements**: Local log access, CLI queries
- **Concurrency**: Safe for multiple concurrent analytics queries

View File

@@ -0,0 +1,267 @@
---
description: Atomic AITBC cross-node coordination and messaging operations with deterministic outputs
title: aitbc-node-coordinator
version: 1.0
---
# AITBC Node Coordinator
## Purpose
Coordinate cross-node operations, synchronize blockchain state, and manage inter-node messaging between genesis and follower nodes.
## Activation
Trigger when user requests cross-node operations: synchronization, coordination, messaging, or multi-node status checks.
## Input
```json
{
"operation": "sync|status|message|coordinate|health",
"target_node": "genesis|follower|all",
"message": "string (optional for message operation)",
"sync_type": "blockchain|mempool|configuration|git|all (optional for sync)",
"timeout": "number (optional, default: 60)",
"force": "boolean (optional, default: false)",
"verify": "boolean (optional, default: true)"
}
```
## Output
```json
{
"summary": "Cross-node operation completed successfully",
"operation": "sync|status|message|coordinate|health",
"target_node": "genesis|follower|all",
"nodes_status": {
"genesis": {
"status": "online|offline|degraded",
"block_height": "number",
"mempool_size": "number",
"p2p_connections": "number",
"service_uptime": "string",
"last_sync": "timestamp"
},
"follower": {
"status": "online|offline|degraded",
"block_height": "number",
"mempool_size": "number",
"p2p_connections": "number",
"service_uptime": "string",
"last_sync": "timestamp"
}
},
"sync_result": "success|partial|failed",
"sync_details": {
"blockchain_synced": "boolean",
"mempool_synced": "boolean",
"configuration_synced": "boolean",
"git_synced": "boolean"
},
"message_delivery": {
"sent": "number",
"delivered": "number",
"failed": "number"
},
"issues": [],
"recommendations": [],
"confidence": 1.0,
"execution_time": "number",
"validation_status": "success|partial|failed"
}
```
## Process
### 1. Analyze
- Validate target node connectivity using `ping` and SSH test
- Check SSH access to remote nodes with `ssh aitbc1 "echo test"`
- Verify blockchain service status with `systemctl status aitbc-blockchain-node`
- Assess synchronization requirements based on sync_type parameter
- Check P2P mesh network status with `netstat -an | grep 7070`
- Validate git synchronization status with `git status`
### 2. Plan
- Select appropriate coordination strategy based on operation type
- Prepare sync/messaging parameters for execution
- Define validation criteria for operation success
- Set fallback mechanisms for partial failures
- Calculate timeout based on operation complexity
- Determine if force flag is required for conflicting operations
### 3. Execute
- **For sync operations:**
- Execute `git pull` on both nodes for git sync
- Use CLI commands for blockchain state sync
- Restart services if force flag is set
- **For status operations:**
- Execute `ssh aitbc1 "systemctl status aitbc-blockchain-node"`
- Check blockchain height with CLI: `./aitbc-cli chain block latest`
- Query mempool status with CLI: `./aitbc-cli mempool status`
- **For message operations:**
- Use P2P mesh network for message delivery
- Track message delivery status
- **For coordinate operations:**
- Execute coordinated actions across nodes
- Monitor execution progress
- **For health operations:**
- Run comprehensive health checks
- Collect service metrics
### 4. Validate
- Verify node connectivity with ping and SSH
- Check synchronization completeness by comparing block heights
- Validate blockchain state consistency across nodes
- Confirm messaging delivery with delivery receipts
- Verify git synchronization with `git log --oneline -1`
- Check service status after operations
- Validate no service degradation occurred
## Constraints
- **MUST NOT** restart blockchain services without explicit request or force flag
- **MUST NOT** modify node configurations without explicit approval
- **MUST NOT** exceed 60 seconds execution time for sync operations
- **MUST NOT** execute more than 5 parallel cross-node operations simultaneously
- **MUST** validate SSH connectivity before remote operations
- **MUST** handle partial failures gracefully with fallback mechanisms
- **MUST** preserve service state during coordination operations
- **MUST** verify git synchronization before force operations
- **MUST** check service health before critical operations
- **MUST** respect timeout limits (default 60s, max 120s for complex ops)
- **MUST** validate target node existence before operations
- **MUST** return detailed error information for all failures
## Environment Assumptions
- SSH access configured between genesis (aitbc) and follower (aitbc1) with key-based authentication
- SSH keys located at `/root/.ssh/` for passwordless access
- Blockchain nodes operational on both nodes via systemd services
- P2P mesh network active on port 7070 with peer configuration
- Git synchronization configured between nodes at `/opt/aitbc/.git`
- CLI accessible on both nodes at `/opt/aitbc/aitbc-cli`
- Python venv activated at `/opt/aitbc/venv/bin/python` for CLI operations
- Systemd services: `aitbc-blockchain-node.service` on both nodes
- Node addresses: genesis (localhost/aitbc), follower (aitbc1)
- Git remote: `origin` at `http://gitea.bubuit.net:3000/oib/aitbc.git`
- Log directory: `/var/log/aitbc/` for service logs
- Data directory: `/var/lib/aitbc/` for blockchain data
## Error Handling
- SSH connectivity failures → Return connection error with affected node, attempt fallback node
- SSH authentication failures → Return authentication error, check SSH key permissions
- Blockchain service offline → Mark node as offline in status, attempt service restart if force flag set
- Sync failures → Return partial sync with details, identify which sync type failed
- Timeout during operations → Return timeout error with operation details, suggest increasing timeout
- Git synchronization conflicts → Return conflict error, suggest manual resolution
- P2P network disconnection → Return network error, check mesh network status
- Service restart failures → Return service error, check systemd logs
- Node unreachable → Return unreachable error, verify network connectivity
- Invalid target node → Return validation error, suggest valid node names
- Permission denied → Return permission error, check user privileges
- CLI command failures → Return command error with stderr output
- Partial operation success → Return partial success with completed and failed components
## Example Usage Prompt
```
Sync blockchain state between genesis and follower nodes
```
```
Check status of all nodes in the network
```
```
Sync git repository across all nodes with force flag
```
```
Perform health check on follower node
```
```
Coordinate blockchain service restart on genesis node
```
## Expected Output Example
```json
{
"summary": "Blockchain state synchronized between genesis and follower nodes",
"operation": "sync",
"target_node": "all",
"nodes_status": {
"genesis": {
"status": "online",
"block_height": 15234,
"mempool_size": 15,
"p2p_connections": 2,
"service_uptime": "5d 12h 34m",
"last_sync": 1775811500
},
"follower": {
"status": "online",
"block_height": 15234,
"mempool_size": 15,
"p2p_connections": 2,
"service_uptime": "5d 12h 31m",
"last_sync": 1775811498
}
},
"sync_result": "success",
"sync_details": {
"blockchain_synced": true,
"mempool_synced": true,
"configuration_synced": true,
"git_synced": true
},
"message_delivery": {
"sent": 0,
"delivered": 0,
"failed": 0
},
"issues": [],
"recommendations": ["Nodes are fully synchronized, P2P mesh operating normally"],
"confidence": 1.0,
"execution_time": 8.5,
"validation_status": "success"
}
```
## Model Routing Suggestion
**Fast Model** (Claude Haiku, GPT-3.5-turbo)
- Simple status checks on individual nodes
- Basic connectivity verification
- Quick health checks
- Single-node operations
**Reasoning Model** (Claude Sonnet, GPT-4)
- Cross-node synchronization operations
- Status validation and error diagnosis
- Coordination strategy selection
- Multi-node state analysis
- Complex error recovery
- Force operations with validation
**Performance Notes**
- **Execution Time**:
- Sync operations: 5-30 seconds (blockchain), 2-15 seconds (git), 3-20 seconds (mempool)
- Status checks: 2-10 seconds per node
- Health checks: 5-15 seconds per node
- Coordinate operations: 10-45 seconds depending on complexity
- Message operations: 1-5 seconds per message
- **Memory Usage**:
- Status checks: <50MB
- Sync operations: <100MB
- Complex coordination: <150MB
- **Network Requirements**:
- SSH connectivity (port 22)
- P2P mesh network (port 7070)
- Git remote access (HTTP/SSH)
- **Concurrency**:
- Safe for sequential operations on different nodes
- Max 5 parallel operations across nodes
- Coordinate parallel ops carefully to avoid service overload
- **Optimization Tips**:
- Use status checks before sync operations to validate node health
- Batch multiple sync operations when possible
- Use verify=false for non-critical operations to speed up execution
- Cache node status for repeated checks within 30-second window

View File

@@ -0,0 +1,357 @@
---
description: Autonomous AI skill for blockchain troubleshooting and recovery across multi-node AITBC setup
title: Blockchain Troubleshoot & Recovery
version: 1.0
---
# Blockchain Troubleshoot & Recovery Skill
## Purpose
Autonomous AI skill for diagnosing and resolving blockchain communication issues between aitbc (genesis) and aitbc1 (follower) nodes running on port 8006 across different physical machines.
## Activation
Activate this skill when:
- Blockchain communication tests fail
- Nodes become unreachable
- Block synchronization lags (>10 blocks)
- Transaction propagation times exceed thresholds
- Git synchronization fails
- Network latency issues detected
- Service health checks fail
## Input Schema
```json
{
"issue_type": {
"type": "string",
"enum": ["connectivity", "sync_lag", "transaction_timeout", "service_failure", "git_sync_failure", "network_latency", "unknown"],
"description": "Type of blockchain communication issue"
},
"affected_nodes": {
"type": "array",
"items": {"type": "string", "enum": ["aitbc", "aitbc1", "both"]},
"description": "Nodes affected by the issue"
},
"severity": {
"type": "string",
"enum": ["low", "medium", "high", "critical"],
"description": "Severity level of the issue"
},
"diagnostic_data": {
"type": "object",
"properties": {
"error_logs": {"type": "string"},
"test_results": {"type": "object"},
"metrics": {"type": "object"}
},
"description": "Diagnostic data from failed tests"
},
"auto_recovery": {
"type": "boolean",
"default": true,
"description": "Enable autonomous recovery actions"
},
"recovery_timeout": {
"type": "integer",
"default": 300,
"description": "Maximum time (seconds) for recovery attempts"
}
}
```
## Output Schema
```json
{
"diagnosis": {
"root_cause": {"type": "string"},
"affected_components": {"type": "array", "items": {"type": "string"}},
"confidence": {"type": "number", "minimum": 0, "maximum": 1}
},
"recovery_actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {"type": "string"},
"command": {"type": "string"},
"target_node": {"type": "string"},
"status": {"type": "string", "enum": ["pending", "in_progress", "completed", "failed"]},
"result": {"type": "string"}
}
}
},
"recovery_status": {
"type": "string",
"enum": ["successful", "partial", "failed", "manual_intervention_required"]
},
"post_recovery_validation": {
"tests_passed": {"type": "integer"},
"tests_failed": {"type": "integer"},
"metrics_restored": {"type": "boolean"}
},
"recommendations": {
"type": "array",
"items": {"type": "string"}
},
"escalation_required": {
"type": "boolean"
}
}
```
## Process
### 1. Diagnose Issue
```bash
# Collect diagnostic information
tail -100 /var/log/aitbc/blockchain-communication-test.log > /tmp/diagnostic_logs.txt
tail -50 /var/log/aitbc/blockchain-test-errors.txt >> /tmp/diagnostic_logs.txt
# Check service status
systemctl status aitbc-blockchain-rpc --no-pager >> /tmp/diagnostic_logs.txt
ssh aitbc1 'systemctl status aitbc-blockchain-rpc --no-pager' >> /tmp/diagnostic_logs.txt
# Check network connectivity
ping -c 5 10.1.223.40 >> /tmp/diagnostic_logs.txt
ping -c 5 <aitbc1-ip> >> /tmp/diagnostic_logs.txt
# Check port accessibility
netstat -tlnp | grep 8006 >> /tmp/diagnostic_logs.txt
# Check blockchain status
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain info --verbose >> /tmp/diagnostic_logs.txt
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain info --verbose >> /tmp/diagnostic_logs.txt
```
### 2. Analyze Root Cause
Based on diagnostic data, identify:
- Network connectivity issues (firewall, routing)
- Service failures (crashes, hangs)
- Synchronization problems (git, blockchain)
- Resource exhaustion (CPU, memory, disk)
- Configuration errors
### 3. Execute Recovery Actions
#### Connectivity Recovery
```bash
# Restart network services
systemctl restart aitbc-blockchain-p2p
ssh aitbc1 'systemctl restart aitbc-blockchain-p2p'
# Check and fix firewall rules
iptables -L -n | grep 8006
if [ $? -ne 0 ]; then
iptables -A INPUT -p tcp --dport 8006 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 8006 -j ACCEPT
fi
# Test connectivity
curl -f -s http://10.1.223.40:8006/health
curl -f -s http://<aitbc1-ip>:8006/health
```
#### Service Recovery
```bash
# Restart blockchain services
systemctl restart aitbc-blockchain-rpc
ssh aitbc1 'systemctl restart aitbc-blockchain-rpc'
# Restart coordinator if needed
systemctl restart aitbc-coordinator
ssh aitbc1 'systemctl restart aitbc-coordinator'
# Check service logs
journalctl -u aitbc-blockchain-rpc -n 50 --no-pager
```
#### Synchronization Recovery
```bash
# Force blockchain sync
./aitbc-cli cluster sync --all --yes
# Git sync recovery
cd /opt/aitbc
git fetch origin main
git reset --hard origin/main
ssh aitbc1 'cd /opt/aitbc && git fetch origin main && git reset --hard origin/main'
# Verify sync
git log --oneline -5
ssh aitbc1 'cd /opt/aitbc && git log --oneline -5'
```
#### Resource Recovery
```bash
# Clear system caches
sync && echo 3 > /proc/sys/vm/drop_caches
# Restart if resource exhausted
systemctl restart aitbc-*
ssh aitbc1 'systemctl restart aitbc-*'
```
### 4. Validate Recovery
```bash
# Run full communication test
./scripts/blockchain-communication-test.sh --full --debug
# Verify all services are healthy
curl http://10.1.223.40:8006/health
curl http://<aitbc1-ip>:8006/health
curl http://10.1.223.40:8001/health
curl http://10.1.223.40:8000/health
# Check blockchain sync
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain height
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain height
```
### 5. Report and Escalate
- Document recovery actions taken
- Provide metrics before/after recovery
- Recommend preventive measures
- Escalate if recovery fails or manual intervention needed
## Constraints
- Maximum recovery attempts: 3 per issue type
- Recovery timeout: 300 seconds per action
- Cannot restart services during peak hours (9AM-5PM local time) without confirmation
- Must preserve blockchain data integrity
- Cannot modify wallet keys or cryptographic material
- Must log all recovery actions
- Escalate to human if recovery fails after 3 attempts
## Environment Assumptions
- Genesis node IP: 10.1.223.40
- Follower node IP: <aitbc1-ip> (replace with actual IP)
- Both nodes use port 8006 for blockchain RPC
- SSH access to aitbc1 configured and working
- AITBC CLI accessible at /opt/aitbc/aitbc-cli
- Git repository: http://gitea.bubuit.net:3000/oib/aitbc.git
- Log directory: /var/log/aitbc/
- Test script: /opt/aitbc/scripts/blockchain-communication-test.sh
- Systemd services: aitbc-blockchain-rpc, aitbc-coordinator, aitbc-blockchain-p2p
## Error Handling
### Recovery Action Failure
- Log specific failure reason
- Attempt alternative recovery method
- Increment failure counter
- Escalate after 3 failures
### Service Restart Failure
- Check service logs for errors
- Verify configuration files
- Check system resources
- Escalate if service cannot be restarted
### Network Unreachable
- Check physical network connectivity
- Verify firewall rules
- Check routing tables
- Escalate if network issue persists
### Data Integrity Concerns
- Stop all recovery actions
- Preserve current state
- Escalate immediately for manual review
- Do not attempt automated recovery
### Timeout Exceeded
- Stop current recovery action
- Log timeout event
- Attempt next recovery method
- Escalate if all methods timeout
## Example Usage Prompts
### Basic Troubleshooting
"Blockchain communication test failed on aitbc1 node. Diagnose and recover."
### Specific Issue Type
"Block synchronization lag detected (>15 blocks). Perform autonomous recovery."
### Service Failure
"aitbc-blockchain-rpc service crashed on genesis node. Restart and validate."
### Network Issue
"Cannot reach aitbc1 node on port 8006. Troubleshoot network connectivity."
### Full Recovery
"Complete blockchain communication test failed with multiple issues. Perform full autonomous recovery."
### Escalation Scenario
"Recovery actions failed after 3 attempts. Prepare escalation report with diagnostic data."
## Expected Output Example
```json
{
"diagnosis": {
"root_cause": "Network firewall blocking port 8006 on follower node",
"affected_components": ["network", "firewall", "aitbc1"],
"confidence": 0.95
},
"recovery_actions": [
{
"action": "Check firewall rules",
"command": "iptables -L -n | grep 8006",
"target_node": "aitbc1",
"status": "completed",
"result": "Port 8006 not in allowed rules"
},
{
"action": "Add firewall rule",
"command": "iptables -A INPUT -p tcp --dport 8006 -j ACCEPT",
"target_node": "aitbc1",
"status": "completed",
"result": "Rule added successfully"
},
{
"action": "Test connectivity",
"command": "curl -f -s http://<aitbc1-ip>:8006/health",
"target_node": "aitbc1",
"status": "completed",
"result": "Node reachable"
}
],
"recovery_status": "successful",
"post_recovery_validation": {
"tests_passed": 5,
"tests_failed": 0,
"metrics_restored": true
},
"recommendations": [
"Add persistent firewall rules to /etc/iptables/rules.v4",
"Monitor firewall changes for future prevention",
"Consider implementing network monitoring alerts"
],
"escalation_required": false
}
```
## Model Routing
- **Fast Model**: Use for simple, routine recoveries (service restarts, basic connectivity)
- **Reasoning Model**: Use for complex diagnostics, root cause analysis, multi-step recovery
- **Reasoning Model**: Use when recovery fails and escalation planning is needed
## Performance Notes
- **Diagnosis Time**: 10-30 seconds depending on issue complexity
- **Recovery Time**: 30-120 seconds per recovery action
- **Validation Time**: 60-180 seconds for full test suite
- **Memory Usage**: <500MB during recovery operations
- **Network Impact**: Minimal during diagnostics, moderate during git sync
- **Concurrency**: Can handle single issue recovery; multiple issues should be queued
- **Optimization**: Cache diagnostic data to avoid repeated collection
- **Rate Limiting**: Limit service restarts to prevent thrashing
- **Logging**: All actions logged with timestamps for audit trail
## Related Skills
- [aitbc-node-coordinator](/aitbc-node-coordinator.md) - For cross-node coordination during recovery
- [openclaw-error-handler](/openclaw-error-handler.md) - For error handling and escalation
- [openclaw-coordination-orchestrator](/openclaw-coordination-orchestrator.md) - For multi-node recovery coordination
## Related Workflows
- [Blockchain Communication Test](/workflows/blockchain-communication-test.md) - Testing workflow that triggers this skill
- [Multi-Node Operations](/workflows/multi-node-blockchain-operations.md) - General node operations

View File

@@ -0,0 +1,134 @@
---
description: Atomic OpenClaw multi-agent workflow coordination with deterministic outputs
title: openclaw-coordination-orchestrator
version: 1.0
---
# OpenClaw Coordination Orchestrator
## Purpose
Coordinate multi-agent workflows, manage agent task distribution, and orchestrate complex operations across multiple OpenClaw agents.
## Activation
Trigger when user requests multi-agent coordination: task distribution, workflow orchestration, agent collaboration, or parallel execution management.
## Input
```json
{
"operation": "distribute|orchestrate|collaborate|monitor",
"agents": ["agent1", "agent2", "..."],
"task_type": "analysis|execution|validation|testing",
"workflow": "string (optional for orchestrate)",
"parallel": "boolean (optional, default: true)"
}
```
## Output
```json
{
"summary": "Multi-agent coordination completed successfully",
"operation": "distribute|orchestrate|collaborate|monitor",
"agents_assigned": ["agent1", "agent2", "..."],
"task_distribution": {
"agent1": "task_description",
"agent2": "task_description"
},
"workflow_status": "active|completed|failed",
"collaboration_results": {},
"issues": [],
"recommendations": [],
"confidence": 1.0,
"execution_time": "number",
"validation_status": "success|partial|failed"
}
```
## Process
### 1. Analyze
- Validate agent availability
- Check agent connectivity
- Assess task complexity
- Determine optimal distribution strategy
### 2. Plan
- Select coordination approach
- Define task allocation
- Set execution order
- Plan fallback mechanisms
### 3. Execute
- Distribute tasks to agents
- Monitor agent progress
- Coordinate inter-agent communication
- Aggregate results
### 4. Validate
- Verify task completion
- Check result consistency
- Validate workflow integrity
- Confirm agent satisfaction
## Constraints
- **MUST NOT** modify agent configurations without approval
- **MUST NOT** exceed 120 seconds for complex workflows
- **MUST** validate agent availability before distribution
- **MUST** handle agent failures gracefully
- **MUST** respect agent capacity limits
## Environment Assumptions
- OpenClaw agents operational and accessible
- Agent communication channels available
- Task queue system functional
- Agent status monitoring active
- Collaboration protocol established
## Error Handling
- Agent offline → Reassign task to available agent
- Task timeout → Retry with different agent
- Communication failure → Use fallback coordination
- Agent capacity exceeded → Queue task for later execution
## Example Usage Prompt
```
Orchestrate parallel analysis workflow across main and trading agents
```
## Expected Output Example
```json
{
"summary": "Multi-agent workflow orchestrated successfully across 2 agents",
"operation": "orchestrate",
"agents_assigned": ["main", "trading"],
"task_distribution": {
"main": "Analyze blockchain state and transaction patterns",
"trading": "Analyze marketplace pricing and order flow"
},
"workflow_status": "completed",
"collaboration_results": {
"main": {"status": "completed", "result": "analysis_complete"},
"trading": {"status": "completed", "result": "analysis_complete"}
},
"issues": [],
"recommendations": ["Consider adding GPU agent for compute-intensive analysis"],
"confidence": 1.0,
"execution_time": 45.2,
"validation_status": "success"
}
```
## Model Routing Suggestion
**Reasoning Model** (Claude Sonnet, GPT-4)
- Complex workflow orchestration
- Task distribution strategy
- Agent capacity planning
- Collaboration protocol management
**Performance Notes**
- **Execution Time**: 10-60 seconds for distribution, 30-120 seconds for complex workflows
- **Memory Usage**: <200MB for coordination operations
- **Network Requirements**: Agent communication channels
- **Concurrency**: Safe for multiple parallel workflows

View File

@@ -0,0 +1,151 @@
---
description: Atomic OpenClaw error detection and recovery procedures with deterministic outputs
title: openclaw-error-handler
version: 1.0
---
# OpenClaw Error Handler
## Purpose
Detect, diagnose, and recover from errors in OpenClaw agent operations with systematic error handling and recovery procedures.
## Activation
Trigger when user requests error handling: error diagnosis, recovery procedures, error analysis, or system health checks.
## Input
```json
{
"operation": "detect|diagnose|recover|analyze",
"agent": "agent_name",
"error_type": "execution|communication|configuration|timeout|unknown",
"error_context": "string (optional)",
"recovery_strategy": "auto|manual|rollback|retry"
}
```
## Output
```json
{
"summary": "Error handling operation completed successfully",
"operation": "detect|diagnose|recover|analyze",
"agent": "agent_name",
"error_detected": {
"type": "string",
"severity": "critical|high|medium|low",
"timestamp": "number",
"context": "string"
},
"diagnosis": {
"root_cause": "string",
"affected_components": ["component1", "component2"],
"impact_assessment": "string"
},
"recovery_applied": {
"strategy": "string",
"actions_taken": ["action1", "action2"],
"success": "boolean"
},
"issues": [],
"recommendations": [],
"confidence": 1.0,
"execution_time": "number",
"validation_status": "success|partial|failed"
}
```
## Process
### 1. Analyze
- Scan agent logs for errors
- Identify error patterns
- Assess error severity
- Determine error scope
### 2. Diagnose
- Analyze root cause
- Trace error propagation
- Identify affected components
- Assess impact
### 3. Execute Recovery
- Select recovery strategy
- Apply recovery actions
- Monitor recovery progress
- Validate recovery success
### 4. Validate
- Verify error resolution
- Check system stability
- Validate agent functionality
- Confirm no side effects
## Constraints
- **MUST NOT** modify critical system files
- **MUST NOT** exceed 60 seconds for error diagnosis
- **MUST** preserve error logs for analysis
- **MUST** validate recovery before applying
- **MUST** rollback on recovery failure
## Environment Assumptions
- Agent logs accessible at `/var/log/aitbc/`
- Error tracking system functional
- Recovery procedures documented
- Agent state persistence available
- System monitoring active
## Error Handling
- Recovery failure → Attempt alternative recovery strategy
- Multiple errors → Prioritize by severity
- Unknown error type → Apply generic recovery procedure
- System instability → Emergency rollback
## Example Usage Prompt
```
Diagnose and recover from execution errors in main agent
```
## Expected Output Example
```json
{
"summary": "Error diagnosed and recovered successfully in main agent",
"operation": "recover",
"agent": "main",
"error_detected": {
"type": "execution",
"severity": "high",
"timestamp": 1775811500,
"context": "Transaction processing timeout during blockchain sync"
},
"diagnosis": {
"root_cause": "Network latency causing P2P sync timeout",
"affected_components": ["p2p_network", "transaction_processor"],
"impact_assessment": "Delayed transaction processing, no data loss"
},
"recovery_applied": {
"strategy": "retry",
"actions_taken": ["Increased timeout threshold", "Retried transaction processing"],
"success": true
},
"issues": [],
"recommendations": ["Monitor network latency for future occurrences", "Consider implementing adaptive timeout"],
"confidence": 1.0,
"execution_time": 18.3,
"validation_status": "success"
}
```
## Model Routing Suggestion
**Reasoning Model** (Claude Sonnet, GPT-4)
- Complex error diagnosis
- Root cause analysis
- Recovery strategy selection
- Impact assessment
**Performance Notes**
- **Execution Time**: 5-30 seconds for detection, 15-45 seconds for diagnosis, 10-60 seconds for recovery
- **Memory Usage**: <150MB for error handling operations
- **Network Requirements**: Agent communication for error context
- **Concurrency**: Safe for sequential error handling on different agents

View File

@@ -0,0 +1,160 @@
---
description: Atomic OpenClaw agent performance tuning and optimization with deterministic outputs
title: openclaw-performance-optimizer
version: 1.0
---
# OpenClaw Performance Optimizer
## Purpose
Optimize agent performance, tune execution parameters, and improve efficiency for OpenClaw agents through systematic analysis and adjustment.
## Activation
Trigger when user requests performance optimization: agent tuning, parameter adjustment, efficiency improvements, or performance benchmarking.
## Input
```json
{
"operation": "tune|benchmark|optimize|profile",
"agent": "agent_name",
"target": "speed|memory|throughput|latency|all",
"parameters": {
"max_tokens": "number (optional)",
"temperature": "number (optional)",
"timeout": "number (optional)"
}
}
```
## Output
```json
{
"summary": "Agent performance optimization completed successfully",
"operation": "tune|benchmark|optimize|profile",
"agent": "agent_name",
"target": "speed|memory|throughput|latency|all",
"before_metrics": {
"execution_time": "number",
"memory_usage": "number",
"throughput": "number",
"latency": "number"
},
"after_metrics": {
"execution_time": "number",
"memory_usage": "number",
"throughput": "number",
"latency": "number"
},
"improvement": {
"speed": "percentage",
"memory": "percentage",
"throughput": "percentage",
"latency": "percentage"
},
"issues": [],
"recommendations": [],
"confidence": 1.0,
"execution_time": "number",
"validation_status": "success|partial|failed"
}
```
## Process
### 1. Analyze
- Profile current agent performance
- Identify bottlenecks
- Assess optimization opportunities
- Validate agent state
### 2. Plan
- Select optimization strategy
- Define parameter adjustments
- Set performance targets
- Plan validation approach
### 3. Execute
- Apply parameter adjustments
- Run performance benchmarks
- Measure improvements
- Validate stability
### 4. Validate
- Verify performance gains
- Check for regressions
- Validate parameter stability
- Confirm agent functionality
## Constraints
- **MUST NOT** modify agent core functionality
- **MUST NOT** exceed 90 seconds for optimization
- **MUST** validate parameter ranges
- **MUST** preserve agent behavior
- **MUST** rollback on critical failures
## Environment Assumptions
- Agent operational and accessible
- Performance monitoring available
- Parameter configuration accessible
- Benchmarking tools available
- Agent state persistence functional
## Error Handling
- Parameter validation failure → Revert to previous parameters
- Performance regression → Rollback optimization
- Agent instability → Restore baseline configuration
- Timeout during optimization → Return partial results
## Example Usage Prompt
```
Optimize main agent for speed and memory efficiency
```
## Expected Output Example
```json
{
"summary": "Main agent optimized for speed and memory efficiency",
"operation": "optimize",
"agent": "main",
"target": "all",
"before_metrics": {
"execution_time": 15.2,
"memory_usage": 250,
"throughput": 8.5,
"latency": 2.1
},
"after_metrics": {
"execution_time": 11.8,
"memory_usage": 180,
"throughput": 12.3,
"latency": 1.5
},
"improvement": {
"speed": "22%",
"memory": "28%",
"throughput": "45%",
"latency": "29%"
},
"issues": [],
"recommendations": ["Consider further optimization for memory-intensive tasks"],
"confidence": 1.0,
"execution_time": 35.7,
"validation_status": "success"
}
```
## Model Routing Suggestion
**Reasoning Model** (Claude Sonnet, GPT-4)
- Complex parameter optimization
- Performance analysis and tuning
- Benchmark interpretation
- Regression detection
**Performance Notes**
- **Execution Time**: 20-60 seconds for optimization, 5-15 seconds for benchmarking
- **Memory Usage**: <200MB for optimization operations
- **Network Requirements**: Agent communication for profiling
- **Concurrency**: Safe for sequential optimization of different agents

View File

@@ -189,7 +189,7 @@ sudo systemctl start aitbc-blockchain-node-production.service
**Quick Start**: **Quick Start**:
```bash ```bash
# Create marketplace service # Create marketplace service
./aitbc-cli marketplace --action create --name "AI Service" --price 100 --wallet provider ./aitbc-cli market create --type ai-inference --price 100 --description "AI Service" --wallet provider
``` ```
--- ---
@@ -297,10 +297,10 @@ curl -s http://localhost:8006/health | jq .
curl -s http://localhost:8006/rpc/head | jq .height curl -s http://localhost:8006/rpc/head | jq .height
# List wallets # List wallets
./aitbc-cli list ./aitbc-cli wallet list
# Send transaction # Send transaction
./aitbc-cli send --from wallet1 --to wallet2 --amount 100 --password 123 ./aitbc-cli wallet send wallet1 wallet2 100 123
``` ```
### Operations Commands (From Operations Module) ### Operations Commands (From Operations Module)
@@ -342,10 +342,10 @@ curl -s http://localhost:9090/metrics
### Marketplace Commands (From Marketplace Module) ### Marketplace Commands (From Marketplace Module)
```bash ```bash
# Create service # Create service
./aitbc-cli marketplace --action create --name "Service" --price 100 --wallet provider ./aitbc-cli market create --type ai-inference --price 100 --description "Service" --wallet provider
# Submit AI job # Submit AI job
./aitbc-cli ai-submit --wallet wallet --type inference --prompt "Generate image" --payment 100 ./aitbc-cli ai submit --wallet wallet --type inference --prompt "Generate image" --payment 100
# Check resource status # Check resource status
./aitbc-cli resource status ./aitbc-cli resource status

View File

@@ -95,8 +95,8 @@ openclaw agent --agent FollowerAgent --session-id test --message "Test response"
**Quick Start**: **Quick Start**:
```bash ```bash
# Test AI operations # Test AI operations
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Test AI job" --payment 100 ./aitbc-cli ai submit --wallet genesis-ops --type inference --prompt "Test AI job" --payment 100
./aitbc-cli ai-ops --action status --job-id latest ./aitbc-cli ai status --job-id latest
``` ```
--- ---
@@ -117,8 +117,8 @@ openclaw agent --agent FollowerAgent --session-id test --message "Test response"
**Quick Start**: **Quick Start**:
```bash ```bash
# Test advanced AI operations # Test advanced AI operations
./aitbc-cli ai-submit --wallet genesis-ops --type parallel --prompt "Complex pipeline test" --payment 500 ./aitbc-cli ai submit --wallet genesis-ops --type parallel --prompt "Complex pipeline test" --payment 500
./aitbc-cli ai-submit --wallet genesis-ops --type multimodal --prompt "Multi-modal test" --payment 1000 ./aitbc-cli ai submit --wallet genesis-ops --type multimodal --prompt "Multi-modal test" --payment 1000
``` ```
--- ---
@@ -139,7 +139,7 @@ openclaw agent --agent FollowerAgent --session-id test --message "Test response"
**Quick Start**: **Quick Start**:
```bash ```bash
# Test cross-node operations # Test cross-node operations
ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli chain' ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli blockchain info'
./aitbc-cli resource status ./aitbc-cli resource status
ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli resource status' ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli resource status'
``` ```
@@ -223,16 +223,16 @@ test-basic.md (foundation)
### 🚀 Quick Test Commands ### 🚀 Quick Test Commands
```bash ```bash
# Basic functionality test # Basic functionality test
./aitbc-cli --version && ./aitbc-cli chain ./aitbc-cli --version && ./aitbc-cli blockchain info
# OpenClaw agent test # OpenClaw agent test
openclaw agent --agent GenesisAgent --session-id quick-test --message "Quick test" --thinking low openclaw agent --agent GenesisAgent --session-id quick-test --message "Quick test" --thinking low
# AI operations test # AI operations test
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "Quick test" --payment 50 ./aitbc-cli ai submit --wallet genesis-ops --type inference --prompt "Quick test" --payment 50
# Cross-node test # Cross-node test
ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli chain' ssh aitbc1 'cd /opt/aitbc && ./aitbc-cli blockchain info'
# Performance test # Performance test
./aitbc-cli simulate blockchain --blocks 10 --transactions 50 --delay 0 ./aitbc-cli simulate blockchain --blocks 10 --transactions 50 --delay 0

View File

@@ -0,0 +1,234 @@
---
description: Blockchain communication testing workflow for multi-node AITBC setup
title: Blockchain Communication Test
version: 1.0
---
# Blockchain Communication Test Workflow
## Purpose
Test and verify blockchain communication between aitbc (genesis) and aitbc1 (follower) nodes running on port 8006 on different physical machines.
## Prerequisites
- Both nodes (aitbc and aitbc1) must be running
- AITBC CLI accessible: `/opt/aitbc/aitbc-cli`
- Network connectivity between nodes
- Git repository access for synchronization
## Quick Start
```bash
# Run complete communication test
cd /opt/aitbc
./scripts/blockchain-communication-test.sh --full
# Run specific test type
./scripts/blockchain-communication-test.sh --type connectivity
./scripts/blockchain-communication-test.sh --type transaction
./scripts/blockchain-communication-test.sh --type sync
# Run with debug output
./scripts/blockchain-communication-test.sh --full --debug
```
## Test Types
### 1. Connectivity Test
Verify basic network connectivity and service availability.
```bash
# Test genesis node (aitbc)
curl http://10.1.223.40:8006/health
# Test follower node (aitbc1)
curl http://<aitbc1-ip>:8006/health
# Test P2P connectivity
./aitbc-cli network ping --node aitbc1 --host <aitbc1-ip> --port 8006 --verbose
./aitbc-cli network peers --verbose
```
### 2. Blockchain Status Test
Verify blockchain status and synchronization on both nodes.
```bash
# Check genesis node status
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain info --verbose
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain height --output json
# Check follower node status
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain info --verbose
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain height --output json
# Compare block heights
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli blockchain height --output json
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli blockchain height --output json
```
### 3. Transaction Test
Test transaction propagation between nodes.
```bash
# Create test wallets
./aitbc-cli wallet create --name test-sender --password test123 --yes --no-confirm
./aitbc-cli wallet create --name test-receiver --password test123 --yes --no-confirm
# Fund sender wallet (if needed)
./aitbc-cli wallet send --from genesis-ops --to test-sender --amount 100 --password <password> --yes
# Send transaction
./aitbc-cli wallet send --from test-sender --to test-receiver --amount 10 --password test123 --yes --verbose
# Verify on both nodes
./aitbc-cli wallet transactions --name test-sender --limit 5 --format table
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli wallet transactions --name test-receiver --limit 5 --format table
```
### 4. Agent Messaging Test
Test agent message propagation over blockchain.
```bash
# Send agent message
./aitbc-cli agent message --to <agent_id> --content "Test message from aitbc" --debug
# Check messages
./aitbc-cli agent messages --from <agent_id> --verbose
# Verify on follower node
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent messages --from <agent_id> --verbose
```
### 5. Synchronization Test
Verify git-based synchronization between nodes.
```bash
# Check git status on both nodes
cd /opt/aitbc && git status --verbose
ssh aitbc1 'cd /opt/aitbc && git status --verbose'
# Sync from Gitea
git pull origin main --verbose
ssh aitbc1 'cd /opt/aitbc && git pull origin main --verbose'
# Verify sync
git log --oneline -5 --decorate
ssh aitbc1 'cd /opt/aitbc && git log --oneline -5 --decorate'
```
## Automated Script
### Script Location
`/opt/aitbc/scripts/blockchain-communication-test.sh`
### Script Usage
```bash
# Full test suite
./scripts/blockchain-communication-test.sh --full
# Specific test types
./scripts/blockchain-communication-test.sh --type connectivity
./scripts/blockchain-communication-test.sh --type blockchain
./scripts/blockchain-communication-test.sh --type transaction
./scripts/blockchain-communication-test.sh --type sync
# Debug mode
./scripts/blockchain-communication-test.sh --full --debug
# Continuous monitoring
./scripts/blockchain-communication-test.sh --monitor --interval 300
```
### Script Features
- **Automated testing**: Runs all test types sequentially
- **Progress tracking**: Detailed logging of each test step
- **Error handling**: Graceful failure with diagnostic information
- **Report generation**: JSON and HTML test reports
- **Continuous monitoring**: Periodic testing with alerts
## Production Monitoring
### Monitoring Script
```bash
# Continuous monitoring with alerts
./scripts/blockchain-communication-test.sh --monitor --interval 300 --alert-email admin@example.com
```
### Monitoring Metrics
- Node availability (uptime)
- Block synchronization lag
- Transaction propagation time
- Network latency
- Git synchronization status
### Alert Conditions
- Node unreachable for > 5 minutes
- Block sync lag > 10 blocks
- Transaction timeout > 60 seconds
- Network latency > 100ms
- Git sync failure
## Training Integration
### Integration with Mastery Plan
This workflow integrates with Stage 2 (Intermediate Operations) of the OpenClaw AITBC Mastery Plan.
### Training Script
`/opt/aitbc/scripts/training/stage2_intermediate.sh` includes blockchain communication testing as part of the training curriculum.
## Troubleshooting
### Common Issues
#### Node Unreachable
```bash
# Check network connectivity
ping <aitbc1-ip>
curl http://<aitbc1-ip>:8006/health
# Check firewall
iptables -L | grep 8006
# Check service status
ssh aitbc1 'systemctl status aitbc-blockchain-rpc'
```
#### Block Sync Lag
```bash
# Check sync status
./aitbc-cli network sync status --verbose
# Force sync if needed
./aitbc-cli cluster sync --all --yes
# Restart services if needed
ssh aitbc1 'systemctl restart aitbc-blockchain-p2p'
```
#### Transaction Timeout
```bash
# Check wallet balance
./aitbc-cli wallet balance --name test-sender
# Check transaction status
./aitbc-cli wallet transactions --name test-sender --limit 10
# Verify network status
./aitbc-cli network status --verbose
```
## Success Criteria
- Both nodes respond to health checks
- Block heights match within 2 blocks
- Transactions propagate within 30 seconds
- Agent messages sync within 10 seconds
- Git synchronization completes successfully
- Network latency < 50ms between nodes
## Log Files
- Test logs: `/var/log/aitbc/blockchain-communication-test.log`
- Monitoring logs: `/var/log/aitbc/blockchain-monitor.log`
- Error logs: `/var/log/aitbc/blockchain-test-errors.log`
## Related Workflows
- [Multi-Node Operations](/multi-node-blockchain-operations.md)
- [Multi-Node Setup Core](/multi-node-blockchain-setup-core.md)
- [Ollama GPU Test OpenClaw](/ollama-gpu-test-openclaw.md)

View File

@@ -25,77 +25,69 @@ This module covers marketplace scenario testing, GPU provider testing, transacti
cd /opt/aitbc && source venv/bin/activate cd /opt/aitbc && source venv/bin/activate
# Create marketplace service provider wallet # Create marketplace service provider wallet
./aitbc-cli create --name marketplace-provider --password 123 ./aitbc-cli wallet create marketplace-provider 123
# Fund marketplace provider wallet # Fund marketplace provider wallet
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "marketplace-provider:" | cut -d" " -f2) --amount 10000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "marketplace-provider:" | cut -d" " -f2) 10000 123
# Create AI service provider wallet # Create AI service provider wallet
./aitbc-cli create --name ai-service-provider --password 123 ./aitbc-cli wallet create ai-service-provider 123
# Fund AI service provider wallet # Fund AI service provider wallet
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "ai-service-provider:" | cut -d" " -f2) --amount 5000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "ai-service-provider:" | cut -d" " -f2) 5000 123
# Create GPU provider wallet # Create GPU provider wallet
./aitbc-cli create --name gpu-provider --password 123 ./aitbc-cli wallet create gpu-provider 123
# Fund GPU provider wallet # Fund GPU provider wallet
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "gpu-provider:" | cut -d" " -f2) --amount 5000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "gpu-provider:" | cut -d" " -f2) 5000 123
``` ```
### Create Marketplace Services ### Create Marketplace Services
```bash ```bash
# Create AI inference service # Create AI inference service
./aitbc-cli marketplace --action create \ ./aitbc-cli market create \
--name "AI Image Generation Service" \
--type ai-inference \ --type ai-inference \
--price 100 \ --price 100 \
--wallet marketplace-provider \ --wallet marketplace-provider \
--description "High-quality image generation using advanced AI models" \ --description "High-quality image generation using advanced AI models"
--parameters "resolution:512x512,style:photorealistic,quality:high"
# Create AI training service # Create AI training service
./aitbc-cli marketplace --action create \ ./aitbc-cli market create \
--name "Custom Model Training Service" \
--type ai-training \ --type ai-training \
--price 500 \ --price 500 \
--wallet ai-service-provider \ --wallet ai-service-provider \
--description "Custom AI model training on your datasets" \ --description "Custom AI model training on your datasets"
--parameters "model_type:custom,epochs:100,batch_size:32"
# Create GPU rental service # Create GPU rental service
./aitbc-cli marketplace --action create \ ./aitbc-cli market create \
--name "GPU Cloud Computing" \
--type gpu-rental \ --type gpu-rental \
--price 50 \ --price 50 \
--wallet gpu-provider \ --wallet gpu-provider \
--description "High-performance GPU rental for AI workloads" \ --description "High-performance GPU rental for AI workloads"
--parameters "gpu_type:rtx4090,memory:24gb,bandwidth:high"
# Create data processing service # Create data processing service
./aitbc-cli marketplace --action create \ ./aitbc-cli market create \
--name "Data Analysis Pipeline" \
--type data-processing \ --type data-processing \
--price 25 \ --price 25 \
--wallet marketplace-provider \ --wallet marketplace-provider \
--description "Automated data analysis and processing" \ --description "Automated data analysis and processing"
--parameters "data_format:csv,json,xml,output_format:reports"
``` ```
### Verify Marketplace Services ### Verify Marketplace Services
```bash ```bash
# List all marketplace services # List all marketplace services
./aitbc-cli marketplace --action list ./aitbc-cli market list
# Check service details # Check service details
./aitbc-cli marketplace --action search --query "AI" ./aitbc-cli market search --query "AI"
# Verify provider listings # Verify provider listings
./aitbc-cli marketplace --action my-listings --wallet marketplace-provider ./aitbc-cli market my-listings --wallet marketplace-provider
./aitbc-cli marketplace --action my-listings --wallet ai-service-provider ./aitbc-cli market my-listings --wallet ai-service-provider
./aitbc-cli marketplace --action my-listings --wallet gpu-provider ./aitbc-cli market my-listings --wallet gpu-provider
``` ```
## Scenario Testing ## Scenario Testing
@@ -104,88 +96,88 @@ cd /opt/aitbc && source venv/bin/activate
```bash ```bash
# Customer creates wallet and funds it # Customer creates wallet and funds it
./aitbc-cli create --name customer-1 --password 123 ./aitbc-cli wallet create customer-1 123
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "customer-1:" | cut -d" " -f2) --amount 1000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "customer-1:" | cut -d" " -f2) 1000 123
# Customer browses marketplace # Customer browses marketplace
./aitbc-cli marketplace --action search --query "image generation" ./aitbc-cli market search --query "image generation"
# Customer bids on AI image generation service # Customer bids on AI image generation service
SERVICE_ID=$(./aitbc-cli marketplace --action search --query "AI Image Generation" | grep "service_id" | head -1 | cut -d" " -f2) SERVICE_ID=$(./aitbc-cli market search --query "AI Image Generation" | grep "service_id" | head -1 | cut -d" " -f2)
./aitbc-cli marketplace --action bid --service-id $SERVICE_ID --amount 120 --wallet customer-1 ./aitbc-cli market bid --service-id $SERVICE_ID --amount 120 --wallet customer-1
# Service provider accepts bid # Service provider accepts bid
./aitbc-cli marketplace --action accept-bid --service-id $SERVICE_ID --bid-id "bid_123" --wallet marketplace-provider ./aitbc-cli market accept-bid --service-id $SERVICE_ID --bid-id "bid_123" --wallet marketplace-provider
# Customer submits AI job # Customer submits AI job
./aitbc-cli ai-submit --wallet customer-1 --type inference \ ./aitbc-cli ai submit --wallet customer-1 --type inference \
--prompt "Generate a futuristic cityscape with flying cars" \ --prompt "Generate a futuristic cityscape with flying cars" \
--payment 120 --service-id $SERVICE_ID --payment 120 --service-id $SERVICE_ID
# Monitor job completion # Monitor job completion
./aitbc-cli ai-status --job-id "ai_job_123" ./aitbc-cli ai status --job-id "ai_job_123"
# Customer receives results # Customer receives results
./aitbc-cli ai-results --job-id "ai_job_123" ./aitbc-cli ai results --job-id "ai_job_123"
# Verify transaction completed # Verify transaction completed
./aitbc-cli balance --name customer-1 ./aitbc-cli wallet balance customer-1
./aitbc-cli balance --name marketplace-provider ./aitbc-cli wallet balance marketplace-provider
``` ```
### Scenario 2: GPU Rental + AI Training ### Scenario 2: GPU Rental + AI Training
```bash ```bash
# Researcher creates wallet and funds it # Researcher creates wallet and funds it
./aitbc-cli create --name researcher-1 --password 123 ./aitbc-cli wallet create researcher-1 123
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "researcher-1:" | cut -d" " -f2) --amount 2000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "researcher-1:" | cut -d" " -f2) 2000 123
# Researcher rents GPU for training # Researcher rents GPU for training
GPU_SERVICE_ID=$(./aitbc-cli marketplace --action search --query "GPU" | grep "service_id" | head -1 | cut -d" " -f2) GPU_SERVICE_ID=$(./aitbc-cli market search --query "GPU" | grep "service_id" | head -1 | cut -d" " -f2)
./aitbc-cli marketplace --action bid --service-id $GPU_SERVICE_ID --amount 60 --wallet researcher-1 ./aitbc-cli market bid --service-id $GPU_SERVICE_ID --amount 60 --wallet researcher-1
# GPU provider accepts and allocates GPU # GPU provider accepts and allocates GPU
./aitbc-cli marketplace --action accept-bid --service-id $GPU_SERVICE_ID --bid-id "bid_456" --wallet gpu-provider ./aitbc-cli market accept-bid --service-id $GPU_SERVICE_ID --bid-id "bid_456" --wallet gpu-provider
# Researcher submits training job with allocated GPU # Researcher submits training job with allocated GPU
./aitbc-cli ai-submit --wallet researcher-1 --type training \ ./aitbc-cli ai submit --wallet researcher-1 --type training \
--model "custom-classifier" --dataset "/data/training_data.csv" \ --model "custom-classifier" --dataset "/data/training_data.csv" \
--payment 500 --gpu-allocated 1 --memory 8192 --payment 500 --gpu-allocated 1 --memory 8192
# Monitor training progress # Monitor training progress
./aitbc-cli ai-status --job-id "ai_job_456" ./aitbc-cli ai status --job-id "ai_job_456"
# Verify GPU utilization # Verify GPU utilization
./aitbc-cli resource status --agent-id "gpu-worker-1" ./aitbc-cli resource status --agent-id "gpu-worker-1"
# Training completes and researcher gets model # Training completes and researcher gets model
./aitbc-cli ai-results --job-id "ai_job_456" ./aitbc-cli ai results --job-id "ai_job_456"
``` ```
### Scenario 3: Multi-Service Pipeline ### Scenario 3: Multi-Service Pipeline
```bash ```bash
# Enterprise creates wallet and funds it # Enterprise creates wallet and funds it
./aitbc-cli create --name enterprise-1 --password 123 ./aitbc-cli wallet create enterprise-1 123
./aitbc-cli send --from genesis-ops --to $(./aitbc-cli list | grep "enterprise-1:" | cut -d" " -f2) --amount 5000 --password 123 ./aitbc-cli wallet send genesis-ops $(./aitbc-cli wallet list | grep "enterprise-1:" | cut -d" " -f2) 5000 123
# Enterprise creates data processing pipeline # Enterprise creates data processing pipeline
DATA_SERVICE_ID=$(./aitbc-cli marketplace --action search --query "data processing" | grep "service_id" | head -1 | cut -d" " -f2) DATA_SERVICE_ID=$(./aitbc-cli market search --query "data processing" | grep "service_id" | head -1 | cut -d" " -f2)
./aitbc-cli marketplace --action bid --service-id $DATA_SERVICE_ID --amount 30 --wallet enterprise-1 ./aitbc-cli market bid --service-id $DATA_SERVICE_ID --amount 30 --wallet enterprise-1
# Data provider processes raw data # Data provider processes raw data
./aitbc-cli marketplace --action accept-bid --service-id $DATA_SERVICE_ID --bid-id "bid_789" --wallet marketplace-provider ./aitbc-cli market accept-bid --service-id $DATA_SERVICE_ID --bid-id "bid_789" --wallet marketplace-provider
# Enterprise submits AI analysis on processed data # Enterprise submits AI analysis on processed data
./aitbc-cli ai-submit --wallet enterprise-1 --type inference \ ./aitbc-cli ai submit --wallet enterprise-1 --type inference \
--prompt "Analyze processed data for trends and patterns" \ --prompt "Analyze processed data for trends and patterns" \
--payment 200 --input-data "/data/processed_data.csv" --payment 200 --input-data "/data/processed_data.csv"
# Results are delivered and verified # Results are delivered and verified
./aitbc-cli ai-results --job-id "ai_job_789" ./aitbc-cli ai results --job-id "ai_job_789"
# Enterprise pays for services # Enterprise pays for services
./aitbc-cli marketplace --action settle-payment --service-id $DATA_SERVICE_ID --amount 30 --wallet enterprise-1 ./aitbc-cli market settle-payment --service-id $DATA_SERVICE_ID --amount 30 --wallet enterprise-1
``` ```
## GPU Provider Testing ## GPU Provider Testing
@@ -194,7 +186,7 @@ DATA_SERVICE_ID=$(./aitbc-cli marketplace --action search --query "data processi
```bash ```bash
# Test GPU allocation and deallocation # Test GPU allocation and deallocation
./aitbc-cli resource allocate --agent-id "gpu-worker-1" --gpu 1 --memory 8192 --duration 3600 ./aitbc-cli resource allocate --agent-id "gpu-worker-1" --memory 8192 --duration 3600
# Verify GPU allocation # Verify GPU allocation
./aitbc-cli resource status --agent-id "gpu-worker-1" ./aitbc-cli resource status --agent-id "gpu-worker-1"
@@ -207,7 +199,7 @@ DATA_SERVICE_ID=$(./aitbc-cli marketplace --action search --query "data processi
# Test concurrent GPU allocations # Test concurrent GPU allocations
for i in {1..5}; do for i in {1..5}; do
./aitbc-cli resource allocate --agent-id "gpu-worker-$i" --gpu 1 --memory 8192 --duration 1800 & ./aitbc-cli resource allocate --agent-id "gpu-worker-$i" --memory 8192 --duration 1800 &
done done
wait wait
@@ -219,16 +211,16 @@ wait
```bash ```bash
# Test GPU performance with different workloads # Test GPU performance with different workloads
./aitbc-cli ai-submit --wallet gpu-provider --type inference \ ./aitbc-cli ai submit --wallet gpu-provider --type inference \
--prompt "Generate high-resolution image" --payment 100 \ --prompt "Generate high-resolution image" --payment 100 \
--gpu-allocated 1 --resolution "1024x1024" --gpu-allocated 1 --resolution "1024x1024"
./aitbc-cli ai-submit --wallet gpu-provider --type training \ ./aitbc-cli ai submit --wallet gpu-provider --type training \
--model "large-model" --dataset "/data/large_dataset.csv" --payment 500 \ --model "large-model" --dataset "/data/large_dataset.csv" --payment 500 \
--gpu-allocated 1 --batch-size 64 --gpu-allocated 1 --batch-size 64
# Monitor GPU performance metrics # Monitor GPU performance metrics
./aitbc-cli ai-metrics --agent-id "gpu-worker-1" --period "1h" ./aitbc-cli ai metrics --agent-id "gpu-worker-1" --period "1h"
# Test GPU memory management # Test GPU memory management
./aitbc-cli resource test --type gpu --memory-stress --duration 300 ./aitbc-cli resource test --type gpu --memory-stress --duration 300
@@ -238,13 +230,13 @@ wait
```bash ```bash
# Test GPU provider revenue tracking # Test GPU provider revenue tracking
./aitbc-cli marketplace --action revenue --wallet gpu-provider --period "24h" ./aitbc-cli market revenue --wallet gpu-provider --period "24h"
# Test GPU utilization optimization # Test GPU utilization optimization
./aitbc-cli marketplace --action optimize --wallet gpu-provider --metric "utilization" ./aitbc-cli market optimize --wallet gpu-provider --metric "utilization"
# Test GPU pricing strategy # Test GPU pricing strategy
./aitbc-cli marketplace --action pricing --service-id $GPU_SERVICE_ID --strategy "dynamic" ./aitbc-cli market pricing --service-id $GPU_SERVICE_ID --strategy "dynamic"
``` ```
## Transaction Tracking ## Transaction Tracking
@@ -253,45 +245,45 @@ wait
```bash ```bash
# Monitor all marketplace transactions # Monitor all marketplace transactions
./aitbc-cli marketplace --action transactions --period "1h" ./aitbc-cli market transactions --period "1h"
# Track specific service transactions # Track specific service transactions
./aitbc-cli marketplace --action transactions --service-id $SERVICE_ID ./aitbc-cli market transactions --service-id $SERVICE_ID
# Monitor customer transaction history # Monitor customer transaction history
./aitbc-cli transactions --name customer-1 --limit 50 ./aitbc-cli wallet transactions customer-1 --limit 50
# Track provider revenue # Track provider revenue
./aitbc-cli marketplace --action revenue --wallet marketplace-provider --period "24h" ./aitbc-cli market revenue --wallet marketplace-provider --period "24h"
``` ```
### Transaction Verification ### Transaction Verification
```bash ```bash
# Verify transaction integrity # Verify transaction integrity
./aitbc-cli transaction verify --tx-id "tx_123" ./aitbc-cli wallet transaction verify --tx-id "tx_123"
# Check transaction confirmation status # Check transaction confirmation status
./aitbc-cli transaction status --tx-id "tx_123" ./aitbc-cli wallet transaction status --tx-id "tx_123"
# Verify marketplace settlement # Verify marketplace settlement
./aitbc-cli marketplace --action verify-settlement --service-id $SERVICE_ID ./aitbc-cli market verify-settlement --service-id $SERVICE_ID
# Audit transaction trail # Audit transaction trail
./aitbc-cli marketplace --action audit --period "24h" ./aitbc-cli market audit --period "24h"
``` ```
### Cross-Node Transaction Tracking ### Cross-Node Transaction Tracking
```bash ```bash
# Monitor transactions across both nodes # Monitor transactions across both nodes
./aitbc-cli transactions --cross-node --period "1h" ./aitbc-cli wallet transactions --cross-node --period "1h"
# Verify transaction propagation # Verify transaction propagation
./aitbc-cli transaction verify-propagation --tx-id "tx_123" ./aitbc-cli wallet transaction verify-propagation --tx-id "tx_123"
# Track cross-node marketplace activity # Track cross-node marketplace activity
./aitbc-cli marketplace --action cross-node-stats --period "24h" ./aitbc-cli market cross-node-stats --period "24h"
``` ```
## Verification Procedures ## Verification Procedures
@@ -300,39 +292,39 @@ wait
```bash ```bash
# Verify service provider performance # Verify service provider performance
./aitbc-cli marketplace --action verify-provider --wallet ai-service-provider ./aitbc-cli market verify-provider --wallet ai-service-provider
# Check service quality metrics # Check service quality metrics
./aitbc-cli marketplace --action quality-metrics --service-id $SERVICE_ID ./aitbc-cli market quality-metrics --service-id $SERVICE_ID
# Verify customer satisfaction # Verify customer satisfaction
./aitbc-cli marketplace --action satisfaction --wallet customer-1 --period "7d" ./aitbc-cli market satisfaction --wallet customer-1 --period "7d"
``` ```
### Compliance Verification ### Compliance Verification
```bash ```bash
# Verify marketplace compliance # Verify marketplace compliance
./aitbc-cli marketplace --action compliance-check --period "24h" ./aitbc-cli market compliance-check --period "24h"
# Check regulatory compliance # Check regulatory compliance
./aitbc-cli marketplace --action regulatory-audit --period "30d" ./aitbc-cli market regulatory-audit --period "30d"
# Verify data privacy compliance # Verify data privacy compliance
./aitbc-cli marketplace --action privacy-audit --service-id $SERVICE_ID ./aitbc-cli market privacy-audit --service-id $SERVICE_ID
``` ```
### Financial Verification ### Financial Verification
```bash ```bash
# Verify financial transactions # Verify financial transactions
./aitbc-cli marketplace --action financial-audit --period "24h" ./aitbc-cli market financial-audit --period "24h"
# Check payment processing # Check payment processing
./aitbc-cli marketplace --action payment-verify --period "1h" ./aitbc-cli market payment-verify --period "1h"
# Reconcile marketplace accounts # Reconcile marketplace accounts
./aitbc-cli marketplace --action reconcile --period "24h" ./aitbc-cli market reconcile --period "24h"
``` ```
## Performance Testing ## Performance Testing
@@ -342,41 +334,41 @@ wait
```bash ```bash
# Simulate high transaction volume # Simulate high transaction volume
for i in {1..100}; do for i in {1..100}; do
./aitbc-cli marketplace --action bid --service-id $SERVICE_ID --amount 100 --wallet test-wallet-$i & ./aitbc-cli market bid --service-id $SERVICE_ID --amount 100 --wallet test-wallet-$i &
done done
wait wait
# Monitor system performance under load # Monitor system performance under load
./aitbc-cli marketplace --action performance-metrics --period "5m" ./aitbc-cli market performance-metrics --period "5m"
# Test marketplace scalability # Test marketplace scalability
./aitbc-cli marketplace --action stress-test --transactions 1000 --concurrent 50 ./aitbc-cli market stress-test --transactions 1000 --concurrent 50
``` ```
### Latency Testing ### Latency Testing
```bash ```bash
# Test transaction processing latency # Test transaction processing latency
time ./aitbc-cli marketplace --action bid --service-id $SERVICE_ID --amount 100 --wallet test-wallet time ./aitbc-cli market bid --service-id $SERVICE_ID --amount 100 --wallet test-wallet
# Test AI job submission latency # Test AI job submission latency
time ./aitbc-cli ai-submit --wallet test-wallet --type inference --prompt "test" --payment 50 time ./aitbc-cli ai submit --wallet test-wallet --type inference --prompt "test" --payment 50
# Monitor overall system latency # Monitor overall system latency
./aitbc-cli marketplace --action latency-metrics --period "1h" ./aitbc-cli market latency-metrics --period "1h"
``` ```
### Throughput Testing ### Throughput Testing
```bash ```bash
# Test marketplace throughput # Test marketplace throughput
./aitbc-cli marketplace --action throughput-test --duration 300 --transactions-per-second 10 ./aitbc-cli market throughput-test --duration 300 --transactions-per-second 10
# Test AI job throughput # Test AI job throughput
./aitbc-cli marketplace --action ai-throughput-test --duration 300 --jobs-per-minute 5 ./aitbc-cli market ai-throughput-test --duration 300 --jobs-per-minute 5
# Monitor system capacity # Monitor system capacity
./aitbc-cli marketplace --action capacity-metrics --period "24h" ./aitbc-cli market capacity-metrics --period "24h"
``` ```
## Troubleshooting Marketplace Issues ## Troubleshooting Marketplace Issues
@@ -395,16 +387,16 @@ time ./aitbc-cli ai-submit --wallet test-wallet --type inference --prompt "test"
```bash ```bash
# Diagnose marketplace connectivity # Diagnose marketplace connectivity
./aitbc-cli marketplace --action connectivity-test ./aitbc-cli market connectivity-test
# Check marketplace service health # Check marketplace service health
./aitbc-cli marketplace --action health-check ./aitbc-cli market health-check
# Verify marketplace data integrity # Verify marketplace data integrity
./aitbc-cli marketplace --action integrity-check ./aitbc-cli market integrity-check
# Debug marketplace transactions # Debug marketplace transactions
./aitbc-cli marketplace --action debug --transaction-id "tx_123" ./aitbc-cli market debug --transaction-id "tx_123"
``` ```
## Automation Scripts ## Automation Scripts
@@ -418,31 +410,30 @@ time ./aitbc-cli ai-submit --wallet test-wallet --type inference --prompt "test"
echo "Starting automated marketplace testing..." echo "Starting automated marketplace testing..."
# Create test wallets # Create test wallets
./aitbc-cli create --name test-customer --password 123 ./aitbc-cli wallet create test-customer 123
./aitbc-cli create --name test-provider --password 123 ./aitbc-cli wallet create test-provider 123
# Fund test wallets # Fund test wallets
CUSTOMER_ADDR=$(./aitbc-cli list | grep "test-customer:" | cut -d" " -f2) CUSTOMER_ADDR=$(./aitbc-cli wallet list | grep "test-customer:" | cut -d" " -f2)
PROVIDER_ADDR=$(./aitbc-cli list | grep "test-provider:" | cut -d" " -f2) PROVIDER_ADDR=$(./aitbc-cli wallet list | grep "test-provider:" | cut -d" " -f2)
./aitbc-cli send --from genesis-ops --to $CUSTOMER_ADDR --amount 1000 --password 123 ./aitbc-cli wallet send genesis-ops $CUSTOMER_ADDR 1000 123
./aitbc-cli send --from genesis-ops --to $PROVIDER_ADDR --amount 1000 --password 123 ./aitbc-cli wallet send genesis-ops $PROVIDER_ADDR 1000 123
# Create test service # Create test service
./aitbc-cli marketplace --action create \ ./aitbc-cli market create \
--name "Test AI Service" \
--type ai-inference \ --type ai-inference \
--price 50 \ --price 50 \
--wallet test-provider \ --wallet test-provider \
--description "Automated test service" --description "Test AI Service"
# Test complete workflow # Test complete workflow
SERVICE_ID=$(./aitbc-cli marketplace --action list | grep "Test AI Service" | grep "service_id" | cut -d" " -f2) SERVICE_ID=$(./aitbc-cli market list | grep "Test AI Service" | grep "service_id" | cut -d" " -f2)
./aitbc-cli marketplace --action bid --service-id $SERVICE_ID --amount 60 --wallet test-customer ./aitbc-cli market bid --service-id $SERVICE_ID --amount 60 --wallet test-customer
./aitbc-cli marketplace --action accept-bid --service-id $SERVICE_ID --bid-id "test_bid" --wallet test-provider ./aitbc-cli market accept-bid --service-id $SERVICE_ID --bid-id "test_bid" --wallet test-provider
./aitbc-cli ai-submit --wallet test-customer --type inference --prompt "test image" --payment 60 ./aitbc-cli ai submit --wallet test-customer --type inference --prompt "test image" --payment 60
# Verify results # Verify results
echo "Test completed successfully!" echo "Test completed successfully!"
@@ -458,9 +449,9 @@ while true; do
TIMESTAMP=$(date +%Y-%m-%d_%H:%M:%S) TIMESTAMP=$(date +%Y-%m-%d_%H:%M:%S)
# Collect metrics # Collect metrics
ACTIVE_SERVICES=$(./aitbc-cli marketplace --action list | grep -c "service_id") ACTIVE_SERVICES=$(./aitbc-cli market list | grep -c "service_id")
PENDING_BIDS=$(./aitbc-cli marketplace --action pending-bids | grep -c "bid_id") PENDING_BIDS=$(./aitbc-cli market pending-bids | grep -c "bid_id")
TOTAL_VOLUME=$(./aitbc-cli marketplace --action volume --period "1h") TOTAL_VOLUME=$(./aitbc-cli market volume --period "1h")
# Log metrics # Log metrics
echo "$TIMESTAMP,services:$ACTIVE_SERVICES,bids:$PENDING_BIDS,volume:$TOTAL_VOLUME" >> /var/log/aitbc/marketplace_performance.log echo "$TIMESTAMP,services:$ACTIVE_SERVICES,bids:$PENDING_BIDS,volume:$TOTAL_VOLUME" >> /var/log/aitbc/marketplace_performance.log

View File

@@ -53,18 +53,18 @@ watch -n 10 'curl -s http://localhost:8006/rpc/head | jq "{height: .height, time
```bash ```bash
# Check wallet balances # Check wallet balances
cd /opt/aitbc && source venv/bin/activate cd /opt/aitbc && source venv/bin/activate
./aitbc-cli balance --name genesis-ops ./aitbc-cli wallet balance genesis-ops
./aitbc-cli balance --name user-wallet ./aitbc-cli wallet balance user-wallet
# Send transactions # Send transactions
./aitbc-cli send --from genesis-ops --to user-wallet --amount 100 --password 123 ./aitbc-cli wallet send genesis-ops user-wallet 100 123
# Check transaction history # Check transaction history
./aitbc-cli transactions --name genesis-ops --limit 10 ./aitbc-cli wallet transactions genesis-ops --limit 10
# Cross-node transaction # Cross-node transaction
FOLLOWER_ADDR=$(ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli list | grep "follower-ops:" | cut -d" " -f2') FOLLOWER_ADDR=$(ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet list | grep "follower-ops:" | cut -d" " -f2')
./aitbc-cli send --from genesis-ops --to $FOLLOWER_ADDR --amount 50 --password 123 ./aitbc-cli wallet send genesis-ops $FOLLOWER_ADDR 50 123
``` ```
## Health Monitoring ## Health Monitoring
@@ -216,7 +216,7 @@ curl -s http://localhost:8006/rpc/head | jq .height
sudo grep "Failed password" /var/log/auth.log | tail -10 sudo grep "Failed password" /var/log/auth.log | tail -10
# Monitor blockchain for suspicious activity # Monitor blockchain for suspicious activity
./aitbc-cli transactions --name genesis-ops --limit 20 | grep -E "(large|unusual)" ./aitbc-cli wallet transactions genesis-ops --limit 20 | grep -E "(large|unusual)"
# Check file permissions # Check file permissions
ls -la /var/lib/aitbc/ ls -la /var/lib/aitbc/

View File

@@ -111,17 +111,17 @@ echo "Height difference: $((FOLLOWER_HEIGHT - GENESIS_HEIGHT))"
```bash ```bash
# List all wallets # List all wallets
cd /opt/aitbc && source venv/bin/activate cd /opt/aitbc && source venv/bin/activate
./aitbc-cli list ./aitbc-cli wallet list
# Check specific wallet balance # Check specific wallet balance
./aitbc-cli balance --name genesis-ops ./aitbc-cli wallet balance genesis-ops
./aitbc-cli balance --name follower-ops ./aitbc-cli wallet balance follower-ops
# Verify wallet addresses # Verify wallet addresses
./aitbc-cli list | grep -E "(genesis-ops|follower-ops)" ./aitbc-cli wallet list | grep -E "(genesis-ops|follower-ops)"
# Test wallet operations # Test wallet operations
./aitbc-cli send --from genesis-ops --to follower-ops --amount 10 --password 123 ./aitbc-cli wallet send genesis-ops follower-ops 10 123
``` ```
### Network Verification ### Network Verification
@@ -133,7 +133,7 @@ ssh aitbc1 'ping -c 3 localhost'
# Test RPC endpoints # Test RPC endpoints
curl -s http://localhost:8006/rpc/head > /dev/null && echo "Local RPC OK" curl -s http://localhost:8006/rpc/head > /dev/null && echo "Local RPC OK"
ssh aitbc1 'curl -s http://localhost:8006/rpc/head > /dev/null && echo "Remote RPC OK"' ssh aitbc1 'curl -s http://localhost:8007/rpc/head > /dev/null && echo "Remote RPC OK"'
# Test P2P connectivity # Test P2P connectivity
telnet aitbc1 7070 telnet aitbc1 7070
@@ -146,16 +146,16 @@ ping -c 5 aitbc1 | tail -1
```bash ```bash
# Check AI services # Check AI services
./aitbc-cli marketplace --action list ./aitbc-cli market list
# Test AI job submission # Test AI job submission
./aitbc-cli ai-submit --wallet genesis-ops --type inference --prompt "test" --payment 10 ./aitbc-cli ai submit --wallet genesis-ops --type inference --prompt "test" --payment 10
# Verify resource allocation # Verify resource allocation
./aitbc-cli resource status ./aitbc-cli resource status
# Check AI job status # Check AI job status
./aitbc-cli ai-status --job-id "latest" ./aitbc-cli ai status --job-id "latest"
``` ```
### Smart Contract Verification ### Smart Contract Verification
@@ -263,16 +263,16 @@ Redis Service (for gossip)
```bash ```bash
# Quick health check # Quick health check
./aitbc-cli chain && ./aitbc-cli network ./aitbc-cli blockchain info && ./aitbc-cli network status
# Service status # Service status
systemctl status aitbc-blockchain-node.service aitbc-blockchain-rpc.service systemctl status aitbc-blockchain-node.service aitbc-blockchain-rpc.service
# Cross-node sync check # Cross-node sync check
curl -s http://localhost:8006/rpc/head | jq .height && ssh aitbc1 'curl -s http://localhost:8006/rpc/head | jq .height' curl -s http://localhost:8006/rpc/head | jq .height && ssh aitbc1 'curl -s http://localhost:8007/rpc/head | jq .height'
# Wallet balance check # Wallet balance check
./aitbc-cli balance --name genesis-ops ./aitbc-cli wallet balance genesis-ops
``` ```
### Troubleshooting ### Troubleshooting
@@ -347,20 +347,20 @@ SESSION_ID="task-$(date +%s)"
openclaw agent --agent main --session-id $SESSION_ID --message "Task description" openclaw agent --agent main --session-id $SESSION_ID --message "Task description"
# Always verify transactions # Always verify transactions
./aitbc-cli transactions --name wallet-name --limit 5 ./aitbc-cli wallet transactions wallet-name --limit 5
# Monitor cross-node synchronization # Monitor cross-node synchronization
watch -n 10 'curl -s http://localhost:8006/rpc/head | jq .height && ssh aitbc1 "curl -s http://localhost:8006/rpc/head | jq .height"' watch -n 10 'curl -s http://localhost:8006/rpc/head | jq .height && ssh aitbc1 "curl -s http://localhost:8007/rpc/head | jq .height"'
``` ```
### Development Best Practices ### Development Best Practices
```bash ```bash
# Test in development environment first # Test in development environment first
./aitbc-cli send --from test-wallet --to test-wallet --amount 1 --password test ./aitbc-cli wallet send test-wallet test-wallet 1 test
# Use meaningful wallet names # Use meaningful wallet names
./aitbc-cli create --name "genesis-operations" --password "strong_password" ./aitbc-cli wallet create "genesis-operations" "strong_password"
# Document all configuration changes # Document all configuration changes
git add /etc/aitbc/.env git add /etc/aitbc/.env
@@ -424,14 +424,14 @@ sudo systemctl restart aitbc-blockchain-node.service
**Problem**: Wallet balance incorrect **Problem**: Wallet balance incorrect
```bash ```bash
# Check correct node # Check correct node
./aitbc-cli balance --name wallet-name ./aitbc-cli wallet balance wallet-name
ssh aitbc1 './aitbc-cli balance --name wallet-name' ssh aitbc1 './aitbc-cli wallet balance wallet-name'
# Verify wallet address # Verify wallet address
./aitbc-cli list | grep "wallet-name" ./aitbc-cli wallet list | grep "wallet-name"
# Check transaction history # Check transaction history
./aitbc-cli transactions --name wallet-name --limit 10 ./aitbc-cli wallet transactions wallet-name --limit 10
``` ```
#### AI Operations Issues #### AI Operations Issues
@@ -439,16 +439,16 @@ ssh aitbc1 './aitbc-cli balance --name wallet-name'
**Problem**: AI jobs not processing **Problem**: AI jobs not processing
```bash ```bash
# Check AI services # Check AI services
./aitbc-cli marketplace --action list ./aitbc-cli market list
# Check resource allocation # Check resource allocation
./aitbc-cli resource status ./aitbc-cli resource status
# Check job status # Check AI job status
./aitbc-cli ai-status --job-id "job_id" ./aitbc-cli ai status --job-id "job_id"
# Verify wallet balance # Verify wallet balance
./aitbc-cli balance --name wallet-name ./aitbc-cli wallet balance wallet-name
``` ```
### Emergency Procedures ### Emergency Procedures

View File

@@ -103,7 +103,7 @@ ssh aitbc1 '/opt/aitbc/scripts/workflow/03_follower_node_setup.sh'
```bash ```bash
# Monitor sync progress on both nodes # Monitor sync progress on both nodes
watch -n 5 'echo "=== Genesis Node ===" && curl -s http://localhost:8006/rpc/head | jq .height && echo "=== Follower Node ===" && ssh aitbc1 "curl -s http://localhost:8006/rpc/head | jq .height"' watch -n 5 'echo "=== Genesis Node ===" && curl -s http://localhost:8006/rpc/head | jq .height && echo "=== Follower Node ===" && ssh aitbc1 "curl -s http://localhost:8007/rpc/head | jq .height"'
``` ```
### 5. Basic Wallet Operations ### 5. Basic Wallet Operations
@@ -113,30 +113,30 @@ watch -n 5 'echo "=== Genesis Node ===" && curl -s http://localhost:8006/rpc/hea
cd /opt/aitbc && source venv/bin/activate cd /opt/aitbc && source venv/bin/activate
# Create genesis operations wallet # Create genesis operations wallet
./aitbc-cli create --name genesis-ops --password 123 ./aitbc-cli wallet create genesis-ops 123
# Create user wallet # Create user wallet
./aitbc-cli create --name user-wallet --password 123 ./aitbc-cli wallet create user-wallet 123
# List wallets # List wallets
./aitbc-cli list ./aitbc-cli wallet list
# Check balances # Check balances
./aitbc-cli balance --name genesis-ops ./aitbc-cli wallet balance genesis-ops
./aitbc-cli balance --name user-wallet ./aitbc-cli wallet balance user-wallet
``` ```
### 6. Cross-Node Transaction Test ### 6. Cross-Node Transaction Test
```bash ```bash
# Get follower node wallet address # Get follower node wallet address
FOLLOWER_WALLET_ADDR=$(ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli create --name follower-ops --password 123 | grep "Address:" | cut -d" " -f2') FOLLOWER_WALLET_ADDR=$(ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet create follower-ops 123 | grep "Address:" | cut -d" " -f2')
# Send transaction from genesis to follower # Send transaction from genesis to follower
./aitbc-cli send --from genesis-ops --to $FOLLOWER_WALLET_ADDR --amount 1000 --password 123 ./aitbc-cli wallet send genesis-ops $FOLLOWER_WALLET_ADDR 1000 123
# Verify transaction on follower node # Verify transaction on follower node
ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli balance --name follower-ops' ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet balance follower-ops'
``` ```
## Verification Commands ## Verification Commands
@@ -148,15 +148,15 @@ ssh aitbc1 'systemctl status aitbc-blockchain-node.service aitbc-blockchain-rpc.
# Check blockchain heights match # Check blockchain heights match
curl -s http://localhost:8006/rpc/head | jq .height curl -s http://localhost:8006/rpc/head | jq .height
ssh aitbc1 'curl -s http://localhost:8006/rpc/head | jq .height' ssh aitbc1 'curl -s http://localhost:8007/rpc/head | jq .height'
# Check network connectivity # Check network connectivity
ping -c 3 aitbc1 ping -c 3 aitbc1
ssh aitbc1 'ping -c 3 localhost' ssh aitbc1 'ping -c 3 localhost'
# Verify wallet creation # Verify wallet creation
./aitbc-cli list ./aitbc-cli wallet list
ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli list' ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet list'
``` ```
## Troubleshooting Core Setup ## Troubleshooting Core Setup

View File

@@ -33,25 +33,25 @@ openclaw agent --agent main --session-id $SESSION_ID --message "Report progress"
# AITBC CLI — always from /opt/aitbc with venv # AITBC CLI — always from /opt/aitbc with venv
cd /opt/aitbc && source venv/bin/activate cd /opt/aitbc && source venv/bin/activate
./aitbc-cli create --name wallet-name ./aitbc-cli wallet create wallet-name
./aitbc-cli list ./aitbc-cli wallet list
./aitbc-cli balance --name wallet-name ./aitbc-cli wallet balance wallet-name
./aitbc-cli send --from wallet1 --to address --amount 100 --password pass ./aitbc-cli wallet send wallet1 address 100 pass
./aitbc-cli chain ./aitbc-cli blockchain info
./aitbc-cli network ./aitbc-cli network status
# AI Operations (NEW) # AI Operations (NEW)
./aitbc-cli ai-submit --wallet wallet --type inference --prompt "Generate image" --payment 100 ./aitbc-cli ai submit --wallet wallet --type inference --prompt "Generate image" --payment 100
./aitbc-cli agent create --name ai-agent --description "AI agent" ./aitbc-cli agent create --name ai-agent --description "AI agent"
./aitbc-cli resource allocate --agent-id ai-agent --gpu 1 --memory 8192 --duration 3600 ./aitbc-cli resource allocate --agent-id ai-agent --memory 8192 --duration 3600
./aitbc-cli marketplace --action create --name "AI Service" --price 50 --wallet wallet ./aitbc-cli market create --type ai-inference --price 50 --description "AI Service" --wallet wallet
# Cross-node — always activate venv on remote # Cross-node — always activate venv on remote
ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli list' ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet list'
# RPC checks # RPC checks
curl -s http://localhost:8006/rpc/head | jq '.height' curl -s http://localhost:8006/rpc/head | jq '.height'
ssh aitbc1 'curl -s http://localhost:8006/rpc/head | jq .height' ssh aitbc1 'curl -s http://localhost:8007/rpc/head | jq .height'
# Smart Contract Messaging (NEW) # Smart Contract Messaging (NEW)
curl -X POST http://localhost:8006/rpc/messaging/topics/create \ curl -X POST http://localhost:8006/rpc/messaging/topics/create \
@@ -219,11 +219,11 @@ openclaw agent --agent main --message "Teach me AITBC Agent Messaging Contract f
```bash ```bash
# Blockchain height (both nodes) # Blockchain height (both nodes)
curl -s http://localhost:8006/rpc/head | jq '.height' curl -s http://localhost:8006/rpc/head | jq '.height'
ssh aitbc1 'curl -s http://localhost:8006/rpc/head | jq .height' ssh aitbc1 'curl -s http://localhost:8007/rpc/head | jq .height'
# Wallets # Wallets
cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli list cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet list
ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli list' ssh aitbc1 'cd /opt/aitbc && source venv/bin/activate && ./aitbc-cli wallet list'
# Services # Services
systemctl is-active aitbc-blockchain-{node,rpc}.service systemctl is-active aitbc-blockchain-{node,rpc}.service

View File

@@ -0,0 +1,121 @@
---
description: OpenClaw specialized training workflow for agent-to-agent cross-node communication via AITBC blockchain
title: OpenClaw Cross-Node Communication Training
version: 1.0
---
# OpenClaw Cross-Node Communication Training
## Purpose
This specialized training module teaches OpenClaw agents how to establish, verify, and utilize cross-node communication channels over the AITBC blockchain network (between genesis node `aitbc` and follower node `aitbc1`).
## Learning Objectives
1. **Agent Registration**: Register OpenClaw agents on multiple distinct blockchain nodes.
2. **Peer Discovery**: Discover agent endpoints and IDs across the blockchain state.
3. **Cross-Node Messaging**: Send and receive secure messages via blockchain transactions.
4. **Task Coordination**: Delegate AI tasks from a genesis-based agent to a follower-based agent.
5. **Event Monitoring**: Subscribe to and parse blockchain events for incoming messages.
## Prerequisites
- Completed [Stage 2 of the Mastery Plan](/OPENCLAW_AITBC_MASTERY_PLAN.md)
- Both nodes synchronized and communicating on port 8006
- Funded wallets on both nodes (`openclaw-trainee` and `follower-ops`)
## Training Modules
### Module 1: Cross-Node Agent Registration
Agents must be registered on the blockchain to receive messages.
```bash
# Genesis Node (aitbc: 10.1.223.40)
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli agent create \
--name "openclaw-genesis-commander" \
--description "Primary coordinator agent on genesis node" \
--verification full \
--verbose
# Follower Node (aitbc1: <aitbc1-ip>)
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent create \
--name "openclaw-follower-worker" \
--description "Worker agent on follower node" \
--verification full \
--debug
```
### Module 2: Cross-Node Messaging Protocol
Learn to format and transmit messages between the registered agents.
```bash
# Get follower agent ID
FOLLOWER_AGENT_ID=$(NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent list --output json | jq -r '.[] | select(.name=="openclaw-follower-worker") | .id')
# Send instruction from genesis to follower
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli agent message \
--to $FOLLOWER_AGENT_ID \
--content "{\"cmd\":\"STATUS_REPORT\",\"priority\":\"high\"}" \
--verbose
```
### Module 3: Message Retrieval and Parsing
The follower agent must listen for and decode messages.
```bash
# Retrieve messages on follower node
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent messages \
--from openclaw-genesis-commander \
--output json
# Acknowledge receipt (Follower -> Genesis)
GENESIS_AGENT_ID=$(NODE_URL=http://10.1.223.40:8006 ./aitbc-cli agent list --output json | jq -r '.[] | select(.name=="openclaw-genesis-commander") | .id')
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent message \
--to $GENESIS_AGENT_ID \
--content "{\"cmd\":\"ACK\",\"status\":\"READY\"}" \
--debug
```
### Module 4: Distributed Task Execution
Combine AI job submission with cross-node agent coordination.
```bash
# Genesis instructs Follower to execute AI Job
NODE_URL=http://10.1.223.40:8006 ./aitbc-cli agent message \
--to $FOLLOWER_AGENT_ID \
--content "{\"cmd\":\"EXECUTE_AI_JOB\",\"type\":\"inference\",\"prompt\":\"Analyze load\"}"
# Follower receives, executes locally, and returns result to Genesis
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli ai job submit \
--type inference \
--prompt "Analyze load" \
--yes
NODE_URL=http://<aitbc1-ip>:8006 ./aitbc-cli agent message \
--to $GENESIS_AGENT_ID \
--content "{\"cmd\":\"JOB_COMPLETE\",\"result_id\":\"job_123\"}"
```
## Automated Training Script
Execute the specialized training script to practice these operations autonomously.
**Script Path:** `/opt/aitbc/scripts/training/openclaw_cross_node_comm.sh`
```bash
# Run the interactive training
cd /opt/aitbc/scripts/training
./openclaw_cross_node_comm.sh
# Run in automated evaluation mode
./openclaw_cross_node_comm.sh --auto-eval
```
## Success Validation
An OpenClaw agent has mastered cross-node communication when it can:
1. Parse the local state to find remote agent IDs.
2. Construct and broadcast a valid JSON payload in an `agent message` transaction.
3. Automatically poll or listen for response messages on the remote node.
4. Handle network latency or temporary sync delays gracefully using retry logic.
5. Successfully complete a round-trip (Genesis -> Follower -> Genesis) message exchange within 60 seconds.
## Related Skills
- [aitbc-node-coordinator](/aitbc-node-coordinator.md)
- [openclaw-coordination-orchestrator](/openclaw-coordination-orchestrator.md)

View File

@@ -1,144 +0,0 @@
# AITBC1 Server Test Commands
## 🚀 **Sync and Test Instructions**
Run these commands on the **aitbc1 server** to test the workflow migration:
### **Step 1: Sync from Gitea**
```bash
# Navigate to AITBC directory
cd /opt/aitbc
# Pull latest changes from localhost aitbc (Gitea)
git pull origin main
```
### **Step 2: Run Comprehensive Test**
```bash
# Execute the automated test script
./scripts/testing/aitbc1_sync_test.sh
```
### **Step 3: Manual Verification (Optional)**
```bash
# Check that pre-commit config is gone
ls -la .pre-commit-config.yaml
# Should show: No such file or directory
# Check workflow files exist
ls -la .windsurf/workflows/
# Should show: code-quality.md, type-checking-ci-cd.md, etc.
# Test git operations (no warnings)
echo "test" > test_file.txt
git add test_file.txt
git commit -m "test: verify no pre-commit warnings"
git reset --hard HEAD~1
rm test_file.txt
# Test type checking
./scripts/type-checking/check-coverage.sh
# Test MyPy
./venv/bin/mypy --ignore-missing-imports apps/coordinator-api/src/app/domain/job.py
```
## 📋 **Expected Results**
### ✅ **Successful Sync**
- Git pull completes without errors
- Latest workflow files are available
- No pre-commit configuration file
### ✅ **No Pre-commit Warnings**
- Git add/commit operations work silently
- No "No .pre-commit-config.yaml file was found" messages
- Clean git operations
### ✅ **Workflow System Working**
- Type checking script executes
- MyPy runs on domain models
- Workflow documentation accessible
### ✅ **File Organization**
- `.windsurf/workflows/` contains workflow files
- `scripts/type-checking/` contains type checking tools
- `config/quality/` contains quality configurations
## 🔧 **Debugging**
### **If Git Pull Fails**
```bash
# Check remote configuration
git remote -v
# Force pull if needed
git fetch origin main
git reset --hard origin/main
```
### **If Type Checking Fails**
```bash
# Check dependencies
./venv/bin/pip install mypy sqlalchemy sqlmodel fastapi
# Check script permissions
chmod +x scripts/type-checking/check-coverage.sh
# Run manually
./venv/bin/mypy --ignore-missing-imports apps/coordinator-api/src/app/domain/
```
### **If Pre-commit Warnings Appear**
```bash
# Check if pre-commit is still installed
./venv/bin/pre-commit --version
# Uninstall if needed
./venv/bin/pre-commit uninstall
# Check git config
git config --get pre-commit.allowMissingConfig
# Should return: true
```
## 📊 **Test Checklist**
- [ ] Git pull from Gitea successful
- [ ] No pre-commit warnings on git operations
- [ ] Workflow files present in `.windsurf/workflows/`
- [ ] Type checking script executable
- [ ] MyPy runs without errors
- [ ] Documentation accessible
- [ ] No `.pre-commit-config.yaml` file
- [ ] All tests in script pass
## 🎯 **Success Indicators**
### **Green Lights**
```
[SUCCESS] Successfully pulled from Gitea
[SUCCESS] Pre-commit config successfully removed
[SUCCESS] Type checking test passed
[SUCCESS] MyPy test on job.py passed
[SUCCESS] Git commit successful (no pre-commit warnings)
[SUCCESS] AITBC1 server sync and test completed successfully!
```
### **File Structure**
```
/opt/aitbc/
├── .windsurf/workflows/
│ ├── code-quality.md
│ ├── type-checking-ci-cd.md
│ └── MULTI_NODE_MASTER_INDEX.md
├── scripts/type-checking/
│ └── check-coverage.sh
├── config/quality/
│ └── requirements-consolidated.txt
└── (no .pre-commit-config.yaml file)
```
---
**Run these commands on aitbc1 server to verify the workflow migration is working correctly!**

View File

@@ -1,135 +0,0 @@
# AITBC1 Server - Updated Commands
## 🎯 **Status Update**
The aitbc1 server test was **mostly successful**! ✅
### **✅ What Worked**
- Git pull from Gitea: ✅ Successful
- Workflow files: ✅ Available (17 files)
- Pre-commit removal: ✅ Confirmed (no warnings)
- Git operations: ✅ No warnings on commit
### **⚠️ Minor Issues Fixed**
- Missing workflow files: ✅ Now pushed to Gitea
- .windsurf in .gitignore: ✅ Fixed (now tracking workflows)
## 🚀 **Updated Commands for AITBC1**
### **Step 1: Pull Latest Changes**
```bash
# On aitbc1 server:
cd /opt/aitbc
git pull origin main
```
### **Step 2: Install Missing Dependencies**
```bash
# Install MyPy for type checking
./venv/bin/pip install mypy sqlalchemy sqlmodel fastapi
```
### **Step 3: Verify New Workflow Files**
```bash
# Check that new workflow files are now available
ls -la .windsurf/workflows/code-quality.md
ls -la .windsurf/workflows/type-checking-ci-cd.md
# Should show both files exist
```
### **Step 4: Test Type Checking**
```bash
# Now test type checking with dependencies installed
./scripts/type-checking/check-coverage.sh
# Test MyPy directly
./venv/bin/mypy --ignore-missing-imports apps/coordinator-api/src/app/domain/job.py
```
### **Step 5: Run Full Test Again**
```bash
# Run the comprehensive test script again
./scripts/testing/aitbc1_sync_test.sh
```
## 📊 **Expected Results After Update**
### **✅ Perfect Test Output**
```
[SUCCESS] Successfully pulled from Gitea
[SUCCESS] Workflow directory found
[SUCCESS] Pre-commit config successfully removed
[SUCCESS] Type checking script found
[SUCCESS] Type checking test passed
[SUCCESS] MyPy test on job.py passed
[SUCCESS] Git commit successful (no pre-commit warnings)
[SUCCESS] AITBC1 server sync and test completed successfully!
```
### **📁 New Files Available**
```
.windsurf/workflows/
├── code-quality.md # ✅ NEW
├── type-checking-ci-cd.md # ✅ NEW
└── MULTI_NODE_MASTER_INDEX.md # ✅ Already present
```
## 🔧 **If Issues Persist**
### **MyPy Still Not Found**
```bash
# Check venv activation
source ./venv/bin/activate
# Install in correct venv
pip install mypy sqlalchemy sqlmodel fastapi
# Verify installation
which mypy
./venv/bin/mypy --version
```
### **Workflow Files Still Missing**
```bash
# Force pull latest changes
git fetch origin main
git reset --hard origin/main
# Check files
find .windsurf/workflows/ -name "*.md" | wc -l
# Should show 19+ files
```
## 🎉 **Success Criteria**
### **Complete Success Indicators**
-**Git operations**: No pre-commit warnings
-**Workflow files**: 19+ files available
-**Type checking**: MyPy working and script passing
-**Documentation**: New workflows accessible
-**Migration**: 100% complete
### **Final Verification**
```bash
# Quick verification commands
echo "=== Verification ==="
echo "1. Git operations (should be silent):"
echo "test" > verify.txt && git add verify.txt && git commit -m "verify" && git reset --hard HEAD~1 && rm verify.txt
echo "2. Workflow files:"
ls .windsurf/workflows/*.md | wc -l
echo "3. Type checking:"
./scripts/type-checking/check-coverage.sh | head -5
```
---
## 📞 **Next Steps**
1. **Run the updated commands** above on aitbc1
2. **Verify all tests pass** with new dependencies
3. **Test the new workflow system** instead of pre-commit
4. **Enjoy the improved documentation** and organization!
**The migration is essentially complete - just need to install MyPy dependencies on aitbc1!** 🚀

View File

@@ -1,162 +0,0 @@
# Python 3.13 Version Status
## 🎯 **Current Status Report**
### **✅ You're Already Running the Latest!**
Your current Python installation is **already up-to-date**:
```
System Python: 3.13.5
Virtual Environment: 3.13.5
Latest Available: 3.13.5
```
### **📊 Version Details**
#### **Current Installation**
```bash
# System Python
python3.13 --version
# Output: Python 3.13.5
# Virtual Environment
./venv/bin/python --version
# Output: Python 3.13.5
# venv Configuration
cat venv/pyvenv.cfg
# version = 3.13.5
```
#### **Package Installation Status**
All Python 3.13 packages are properly installed:
- ✅ python3.13 (3.13.5-2)
- ✅ python3.13-dev (3.13.5-2)
- ✅ python3.13-venv (3.13.5-2)
- ✅ libpython3.13-dev (3.13.5-2)
- ✅ All supporting packages
### **🔍 Verification Commands**
#### **Check Current Version**
```bash
# System version
python3.13 --version
# Virtual environment version
./venv/bin/python --version
# Package list
apt list --installed | grep python3.13
```
#### **Check for Updates**
```bash
# Check for available updates
apt update
apt list --upgradable | grep python3.13
# Currently: No updates available
# Status: Running latest version
```
### **🚀 Performance Benefits of Python 3.13.5**
#### **Key Improvements**
- **🚀 Performance**: 5-10% faster than 3.12
- **🧠 Memory**: Better memory management
- **🔧 Error Messages**: Improved error reporting
- **🛡️ Security**: Latest security patches
- **⚡ Compilation**: Faster startup times
#### **AITBC-Specific Benefits**
- **Type Checking**: Better MyPy integration
- **FastAPI**: Improved async performance
- **SQLAlchemy**: Optimized database operations
- **AI/ML**: Enhanced numpy/pandas compatibility
### **📋 Maintenance Checklist**
#### **Monthly Check**
```bash
# Check for Python updates
apt update
apt list --upgradable | grep python3.13
# Check venv integrity
./venv/bin/python --version
./venv/bin/pip list --outdated
```
#### **Quarterly Maintenance**
```bash
# Update system packages
apt update && apt upgrade -y
# Update pip packages
./venv/bin/pip install --upgrade pip
./venv/bin/pip list --outdated
./venv/bin/p install --upgrade <package-name>
```
### **🔄 Future Upgrade Path**
#### **When Python 3.14 is Released**
```bash
# Monitor for new releases
apt search python3.14
# Upgrade path (when available)
apt install python3.14 python3.14-venv
# Recreate virtual environment
deactivate
rm -rf venv
python3.14 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
### **🎯 Current Recommendations**
#### **Immediate Actions**
-**No action needed**: Already running latest 3.13.5
-**System is optimal**: All packages up-to-date
-**Performance optimized**: Latest improvements applied
#### **Monitoring**
- **Monthly**: Check for security updates
- **Quarterly**: Update pip packages
- **Annually**: Review Python version strategy
### **📈 Version History**
| Version | Release Date | Status | Notes |
|---------|--------------|--------|-------|
| 3.13.5 | Current | ✅ Active | Latest stable |
| 3.13.4 | Previous | ✅ Supported | Security fixes |
| 3.13.3 | Previous | ✅ Supported | Bug fixes |
| 3.13.2 | Previous | ✅ Supported | Performance |
| 3.13.1 | Previous | ✅ Supported | Stability |
| 3.13.0 | Previous | ✅ Supported | Initial release |
---
## 🎉 **Summary**
**You're already running the latest and greatest Python 3.13.5!**
-**Latest Version**: 3.13.5 (most recent stable)
-**All Packages Updated**: Complete installation
-**Optimal Performance**: Latest improvements
-**Security Current**: Latest patches applied
-**AITBC Ready**: Perfect for your project needs
**No upgrade needed - you're already at the forefront!** 🚀
---
*Last Checked: April 1, 2026*
*Status: ✅ UP TO DATE*
*Next Check: May 1, 2026*

820
README.md
View File

@@ -1,715 +1,145 @@
# AITBC - AI Training Blockchain # AITBC - Advanced Intelligence Training Blockchain Consortium
**Advanced AI Platform with OpenClaw Agent Ecosystem** ## Project Structure
[![Documentation](https://img.shields.io/badge/Documentation-10%2F10-brightgreen.svg)](docs/README.md) This project has been organized for better maintainability. Here's the directory structure:
[![Quality](https://img.shields.io/badge/Quality-Perfect-green.svg)](docs/about/PHASE_3_COMPLETION_10_10_ACHIEVED.md)
[![Status](https://img.shields.io/badge/Status-Production%20Ready-blue.svg)](docs/README.md#-current-status-production-ready---march-18-2026)
[![OpenClaw](https://img.shields.io/badge/OpenClaw-Advanced%20AI%20Agents-purple.svg)](docs/openclaw/OPENCLAW_AGENT_CAPABILITIES_ADVANCED.md)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
--- ### 📁 Essential Root Files
- `LICENSE` - Project license
- `aitbc-cli` - Main CLI symlink
- `README.md` - This file
## 🎯 **What is AITBC?** ### 📁 Core Directories
- `aitbc/` - Core AITBC Python package
- `cli/` - Command-line interface implementation
- `contracts/` - Smart contracts
- `scripts/` - Automation and deployment scripts
- `services/` - Microservices
- `tests/` - Test suites
AITBC (AI Training Blockchain) is a revolutionary platform that combines **advanced AI capabilities** with **OpenClaw agent ecosystem** on a **blockchain infrastructure**. Our platform enables: ### 📁 Configuration
- `project-config/` - Project configuration files
- `pyproject.toml` - Python project configuration
- `requirements.txt` - Python dependencies
- `poetry.lock` - Dependency lock file
- `.gitignore` - Git ignore rules
- `.deployment_progress` - Deployment tracking
- **🤖 Advanced AI Operations**: Complex workflow orchestration, multi-model pipelines, resource optimization ### 📁 Documentation
- **🦞 OpenClaw Agents**: Intelligent agents with advanced AI teaching plan mastery (100% complete) - `docs/` - Comprehensive documentation
- **🔒 Privacy Preservation**: Secure, private ML model training and inference - `README.md` - Main project documentation
- **⚡ Edge Computing**: Distributed computation at the network edge - `SETUP.md` - Setup instructions
- **⛓️ Blockchain Security**: Immutable, transparent, and secure transactions - `PYTHON_VERSION_STATUS.md` - Python compatibility
- **🌐 Multi-Chain Support**: Interoperable blockchain ecosystem - `AITBC1_TEST_COMMANDS.md` - Testing commands
- `AITBC1_UPDATED_COMMANDS.md` - Updated commands
- `README_DOCUMENTATION.md` - Detailed documentation
### 🎓 **Advanced AI Teaching Plan - 100% Complete** ### 📁 Development
- `dev/` - Development tools and examples
- `.windsurf/` - IDE configuration
- `packages/` - Package distributions
- `extensions/` - Browser extensions
- `plugins/` - System plugins
Our OpenClaw agents have mastered advanced AI capabilities through a comprehensive 3-phase teaching program: ### 📁 Infrastructure
- `infra/` - Infrastructure as code
- `systemd/` - System service configurations
- `monitoring/` - Monitoring setup
- **📚 Phase 1**: Advanced AI Workflow Orchestration (Complex pipelines, parallel operations) ### 📁 Applications
- **📚 Phase 2**: Multi-Model AI Pipelines (Ensemble management, multi-modal processing) - `apps/` - Application components
- **📚 Phase 3**: AI Resource Optimization (Dynamic allocation, performance tuning) - `services/` - Service implementations
- `website/` - Web interface
**🤖 Agent Capabilities**: Medical diagnosis, customer feedback analysis, AI service provider optimization ### 📁 AI & GPU
- `gpu_acceleration/` - GPU optimization
- `ai-ml/` - AI/ML components
--- ### 📁 Security & Backup
- `security/` - Security reports and fixes
- `backup-config/` - Backup configurations
- `backups/` - Data backups
## 🚀 **Quick Start** ### 📁 Cache & Logs
- `venv/` - Python virtual environment
- `logs/` - Application logs
- `.mypy_cache/`, `.pytest_cache/`, `.ruff_cache/` - Tool caches
## Quick Start
### **👤 For Users:**
```bash ```bash
# Install CLI # Setup environment
git clone https://github.com/oib/AITBC.git
cd AITBC/cli
pip install -e .
# Start using AITBC
aitbc --help
aitbc version
# Try advanced AI operations
aitbc ai-submit --wallet genesis-ops --type multimodal --prompt "Multi-modal AI analysis" --payment 1000
```
### **🤖 For OpenClaw Agent Users:**
```bash
# Run advanced AI workflow
cd /opt/aitbc cd /opt/aitbc
./scripts/workflow-openclaw/06_advanced_ai_workflow_openclaw.sh
# Use OpenClaw agents directly
openclaw agent --agent GenesisAgent --session-id "my-session" --message "Execute advanced AI workflow" --thinking high
```
### **👨‍💻 For Developers:**
```bash
# Setup development environment
git clone https://github.com/oib/AITBC.git
cd AITBC
./scripts/setup.sh
# Install with dependency profiles
./scripts/install-profiles.sh minimal
./scripts/install-profiles.sh web database
# Run code quality checks
./venv/bin/pre-commit run --all-files
./venv/bin/mypy --ignore-missing-imports apps/coordinator-api/src/app/domain/
# Start development services
./scripts/development/dev-services.sh
```
### **⛏️ For Miners:**
```bash
# Start mining
aitbc miner start --config miner-config.yaml
# Check mining status
aitbc miner status
```
---
## 📊 **Current Status: PRODUCTION READY**
**🎉 Achievement Date**: March 18, 2026
**🎓 Advanced AI Teaching Plan**: March 30, 2026 (100% Complete)
**📈 Quality Score**: 10/10 (Perfect Documentation)
**🔧 Infrastructure**: Fully operational production environment
### ✅ **Completed Features (100%)**
- **🏗️ Core Infrastructure**: Coordinator API, Blockchain Node, Miner Node fully operational
- **💻 Enhanced CLI System**: 30+ command groups with comprehensive testing (91% success rate)
- **🔄 Exchange Infrastructure**: Complete exchange CLI commands and market integration
- **⛓️ Multi-Chain Support**: Complete 7-layer architecture with chain isolation
- **🤖 Advanced AI Operations**: Complex workflow orchestration, multi-model pipelines, resource optimization
- **🦞 OpenClaw Agent Ecosystem**: Advanced AI agents with 3-phase teaching plan mastery
- **🔒 Security**: Multi-sig, time-lock, and compliance features implemented
- **🚀 Production Setup**: Complete production blockchain setup with encrypted keystores
- **🧠 AI Memory System**: Development knowledge base and agent documentation
- **🛡️ Enhanced Security**: Secure pickle deserialization and vulnerability scanning
- **📁 Repository Organization**: Professional structure with clean root directory
- **🔄 Cross-Platform Sync**: GitHub ↔ Gitea fully synchronized
- **⚡ Code Quality Excellence**: Pre-commit hooks, Black formatting, type checking (CI/CD integrated)
- **📦 Dependency Consolidation**: Unified dependency management with installation profiles
- **🔍 Type Checking Implementation**: Comprehensive type safety with 100% core domain coverage
- **📊 Project Organization**: Clean root directory with logical file grouping
### 🎯 **Latest Achievements (March 31, 2026)**
- **🎉 Perfect Documentation**: 10/10 quality score achieved
- **🎓 Advanced AI Teaching Plan**: 100% complete (3 phases, 6 sessions)
- **🤖 OpenClaw Agent Mastery**: Advanced AI workflow orchestration, multi-model pipelines, resource optimization
- **⛓️ Multi-Chain System**: Complete 7-layer architecture operational
- **📚 Documentation Excellence**: World-class documentation with perfect organization
- **⚡ Code Quality Implementation**: Full automated quality checks with type safety
- **📦 Dependency Management**: Consolidated dependencies with profile-based installations
- **🔍 Type Checking**: Complete MyPy implementation with CI/CD integration
- **📁 Project Organization**: Professional structure with 52% root file reduction
---
## 📁 **Project Structure**
The AITBC project is organized with a clean root directory containing only essential files:
```
/opt/aitbc/
├── README.md # Main documentation
├── SETUP.md # Setup guide
├── LICENSE # Project license
├── pyproject.toml # Python configuration
├── requirements.txt # Dependencies
├── .pre-commit-config.yaml # Code quality hooks
├── apps/ # Application services
├── cli/ # Command-line interface
├── scripts/ # Automation scripts
├── config/ # Configuration files
├── docs/ # Documentation
├── tests/ # Test suite
├── infra/ # Infrastructure
└── contracts/ # Smart contracts
```
### Key Directories
- **`apps/`** - Core application services (coordinator-api, blockchain-node, etc.)
- **`scripts/`** - Setup and automation scripts
- **`config/quality/`** - Code quality tools and configurations
- **`docs/reports/`** - Implementation reports and summaries
- **`cli/`** - Command-line interface tools
For detailed structure information, see [PROJECT_STRUCTURE.md](docs/PROJECT_STRUCTURE.md).
---
## ⚡ **Recent Improvements (March 2026)**
### **<2A> Code Quality Excellence**
- **Pre-commit Hooks**: Automated quality checks on every commit
- **Black Formatting**: Consistent code formatting across all files
- **Type Checking**: Comprehensive MyPy implementation with CI/CD integration
- **Import Sorting**: Standardized import organization with isort
- **Linting Rules**: Ruff configuration for code quality enforcement
### **📦 Dependency Management**
- **Consolidated Dependencies**: Unified dependency management across all services
- **Installation Profiles**: Profile-based installations (minimal, web, database, blockchain)
- **Version Conflicts**: Eliminated all dependency version conflicts
- **Service Migration**: Updated all services to use consolidated dependencies
### **📁 Project Organization**
- **Clean Root Directory**: Reduced from 25+ files to 12 essential files
- **Logical Grouping**: Related files organized into appropriate subdirectories
- **Professional Structure**: Follows Python project best practices
- **Documentation**: Comprehensive project structure documentation
### **🚀 Developer Experience**
- **Automated Quality**: Pre-commit hooks and CI/CD integration
- **Type Safety**: 100% type coverage for core domain models
- **Fast Installation**: Profile-based dependency installation
- **Clear Documentation**: Updated guides and implementation reports
---
### 🤖 **Advanced AI Capabilities**
- **📚 Phase 1**: Advanced AI Workflow Orchestration (Complex pipelines, parallel operations)
- **📚 Phase 2**: Multi-Model AI Pipelines (Ensemble management, multi-modal processing)
- **📚 Phase 3**: AI Resource Optimization (Dynamic allocation, performance tuning)
- **🎓 Agent Mastery**: Genesis, Follower, Coordinator, AI Resource, Multi-Modal agents
- **🔄 Cross-Node Coordination**: Smart contract messaging and distributed optimization
### 📋 **Current Release: v0.2.3**
- **Release Date**: March 2026
- **Focus**: Advanced AI Teaching Plan completion and AI Economics Masters transformation
- **📖 Release Notes**: [View detailed release notes](RELEASE_v0.2.3.md)
- **🎯 Status**: Production ready with AI Economics Masters capabilities
---
## 🏗️ **Architecture Overview**
```
AITBC Ecosystem
├── 🤖 Advanced AI Components
│ ├── Complex AI Workflow Orchestration (Phase 1)
│ ├── Multi-Model AI Pipelines (Phase 2)
│ ├── AI Resource Optimization (Phase 3)
│ ├── OpenClaw Agent Ecosystem
│ │ ├── Genesis Agent (Advanced AI operations)
│ │ ├── Follower Agent (Distributed coordination)
│ │ ├── Coordinator Agent (Multi-agent orchestration)
│ │ ├── AI Resource Agent (Resource management)
│ │ └── Multi-Modal Agent (Cross-modal processing)
│ ├── Trading Engine with ML predictions
│ ├── Surveillance System (88-94% accuracy)
│ ├── Analytics Platform
│ └── Agent SDK for custom AI agents
├── ⛓️ Blockchain Infrastructure
│ ├── Multi-Chain Support (7-layer architecture)
│ ├── Privacy-Preserving Transactions
│ ├── Smart Contract Integration
│ ├── Cross-Chain Protocols
│ └── Agent Messaging Contracts
├── 💻 Developer Tools
│ ├── Comprehensive CLI (30+ commands)
│ ├── Advanced AI Operations (ai-submit, ai-ops)
│ ├── Resource Management (resource allocate, monitor)
│ ├── Simulation Framework (simulate blockchain, wallets, price, network, ai-jobs)
│ ├── Agent Development Kit
│ ├── Testing Framework (91% success rate)
│ └── API Documentation
├── 🔒 Security & Compliance
│ ├── Multi-Sig Wallets
│ ├── Time-Lock Transactions
│ ├── KYC/AML Integration
│ └── Security Auditing
└── 🌐 Ecosystem Services
├── Exchange Integration
├── Marketplace Platform
├── Governance System
├── OpenClaw Agent Coordination
└── Community Tools
```
---
## 📚 **Documentation**
Our documentation has achieved **perfect 10/10 quality score** and provides comprehensive guidance for all users:
### **🎯 Learning Paths:**
- **👤 [Beginner Guide](docs/beginner/README.md)** - Start here (8-15 hours)
- **🌉 [Intermediate Topics](docs/intermediate/README.md)** - Bridge concepts (18-28 hours)
- **🚀 [Advanced Documentation](docs/advanced/README.md)** - Deep technical (20-30 hours)
- **🎓 [Expert Topics](docs/expert/README.md)** - Specialized expertise (24-48 hours)
- **🤖 [OpenClaw Agent Capabilities](docs/openclaw/OPENCLAW_AGENT_CAPABILITIES_ADVANCED.md)** - Advanced AI agents (15-25 hours)
### **📚 Quick Access:**
- **🔍 [Master Index](docs/MASTER_INDEX.md)** - Complete content catalog
- **🏠 [Documentation Home](docs/README.md)** - Main documentation entry
- **📖 [About Documentation](docs/about/)** - Documentation about docs
- **🗂️ [Archive](docs/archive/README.md)** - Historical documentation
- **🦞 [OpenClaw Documentation](docs/openclaw/)** - Advanced AI agent ecosystem
### **🔗 External Documentation:**
- **💻 [CLI Technical Docs](docs/cli-technical/)** - Deep CLI documentation
- **📜 [Smart Contracts](docs/contracts/)** - Contract documentation
- **🧪 [Testing](docs/testing/)** - Test documentation
- **🌐 [Website](docs/website/)** - Website documentation
- **🤖 [CLI Documentation](docs/CLI_DOCUMENTATION.md)** - Complete CLI reference with advanced AI operations
---
## 🛠️ **Installation**
### **System Requirements:**
- **Python**: 3.13.5+ (exact version required)
- **Node.js**: 24.14.0+ (exact version required)
- **Git**: Latest version
- **Docker**: Not supported (do not use)
### **🔍 Root Cause Analysis:**
The system requirements are based on actual project configuration:
- **Python 3.13.5+**: Defined in `pyproject.toml` as `requires-python = ">=3.13.5"`
- **Node.js 24.14.0+**: Defined in `config/.nvmrc` as `24.14.0`
- **No Docker Support**: Docker is not used in this project
### **🚀 Quick Installation:**
```bash
# Clone the repository
git clone https://github.com/oib/AITBC.git
cd AITBC
# Install CLI tool (requires virtual environment)
cd cli
python3 -m venv venv
source venv/bin/activate source venv/bin/activate
pip install -e .
# Verify installation # Install dependencies
aitbc version pip install -r requirements.txt
aitbc --help
# OPTIONAL: Add convenient alias for easy access # Run CLI
echo 'alias aitbc="source /opt/aitbc/cli/venv/bin/activate && aitbc"' >> ~/.bashrc ./aitbc-cli --help
source ~/.bashrc
# Now you can use 'aitbc' from anywhere! # Run training
./scripts/training/master_training_launcher.sh
# Cross-node communication training
./scripts/training/openclaw_cross_node_comm.sh
``` ```
### **🔧 Development Setup:** ## Recent Achievements
```bash
# Clone the repository ### Multi-Node Blockchain Synchronization (April 10, 2026)
git clone https://github.com/oib/AITBC.git - **Gossip Backend Configuration**: Fixed both nodes to use broadcast backend with Redis
cd AITBC - aitbc: `gossip_backend=broadcast`, `gossip_broadcast_url=redis://localhost:6379`
- aitbc1: `gossip_backend=broadcast`, `gossip_broadcast_url=redis://10.1.223.40:6379`
# Install CLI tool (requires virtual environment) - **PoA Consensus Enhancements**: Fixed busy-loop issue in poa.py when mempool is empty
cd cli - Added `propose_only_if_mempool_not_empty=true` configuration
python3 -m venv venv - Modified `_propose_block` to return boolean indicating if a block was proposed
source venv/bin/activate - **Transaction Synchronization**: Fixed transaction parsing in sync.py
pip install -e ".[dev]" - Updated `_append_block` to use correct field names (from/to instead of sender/recipient)
- **RPC Endpoint Enhancements**: Fixed blocks-range endpoint to include parent_hash and proposer fields
# Verify correct Python version - **Block Synchronization Verification**: Both nodes in sync at height 27201
python3 --version # Should be 3.13.5+ - **Git Conflict Resolution**: Fixed gitea pull conflicts on aitbc1 by stashing local changes
# Verify correct Node.js version ### OpenClaw Agent Communication (April 10, 2026)
node --version # Should be 24.14.0+ - **Successfully sent agent message** from aitbc1 to aitbc
- **Wallet used**: temp-agent with password "temp123"
# Run tests - **Transaction hash**: 0xdcf365542237eb8e40d0aa1cdb3fec2e77dbcb2475c30457682cf385e974b7b8
pytest - **Agent daemon**: Running on aitbc configured to reply with "pong" on "ping"
- **Agent daemon service**: Deployed with systemd integration
# Install pre-commit hooks
pre-commit install ### Multi-Node Blockchain Network
- **Genesis Node (aitbc1)**: Height 27201+, operational at 10.1.223.40:8006
# OPTIONAL: Add convenient alias for easy access - **Follower Node (aitbc)**: Height 27201+, operational at 10.1.223.93:8006
echo 'alias aitbc="source /opt/aitbc/cli/venv/bin/activate && aitbc"' >> ~/.bashrc - **Synchronization**: Nodes synchronized via gossip with Redis backend
source ~/.bashrc - **RPC Services**: Running on both nodes
```
### Documentation Updates (April 10, 2026)
### **⚠️ Version Compliance:** - **Blockchain Synchronization**: `docs/blockchain/blockchain_synchronization_issues_and_fixes.md`
- **Python**: Must be exactly 3.13.5 or higher - **OpenClaw Cross-Node Communication**: `docs/openclaw/guides/openclaw_cross_node_communication.md`
- **Node.js**: Must be exactly 24.14.0 or higher - **Cross-Node Training**: `docs/openclaw/training/cross_node_communication_training.md`
- **Docker**: Not supported - do not attempt to use - **Agent Daemon Service**: `services/agent_daemon.py` with systemd integration
- **Package Manager**: Use pip for Python, npm for Node.js packages
## Development
---
See `docs/SETUP.md` for detailed setup instructions.
## 🤖 **OpenClaw Agent Usage**
## Documentation
### **🎓 Advanced AI Agent Ecosystem**
Our OpenClaw agents have completed the **Advanced AI Teaching Plan** and are now sophisticated AI specialists: ### Recent Documentation Updates
- [Cross-Node Communication Guide](docs/openclaw/guides/openclaw_cross_node_communication.md) - Implementation guide for multi-node agent messaging
#### **🚀 Quick Start with OpenClaw Agents** - [Blockchain Synchronization Issues](docs/blockchain/blockchain_synchronization_issues_and_fixes.md) - Detailed documentation of sync fixes and workarounds
```bash - [Cross-Node Training Module](docs/openclaw/training/cross_node_communication_training.md) - Training workflow for agent communication
# Run complete advanced AI workflow - [OpenClaw Documentation](docs/openclaw/README.md) - Complete OpenClaw integration documentation
cd /opt/aitbc
./scripts/workflow-openclaw/06_advanced_ai_workflow_openclaw.sh ### Core Documentation
- [Main Documentation](docs/README.md) - Comprehensive project documentation
# Use individual agents - [Setup Instructions](docs/SETUP.md) - Installation and configuration guide
openclaw agent --agent GenesisAgent --session-id "my-session" --message "Execute complex AI pipeline" --thinking high - [Python Compatibility](docs/PYTHON_VERSION_STATUS.md) - Python version requirements
openclaw agent --agent FollowerAgent --session-id "coordination" --message "Participate in distributed AI processing" --thinking medium
openclaw agent --agent CoordinatorAgent --session-id "orchestration" --message "Coordinate multi-agent workflow" --thinking high ## Security
```
See `security/SECURITY_VULNERABILITY_REPORT.md` for security status.
#### **🤖 Advanced AI Operations**
```bash ## License
# Phase 1: Advanced AI Workflow Orchestration
./aitbc-cli ai-submit --wallet genesis-ops --type parallel --prompt "Complex AI pipeline for medical diagnosis" --payment 500 See `LICENSE` for licensing information.
./aitbc-cli ai-submit --wallet genesis-ops --type ensemble --prompt "Parallel AI processing with ensemble validation" --payment 600
# Phase 2: Multi-Model AI Pipelines
./aitbc-cli ai-submit --wallet genesis-ops --type multimodal --prompt "Multi-modal customer feedback analysis" --payment 1000
./aitbc-cli ai-submit --wallet genesis-ops --type fusion --prompt "Cross-modal fusion with joint reasoning" --payment 1200
# Phase 3: AI Resource Optimization
./aitbc-cli ai-submit --wallet genesis-ops --type resource-allocation --prompt "Dynamic resource allocation system" --payment 800
./aitbc-cli ai-submit --wallet genesis-ops --type performance-tuning --prompt "AI performance optimization" --payment 1000
```
#### **🔄 Resource Management**
```bash
# Check resource status
./aitbc-cli resource status
# Allocate resources for AI operations
./aitbc-cli resource allocate --agent-id "ai-optimization-agent" --cpu 2 --memory 4096 --duration 3600
# Monitor AI jobs
./aitbc-cli ai-ops --action status --job-id "latest"
./aitbc-cli ai-ops --action results --job-id "latest"
```
#### **📊 Simulation Framework**
```bash
# Simulate blockchain operations
./aitbc-cli simulate blockchain --blocks 10 --transactions 50 --delay 1.0
# Simulate wallet operations
./aitbc-cli simulate wallets --wallets 5 --balance 1000 --transactions 20
# Simulate price movements
./aitbc-cli simulate price --price 100 --volatility 0.05 --timesteps 100
# Simulate network topology
./aitbc-cli simulate network --nodes 3 --failure-rate 0.05
# Simulate AI job processing
./aitbc-cli simulate ai-jobs --jobs 10 --models "text-generation,image-generation"
```
#### **🎓 Agent Capabilities Summary**
- **🤖 Genesis Agent**: Complex AI operations, resource management, performance optimization
- **🤖 Follower Agent**: Distributed AI coordination, resource monitoring, cost optimization
- **🤖 Coordinator Agent**: Multi-agent orchestration, cross-node coordination
- **🤖 AI Resource Agent**: Resource allocation, performance tuning, demand forecasting
- **🤖 Multi-Modal Agent**: Multi-modal processing, cross-modal fusion, ensemble management
**📚 Detailed Documentation**: [OpenClaw Agent Capabilities](docs/openclaw/OPENCLAW_AGENT_CAPABILITIES_ADVANCED.md)
---
## 🎯 **Usage Examples**
### **💻 CLI Usage:**
```bash
# Check system status
aitbc status
# Create wallet
aitbc wallet create
# Start mining
aitbc miner start
# Check balance
aitbc wallet balance
# Trade on marketplace
aitbc marketplace trade --pair AITBC/USDT --amount 100
```
### **🤖 AI Agent Development:**
```python
from aitbc.agent import AITBCAgent
# Create custom agent
agent = AITBCAgent(
name="MyTradingBot",
strategy="ml_trading",
config="agent_config.yaml"
)
# Start agent
agent.start()
```
### **⛓️ Blockchain Integration:**
```python
from aitbc.blockchain import AITBCBlockchain
# Connect to blockchain
blockchain = AITBCBlockchain()
# Create transaction
tx = blockchain.create_transaction(
to="0x...",
amount=100,
asset="AITBC"
)
# Send transaction
result = blockchain.send_transaction(tx)
```
---
## 🧪 **Testing**
### **📊 Test Coverage:**
- **Total Tests**: 67 tests
- **Pass Rate**: 100% (67/67 passing)
- **Coverage**: Comprehensive test suite
- **Quality**: Production-ready codebase
### **🚀 Run Tests:**
```bash
# Run all tests
pytest
# Run with coverage
pytest --cov=aitbc
# Run specific test file
pytest tests/test_cli.py
# Run with verbose output
pytest -v
```
---
## 🔒 **Security**
### **🛡️ Security Features:**
- **🔐 Multi-Sig Wallets**: Require multiple signatures for transactions
- **⏰ Time-Lock Transactions**: Delayed execution for security
- **🔍 KYC/AML Integration**: Compliance with regulations
- **🛡️ Secure Pickle**: Safe serialization/deserialization
- **🔑 Encrypted Keystores**: Secure key storage
- **🚨 Vulnerability Scanning**: Regular security audits
### **🔍 Security Audits:**
- **✅ Smart Contract Audits**: Completed and verified
- **✅ Code Security**: Vulnerability scanning passed
- **✅ Infrastructure Security**: Production security hardened
- **✅ Data Protection**: Privacy-preserving features verified
---
## 🌐 **Ecosystem**
### **🔄 Components:**
- **🏗️ [Coordinator API](apps/coordinator-api/)** - Central coordination service
- **⛓️ [Blockchain Node](apps/blockchain-node/)** - Core blockchain infrastructure
- **⛏️ [Miner Node](apps/miner-node/)** - Mining and validation
- **💼 [Browser Wallet](apps/browser-wallet/)** - Web-based wallet
- **🏪 [Marketplace Web](apps/marketplace-web/)** - Trading interface
- **🔍 [Explorer Web](apps/explorer-web/)** - Blockchain explorer
- **🤖 [AI Agent SDK](packages/py/aitbc-agent-sdk/)** - Agent development kit
### **👥 Community:**
- **💬 [Discord](https://discord.gg/aitbc)** - Community chat
- **📖 [Forum](https://forum.aitbc.net)** - Discussion forum
- **🐙 [GitHub](https://github.com/oib/AITBC)** - Source code
- **📚 [Documentation](https://docs.aitbc.net)** - Full documentation
---
## 🤝 **Contributing**
We welcome contributions! Here's how to get started:
### **📋 Contribution Guidelines:**
1. **Fork** the repository
2. **Create** a feature branch
3. **Make** your changes
4. **Test** thoroughly
5. **Submit** a pull request
### **🛠️ Development Workflow:**
```bash
# Fork and clone
git clone https://github.com/YOUR_USERNAME/AITBC.git
cd AITBC
# Create feature branch
git checkout -b feature/amazing-feature
# Make changes and test
pytest
# Commit and push
git commit -m "Add amazing feature"
git push origin feature/amazing-feature
# Create pull request
```
### **📝 Code Standards:**
- **Python**: Follow PEP 8
- **JavaScript**: Use ESLint configuration
- **Documentation**: Follow our template standards
- **Testing**: Maintain 100% test coverage
---
## 🎉 **Achievements & Recognition**
### **🏆 Major Achievements:**
- **🎓 Advanced AI Teaching Plan**: 100% complete (3 phases, 6 sessions)
- **🤖 OpenClaw Agent Mastery**: Advanced AI specialists with real-world capabilities
- **📚 Perfect Documentation**: 10/10 quality score achieved
- **<2A> Production Ready**: Fully operational blockchain infrastructure
- **⚡ Advanced AI Operations**: Complex workflow orchestration, multi-model pipelines, resource optimization
### **🎯 Real-World Applications:**
- **🏥 Medical Diagnosis**: Complex AI pipelines with ensemble validation
- **📊 Customer Feedback Analysis**: Multi-modal processing with cross-modal attention
- **🚀 AI Service Provider**: Dynamic resource allocation and performance optimization
- **⛓️ Blockchain Operations**: Advanced multi-chain support with agent coordination
### **📊 Performance Metrics:**
- **AI Job Processing**: 100% functional with advanced job types
- **Resource Management**: Real-time allocation and monitoring
- **Cross-Node Coordination**: Smart contract messaging operational
- **Performance Optimization**: Sub-100ms inference with high utilization
- **Testing Coverage**: 91% success rate with comprehensive validation
### **🔮 Future Roadmap:**
- **📦 Modular Workflow Implementation**: Split large workflows into manageable modules
- **🤝 Enhanced Agent Coordination**: Advanced multi-agent communication patterns
- **🌐 Scalable Architectures**: Distributed decision making and scaling strategies
---
## <20>📄 **License**
This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.
---
## 🆘 **Support & Help**
### **📚 Getting Help:**
- **📖 [Documentation](docs/README.md)** - Comprehensive guides
- **🤖 [OpenClaw Agent Documentation](docs/openclaw/OPENCLAW_AGENT_CAPABILITIES_ADVANCED.md)** - Advanced AI agent capabilities
- **💬 [Discord](https://discord.gg/aitbc)** - Community support
- **🐛 [Issues](https://github.com/oib/AITBC/issues)** - Report bugs
- **💡 [Discussions](https://github.com/oib/AITBC/discussions)** - Feature requests
### **📞 Contact & Connect:**
- **🌊 Windsurf**: [https://windsurf.com/refer?referral_code=4j75hl1x7ibz3yj8](https://windsurf.com/refer?referral_code=4j75hl1x7ibz3yj8)
- **🐦 X**: [@bubuIT_net](https://x.com/bubuIT_net)
- **📧 Email**: andreas.fleckl@bubuit.net
---
## 🎯 **Roadmap**
### **🚀 Upcoming Features:**
- **🔮 Advanced AI Models**: Next-generation ML algorithms
- **🌐 Cross-Chain DeFi**: DeFi protocol integration
- **📱 Mobile Apps**: iOS and Android applications
- **🔮 Quantum Computing**: Quantum-resistant cryptography
- **🌍 Global Expansion**: Worldwide node deployment
### **📈 Development Phases:**
- **Phase 1**: Core infrastructure ✅ **COMPLETED**
- **Phase 2**: AI integration ✅ **COMPLETED**
- **Phase 3**: Exchange integration ✅ **COMPLETED**
- **Phase 4**: Ecosystem expansion 🔄 **IN PROGRESS**
- **Phase 5**: Global deployment 📋 **PLANNED**
---
## 📊 **Project Statistics**
### **📁 Repository Stats:**
- **Total Files**: 500+ files
- **Documentation**: Perfect 10/10 quality score
- **Test Coverage**: 100% (67/67 tests passing)
- **Languages**: Python, JavaScript, Solidity, Rust
- **Lines of Code**: 100,000+ lines
### **👥 Community Stats:**
- **Contributors**: 50+ developers
- **Stars**: 1,000+ GitHub stars
- **Forks**: 200+ forks
- **Issues**: 95% resolved
- **Pull Requests**: 300+ merged
---
## 🎉 **Achievements**
### **🏆 Major Milestones:**
- **✅ Production Launch**: March 18, 2026
- **🎉 Perfect Documentation**: 10/10 quality score achieved
- **🤖 AI Integration**: Advanced ML models deployed
- **⛓️ Multi-Chain**: 7-layer architecture operational
- **🔒 Security**: Complete security framework
- **📚 Documentation**: World-class documentation system
### **🌟 Recognition:**
- **🏆 Best Documentation**: Perfect 10/10 quality score
- **🚀 Most Innovative**: AI-blockchain integration
- **🔒 Most Secure**: Comprehensive security framework
- **📚 Best Developer Experience**: Comprehensive CLI and tools
---
## 🚀 **Get Started Now!**
**🎯 Ready to dive in?** Choose your path:
1. **👤 [I'm a User](docs/beginner/README.md)** - Start using AITBC
2. **👨‍💻 [I'm a Developer](docs/beginner/02_project/)** - Build on AITBC
3. **⛏️ [I'm a Miner](docs/beginner/04_miners/)** - Run mining operations
4. **🔧 [I'm an Admin](docs/beginner/05_cli/)** - Manage systems
5. **🎓 [I'm an Expert](docs/expert/README.md)** - Deep expertise
---
**🎉 Welcome to AITBC - The Future of AI-Powered Blockchain!**
*Join us in revolutionizing the intersection of artificial intelligence and blockchain technology.*
---
**Last Updated**: 2026-03-26
**Version**: 0.2.2
**Quality Score**: 10/10 (Perfect)
**Status**: Production Ready
**License**: MIT
---
*🚀 AITBC - Building the future of AI and blockchain*

152
SETUP.md
View File

@@ -1,152 +0,0 @@
# AITBC Setup Guide
## Quick Setup (New Host)
Run this single command on any new host to install AITBC:
```bash
sudo bash <(curl -sSL https://raw.githubusercontent.com/oib/aitbc/main/setup.sh)
```
Or clone and run manually:
```bash
sudo git clone https://gitea.bubuit.net/oib/aitbc.git /opt/aitbc
cd /opt/aitbc
sudo chmod +x setup.sh
sudo ./setup.sh
```
## What the Setup Script Does
1. **Prerequisites Check**
- Verifies Python 3.13.5+, pip3, git, systemd
- Checks for root privileges
2. **Repository Setup**
- Clones AITBC repository to `/opt/aitbc`
- Handles multiple repository URLs for reliability
3. **Virtual Environments**
- Creates Python venvs for each service
- Installs dependencies from `requirements.txt` when available
- Falls back to core dependencies if requirements missing
4. **Runtime Directories**
- Creates standard Linux directories:
- `/var/lib/aitbc/keystore/` - Blockchain keys
- `/var/lib/aitbc/data/` - Database files
- `/var/lib/aitbc/logs/` - Application logs
- `/etc/aitbc/` - Configuration files
- Sets proper permissions and ownership
5. **Systemd Services**
- Installs service files to `/etc/systemd/system/`
- Enables auto-start on boot
- Provides fallback manual startup
6. **Service Management**
- Creates `/opt/aitbc/start-services.sh` for manual control
- Creates `/opt/aitbc/health-check.sh` for monitoring
- Sets up logging to `/var/log/aitbc-*.log`
## Runtime Directories
AITBC uses standard Linux system directories for runtime data:
```
/var/lib/aitbc/
├── keystore/ # Blockchain private keys (700 permissions)
├── data/ # Database files (.db, .sqlite)
└── logs/ # Application logs
/etc/aitbc/ # Configuration files
/var/log/aitbc/ # System logging (symlink)
```
### Security Notes
- **Keystore**: Restricted to root/aitbc user only
- **Data**: Writable by services, readable by admin
- **Logs**: Rotated automatically by logrotate
## Service Endpoints
| Service | Port | Health Endpoint |
|---------|------|----------------|
| Wallet API | 8003 | `http://localhost:8003/health` |
| Exchange API | 8001 | `http://localhost:8001/api/health` |
| Coordinator API | 8000 | `http://localhost:8000/health` |
| Blockchain RPC | 8545 | `http://localhost:8545` |
## Management Commands
```bash
# Check service health
/opt/aitbc/health-check.sh
# Restart all services
/opt/aitbc/start-services.sh
# View logs (new standard locations)
tail -f /var/lib/aitbc/logs/aitbc-wallet.log
tail -f /var/lib/aitbc/logs/aitbc-coordinator.log
tail -f /var/lib/aitbc/logs/aitbc-exchange.log
# Check keystore
ls -la /var/lib/aitbc/keystore/
# Systemd control
systemctl status aitbc-wallet
systemctl restart aitbc-coordinator-api
systemctl stop aitbc-exchange-api
```
## Troubleshooting
### Services Not Starting
1. Check logs: `tail -f /var/lib/aitbc/logs/aitbc-*.log`
2. Verify ports: `netstat -tlnp | grep ':800'`
3. Check processes: `ps aux | grep python`
4. Verify runtime directories: `ls -la /var/lib/aitbc/`
### Missing Dependencies
The setup script handles missing `requirements.txt` files by installing core dependencies:
- fastapi
- uvicorn
- pydantic
- httpx
- python-dotenv
### Port Conflicts
Services use these default ports. If conflicts exist:
1. Kill conflicting processes: `kill <pid>`
2. Modify service files to use different ports
3. Restart services
## Development Mode
For development with manual control:
```bash
cd /opt/aitbc/apps/wallet
source .venv/bin/activate
python simple_daemon.py
cd /opt/aitbc/apps/exchange
source .venv/bin/activate
python simple_exchange_api.py
cd /opt/aitbc/apps/coordinator-api/src
source ../.venv/bin/activate
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
```
## Production Considerations
For production deployment:
1. Configure proper environment variables
2. Set up reverse proxy (nginx)
3. Configure SSL certificates
4. Set up log rotation
5. Configure monitoring and alerts
6. Use proper database setup (PostgreSQL/Redis)

View File

@@ -1,36 +0,0 @@
#!/bin/bash
# AITBC CLI Wrapper
# Delegates to the actual Python CLI implementation at /opt/aitbc/cli/aitbc_cli.py
CLI_DIR="/opt/aitbc/cli"
PYTHON_CLI="$CLI_DIR/aitbc_cli.py"
if [ ! -f "$PYTHON_CLI" ]; then
echo "Error: AITBC CLI not found at $PYTHON_CLI"
exit 1
fi
# Handle version request
if [ "$1" == "--version" ] || [ "$1" == "-v" ]; then
echo "aitbc-cli v2.0.0"
exit 0
fi
# Handle help request
if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
echo "AITBC CLI - AI Training Blockchain Command Line Interface"
echo ""
echo "Usage: aitbc-cli [command] [options]"
echo ""
echo "Available commands: balance, create, delete, export, import, list, send,"
echo " transactions, mine-start, mine-stop, openclaw, workflow,"
echo " resource, batch, rename, and more..."
echo ""
echo "For detailed help: aitbc-cli --help-all"
echo ""
exit 0
fi
# Delegate to Python CLI
cd "$CLI_DIR"
python3 "$PYTHON_CLI" "$@"

1
aitbc-cli Symbolic link
View File

@@ -0,0 +1 @@
/opt/aitbc/cli/aitbc_cli.py

View File

@@ -393,9 +393,9 @@ class PerformanceMonitor:
def update_system_metrics(self, memory_bytes: int, cpu_percent: float): def update_system_metrics(self, memory_bytes: int, cpu_percent: float):
"""Update system metrics""" """Update system metrics"""
self.registry.gauge("system_memory_usage_bytes").set(memory_bytes) self.registry.gauge("system_memory_usage_bytes", "Memory usage in bytes").set(memory_bytes)
self.registry.gauge("system_cpu_usage_percent").set(cpu_percent) self.registry.gauge("system_cpu_usage_percent", "CPU usage percentage").set(cpu_percent)
self.registry.gauge("system_uptime_seconds").set(time.time() - self.start_time) self.registry.gauge("system_uptime_seconds", "System uptime in seconds").set(time.time() - self.start_time)
def update_load_balancer_strategy(self, strategy: str): def update_load_balancer_strategy(self, strategy: str):
"""Update load balancer strategy""" """Update load balancer strategy"""

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,229 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Integration Layer
Connects agent protocols to existing AITBC services
"""
import asyncio
import aiohttp
import json
from typing import Dict, Any, List, Optional
from datetime import datetime
class AITBCServiceIntegration:
"""Integration layer for AITBC services"""
def __init__(self):
self.service_endpoints = {
"coordinator_api": "http://localhost:8000",
"blockchain_rpc": "http://localhost:8006",
"exchange_service": "http://localhost:8001",
"marketplace": "http://localhost:8002",
"agent_registry": "http://localhost:8013"
}
self.session = None
async def __aenter__(self):
self.session = aiohttp.ClientSession()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
if self.session:
await self.session.close()
async def get_blockchain_info(self) -> Dict[str, Any]:
"""Get blockchain information"""
try:
async with self.session.get(f"{self.service_endpoints['blockchain_rpc']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_exchange_status(self) -> Dict[str, Any]:
"""Get exchange service status"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def get_coordinator_status(self) -> Dict[str, Any]:
"""Get coordinator API status"""
try:
async with self.session.get(f"{self.service_endpoints['coordinator_api']}/health") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "unavailable"}
async def submit_transaction(self, transaction_data: Dict[str, Any]) -> Dict[str, Any]:
"""Submit transaction to blockchain"""
try:
async with self.session.post(
f"{self.service_endpoints['blockchain_rpc']}/rpc/submit",
json=transaction_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def get_market_data(self, symbol: str = "AITBC/BTC") -> Dict[str, Any]:
"""Get market data from exchange"""
try:
async with self.session.get(f"{self.service_endpoints['exchange_service']}/api/market/{symbol}") as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
async def register_agent_with_coordinator(self, agent_data: Dict[str, Any]) -> Dict[str, Any]:
"""Register agent with coordinator"""
try:
async with self.session.post(
f"{self.service_endpoints['agent_registry']}/api/agents/register",
json=agent_data
) as response:
return await response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
class AgentServiceBridge:
"""Bridge between agents and AITBC services"""
def __init__(self):
self.integration = AITBCServiceIntegration()
self.active_agents = {}
async def start_agent(self, agent_id: str, agent_config: Dict[str, Any]) -> bool:
"""Start an agent with service integration"""
try:
# Register agent with coordinator
async with self.integration as integration:
registration_result = await integration.register_agent_with_coordinator({
"name": agent_id,
"type": agent_config.get("type", "generic"),
"capabilities": agent_config.get("capabilities", []),
"chain_id": agent_config.get("chain_id", "ait-mainnet"),
"endpoint": agent_config.get("endpoint", f"http://localhost:{8000 + len(self.active_agents) + 10}")
})
# The registry returns the created agent dict on success, not a {"status": "ok"} wrapper
if registration_result and "id" in registration_result:
self.active_agents[agent_id] = {
"config": agent_config,
"registration": registration_result,
"started_at": datetime.utcnow()
}
return True
else:
print(f"Registration failed: {registration_result}")
return False
except Exception as e:
print(f"Failed to start agent {agent_id}: {e}")
return False
async def stop_agent(self, agent_id: str) -> bool:
"""Stop an agent"""
if agent_id in self.active_agents:
del self.active_agents[agent_id]
return True
return False
async def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status with service integration"""
if agent_id not in self.active_agents:
return {"status": "not_found"}
agent_info = self.active_agents[agent_id]
async with self.integration as integration:
# Get service statuses
blockchain_status = await integration.get_blockchain_info()
exchange_status = await integration.get_exchange_status()
coordinator_status = await integration.get_coordinator_status()
return {
"agent_id": agent_id,
"status": "active",
"started_at": agent_info["started_at"].isoformat(),
"services": {
"blockchain": blockchain_status,
"exchange": exchange_status,
"coordinator": coordinator_status
}
}
async def execute_agent_task(self, agent_id: str, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute agent task with service integration"""
if agent_id not in self.active_agents:
return {"status": "error", "message": "Agent not found"}
task_type = task_data.get("type")
if task_type == "market_analysis":
return await self._execute_market_analysis(task_data)
elif task_type == "trading":
return await self._execute_trading_task(task_data)
elif task_type == "compliance_check":
return await self._execute_compliance_check(task_data)
else:
return {"status": "error", "message": f"Unknown task type: {task_type}"}
async def _execute_market_analysis(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute market analysis task"""
try:
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Perform basic analysis
analysis_result = {
"symbol": task_data.get("symbol", "AITBC/BTC"),
"market_data": market_data,
"analysis": {
"trend": "neutral",
"volatility": "medium",
"recommendation": "hold"
},
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": analysis_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_trading_task(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute trading task"""
try:
# Get market data first
async with self.integration as integration:
market_data = await integration.get_market_data(task_data.get("symbol", "AITBC/BTC"))
# Create transaction
transaction = {
"type": "trade",
"symbol": task_data.get("symbol", "AITBC/BTC"),
"side": task_data.get("side", "buy"),
"amount": task_data.get("amount", 0.1),
"price": task_data.get("price", market_data.get("price", 0.001))
}
# Submit transaction
tx_result = await integration.submit_transaction(transaction)
return {"status": "success", "transaction": tx_result}
except Exception as e:
return {"status": "error", "message": str(e)}
async def _execute_compliance_check(self, task_data: Dict[str, Any]) -> Dict[str, Any]:
"""Execute compliance check task"""
try:
# Basic compliance check
compliance_result = {
"user_id": task_data.get("user_id"),
"check_type": task_data.get("check_type", "basic"),
"status": "passed",
"checks_performed": ["kyc", "aml", "sanctions"],
"timestamp": datetime.utcnow().isoformat()
}
return {"status": "success", "result": compliance_result}
except Exception as e:
return {"status": "error", "message": str(e)}

View File

@@ -1,149 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Compliance Agent
Automated compliance and regulatory monitoring agent
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class ComplianceAgent:
"""Automated compliance agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.check_interval = config.get("check_interval", 300) # 5 minutes
self.monitored_entities = config.get("monitored_entities", [])
async def start(self) -> bool:
"""Start compliance agent"""
try:
success = await self.bridge.start_agent(self.agent_id, {
"type": "compliance",
"capabilities": ["kyc_check", "aml_screening", "regulatory_reporting"],
"endpoint": f"http://localhost:8006"
})
if success:
self.is_running = True
print(f"Compliance agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start compliance agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting compliance agent: {e}")
return False
async def stop(self) -> bool:
"""Stop compliance agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Compliance agent {self.agent_id} stopped successfully")
return success
async def run_compliance_loop(self):
"""Main compliance monitoring loop"""
while self.is_running:
try:
for entity in self.monitored_entities:
await self._perform_compliance_check(entity)
await asyncio.sleep(self.check_interval)
except Exception as e:
print(f"Error in compliance loop: {e}")
await asyncio.sleep(30) # Wait before retrying
async def _perform_compliance_check(self, entity_id: str) -> None:
"""Perform compliance check for entity"""
try:
compliance_task = {
"type": "compliance_check",
"user_id": entity_id,
"check_type": "full",
"monitored_activities": ["trading", "transfers", "wallet_creation"]
}
result = await self.bridge.execute_agent_task(self.agent_id, compliance_task)
if result.get("status") == "success":
compliance_result = result["result"]
await self._handle_compliance_result(entity_id, compliance_result)
else:
print(f"Compliance check failed for {entity_id}: {result}")
except Exception as e:
print(f"Error performing compliance check for {entity_id}: {e}")
async def _handle_compliance_result(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Handle compliance check result"""
status = result.get("status", "unknown")
if status == "passed":
print(f"✅ Compliance check passed for {entity_id}")
elif status == "failed":
print(f"❌ Compliance check failed for {entity_id}")
# Trigger alert or further investigation
await self._trigger_compliance_alert(entity_id, result)
else:
print(f"⚠️ Compliance check inconclusive for {entity_id}")
async def _trigger_compliance_alert(self, entity_id: str, result: Dict[str, Any]) -> None:
"""Trigger compliance alert"""
alert_data = {
"entity_id": entity_id,
"alert_type": "compliance_failure",
"severity": "high",
"details": result,
"timestamp": datetime.utcnow().isoformat()
}
# In a real implementation, this would send to alert system
print(f"🚨 COMPLIANCE ALERT: {json.dumps(alert_data, indent=2)}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
status = await self.bridge.get_agent_status(self.agent_id)
status["monitored_entities"] = len(self.monitored_entities)
status["check_interval"] = self.check_interval
return status
# Main execution
async def main():
"""Main compliance agent execution"""
agent_id = "compliance-agent-001"
config = {
"check_interval": 60, # 1 minute for testing
"monitored_entities": ["user001", "user002", "user003"]
}
agent = ComplianceAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run compliance loop
await agent.run_compliance_loop()
except KeyboardInterrupt:
print("Shutting down compliance agent...")
finally:
await agent.stop()
else:
print("Failed to start compliance agent")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Coordinator Service
Agent task coordination and management
"""
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import uuid
from datetime import datetime
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Coordinator API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_coordinator.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
task_type TEXT NOT NULL,
payload TEXT NOT NULL,
required_capabilities TEXT NOT NULL,
priority TEXT NOT NULL,
status TEXT NOT NULL,
assigned_agent_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
result TEXT
)
''')
# Models
class Task(BaseModel):
id: str
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str
status: str
assigned_agent_id: Optional[str] = None
class TaskCreation(BaseModel):
task_type: str
payload: Dict[str, Any]
required_capabilities: List[str]
priority: str = "normal"
# API Endpoints
@app.post("/api/tasks", response_model=Task)
async def create_task(task: TaskCreation):
"""Create a new task"""
task_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO tasks (id, task_type, payload, required_capabilities, priority, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
task_id, task.task_type, json.dumps(task.payload),
json.dumps(task.required_capabilities), task.priority, "pending"
))
return Task(
id=task_id,
task_type=task.task_type,
payload=task.payload,
required_capabilities=task.required_capabilities,
priority=task.priority,
status="pending"
)
@app.get("/api/tasks", response_model=List[Task])
async def list_tasks(status: Optional[str] = None):
"""List tasks with optional status filter"""
with get_db_connection() as conn:
query = "SELECT * FROM tasks"
params = []
if status:
query += " WHERE status = ?"
params.append(status)
tasks = conn.execute(query, params).fetchall()
return [
Task(
id=task["id"],
task_type=task["task_type"],
payload=json.loads(task["payload"]),
required_capabilities=json.loads(task["required_capabilities"]),
priority=task["priority"],
status=task["status"],
assigned_agent_id=task["assigned_agent_id"]
)
for task in tasks
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8012)

View File

@@ -1,19 +0,0 @@
# AITBC Agent Protocols Environment Configuration
# Copy this file to .env and update with your secure values
# Agent Protocol Encryption Key (generate a strong, unique key)
AITBC_AGENT_PROTOCOL_KEY=your-secure-encryption-key-here
# Agent Protocol Salt (generate a unique salt value)
AITBC_AGENT_PROTOCOL_SALT=your-unique-salt-value-here
# Agent Registry Configuration
AGENT_REGISTRY_HOST=0.0.0.0
AGENT_REGISTRY_PORT=8003
# Database Configuration
AGENT_REGISTRY_DB_PATH=agent_registry.db
# Security Settings
AGENT_PROTOCOL_TIMEOUT=300
AGENT_PROTOCOL_MAX_RETRIES=3

View File

@@ -1,16 +0,0 @@
"""
Agent Protocols Package
"""
from .message_protocol import MessageProtocol, MessageTypes, AgentMessageClient
from .task_manager import TaskManager, TaskStatus, TaskPriority, Task
__all__ = [
"MessageProtocol",
"MessageTypes",
"AgentMessageClient",
"TaskManager",
"TaskStatus",
"TaskPriority",
"Task"
]

View File

@@ -1,113 +0,0 @@
"""
Message Protocol for AITBC Agents
Handles message creation, routing, and delivery between agents
"""
import json
import uuid
from datetime import datetime
from typing import Dict, Any, Optional, List
from enum import Enum
class MessageTypes(Enum):
"""Message type enumeration"""
TASK_REQUEST = "task_request"
TASK_RESPONSE = "task_response"
HEARTBEAT = "heartbeat"
STATUS_UPDATE = "status_update"
ERROR = "error"
DATA = "data"
class MessageProtocol:
"""Message protocol handler for agent communication"""
def __init__(self):
self.messages = []
self.message_handlers = {}
def create_message(
self,
sender_id: str,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any],
message_id: Optional[str] = None
) -> Dict[str, Any]:
"""Create a new message"""
if message_id is None:
message_id = str(uuid.uuid4())
message = {
"message_id": message_id,
"sender_id": sender_id,
"receiver_id": receiver_id,
"message_type": message_type.value,
"content": content,
"timestamp": datetime.utcnow().isoformat(),
"status": "pending"
}
self.messages.append(message)
return message
def send_message(self, message: Dict[str, Any]) -> bool:
"""Send a message to the receiver"""
try:
message["status"] = "sent"
message["sent_timestamp"] = datetime.utcnow().isoformat()
return True
except Exception:
message["status"] = "failed"
return False
def receive_message(self, message_id: str) -> Optional[Dict[str, Any]]:
"""Receive and process a message"""
for message in self.messages:
if message["message_id"] == message_id:
message["status"] = "received"
message["received_timestamp"] = datetime.utcnow().isoformat()
return message
return None
def get_messages_by_agent(self, agent_id: str) -> List[Dict[str, Any]]:
"""Get all messages for a specific agent"""
return [
msg for msg in self.messages
if msg["sender_id"] == agent_id or msg["receiver_id"] == agent_id
]
class AgentMessageClient:
"""Client for agent message communication"""
def __init__(self, agent_id: str, protocol: MessageProtocol):
self.agent_id = agent_id
self.protocol = protocol
self.received_messages = []
def send_message(
self,
receiver_id: str,
message_type: MessageTypes,
content: Dict[str, Any]
) -> Dict[str, Any]:
"""Send a message to another agent"""
message = self.protocol.create_message(
sender_id=self.agent_id,
receiver_id=receiver_id,
message_type=message_type,
content=content
)
self.protocol.send_message(message)
return message
def receive_messages(self) -> List[Dict[str, Any]]:
"""Receive all pending messages for this agent"""
messages = []
for message in self.protocol.messages:
if (message["receiver_id"] == self.agent_id and
message["status"] == "sent" and
message not in self.received_messages):
self.protocol.receive_message(message["message_id"])
self.received_messages.append(message)
messages.append(message)
return messages

View File

@@ -1,128 +0,0 @@
"""
Task Manager for AITBC Agents
Handles task creation, assignment, and tracking
"""
import uuid
from datetime import datetime, timedelta
from typing import Dict, Any, Optional, List
from enum import Enum
class TaskStatus(Enum):
"""Task status enumeration"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class TaskPriority(Enum):
"""Task priority enumeration"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class Task:
"""Task representation"""
def __init__(
self,
task_id: str,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
):
self.task_id = task_id
self.title = title
self.description = description
self.assigned_to = assigned_to
self.priority = priority
self.created_by = created_by or assigned_to
self.status = TaskStatus.PENDING
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
self.completed_at = None
self.result = None
self.error = None
class TaskManager:
"""Task manager for agent coordination"""
def __init__(self):
self.tasks = {}
self.task_history = []
def create_task(
self,
title: str,
description: str,
assigned_to: str,
priority: TaskPriority = TaskPriority.MEDIUM,
created_by: Optional[str] = None
) -> Task:
"""Create a new task"""
task_id = str(uuid.uuid4())
task = Task(
task_id=task_id,
title=title,
description=description,
assigned_to=assigned_to,
priority=priority,
created_by=created_by
)
self.tasks[task_id] = task
return task
def get_task(self, task_id: str) -> Optional[Task]:
"""Get a task by ID"""
return self.tasks.get(task_id)
def update_task_status(
self,
task_id: str,
status: TaskStatus,
result: Optional[Dict[str, Any]] = None,
error: Optional[str] = None
) -> bool:
"""Update task status"""
task = self.get_task(task_id)
if not task:
return False
task.status = status
task.updated_at = datetime.utcnow()
if status == TaskStatus.COMPLETED:
task.completed_at = datetime.utcnow()
task.result = result
elif status == TaskStatus.FAILED:
task.error = error
return True
def get_tasks_by_agent(self, agent_id: str) -> List[Task]:
"""Get all tasks assigned to an agent"""
return [
task for task in self.tasks.values()
if task.assigned_to == agent_id
]
def get_tasks_by_status(self, status: TaskStatus) -> List[Task]:
"""Get all tasks with a specific status"""
return [
task for task in self.tasks.values()
if task.status == status
]
def get_overdue_tasks(self, hours: int = 24) -> List[Task]:
"""Get tasks that are overdue"""
cutoff_time = datetime.utcnow() - timedelta(hours=hours)
return [
task for task in self.tasks.values()
if task.status in [TaskStatus.PENDING, TaskStatus.IN_PROGRESS] and
task.created_at < cutoff_time
]

View File

@@ -1,151 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Agent Registry Service
Central agent discovery and registration system
"""
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Optional, Dict, Any
import json
import time
import uuid
from datetime import datetime, timedelta
import sqlite3
from contextlib import contextmanager
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
init_db()
yield
# Shutdown (cleanup if needed)
pass
app = FastAPI(title="AITBC Agent Registry API", version="1.0.0", lifespan=lifespan)
# Database setup
def get_db():
conn = sqlite3.connect('agent_registry.db')
conn.row_factory = sqlite3.Row
return conn
@contextmanager
def get_db_connection():
conn = get_db()
try:
yield conn
finally:
conn.close()
# Initialize database
def init_db():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
capabilities TEXT NOT NULL,
chain_id TEXT NOT NULL,
endpoint TEXT NOT NULL,
status TEXT DEFAULT 'active',
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Models
class Agent(BaseModel):
id: str
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
class AgentRegistration(BaseModel):
name: str
type: str
capabilities: List[str]
chain_id: str
endpoint: str
metadata: Optional[Dict[str, Any]] = {}
# API Endpoints
@app.post("/api/agents/register", response_model=Agent)
async def register_agent(agent: AgentRegistration):
"""Register a new agent"""
agent_id = str(uuid.uuid4())
with get_db_connection() as conn:
conn.execute('''
INSERT INTO agents (id, name, type, capabilities, chain_id, endpoint, metadata)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
agent_id, agent.name, agent.type,
json.dumps(agent.capabilities), agent.chain_id,
agent.endpoint, json.dumps(agent.metadata)
))
conn.commit()
return Agent(
id=agent_id,
name=agent.name,
type=agent.type,
capabilities=agent.capabilities,
chain_id=agent.chain_id,
endpoint=agent.endpoint,
metadata=agent.metadata
)
@app.get("/api/agents", response_model=List[Agent])
async def list_agents(
agent_type: Optional[str] = None,
chain_id: Optional[str] = None,
capability: Optional[str] = None
):
"""List registered agents with optional filters"""
with get_db_connection() as conn:
query = "SELECT * FROM agents WHERE status = 'active'"
params = []
if agent_type:
query += " AND type = ?"
params.append(agent_type)
if chain_id:
query += " AND chain_id = ?"
params.append(chain_id)
if capability:
query += " AND capabilities LIKE ?"
params.append(f'%{capability}%')
agents = conn.execute(query, params).fetchall()
return [
Agent(
id=agent["id"],
name=agent["name"],
type=agent["type"],
capabilities=json.loads(agent["capabilities"]),
chain_id=agent["chain_id"],
endpoint=agent["endpoint"],
metadata=json.loads(agent["metadata"] or "{}")
)
for agent in agents
]
@app.get("/api/health")
async def health_check():
"""Health check endpoint"""
return {"status": "ok", "timestamp": datetime.utcnow()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8013)

View File

@@ -1,431 +0,0 @@
"""
Agent Registration System
Handles AI agent registration, capability management, and discovery
"""
import asyncio
import time
import json
import hashlib
from typing import Dict, List, Optional, Set, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
from decimal import Decimal
class AgentType(Enum):
AI_MODEL = "ai_model"
DATA_PROVIDER = "data_provider"
VALIDATOR = "validator"
MARKET_MAKER = "market_maker"
BROKER = "broker"
ORACLE = "oracle"
class AgentStatus(Enum):
REGISTERED = "registered"
ACTIVE = "active"
INACTIVE = "inactive"
SUSPENDED = "suspended"
BANNED = "banned"
class CapabilityType(Enum):
TEXT_GENERATION = "text_generation"
IMAGE_GENERATION = "image_generation"
DATA_ANALYSIS = "data_analysis"
PREDICTION = "prediction"
VALIDATION = "validation"
COMPUTATION = "computation"
@dataclass
class AgentCapability:
capability_type: CapabilityType
name: str
version: str
parameters: Dict
performance_metrics: Dict
cost_per_use: Decimal
availability: float
max_concurrent_jobs: int
@dataclass
class AgentInfo:
agent_id: str
agent_type: AgentType
name: str
owner_address: str
public_key: str
endpoint_url: str
capabilities: List[AgentCapability]
reputation_score: float
total_jobs_completed: int
total_earnings: Decimal
registration_time: float
last_active: float
status: AgentStatus
metadata: Dict
class AgentRegistry:
"""Manages AI agent registration and discovery"""
def __init__(self):
self.agents: Dict[str, AgentInfo] = {}
self.capability_index: Dict[CapabilityType, Set[str]] = {} # capability -> agent_ids
self.type_index: Dict[AgentType, Set[str]] = {} # agent_type -> agent_ids
self.reputation_scores: Dict[str, float] = {}
self.registration_queue: List[Dict] = []
# Registry parameters
self.min_reputation_threshold = 0.5
self.max_agents_per_type = 1000
self.registration_fee = Decimal('100.0')
self.inactivity_threshold = 86400 * 7 # 7 days
# Initialize capability index
for capability_type in CapabilityType:
self.capability_index[capability_type] = set()
# Initialize type index
for agent_type in AgentType:
self.type_index[agent_type] = set()
async def register_agent(self, agent_type: AgentType, name: str, owner_address: str,
public_key: str, endpoint_url: str, capabilities: List[Dict],
metadata: Dict = None) -> Tuple[bool, str, Optional[str]]:
"""Register a new AI agent"""
try:
# Validate inputs
if not self._validate_registration_inputs(agent_type, name, owner_address, public_key, endpoint_url):
return False, "Invalid registration inputs", None
# Check if agent already exists
agent_id = self._generate_agent_id(owner_address, name)
if agent_id in self.agents:
return False, "Agent already registered", None
# Check type limits
if len(self.type_index[agent_type]) >= self.max_agents_per_type:
return False, f"Maximum agents of type {agent_type.value} reached", None
# Convert capabilities
agent_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
agent_capabilities.append(capability)
if not agent_capabilities:
return False, "Agent must have at least one valid capability", None
# Create agent info
agent_info = AgentInfo(
agent_id=agent_id,
agent_type=agent_type,
name=name,
owner_address=owner_address,
public_key=public_key,
endpoint_url=endpoint_url,
capabilities=agent_capabilities,
reputation_score=1.0, # Start with neutral reputation
total_jobs_completed=0,
total_earnings=Decimal('0'),
registration_time=time.time(),
last_active=time.time(),
status=AgentStatus.REGISTERED,
metadata=metadata or {}
)
# Add to registry
self.agents[agent_id] = agent_info
# Update indexes
self.type_index[agent_type].add(agent_id)
for capability in agent_capabilities:
self.capability_index[capability.capability_type].add(agent_id)
log_info(f"Agent registered: {agent_id} ({name})")
return True, "Registration successful", agent_id
except Exception as e:
return False, f"Registration failed: {str(e)}", None
def _validate_registration_inputs(self, agent_type: AgentType, name: str,
owner_address: str, public_key: str, endpoint_url: str) -> bool:
"""Validate registration inputs"""
# Check required fields
if not all([agent_type, name, owner_address, public_key, endpoint_url]):
return False
# Validate address format (simplified)
if not owner_address.startswith('0x') or len(owner_address) != 42:
return False
# Validate URL format (simplified)
if not endpoint_url.startswith(('http://', 'https://')):
return False
# Validate name
if len(name) < 3 or len(name) > 100:
return False
return True
def _generate_agent_id(self, owner_address: str, name: str) -> str:
"""Generate unique agent ID"""
content = f"{owner_address}:{name}:{time.time()}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _create_capability_from_data(self, cap_data: Dict) -> Optional[AgentCapability]:
"""Create capability from data dictionary"""
try:
# Validate required fields
required_fields = ['type', 'name', 'version', 'cost_per_use']
if not all(field in cap_data for field in required_fields):
return None
# Parse capability type
try:
capability_type = CapabilityType(cap_data['type'])
except ValueError:
return None
# Create capability
return AgentCapability(
capability_type=capability_type,
name=cap_data['name'],
version=cap_data['version'],
parameters=cap_data.get('parameters', {}),
performance_metrics=cap_data.get('performance_metrics', {}),
cost_per_use=Decimal(str(cap_data['cost_per_use'])),
availability=cap_data.get('availability', 1.0),
max_concurrent_jobs=cap_data.get('max_concurrent_jobs', 1)
)
except Exception as e:
log_error(f"Error creating capability: {e}")
return None
async def update_agent_status(self, agent_id: str, status: AgentStatus) -> Tuple[bool, str]:
"""Update agent status"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
old_status = agent.status
agent.status = status
agent.last_active = time.time()
log_info(f"Agent {agent_id} status changed: {old_status.value} -> {status.value}")
return True, "Status updated successfully"
async def update_agent_capabilities(self, agent_id: str, capabilities: List[Dict]) -> Tuple[bool, str]:
"""Update agent capabilities"""
if agent_id not in self.agents:
return False, "Agent not found"
agent = self.agents[agent_id]
# Remove old capabilities from index
for old_capability in agent.capabilities:
self.capability_index[old_capability.capability_type].discard(agent_id)
# Add new capabilities
new_capabilities = []
for cap_data in capabilities:
capability = self._create_capability_from_data(cap_data)
if capability:
new_capabilities.append(capability)
self.capability_index[capability.capability_type].add(agent_id)
if not new_capabilities:
return False, "No valid capabilities provided"
agent.capabilities = new_capabilities
agent.last_active = time.time()
return True, "Capabilities updated successfully"
async def find_agents_by_capability(self, capability_type: CapabilityType,
filters: Dict = None) -> List[AgentInfo]:
"""Find agents by capability type"""
agent_ids = self.capability_index.get(capability_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
async def find_agents_by_type(self, agent_type: AgentType, filters: Dict = None) -> List[AgentInfo]:
"""Find agents by type"""
agent_ids = self.type_index.get(agent_type, set())
agents = []
for agent_id in agent_ids:
agent = self.agents.get(agent_id)
if agent and agent.status == AgentStatus.ACTIVE:
if self._matches_filters(agent, filters):
agents.append(agent)
# Sort by reputation (highest first)
agents.sort(key=lambda x: x.reputation_score, reverse=True)
return agents
def _matches_filters(self, agent: AgentInfo, filters: Dict) -> bool:
"""Check if agent matches filters"""
if not filters:
return True
# Reputation filter
if 'min_reputation' in filters:
if agent.reputation_score < filters['min_reputation']:
return False
# Cost filter
if 'max_cost_per_use' in filters:
max_cost = Decimal(str(filters['max_cost_per_use']))
if any(cap.cost_per_use > max_cost for cap in agent.capabilities):
return False
# Availability filter
if 'min_availability' in filters:
min_availability = filters['min_availability']
if any(cap.availability < min_availability for cap in agent.capabilities):
return False
# Location filter (if implemented)
if 'location' in filters:
agent_location = agent.metadata.get('location')
if agent_location != filters['location']:
return False
return True
async def get_agent_info(self, agent_id: str) -> Optional[AgentInfo]:
"""Get agent information"""
return self.agents.get(agent_id)
async def search_agents(self, query: str, limit: int = 50) -> List[AgentInfo]:
"""Search agents by name or capability"""
query_lower = query.lower()
results = []
for agent in self.agents.values():
if agent.status != AgentStatus.ACTIVE:
continue
# Search in name
if query_lower in agent.name.lower():
results.append(agent)
continue
# Search in capabilities
for capability in agent.capabilities:
if (query_lower in capability.name.lower() or
query_lower in capability.capability_type.value):
results.append(agent)
break
# Sort by relevance (reputation)
results.sort(key=lambda x: x.reputation_score, reverse=True)
return results[:limit]
async def get_agent_statistics(self, agent_id: str) -> Optional[Dict]:
"""Get detailed statistics for an agent"""
agent = self.agents.get(agent_id)
if not agent:
return None
# Calculate additional statistics
avg_job_earnings = agent.total_earnings / agent.total_jobs_completed if agent.total_jobs_completed > 0 else Decimal('0')
days_active = (time.time() - agent.registration_time) / 86400
jobs_per_day = agent.total_jobs_completed / days_active if days_active > 0 else 0
return {
'agent_id': agent_id,
'name': agent.name,
'type': agent.agent_type.value,
'status': agent.status.value,
'reputation_score': agent.reputation_score,
'total_jobs_completed': agent.total_jobs_completed,
'total_earnings': float(agent.total_earnings),
'avg_job_earnings': float(avg_job_earnings),
'jobs_per_day': jobs_per_day,
'days_active': int(days_active),
'capabilities_count': len(agent.capabilities),
'last_active': agent.last_active,
'registration_time': agent.registration_time
}
async def get_registry_statistics(self) -> Dict:
"""Get registry-wide statistics"""
total_agents = len(self.agents)
active_agents = len([a for a in self.agents.values() if a.status == AgentStatus.ACTIVE])
# Count by type
type_counts = {}
for agent_type in AgentType:
type_counts[agent_type.value] = len(self.type_index[agent_type])
# Count by capability
capability_counts = {}
for capability_type in CapabilityType:
capability_counts[capability_type.value] = len(self.capability_index[capability_type])
# Reputation statistics
reputations = [a.reputation_score for a in self.agents.values()]
avg_reputation = sum(reputations) / len(reputations) if reputations else 0
# Earnings statistics
total_earnings = sum(a.total_earnings for a in self.agents.values())
return {
'total_agents': total_agents,
'active_agents': active_agents,
'inactive_agents': total_agents - active_agents,
'agent_types': type_counts,
'capabilities': capability_counts,
'average_reputation': avg_reputation,
'total_earnings': float(total_earnings),
'registration_fee': float(self.registration_fee)
}
async def cleanup_inactive_agents(self) -> Tuple[int, str]:
"""Clean up inactive agents"""
current_time = time.time()
cleaned_count = 0
for agent_id, agent in list(self.agents.items()):
if (agent.status == AgentStatus.INACTIVE and
current_time - agent.last_active > self.inactivity_threshold):
# Remove from registry
del self.agents[agent_id]
# Update indexes
self.type_index[agent.agent_type].discard(agent_id)
for capability in agent.capabilities:
self.capability_index[capability.capability_type].discard(agent_id)
cleaned_count += 1
if cleaned_count > 0:
log_info(f"Cleaned up {cleaned_count} inactive agents")
return cleaned_count, f"Cleaned up {cleaned_count} inactive agents"
# Global agent registry
agent_registry: Optional[AgentRegistry] = None
def get_agent_registry() -> Optional[AgentRegistry]:
"""Get global agent registry"""
return agent_registry
def create_agent_registry() -> AgentRegistry:
"""Create and set global agent registry"""
global agent_registry
agent_registry = AgentRegistry()
return agent_registry

View File

@@ -1,166 +0,0 @@
#!/usr/bin/env python3
"""
AITBC Trading Agent
Automated trading agent for AITBC marketplace
"""
import asyncio
import json
import time
from typing import Dict, Any, List
from datetime import datetime
import sys
import os
# Add parent directory to path
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
from apps.agent_services.agent_bridge.src.integration_layer import AgentServiceBridge
class TradingAgent:
"""Automated trading agent"""
def __init__(self, agent_id: str, config: Dict[str, Any]):
self.agent_id = agent_id
self.config = config
self.bridge = AgentServiceBridge()
self.is_running = False
self.trading_strategy = config.get("strategy", "basic")
self.symbols = config.get("symbols", ["AITBC/BTC"])
self.trade_interval = config.get("trade_interval", 60) # seconds
async def start(self) -> bool:
"""Start trading agent"""
try:
# Register with service bridge
success = await self.bridge.start_agent(self.agent_id, {
"type": "trading",
"capabilities": ["market_analysis", "trading", "risk_management"],
"endpoint": f"http://localhost:8005"
})
if success:
self.is_running = True
print(f"Trading agent {self.agent_id} started successfully")
return True
else:
print(f"Failed to start trading agent {self.agent_id}")
return False
except Exception as e:
print(f"Error starting trading agent: {e}")
return False
async def stop(self) -> bool:
"""Stop trading agent"""
self.is_running = False
success = await self.bridge.stop_agent(self.agent_id)
if success:
print(f"Trading agent {self.agent_id} stopped successfully")
return success
async def run_trading_loop(self):
"""Main trading loop"""
while self.is_running:
try:
for symbol in self.symbols:
await self._analyze_and_trade(symbol)
await asyncio.sleep(self.trade_interval)
except Exception as e:
print(f"Error in trading loop: {e}")
await asyncio.sleep(10) # Wait before retrying
async def _analyze_and_trade(self, symbol: str) -> None:
"""Analyze market and execute trades"""
try:
# Perform market analysis
analysis_task = {
"type": "market_analysis",
"symbol": symbol,
"strategy": self.trading_strategy
}
analysis_result = await self.bridge.execute_agent_task(self.agent_id, analysis_task)
if analysis_result.get("status") == "success":
analysis = analysis_result["result"]["analysis"]
# Make trading decision
if self._should_trade(analysis):
await self._execute_trade(symbol, analysis)
else:
print(f"Market analysis failed for {symbol}: {analysis_result}")
except Exception as e:
print(f"Error in analyze_and_trade for {symbol}: {e}")
def _should_trade(self, analysis: Dict[str, Any]) -> bool:
"""Determine if should execute trade"""
recommendation = analysis.get("recommendation", "hold")
return recommendation in ["buy", "sell"]
async def _execute_trade(self, symbol: str, analysis: Dict[str, Any]) -> None:
"""Execute trade based on analysis"""
try:
recommendation = analysis.get("recommendation", "hold")
if recommendation == "buy":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "buy",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
elif recommendation == "sell":
trade_task = {
"type": "trading",
"symbol": symbol,
"side": "sell",
"amount": self.config.get("trade_amount", 0.1),
"strategy": self.trading_strategy
}
else:
return
trade_result = await self.bridge.execute_agent_task(self.agent_id, trade_task)
if trade_result.get("status") == "success":
print(f"Trade executed successfully: {trade_result}")
else:
print(f"Trade execution failed: {trade_result}")
except Exception as e:
print(f"Error executing trade: {e}")
async def get_status(self) -> Dict[str, Any]:
"""Get agent status"""
return await self.bridge.get_agent_status(self.agent_id)
# Main execution
async def main():
"""Main trading agent execution"""
agent_id = "trading-agent-001"
config = {
"strategy": "basic",
"symbols": ["AITBC/BTC"],
"trade_interval": 30,
"trade_amount": 0.1
}
agent = TradingAgent(agent_id, config)
# Start agent
if await agent.start():
try:
# Run trading loop
await agent.run_trading_loop()
except KeyboardInterrupt:
print("Shutting down trading agent...")
finally:
await agent.stop()
else:
print("Failed to start trading agent")
if __name__ == "__main__":
asyncio.run(main())

Some files were not shown because too many files have changed in this diff Show More