From 834e086d28eba52e20c39ec35c9c34b60f2bbb22 Mon Sep 17 00:00:00 2001
From: wordingone <126381556+wordingone@users.noreply.github.com>
Date: Fri, 29 Aug 2025 19:14:30 -0700
Subject: [PATCH] Remove cached test artifacts
---
.github/workflows/ci.yml | 32 +++++++++++++++++++++
LumenIO/bootstrap.xml | 40 ++++++++++++++++++++++++++
LumenIO/clients/web/e2e/app.spec.js | 6 ++++
LumenIO/clients/web/index.html | 11 +++++++
LumenIO/clients/web/package.json | 19 ++++++++++++
LumenIO/clients/web/src/main.js | 5 ++++
LumenIO/clients/web/test/greet.test.js | 8 ++++++
LumenIO/hub/__init__.py | 1 +
LumenIO/hub/main.py | 7 +++++
LumenIO/hub/requirements.txt | 4 +++
LumenIO/hub/tests/test_ping.py | 10 +++++++
LumenIO/hub/tests/test_schema.py | 9 ++++++
LumenIO/schemas/gesture.json | 11 +++++++
13 files changed, 163 insertions(+)
create mode 100644 .github/workflows/ci.yml
create mode 100644 LumenIO/bootstrap.xml
create mode 100644 LumenIO/clients/web/e2e/app.spec.js
create mode 100644 LumenIO/clients/web/index.html
create mode 100644 LumenIO/clients/web/package.json
create mode 100644 LumenIO/clients/web/src/main.js
create mode 100644 LumenIO/clients/web/test/greet.test.js
create mode 100644 LumenIO/hub/__init__.py
create mode 100644 LumenIO/hub/main.py
create mode 100644 LumenIO/hub/requirements.txt
create mode 100644 LumenIO/hub/tests/test_ping.py
create mode 100644 LumenIO/hub/tests/test_schema.py
create mode 100644 LumenIO/schemas/gesture.json
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..714749c
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,32 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 20
+ - name: Install Node deps
+ working-directory: LumenIO/clients/web
+ run: npm ci
+ - name: Run vitest
+ working-directory: LumenIO/clients/web
+ run: npm test
+ - name: Run playwright
+ working-directory: LumenIO/clients/web
+ run: npx playwright install --with-deps && npx playwright test
+ - name: Setup Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+ - name: Install Python deps
+ working-directory: LumenIO/hub
+ run: pip install -r requirements.txt
+ - name: Run pytest
+ working-directory: LumenIO/hub
+ run: pytest
diff --git a/LumenIO/bootstrap.xml b/LumenIO/bootstrap.xml
new file mode 100644
index 0000000..c3d7143
--- /dev/null
+++ b/LumenIO/bootstrap.xml
@@ -0,0 +1,40 @@
+
+ LumenIO
+ Gesture-first multi-device programming interface (PC, Mobile, Projector, Standalone, Wearables).
+
+ LLM/NN Prompt Engineer
+ Mech/Electrical/Industrial Engineer
+
+ https://github.com/testingground/LumenIO
+
+ hub
+ clients
+ adapters
+ agents
+ calibration
+
+
+ Python 3.11+
+ FastAPI + aiortc
+ OpenCV
+ MediaPipe/TFLite
+ Blender Python API
+ WebRTC/WebGPU/WebXR
+ Node 20
+ Vite/Vitest/Playwright
+
+
+ pytest httpx jsonschema coverage
+ vitest playwright coverage
+
+
+ GitHub Actions
+
+
+ LumenIO
+ bootstrap.xml
+
+
+ CODE_FIRST_MINIMAL
+
+
diff --git a/LumenIO/clients/web/e2e/app.spec.js b/LumenIO/clients/web/e2e/app.spec.js
new file mode 100644
index 0000000..ab1e6ad
--- /dev/null
+++ b/LumenIO/clients/web/e2e/app.spec.js
@@ -0,0 +1,6 @@
+import { test, expect } from '@playwright/test';
+
+test('renders greeting', async ({ page }) => {
+ await page.setContent('
Hello LumenIO
');
+ await expect(page.locator('#app')).toHaveText('Hello LumenIO');
+});
diff --git a/LumenIO/clients/web/index.html b/LumenIO/clients/web/index.html
new file mode 100644
index 0000000..0e6a123
--- /dev/null
+++ b/LumenIO/clients/web/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ LumenIO
+
+
+
+
+
+
diff --git a/LumenIO/clients/web/package.json b/LumenIO/clients/web/package.json
new file mode 100644
index 0000000..7a54041
--- /dev/null
+++ b/LumenIO/clients/web/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "lumenio-web-client",
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "test": "vitest run",
+ "test:e2e": "playwright test"
+ },
+ "devDependencies": {
+ "@playwright/test": "^1.43.0",
+ "vite": "^5.2.0",
+ "vitest": "^1.5.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+}
diff --git a/LumenIO/clients/web/src/main.js b/LumenIO/clients/web/src/main.js
new file mode 100644
index 0000000..2543bd2
--- /dev/null
+++ b/LumenIO/clients/web/src/main.js
@@ -0,0 +1,5 @@
+export function greet(name) {
+ return `Hello ${name}`;
+}
+
+document.getElementById('app').textContent = greet('LumenIO');
diff --git a/LumenIO/clients/web/test/greet.test.js b/LumenIO/clients/web/test/greet.test.js
new file mode 100644
index 0000000..6b61809
--- /dev/null
+++ b/LumenIO/clients/web/test/greet.test.js
@@ -0,0 +1,8 @@
+import { describe, it, expect } from 'vitest';
+import { greet } from '../src/main.js';
+
+describe('greet', () => {
+ it('greets by name', () => {
+ expect(greet('World')).toBe('Hello World');
+ });
+});
diff --git a/LumenIO/hub/__init__.py b/LumenIO/hub/__init__.py
new file mode 100644
index 0000000..11bce57
--- /dev/null
+++ b/LumenIO/hub/__init__.py
@@ -0,0 +1 @@
+"""Hub package."""
diff --git a/LumenIO/hub/main.py b/LumenIO/hub/main.py
new file mode 100644
index 0000000..efa6c5d
--- /dev/null
+++ b/LumenIO/hub/main.py
@@ -0,0 +1,7 @@
+from fastapi import FastAPI
+
+app = FastAPI()
+
+@app.get('/ping')
+async def ping():
+ return {'msg': 'pong'}
diff --git a/LumenIO/hub/requirements.txt b/LumenIO/hub/requirements.txt
new file mode 100644
index 0000000..fdcc7c2
--- /dev/null
+++ b/LumenIO/hub/requirements.txt
@@ -0,0 +1,4 @@
+fastapi
+uvicorn
+httpx
+jsonschema
diff --git a/LumenIO/hub/tests/test_ping.py b/LumenIO/hub/tests/test_ping.py
new file mode 100644
index 0000000..39d4aa0
--- /dev/null
+++ b/LumenIO/hub/tests/test_ping.py
@@ -0,0 +1,10 @@
+import pytest
+from httpx import AsyncClient
+from main import app
+
+@pytest.mark.asyncio
+async def test_ping():
+ async with AsyncClient(app=app, base_url='http://test') as ac:
+ res = await ac.get('/ping')
+ assert res.status_code == 200
+ assert res.json() == {'msg': 'pong'}
diff --git a/LumenIO/hub/tests/test_schema.py b/LumenIO/hub/tests/test_schema.py
new file mode 100644
index 0000000..fee6ef5
--- /dev/null
+++ b/LumenIO/hub/tests/test_schema.py
@@ -0,0 +1,9 @@
+import json
+from jsonschema import validate
+from pathlib import Path
+
+def test_gesture_schema():
+ schema_path = Path(__file__).resolve().parent.parent.parent / 'schemas' / 'gesture.json'
+ schema = json.loads(schema_path.read_text())
+ sample = {'type': 'wave', 'confidence': 0.9}
+ validate(instance=sample, schema=schema)
diff --git a/LumenIO/schemas/gesture.json b/LumenIO/schemas/gesture.json
new file mode 100644
index 0000000..177de45
--- /dev/null
+++ b/LumenIO/schemas/gesture.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Gesture",
+ "type": "object",
+ "properties": {
+ "type": {"type": "string"},
+ "confidence": {"type": "number", "minimum": 0, "maximum": 1}
+ },
+ "required": ["type", "confidence"],
+ "additionalProperties": false
+}