mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 09:37:55 -05:00
feat(blackroad-os): Add centralized configuration layer
Created Config system for API endpoints and feature flags: **js/config.js:** - Centralized app metadata (version 0.1.1) - Feature flags for toggling functionality - API endpoint registry for all services - App-specific default configurations - Keyboard shortcuts registry - Helper methods: getAppConfig(), isFeatureEnabled(), getApiEndpoint() **Configuration Categories:** 1. FEATURE_FLAGS - toggle features without code changes 2. API_ENDPOINTS - backend service URLs (currently mock, ready for real) 3. APPS - default window sizes, refresh intervals, thresholds 4. THEME - theme settings 5. SYSTEM - notification duration, clock format, limits 6. SHORTCUTS - keyboard shortcut definitions **Benefits:** - Single source of truth for environment settings - Easy to switch mock ↔ real APIs - Feature flag-based development - Apps can read Config instead of hardcoding values - Preparation for v0.2.0 real API integration **Updated index.html:** - Load config.js first in dependency chain - Updated load order comment This establishes the extension point for connecting real backends.
This commit is contained in:
@@ -76,7 +76,8 @@
|
||||
</dialog>
|
||||
|
||||
<!-- JavaScript Stack -->
|
||||
<!-- Load in dependency order: data → components → OS core → theme → apps → registry → bootloader -->
|
||||
<!-- Load in dependency order: config → data → components → OS core → theme → apps → registry → bootloader -->
|
||||
<script src="js/config.js"></script>
|
||||
<script src="js/mock_data.js"></script>
|
||||
<script src="js/components.js"></script>
|
||||
<script src="js/os.js"></script>
|
||||
|
||||
258
blackroad-os/js/config.js
Normal file
258
blackroad-os/js/config.js
Normal file
@@ -0,0 +1,258 @@
|
||||
/**
|
||||
* BlackRoad OS Configuration
|
||||
* Central configuration for API endpoints, feature flags, and app settings
|
||||
*
|
||||
* Purpose:
|
||||
* - Provides single source of truth for environment-specific settings
|
||||
* - Makes it easy to switch between mock and real APIs
|
||||
* - Enables feature flag-based development
|
||||
* - Centralizes app default configurations
|
||||
*
|
||||
* How to use:
|
||||
* import { API_ENDPOINTS, FEATURE_FLAGS } from './config.js';
|
||||
* const url = API_ENDPOINTS.prism + '/agents/runs';
|
||||
*
|
||||
* For real API integration (v0.2.0+):
|
||||
* 1. Set FEATURE_FLAGS.enableRealAPIs = true
|
||||
* 2. Update API_ENDPOINTS with actual backend URLs
|
||||
* 3. Apps will automatically use real endpoints instead of MockData
|
||||
*/
|
||||
|
||||
const Config = {
|
||||
/**
|
||||
* Application metadata
|
||||
*/
|
||||
APP: {
|
||||
name: 'BlackRoad OS',
|
||||
version: '0.1.1',
|
||||
buildDate: '2025-11-16',
|
||||
environment: 'development' // development | production
|
||||
},
|
||||
|
||||
/**
|
||||
* Feature flags for controlling functionality
|
||||
* Toggle these to enable/disable features without code changes
|
||||
*/
|
||||
FEATURE_FLAGS: {
|
||||
// API & Data
|
||||
enableRealAPIs: false, // Use real backend APIs instead of mock data
|
||||
enableDebugLogging: true, // Show detailed console logs
|
||||
enablePerformanceMetrics: false, // Track and log performance metrics
|
||||
|
||||
// UI Features
|
||||
enableCommandPalette: false, // Ctrl+K command palette (v0.2.0)
|
||||
enableWindowResize: false, // Window resizing (v0.2.0)
|
||||
enableWindowMaximize: false, // Window maximize (v0.2.0)
|
||||
enableThemeBuilder: false, // Custom theme builder (v0.2.0)
|
||||
enableNotificationSound: false, // Audio notifications
|
||||
|
||||
// Advanced Features
|
||||
enableWindowPersistence: false, // Remember window positions (v0.2.0)
|
||||
enableMultiUser: false, // Multi-user support (v0.3.0)
|
||||
enableCollaboration: false, // Real-time collaboration (v0.3.0)
|
||||
enableAnalytics: false // Usage analytics tracking
|
||||
},
|
||||
|
||||
/**
|
||||
* API Endpoints
|
||||
* Update these when connecting to real backend services
|
||||
*
|
||||
* Current: All point to mock data layer
|
||||
* Future: Point to actual FastAPI/Next.js backends
|
||||
*/
|
||||
API_ENDPOINTS: {
|
||||
// Base URLs
|
||||
base: 'https://api.blackroad.io', // Main API base
|
||||
prism: 'https://api.blackroad.io/prism', // Prism agent system
|
||||
miners: 'https://api.blackroad.io/miners', // Mining operations
|
||||
piOps: 'https://api.blackroad.io/pi', // Pi device management
|
||||
compliance: 'https://api.blackroad.io/compliance', // FINRA compliance
|
||||
finance: 'https://api.blackroad.io/finance', // Portfolio/AUM
|
||||
identity: 'https://api.blackroad.io/identity', // SHA∞ identity
|
||||
research: 'https://api.blackroad.io/research', // Lucidia research
|
||||
|
||||
// Specific endpoints (examples for future use)
|
||||
// TODO v0.2.0: Implement these when backend is ready
|
||||
agents: {
|
||||
runs: '/agents/runs',
|
||||
status: '/agents/status',
|
||||
logs: '/agents/logs'
|
||||
},
|
||||
miners: {
|
||||
list: '/miners',
|
||||
status: '/miners/:id/status',
|
||||
telemetry: '/miners/:id/telemetry'
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* App default configurations
|
||||
* Default window sizes, behaviors, and settings for each app
|
||||
*/
|
||||
APPS: {
|
||||
prism: {
|
||||
defaultWidth: '900px',
|
||||
defaultHeight: '700px',
|
||||
refreshInterval: 5000, // Auto-refresh every 5s
|
||||
maxLogLines: 1000
|
||||
},
|
||||
miners: {
|
||||
defaultWidth: '1000px',
|
||||
defaultHeight: '700px',
|
||||
refreshInterval: 10000, // Auto-refresh every 10s
|
||||
alertThreshold: {
|
||||
temperature: 80, // Alert if temp > 80°C
|
||||
hashrate: 100 // Alert if hashrate < 100 TH/s
|
||||
}
|
||||
},
|
||||
piOps: {
|
||||
defaultWidth: '900px',
|
||||
defaultHeight: '650px',
|
||||
refreshInterval: 30000, // Auto-refresh every 30s
|
||||
alertThreshold: {
|
||||
cpu: 90, // Alert if CPU > 90%
|
||||
memory: 90, // Alert if memory > 90%
|
||||
disk: 95 // Alert if disk > 95%
|
||||
}
|
||||
},
|
||||
runbooks: {
|
||||
defaultWidth: '1100px',
|
||||
defaultHeight: '750px',
|
||||
enableMarkdownPreview: true,
|
||||
autoSave: true
|
||||
},
|
||||
compliance: {
|
||||
defaultWidth: '1000px',
|
||||
defaultHeight: '700px',
|
||||
refreshInterval: 60000, // Auto-refresh every minute
|
||||
priorityLevels: ['critical', 'high', 'medium', 'low']
|
||||
},
|
||||
finance: {
|
||||
defaultWidth: '1100px',
|
||||
defaultHeight: '750px',
|
||||
refreshInterval: 15000, // Auto-refresh every 15s
|
||||
currency: 'USD',
|
||||
chartType: 'line' // line | bar | candlestick
|
||||
},
|
||||
identity: {
|
||||
defaultWidth: '1000px',
|
||||
defaultHeight: '700px',
|
||||
searchDebounce: 300, // Debounce search by 300ms
|
||||
pageSize: 50
|
||||
},
|
||||
research: {
|
||||
defaultWidth: '1000px',
|
||||
defaultHeight: '700px',
|
||||
enableLivePreview: true,
|
||||
autoSaveInterval: 30000 // Auto-save every 30s
|
||||
},
|
||||
engineering: {
|
||||
defaultWidth: '900px',
|
||||
defaultHeight: '700px',
|
||||
showInternalMetrics: true
|
||||
},
|
||||
settings: {
|
||||
defaultWidth: '700px',
|
||||
defaultHeight: '600px'
|
||||
},
|
||||
notifications: {
|
||||
defaultWidth: '500px',
|
||||
defaultHeight: '600px',
|
||||
markReadOnOpen: true,
|
||||
maxUnreadBadge: 99
|
||||
},
|
||||
corporate: {
|
||||
defaultWidth: '800px',
|
||||
defaultHeight: '600px'
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Theme configuration
|
||||
*/
|
||||
THEME: {
|
||||
default: 'tealOS',
|
||||
available: ['tealOS', 'nightOS'],
|
||||
transitionDuration: 300 // ms
|
||||
},
|
||||
|
||||
/**
|
||||
* System settings
|
||||
*/
|
||||
SYSTEM: {
|
||||
notificationDuration: 5000, // Default notification duration (ms)
|
||||
clockFormat: '24h', // 24h | 12h
|
||||
dateFormat: 'YYYY-MM-DD', // ISO format
|
||||
maxOpenWindows: 20, // Prevent memory issues
|
||||
zIndexMax: 9999, // Z-index ceiling
|
||||
autoSaveInterval: 60000 // Auto-save user data every minute
|
||||
},
|
||||
|
||||
/**
|
||||
* Keyboard shortcuts
|
||||
* Centralized registry (can be overridden in Settings v0.2.0)
|
||||
*/
|
||||
SHORTCUTS: {
|
||||
openCommandPalette: 'Ctrl+K',
|
||||
openPrism: 'Ctrl+Shift+P',
|
||||
openMiners: 'Ctrl+Shift+M',
|
||||
openEngineering: 'Ctrl+Shift+E',
|
||||
closeWindow: 'Escape',
|
||||
toggleTheme: 'Ctrl+Shift+T', // TODO: Implement
|
||||
toggleFullscreen: 'F11' // TODO: Implement
|
||||
},
|
||||
|
||||
/**
|
||||
* Get app configuration
|
||||
* @param {string} appId - App identifier
|
||||
* @returns {Object} App configuration
|
||||
*/
|
||||
getAppConfig(appId) {
|
||||
return this.APPS[appId] || {};
|
||||
},
|
||||
|
||||
/**
|
||||
* Check if feature flag is enabled
|
||||
* @param {string} flagName - Feature flag name
|
||||
* @returns {boolean} True if enabled
|
||||
*/
|
||||
isFeatureEnabled(flagName) {
|
||||
return this.FEATURE_FLAGS[flagName] === true;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get API endpoint
|
||||
* @param {string} service - Service name (e.g., 'prism', 'miners')
|
||||
* @param {string} path - Optional path to append
|
||||
* @returns {string} Full API URL
|
||||
*/
|
||||
getApiEndpoint(service, path = '') {
|
||||
const base = this.API_ENDPOINTS[service] || this.API_ENDPOINTS.base;
|
||||
return path ? `${base}${path}` : base;
|
||||
},
|
||||
|
||||
/**
|
||||
* Log configuration (for debugging)
|
||||
*/
|
||||
logConfig() {
|
||||
if (this.FEATURE_FLAGS.enableDebugLogging) {
|
||||
console.log('🔧 BlackRoad OS Configuration:', {
|
||||
version: this.APP.version,
|
||||
environment: this.APP.environment,
|
||||
realAPIsEnabled: this.FEATURE_FLAGS.enableRealAPIs,
|
||||
featureFlags: this.FEATURE_FLAGS
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Make globally available
|
||||
window.Config = Config;
|
||||
|
||||
// Log configuration on load
|
||||
Config.logConfig();
|
||||
|
||||
// Export for ES modules (future-proof)
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = Config;
|
||||
}
|
||||
Reference in New Issue
Block a user