Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/workflows/docs-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,22 @@ jobs:
run: python -m unittest discover -s tests -v
- name: Check relative Markdown links
run: python scripts/check_docs.py
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
cache-dependency-path: dashboard/package-lock.json
- name: Install dashboard dependencies
run: npm ci --prefix dashboard
- name: Typecheck dashboard
run: npm --prefix dashboard run typecheck
- name: Lint dashboard
run: npm --prefix dashboard run lint
- name: Test dashboard
run: npm --prefix dashboard test
- name: Build dashboard
run: npm --prefix dashboard run build
# ORIGINAL (preserved, not deleted — disabled by comment):
# - name: Validate Markdown documents
# run: |
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,5 @@ coverage/
# Local runtime data
*.log
data/
!dashboard/src/data/
!dashboard/src/data/**
9 changes: 5 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Mission and current scope

OpenCluster is planned as a self-hosted control plane for cluster nodes, infrastructure, AI agents, and distributed workloads: **One dashboard. Every node. Total control.** The repository is currently in Phase 0. The dashboard, API, node agent, and deployment stack are not implemented. Do not build product features until a maintainer selects an implementation milestone.
OpenCluster is a cluster operations platform: **One dashboard. Every node. Total control.** Phase 0 is complete. Phase 1 builds the permanent standalone React dashboard against a validated, persistent local data provider; seeded hardware telemetry remains clearly identified as sample data until backend services exist. Do not add a backend, authentication service, node agent, remote command execution, live software installation, or cloud dependency in Phase 1.

## Before changing anything

Expand All @@ -14,7 +14,8 @@ OpenCluster is planned as a self-hosted control plane for cluster nodes, infrast

## Repository organization

- `frontend/` — planned React and TypeScript dashboard.
- `frontend/` — existing Phase 0 placeholder; do not implement the Phase 1 dashboard here.
- `dashboard/` — standalone production frontend in Phase 1, using IndexedDB for structured local records and localStorage for non-sensitive preferences; backend integration remains future work.
- `backend/` — planned FastAPI control plane.
- `node-agent/` — planned lightweight Linux node service.
- `infrastructure/` — deployment and operations assets.
Expand All @@ -25,7 +26,7 @@ OpenCluster is planned as a self-hosted control plane for cluster nodes, infrast

## Architecture and security rules

- Follow `docs/ARCHITECTURE.md`, `docs/SECURITY_ARCHITECTURE.md`, `docs/API_DESIGN.md`, and `docs/DATABASE_DESIGN.md`. They describe proposals until implementation exists.
- Follow `docs/ARCHITECTURE.md`, `docs/SECURITY_ARCHITECTURE.md`, `docs/API_DESIGN.md`, and `docs/DATABASE_DESIGN.md`. They describe backend proposals until those services exist. The Phase 1 dashboard stores validated structured records in IndexedDB, non-sensitive preferences in localStorage, and clearly labeled sample telemetry in the local provider.
- Keep module boundaries explicit. Frontend code must not access the database directly; the node agent must not trust control-plane input without authentication and authorization.
- Default to least privilege. Privileged node actions require authenticated identity, authorization, audit records, bounded operations, and explicit confirmation where destructive.
- Never expose unrestricted remote shells or arbitrary cross-node command execution. Do not add secrets to code, logs, examples, or fixtures.
Expand All @@ -51,7 +52,7 @@ Reviewers should check correctness, regressions, architecture and interface cons
## Tests and validation

- Run focused checks for changed behavior, then relevant broader checks when they exist. Do not claim commands passed unless they were run.
- During Phase 0, CI validates documentation links and repository configuration only. Application build workflows must wait until application manifests and build tooling exist.
- CI validates documentation and the dashboard's checked-in typecheck, lint, test, and build scripts. Add workflows only for artifacts and tools that exist.
- Add regression tests for non-trivial behavior, failure paths, and security-sensitive logic. Keep performance benchmarks reproducible and do not invent targets or results.

## Documentation requirements
Expand Down
68 changes: 34 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,57 +3,57 @@
**One dashboard. Every node. Total control.**

[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)
[![Status: Phase 0](https://img.shields.io/badge/status-Phase%200%20%7C%20planning-lightgrey)](docs/ROADMAP.md)
[![Status: Phase 1](https://img.shields.io/badge/status-Phase%201%20%7C%20dashboard%20development-blue)](docs/ROADMAP.md)

OpenCluster is a planned free, open-source, self-hosted platform for monitoring and managing computing clusters, infrastructure nodes, AI agents, and distributed workloads through a unified web dashboard. It is maintained by **ZYRIX DEVS**.
OpenCluster is an open-source project by **ZYRIX DEVS**. Its long-term goal is a self-hosted platform for understanding and managing clusters, infrastructure nodes, AI agents, and distributed workloads.

> **Project status:** repository foundation and design phase. The dashboard, backend, node agent, and deployment stack are not implemented. Feature descriptions below are plans, not available functionality.
## Current project status

## Planned capabilities
Phase 0 repository foundation is complete. Phase 1 builds the permanent standalone dashboard in `dashboard/`, with validated browser-local records and a replaceable data-provider boundary. The application is still under development; the required pages and interactions are not claimed as complete until implemented and verified.

- Cluster and node health, resource telemetry, alerts, logs, and history.
- Secure node enrollment, labels, groups, and permission-controlled operations.
- Distributed task scheduling and recovery policies.
- Extensible AI agent adapters, including Codex and Hermes where supported.
- GitHub and developer-operations visibility with auditable administrative controls.
The Phase 1 dashboard is a **production frontend operating in local mode**. It supports persistent local cluster, node, graph, and workflow records. It does not connect to physical clusters, execute tasks, install software, or provide live telemetry until backend services and an authorized node agent exist. It does not require cloud services. Seeded hardware metrics are visibly identified as sample data.

The initial release is expected to focus on secure node enrollment, read-only cluster and node visibility, and a small operator-managed deployment. Scope remains subject to maintainer review; see the [PRD](docs/PRD.md) and [roadmap](docs/ROADMAP.md).
## Dashboard scope

## Proposed architecture
The dashboard includes Home, Mission Control, Clusters, Nodes, Agents, Automation, AI Software, Tasks, Monitoring, Activity, and Settings views. Cluster/node management and canvas editing operate on saved local records; hardware metrics are sample data, and installations or workload execution remain unavailable. The implementation requirements are in the [dashboard PRD](docs/DASHBOARD_PRD.md), [UI/UX specification](docs/DASHBOARD_UI_UX_SPEC.md), and [architecture and component map](docs/DASHBOARD_ARCHITECTURE_AND_COMPONENT_MAP.md).

The current proposal uses a React, TypeScript, and Vite frontend; a Python/FastAPI control plane; PostgreSQL for durable state; and a lightweight Linux node agent. Docker Compose is the planned local deployment path. These choices are not implemented or locked; trade-offs are recorded in [architecture](docs/ARCHITECTURE.md) and [technology stack](docs/TECH_STACK.md).
## Future direction

```text
frontend/ dashboard (planned)
backend/ API and control plane (planned)
node-agent/ Linux metrics and secure communication (planned)
infrastructure/ local and future deployment assets (planned)
docs/ requirements and design decisions
```
Backend services, secure node enrollment, real telemetry, authentication and authorization, audit logging, AI-agent integrations, and workload orchestration belong to later phases. They are not current capabilities. The [roadmap](docs/ROADMAP.md) and [architecture proposal](docs/ARCHITECTURE.md) distinguish future designs from implemented software.

## Development

## Development status
The dashboard requires Node.js 20.19+ or 22.12+ and npm (Vite's supported Node versions). From the repository root, install dependencies and start the local development server:

Phase 0 work is limited to repository structure, documentation, Codex guidance, and docs validation. There are no application prerequisites or runnable app commands yet.
```sh
npm --prefix dashboard install
npm --prefix dashboard run dev
```

To work on the repository foundation:
Vite prints the local URL when the server starts. The dashboard uses persistent browser-local records and sample hardware telemetry; no backend or cloud service is needed. Run the available checks and production build with:

```sh
npm --prefix dashboard run typecheck
npm --prefix dashboard run lint
npm --prefix dashboard test
npm --prefix dashboard run build
```

1. Clone this repository and create a topic branch.
2. Read [AGENTS.md](AGENTS.md), [development guide](docs/DEVELOPMENT.md), and the relevant design documents.
3. Edit documentation or repository configuration and run the checks documented in `docs/DEVELOPMENT.md`.
4. Open a pull request against `main` using the [contribution guide](CONTRIBUTING.md).
For repository contribution setup, read [AGENTS.md](AGENTS.md), the [development guide](docs/DEVELOPMENT.md), and [CONTRIBUTING.md](CONTRIBUTING.md). Review the [testing strategy](docs/TESTING_STRATEGY.md) for current repository checks. Open a pull request against `main` following the [GitHub workflow](docs/GITHUB_WORKFLOW.md).

## Documentation

- [Product requirements](docs/PRD.md) · [Architecture](docs/ARCHITECTURE.md) · [Roadmap](docs/ROADMAP.md)
- [Technology stack](docs/TECH_STACK.md) · [API design](docs/API_DESIGN.md) · [Database design](docs/DATABASE_DESIGN.md)
- [Node protocol](docs/NODE_PROTOCOL.md) · [Security architecture](docs/SECURITY_ARCHITECTURE.md)
- [Design system](docs/DESIGN_SYSTEM.md) · [Agent orchestration](docs/AGENT_ORCHESTRATION.md)
- [Development](docs/DEVELOPMENT.md) · [Deployment](docs/DEPLOYMENT.md) · [Testing strategy](docs/TESTING_STRATEGY.md)
- [GitHub workflow](docs/GITHUB_WORKFLOW.md) · [Decisions](docs/DECISIONS.md)
- [Product requirements](docs/PRD.md) · [Roadmap](docs/ROADMAP.md) · [Architecture proposal](docs/ARCHITECTURE.md)
- [Technology stack](docs/TECH_STACK.md) · [Design system](docs/DESIGN_SYSTEM.md)
- [Dashboard motion and performance](docs/DASHBOARD_PERFORMANCE.md)
- [Dashboard product requirements](docs/DASHBOARD_PRD.md) · [UI/UX specification](docs/DASHBOARD_UI_UX_SPEC.md) · [Architecture and component map](docs/DASHBOARD_ARCHITECTURE_AND_COMPONENT_MAP.md)
- [API design proposal](docs/API_DESIGN.md) · [Database design proposal](docs/DATABASE_DESIGN.md) · [Node protocol proposal](docs/NODE_PROTOCOL.md)
- [Security architecture proposal](docs/SECURITY_ARCHITECTURE.md) · [Development](docs/DEVELOPMENT.md) · [Testing strategy](docs/TESTING_STRATEGY.md)
- [Deployment proposal](docs/DEPLOYMENT.md) · [GitHub workflow](docs/GITHUB_WORKFLOW.md) · [Decisions](docs/DECISIONS.md)

## Contributing
## Contributing and security

Contributions are welcome after reading [CONTRIBUTING.md](CONTRIBUTING.md). Please open an issue for substantial proposals before implementation. Security issues should follow [SECURITY.md](SECURITY.md), not a public issue.
Contributions are welcome under [CONTRIBUTING.md](CONTRIBUTING.md). Please report security concerns through [SECURITY.md](SECURITY.md), not a public issue. The dashboard does not yet implement backend authentication, authorization, node enrollment, or remote-action protections because those services are not in Phase 1.

## License and attribution

Expand Down
29 changes: 29 additions & 0 deletions dashboard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# OpenCluster Dashboard

The dashboard is OpenCluster's permanent standalone frontend, currently operating in local mode. Cluster, node, workflow, and canvas records persist in IndexedDB; lightweight preferences use localStorage. Seeded telemetry is sample data. The app does not connect to physical nodes, dispatch tasks, install software, or require a cloud service while backend services are unavailable.

## Run locally

From the repository root:

```sh
npm --prefix dashboard install
npm --prefix dashboard run dev
```

Vite prints the local development URL. Node.js 20.19+ or 22.12+ is required.

## Checks

```sh
npm --prefix dashboard run typecheck
npm --prefix dashboard run lint
npm --prefix dashboard test
npm --prefix dashboard run build
```

The local provider stores clusters, nodes, canvas layouts, workflows, and non-sensitive preferences in this browser. Structured records use IndexedDB. Do not enter credentials or secrets.

## Views

The Home page summarizes local clusters, nodes, resource use, alerts, activity, and agent records. Mission Control offers topology, orbit, and an optional 3D globe view. Agents and Automation provide editable React Flow canvases with saved local state. Software configuration is saved locally; installation and workflow execution remain unavailable until secure backend services exist. Read the [dashboard PRD](../docs/DASHBOARD_PRD.md), [UI/UX specification](../docs/DASHBOARD_UI_UX_SPEC.md), and [architecture and component map](../docs/DASHBOARD_ARCHITECTURE_AND_COMPONENT_MAP.md) for requirements. See [the dashboard performance notes](../docs/DASHBOARD_PERFORMANCE.md) for animation, reduced-motion, and rendering behavior.
17 changes: 17 additions & 0 deletions dashboard/biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "https://biomejs.dev/schemas/2.6.2/schema.json",
"files": { "ignoreUnknown": true },
"formatter": { "enabled": true, "indentStyle": "space", "indentWidth": 2 },
"linter": {
"enabled": true,
"rules": {
"preset": "recommended",
"a11y": { "preset": "recommended" },
"correctness": { "preset": "recommended" },
"style": { "useImportType": "error" }
}
},
"javascript": {
"formatter": { "quoteStyle": "double", "semicolons": "always" }
}
}
20 changes: 20 additions & 0 deletions dashboard/components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
}
}
17 changes: 17 additions & 0 deletions dashboard/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#080b12" />
<meta
name="description"
content="OpenCluster demo dashboard for cluster visibility and operations."
/>
<title>OpenCluster — Mission Control</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
Loading
Loading