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 +}