Integrate Bzzz P2P task coordination and enhance project management

🔗 Bzzz Integration:
- Added comprehensive Bzzz integration documentation and todos
- Implemented N8N chat workflow architecture for task coordination
- Enhanced project management with Bzzz-specific features
- Added GitHub service for seamless issue synchronization
- Created BzzzIntegration component for frontend management

🎯 Project Management Enhancements:
- Improved project listing and filtering capabilities
- Enhanced authentication and authorization flows
- Added unified coordinator for better task orchestration
- Streamlined project activation and configuration
- Updated API endpoints for Bzzz compatibility

📊 Technical Improvements:
- Updated Docker Swarm configuration for local registry
- Enhanced frontend build with updated assets
- Improved WebSocket connections for real-time updates
- Added comprehensive error handling and logging
- Updated environment configurations for production

 System Integration:
- Successfully tested with Bzzz v1.2 task execution workflow
- Validated GitHub issue discovery and claiming functionality
- Confirmed sandbox-based task execution compatibility
- Verified Docker registry integration

This release enables seamless integration between Hive project management and Bzzz P2P task coordination, creating a complete distributed development ecosystem.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-07-14 20:56:01 +10:00
parent e89f2f4b7b
commit 3f3eec7f5d
38 changed files with 2591 additions and 932 deletions

View File

@@ -22,6 +22,7 @@ import { projectApi } from '../../services/api';
export default function ProjectList() {
const [searchTerm, setSearchTerm] = useState('');
const [statusFilter, setStatusFilter] = useState<'all' | 'active' | 'inactive' | 'archived'>('all');
const [bzzzFilter, setBzzzFilter] = useState<'all' | 'enabled' | 'disabled'>('all');
// Fetch real projects from API
const { data: projects = [], isLoading, error } = useQuery({
@@ -35,7 +36,13 @@ export default function ProjectList() {
const matchesSearch = project.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
project.description?.toLowerCase().includes(searchTerm.toLowerCase());
const matchesStatus = statusFilter === 'all' || project.status === statusFilter;
return matchesSearch && matchesStatus;
const bzzzEnabled = (project as any).bzzz_config?.bzzz_enabled || false;
const matchesBzzz = bzzzFilter === 'all' ||
(bzzzFilter === 'enabled' && bzzzEnabled) ||
(bzzzFilter === 'disabled' && !bzzzEnabled);
return matchesSearch && matchesStatus && matchesBzzz;
});
const getStatusBadge = (status: string) => {
@@ -134,6 +141,19 @@ export default function ProjectList() {
<option value="archived">Archived</option>
</select>
</div>
<div className="flex items-center space-x-2">
<span className="text-sm text-gray-500">🐝</span>
<select
value={bzzzFilter}
onChange={(e) => setBzzzFilter(e.target.value as any)}
className="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500"
>
<option value="all">All Projects</option>
<option value="enabled">Bzzz Enabled</option>
<option value="disabled">Bzzz Disabled</option>
</select>
</div>
</div>
</div>
@@ -213,6 +233,16 @@ export default function ProjectList() {
</Link>
)}
</Menu.Item>
<Menu.Item>
{({ active }) => (
<Link
to={`/projects/${project.id}/bzzz`}
className={`${active ? 'bg-gray-100' : ''} block px-4 py-2 text-sm text-gray-700`}
>
🐝 Bzzz Integration
</Link>
)}
</Menu.Item>
<Menu.Item>
{({ active }) => (
<button
@@ -233,9 +263,20 @@ export default function ProjectList() {
{/* Status and Tags */}
<div className="flex items-center justify-between mt-4">
<span className={getStatusBadge(project.status)}>
{project.status}
</span>
<div className="flex items-center space-x-2">
<span className={getStatusBadge(project.status)}>
{project.status}
</span>
{/* Bzzz Integration Status */}
{(project as any).bzzz_config?.bzzz_enabled && (
<span className="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800">
🐝 Bzzz
{(project as any).bzzz_config?.ready_to_claim && (
<span className="ml-1 inline-block w-2 h-2 bg-green-400 rounded-full"></span>
)}
</span>
)}
</div>
<div className="flex items-center space-x-1">
{project.tags?.slice(0, 2).map((tag) => (
<span key={tag} className="inline-flex items-center px-2 py-1 rounded text-xs bg-gray-100 text-gray-600">
@@ -248,6 +289,21 @@ export default function ProjectList() {
)}
</div>
</div>
{/* GitHub Repository Info for Bzzz-enabled projects */}
{(project as any).bzzz_config?.bzzz_enabled && (project as any).bzzz_config?.git_url && (
<div className="mt-3 text-xs text-gray-500">
<div className="flex items-center space-x-1">
<svg className="h-3 w-3" fill="currentColor" viewBox="0 0 20 20">
<path fillRule="evenodd" d="M10 0C4.477 0 0 4.484 0 10.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0110 4.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0020 10.017C20 4.484 15.522 0 10 0z" clipRule="evenodd" />
</svg>
<span>{(project as any).bzzz_config.git_owner}/{(project as any).bzzz_config.git_repository}</span>
{(project as any).bzzz_config.ready_to_claim && (
<span className="text-green-600"> Ready for tasks</span>
)}
</div>
</div>
)}
</div>
{/* Metrics */}