genoma-evolution 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.brv/.obsidian/app.json +1 -0
- package/.brv/.obsidian/appearance.json +1 -0
- package/.brv/.obsidian/core-plugins.json +33 -0
- package/.brv/.obsidian/graph.json +22 -0
- package/.brv/.obsidian/workspace.json +195 -0
- package/.brv/Sin ti/314/201tulo 1.canvas" +1 -0
- package/.brv/Sin ti/314/201tulo 2.canvas" +1 -0
- package/.brv/Sin ti/314/201tulo.canvas" +1 -0
- package/.brv/_queue_status.json +1 -0
- package/.brv/config.json +5 -0
- package/.brv/context-tree/_index.md +60 -0
- package/.brv/context-tree/_manifest.json +165 -0
- package/.brv/context-tree/backend/_index.md +24 -0
- package/.brv/context-tree/backend/backend/_index.md +40 -0
- package/.brv/context-tree/backend/backend/init.abstract.md +0 -0
- package/.brv/context-tree/backend/backend/init.md +27 -0
- package/.brv/context-tree/backend/backend/init.overview.md +29 -0
- package/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
- package/.brv/context-tree/backend/backend/job_tracker.md +273 -0
- package/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
- package/.brv/context-tree/backend/backend/main.abstract.md +0 -0
- package/.brv/context-tree/backend/backend/main.md +1292 -0
- package/.brv/context-tree/backend/backend/main.overview.md +30 -0
- package/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
- package/.brv/context-tree/backend/backend/requirements.md +37 -0
- package/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
- package/.brv/context-tree/docs/_index.md +37 -0
- package/.brv/context-tree/docs/api/_index.md +54 -0
- package/.brv/context-tree/docs/api/context.md +11 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
- package/.brv/context-tree/frontend/_index.md +48 -0
- package/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
- package/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
- package/.brv/context-tree/frontend/src/_index.md +53 -0
- package/.brv/context-tree/frontend/src/components/_index.md +52 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
- package/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
- package/.brv/context-tree/frontend/src/context.md +10 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
- package/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
- package/.brv/context-tree/frontend/src/lib/_index.md +48 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
- package/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
- package/.brv/context-tree/frontend/src/page.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/page.md +103 -0
- package/.brv/context-tree/frontend/src/page.overview.md +7 -0
- package/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/settingspage.md +124 -0
- package/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
- package/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
- package/.brv/context-tree/frontend/src/sidebar.md +170 -0
- package/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
- package/.brv/context-tree/meta/_index.md +24 -0
- package/.brv/context-tree/meta/curation_context/_index.md +24 -0
- package/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
- package/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
- package/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
- package/.brv/dream-log/drm-1777341062653.json +33 -0
- package/.brv/dream-state.json +8 -0
- package/.brv/dream.lock +0 -0
- package/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/settings.local.json +7 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/app.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/appearance.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/core-plugins.json +33 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/graph.json +22 -0
- package/.claude/worktrees/phase-2-mcp/.brv/.obsidian/workspace.json +195 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 1.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo 2.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/Sin t/303/255tulo.canvas" +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/_queue_status.json +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/config.json +5 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_index.md +60 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/_manifest.json +165 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/_index.md +40 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.md +27 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/init.overview.md +29 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.md +273 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/job_tracker.overview.md +31 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.md +1292 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/main.overview.md +30 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.md +37 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/backend/backend/requirements.overview.md +28 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/_index.md +37 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/_index.md +54 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/context.md +11 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/docs/api/hermes_api_openapi_specification.overview.md +44 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/_index.md +48 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/_index.md +31 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.md +41 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/hermes_dashboard/architecture_overview.overview.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/_index.md +53 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/_index.md +52 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.md +161 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/components/sidebar_navigation_component.overview.md +32 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/context.md +10 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/functioncallingpage.overview.md +26 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/_index.md +48 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.abstract.md +1 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.md +403 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/lib/api_client_library.overview.md +69 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.md +103 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/page.overview.md +7 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.md +124 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/settingspage.overview.md +34 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.abstract.md +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.md +170 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/frontend/src/sidebar.overview.md +25 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/_index.md +24 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.abstract.md +4 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.md +35 -0
- package/.claude/worktrees/phase-2-mcp/.brv/context-tree/meta/curation_context/empty_context.overview.md +20 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream-log/drm-1777341062653.json +33 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream-state.json +8 -0
- package/.claude/worktrees/phase-2-mcp/.brv/dream.lock +0 -0
- package/.claude/worktrees/phase-2-mcp/.brv/review-backups/docs/api/hermes_api_openapi_specification.md +468 -0
- package/.claude/worktrees/phase-2-mcp/.claude/settings.local.json +13 -0
- package/.claude/worktrees/phase-2-mcp/.kilocode/package-lock.json +378 -0
- package/.claude/worktrees/phase-2-mcp/.kilocode/package.json +5 -0
- package/.claude/worktrees/phase-2-mcp/AGENTS.md +5 -0
- package/.claude/worktrees/phase-2-mcp/CLAUDE.md +29 -0
- package/.claude/worktrees/phase-2-mcp/QA_AUDIT_PLAN.md +156 -0
- package/.claude/worktrees/phase-2-mcp/README.md +316 -0
- package/.claude/worktrees/phase-2-mcp/agent-agnostic-evolution-dashboard.md +405 -0
- package/.claude/worktrees/phase-2-mcp/backend/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/claude_code_collector.py +277 -0
- package/.claude/worktrees/phase-2-mcp/backend/collectors/hermes_collector.py +68 -0
- package/.claude/worktrees/phase-2-mcp/backend/curator.py +512 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/__init__.py +19 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/engine.py +116 -0
- package/.claude/worktrees/phase-2-mcp/backend/eval/scorers.py +201 -0
- package/.claude/worktrees/phase-2-mcp/backend/generate_dataset.py +86 -0
- package/.claude/worktrees/phase-2-mcp/backend/job_tracker.py +232 -0
- package/.claude/worktrees/phase-2-mcp/backend/main.py +1746 -0
- package/.claude/worktrees/phase-2-mcp/backend/mcp_server.py +250 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/__init__.py +24 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/cycle_orchestrator.py +270 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/delta_validator.py +191 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/dspy_compiler.py +315 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/gepa_strategist.py +213 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/models.py +260 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/skill_deployer.py +195 -0
- package/.claude/worktrees/phase-2-mcp/backend/promethean/trace_ingestion.py +142 -0
- package/.claude/worktrees/phase-2-mcp/backend/requirements.txt +6 -0
- package/.claude/worktrees/phase-2-mcp/backend/sdd_evolve.py +459 -0
- package/.claude/worktrees/phase-2-mcp/backend/skill_detector.py +227 -0
- package/.claude/worktrees/phase-2-mcp/backend/skill_registry.py +289 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/__init__.py +5 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/run_store.py +393 -0
- package/.claude/worktrees/phase-2-mcp/backend/storage/schema.sql +99 -0
- package/.claude/worktrees/phase-2-mcp/backend/validate_evolution.py +267 -0
- package/.claude/worktrees/phase-2-mcp/components.json +28 -0
- package/.claude/worktrees/phase-2-mcp/docs/api/hermes-api.openapi.yaml +438 -0
- package/.claude/worktrees/phase-2-mcp/docs/hero.svg +148 -0
- package/.claude/worktrees/phase-2-mcp/eslint.config.mjs +18 -0
- package/.claude/worktrees/phase-2-mcp/install.sh +245 -0
- package/.claude/worktrees/phase-2-mcp/next-env.d.ts +6 -0
- package/.claude/worktrees/phase-2-mcp/next.config.ts +32 -0
- package/.claude/worktrees/phase-2-mcp/package-lock.json +11936 -0
- package/.claude/worktrees/phase-2-mcp/package.json +41 -0
- package/.claude/worktrees/phase-2-mcp/pnpm-workspace.yaml +4 -0
- package/.claude/worktrees/phase-2-mcp/postcss.config.mjs +7 -0
- package/.claude/worktrees/phase-2-mcp/public/file.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Bold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Medium.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Regular.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
- package/.claude/worktrees/phase-2-mcp/public/globe.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/next.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/theme-preview.html +257 -0
- package/.claude/worktrees/phase-2-mcp/public/vercel.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/public/window.svg +1 -0
- package/.claude/worktrees/phase-2-mcp/run.sh +26 -0
- package/.claude/worktrees/phase-2-mcp/skills-lock.json +10 -0
- package/.claude/worktrees/phase-2-mcp/specs/event-schema.md +223 -0
- package/.claude/worktrees/phase-2-mcp/specs/examples/run.jsonl +3 -0
- package/.claude/worktrees/phase-2-mcp/src/app/api/[...path]/route.ts +55 -0
- package/.claude/worktrees/phase-2-mcp/src/app/api/auth/token/route.ts +22 -0
- package/.claude/worktrees/phase-2-mcp/src/app/evolution/page.tsx +589 -0
- package/.claude/worktrees/phase-2-mcp/src/app/favicon.ico +0 -0
- package/.claude/worktrees/phase-2-mcp/src/app/globals.css +321 -0
- package/.claude/worktrees/phase-2-mcp/src/app/layout.tsx +63 -0
- package/.claude/worktrees/phase-2-mcp/src/app/page.tsx +70 -0
- package/.claude/worktrees/phase-2-mcp/src/app/skills/page.tsx +369 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ApiConfigCard.tsx +199 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.css +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.d.ts +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ColorBends.jsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/CoreLoopToggle.tsx +111 -0
- package/.claude/worktrees/phase-2-mcp/src/components/EnvironmentStatus.tsx +176 -0
- package/.claude/worktrees/phase-2-mcp/src/components/EvolutionBackground.tsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ReactQueryProvider.tsx +24 -0
- package/.claude/worktrees/phase-2-mcp/src/components/Sidebar.tsx +247 -0
- package/.claude/worktrees/phase-2-mcp/src/components/SkillDiffViewer.tsx +154 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ThemeAwareBackground.tsx +67 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ThemeToggle.tsx +54 -0
- package/.claude/worktrees/phase-2-mcp/src/components/WelcomeHero.tsx +77 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ClickSpark.tsx +116 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/CountUp.tsx +98 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/DarkSelect.tsx +95 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/DecryptedText.tsx +161 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ElectricBorder.tsx +184 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/GlitchText.tsx +34 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/ShinyText.tsx +55 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/SpotlightCard.tsx +42 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/TextType.tsx +95 -0
- package/.claude/worktrees/phase-2-mcp/src/components/bits/index.ts +9 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/CuratorPage.tsx +632 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/DatasetPage.tsx +271 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/EvolutionPage.tsx +676 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/FunctionCallingPage.tsx +1 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/LogsPage.tsx +272 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/MetricsPage.tsx +246 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/OverviewPage.tsx +420 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/SettingsPage.tsx +88 -0
- package/.claude/worktrees/phase-2-mcp/src/components/pages/SkillStudioPage.tsx +376 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/animated-theme-toggler.tsx +97 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/button.tsx +67 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/card.tsx +103 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/input.tsx +19 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/separator.tsx +28 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/sheet.tsx +147 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/sidebar.tsx +702 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/skeleton.tsx +13 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/theme-toggle.tsx +272 -0
- package/.claude/worktrees/phase-2-mcp/src/components/ui/tooltip.tsx +57 -0
- package/.claude/worktrees/phase-2-mcp/src/hooks/use-mobile.ts +19 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/api.ts +455 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/queryClient.ts +12 -0
- package/.claude/worktrees/phase-2-mcp/src/lib/utils.ts +6 -0
- package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
- package/.claude/worktrees/phase-2-mcp/stitch/agent_dashboard/prototype.html +676 -0
- package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/code.html +448 -0
- package/.claude/worktrees/phase-2-mcp/stitch/curator_workspace/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/datasets/code.html +479 -0
- package/.claude/worktrees/phase-2-mcp/stitch/datasets/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/code.html +461 -0
- package/.claude/worktrees/phase-2-mcp/stitch/evolution_history/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN.md +192 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/code.html +399 -0
- package/.claude/worktrees/phase-2-mcp/stitch/hermes_overview/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/live_logs/code.html +324 -0
- package/.claude/worktrees/phase-2-mcp/stitch/live_logs/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/code.html +596 -0
- package/.claude/worktrees/phase-2-mcp/stitch/skill_hub/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/code.html +527 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_metrics/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_settings/code.html +257 -0
- package/.claude/worktrees/phase-2-mcp/stitch/system_settings/screen.png +0 -0
- package/.claude/worktrees/phase-2-mcp/test_dashboard.py +201 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/fixtures/sample_session.jsonl +7 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/test_claude_code_collector.py +171 -0
- package/.claude/worktrees/phase-2-mcp/tests/collectors/test_hermes_collector.py +167 -0
- package/.claude/worktrees/phase-2-mcp/tests/eval/test_engine.py +234 -0
- package/.claude/worktrees/phase-2-mcp/tests/eval/test_scorers.py +249 -0
- package/.claude/worktrees/phase-2-mcp/tests/storage/__init__.py +0 -0
- package/.claude/worktrees/phase-2-mcp/tests/storage/test_run_store.py +359 -0
- package/.claude/worktrees/phase-2-mcp/tests/test_curator.py +559 -0
- package/.claude/worktrees/phase-2-mcp/tests/test_mcp_server.py +114 -0
- package/.claude/worktrees/phase-2-mcp/tsconfig.json +34 -0
- package/.env.example +72 -0
- package/.kilocode/package-lock.json +378 -0
- package/.kilocode/package.json +5 -0
- package/AGENTS.md +5 -0
- package/CLAUDE.md +29 -0
- package/QA_AUDIT_PLAN.md +156 -0
- package/README.md +355 -0
- package/agent-agnostic-evolution-dashboard.md +405 -0
- package/backend/__init__.py +0 -0
- package/backend/collectors/__init__.py +0 -0
- package/backend/collectors/claude_code_collector.py +277 -0
- package/backend/collectors/hermes_collector.py +68 -0
- package/backend/curator.py +512 -0
- package/backend/eval/__init__.py +19 -0
- package/backend/eval/engine.py +116 -0
- package/backend/eval/scorers.py +201 -0
- package/backend/generate_dataset.py +86 -0
- package/backend/job_tracker.py +232 -0
- package/backend/main.py +1746 -0
- package/backend/mcp_server.py +250 -0
- package/backend/promethean/__init__.py +24 -0
- package/backend/promethean/cycle_orchestrator.py +270 -0
- package/backend/promethean/delta_validator.py +191 -0
- package/backend/promethean/dspy_compiler.py +315 -0
- package/backend/promethean/gepa_strategist.py +213 -0
- package/backend/promethean/models.py +260 -0
- package/backend/promethean/skill_deployer.py +195 -0
- package/backend/promethean/trace_ingestion.py +142 -0
- package/backend/requirements.txt +6 -0
- package/backend/sdd_evolve.py +459 -0
- package/backend/skill_detector.py +227 -0
- package/backend/skill_registry.py +289 -0
- package/backend/storage/__init__.py +5 -0
- package/backend/storage/run_store.py +393 -0
- package/backend/storage/schema.sql +99 -0
- package/backend/validate_evolution.py +267 -0
- package/bin/genoma.js +250 -0
- package/components.json +28 -0
- package/docs/api/hermes-api.openapi.yaml +438 -0
- package/docs/hero.svg +148 -0
- package/eslint.config.mjs +18 -0
- package/install.sh +245 -0
- package/next-env.d.ts +6 -0
- package/next.config.ts +32 -0
- package/package.json +46 -0
- package/pnpm-workspace.yaml +4 -0
- package/postcss.config.mjs +7 -0
- package/public/file.svg +1 -0
- package/public/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/public/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/public/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/public/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/public/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/public/fonts/SF-Pro-Text-Bold.otf +0 -0
- package/public/fonts/SF-Pro-Text-Heavy.otf +0 -0
- package/public/fonts/SF-Pro-Text-Medium.otf +0 -0
- package/public/fonts/SF-Pro-Text-Regular.otf +0 -0
- package/public/fonts/SF-Pro-Text-Semibold.otf +0 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/theme-preview.html +257 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/run.sh +26 -0
- package/scripts/postinstall.js +50 -0
- package/skills-lock.json +10 -0
- package/specs/event-schema.md +223 -0
- package/specs/examples/run.jsonl +3 -0
- package/src/app/api/[...path]/route.ts +55 -0
- package/src/app/api/auth/token/route.ts +22 -0
- package/src/app/evolution/page.tsx +589 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +321 -0
- package/src/app/layout.tsx +63 -0
- package/src/app/page.tsx +70 -0
- package/src/app/skills/page.tsx +369 -0
- package/src/components/ApiConfigCard.tsx +199 -0
- package/src/components/ColorBends.css +1 -0
- package/src/components/ColorBends.d.ts +1 -0
- package/src/components/ColorBends.jsx +1 -0
- package/src/components/CoreLoopToggle.tsx +111 -0
- package/src/components/EnvironmentStatus.tsx +176 -0
- package/src/components/EvolutionBackground.tsx +1 -0
- package/src/components/ReactQueryProvider.tsx +24 -0
- package/src/components/Sidebar.tsx +247 -0
- package/src/components/SkillDiffViewer.tsx +154 -0
- package/src/components/ThemeAwareBackground.tsx +67 -0
- package/src/components/ThemeToggle.tsx +54 -0
- package/src/components/WelcomeHero.tsx +77 -0
- package/src/components/bits/ClickSpark.tsx +116 -0
- package/src/components/bits/CountUp.tsx +98 -0
- package/src/components/bits/DarkSelect.tsx +95 -0
- package/src/components/bits/DecryptedText.tsx +161 -0
- package/src/components/bits/ElectricBorder.tsx +184 -0
- package/src/components/bits/GlitchText.tsx +34 -0
- package/src/components/bits/ShinyText.tsx +55 -0
- package/src/components/bits/SpotlightCard.tsx +42 -0
- package/src/components/bits/TextType.tsx +95 -0
- package/src/components/bits/index.ts +9 -0
- package/src/components/pages/CuratorPage.tsx +632 -0
- package/src/components/pages/DatasetPage.tsx +271 -0
- package/src/components/pages/EvolutionPage.tsx +676 -0
- package/src/components/pages/FunctionCallingPage.tsx +1 -0
- package/src/components/pages/LogsPage.tsx +272 -0
- package/src/components/pages/MetricsPage.tsx +246 -0
- package/src/components/pages/OverviewPage.tsx +420 -0
- package/src/components/pages/SettingsPage.tsx +88 -0
- package/src/components/pages/SkillStudioPage.tsx +376 -0
- package/src/components/ui/animated-theme-toggler.tsx +97 -0
- package/src/components/ui/button.tsx +67 -0
- package/src/components/ui/card.tsx +103 -0
- package/src/components/ui/input.tsx +19 -0
- package/src/components/ui/separator.tsx +28 -0
- package/src/components/ui/sheet.tsx +147 -0
- package/src/components/ui/sidebar.tsx +702 -0
- package/src/components/ui/skeleton.tsx +13 -0
- package/src/components/ui/theme-toggle.tsx +272 -0
- package/src/components/ui/tooltip.tsx +57 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/lib/api.ts +455 -0
- package/src/lib/queryClient.ts +12 -0
- package/src/lib/utils.ts +6 -0
- package/stitch/agent_dashboard/DESIGN_SPEC.md +521 -0
- package/stitch/agent_dashboard/prototype.html +676 -0
- package/stitch/curator_workspace/code.html +448 -0
- package/stitch/curator_workspace/screen.png +0 -0
- package/stitch/datasets/code.html +479 -0
- package/stitch/datasets/screen.png +0 -0
- package/stitch/evolution_history/code.html +461 -0
- package/stitch/evolution_history/screen.png +0 -0
- package/stitch/hermes_dashboard/DESIGN.md +192 -0
- package/stitch/hermes_dashboard/DESIGN_SPEC.md +455 -0
- package/stitch/hermes_overview/code.html +399 -0
- package/stitch/hermes_overview/screen.png +0 -0
- package/stitch/live_logs/code.html +324 -0
- package/stitch/live_logs/screen.png +0 -0
- package/stitch/skill_hub/code.html +596 -0
- package/stitch/skill_hub/screen.png +0 -0
- package/stitch/system_metrics/code.html +527 -0
- package/stitch/system_metrics/screen.png +0 -0
- package/stitch/system_settings/code.html +257 -0
- package/stitch/system_settings/screen.png +0 -0
- package/test_dashboard.py +201 -0
- package/tests/collectors/__init__.py +0 -0
- package/tests/collectors/fixtures/sample_session.jsonl +7 -0
- package/tests/collectors/test_claude_code_collector.py +171 -0
- package/tests/collectors/test_hermes_collector.py +167 -0
- package/tests/eval/test_engine.py +234 -0
- package/tests/eval/test_scorers.py +249 -0
- package/tests/storage/__init__.py +0 -0
- package/tests/storage/test_run_store.py +359 -0
- package/tests/test_curator.py +559 -0
- package/tests/test_e2e_npm.py +621 -0
- package/tests/test_mcp_server.py +114 -0
- package/tsconfig.json +34 -0
package/install.sh
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
3
|
+
# Hermes Dashboard — Universal Installer
|
|
4
|
+
# Works on Linux (x86_64/aarch64) and macOS (Intel/Apple Silicon)
|
|
5
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
DASHBOARD_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
BACKEND_DIR="$DASHBOARD_DIR/backend"
|
|
10
|
+
PYTHON=""
|
|
11
|
+
|
|
12
|
+
# ── Colors ──────────────────────────────────────────────────────────
|
|
13
|
+
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
|
14
|
+
CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
|
|
15
|
+
|
|
16
|
+
info() { echo -e "${CYAN}▸${NC} $*"; }
|
|
17
|
+
ok() { echo -e "${GREEN}✓${NC} $*"; }
|
|
18
|
+
warn() { echo -e "${YELLOW}⚠${NC} $*"; }
|
|
19
|
+
err() { echo -e "${RED}✗${NC} $*" >&2; }
|
|
20
|
+
banner(){ echo -e "\n${BOLD}${CYAN}$*${NC}\n"; }
|
|
21
|
+
|
|
22
|
+
# ── Detect OS ───────────────────────────────────────────────────────
|
|
23
|
+
detect_os() {
|
|
24
|
+
case "$(uname -s)" in
|
|
25
|
+
Linux*) OS="linux";;
|
|
26
|
+
Darwin*) OS="macos";;
|
|
27
|
+
*) err "Unsupported OS: $(uname -s)"; exit 1;;
|
|
28
|
+
esac
|
|
29
|
+
ARCH="$(uname -m)"
|
|
30
|
+
ok "Detected: $OS ($ARCH)"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# ── Find Python ─────────────────────────────────────────────────────
|
|
34
|
+
find_python() {
|
|
35
|
+
for candidate in python3.12 python3.11 python3; do
|
|
36
|
+
if command -v "$candidate" &>/dev/null; then
|
|
37
|
+
local ver
|
|
38
|
+
ver=$("$candidate" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>/dev/null || echo "0.0")
|
|
39
|
+
local major=${ver%%.*}
|
|
40
|
+
local minor=${ver#*.}
|
|
41
|
+
if [[ "$major" -ge 3 && "$minor" -ge 10 ]]; then
|
|
42
|
+
PYTHON="$candidate"
|
|
43
|
+
ok "Python: $PYTHON ($ver)"
|
|
44
|
+
return 0
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
done
|
|
48
|
+
err "Python 3.10+ not found. Install it first."
|
|
49
|
+
exit 1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# ── Find hermes-agent ───────────────────────────────────────────────
|
|
53
|
+
find_hermes() {
|
|
54
|
+
local candidates=(
|
|
55
|
+
"${HERMES_AGENT_REPO:-}"
|
|
56
|
+
"$HOME/.hermes/hermes-agent"
|
|
57
|
+
"$HOME/.local/share/hermes/hermes-agent"
|
|
58
|
+
"/usr/local/share/hermes/hermes-agent"
|
|
59
|
+
"$DASHBOARD_DIR/../hermes-agent"
|
|
60
|
+
)
|
|
61
|
+
for p in "${candidates[@]}"; do
|
|
62
|
+
[[ -z "$p" ]] && continue
|
|
63
|
+
if [[ -d "$p/skills" ]]; then
|
|
64
|
+
HERMES_REPO="$p"
|
|
65
|
+
ok "hermes-agent: $HERMES_REPO"
|
|
66
|
+
return 0
|
|
67
|
+
fi
|
|
68
|
+
done
|
|
69
|
+
err "hermes-agent not found. Set HERMES_AGENT_REPO or install to ~/.hermes/hermes-agent"
|
|
70
|
+
exit 1
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
# ── Find hermes-agent-self-evolution ────────────────────────────────
|
|
74
|
+
find_evolution() {
|
|
75
|
+
local candidates=(
|
|
76
|
+
"$HOME/.hermes/hermes-agent-self-evolution"
|
|
77
|
+
"$DASHBOARD_DIR/../hermes-agent-self-evolution"
|
|
78
|
+
"$HOME/dev/hermes-agent-self-evolution"
|
|
79
|
+
)
|
|
80
|
+
for p in "${candidates[@]}"; do
|
|
81
|
+
if [[ -d "$p/evolution" ]]; then
|
|
82
|
+
EVOLUTION_DIR="$p"
|
|
83
|
+
ok "self-evolution: $EVOLUTION_DIR"
|
|
84
|
+
return 0
|
|
85
|
+
fi
|
|
86
|
+
done
|
|
87
|
+
warn "hermes-agent-self-evolution not found (evolution features will be limited)"
|
|
88
|
+
EVOLUTION_DIR=""
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
# ── Setup Python venv ───────────────────────────────────────────────
|
|
92
|
+
setup_python_deps() {
|
|
93
|
+
banner "Setting up Python backend"
|
|
94
|
+
|
|
95
|
+
if [[ ! -d "$BACKEND_DIR/venv" ]]; then
|
|
96
|
+
info "Creating venv..."
|
|
97
|
+
"$PYTHON" -m venv "$BACKEND_DIR/venv"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Activate venv
|
|
101
|
+
source "$BACKEND_DIR/venv/bin/activate"
|
|
102
|
+
|
|
103
|
+
info "Installing Python deps..."
|
|
104
|
+
pip install -q --upgrade pip
|
|
105
|
+
pip install -q -r "$BACKEND_DIR/requirements.txt"
|
|
106
|
+
|
|
107
|
+
# Also install evolution deps if available
|
|
108
|
+
if [[ -n "$EVOLUTION_DIR" && -f "$EVOLUTION_DIR/pyproject.toml" ]]; then
|
|
109
|
+
info "Installing evolution deps..."
|
|
110
|
+
pip install -q dspy click rich pyyaml openai 2>/dev/null || warn "Some evolution deps failed (non-critical)"
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
ok "Python deps installed"
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
# ── Setup Node deps ─────────────────────────────────────────────────
|
|
117
|
+
setup_node_deps() {
|
|
118
|
+
banner "Setting up Node.js frontend"
|
|
119
|
+
|
|
120
|
+
if ! command -v node &>/dev/null; then
|
|
121
|
+
err "Node.js not found. Install from https://nodejs.org"
|
|
122
|
+
exit 1
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
local node_ver
|
|
126
|
+
node_ver=$(node -v | tr -d 'v' | cut -d. -f1)
|
|
127
|
+
if [[ "$node_ver" -lt 18 ]]; then
|
|
128
|
+
err "Node.js 18+ required (found $(node -v))"
|
|
129
|
+
exit 1
|
|
130
|
+
fi
|
|
131
|
+
ok "Node.js: $(node -v)"
|
|
132
|
+
|
|
133
|
+
if [[ ! -d "$DASHBOARD_DIR/node_modules" ]]; then
|
|
134
|
+
info "Installing npm deps..."
|
|
135
|
+
cd "$DASHBOARD_DIR"
|
|
136
|
+
npm install --silent
|
|
137
|
+
fi
|
|
138
|
+
ok "Node deps installed"
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
# ── Generate .env ───────────────────────────────────────────────────
|
|
142
|
+
generate_env() {
|
|
143
|
+
banner "Generating configuration"
|
|
144
|
+
|
|
145
|
+
local env_file="$DASHBOARD_DIR/.env.local"
|
|
146
|
+
cat > "$env_file" << EOF
|
|
147
|
+
# Auto-generated by install.sh — $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
148
|
+
NEXT_PUBLIC_API_URL=http://localhost:8787
|
|
149
|
+
HERMES_AGENT_REPO=$HERMES_REPO
|
|
150
|
+
EVOLUTION_DIR=$EVOLUTION_DIR
|
|
151
|
+
PYTHON=$(which "$PYTHON" 2>/dev/null || echo "$PYTHON")
|
|
152
|
+
EOF
|
|
153
|
+
ok "Config: $env_file"
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# ── Create start script ─────────────────────────────────────────────
|
|
157
|
+
create_start_script() {
|
|
158
|
+
local start_script="$DASHBOARD_DIR/start.sh"
|
|
159
|
+
cat > "$start_script" << 'STARTEOF'
|
|
160
|
+
#!/usr/bin/env bash
|
|
161
|
+
# Hermes Dashboard — Start script
|
|
162
|
+
set -euo pipefail
|
|
163
|
+
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
164
|
+
|
|
165
|
+
# Load env
|
|
166
|
+
[[ -f "$DIR/.env.local" ]] && set -a && source "$DIR/.env.local" && set +a
|
|
167
|
+
|
|
168
|
+
echo "╔══════════════════════════════════════════╗"
|
|
169
|
+
echo "║ Hermes Evolution Dashboard ║"
|
|
170
|
+
echo "╚══════════════════════════════════════════╝"
|
|
171
|
+
echo ""
|
|
172
|
+
|
|
173
|
+
# Start backend
|
|
174
|
+
echo "▸ Starting backend (port 8787)..."
|
|
175
|
+
source "$DIR/backend/venv/bin/activate"
|
|
176
|
+
export HERMES_AGENT_REPO="${HERMES_AGENT_REPO:-$HOME/.hermes/hermes-agent}"
|
|
177
|
+
export PYTHONPATH="${EVOLUTION_DIR:-$HOME/.hermes/hermes-agent-self-evolution}"
|
|
178
|
+
uvicorn backend.main:app --host 0.0.0.0 --port 8787 &
|
|
179
|
+
BACKEND_PID=$!
|
|
180
|
+
|
|
181
|
+
# Wait for backend
|
|
182
|
+
for i in $(seq 1 15); do
|
|
183
|
+
curl -sf http://localhost:8787/api/health >/dev/null 2>&1 && break
|
|
184
|
+
sleep 0.5
|
|
185
|
+
done
|
|
186
|
+
echo "✓ Backend online (PID $BACKEND_PID)"
|
|
187
|
+
|
|
188
|
+
# Start frontend
|
|
189
|
+
echo "▸ Starting frontend (port 3001)..."
|
|
190
|
+
PORT=3001 npm run dev --prefix "$DIR" &
|
|
191
|
+
FRONTEND_PID=$!
|
|
192
|
+
echo "✓ Frontend starting..."
|
|
193
|
+
echo ""
|
|
194
|
+
echo " Dashboard: http://localhost:3001"
|
|
195
|
+
echo " API: http://localhost:8787"
|
|
196
|
+
echo ""
|
|
197
|
+
echo " Press Ctrl+C to stop"
|
|
198
|
+
echo ""
|
|
199
|
+
|
|
200
|
+
# Cleanup on exit
|
|
201
|
+
cleanup() {
|
|
202
|
+
echo ""
|
|
203
|
+
echo "Stopping..."
|
|
204
|
+
kill $BACKEND_PID 2>/dev/null || true
|
|
205
|
+
kill $FRONTEND_PID 2>/dev/null || true
|
|
206
|
+
exit 0
|
|
207
|
+
}
|
|
208
|
+
trap cleanup INT TERM
|
|
209
|
+
|
|
210
|
+
wait
|
|
211
|
+
STARTEOF
|
|
212
|
+
chmod +x "$start_script"
|
|
213
|
+
ok "Start script: $start_script"
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
# ── Count skills (for verification) ─────────────────────────────────
|
|
217
|
+
count_skills() {
|
|
218
|
+
if [[ -d "$HERMES_REPO/skills" ]]; then
|
|
219
|
+
local md_count desc_count total
|
|
220
|
+
md_count=$(find "$HERMES_REPO/skills" -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
221
|
+
desc_count=$(find "$HERMES_REPO/skills" -name "DESCRIPTION.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
222
|
+
total=$((md_count + desc_count))
|
|
223
|
+
ok "Skills found: $total ($md_count SKILL.md + $desc_count DESCRIPTION.md)"
|
|
224
|
+
fi
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
228
|
+
# Main
|
|
229
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
230
|
+
banner "Hermes Dashboard Installer"
|
|
231
|
+
|
|
232
|
+
detect_os
|
|
233
|
+
find_python
|
|
234
|
+
find_hermes
|
|
235
|
+
find_evolution
|
|
236
|
+
count_skills
|
|
237
|
+
setup_python_deps
|
|
238
|
+
setup_node_deps
|
|
239
|
+
generate_env
|
|
240
|
+
create_start_script
|
|
241
|
+
|
|
242
|
+
banner "Installation complete!"
|
|
243
|
+
echo " Start with: ./start.sh"
|
|
244
|
+
echo " Dashboard: http://localhost:3001"
|
|
245
|
+
echo ""
|
package/next-env.d.ts
ADDED
package/next.config.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { NextConfig } from "next";
|
|
2
|
+
|
|
3
|
+
const nextConfig: NextConfig = {
|
|
4
|
+
// Standalone output — reduces node_modules in production
|
|
5
|
+
output: "standalone",
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// Proxy API calls to FastAPI backend (:8000)
|
|
9
|
+
async rewrites() {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
source: "/api/:path*",
|
|
13
|
+
destination: "http://localhost:8000/api/:path*",
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
// Bundle optimization: tree-shake unused deps
|
|
19
|
+
experimental: {
|
|
20
|
+
optimizePackageImports: [
|
|
21
|
+
"lucide-react",
|
|
22
|
+
"framer-motion",
|
|
23
|
+
"radix-ui",
|
|
24
|
+
"react-bits",
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Keep source maps manageable
|
|
29
|
+
productionBrowserSourceMaps: false,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default nextConfig;
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "genoma-evolution",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"bin": {
|
|
6
|
+
"genoma": "./bin/genoma.js"
|
|
7
|
+
},
|
|
8
|
+
"postinstall": "node scripts/postinstall.js",
|
|
9
|
+
"prepublishOnly": "pnpm build",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@chenglou/pretext": "^0.0.6",
|
|
12
|
+
"@tanstack/react-query": "^5.99.2",
|
|
13
|
+
"class-variance-authority": "^0.7.1",
|
|
14
|
+
"clsx": "^2.1.1",
|
|
15
|
+
"framer-motion": "^12.38.0",
|
|
16
|
+
"lucide-react": "^1.8.0",
|
|
17
|
+
"next": "^16.2.6",
|
|
18
|
+
"next-themes": "^0.4.6",
|
|
19
|
+
"radix-ui": "^1.4.3",
|
|
20
|
+
"react": "19.2.4",
|
|
21
|
+
"react-bits": "^1.0.5",
|
|
22
|
+
"react-dom": "19.2.4",
|
|
23
|
+
"shadcn": "^4.4.0",
|
|
24
|
+
"tailwind-merge": "^3.5.0",
|
|
25
|
+
"tw-animate-css": "^1.4.0",
|
|
26
|
+
"vis-data": "^8.0.3",
|
|
27
|
+
"vis-network": "^10.0.2"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@next/bundle-analyzer": "^16.2.4",
|
|
31
|
+
"@tailwindcss/postcss": "^4",
|
|
32
|
+
"@types/node": "^20",
|
|
33
|
+
"@types/react": "^19",
|
|
34
|
+
"@types/react-dom": "^19",
|
|
35
|
+
"eslint": "^9",
|
|
36
|
+
"eslint-config-next": "16.2.4",
|
|
37
|
+
"tailwindcss": "^4",
|
|
38
|
+
"typescript": "^5"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"dev": "next dev",
|
|
42
|
+
"build": "next build",
|
|
43
|
+
"start": "next start",
|
|
44
|
+
"lint": "eslint"
|
|
45
|
+
}
|
|
46
|
+
}
|
package/public/file.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/globe.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
package/public/next.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="es">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Genoma — Light Theme Preview</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
+
<script>
|
|
9
|
+
tailwind.config = {
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
colors: {
|
|
13
|
+
base: '#F4F7FA',
|
|
14
|
+
surface: '#FFFFFF',
|
|
15
|
+
'surface-hover': '#F0F4F8',
|
|
16
|
+
primary: {
|
|
17
|
+
50: '#ECFEFF', 100: '#CFFAFE', 200: '#A5F3FC',
|
|
18
|
+
300: '#67E8F9', 400: '#22D3EE', 500: '#06B6D4',
|
|
19
|
+
600: '#0891B2', 700: '#0E7490', 800: '#155E75', 900: '#164E63',
|
|
20
|
+
},
|
|
21
|
+
semantic: {
|
|
22
|
+
success: '#2DD4BF', warning: '#FBBF24',
|
|
23
|
+
error: '#E11D48', info: '#0EA5E9',
|
|
24
|
+
},
|
|
25
|
+
txt: {
|
|
26
|
+
primary: '#0F172A', secondary: '#475569',
|
|
27
|
+
tertiary: '#94A3B8', inverse: '#F8FAFC',
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
boxShadow: {
|
|
31
|
+
'evo-sm': '0 1px 2px 0 rgba(15, 23, 42, 0.05)',
|
|
32
|
+
'evo-md': '0 4px 6px -1px rgba(15, 23, 42, 0.08), 0 2px 4px -2px rgba(15, 23, 42, 0.04)',
|
|
33
|
+
'evo-lg': '0 10px 15px -3px rgba(15, 23, 42, 0.08), 0 4px 6px -4px rgba(15, 23, 42, 0.04)',
|
|
34
|
+
'evo-glow': '0 0 0 3px rgba(6, 182, 212, 0.15)',
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
41
|
+
<style>body { font-family: 'Inter', sans-serif; }</style>
|
|
42
|
+
</head>
|
|
43
|
+
<body class="bg-base min-h-screen">
|
|
44
|
+
<!-- Sidebar -->
|
|
45
|
+
<div class="fixed left-0 top-0 h-full w-16 bg-surface border-r border-gray-200 flex flex-col items-center py-6 gap-4 z-50">
|
|
46
|
+
<div class="w-10 h-10 rounded-xl bg-primary-600 flex items-center justify-center text-white font-bold text-lg">G</div>
|
|
47
|
+
<div class="w-8 h-8 rounded-lg bg-primary-50 text-primary-700 flex items-center justify-center text-sm">🏠</div>
|
|
48
|
+
<div class="w-8 h-8 rounded-lg bg-primary-600 text-white flex items-center justify-center text-sm shadow-evo-md">⚡</div>
|
|
49
|
+
<div class="w-8 h-8 rounded-lg hover:bg-surface-hover text-txt-secondary flex items-center justify-center text-sm transition-colors">📊</div>
|
|
50
|
+
<div class="w-8 h-8 rounded-lg hover:bg-surface-hover text-txt-secondary flex items-center justify-center text-sm transition-colors">🧠</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Main Content -->
|
|
54
|
+
<div class="ml-16 p-8">
|
|
55
|
+
<!-- Header -->
|
|
56
|
+
<div class="flex items-center justify-between mb-8">
|
|
57
|
+
<div class="flex items-center gap-3">
|
|
58
|
+
<div class="w-10 h-10 rounded-xl bg-primary-100 flex items-center justify-center">
|
|
59
|
+
<span class="text-xl">⚡</span>
|
|
60
|
+
</div>
|
|
61
|
+
<div>
|
|
62
|
+
<h1 class="text-2xl font-bold text-txt-primary">Skill Hub</h1>
|
|
63
|
+
<p class="text-sm text-txt-secondary">Tus skills locales, organizadas por proveedor y categoría</p>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="flex items-center gap-3">
|
|
67
|
+
<button class="px-4 py-2 bg-primary-600 text-white rounded-lg text-sm font-medium hover:bg-primary-700 transition-colors shadow-evo-md">
|
|
68
|
+
🎨 Aplicar Tema
|
|
69
|
+
</button>
|
|
70
|
+
<button class="px-4 py-2 bg-surface border border-gray-200 text-txt-secondary rounded-lg text-sm hover:bg-surface-hover transition-colors">
|
|
71
|
+
🔄 Refresh
|
|
72
|
+
</button>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<!-- Search + Filters -->
|
|
77
|
+
<div class="flex gap-4 mb-6">
|
|
78
|
+
<div class="relative flex-1">
|
|
79
|
+
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-txt-tertiary">🔍</span>
|
|
80
|
+
<input type="text" placeholder="Buscar skills por nombre, descripción o categoría..."
|
|
81
|
+
class="w-full pl-10 pr-4 py-3 bg-surface border border-gray-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-primary-500/30 focus:border-primary-400 text-txt-primary shadow-evo-sm"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
<select class="px-4 py-3 bg-surface border border-gray-200 rounded-xl text-txt-secondary focus:outline-none focus:ring-2 focus:ring-primary-500/30 shadow-evo-sm">
|
|
85
|
+
<option>Todos los providers</option>
|
|
86
|
+
<option>Agency</option>
|
|
87
|
+
<option>Hermes</option>
|
|
88
|
+
</select>
|
|
89
|
+
<select class="px-4 py-3 bg-surface border border-gray-200 rounded-xl text-txt-secondary focus:outline-none focus:ring-2 focus:ring-primary-500/30 shadow-evo-sm">
|
|
90
|
+
<option>Todas las categorías</option>
|
|
91
|
+
<option>software-development</option>
|
|
92
|
+
<option>devops</option>
|
|
93
|
+
</select>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<!-- Stats Cards -->
|
|
97
|
+
<div class="grid grid-cols-4 gap-4 mb-8">
|
|
98
|
+
<div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
|
|
99
|
+
<div class="text-2xl mb-2">🏢</div>
|
|
100
|
+
<div class="text-sm font-medium text-txt-secondary capitalize">Agency</div>
|
|
101
|
+
<div class="text-3xl font-bold text-primary-700 mt-1">1173/1185</div>
|
|
102
|
+
<div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
|
|
105
|
+
<div class="text-2xl mb-2">🪽</div>
|
|
106
|
+
<div class="text-sm font-medium text-txt-secondary capitalize">Hermes</div>
|
|
107
|
+
<div class="text-3xl font-bold text-primary-700 mt-1">127/127</div>
|
|
108
|
+
<div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
|
|
111
|
+
<div class="text-2xl mb-2">🤖</div>
|
|
112
|
+
<div class="text-sm font-medium text-txt-secondary capitalize">Claude-Code</div>
|
|
113
|
+
<div class="text-3xl font-bold text-primary-700 mt-1">99/99</div>
|
|
114
|
+
<div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="bg-surface rounded-2xl border border-gray-100 p-5 shadow-evo-md hover:shadow-evo-lg transition-shadow">
|
|
117
|
+
<div class="text-2xl mb-2">⚡</div>
|
|
118
|
+
<div class="text-sm font-medium text-txt-secondary capitalize">Kilocode</div>
|
|
119
|
+
<div class="text-3xl font-bold text-primary-700 mt-1">27/27</div>
|
|
120
|
+
<div class="text-xs text-txt-tertiary mt-1">habilitadas</div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<!-- Provider: Hermes (Expanded) -->
|
|
125
|
+
<div class="bg-surface rounded-2xl border border-gray-100 shadow-evo-md overflow-hidden mb-6">
|
|
126
|
+
<div class="flex items-center justify-between p-5 cursor-pointer hover:bg-surface-hover transition-colors">
|
|
127
|
+
<div class="flex items-center gap-3">
|
|
128
|
+
<span class="text-2xl">🪽</span>
|
|
129
|
+
<div>
|
|
130
|
+
<h2 class="text-lg font-bold text-txt-primary capitalize">Hermes</h2>
|
|
131
|
+
<p class="text-xs text-txt-tertiary">25 categorías</p>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="flex items-center gap-4">
|
|
135
|
+
<span class="text-sm text-txt-secondary">127/127 activas</span>
|
|
136
|
+
<span class="text-txt-tertiary">▼</span>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div class="px-5 pb-5 space-y-3">
|
|
141
|
+
<!-- Category: software-development -->
|
|
142
|
+
<div class="border border-gray-100 rounded-xl overflow-hidden">
|
|
143
|
+
<div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
|
|
144
|
+
<div class="flex items-center gap-2">
|
|
145
|
+
<span class="text-gray-400">📁</span>
|
|
146
|
+
<span class="text-sm font-semibold text-primary-700 bg-primary-50 px-2 py-0.5 rounded-lg border border-primary-200">
|
|
147
|
+
software-development
|
|
148
|
+
</span>
|
|
149
|
+
<span class="text-xs text-txt-tertiary">32 skills</span>
|
|
150
|
+
</div>
|
|
151
|
+
<span class="text-txt-tertiary text-sm">▼</span>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="p-3 pt-0 grid grid-cols-3 gap-2">
|
|
154
|
+
<div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
|
|
155
|
+
<div class="flex items-start justify-between">
|
|
156
|
+
<div>
|
|
157
|
+
<h3 class="font-medium text-txt-primary text-sm">python-cli-to-dashboard</h3>
|
|
158
|
+
<p class="text-xs text-txt-secondary mt-1">Wrap Python CLI in FastAPI</p>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
<div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
|
|
164
|
+
<div class="flex items-start justify-between">
|
|
165
|
+
<div>
|
|
166
|
+
<h3 class="font-medium text-txt-primary text-sm">tauri-linux-compat</h3>
|
|
167
|
+
<p class="text-xs text-txt-secondary mt-1">Port Tauri to Linux</p>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
<div class="p-3 bg-base rounded-lg border border-gray-100 hover:border-primary-300 hover:shadow-evo-sm transition-all">
|
|
173
|
+
<div class="flex items-start justify-between">
|
|
174
|
+
<div>
|
|
175
|
+
<h3 class="font-medium text-txt-primary text-sm">test-driven-dev</h3>
|
|
176
|
+
<p class="text-xs text-txt-secondary mt-1">TDD workflow</p>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="w-8 h-8 rounded-lg bg-semantic-success/10 text-semantic-success flex items-center justify-center text-xs">✓</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
<button class="w-full py-2 text-sm text-primary-600 hover:text-primary-700 hover:bg-primary-50 transition-colors border-t border-dashed border-gray-200">
|
|
183
|
+
Mostrar más (29 restantes)
|
|
184
|
+
</button>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<!-- Category: devops -->
|
|
188
|
+
<div class="border border-gray-100 rounded-xl overflow-hidden">
|
|
189
|
+
<div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
|
|
190
|
+
<div class="flex items-center gap-2">
|
|
191
|
+
<span class="text-gray-400">📁</span>
|
|
192
|
+
<span class="text-sm font-semibold text-semantic-info bg-sky-50 px-2 py-0.5 rounded-lg border border-sky-200">
|
|
193
|
+
devops
|
|
194
|
+
</span>
|
|
195
|
+
<span class="text-xs text-txt-tertiary">16 skills</span>
|
|
196
|
+
</div>
|
|
197
|
+
<span class="text-txt-tertiary text-sm">▼</span>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
<!-- Category: github -->
|
|
202
|
+
<div class="border border-gray-100 rounded-xl overflow-hidden">
|
|
203
|
+
<div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
|
|
204
|
+
<div class="flex items-center gap-2">
|
|
205
|
+
<span class="text-gray-400">📁</span>
|
|
206
|
+
<span class="text-sm font-semibold text-orange-600 bg-orange-50 px-2 py-0.5 rounded-lg border border-orange-200">
|
|
207
|
+
github
|
|
208
|
+
</span>
|
|
209
|
+
<span class="text-xs text-txt-tertiary">6 skills</span>
|
|
210
|
+
</div>
|
|
211
|
+
<span class="text-txt-tertiary text-sm">▼</span>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<!-- Category: creative -->
|
|
216
|
+
<div class="border border-gray-100 rounded-xl overflow-hidden">
|
|
217
|
+
<div class="flex items-center justify-between p-3 hover:bg-base transition-colors cursor-pointer">
|
|
218
|
+
<div class="flex items-center gap-2">
|
|
219
|
+
<span class="text-gray-400">📁</span>
|
|
220
|
+
<span class="text-sm font-semibold text-purple-600 bg-purple-50 px-2 py-0.5 rounded-lg border border-purple-200">
|
|
221
|
+
creative
|
|
222
|
+
</span>
|
|
223
|
+
<span class="text-xs text-txt-tertiary">13 skills</span>
|
|
224
|
+
</div>
|
|
225
|
+
<span class="text-txt-tertiary text-sm">▼</span>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
|
|
231
|
+
<!-- Provider: Claude-Code (Collapsed) -->
|
|
232
|
+
<div class="bg-surface rounded-2xl border border-gray-100 shadow-evo-sm overflow-hidden mb-6">
|
|
233
|
+
<div class="flex items-center justify-between p-5 cursor-pointer hover:bg-surface-hover transition-colors">
|
|
234
|
+
<div class="flex items-center gap-3">
|
|
235
|
+
<span class="text-2xl">🤖</span>
|
|
236
|
+
<div>
|
|
237
|
+
<h2 class="text-lg font-bold text-txt-primary capitalize">Claude-Code</h2>
|
|
238
|
+
<p class="text-xs text-txt-tertiary">1 categoría</p>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="flex items-center gap-4">
|
|
242
|
+
<span class="text-sm text-txt-secondary">99/99 activas</span>
|
|
243
|
+
<span class="text-txt-tertiary">▶</span>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
<!-- Floating Theme Toggle -->
|
|
250
|
+
<div class="fixed bottom-6 right-6 flex gap-2">
|
|
251
|
+
<div class="bg-surface border border-gray-200 rounded-xl p-1 shadow-evo-lg flex gap-1">
|
|
252
|
+
<button class="px-3 py-1.5 rounded-lg bg-primary-600 text-white text-sm font-medium">☀️ Light</button>
|
|
253
|
+
<button class="px-3 py-1.5 rounded-lg hover:bg-gray-100 text-txt-secondary text-sm transition-colors">🌙 Dark</button>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
</body>
|
|
257
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|