This commit implements the Unified Resource Architecture for AI-first
infrastructure management. Key features:
Phase 1 - Backend Unification:
- New unified Resource type with 9 resource types, 7 platforms, 7 statuses
- Resource store with identity-based deduplication (hostname, machineID, IP)
- 8 converter functions (FromNode, FromVM, FromContainer, etc.)
- REST API endpoints: /api/resources, /api/resources/stats, /api/resources/{id}
- 28 comprehensive unit tests
Phase 2 - AI Context Enhancement:
- Unified context builder for AI system prompts
- Cross-platform query methods: GetTopByCPU, GetTopByMemory, GetTopByDisk
- Resource correlation: GetRelated (parent, children, siblings, cluster)
- Infrastructure summary: GetResourceSummary with health status counts
- AI context now includes top consumers and infrastructure overview
Phase 3 - Agent Preference & Hybrid Mode:
- Polling optimization methods in resource store
- ResourceStoreInterface added to Monitor
- SetResourceStore() and shouldSkipNodeMetrics() helper methods
- Store automatically wired into Monitor via Router.SetMonitor()
- Foundation ready for reduced API polling when agents are active
Files added:
- internal/resources/resource.go - Core Resource type
- internal/resources/store.go - Store with deduplication
- internal/resources/converters.go - Type converters
- internal/resources/platform_data.go - Platform-specific data
- internal/resources/store_test.go - 28 tests
- internal/resources/converters_test.go - Converter tests
- internal/api/resource_handlers.go - REST API handlers
- internal/ai/resource_context.go - AI context builder
- .gemini/docs/unified-resource-architecture.md - Architecture docs
All tests pass.
|
||
|---|---|---|
| .. | ||
| ai_handlers.go | ||
| alerts.go | ||
| alerts_test.go | ||
| auth.go | ||
| auth_helpers_test.go | ||
| auth_scope_test.go | ||
| bootstrap_token.go | ||
| bootstrap_token_test.go | ||
| config_handlers.go | ||
| config_handlers_auto_reg_test.go | ||
| config_handlers_auto_register_test.go | ||
| config_handlers_cluster_test.go | ||
| config_handlers_host_test.go | ||
| config_handlers_pve_user_test.go | ||
| config_handlers_sanitize_test.go | ||
| config_handlers_setup_script_test.go | ||
| config_handlers_temperature_test.go | ||
| config_handlers_transport_guard_test.go | ||
| csrf_store.go | ||
| csrf_store_test.go | ||
| demo_middleware.go | ||
| demo_middleware_test.go | ||
| diagnostics.go | ||
| diagnostics_test.go | ||
| DO_NOT_EDIT_FRONTEND_HERE.md | ||
| docker_agents.go | ||
| docker_agents_test.go | ||
| docker_metadata.go | ||
| export_test.go | ||
| frontend_embed.go | ||
| guest_metadata.go | ||
| host_agents.go | ||
| host_agents_test.go | ||
| http_metrics.go | ||
| http_metrics_test.go | ||
| middleware.go | ||
| middleware_test.go | ||
| notification_queue.go | ||
| notifications.go | ||
| notifications_test.go | ||
| oidc_handlers.go | ||
| oidc_handlers_test.go | ||
| oidc_service.go | ||
| oidc_service_test.go | ||
| rate_limit_config.go | ||
| rate_limit_config_test.go | ||
| ratelimit.go | ||
| ratelimit_test.go | ||
| README.md | ||
| recovery_tokens.go | ||
| recovery_tokens_test.go | ||
| resource_handlers.go | ||
| router.go | ||
| router_arch_test.go | ||
| router_download_test.go | ||
| router_integration_test.go | ||
| router_test.go | ||
| security.go | ||
| security_oidc.go | ||
| security_setup_fix.go | ||
| security_setup_fix_test.go | ||
| security_test.go | ||
| security_tokens.go | ||
| security_tokens_test.go | ||
| session_store.go | ||
| session_store_test.go | ||
| system_settings.go | ||
| system_settings_temperature_test.go | ||
| system_settings_utils_test.go | ||
| system_settings_validate_test.go | ||
| temperature_proxy.go | ||
| temperature_proxy_command_test.go | ||
| temperature_proxy_test.go | ||
| types.go | ||
| unified_agent.go | ||
| unified_agent_test.go | ||
| updates.go | ||
| updates_test.go | ||
Internal API Package
This directory contains the API server implementation for Pulse.
Important Note About frontend-modern/
The frontend-modern/ subdirectory that appears here is:
- AUTO-GENERATED during builds
- NOT the source code - just a build artifact
- IN .gitignore - never committed
- REQUIRED BY GO - The embed directive needs it here
Frontend Development Location
👉 Edit frontend files at: /opt/pulse/frontend-modern/src/
Why This Structure?
Go's //go:embed directive has limitations:
- Cannot use
../paths to access parent directories - Cannot follow symbolic links
- Must embed files within the Go module
This is a known Go limitation and our structure works around it.