Save current BZZZ config-ui state before CHORUS branding update
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
504
install/BZZZ_WEB_UI_PLAN.md
Normal file
504
install/BZZZ_WEB_UI_PLAN.md
Normal file
@@ -0,0 +1,504 @@
|
||||
# BZZZ Built-in Web Configuration UI Development Plan
|
||||
|
||||
## Clear Separation of Responsibilities
|
||||
|
||||
### chorus.services (Installer Host)
|
||||
- ✅ **Already Complete**: Hosts `install-chorus-enhanced.sh`
|
||||
- ✅ **Single Purpose**: One-line installation script download
|
||||
- ✅ **Working**: `curl -fsSL https://chorus.services/install.sh | sh`
|
||||
|
||||
### BZZZ (This Plan)
|
||||
- 🔄 **To Implement**: Built-in web UI for cluster configuration
|
||||
- 🎯 **Purpose**: Post-installation setup wizard when no config exists
|
||||
- 🌐 **Location**: Served by BZZZ itself at `:8080/setup`
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
The BZZZ binary will serve its own web UI for configuration when:
|
||||
1. No configuration file exists (first run)
|
||||
2. User explicitly accesses `:8080/setup`
|
||||
3. Configuration is incomplete or invalid
|
||||
|
||||
## Implementation Strategy
|
||||
|
||||
### Phase 1: Integrate Web UI into BZZZ Binary
|
||||
|
||||
#### 1.1 Embed Web UI in Go Binary
|
||||
**File**: `main.go` and new `pkg/webui/`
|
||||
|
||||
```go
|
||||
//go:embed web-ui/dist/*
|
||||
var webUIFiles embed.FS
|
||||
|
||||
func main() {
|
||||
// Check if configuration exists
|
||||
if !configExists() {
|
||||
log.Println("🌐 No configuration found, starting setup wizard...")
|
||||
startWebUI()
|
||||
}
|
||||
|
||||
// Normal BZZZ startup
|
||||
startBZZZServices()
|
||||
}
|
||||
|
||||
func startWebUI() {
|
||||
// Serve embedded web UI
|
||||
// Start configuration wizard
|
||||
// Block until configuration is complete
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.2 Extend Existing HTTP Server
|
||||
**File**: `api/http_server.go`
|
||||
|
||||
Add setup routes to existing server:
|
||||
```go
|
||||
func (h *HTTPServer) setupRoutes(router *mux.Router) {
|
||||
// Existing API routes
|
||||
api := router.PathPrefix("/api").Subrouter()
|
||||
// ... existing routes ...
|
||||
|
||||
// Setup wizard routes (only if no config exists)
|
||||
if !h.hasValidConfig() {
|
||||
h.setupWizardRoutes(router)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *HTTPServer) setupWizardRoutes(router *mux.Router) {
|
||||
// Serve static web UI files
|
||||
router.PathPrefix("/setup").Handler(http.StripPrefix("/setup",
|
||||
http.FileServer(http.FS(webUIFiles))))
|
||||
|
||||
// Setup API endpoints
|
||||
setup := router.PathPrefix("/api/setup").Subrouter()
|
||||
setup.HandleFunc("/system", h.handleSystemDetection).Methods("GET")
|
||||
setup.HandleFunc("/repository", h.handleRepositoryConfig).Methods("GET", "POST")
|
||||
setup.HandleFunc("/cluster", h.handleClusterConfig).Methods("GET", "POST")
|
||||
setup.HandleFunc("/validate", h.handleValidateConfig).Methods("POST")
|
||||
setup.HandleFunc("/save", h.handleSaveConfig).Methods("POST")
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 2: Configuration Management Integration
|
||||
|
||||
#### 2.1 Leverage Existing Config System
|
||||
**File**: `pkg/config/setup.go` (new)
|
||||
|
||||
```go
|
||||
type SetupManager struct {
|
||||
configPath string
|
||||
systemInfo *SystemInfo
|
||||
repoFactory *repository.DefaultProviderFactory
|
||||
taskCoordinator *coordinator.TaskCoordinator
|
||||
}
|
||||
|
||||
func (s *SetupManager) DetectSystem() (*SystemInfo, error) {
|
||||
// Hardware detection (GPU, CPU, memory)
|
||||
// Network interface discovery
|
||||
// Software prerequisites check
|
||||
return systemInfo, nil
|
||||
}
|
||||
|
||||
func (s *SetupManager) ValidateRepositoryConfig(config RepositoryConfig) error {
|
||||
// Use existing repository factory
|
||||
provider, err := s.repoFactory.CreateProvider(ctx, &repository.Config{
|
||||
Provider: config.Provider,
|
||||
BaseURL: config.BaseURL,
|
||||
AccessToken: config.Token,
|
||||
// ...
|
||||
})
|
||||
|
||||
// Test connectivity
|
||||
return provider.ListAvailableTasks()
|
||||
}
|
||||
|
||||
func (s *SetupManager) SaveConfiguration(config *SetupConfig) error {
|
||||
// Convert to existing config.Config format
|
||||
bzzzConfig := &config.Config{
|
||||
Node: config.NodeConfig,
|
||||
Repository: config.RepositoryConfig,
|
||||
Agent: config.AgentConfig,
|
||||
// ...
|
||||
}
|
||||
|
||||
// Save to YAML file
|
||||
return bzzzConfig.SaveToFile(s.configPath)
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 Repository Integration
|
||||
**File**: `api/setup_repository.go` (new)
|
||||
|
||||
```go
|
||||
func (h *HTTPServer) handleRepositoryConfig(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == "GET" {
|
||||
// Return current repository configuration
|
||||
config := h.setupManager.GetRepositoryConfig()
|
||||
json.NewEncoder(w).Encode(config)
|
||||
return
|
||||
}
|
||||
|
||||
// POST: Validate and save repository configuration
|
||||
var repoConfig RepositoryConfig
|
||||
if err := json.NewDecoder(r.Body).Decode(&repoConfig); err != nil {
|
||||
http.Error(w, "Invalid JSON", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// Validate using existing repository factory
|
||||
if err := h.setupManager.ValidateRepositoryConfig(repoConfig); err != nil {
|
||||
http.Error(w, fmt.Sprintf("Repository validation failed: %v", err), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// Save configuration
|
||||
h.setupManager.SaveRepositoryConfig(repoConfig)
|
||||
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 3: Enhanced Web UI Components
|
||||
|
||||
#### 3.1 Complete Existing Components
|
||||
The config-ui framework exists but needs implementation:
|
||||
|
||||
**SystemDetection.tsx**:
|
||||
```typescript
|
||||
const SystemDetection = ({ onComplete, onBack }) => {
|
||||
const [systemInfo, setSystemInfo] = useState(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
fetch('/api/setup/system')
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
setSystemInfo(data);
|
||||
setLoading(false);
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h3>System Detection Results</h3>
|
||||
{systemInfo && (
|
||||
<div>
|
||||
<div>OS: {systemInfo.os}</div>
|
||||
<div>Architecture: {systemInfo.arch}</div>
|
||||
<div>GPUs: {systemInfo.gpus?.length || 0}</div>
|
||||
<div>Memory: {systemInfo.memory}</div>
|
||||
{systemInfo.gpus?.length > 1 && (
|
||||
<div className="alert alert-info">
|
||||
💡 Multi-GPU detected! Consider Parallama for optimal performance.
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
<button onClick={() => onComplete(systemInfo)}>Continue</button>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
```
|
||||
|
||||
**RepositoryConfiguration.tsx**:
|
||||
```typescript
|
||||
const RepositoryConfiguration = ({ onComplete, onBack, configData }) => {
|
||||
const [provider, setProvider] = useState('gitea');
|
||||
const [config, setConfig] = useState({
|
||||
provider: 'gitea',
|
||||
baseURL: 'http://ironwood:3000',
|
||||
owner: '',
|
||||
repository: '',
|
||||
token: ''
|
||||
});
|
||||
const [validating, setValidating] = useState(false);
|
||||
|
||||
const validateConfig = async () => {
|
||||
setValidating(true);
|
||||
try {
|
||||
const response = await fetch('/api/setup/repository', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(config)
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
onComplete(config);
|
||||
} else {
|
||||
const error = await response.text();
|
||||
alert(`Validation failed: ${error}`);
|
||||
}
|
||||
} catch (error) {
|
||||
alert(`Connection failed: ${error.message}`);
|
||||
}
|
||||
setValidating(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h3>Repository Configuration</h3>
|
||||
<form onSubmit={(e) => { e.preventDefault(); validateConfig(); }}>
|
||||
<div>
|
||||
<label>Provider:</label>
|
||||
<select value={provider} onChange={(e) => setProvider(e.target.value)}>
|
||||
<option value="gitea">GITEA (Self-hosted)</option>
|
||||
<option value="github">GitHub</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{provider === 'gitea' && (
|
||||
<div>
|
||||
<label>GITEA URL:</label>
|
||||
<input
|
||||
value={config.baseURL}
|
||||
onChange={(e) => setConfig({...config, baseURL: e.target.value})}
|
||||
placeholder="http://ironwood:3000"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div>
|
||||
<label>Repository Owner:</label>
|
||||
<input
|
||||
value={config.owner}
|
||||
onChange={(e) => setConfig({...config, owner: e.target.value})}
|
||||
placeholder="username or organization"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label>Repository Name:</label>
|
||||
<input
|
||||
value={config.repository}
|
||||
onChange={(e) => setConfig({...config, repository: e.target.value})}
|
||||
placeholder="repository name"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label>Access Token:</label>
|
||||
<input
|
||||
type="password"
|
||||
value={config.token}
|
||||
onChange={(e) => setConfig({...config, token: e.target.value})}
|
||||
placeholder="access token"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button type="button" onClick={onBack}>Back</button>
|
||||
<button type="submit" disabled={validating}>
|
||||
{validating ? 'Validating...' : 'Validate & Continue'}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
```
|
||||
|
||||
### Phase 4: Build Process Integration
|
||||
|
||||
#### 4.1 Web UI Build Integration
|
||||
**File**: `Makefile` or build script
|
||||
|
||||
```bash
|
||||
build-web-ui:
|
||||
cd install/config-ui && npm install && npm run build
|
||||
mkdir -p web-ui/dist
|
||||
cp -r install/config-ui/.next/static web-ui/dist/
|
||||
cp -r install/config-ui/out/* web-ui/dist/ 2>/dev/null || true
|
||||
|
||||
build-bzzz: build-web-ui
|
||||
go build -o bzzz main.go
|
||||
```
|
||||
|
||||
#### 4.2 Embed Files in Binary
|
||||
**File**: `pkg/webui/embed.go`
|
||||
|
||||
```go
|
||||
package webui
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
//go:embed dist/*
|
||||
var webUIFiles embed.FS
|
||||
|
||||
func GetWebUIHandler() http.Handler {
|
||||
// Get the web-ui subdirectory
|
||||
webUIFS, err := fs.Sub(webUIFiles, "dist")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return http.FileServer(http.FS(webUIFS))
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 5: Configuration Flow Integration
|
||||
|
||||
#### 5.1 Startup Logic
|
||||
**File**: `main.go`
|
||||
|
||||
```go
|
||||
func main() {
|
||||
configPath := getConfigPath()
|
||||
|
||||
// Check if configuration exists and is valid
|
||||
config, err := loadConfig(configPath)
|
||||
if err != nil || !isValidConfig(config) {
|
||||
fmt.Println("🌐 Starting BZZZ setup wizard...")
|
||||
fmt.Printf("📱 Open your browser to: http://localhost:8080/setup\n")
|
||||
|
||||
// Start HTTP server in setup mode
|
||||
startSetupMode(configPath)
|
||||
|
||||
// Wait for configuration to be saved
|
||||
waitForConfiguration(configPath)
|
||||
|
||||
// Reload configuration
|
||||
config, err = loadConfig(configPath)
|
||||
if err != nil {
|
||||
log.Fatal("Failed to load configuration after setup:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Normal BZZZ startup with configuration
|
||||
fmt.Println("🚀 Starting BZZZ with configuration...")
|
||||
startNormalMode(config)
|
||||
}
|
||||
|
||||
func startSetupMode(configPath string) {
|
||||
// Start HTTP server in setup mode
|
||||
setupManager := NewSetupManager(configPath)
|
||||
httpServer := api.NewHTTPServer(8080, nil, nil)
|
||||
httpServer.SetSetupManager(setupManager)
|
||||
|
||||
go func() {
|
||||
if err := httpServer.Start(); err != nil {
|
||||
log.Fatal("Failed to start setup server:", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func waitForConfiguration(configPath string) {
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
if fileExists(configPath) {
|
||||
if config, err := loadConfig(configPath); err == nil && isValidConfig(config) {
|
||||
fmt.Println("✅ Configuration saved successfully!")
|
||||
return
|
||||
}
|
||||
}
|
||||
case <-time.After(30 * time.Minute):
|
||||
log.Fatal("Setup timeout - no configuration provided within 30 minutes")
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 5.2 Configuration Validation
|
||||
**File**: `pkg/config/validation.go`
|
||||
|
||||
```go
|
||||
func isValidConfig(config *Config) bool {
|
||||
// Check required fields
|
||||
if config.Node.ID == "" || config.Node.Role == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
// Check repository configuration
|
||||
if config.Repository.Provider == "" || config.Repository.Config.Owner == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
// Check agent configuration
|
||||
if config.Agent.ID == "" || len(config.Agent.Expertise) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
```
|
||||
|
||||
## Integration with Existing Systems
|
||||
|
||||
### ✅ **Leverage Without Changes**
|
||||
1. **HTTP Server** (`api/http_server.go`) - Extend with setup routes
|
||||
2. **Configuration System** (`pkg/config/`) - Use existing YAML structure
|
||||
3. **Repository Factory** (`repository/factory.go`) - Validate credentials
|
||||
4. **Task Coordinator** (`coordinator/task_coordinator.go`) - Agent management
|
||||
|
||||
### 🔧 **Minimal Extensions**
|
||||
1. **Setup Manager** - New component using existing systems
|
||||
2. **Web UI Routes** - Add to existing HTTP server
|
||||
3. **Embedded Files** - Add web UI to binary
|
||||
4. **Startup Logic** - Add configuration check to main.go
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
/home/tony/chorus/project-queues/active/BZZZ/
|
||||
├── main.go # Enhanced startup logic
|
||||
├── api/
|
||||
│ ├── http_server.go # Extended with setup routes
|
||||
│ ├── setup_handlers.go # New setup API handlers
|
||||
│ └── setup_repository.go # Repository configuration API
|
||||
├── pkg/
|
||||
│ ├── config/
|
||||
│ │ ├── config.go # Existing
|
||||
│ │ ├── setup.go # New setup manager
|
||||
│ │ └── validation.go # New validation logic
|
||||
│ └── webui/
|
||||
│ └── embed.go # New embedded web UI
|
||||
├── install/config-ui/ # Existing React app
|
||||
│ ├── app/setup/page.tsx # Existing wizard framework
|
||||
│ ├── app/setup/components/ # Complete component implementations
|
||||
│ └── package.json # Existing
|
||||
└── web-ui/ # Build output (embedded)
|
||||
└── dist/ # Generated by build process
|
||||
```
|
||||
|
||||
## Implementation Timeline
|
||||
|
||||
### Week 1: Core Integration
|
||||
- **Day 1**: Setup manager and configuration validation
|
||||
- **Day 2**: Extend HTTP server with setup routes
|
||||
- **Day 3**: Repository configuration API integration
|
||||
- **Day 4**: System detection and hardware profiling
|
||||
- **Day 5**: Build process and file embedding
|
||||
|
||||
### Week 2: Web UI Implementation
|
||||
- **Day 1-2**: Complete SystemDetection and RepositoryConfiguration components
|
||||
- **Day 3-4**: Cluster formation and validation components
|
||||
- **Day 5**: UI polish and error handling
|
||||
|
||||
### Week 3: Integration and Testing
|
||||
- **Day 1-2**: End-to-end configuration flow testing
|
||||
- **Day 3-4**: Multi-node cluster testing
|
||||
- **Day 5**: Documentation and deployment
|
||||
|
||||
## Success Criteria
|
||||
|
||||
### Technical
|
||||
- [ ] BZZZ binary serves web UI when no config exists
|
||||
- [ ] Complete 8-step setup wizard functional
|
||||
- [ ] Repository integration with GITEA/GitHub validation
|
||||
- [ ] Configuration saves to existing YAML format
|
||||
- [ ] Seamless transition from setup to normal operation
|
||||
|
||||
### User Experience
|
||||
- [ ] Zero-config startup launches web wizard
|
||||
- [ ] Intuitive setup flow with validation
|
||||
- [ ] Professional UI matching BZZZ branding
|
||||
- [ ] Clear error messages and recovery options
|
||||
- [ ] Mobile-responsive design
|
||||
|
||||
This plan keeps the clear separation between the chorus.services installer (already working) and BZZZ's built-in configuration system (to be implemented).
|
||||
251
install/ENHANCED_VS_VISION_COMPARISON.md
Normal file
251
install/ENHANCED_VS_VISION_COMPARISON.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# Enhanced Installer vs INSTALLATION_SYSTEM Vision Comparison
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Our enhanced installer (`install-chorus-enhanced.sh`) addresses the **repository integration gap** but falls significantly short of the comprehensive **INSTALLATION_SYSTEM.md** vision. While we delivered immediate functionality, we missed the sophisticated multi-phase setup system with web UI that was originally planned.
|
||||
|
||||
## Detailed Feature Comparison
|
||||
|
||||
### ✅ **What We Successfully Delivered**
|
||||
|
||||
| Feature | Enhanced Installer | Original Vision | Status |
|
||||
|---------|-------------------|-----------------|--------|
|
||||
| One-command install | ✅ `curl \| sh` | ✅ `curl \| sh` | **MATCH** |
|
||||
| System detection | ✅ OS, arch, packages | ✅ Hardware, GPU, network | **PARTIAL** |
|
||||
| Binary installation | ✅ Architecture-specific | ✅ `/opt/bzzz/` structure | **BASIC** |
|
||||
| Service management | ✅ SystemD integration | ✅ SystemD + monitoring | **PARTIAL** |
|
||||
| Configuration generation | ✅ YAML config files | ✅ Web-based wizard | **SIMPLIFIED** |
|
||||
| Repository integration | ✅ GITEA/GitHub setup | ❌ Not specified | **EXCEEDED** |
|
||||
|
||||
### 🔴 **Critical Missing Components**
|
||||
|
||||
#### 1. Web-Based Configuration Interface
|
||||
**Vision**: React-based setup wizard at `:8080/setup`
|
||||
```
|
||||
🚀 8-Step Configuration Wizard:
|
||||
1. System Detection & Validation
|
||||
2. Network Configuration
|
||||
3. Security Setup
|
||||
4. AI Integration
|
||||
5. Resource Allocation
|
||||
6. Service Deployment
|
||||
7. Cluster Formation
|
||||
8. Testing & Validation
|
||||
```
|
||||
|
||||
**Our Implementation**: Command-line prompts only
|
||||
- ❌ No web UI
|
||||
- ❌ No beautiful React interface
|
||||
- ❌ No progressive setup wizard
|
||||
- ❌ No real-time validation
|
||||
|
||||
#### 2. GPU Detection & Parallama Integration
|
||||
**Vision**: Intelligent multi-GPU detection
|
||||
```bash
|
||||
🚀 Multi-GPU Setup Detected (4 NVIDIA GPUs)
|
||||
Parallama is RECOMMENDED for optimal multi-GPU performance!
|
||||
|
||||
Options:
|
||||
1. Install Parallama (recommended for GPU setups)
|
||||
2. Install standard Ollama
|
||||
3. Skip Ollama installation (configure later)
|
||||
```
|
||||
|
||||
**Our Implementation**: Basic Ollama installation
|
||||
- ❌ No GPU detection
|
||||
- ❌ No Parallama recommendation
|
||||
- ❌ No multi-GPU optimization
|
||||
- ✅ Basic Ollama model installation
|
||||
|
||||
#### 3. Advanced System Detection
|
||||
**Vision**: Comprehensive hardware analysis
|
||||
- CPU cores and model detection
|
||||
- GPU configuration (NVIDIA/AMD)
|
||||
- Memory and storage analysis
|
||||
- Network interface detection
|
||||
|
||||
**Our Implementation**: Basic OS detection
|
||||
- ✅ OS and architecture detection
|
||||
- ✅ Package manager detection
|
||||
- ❌ No hardware profiling
|
||||
- ❌ No GPU analysis
|
||||
|
||||
#### 4. Security Configuration
|
||||
**Vision**: Enterprise-grade security setup
|
||||
- SSH key generation/management
|
||||
- TLS/SSL certificate configuration
|
||||
- Authentication method selection (token, OAuth2, LDAP)
|
||||
- Security policy configuration
|
||||
|
||||
**Our Implementation**: Basic token storage
|
||||
- ✅ Repository token management
|
||||
- ✅ Secure file permissions
|
||||
- ❌ No SSH key management
|
||||
- ❌ No TLS configuration
|
||||
- ❌ No enterprise authentication
|
||||
|
||||
#### 5. Resource Management Interface
|
||||
**Vision**: Interactive resource allocation
|
||||
- CPU/Memory allocation sliders
|
||||
- Storage path configuration
|
||||
- GPU assignment for Parallama
|
||||
- Resource monitoring setup
|
||||
|
||||
**Our Implementation**: Static configuration
|
||||
- ✅ Basic resource settings in YAML
|
||||
- ❌ No interactive allocation
|
||||
- ❌ No resource monitoring
|
||||
- ❌ No GPU management
|
||||
|
||||
#### 6. Professional Installation Experience
|
||||
**Vision**: Modern, branded installation
|
||||
```bash
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔥 BZZZ Distributed AI Coordination Platform
|
||||
Installer v1.0
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[INFO] Detected OS: Ubuntu 22.04
|
||||
[SUCCESS] System requirements check passed
|
||||
[SUCCESS] BZZZ binaries installed successfully
|
||||
```
|
||||
|
||||
**Our Implementation**: Basic colored output
|
||||
- ✅ Colored logging functions
|
||||
- ✅ ASCII banner
|
||||
- ❌ No professional progress indicators
|
||||
- ❌ No detailed installation steps
|
||||
|
||||
## Architecture Philosophy Differences
|
||||
|
||||
### Original INSTALLATION_SYSTEM Vision
|
||||
- **Web-First**: React-based configuration interface
|
||||
- **GPU-Optimized**: Parallama multi-GPU support
|
||||
- **Enterprise-Ready**: LDAP, TLS, advanced security
|
||||
- **Production-Grade**: Comprehensive monitoring and validation
|
||||
- **User-Friendly**: Beautiful UI with real-time feedback
|
||||
|
||||
### Our Enhanced Installer Implementation
|
||||
- **CLI-First**: Command-line configuration
|
||||
- **Repository-Focused**: Git-based task coordination
|
||||
- **Functional-Minimal**: Working system with basic features
|
||||
- **Manual-Friendly**: Interactive prompts and text output
|
||||
- **Gap-Solving**: Addresses immediate deployment needs
|
||||
|
||||
## Feature Gap Analysis
|
||||
|
||||
### 🔴 **HIGH PRIORITY MISSING**
|
||||
|
||||
1. **Web Configuration UI** (`/setup` interface)
|
||||
- Impact: No user-friendly setup experience
|
||||
- Effort: High (full React app)
|
||||
- Priority: Critical for adoption
|
||||
|
||||
2. **GPU Detection & Parallama**
|
||||
- Impact: Suboptimal multi-GPU performance
|
||||
- Effort: Medium (hardware detection)
|
||||
- Priority: High for AI workloads
|
||||
|
||||
3. **Advanced System Detection**
|
||||
- Impact: Manual configuration required
|
||||
- Effort: Medium (system introspection)
|
||||
- Priority: Medium for automation
|
||||
|
||||
### 🟡 **MEDIUM PRIORITY MISSING**
|
||||
|
||||
4. **SSH Key Management**
|
||||
- Impact: Manual cluster deployment
|
||||
- Effort: Medium (key generation/distribution)
|
||||
- Priority: Medium for scaling
|
||||
|
||||
5. **Resource Allocation Interface**
|
||||
- Impact: Static resource assignment
|
||||
- Effort: High (interactive UI)
|
||||
- Priority: Medium for optimization
|
||||
|
||||
6. **TLS/SSL Configuration**
|
||||
- Impact: Insecure communications
|
||||
- Effort: Medium (cert management)
|
||||
- Priority: Medium for production
|
||||
|
||||
### 🟢 **LOW PRIORITY MISSING**
|
||||
|
||||
7. **LDAP/Enterprise Auth**
|
||||
- Impact: Basic authentication only
|
||||
- Effort: High (enterprise integration)
|
||||
- Priority: Low for initial deployment
|
||||
|
||||
8. **Advanced Monitoring**
|
||||
- Impact: Basic health checking
|
||||
- Effort: Medium (monitoring stack)
|
||||
- Priority: Low for MVP
|
||||
|
||||
## What We Actually Built vs Vision
|
||||
|
||||
### Our Enhanced Installer Strengths
|
||||
✅ **Repository Integration**: Complete GITEA/GitHub setup
|
||||
✅ **Working System**: Functional task coordination immediately
|
||||
✅ **Simple Deployment**: Single command installation
|
||||
✅ **Documentation**: Comprehensive setup guide
|
||||
✅ **Token Management**: Secure credential handling
|
||||
|
||||
### Vision's Comprehensive Approach
|
||||
🔴 **Missing Web UI**: No React-based setup wizard
|
||||
🔴 **Missing GPU Optimization**: No Parallama integration
|
||||
🔴 **Missing Enterprise Features**: No LDAP, TLS, advanced security
|
||||
🔴 **Missing Resource Management**: No interactive allocation
|
||||
🔴 **Missing Professional UX**: No modern installation experience
|
||||
|
||||
## Implementation Recommendations
|
||||
|
||||
### Immediate (Address Critical Gaps)
|
||||
1. **Create Web UI** - Implement basic `/setup` interface
|
||||
2. **Add GPU Detection** - Basic hardware profiling
|
||||
3. **Improve Installation UX** - Better progress indicators
|
||||
|
||||
### Medium-term (Professional Features)
|
||||
1. **Parallama Integration** - Multi-GPU optimization
|
||||
2. **SSH Key Management** - Automated cluster deployment
|
||||
3. **Resource Allocation** - Interactive configuration
|
||||
|
||||
### Long-term (Enterprise Grade)
|
||||
1. **Advanced Security** - TLS, LDAP, enterprise auth
|
||||
2. **Monitoring Stack** - Comprehensive system monitoring
|
||||
3. **Professional UI** - Full React setup wizard
|
||||
|
||||
## Strategic Decision Points
|
||||
|
||||
### Current State Assessment
|
||||
- ✅ **Functional**: System works for task coordination
|
||||
- ✅ **Deployable**: Can install and run immediately
|
||||
- ❌ **Professional**: Lacks enterprise-grade UX
|
||||
- ❌ **Optimized**: Missing GPU and resource optimization
|
||||
- ❌ **Scalable**: No automated cluster deployment
|
||||
|
||||
### Path Forward Options
|
||||
|
||||
#### Option A: Enhance Current Approach
|
||||
- Add web UI to existing installer
|
||||
- Maintain CLI-first philosophy
|
||||
- Gradual feature addition
|
||||
|
||||
#### Option B: Rebuild to Vision
|
||||
- Implement full INSTALLATION_SYSTEM design
|
||||
- Web-first configuration experience
|
||||
- Complete feature parity
|
||||
|
||||
#### Option C: Hybrid Approach
|
||||
- Keep working CLI installer
|
||||
- Build parallel web UI system
|
||||
- Allow both installation methods
|
||||
|
||||
## Conclusion
|
||||
|
||||
Our enhanced installer successfully **solved the immediate repository integration problem** but represents a **significant simplification** of the original comprehensive vision.
|
||||
|
||||
**Current Achievement**: ✅ Working repository-integrated task coordination system
|
||||
**Original Vision**: 🔴 Professional, GPU-optimized, web-based installation platform
|
||||
|
||||
The implementation prioritizes **immediate functionality** over **comprehensive user experience**. While this enables rapid deployment and testing, it means we're missing the professional installation experience that would make BZZZ competitive with enterprise platforms.
|
||||
|
||||
**Strategic Recommendation**: Implement the web UI (`/setup` interface) as the next major milestone to bridge the gap between our functional system and the original professional vision.
|
||||
245
install/PLAN_COMPARISON.md
Normal file
245
install/PLAN_COMPARISON.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# BZZZ Installer: Plan vs Implementation Comparison
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Our enhanced installer (`install-chorus-enhanced.sh`) addresses **Phase 1: Initial Node Setup** but diverges significantly from the original comprehensive deployment plan. The implementation prioritizes immediate functionality over the sophisticated multi-phase security architecture originally envisioned.
|
||||
|
||||
## Phase-by-Phase Analysis
|
||||
|
||||
### ✅ Phase 1: Initial Node Setup & Key Generation
|
||||
|
||||
**Original Plan:**
|
||||
- Web UI at `:8080/setup` for configuration
|
||||
- Master key generation with ONCE-ONLY display
|
||||
- Shamir's Secret Sharing for admin keys
|
||||
- Security-first design with complex key management
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ Single-command installation (`curl | sh`)
|
||||
- ✅ System detection and validation
|
||||
- ✅ BZZZ binary installation
|
||||
- ✅ Interactive configuration prompts
|
||||
- ❌ **MAJOR GAP**: No web UI setup interface
|
||||
- ❌ **CRITICAL MISSING**: No master key generation
|
||||
- ❌ **SECURITY GAP**: No Shamir's Secret Sharing
|
||||
- ❌ **SIMPLIFICATION**: Basic YAML config instead of sophisticated key management
|
||||
|
||||
**Gap Assessment:** 🔴 **SIGNIFICANT DEVIATION**
|
||||
The enhanced installer implements a simplified approach focused on repository integration rather than the security-first cryptographic design.
|
||||
|
||||
### ❌ Phase 2: SSH Cluster Deployment
|
||||
|
||||
**Original Plan:**
|
||||
- Web UI for manual IP entry
|
||||
- SSH-based remote installation across cluster
|
||||
- Automated deployment to multiple nodes
|
||||
- Cluster coordination through central web interface
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ Manual installation per node (user runs script on each machine)
|
||||
- ✅ Repository configuration with credentials
|
||||
- ❌ **MISSING**: No SSH-based remote deployment
|
||||
- ❌ **MISSING**: No centralized cluster management
|
||||
- ❌ **MANUAL PROCESS**: User must run installer on each node individually
|
||||
|
||||
**Gap Assessment:** 🔴 **NOT IMPLEMENTED**
|
||||
Current approach requires manual installation on each node. No automated cluster deployment.
|
||||
|
||||
### ❌ Phase 3: P2P Network Formation & Capability Discovery
|
||||
|
||||
**Original Plan:**
|
||||
- Automatic P2P network bootstrap
|
||||
- Capability announcement (GPU, CPU, memory, storage)
|
||||
- Dynamic network topology optimization
|
||||
- Shamir share distribution across peers
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ P2P network components exist in codebase
|
||||
- ✅ Node capability configuration in YAML
|
||||
- ❌ **MISSING**: No automatic capability discovery
|
||||
- ❌ **MISSING**: No dynamic network formation
|
||||
- ❌ **MISSING**: No Shamir share distribution
|
||||
|
||||
**Gap Assessment:** 🔴 **FOUNDATIONAL MISSING**
|
||||
P2P capabilities exist but installer doesn't configure automatic network formation.
|
||||
|
||||
### ❌ Phase 4: Leader Election & SLURP Responsibilities
|
||||
|
||||
**Original Plan:**
|
||||
- Sophisticated leader election with weighted scoring
|
||||
- SLURP (Service Layer Unified Resource Protocol) coordination
|
||||
- Leader handles resource orchestration and model distribution
|
||||
- Clear separation between Leader (operations) and Admin (oversight)
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ Election code exists in codebase (`pkg/election/`)
|
||||
- ✅ SLURP architecture implemented
|
||||
- ❌ **MISSING**: No automatic leader election setup
|
||||
- ❌ **MISSING**: No SLURP coordination configuration
|
||||
- ❌ **CONFIGURATION GAP**: Manual role assignment only
|
||||
|
||||
**Gap Assessment:** 🔴 **ADVANCED FEATURES MISSING**
|
||||
Infrastructure exists but not activated by installer.
|
||||
|
||||
### ❌ Phase 5: Business Configuration & DHT Storage
|
||||
|
||||
**Original Plan:**
|
||||
- DHT network for distributed business data storage
|
||||
- UCXL addressing for configuration data
|
||||
- Migration from local to distributed storage
|
||||
- Encrypted business data in DHT
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ DHT code exists (`pkg/dht/`)
|
||||
- ✅ UCXL addressing implemented
|
||||
- ❌ **MISSING**: No DHT network activation
|
||||
- ❌ **MISSING**: No business data migration
|
||||
- ❌ **BASIC CONFIG**: Simple local YAML files only
|
||||
|
||||
**Gap Assessment:** 🔴 **DISTRIBUTED STORAGE UNUSED**
|
||||
Sophisticated storage architecture exists but installer uses basic local configs.
|
||||
|
||||
### ❌ Phase 6: Model Distribution & Synchronization
|
||||
|
||||
**Original Plan:**
|
||||
- P2P model distribution based on VRAM capacity
|
||||
- Automatic model replication and redundancy
|
||||
- Load balancing and geographic distribution
|
||||
- Version synchronization (marked as TODO in plan)
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ Ollama integration for model management
|
||||
- ✅ Model installation via command line flags
|
||||
- ❌ **MISSING**: No P2P model distribution
|
||||
- ❌ **MISSING**: No automatic model replication
|
||||
- ❌ **SIMPLE**: Local Ollama model installation only
|
||||
|
||||
**Gap Assessment:** 🔴 **BASIC MODEL MANAGEMENT**
|
||||
Individual node model installation, no cluster-wide distribution.
|
||||
|
||||
### ❌ Phase 7: Role-Based Key Generation
|
||||
|
||||
**Original Plan:**
|
||||
- Dynamic role definition via web UI
|
||||
- Admin key reconstruction for role signing
|
||||
- Role-based access control deployment
|
||||
- Sophisticated permission management
|
||||
|
||||
**Our Implementation:**
|
||||
- ✅ Repository-based role assignment (basic)
|
||||
- ✅ Agent role configuration in YAML
|
||||
- ❌ **MISSING**: No dynamic role creation
|
||||
- ❌ **MISSING**: No key-based role management
|
||||
- ❌ **BASIC**: Simple string-based role assignment
|
||||
|
||||
**Gap Assessment:** 🔴 **ENTERPRISE FEATURES MISSING**
|
||||
Basic role strings instead of cryptographic role management.
|
||||
|
||||
## Implementation Philosophy Divergence
|
||||
|
||||
### Original Plan Philosophy
|
||||
- **Security-First**: Complex cryptographic key management
|
||||
- **Enterprise-Grade**: Sophisticated multi-phase deployment
|
||||
- **Centralized Management**: Web UI for cluster coordination
|
||||
- **Automated Operations**: SSH-based remote deployment
|
||||
- **Distributed Architecture**: DHT storage, P2P model distribution
|
||||
|
||||
### Our Implementation Philosophy
|
||||
- **Simplicity-First**: Get working system quickly
|
||||
- **Repository-Centric**: Focus on task coordination via Git
|
||||
- **Manual-Friendly**: User-driven installation per node
|
||||
- **Local Configuration**: YAML files instead of distributed storage
|
||||
- **Immediate Functionality**: Working agent over complex architecture
|
||||
|
||||
## Critical Missing Components
|
||||
|
||||
### 🔴 HIGH PRIORITY GAPS
|
||||
|
||||
1. **Web UI Setup Interface**
|
||||
- Original: Rich web interface at `:8080/setup`
|
||||
- Current: Command-line prompts only
|
||||
- Impact: No user-friendly cluster management
|
||||
|
||||
2. **Master Key Generation & Display**
|
||||
- Original: One-time master key display with security warnings
|
||||
- Current: No cryptographic key management
|
||||
- Impact: No secure cluster recovery mechanism
|
||||
|
||||
3. **SSH-Based Cluster Deployment**
|
||||
- Original: Deploy from one node to entire cluster
|
||||
- Current: Manual installation on each node
|
||||
- Impact: Scaling difficulty, no centralized deployment
|
||||
|
||||
4. **Automatic P2P Network Formation**
|
||||
- Original: Nodes discover and organize automatically
|
||||
- Current: Static configuration per node
|
||||
- Impact: No dynamic cluster topology
|
||||
|
||||
### 🟡 MEDIUM PRIORITY GAPS
|
||||
|
||||
5. **Shamir's Secret Sharing**
|
||||
- Original: Distributed admin key management
|
||||
- Current: No key splitting or distribution
|
||||
- Impact: Single points of failure
|
||||
|
||||
6. **Leader Election Activation**
|
||||
- Original: Automatic leader selection with weighted scoring
|
||||
- Current: Manual coordinator assignment
|
||||
- Impact: No dynamic leadership, manual failover
|
||||
|
||||
7. **DHT Business Configuration**
|
||||
- Original: Distributed configuration storage
|
||||
- Current: Local YAML files
|
||||
- Impact: No configuration replication or consistency
|
||||
|
||||
8. **P2P Model Distribution**
|
||||
- Original: Cluster-wide model synchronization
|
||||
- Current: Individual node model management
|
||||
- Impact: Manual model management across cluster
|
||||
|
||||
## Architectural Trade-offs Made
|
||||
|
||||
### ✅ **GAINED: Simplicity & Speed**
|
||||
- Fast installation (single command)
|
||||
- Working system in minutes
|
||||
- Repository integration works immediately
|
||||
- Clear configuration files
|
||||
- Easy troubleshooting
|
||||
|
||||
### ❌ **LOST: Enterprise Features**
|
||||
- No centralized cluster management
|
||||
- No cryptographic security model
|
||||
- No automatic scaling capabilities
|
||||
- No distributed configuration
|
||||
- No sophisticated failure recovery
|
||||
|
||||
## Recommendations
|
||||
|
||||
### Short-term (Immediate)
|
||||
1. **Document the gap** - Users need to understand current limitations
|
||||
2. **Manual cluster setup guide** - Document how to deploy across multiple nodes manually
|
||||
3. **Basic health checking** - Add cluster connectivity validation
|
||||
4. **Configuration templates** - Provide coordinator vs worker config examples
|
||||
|
||||
### Medium-term (Next Phase)
|
||||
1. **Web UI Development** - Implement the missing `:8080/setup` interface
|
||||
2. **SSH Deployment Module** - Add remote installation capabilities
|
||||
3. **P2P Network Activation** - Enable automatic peer discovery
|
||||
4. **Basic Key Management** - Implement simplified security model
|
||||
|
||||
### Long-term (Strategic)
|
||||
1. **Full Plan Implementation** - Gradually implement all 7 phases
|
||||
2. **Security Architecture** - Add Shamir's Secret Sharing and master keys
|
||||
3. **Enterprise Features** - Leader election, DHT storage, model distribution
|
||||
4. **Migration Path** - Allow upgrading from simple to sophisticated deployment
|
||||
|
||||
## Conclusion
|
||||
|
||||
Our enhanced installer successfully delivers **immediate functionality** for repository-based task coordination but represents a **significant simplification** of the original comprehensive plan.
|
||||
|
||||
**Current State:** ✅ Single-node ready, repository integrated, immediately useful
|
||||
**Original Vision:** 🔴 Enterprise-grade, security-first, fully distributed cluster
|
||||
|
||||
The implementation prioritizes **time-to-value** over **comprehensive architecture**. While this enables rapid deployment and testing, it means users must manually scale and manage clusters rather than having sophisticated automated deployment and management capabilities.
|
||||
|
||||
**Strategic Decision Point:** Continue with simplified approach for rapid iteration, or invest in implementing the full sophisticated architecture as originally planned.
|
||||
355
install/SETUP_INTEGRATION_GUIDE.md
Normal file
355
install/SETUP_INTEGRATION_GUIDE.md
Normal file
@@ -0,0 +1,355 @@
|
||||
# BZZZ Web Configuration Setup Integration Guide
|
||||
|
||||
This guide explains how to use the new integrated web-based configuration system for BZZZ.
|
||||
|
||||
## Overview
|
||||
|
||||
BZZZ now includes an embedded web configuration interface that automatically activates when:
|
||||
- No configuration file exists
|
||||
- The existing configuration is invalid or incomplete
|
||||
- Setup is explicitly required
|
||||
|
||||
## Features
|
||||
|
||||
### 🎯 Automatic Setup Detection
|
||||
- BZZZ automatically detects when setup is required on startup
|
||||
- No separate installation or configuration needed
|
||||
- Seamless transition from setup to normal operation
|
||||
|
||||
### 🌐 Embedded Web Interface
|
||||
- Complete React-based setup wizard embedded in the Go binary
|
||||
- No external dependencies required
|
||||
- Works offline and in air-gapped environments
|
||||
|
||||
### 🔧 Comprehensive Configuration
|
||||
- System detection and hardware analysis
|
||||
- Repository integration (GitHub, GitLab, Gitea)
|
||||
- Network and security configuration
|
||||
- AI model and capability setup
|
||||
- Service deployment options
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Build BZZZ with Embedded UI
|
||||
|
||||
```bash
|
||||
# Build the complete system with embedded web UI
|
||||
make build
|
||||
|
||||
# Or build just the binary (uses placeholder UI)
|
||||
make build-go
|
||||
```
|
||||
|
||||
### 2. First-Time Setup
|
||||
|
||||
```bash
|
||||
# Start BZZZ - it will automatically enter setup mode
|
||||
./build/bzzz
|
||||
|
||||
# Or use the transition script for guided setup
|
||||
./scripts/setup-transition.sh
|
||||
```
|
||||
|
||||
### 3. Access Setup Interface
|
||||
|
||||
Open your browser to: **http://localhost:8080**
|
||||
|
||||
The setup wizard will guide you through:
|
||||
1. **System Detection** - Hardware and environment analysis
|
||||
2. **Agent Configuration** - ID, capabilities, and AI models
|
||||
3. **Repository Setup** - Git integration configuration
|
||||
4. **Network Configuration** - P2P and cluster settings
|
||||
5. **Security Setup** - Encryption and access control
|
||||
6. **Service Deployment** - Additional services configuration
|
||||
7. **Testing & Validation** - Configuration verification
|
||||
|
||||
### 4. Complete Setup
|
||||
|
||||
After saving configuration:
|
||||
1. BZZZ will create the configuration file
|
||||
2. Restart BZZZ to enter normal operation mode
|
||||
3. The web interface will no longer be available
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Building the Web UI
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
make deps
|
||||
|
||||
# Build just the web UI
|
||||
make build-ui
|
||||
|
||||
# Embed web UI in Go binary
|
||||
make embed-ui
|
||||
|
||||
# Complete build process
|
||||
make build
|
||||
```
|
||||
|
||||
### Development Mode
|
||||
|
||||
```bash
|
||||
# Start both React dev server and Go API
|
||||
make dev
|
||||
|
||||
# React UI: http://localhost:3000
|
||||
# Go API: http://localhost:8080
|
||||
```
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
BZZZ/
|
||||
├── install/config-ui/ # React setup wizard
|
||||
│ ├── app/ # Next.js application
|
||||
│ ├── package.json # Node.js dependencies
|
||||
│ └── next.config.js # Build configuration
|
||||
├── pkg/web/ # Embedded file system
|
||||
│ ├── embed.go # File embedding logic
|
||||
│ └── index.html # Fallback page
|
||||
├── api/ # Go HTTP server
|
||||
│ ├── http_server.go # Main server with setup routes
|
||||
│ └── setup_manager.go # Setup logic
|
||||
├── Makefile # Build automation
|
||||
└── scripts/
|
||||
└── setup-transition.sh # Setup helper script
|
||||
```
|
||||
|
||||
## Configuration Management
|
||||
|
||||
### Configuration Files
|
||||
|
||||
- **Default Location**: `~/.bzzz/config.yaml`
|
||||
- **Environment Override**: `BZZZ_CONFIG_PATH`
|
||||
- **Backup Directory**: `~/.bzzz/backups/`
|
||||
|
||||
### Setup Requirements Detection
|
||||
|
||||
BZZZ checks for setup requirements using:
|
||||
1. Configuration file existence
|
||||
2. Configuration file validity
|
||||
3. Essential fields completion (Agent ID, capabilities, models)
|
||||
|
||||
### Configuration Validation
|
||||
|
||||
The setup system validates:
|
||||
- Required fields presence
|
||||
- Repository connectivity
|
||||
- AI model availability
|
||||
- Network configuration
|
||||
- Security settings
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Setup Mode APIs
|
||||
|
||||
When in setup mode, BZZZ exposes these endpoints:
|
||||
|
||||
```bash
|
||||
# Check if setup is required
|
||||
GET /api/setup/required
|
||||
|
||||
# Get system information
|
||||
GET /api/setup/system
|
||||
|
||||
# Validate repository configuration
|
||||
POST /api/setup/repository/validate
|
||||
|
||||
# Get supported repository providers
|
||||
GET /api/setup/repository/providers
|
||||
|
||||
# Validate complete configuration
|
||||
POST /api/setup/validate
|
||||
|
||||
# Save configuration
|
||||
POST /api/setup/save
|
||||
|
||||
# Health check
|
||||
GET /api/health
|
||||
```
|
||||
|
||||
### Web UI Routes
|
||||
|
||||
```bash
|
||||
# Setup interface (embedded React app)
|
||||
GET /
|
||||
GET /setup
|
||||
GET /setup/*
|
||||
|
||||
# API proxy (development only)
|
||||
/api/* -> http://localhost:8080/api/*
|
||||
```
|
||||
|
||||
## Deployment Scenarios
|
||||
|
||||
### 1. Fresh Installation
|
||||
|
||||
```bash
|
||||
# Build and start BZZZ
|
||||
make build
|
||||
./build/bzzz
|
||||
|
||||
# Access setup at http://localhost:8080
|
||||
# Complete configuration wizard
|
||||
# Restart BZZZ for normal operation
|
||||
```
|
||||
|
||||
### 2. Existing Installation
|
||||
|
||||
```bash
|
||||
# Backup existing configuration
|
||||
./scripts/setup-transition.sh
|
||||
|
||||
# BZZZ will use existing config if valid
|
||||
# Or enter setup mode if invalid
|
||||
```
|
||||
|
||||
### 3. Container Deployment
|
||||
|
||||
```dockerfile
|
||||
# Build container with embedded UI
|
||||
FROM golang:1.21-alpine AS builder
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
RUN make build
|
||||
|
||||
FROM alpine:latest
|
||||
COPY --from=builder /app/build/bzzz /usr/local/bin/
|
||||
EXPOSE 8080
|
||||
CMD ["bzzz"]
|
||||
```
|
||||
|
||||
### 4. Cluster Deployment
|
||||
|
||||
```bash
|
||||
# Build BZZZ with embedded UI
|
||||
make build
|
||||
|
||||
# Deploy to each cluster node
|
||||
scp build/bzzz node1:/usr/local/bin/
|
||||
ssh node1 'bzzz' # Setup via web interface
|
||||
|
||||
# Repeat for additional nodes
|
||||
# Nodes will discover each other via mDNS
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Web UI Not Loading**
|
||||
```bash
|
||||
# Check if web UI was built
|
||||
make build-ui
|
||||
|
||||
# Verify embedded files
|
||||
ls -la pkg/web/
|
||||
|
||||
# Rebuild if necessary
|
||||
make clean && make build
|
||||
```
|
||||
|
||||
**Setup Not Starting**
|
||||
```bash
|
||||
# Check configuration status
|
||||
./scripts/setup-transition.sh
|
||||
|
||||
# Force setup mode by removing config
|
||||
rm ~/.bzzz/config.yaml
|
||||
./build/bzzz
|
||||
```
|
||||
|
||||
**Port Conflicts**
|
||||
```bash
|
||||
# Check if port 8080 is in use
|
||||
netstat -tulpn | grep 8080
|
||||
|
||||
# Kill conflicting processes
|
||||
sudo lsof -ti:8080 | xargs kill -9
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
|
||||
```bash
|
||||
# Enable debug logging
|
||||
export BZZZ_LOG_LEVEL=debug
|
||||
./build/bzzz
|
||||
|
||||
# Check embedded files
|
||||
curl http://localhost:8080/api/health
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### Network Security
|
||||
- Setup interface only accessible on localhost by default
|
||||
- CORS enabled for development, restricted in production
|
||||
- HTTPS recommended for external access
|
||||
|
||||
### Configuration Security
|
||||
- Sensitive values (tokens, keys) stored in separate files
|
||||
- Configuration backups created automatically
|
||||
- Audit logging for configuration changes
|
||||
|
||||
### Access Control
|
||||
- Setup mode automatically disabled after configuration
|
||||
- No authentication required for initial setup
|
||||
- Full authentication required for normal operation
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
### Custom Build Configuration
|
||||
|
||||
```bash
|
||||
# Build with custom UI path
|
||||
UI_DIR=custom-ui make build
|
||||
|
||||
# Build without UI (API only)
|
||||
make build-go
|
||||
|
||||
# Production build with optimizations
|
||||
NODE_ENV=production make build
|
||||
```
|
||||
|
||||
### Configuration Migration
|
||||
|
||||
```bash
|
||||
# Export existing configuration
|
||||
bzzz --export-config > backup.yaml
|
||||
|
||||
# Import configuration
|
||||
bzzz --import-config backup.yaml
|
||||
|
||||
# Validate configuration
|
||||
bzzz --config-check
|
||||
```
|
||||
|
||||
### Integration Testing
|
||||
|
||||
```bash
|
||||
# Test complete setup flow
|
||||
make test
|
||||
|
||||
# Test web UI components
|
||||
cd install/config-ui && npm test
|
||||
|
||||
# Test Go integration
|
||||
go test ./api/...
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After completing setup:
|
||||
|
||||
1. **Verify Operation**: Check BZZZ logs and peer connections
|
||||
2. **Configure Repositories**: Add GitHub/GitLab tokens and repositories
|
||||
3. **Join Cluster**: Configure additional nodes to join the cluster
|
||||
4. **Monitor Health**: Use `/api/health` endpoint for monitoring
|
||||
5. **Scale Services**: Deploy additional BZZZ components as needed
|
||||
|
||||
For advanced configuration and cluster management, see:
|
||||
- [BZZZ Architecture Documentation](../docs/BZZZ-2B-ARCHITECTURE.md)
|
||||
- [Operations Guide](../docs/BZZZv2B-OPERATIONS.md)
|
||||
- [Developer Manual](../docs/BZZZv2B-DEVELOPER.md)
|
||||
425
install/WEB_UI_DEVELOPMENT_PLAN.md
Normal file
425
install/WEB_UI_DEVELOPMENT_PLAN.md
Normal file
@@ -0,0 +1,425 @@
|
||||
# BZZZ Web Installation/Configuration Development Plan
|
||||
|
||||
## Overview
|
||||
|
||||
This plan leverages existing BZZZ infrastructure to implement the missing web-based installation and configuration functionality without reinventing the wheel. We'll integrate the existing config-ui with our enhanced installer and BZZZ's existing systems.
|
||||
|
||||
## Existing Infrastructure Analysis
|
||||
|
||||
### ✅ **What We Already Have**
|
||||
|
||||
1. **HTTP API Server** (`api/http_server.go`)
|
||||
- Existing HTTP server with CORS support
|
||||
- Health endpoints (`/api/health`, `/api/status`)
|
||||
- Hypercore log API endpoints
|
||||
- Gorilla Mux router setup
|
||||
|
||||
2. **Config UI Foundation** (`install/config-ui/`)
|
||||
- Complete Next.js 14 setup
|
||||
- 8-step setup wizard framework
|
||||
- TypeScript + Tailwind CSS
|
||||
- Component structure already defined
|
||||
- Progress tracking and navigation
|
||||
|
||||
3. **Task Coordinator** (`coordinator/task_coordinator.go`)
|
||||
- Agent management and role assignment
|
||||
- Repository integration framework
|
||||
- Status reporting capabilities
|
||||
|
||||
4. **Configuration System** (`pkg/config/`)
|
||||
- YAML configuration management
|
||||
- Role and agent configuration
|
||||
- Network and service settings
|
||||
|
||||
5. **Repository Integration** (`repository/factory.go`)
|
||||
- GITEA and GitHub providers
|
||||
- Task management interfaces
|
||||
- Credential handling
|
||||
|
||||
## Implementation Strategy
|
||||
|
||||
### Phase 1: Backend API Integration (1-2 days)
|
||||
|
||||
#### 1.1 Extend HTTP Server with Setup APIs
|
||||
**File**: `api/http_server.go`
|
||||
|
||||
Add new endpoints to existing server:
|
||||
```go
|
||||
// Setup and configuration endpoints
|
||||
api.HandleFunc("/setup/system", h.handleSystemInfo).Methods("GET")
|
||||
api.HandleFunc("/setup/network", h.handleNetworkConfig).Methods("GET", "POST")
|
||||
api.HandleFunc("/setup/security", h.handleSecurityConfig).Methods("GET", "POST")
|
||||
api.HandleFunc("/setup/ai", h.handleAIConfig).Methods("GET", "POST")
|
||||
api.HandleFunc("/setup/resources", h.handleResourceConfig).Methods("GET", "POST")
|
||||
api.HandleFunc("/setup/deploy", h.handleServiceDeploy).Methods("POST")
|
||||
api.HandleFunc("/setup/cluster", h.handleClusterConfig).Methods("GET", "POST")
|
||||
api.HandleFunc("/setup/validate", h.handleValidation).Methods("POST")
|
||||
|
||||
// Repository configuration (integrate with existing factory)
|
||||
api.HandleFunc("/setup/repository", h.handleRepositoryConfig).Methods("GET", "POST")
|
||||
```
|
||||
|
||||
#### 1.2 System Detection Integration
|
||||
Leverage existing system info from enhanced installer:
|
||||
```go
|
||||
func (h *HTTPServer) handleSystemInfo(w http.ResponseWriter, r *http.Request) {
|
||||
info := map[string]interface{}{
|
||||
"os": detectOS(), // From enhanced installer
|
||||
"architecture": detectArchitecture(), // From enhanced installer
|
||||
"hardware": detectHardware(), // New GPU detection
|
||||
"network": detectNetwork(), // Network interface discovery
|
||||
"services": detectServices(), // Docker, Ollama status
|
||||
}
|
||||
json.NewEncoder(w).Encode(info)
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.3 Configuration Management
|
||||
Extend existing config system to support web updates:
|
||||
```go
|
||||
// New file: api/setup_handlers.go
|
||||
type SetupManager struct {
|
||||
configPath string
|
||||
coordinator *coordinator.TaskCoordinator
|
||||
repoFactory *repository.DefaultProviderFactory
|
||||
}
|
||||
|
||||
func (s *SetupManager) UpdateNetworkConfig(config NetworkConfig) error {
|
||||
// Update YAML configuration
|
||||
// Restart network services if needed
|
||||
// Validate connectivity
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 2: Web UI Enhancement (2-3 days)
|
||||
|
||||
#### 2.1 Complete Existing Components
|
||||
The config-ui framework exists but components need implementation:
|
||||
|
||||
**SystemDetection.tsx** - Leverage system detection API:
|
||||
```typescript
|
||||
const SystemDetection = ({ onComplete, systemInfo }) => {
|
||||
// Display detected hardware (GPU detection for Parallama)
|
||||
// Show system requirements validation
|
||||
// Network interface selection
|
||||
// Prerequisite checking
|
||||
}
|
||||
```
|
||||
|
||||
**NetworkConfiguration.tsx** - Network setup:
|
||||
```typescript
|
||||
const NetworkConfiguration = ({ onComplete, configData }) => {
|
||||
// Port configuration (8080, 8081, 4001)
|
||||
// Firewall rules setup
|
||||
// Network interface selection
|
||||
// Connectivity testing
|
||||
}
|
||||
```
|
||||
|
||||
**SecuritySetup.tsx** - Security configuration:
|
||||
```typescript
|
||||
const SecuritySetup = ({ onComplete, configData }) => {
|
||||
// SSH key generation/upload (for cluster deployment)
|
||||
// TLS certificate setup
|
||||
// Authentication method selection
|
||||
// Security policy configuration
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 Repository Integration Component
|
||||
**File**: `install/config-ui/app/setup/components/RepositoryConfiguration.tsx`
|
||||
```typescript
|
||||
const RepositoryConfiguration = ({ onComplete, configData }) => {
|
||||
// GITEA/GitHub provider selection
|
||||
// Credential input and validation
|
||||
// Repository access testing
|
||||
// Task label configuration
|
||||
// Integration with existing repository factory
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.3 AI Configuration Enhancement
|
||||
**AIConfiguration.tsx** - GPU optimization:
|
||||
```typescript
|
||||
const AIConfiguration = ({ onComplete, systemInfo }) => {
|
||||
// GPU detection display
|
||||
// Parallama vs Ollama recommendation
|
||||
// OpenAI API configuration
|
||||
// Model selection and downloading
|
||||
// Resource allocation per model
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 3: Installer Integration (1 day)
|
||||
|
||||
#### 3.1 Enhanced Installer Web Mode
|
||||
**File**: `/home/tony/chorus/project-queues/active/chorus.services/installer/install-chorus-enhanced.sh`
|
||||
|
||||
Add web UI mode option:
|
||||
```bash
|
||||
# Add new command line option
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--web-ui)
|
||||
ENABLE_WEB_UI=true
|
||||
shift
|
||||
;;
|
||||
# ... existing options
|
||||
esac
|
||||
done
|
||||
|
||||
# After basic installation
|
||||
if [[ "$ENABLE_WEB_UI" == "true" ]]; then
|
||||
setup_web_ui
|
||||
fi
|
||||
|
||||
setup_web_ui() {
|
||||
log_step "Setting up web configuration interface..."
|
||||
|
||||
# Copy config-ui to BZZZ directory
|
||||
cp -r "$BZZZ_DIR/../install/config-ui" "$BZZZ_DIR/web-ui"
|
||||
|
||||
# Install Node.js and dependencies
|
||||
install_nodejs
|
||||
cd "$BZZZ_DIR/web-ui" && npm install
|
||||
|
||||
# Start web UI in background
|
||||
npm run build && npm run start &
|
||||
|
||||
echo ""
|
||||
echo "🌐 Web configuration available at: http://$(hostname):8080/setup"
|
||||
echo "⚡ Continue setup in your browser"
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2 Hybrid Installation Flow
|
||||
```bash
|
||||
# Enhanced installer usage options:
|
||||
curl -fsSL https://chorus.services/install-enhanced.sh | sh # CLI mode (current)
|
||||
curl -fsSL https://chorus.services/install-enhanced.sh | sh -s -- --web-ui # Web mode (new)
|
||||
```
|
||||
|
||||
### Phase 4: Cluster Deployment Integration (2-3 days)
|
||||
|
||||
#### 4.1 SSH Deployment System
|
||||
**File**: `api/cluster_deployment.go`
|
||||
```go
|
||||
type ClusterDeployer struct {
|
||||
sshConfig SSHConfig
|
||||
installer string // Enhanced installer script
|
||||
coordinator *coordinator.TaskCoordinator
|
||||
}
|
||||
|
||||
func (c *ClusterDeployer) DeployToNodes(nodes []NodeConfig) error {
|
||||
for _, node := range nodes {
|
||||
// SSH to remote node
|
||||
// Execute enhanced installer with node-specific config
|
||||
// Verify installation
|
||||
// Add to cluster coordination
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.2 Cluster Formation Component
|
||||
**ClusterFormation.tsx** - Multi-node coordination:
|
||||
```typescript
|
||||
const ClusterFormation = ({ onComplete, configData }) => {
|
||||
// Node discovery (SSH-based or manual IP entry)
|
||||
// SSH credential configuration
|
||||
// Remote deployment progress tracking
|
||||
// Cluster validation and health checking
|
||||
// P2P network formation verification
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.3 P2P Network Integration
|
||||
Leverage existing P2P infrastructure:
|
||||
```go
|
||||
// Integration with existing p2p/node.go
|
||||
func (h *HTTPServer) handleClusterConfig(w http.ResponseWriter, r *http.Request) {
|
||||
// Use existing P2P node configuration
|
||||
// Coordinate with task coordinator
|
||||
// Enable automatic peer discovery
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 5: Professional Installation Experience (1-2 days)
|
||||
|
||||
#### 5.1 Enhanced Installation Output
|
||||
```bash
|
||||
# Professional branded installer output
|
||||
print_professional_banner() {
|
||||
echo -e "${PURPLE}"
|
||||
cat << 'EOF'
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔥 BZZZ Distributed AI Coordination Platform
|
||||
Professional Installation System v2.0
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
EOF
|
||||
echo -e "${NC}"
|
||||
}
|
||||
|
||||
show_installation_progress() {
|
||||
local step="$1"
|
||||
local total="$2"
|
||||
local message="$3"
|
||||
|
||||
echo -e "${BLUE}[$step/$total]${NC} $message"
|
||||
|
||||
# Progress bar
|
||||
local progress=$((step * 100 / total))
|
||||
printf "Progress: ["
|
||||
for ((i=0; i<progress/5; i++)); do printf "█"; done
|
||||
for ((i=progress/5; i<20; i++)); do printf "░"; done
|
||||
printf "] %d%%\n" $progress
|
||||
}
|
||||
```
|
||||
|
||||
#### 5.2 GPU Detection and Parallama Integration
|
||||
```bash
|
||||
detect_gpu_configuration() {
|
||||
log_step "Analyzing GPU configuration..."
|
||||
|
||||
# Detect NVIDIA GPUs
|
||||
if command -v nvidia-smi >/dev/null 2>&1; then
|
||||
GPU_COUNT=$(nvidia-smi --list-gpus | wc -l)
|
||||
GPU_INFO=$(nvidia-smi --query-gpu=name,memory.total --format=csv,noheader)
|
||||
|
||||
if [[ $GPU_COUNT -gt 1 ]]; then
|
||||
echo ""
|
||||
echo -e "${GREEN}🚀 Multi-GPU Setup Detected ($GPU_COUNT NVIDIA GPUs)${NC}"
|
||||
echo -e "${CYAN}Parallama is RECOMMENDED for optimal multi-GPU performance!${NC}"
|
||||
echo ""
|
||||
echo "Detected GPUs:"
|
||||
echo "$GPU_INFO" | sed 's/^/ • /'
|
||||
echo ""
|
||||
|
||||
read -p "Install Parallama (recommended) or standard Ollama? [P/o]: " choice
|
||||
case $choice in
|
||||
[Oo]* ) INSTALL_OLLAMA_TYPE="standard" ;;
|
||||
* ) INSTALL_OLLAMA_TYPE="parallama" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
## Implementation Timeline
|
||||
|
||||
### Week 1: Backend Foundation
|
||||
- **Day 1-2**: Extend HTTP server with setup APIs
|
||||
- **Day 3-4**: Implement system detection and configuration management
|
||||
- **Day 5**: Repository integration and credential handling
|
||||
|
||||
### Week 2: Web UI Development
|
||||
- **Day 1-2**: Complete existing setup components
|
||||
- **Day 3-4**: Repository configuration and AI setup components
|
||||
- **Day 5**: Integration testing and UI polish
|
||||
|
||||
### Week 3: Cluster and Professional Features
|
||||
- **Day 1-2**: SSH deployment system and cluster formation
|
||||
- **Day 3-4**: Professional installation experience and GPU detection
|
||||
- **Day 5**: End-to-end testing and documentation
|
||||
|
||||
## Leveraging Existing BZZZ Systems
|
||||
|
||||
### ✅ **Reuse Without Modification**
|
||||
1. **HTTP Server Architecture** - Extend existing `api/http_server.go`
|
||||
2. **Configuration System** - Use existing `pkg/config/` YAML management
|
||||
3. **Repository Integration** - Leverage `repository/factory.go` providers
|
||||
4. **Task Coordination** - Integrate with `coordinator/task_coordinator.go`
|
||||
5. **P2P Networking** - Use existing `p2p/node.go` infrastructure
|
||||
|
||||
### 🔧 **Extend Existing Systems**
|
||||
1. **Enhanced Installer** - Add web UI mode to existing script
|
||||
2. **Config UI Framework** - Complete existing component implementations
|
||||
3. **API Endpoints** - Add setup endpoints to existing HTTP server
|
||||
4. **System Detection** - Enhance existing OS detection with hardware profiling
|
||||
|
||||
### 🆕 **New Components Needed**
|
||||
1. **Cluster Deployment Manager** - SSH-based remote installation
|
||||
2. **GPU Detection System** - Hardware profiling and Parallama integration
|
||||
3. **Professional Installation UX** - Enhanced progress and branding
|
||||
4. **Setup API Handlers** - Backend logic for web configuration
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Repository Integration
|
||||
```go
|
||||
// Leverage existing repository factory
|
||||
func (h *HTTPServer) handleRepositoryConfig(w http.ResponseWriter, r *http.Request) {
|
||||
factory := &repository.DefaultProviderFactory{}
|
||||
|
||||
// Create provider based on web UI input
|
||||
provider, err := factory.CreateProvider(ctx, repoConfig)
|
||||
|
||||
// Test connectivity
|
||||
// Store configuration
|
||||
// Update task coordinator
|
||||
}
|
||||
```
|
||||
|
||||
### Task Coordinator Integration
|
||||
```go
|
||||
// Use existing task coordinator for cluster management
|
||||
func (h *HTTPServer) handleClusterStatus(w http.ResponseWriter, r *http.Request) {
|
||||
status := h.taskCoordinator.GetStatus()
|
||||
json.NewEncoder(w).Encode(status)
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Management
|
||||
```go
|
||||
// Extend existing config system
|
||||
func (s *SetupManager) SaveConfiguration(config SetupConfig) error {
|
||||
// Convert web config to BZZZ YAML format
|
||||
// Use existing config.Config struct
|
||||
// Restart services as needed
|
||||
}
|
||||
```
|
||||
|
||||
## Success Metrics
|
||||
|
||||
### Technical Completeness
|
||||
- [ ] Web UI accessible at `:8080/setup`
|
||||
- [ ] 8-step configuration wizard functional
|
||||
- [ ] GPU detection and Parallama recommendation
|
||||
- [ ] SSH-based cluster deployment
|
||||
- [ ] Repository integration (GITEA/GitHub)
|
||||
- [ ] Professional installation experience
|
||||
|
||||
### User Experience
|
||||
- [ ] Single-command installation with web option
|
||||
- [ ] Intuitive progress tracking and navigation
|
||||
- [ ] Real-time validation and error handling
|
||||
- [ ] Mobile-responsive design
|
||||
- [ ] Comprehensive help and documentation
|
||||
|
||||
### Integration Quality
|
||||
- [ ] Seamless integration with existing BZZZ systems
|
||||
- [ ] No disruption to current enhanced installer
|
||||
- [ ] Proper error handling and rollback
|
||||
- [ ] Production-ready security and performance
|
||||
|
||||
## Risk Mitigation
|
||||
|
||||
### Technical Risks
|
||||
- **API Integration Complexity**: Use existing HTTP server patterns
|
||||
- **Configuration Conflicts**: Maintain YAML compatibility
|
||||
- **Service Coordination**: Leverage existing task coordinator
|
||||
|
||||
### User Experience Risks
|
||||
- **Installation Complexity**: Provide both CLI and web options
|
||||
- **Error Recovery**: Implement proper rollback mechanisms
|
||||
- **Performance**: Optimize for low-resource environments
|
||||
|
||||
## Conclusion
|
||||
|
||||
This plan leverages 80% of existing BZZZ infrastructure while delivering the professional web-based installation experience envisioned in the original plans. By extending rather than replacing existing systems, we minimize development time and maintain compatibility with current deployments.
|
||||
|
||||
**Key Benefits:**
|
||||
- ✅ Rapid implementation using existing code
|
||||
- ✅ Maintains backward compatibility
|
||||
- ✅ Professional installation experience
|
||||
- ✅ Complete feature parity with original vision
|
||||
- ✅ Seamless integration with enhanced installer
|
||||
1
install/config-ui/.next/BUILD_ID
Normal file
1
install/config-ui/.next/BUILD_ID
Normal file
@@ -0,0 +1 @@
|
||||
7pc3-W9griwsLqMFO9F7n
|
||||
37
install/config-ui/.next/app-build-manifest.json
Normal file
37
install/config-ui/.next/app-build-manifest.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"pages": {
|
||||
"/_not-found": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/fd9d1056-fe71d9d3341a0a8a.js",
|
||||
"static/chunks/938-17b8dfc164ba32b9.js",
|
||||
"static/chunks/main-app-49b06b9db6b856b1.js",
|
||||
"static/chunks/app/_not-found-e0388bca29104022.js"
|
||||
],
|
||||
"/layout": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/fd9d1056-fe71d9d3341a0a8a.js",
|
||||
"static/chunks/938-17b8dfc164ba32b9.js",
|
||||
"static/chunks/main-app-49b06b9db6b856b1.js",
|
||||
"static/css/e8d1974119224823.css",
|
||||
"static/chunks/app/layout-ca1eeb8fd961ab0a.js"
|
||||
],
|
||||
"/page": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/fd9d1056-fe71d9d3341a0a8a.js",
|
||||
"static/chunks/938-17b8dfc164ba32b9.js",
|
||||
"static/chunks/main-app-49b06b9db6b856b1.js",
|
||||
"static/chunks/1-c9d7758e4e3ba2a3.js",
|
||||
"static/chunks/644-0fed11847454c654.js",
|
||||
"static/chunks/app/page-8faaddc37bd2f9b3.js"
|
||||
],
|
||||
"/setup/page": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/fd9d1056-fe71d9d3341a0a8a.js",
|
||||
"static/chunks/938-17b8dfc164ba32b9.js",
|
||||
"static/chunks/main-app-49b06b9db6b856b1.js",
|
||||
"static/chunks/1-c9d7758e4e3ba2a3.js",
|
||||
"static/chunks/644-0fed11847454c654.js",
|
||||
"static/chunks/app/setup/page-0064fc4ceb1b12be.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
1
install/config-ui/.next/app-path-routes-manifest.json
Normal file
1
install/config-ui/.next/app-path-routes-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"/_not-found":"/_not-found","/page":"/","/setup/page":"/setup"}
|
||||
32
install/config-ui/.next/build-manifest.json
Normal file
32
install/config-ui/.next/build-manifest.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"polyfillFiles": [
|
||||
"static/chunks/polyfills-c67a75d1b6f99dc8.js"
|
||||
],
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"lowPriorityFiles": [
|
||||
"static/7pc3-W9griwsLqMFO9F7n/_buildManifest.js",
|
||||
"static/7pc3-W9griwsLqMFO9F7n/_ssgManifest.js"
|
||||
],
|
||||
"rootMainFiles": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/fd9d1056-fe71d9d3341a0a8a.js",
|
||||
"static/chunks/938-17b8dfc164ba32b9.js",
|
||||
"static/chunks/main-app-49b06b9db6b856b1.js"
|
||||
],
|
||||
"pages": {
|
||||
"/_app": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/framework-c5181c9431ddc45b.js",
|
||||
"static/chunks/main-780468f99531c6f2.js",
|
||||
"static/chunks/pages/_app-98cb51ec6f9f135f.js"
|
||||
],
|
||||
"/_error": [
|
||||
"static/chunks/webpack-82180bff1cad158b.js",
|
||||
"static/chunks/framework-c5181c9431ddc45b.js",
|
||||
"static/chunks/main-780468f99531c6f2.js",
|
||||
"static/chunks/pages/_error-e87e5963ec1b8011.js"
|
||||
]
|
||||
},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
1
install/config-ui/.next/cache/.tsbuildinfo
vendored
Normal file
1
install/config-ui/.next/cache/.tsbuildinfo
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
install/config-ui/.next/cache/webpack/client-production/0.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/0.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/1.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/1.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/10.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/10.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/11.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/11.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/12.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/12.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/13.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/13.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/14.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/14.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/15.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/15.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/2.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/2.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/3.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/3.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/4.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/4.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/5.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/5.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/6.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/6.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/7.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/7.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/8.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/8.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/9.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/9.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/index.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/index.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/client-production/index.pack.old
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/client-production/index.pack.old
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/0.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/0.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/1.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/1.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/2.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/2.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/3.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/3.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/4.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/4.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/5.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/5.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/6.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/6.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/7.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/7.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/8.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/8.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/9.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/9.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/index.pack
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/index.pack
vendored
Normal file
Binary file not shown.
BIN
install/config-ui/.next/cache/webpack/server-production/index.pack.old
vendored
Normal file
BIN
install/config-ui/.next/cache/webpack/server-production/index.pack.old
vendored
Normal file
Binary file not shown.
1
install/config-ui/.next/export-detail.json
Normal file
1
install/config-ui/.next/export-detail.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"outDirectory":"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/out","success":true}
|
||||
1
install/config-ui/.next/export-marker.json
Normal file
1
install/config-ui/.next/export-marker.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"hasExportPathMap":false,"exportTrailingSlash":true,"isNextImageImported":false}
|
||||
1
install/config-ui/.next/images-manifest.json
Normal file
1
install/config-ui/.next/images-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/setup/_next/image/","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":true,"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}}
|
||||
1
install/config-ui/.next/next-minimal-server.js.nft.json
Normal file
1
install/config-ui/.next/next-minimal-server.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../node_modules/styled-jsx/index.js","../node_modules/styled-jsx/package.json","../node_modules/styled-jsx/dist/index/index.js","../node_modules/react/package.json","../node_modules/react/index.js","../node_modules/client-only/package.json","../node_modules/react/cjs/react.production.min.js","../node_modules/client-only/index.js","../node_modules/styled-jsx/style.js","../node_modules/next/dist/compiled/next-server/server.runtime.prod.js","../node_modules/next/package.json","../node_modules/next/dist/server/body-streams.js","../node_modules/next/dist/shared/lib/constants.js","../node_modules/next/dist/server/web/utils.js","../node_modules/next/dist/client/components/app-router-headers.js","../node_modules/next/dist/server/lib/trace/tracer.js","../node_modules/next/dist/server/lib/trace/constants.js","../node_modules/next/dist/shared/lib/modern-browserslist-target.js","../node_modules/next/dist/shared/lib/runtime-config.external.js","../node_modules/next/dist/compiled/ws/package.json","../node_modules/@swc/helpers/_/_interop_require_default/package.json","../node_modules/next/dist/compiled/ws/index.js","../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../node_modules/@swc/helpers/package.json","../node_modules/next/dist/compiled/jsonwebtoken/package.json","../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/dist/compiled/jsonwebtoken/index.js","../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../node_modules/next/dist/lib/semver-noop.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/pages/module.compiled.js"]}
|
||||
1
install/config-ui/.next/next-server.js.nft.json
Normal file
1
install/config-ui/.next/next-server.js.nft.json
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/package.json
Normal file
1
install/config-ui/.next/package.json
Normal file
@@ -0,0 +1 @@
|
||||
{"type": "commonjs"}
|
||||
1
install/config-ui/.next/prerender-manifest.js
Normal file
1
install/config-ui/.next/prerender-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__PRERENDER_MANIFEST="{\"version\":4,\"routes\":{\"/\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/\",\"dataRoute\":\"/index.rsc\"},\"/setup\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/setup\",\"dataRoute\":\"/setup.rsc\"}},\"dynamicRoutes\":{},\"notFoundRoutes\":[],\"preview\":{\"previewModeId\":\"4974799f6c7984ca4a10d398c763a83c\",\"previewModeSigningKey\":\"89d67a032454b2cf7d09e64ea43595a17330c01e669273a63ae1aa9dd4e908fc\",\"previewModeEncryptionKey\":\"a1fe2cdbaf54a6dadc88418bc9627f0a14dbfd72df335c92811d09992a9d464f\"}}"
|
||||
1
install/config-ui/.next/prerender-manifest.json
Normal file
1
install/config-ui/.next/prerender-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":4,"routes":{"/":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data"}],"initialRevalidateSeconds":false,"srcRoute":"/","dataRoute":"/index.rsc"},"/setup":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data"}],"initialRevalidateSeconds":false,"srcRoute":"/setup","dataRoute":"/setup.rsc"}},"dynamicRoutes":{},"notFoundRoutes":[],"preview":{"previewModeId":"4974799f6c7984ca4a10d398c763a83c","previewModeSigningKey":"89d67a032454b2cf7d09e64ea43595a17330c01e669273a63ae1aa9dd4e908fc","previewModeEncryptionKey":"a1fe2cdbaf54a6dadc88418bc9627f0a14dbfd72df335c92811d09992a9d464f"}}
|
||||
1
install/config-ui/.next/react-loadable-manifest.json
Normal file
1
install/config-ui/.next/react-loadable-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
install/config-ui/.next/required-server-files.json
Normal file
1
install/config-ui/.next/required-server-files.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"config":{"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":".next","cleanDistDir":true,"assetPrefix":"/setup","configOrigin":"next.config.js","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/setup/_next/image/","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":true},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":"/setup"},"basePath":"/setup","sassOptions":{},"trailingSlash":true,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":null,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"output":"export","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"},"next/server":{"transform":"next/dist/server/web/exports/{{ kebabCase member }}"}},"experimental":{"windowHistorySupport":false,"serverMinification":true,"serverSourceMaps":false,"caseSensitiveRoutes":false,"useDeploymentId":false,"useDeploymentIdServerActions":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":15,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"isrMemoryCacheSize":52428800,"fullySpecified":false,"outputFileTracingRoot":"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"ppr":false,"webpackBuildWorker":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.js","_originalRewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[]}},"appDir":"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui","relativeAppDir":"","files":[".next/routes-manifest.json",".next/server/pages-manifest.json",".next/build-manifest.json",".next/prerender-manifest.json",".next/prerender-manifest.js",".next/server/middleware-manifest.json",".next/server/middleware-build-manifest.js",".next/server/middleware-react-loadable-manifest.js",".next/server/app-paths-manifest.json",".next/app-path-routes-manifest.json",".next/app-build-manifest.json",".next/server/server-reference-manifest.js",".next/server/server-reference-manifest.json",".next/react-loadable-manifest.json",".next/server/font-manifest.json",".next/BUILD_ID",".next/server/next-font-manifest.js",".next/server/next-font-manifest.json"],"ignore":["node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"]}
|
||||
1
install/config-ui/.next/routes-manifest.json
Normal file
1
install/config-ui/.next/routes-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"pages404":true,"caseSensitive":false,"basePath":"/setup","redirects":[{"source":"/setup","destination":"/setup/","basePath":false,"internal":true,"statusCode":308,"regex":"^/setup$"},{"source":"/:file((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+)/","destination":"/:file","internal":true,"missing":[{"type":"header","key":"x-nextjs-data"}],"statusCode":308,"regex":"^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+))/$"},{"source":"/:notfile((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+)","destination":"/:notfile/","internal":true,"statusCode":308,"regex":"^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+))$"}],"headers":[],"dynamicRoutes":[],"staticRoutes":[{"page":"/","regex":"^/(?:/)?$","routeKeys":{},"namedRegex":"^/(?:/)?$"},{"page":"/_not-found","regex":"^/_not\\-found(?:/)?$","routeKeys":{},"namedRegex":"^/_not\\-found(?:/)?$"},{"page":"/setup","regex":"^/setup(?:/)?$","routeKeys":{},"namedRegex":"^/setup(?:/)?$"}],"dataRoutes":[],"rsc":{"header":"RSC","varyHeader":"RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url","prefetchHeader":"Next-Router-Prefetch","didPostponeHeader":"x-nextjs-postponed","contentTypeHeader":"text/x-component","suffix":".rsc","prefetchSuffix":".prefetch.rsc"},"rewrites":[]}
|
||||
5
install/config-ui/.next/server/app-paths-manifest.json
Normal file
5
install/config-ui/.next/server/app-paths-manifest.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"/_not-found": "app/_not-found.js",
|
||||
"/page": "app/page.js",
|
||||
"/setup/page": "app/setup/page.js"
|
||||
}
|
||||
1
install/config-ui/.next/server/app/_not-found.html
Normal file
1
install/config-ui/.next/server/app/_not-found.html
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/app/_not-found.js
Normal file
1
install/config-ui/.next/server/app/_not-found.js
Normal file
@@ -0,0 +1 @@
|
||||
(()=>{var e={};e.id=165,e.ids=[165],e.modules={7849:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external")},2934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},5403:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external")},4580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},4749:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external")},5869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},6674:(e,t,s)=>{"use strict";s.r(t),s.d(t,{GlobalError:()=>a.a,__next_app__:()=>m,originalPathname:()=>x,pages:()=>d,routeModule:()=>u,tree:()=>c});var r=s(482),n=s(9108),i=s(2563),a=s.n(i),o=s(8300),l={};for(let e in o)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>o[e]);s.d(t,l);let c=["",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(s.t.bind(s,9361,23)),"next/dist/client/components/not-found-error"]}]},{layout:[()=>Promise.resolve().then(s.bind(s,2917)),"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(s.t.bind(s,9361,23)),"next/dist/client/components/not-found-error"]}],d=[],x="/_not-found",m={require:s,loadChunk:()=>Promise.resolve()},u=new r.AppPageRouteModule({definition:{kind:n.x.APP_PAGE,page:"/_not-found",pathname:"/_not-found",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:c}})},3422:()=>{},4581:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,2583,23)),Promise.resolve().then(s.t.bind(s,6840,23)),Promise.resolve().then(s.t.bind(s,8771,23)),Promise.resolve().then(s.t.bind(s,3225,23)),Promise.resolve().then(s.t.bind(s,9295,23)),Promise.resolve().then(s.t.bind(s,3982,23))},2917:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>i,metadata:()=>n});var r=s(5036);s(7272);let n={title:"BZZZ Cluster Configuration",description:"Configure your BZZZ distributed AI coordination cluster",viewport:"width=device-width, initial-scale=1"};function i({children:e}){return r.jsx("html",{lang:"en",children:r.jsx("body",{className:"bg-gray-50 min-h-screen",children:(0,r.jsxs)("div",{className:"min-h-screen flex flex-col",children:[r.jsx("header",{className:"bg-white shadow-sm border-b border-gray-200",children:r.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:(0,r.jsxs)("div",{className:"flex justify-between items-center py-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[r.jsx("div",{className:"flex-shrink-0",children:r.jsx("div",{className:"w-8 h-8 bg-bzzz-primary rounded-lg flex items-center justify-center",children:r.jsx("span",{className:"text-white font-bold text-lg",children:"B"})})}),(0,r.jsxs)("div",{className:"ml-3",children:[r.jsx("h1",{className:"text-xl font-semibold text-gray-900",children:"BZZZ Cluster Configuration"}),r.jsx("p",{className:"text-sm text-gray-500",children:"Distributed AI Coordination Platform"})]})]}),r.jsx("div",{className:"flex items-center space-x-4",children:r.jsx("div",{className:"status-online",children:"System Online"})})]})})}),r.jsx("main",{className:"flex-1",children:e}),r.jsx("footer",{className:"bg-white border-t border-gray-200",children:r.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4",children:(0,r.jsxs)("div",{className:"flex justify-between items-center text-sm text-gray-500",children:[r.jsx("div",{children:"\xa9 2025 Chorus Services. All rights reserved."}),(0,r.jsxs)("div",{className:"flex space-x-4",children:[r.jsx("a",{href:"https://docs.chorus.services/bzzz",target:"_blank",className:"hover:text-bzzz-primary transition-colors",children:"Documentation"}),r.jsx("a",{href:"https://discord.gg/chorus-services",target:"_blank",className:"hover:text-bzzz-primary transition-colors",children:"Support"})]})]})})})]})})})}},7272:()=>{}};var t=require("../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[73],()=>s(6674));module.exports=r})();
|
||||
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../node_modules/next/dist/client/components/async-local-storage.js","../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../package.json","../chunks/329.js","../chunks/565.js","../chunks/73.js","../chunks/761.js","../chunks/font-manifest.json","../webpack-runtime.js","_not-found_client-reference-manifest.js"]}
|
||||
5
install/config-ui/.next/server/app/_not-found.meta
Normal file
5
install/config-ui/.next/server/app/_not-found.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/_not-found/layout,_N_T_/_not-found/"
|
||||
}
|
||||
}
|
||||
9
install/config-ui/.next/server/app/_not-found.rsc
Normal file
9
install/config-ui/.next/server/app/_not-found.rsc
Normal file
@@ -0,0 +1,9 @@
|
||||
2:I[5613,[],""]
|
||||
3:I[1778,[],""]
|
||||
4:{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"}
|
||||
5:{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"}
|
||||
6:{"display":"inline-block"}
|
||||
7:{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0}
|
||||
0:["7pc3-W9griwsLqMFO9F7n",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"bg-gray-50 min-h-screen","children":["$","div",null,{"className":"min-h-screen flex flex-col","children":[["$","header",null,{"className":"bg-white shadow-sm border-b border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8","children":["$","div",null,{"className":"flex justify-between items-center py-4","children":[["$","div",null,{"className":"flex items-center","children":[["$","div",null,{"className":"flex-shrink-0","children":["$","div",null,{"className":"w-8 h-8 bg-bzzz-primary rounded-lg flex items-center justify-center","children":["$","span",null,{"className":"text-white font-bold text-lg","children":"B"}]}]}],["$","div",null,{"className":"ml-3","children":[["$","h1",null,{"className":"text-xl font-semibold text-gray-900","children":"BZZZ Cluster Configuration"}],["$","p",null,{"className":"text-sm text-gray-500","children":"Distributed AI Coordination Platform"}]]}]]}],["$","div",null,{"className":"flex items-center space-x-4","children":["$","div",null,{"className":"status-online","children":"System Online"}]}]]}]}]}],["$","main",null,{"className":"flex-1","children":["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$4","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$5","children":"404"}],["$","div",null,{"style":"$6","children":["$","h2",null,{"style":"$7","children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"bg-white border-t border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4","children":["$","div",null,{"className":"flex justify-between items-center text-sm text-gray-500","children":[["$","div",null,{"children":"© 2025 Chorus Services. All rights reserved."}],["$","div",null,{"className":"flex space-x-4","children":[["$","a",null,{"href":"https://docs.chorus.services/bzzz","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Documentation"}],["$","a",null,{"href":"https://discord.gg/chorus-services","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Support"}]]}]]}]}]}]]}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/setup/_next/static/css/e8d1974119224823.css","precedence":"next","crossOrigin":""}]],"$L8"]]]]
|
||||
8:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"BZZZ Cluster Configuration"}],["$","meta","3",{"name":"description","content":"Configure your BZZZ distributed AI coordination cluster"}]]
|
||||
1:null
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found"]={"moduleLoading":{"prefix":"/setup/_next/","crossOrigin":null},"ssrModuleMapping":{"1778":{"*":{"id":"9295","name":"*","chunks":[],"async":false}},"1902":{"*":{"id":"3225","name":"*","chunks":[],"async":false}},"5613":{"*":{"id":"8771","name":"*","chunks":[],"async":false}},"7690":{"*":{"id":"2583","name":"*","chunks":[],"async":false}},"7815":{"*":{"id":"6726","name":"*","chunks":[],"async":false}},"7831":{"*":{"id":"3982","name":"*","chunks":[],"async":false}},"8955":{"*":{"id":"6840","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/globals.css":{"id":2445,"name":"*","chunks":["185","static/chunks/app/layout-ca1eeb8fd961ab0a.js"],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page.tsx":{"id":7815,"name":"*","chunks":["1","static/chunks/1-c9d7758e4e3ba2a3.js","644","static/chunks/644-0fed11847454c654.js","931","static/chunks/app/page-8faaddc37bd2f9b3.js"],"async":false}},"entryCSSFiles":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/_not-found":[],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout":["static/css/e8d1974119224823.css"],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/page":[]}}
|
||||
1
install/config-ui/.next/server/app/index.html
Normal file
1
install/config-ui/.next/server/app/index.html
Normal file
File diff suppressed because one or more lines are too long
5
install/config-ui/.next/server/app/index.meta
Normal file
5
install/config-ui/.next/server/app/index.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/page,_N_T_/"
|
||||
}
|
||||
}
|
||||
6
install/config-ui/.next/server/app/index.rsc
Normal file
6
install/config-ui/.next/server/app/index.rsc
Normal file
@@ -0,0 +1,6 @@
|
||||
2:I[7815,["1","static/chunks/1-c9d7758e4e3ba2a3.js","644","static/chunks/644-0fed11847454c654.js","931","static/chunks/app/page-8faaddc37bd2f9b3.js"],""]
|
||||
3:I[5613,[],""]
|
||||
4:I[1778,[],""]
|
||||
0:["7pc3-W9griwsLqMFO9F7n",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"bg-gray-50 min-h-screen","children":["$","div",null,{"className":"min-h-screen flex flex-col","children":[["$","header",null,{"className":"bg-white shadow-sm border-b border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8","children":["$","div",null,{"className":"flex justify-between items-center py-4","children":[["$","div",null,{"className":"flex items-center","children":[["$","div",null,{"className":"flex-shrink-0","children":["$","div",null,{"className":"w-8 h-8 bg-bzzz-primary rounded-lg flex items-center justify-center","children":["$","span",null,{"className":"text-white font-bold text-lg","children":"B"}]}]}],["$","div",null,{"className":"ml-3","children":[["$","h1",null,{"className":"text-xl font-semibold text-gray-900","children":"BZZZ Cluster Configuration"}],["$","p",null,{"className":"text-sm text-gray-500","children":"Distributed AI Coordination Platform"}]]}]]}],["$","div",null,{"className":"flex items-center space-x-4","children":["$","div",null,{"className":"status-online","children":"System Online"}]}]]}]}]}],["$","main",null,{"className":"flex-1","children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"bg-white border-t border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4","children":["$","div",null,{"className":"flex justify-between items-center text-sm text-gray-500","children":[["$","div",null,{"children":"© 2025 Chorus Services. All rights reserved."}],["$","div",null,{"className":"flex space-x-4","children":[["$","a",null,{"href":"https://docs.chorus.services/bzzz","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Documentation"}],["$","a",null,{"href":"https://discord.gg/chorus-services","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Support"}]]}]]}]}]}]]}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/setup/_next/static/css/e8d1974119224823.css","precedence":"next","crossOrigin":""}]],"$L5"]]]]
|
||||
5:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"BZZZ Cluster Configuration"}],["$","meta","3",{"name":"description","content":"Configure your BZZZ distributed AI coordination cluster"}]]
|
||||
1:null
|
||||
1
install/config-ui/.next/server/app/page.js
Normal file
1
install/config-ui/.next/server/app/page.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=931,e.ids=[931],e.modules={7849:e=>{e.exports=require("next/dist/client/components/action-async-storage.external")},2934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},5403:e=>{e.exports=require("next/dist/client/components/request-async-storage.external")},4580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},4749:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external")},5869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},940:(e,t,n)=>{n.r(t),n.d(t,{GlobalError:()=>s.a,__next_app__:()=>d,originalPathname:()=>c,pages:()=>u,routeModule:()=>x,tree:()=>p});var r=n(482),o=n(9108),a=n(2563),s=n.n(a),i=n(8300),l={};for(let e in i)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>i[e]);n.d(t,l);let p=["",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(n.bind(n,751)),"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/page.tsx"]}]},{layout:[()=>Promise.resolve().then(n.bind(n,2917)),"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(n.t.bind(n,9361,23)),"next/dist/client/components/not-found-error"]}],u=["/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/page.tsx"],c="/page",d={require:n,loadChunk:()=>Promise.resolve()},x=new r.AppPageRouteModule({definition:{kind:o.x.APP_PAGE,page:"/page",pathname:"/",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:p}})},751:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});var r=n(5036),o=n(3386);function a(){return r.jsx(o.default,{})}}};var t=require("../webpack-runtime.js");t.C(e);var n=e=>t(t.s=e),r=t.X(0,[73,565,761],()=>n(940));module.exports=r})();
|
||||
1
install/config-ui/.next/server/app/page.js.nft.json
Normal file
1
install/config-ui/.next/server/app/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../node_modules/next/dist/client/components/async-local-storage.js","../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../package.json","../../package.json","../chunks/329.js","../chunks/565.js","../chunks/73.js","../chunks/761.js","../chunks/font-manifest.json","../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/setup/_next/","crossOrigin":null},"ssrModuleMapping":{"1778":{"*":{"id":"9295","name":"*","chunks":[],"async":false}},"1902":{"*":{"id":"3225","name":"*","chunks":[],"async":false}},"5613":{"*":{"id":"8771","name":"*","chunks":[],"async":false}},"7690":{"*":{"id":"2583","name":"*","chunks":[],"async":false}},"7815":{"*":{"id":"6726","name":"*","chunks":[],"async":false}},"7831":{"*":{"id":"3982","name":"*","chunks":[],"async":false}},"8955":{"*":{"id":"6840","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/globals.css":{"id":2445,"name":"*","chunks":["185","static/chunks/app/layout-ca1eeb8fd961ab0a.js"],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page.tsx":{"id":7815,"name":"*","chunks":["1","static/chunks/1-c9d7758e4e3ba2a3.js","644","static/chunks/644-0fed11847454c654.js","931","static/chunks/app/page-8faaddc37bd2f9b3.js"],"async":false}},"entryCSSFiles":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/_not-found":[],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout":["static/css/e8d1974119224823.css"],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/page":[]}}
|
||||
1
install/config-ui/.next/server/app/setup.html
Normal file
1
install/config-ui/.next/server/app/setup.html
Normal file
File diff suppressed because one or more lines are too long
5
install/config-ui/.next/server/app/setup.meta
Normal file
5
install/config-ui/.next/server/app/setup.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/setup/layout,_N_T_/setup/page,_N_T_/setup/"
|
||||
}
|
||||
}
|
||||
7
install/config-ui/.next/server/app/setup.rsc
Normal file
7
install/config-ui/.next/server/app/setup.rsc
Normal file
@@ -0,0 +1,7 @@
|
||||
2:I[7831,[],""]
|
||||
3:I[7815,["1","static/chunks/1-c9d7758e4e3ba2a3.js","644","static/chunks/644-0fed11847454c654.js","413","static/chunks/app/setup/page-0064fc4ceb1b12be.js"],""]
|
||||
4:I[5613,[],""]
|
||||
5:I[1778,[],""]
|
||||
0:["7pc3-W9griwsLqMFO9F7n",[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["setup",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","setup","children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"bg-gray-50 min-h-screen","children":["$","div",null,{"className":"min-h-screen flex flex-col","children":[["$","header",null,{"className":"bg-white shadow-sm border-b border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8","children":["$","div",null,{"className":"flex justify-between items-center py-4","children":[["$","div",null,{"className":"flex items-center","children":[["$","div",null,{"className":"flex-shrink-0","children":["$","div",null,{"className":"w-8 h-8 bg-bzzz-primary rounded-lg flex items-center justify-center","children":["$","span",null,{"className":"text-white font-bold text-lg","children":"B"}]}]}],["$","div",null,{"className":"ml-3","children":[["$","h1",null,{"className":"text-xl font-semibold text-gray-900","children":"BZZZ Cluster Configuration"}],["$","p",null,{"className":"text-sm text-gray-500","children":"Distributed AI Coordination Platform"}]]}]]}],["$","div",null,{"className":"flex items-center space-x-4","children":["$","div",null,{"className":"status-online","children":"System Online"}]}]]}]}]}],["$","main",null,{"className":"flex-1","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"bg-white border-t border-gray-200","children":["$","div",null,{"className":"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4","children":["$","div",null,{"className":"flex justify-between items-center text-sm text-gray-500","children":[["$","div",null,{"children":"© 2025 Chorus Services. All rights reserved."}],["$","div",null,{"className":"flex space-x-4","children":[["$","a",null,{"href":"https://docs.chorus.services/bzzz","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Documentation"}],["$","a",null,{"href":"https://discord.gg/chorus-services","target":"_blank","className":"hover:text-bzzz-primary transition-colors","children":"Support"}]]}]]}]}]}]]}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/setup/_next/static/css/e8d1974119224823.css","precedence":"next","crossOrigin":""}]],"$L6"]]]]
|
||||
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"BZZZ Cluster Configuration"}],["$","meta","3",{"name":"description","content":"Configure your BZZZ distributed AI coordination cluster"}]]
|
||||
1:null
|
||||
1
install/config-ui/.next/server/app/setup/page.js
Normal file
1
install/config-ui/.next/server/app/setup/page.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=413,e.ids=[413],e.modules={7849:e=>{e.exports=require("next/dist/client/components/action-async-storage.external")},2934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},5403:e=>{e.exports=require("next/dist/client/components/request-async-storage.external")},4580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},4749:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external")},5869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},9601:(e,t,n)=>{n.r(t),n.d(t,{GlobalError:()=>a.a,__next_app__:()=>d,originalPathname:()=>c,pages:()=>l,routeModule:()=>x,tree:()=>u});var r=n(482),o=n(9108),s=n(2563),a=n.n(s),i=n(8300),p={};for(let e in i)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(p[e]=()=>i[e]);n.d(t,p);let u=["",{children:["setup",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(n.bind(n,3386)),"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(n.bind(n,2917)),"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(n.t.bind(n,9361,23)),"next/dist/client/components/not-found-error"]}],l=["/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page.tsx"],c="/setup/page",d={require:n,loadChunk:()=>Promise.resolve()},x=new r.AppPageRouteModule({definition:{kind:o.x.APP_PAGE,page:"/setup/page",pathname:"/setup",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:u}})}};var t=require("../../webpack-runtime.js");t.C(e);var n=e=>t(t.s=e),r=t.X(0,[73,565,761],()=>n(9601));module.exports=r})();
|
||||
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/329.js","../../chunks/565.js","../../chunks/73.js","../../chunks/761.js","../../chunks/font-manifest.json","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/setup/page"]={"moduleLoading":{"prefix":"/setup/_next/","crossOrigin":null},"ssrModuleMapping":{"1778":{"*":{"id":"9295","name":"*","chunks":[],"async":false}},"1902":{"*":{"id":"3225","name":"*","chunks":[],"async":false}},"5613":{"*":{"id":"8771","name":"*","chunks":[],"async":false}},"7690":{"*":{"id":"2583","name":"*","chunks":[],"async":false}},"7815":{"*":{"id":"6726","name":"*","chunks":[],"async":false}},"7831":{"*":{"id":"3982","name":"*","chunks":[],"async":false}},"8955":{"*":{"id":"6840","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/app-router.js":{"id":7690,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":8955,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/layout-router.js":{"id":5613,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":1902,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":1778,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/node_modules/next/dist/esm/client/components/static-generation-searchparams-bailout-provider.js":{"id":7831,"name":"*","chunks":[],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/globals.css":{"id":2445,"name":"*","chunks":["185","static/chunks/app/layout-ca1eeb8fd961ab0a.js"],"async":false},"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page.tsx":{"id":7815,"name":"*","chunks":["1","static/chunks/1-c9d7758e4e3ba2a3.js","644","static/chunks/644-0fed11847454c654.js","413","static/chunks/app/setup/page-0064fc4ceb1b12be.js"],"async":false}},"entryCSSFiles":{"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/_not-found":[],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/layout":["static/css/e8d1974119224823.css"],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/page":[],"/home/tony/chorus/project-queues/active/BZZZ/install/config-ui/app/setup/page":[]}}
|
||||
6
install/config-ui/.next/server/chunks/329.js
Normal file
6
install/config-ui/.next/server/chunks/329.js
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/chunks/565.js
Normal file
1
install/config-ui/.next/server/chunks/565.js
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/chunks/73.js
Normal file
1
install/config-ui/.next/server/chunks/73.js
Normal file
File diff suppressed because one or more lines are too long
3
install/config-ui/.next/server/chunks/761.js
Normal file
3
install/config-ui/.next/server/chunks/761.js
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/chunks/font-manifest.json
Normal file
1
install/config-ui/.next/server/chunks/font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
1
install/config-ui/.next/server/font-manifest.json
Normal file
1
install/config-ui/.next/server/font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
@@ -0,0 +1 @@
|
||||
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-c67a75d1b6f99dc8.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:["static/7pc3-W9griwsLqMFO9F7n/_buildManifest.js","static/7pc3-W9griwsLqMFO9F7n/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-82180bff1cad158b.js","static/chunks/fd9d1056-fe71d9d3341a0a8a.js","static/chunks/938-17b8dfc164ba32b9.js","static/chunks/main-app-49b06b9db6b856b1.js"],pages:{"/_app":["static/chunks/webpack-82180bff1cad158b.js","static/chunks/framework-c5181c9431ddc45b.js","static/chunks/main-780468f99531c6f2.js","static/chunks/pages/_app-98cb51ec6f9f135f.js"],"/_error":["static/chunks/webpack-82180bff1cad158b.js","static/chunks/framework-c5181c9431ddc45b.js","static/chunks/main-780468f99531c6f2.js","static/chunks/pages/_error-e87e5963ec1b8011.js"]},ampFirstPages:[]};
|
||||
6
install/config-ui/.next/server/middleware-manifest.json
Normal file
6
install/config-ui/.next/server/middleware-manifest.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"sortedMiddleware": [],
|
||||
"middleware": {},
|
||||
"functions": {},
|
||||
"version": 2
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
self.__REACT_LOADABLE_MANIFEST="{}";
|
||||
1
install/config-ui/.next/server/next-font-manifest.js
Normal file
1
install/config-ui/.next/server/next-font-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}';
|
||||
1
install/config-ui/.next/server/next-font-manifest.json
Normal file
1
install/config-ui/.next/server/next-font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}
|
||||
1
install/config-ui/.next/server/pages-manifest.json
Normal file
1
install/config-ui/.next/server/pages-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/404":"pages/404.html"}
|
||||
1
install/config-ui/.next/server/pages/404.html
Normal file
1
install/config-ui/.next/server/pages/404.html
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/pages/500.html
Normal file
1
install/config-ui/.next/server/pages/500.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" crossorigin="" nomodule="" src="/setup/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/setup/_next/static/chunks/webpack-82180bff1cad158b.js" defer="" crossorigin=""></script><script src="/setup/_next/static/chunks/framework-c5181c9431ddc45b.js" defer="" crossorigin=""></script><script src="/setup/_next/static/chunks/main-780468f99531c6f2.js" defer="" crossorigin=""></script><script src="/setup/_next/static/chunks/pages/_app-98cb51ec6f9f135f.js" defer="" crossorigin=""></script><script src="/setup/_next/static/chunks/pages/_error-e87e5963ec1b8011.js" defer="" crossorigin=""></script><script src="/setup/_next/static/7pc3-W9griwsLqMFO9F7n/_buildManifest.js" defer="" crossorigin=""></script><script src="/setup/_next/static/7pc3-W9griwsLqMFO9F7n/_ssgManifest.js" defer="" crossorigin=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"7pc3-W9griwsLqMFO9F7n","assetPrefix":"/setup","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
||||
1
install/config-ui/.next/server/pages/_app.js
Normal file
1
install/config-ui/.next/server/pages/_app.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=888,e.ids=[888],e.modules={4096:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return u}});let n=r(167)._(r(6689)),o=r(4316);async function i(e){let{Component:t,ctx:r}=e;return{pageProps:await (0,o.loadGetInitialProps)(t,r)}}class u extends n.default.Component{render(){let{Component:e,pageProps:t}=this.props;return n.default.createElement(e,t)}}u.origGetInitialProps=i,u.getInitialProps=i,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4316:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{WEB_VITALS:function(){return r},execOnce:function(){return n},isAbsoluteUrl:function(){return i},getLocationOrigin:function(){return u},getURL:function(){return s},getDisplayName:function(){return a},isResSent:function(){return c},normalizeRepeatedSlashes:function(){return l},loadGetInitialProps:function(){return f},SP:function(){return d},ST:function(){return p},DecodeError:function(){return g},NormalizeError:function(){return m},PageNotFoundError:function(){return P},MissingStaticPage:function(){return y},MiddlewareNotFoundError:function(){return E},stringifyError:function(){return _}});let r=["CLS","FCP","FID","INP","LCP","TTFB"];function n(e){let t,r=!1;return function(){for(var n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return r||(r=!0,t=e(...o)),t}}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>o.test(e);function u(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function s(){let{href:e}=window.location,t=u();return e.substring(t.length)}function a(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function c(e){return e.finished||e.headersSent}function l(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function f(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&c(r))return n;if(!n)throw Error('"'+a(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.');return n}let d="undefined"!=typeof performance,p=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class m extends Error{}class P extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class y extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class E extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function _(e){return JSON.stringify({message:e.message,stack:e.stack})}},6689:e=>{e.exports=require("react")},167:(e,t)=>{t._=t._interop_require_default=function(e){return e&&e.__esModule?e:{default:e}}}};var t=require("../webpack-runtime.js");t.C(e);var r=t(t.s=4096);module.exports=r})();
|
||||
1
install/config-ui/.next/server/pages/_app.js.nft.json
Normal file
1
install/config-ui/.next/server/pages/_app.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/next/dist/pages/_app.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../chunks/329.js","../chunks/565.js","../chunks/73.js","../chunks/761.js","../chunks/font-manifest.json","../webpack-runtime.js"]}
|
||||
1
install/config-ui/.next/server/pages/_document.js
Normal file
1
install/config-ui/.next/server/pages/_document.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=660,e.ids=[660],e.modules={2785:e=>{e.exports=require("next/dist/compiled/next-server/pages.runtime.prod.js")},6689:e=>{e.exports=require("react")},1017:e=>{e.exports=require("path")}};var r=require("../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[329],()=>s(2329));module.exports=t})();
|
||||
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/lru-cache/index.js","../../../node_modules/next/dist/compiled/lru-cache/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/pages/_document.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/329.js","../chunks/565.js","../chunks/73.js","../chunks/761.js","../chunks/font-manifest.json","../webpack-runtime.js"]}
|
||||
1
install/config-ui/.next/server/pages/_error.js
Normal file
1
install/config-ui/.next/server/pages/_error.js
Normal file
File diff suppressed because one or more lines are too long
1
install/config-ui/.next/server/pages/_error.js.nft.json
Normal file
1
install/config-ui/.next/server/pages/_error.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/lru-cache/index.js","../../../node_modules/next/dist/compiled/lru-cache/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../package.json","../chunks/329.js","../chunks/565.js","../chunks/73.js","../chunks/761.js","../chunks/font-manifest.json","../webpack-runtime.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
self.__RSC_SERVER_MANIFEST="{\"node\":{},\"edge\":{},\"encryptionKey\":\"gDVv6ZXh8m64s0NW0KpZiPxeQf13vgpecC6R4AZuBw4=\"}"
|
||||
@@ -0,0 +1 @@
|
||||
{"node":{},"edge":{},"encryptionKey":"gDVv6ZXh8m64s0NW0KpZiPxeQf13vgpecC6R4AZuBw4="}
|
||||
1
install/config-ui/.next/server/webpack-runtime.js
Normal file
1
install/config-ui/.next/server/webpack-runtime.js
Normal file
@@ -0,0 +1 @@
|
||||
(()=>{"use strict";var e={},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var a=r[o]={exports:{}},u=!0;try{e[o](a,a.exports,t),u=!1}finally{u&&delete r[o]}return a.exports}t.m=e,t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},(()=>{var e,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;t.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);t.r(a);var u={};e=e||[null,r({}),r([]),r(r)];for(var f=2&n&&o;"object"==typeof f&&!~e.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach(e=>u[e]=()=>o[e]);return u.default=()=>o,t.d(a,u),a}})(),t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,o)=>(t.f[o](e,r),r),[])),t.u=e=>""+e+".js",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.X=(e,r,o)=>{var n=r;o||(r=e,o=()=>t(t.s=n)),r.map(t.e,t);var a=o();return void 0===a?e:a},(()=>{var e={658:1},r=r=>{var o=r.modules,n=r.ids,a=r.runtime;for(var u in o)t.o(o,u)&&(t.m[u]=o[u]);a&&a(t);for(var f=0;f<n.length;f++)e[n[f]]=1};t.f.require=(o,n)=>{e[o]||(658!=o?r(require("./chunks/"+t.u(o))):e[o]=1)},module.exports=t,t.C=r})()})();
|
||||
@@ -0,0 +1 @@
|
||||
self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-e87e5963ec1b8011.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
||||
@@ -0,0 +1 @@
|
||||
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[165],{3155:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found",function(){return n(4032)}])},4032:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let l=n(1024)._(n(2265)),r={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};function o(){return l.default.createElement(l.default.Fragment,null,l.default.createElement("title",null,"404: This page could not be found."),l.default.createElement("div",{style:r.error},l.default.createElement("div",null,l.default.createElement("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),l.default.createElement("h1",{className:"next-error-h1",style:r.h1},"404"),l.default.createElement("div",{style:r.desc},l.default.createElement("h2",{style:r.h2},"This page could not be found.")))))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},function(e){e.O(0,[971,938,744],function(){return e(e.s=3155)}),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{3489:function(n,e,u){Promise.resolve().then(u.t.bind(u,2445,23))},2445:function(){}},function(n){n.O(0,[971,938,744],function(){return n(n.s=3489)}),_N_E=n.O()}]);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user