Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
2bde56e
refactor: move agent and dashboard into lynx/ subfolder
Jaro-c May 12, 2026
6a60093
chore: add GitHub Sponsors funding button
Jaro-c May 12, 2026
883b7a3
chore: add .gitignore, exclude CLAUDE.md
Jaro-c May 12, 2026
36dadab
chore: regenerate node_modules folder to resolve dependency inconsist…
Jaro-c May 12, 2026
916d2fe
chore: add missing node_modules dependencies and source files
Jaro-c May 12, 2026
396d263
feat: initialize Next.js dashboard project with Biome and Tailwind CS…
Jaro-c May 12, 2026
ee4885d
feat: initialize dashboard UI with Next.js, Biome, Tailwind CSS, and …
Jaro-c May 12, 2026
178232b
feat: initialize Next.js dashboard UI project with Tailwind CSS, Biom…
Jaro-c May 12, 2026
4c32cfd
feat: initialize dashboard UI project with Next.js, Tailwind CSS, and…
Jaro-c May 12, 2026
c735362
feat: initialize Next.js dashboard project with Biome configuration a…
Jaro-c May 12, 2026
5951c5d
feat: initialize dashboard UI with Next.js, Tailwind CSS, and shadcn/…
Jaro-c May 12, 2026
91fd7c9
feat: initialize Next.js dashboard UI project with shadcn/ui and Tail…
Jaro-c May 12, 2026
b594fae
feat: initialize Next.js dashboard project with Shadcn UI and project…
Jaro-c May 12, 2026
af76205
feat: initialize Next.js dashboard UI with shadcn/ui components
Jaro-c May 12, 2026
4789b8b
feat: initialize Next.js dashboard project with Shadcn UI components …
Jaro-c May 12, 2026
c835145
feat: initialize dashboard UI with Next.js, Tailwind CSS, shadcn/ui c…
Jaro-c May 12, 2026
3649dba
feat: initialize dashboard UI with Tailwind CSS, Next.js configuratio…
Jaro-c May 12, 2026
2b7fb7b
feat: scaffold new Next.js dashboard UI with component library and co…
Jaro-c May 12, 2026
e642dbc
feat: initialize dashboard UI with Next.js 16, shadcn/ui components, …
Jaro-c May 12, 2026
346d380
feat: scaffold Next.js dashboard UI and implement system management u…
Jaro-c May 13, 2026
ee9b085
feat: implement Next.js dashboard scaffolding and automate system mig…
Jaro-c May 13, 2026
71fb136
feat: initialize Next.js dashboard UI with Tailwind CSS and Shadcn, a…
Jaro-c May 13, 2026
07c3880
feat: initialize dashboard Next.js project and harden Podman storage,…
Jaro-c May 13, 2026
e722b78
feat: initialize Next.js dashboard UI and add installation scripts fo…
Jaro-c May 13, 2026
9232e36
feat: initialize dashboard UI project structure and agent installatio…
Jaro-c May 13, 2026
a1c49db
feat: scaffold Lynx dashboard UI with shadcn/ui and implement agent i…
Jaro-c May 13, 2026
7eae606
feat: initialize Lynx dashboard UI and deployment scripts
Jaro-c May 13, 2026
fea111a
feat: initialize dashboard project structure, UI components, and auto…
Jaro-c May 13, 2026
08f5779
feat: initialize Next.js dashboard UI project and add installation sc…
Jaro-c May 13, 2026
45ae3f4
feat: initialize dashboard UI and add agent/infrastructure installati…
Jaro-c May 13, 2026
e81009c
feat: initialize Next.js dashboard project with Shadcn UI and add age…
Jaro-c May 13, 2026
ec10310
feat: initialize dashboard UI framework and add agent/dashboard insta…
Jaro-c May 13, 2026
ee24928
feat: initialize dashboard UI project with Next.js, Tailwind CSS, and…
Jaro-c May 13, 2026
2941ba9
feat: initialize dashboard UI project structure with Tailwind CSS, co…
Jaro-c May 13, 2026
651a4c6
feat: initialize Next.js dashboard UI project and update lint-shell w…
Jaro-c May 13, 2026
e41e367
feat: initialize dashboard UI with Next.js, Tailwind CSS, shadcn/ui c…
Jaro-c May 13, 2026
eb78e2f
feat: initialize Next.js dashboard UI project with Tailwind CSS and S…
Jaro-c May 13, 2026
4939cb5
feat: initialize dashboard UI with Next.js, Tailwind CSS, and shadcn …
Jaro-c May 13, 2026
19c47a3
feat: initialize dashboard UI with standard components and app structure
Jaro-c May 13, 2026
8958c0b
feat: initialize dashboard UI with comprehensive component library an…
Jaro-c May 13, 2026
ecb3724
feat: initialize dashboard UI with Next.js template and standardized …
Jaro-c May 13, 2026
c362234
feat: initialize Next.js dashboard UI project with Tailwind CSS and b…
Jaro-c May 13, 2026
b466c1a
feat: integrate shadcn/ui and configure agentic development skills fo…
Jaro-c May 13, 2026
5e33c26
feat: scaffold shadcn/ui integration with comprehensive agent rules a…
Jaro-c May 13, 2026
3f901b2
feat: implement dashboard backend, container orchestration service, a…
Jaro-c May 13, 2026
3325d88
feat: implement dashboard server with Docker support and refactor com…
Jaro-c May 13, 2026
e873b5d
feat: implement core compose utilities, file parsing tests, and dashb…
Jaro-c May 13, 2026
c8c1e0f
feat: initialize monorepo structure with dashboard server, agent, and…
Jaro-c May 13, 2026
6d8bbdd
chore: initialize project configuration in Cargo.toml
Jaro-c May 14, 2026
203343c
docs: add styling guidelines and agent documentation to UI dashboard
Jaro-c May 14, 2026
0c4b3b2
feat: initialize dashboard server and agent modules while expanding D…
Jaro-c May 14, 2026
65facdd
feat: implement file-watch engine with develop support and initialize…
Jaro-c May 14, 2026
16986bf
feat: initialize lynx project structure including dashboard UI, backe…
Jaro-c May 14, 2026
0eb7344
feat: implement dashboard scaffolding and refactor compose type modules
Jaro-c May 14, 2026
b8a09de
feat: implement dashboard project scaffolding with containerized serv…
Jaro-c May 15, 2026
934b6be
feat: scaffold monorepo structure with Rust backend and Next.js dashb…
Jaro-c May 15, 2026
87a545e
feat: implement file-watch engine, add workspace configuration, and s…
Jaro-c May 15, 2026
c1d868e
feat: scaffold dashboard service, agent module, and UI architecture w…
Jaro-c May 15, 2026
0216c51
chore(compose): bump version to 0.2.0
Jaro-c May 15, 2026
98d3816
feat: initialize Lynx dashboard and agent infrastructure with base co…
Jaro-c May 15, 2026
6319b14
feat: scaffold dashboard infrastructure and improve compose parser se…
Jaro-c May 15, 2026
b4772a0
feat: initialize dashboard frontend and server with containerization …
Jaro-c May 15, 2026
7f83d10
feat: scaffold dashboard web UI and server, add workspace configurati…
Jaro-c May 15, 2026
b2e9b85
feat(dashboard): implement auth backend + full UI with i18n
Jaro-c May 16, 2026
bc0208b
feat(agent): implement agent core with auth, nftables, Podman, metric…
Jaro-c May 16, 2026
01a68bb
feat(agent): add agent install script with WireGuard, systemd, Podman…
Jaro-c May 16, 2026
a10ec65
feat(ui): add /app/agents page with Server Component, skeleton loadin…
Jaro-c May 16, 2026
8e8ec6e
feat: implement audit log sync (agent → dashboard) with per-agent syn…
Jaro-c May 16, 2026
d3b6636
feat: add organizations backend + UI
Jaro-c May 16, 2026
6742eaa
feat(agent): add nftables divergence detection with dashboard alerting
Jaro-c May 16, 2026
847a249
feat(dashboard/ui): add settings page with session management and key…
Jaro-c May 16, 2026
d230c0d
feat(agent/dashboard): container management commands + auto-update sy…
Jaro-c May 16, 2026
d85498a
feat(dashboard): agent registration dialog, overview stats, events feed
Jaro-c May 16, 2026
fe95617
feat(dashboard/agent): WireGuard PSK rotation
Jaro-c May 16, 2026
e30fa4c
feat(ui): org creation dialog, i18n keys for org/agent registration
Jaro-c May 16, 2026
aba691d
feat(dashboard/agent): internal PKI — CA issues Ed25519 certs to agents
Jaro-c May 16, 2026
e251e92
feat(dashboard): white-label branding from PostgreSQL
Jaro-c May 16, 2026
f63b402
feat(orgs): member management — invite, list, remove
Jaro-c May 16, 2026
ccfe122
feat(orgs): project listing and vertical scaling UI
Jaro-c May 16, 2026
6535752
feat(nftables): divergence detection and restore/accept flow
Jaro-c May 16, 2026
310f38c
feat(orgs): add project creation
Jaro-c May 16, 2026
84f647d
feat(containers): deploy and lifecycle management UI
Jaro-c May 16, 2026
f9a6b5d
feat(ui): persistent footer and dynamic login branding
Jaro-c May 16, 2026
89d12e2
feat(settings): update check and trigger UI
Jaro-c May 16, 2026
c32e3c4
feat(scale): implement cross-agent horizontal scaling via WireGuard d…
Jaro-c May 16, 2026
807ea83
feat(audit): add per-agent audit log viewer
Jaro-c May 16, 2026
00afafe
feat(domain): add custom domain configuration with Let's Encrypt and …
Jaro-c May 16, 2026
0abfb1d
feat(migration): implement dashboard-to-dashboard migration flow
Jaro-c May 16, 2026
437afd3
feat(auth): add password change and profile endpoints
Jaro-c May 16, 2026
148e402
feat(settings): add key rotation history to security section
Jaro-c May 16, 2026
c75925e
feat(pki): push cert.update to online agents on rotation; add CI work…
Jaro-c May 16, 2026
a9eba3c
fix(dashboard): use base64url unpadded encoding for signed commands
Jaro-c May 16, 2026
76b9339
feat(dashboard): add background heartbeat scheduler
Jaro-c May 16, 2026
23b8cee
fix(dashboard): shorten WireGuard interface name to wg-lynx-dash
Jaro-c May 16, 2026
4183614
fix(dashboard): correct Redis key pattern in JWT session flush
Jaro-c May 16, 2026
e2d5939
feat(dashboard): add ip_pool allocator, logs/reset-admin-password CLI…
Jaro-c May 18, 2026
e8e3b17
feat(dashboard): security alerts, headers, startup health guard, inte…
Jaro-c May 18, 2026
d7f560e
feat(agent): command rate limiter (100/min) with rejected_rate_limit …
Jaro-c May 18, 2026
db6d985
feat(domain): route nginx/certbot/nftables ops through local agent
Jaro-c May 18, 2026
cfff764
refactor(agent): split handlers.rs into handlers/ module
Jaro-c May 18, 2026
abc4f7e
feat: add missing files from prior implementation sessions
Jaro-c May 18, 2026
08d6643
feat: implement X.509 mTLS, heartbeat scheduler, PKI, and frontend im…
Jaro-c May 18, 2026
c94b0cd
feat(scheduler): full 90-day rotation — JWT flush + WireGuard PSKs + …
Jaro-c May 18, 2026
6419ada
feat(domain): custom cert upload with PEM validation (Cloudflare + ow…
Jaro-c May 18, 2026
bc6ae01
fix(domain): set_hsts uses correct cert path for cloudflare/custom ce…
Jaro-c May 18, 2026
86066c4
feat(ws): add persistent WebSocket channel between agent and dashboard
Jaro-c May 18, 2026
dc0edb0
feat(ws): skip HTTP heartbeat poll for WS-connected agents
Jaro-c May 18, 2026
6fed478
feat(agent+dashboard): nftables 3-chain architecture, real-time metri…
Jaro-c May 18, 2026
fb89e2c
feat(events): real-time agent events pipeline to browser WS
Jaro-c May 18, 2026
3945337
feat(dashboard): add admin user and role management
Jaro-c May 18, 2026
1bfd75a
feat(dashboard): add theme system and user preferences
Jaro-c May 18, 2026
6aeb9b1
feat(dashboard): add locale switcher and i18n sign-out in sidebar
Jaro-c May 18, 2026
810d494
feat(dashboard): single-session mode and theme-on-login
Jaro-c May 18, 2026
25b84f6
test(dashboard): add integration test suite for auth, admin, rotation…
Jaro-c May 18, 2026
b08992b
test(dashboard/server): add unit tests for crypto, validation, and au…
Jaro-c May 18, 2026
d329fb8
test(dashboard/ui): add Vitest unit tests and Playwright E2E setup
Jaro-c May 18, 2026
363a32a
ci: add CI workflows for agent, dashboard-server, and dashboard-ui
Jaro-c May 18, 2026
7f6c003
refactor(auth): split handlers.rs into handlers/ submodule; add WS or…
Jaro-c May 18, 2026
fc43e13
fix(security): audit log hash chain verification + offline agent pend…
Jaro-c May 18, 2026
8a8896f
fix(ui): cursor-pointer + disabled:cursor-not-allowed on Button; robo…
Jaro-c May 18, 2026
ae54be3
feat(agent): split metrics by frequency; fix WireGuard config path
Jaro-c May 18, 2026
56c640a
feat(dashboard): close remaining CLAUDE.md gaps
Jaro-c May 18, 2026
1760133
fix(lint): resolve all clippy -D warnings + fmt in agent and server
Jaro-c May 18, 2026
78ddf8e
test(dashboard): fix all 17 Playwright E2E tests
Jaro-c May 18, 2026
deb2287
fix(dashboard): install rustls ring provider at startup
Jaro-c May 18, 2026
7bcdd7b
ci: add toolchain: stable to all dtolnay/rust-toolchain usages
Jaro-c May 18, 2026
752c0d7
fix(ci): remove sqlx-mysql CVE and fix compose formatting
Jaro-c May 18, 2026
bc25be8
fix(ci): ignore RUSTSEC-2023-0071 in cargo audit
Jaro-c May 18, 2026
9fcf002
fix(security): validate IDs as UUIDs before URL interpolation in Serv…
Jaro-c May 18, 2026
e7dd4ed
ci(dashboard-ui): pin all action SHAs; quote CI env var as string
Jaro-c May 18, 2026
a3d18fd
chore: merge main into develop to resolve conflicts
Jaro-c May 18, 2026
cfb2db4
fix(ui): add validateName() and inline container URL builds to elimin…
Jaro-c May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
22 changes: 21 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,34 @@
version: 2

updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
labels:
- "dependencies"
- "ci"
open-pull-requests-limit: 10
target-branch: "develop"

- package-ecosystem: "cargo"
directory: "/lynx/translators/compose"
schedule:
interval: "weekly"
labels:
- "dependencies"
- "translator/compose"
open-pull-requests-limit: 5
target-branch: "develop"

- package-ecosystem: "bun"
directory: "/lynx/dashboard/ui"
schedule:
interval: "daily"
labels:
- "dependencies"
- "dashboard"
open-pull-requests-limit: 5
open-pull-requests-limit: 10
target-branch: "develop"
groups:
types:
Expand Down
156 changes: 156 additions & 0 deletions .github/workflows/agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
name: agent

on:
push:
branches: [main, develop]
paths:
- "lynx/agent/**"
- "lynx/translators/**"
- "lynx/Cargo.toml"
- "lynx/Cargo.lock"
- ".github/workflows/agent.yml"
pull_request:
branches: [main]
paths:
- "lynx/agent/**"
- "lynx/translators/**"
- "lynx/Cargo.toml"
- "lynx/Cargo.lock"
- ".github/workflows/agent.yml"

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
DATABASE_URL: postgres://lynx_ci:lynx_ci@localhost:5432/lynx_ci

jobs:
fmt:
name: Format
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: rustfmt

- name: fmt
run: cargo fmt --package lynx-agent -- --check

audit:
name: Security audit
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable

- name: Install cargo-audit
run: cargo install cargo-audit --locked

- name: audit
run: cargo audit --ignore RUSTSEC-2023-0071

check:
name: Check & Clippy
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
services:
postgres:
image: postgres:18-alpine
env:
POSTGRES_USER: lynx_ci
POSTGRES_PASSWORD: lynx_ci
POSTGRES_DB: lynx_ci
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: clippy

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
workspaces: lynx

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked

- name: Run agent migrations
run: sqlx migrate run --source agent/migrations

- name: check
run: cargo check --package lynx-agent

- name: clippy
run: cargo clippy --package lynx-agent -- -D warnings

test:
name: Unit tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
services:
postgres:
image: postgres:18-alpine
env:
POSTGRES_USER: lynx_ci
POSTGRES_PASSWORD: lynx_ci
POSTGRES_DB: lynx_ci
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
workspaces: lynx

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked

- name: Run agent migrations
run: sqlx migrate run --source agent/migrations

- name: test
run: cargo test --package lynx-agent --bin lynx-agent

# Integration tests require nftables + Podman — self-hosted runner only.
# Uncomment when self-hosted runner is configured.
# integration:
# name: Integration tests
# runs-on: [self-hosted, linux]
# needs: check
# steps:
# - uses: actions/checkout@...
# - name: test
# run: cargo test --package lynx-agent -- --test-threads=1
64 changes: 64 additions & 0 deletions .github/workflows/compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: lynx-compose

on:
push:
branches: [main, develop]
paths:
- "lynx/translators/compose/**"
- "lynx/Cargo.toml"
- ".github/workflows/compose.yml"
pull_request:
branches: [main, develop]
paths:
- "lynx/translators/compose/**"
- "lynx/Cargo.toml"
- ".github/workflows/compose.yml"

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

jobs:
check:
name: Check & Lint
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: rustfmt, clippy

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
workspaces: lynx

- name: fmt
run: cargo fmt --package lynx-compose -- --check

- name: clippy
run: cargo clippy --package lynx-compose -- -D warnings

test:
name: Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: lynx
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
workspaces: lynx

- name: test
run: cargo test --package lynx-compose
Loading
Loading