mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
config: packages,metadata,json (10 files)
This commit is contained in:
@@ -1,22 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const packages = fs.readdirSync('packages').filter(f => fs.statSync('packages/' + f).isDirectory());
|
||||
|
||||
const issues = [];
|
||||
|
||||
packages.forEach(pkg => {
|
||||
const metaPath = 'packages/' + pkg + '/seed/metadata.json';
|
||||
if (!fs.existsSync(metaPath)) return;
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(metaPath, 'utf8'));
|
||||
const missing = [];
|
||||
|
||||
if (!data.icon) missing.push('icon');
|
||||
if (!data.devDependencies || data.devDependencies.length === 0) missing.push('devDependencies');
|
||||
if (!data.tests) missing.push('tests');
|
||||
if (!data.exports || typeof data.exports !== 'object' || Array.isArray(data.exports)) missing.push('exports(object)');
|
||||
|
||||
if (missing.length > 0) {
|
||||
console.log(pkg.padEnd(25), 'Missing:', missing.join(', '));
|
||||
}
|
||||
});
|
||||
@@ -1,81 +1,82 @@
|
||||
{
|
||||
"packageId": "css_designer",
|
||||
"name": "CSS Designer",
|
||||
"version": "1.0.0",
|
||||
"description": "Visual CSS designer for creating and editing style overlays. Provides color pickers, font selectors, spacing controls, and exports to SCSS.",
|
||||
"author": "MetaBuilder",
|
||||
"category": "design",
|
||||
"minLevel": 2,
|
||||
"databaseRequired": false,
|
||||
"dependencies": [
|
||||
"shared"
|
||||
],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"CSSDesigner",
|
||||
"ColorPaletteEditor",
|
||||
"FontSelector",
|
||||
"SpacingEditor",
|
||||
"BorderEditor",
|
||||
"ShadowEditor",
|
||||
"StylePreview"
|
||||
]
|
||||
},
|
||||
"scripts": [
|
||||
"init.lua",
|
||||
"types.lua",
|
||||
"colors/init.lua",
|
||||
"colors/color_picker.lua",
|
||||
"colors/palette.lua",
|
||||
"fonts/init.lua",
|
||||
"fonts/font_selector.lua",
|
||||
"spacing/init.lua",
|
||||
"spacing/spacing_editor.lua",
|
||||
"borders/init.lua",
|
||||
"borders/border_editor.lua",
|
||||
"shadows/init.lua",
|
||||
"shadows/shadow_editor.lua",
|
||||
"export/init.lua",
|
||||
"export/to_scss.lua",
|
||||
"export/to_css.lua"
|
||||
],
|
||||
"tests": [
|
||||
"tests/colors.test.lua",
|
||||
"tests/export.test.lua"
|
||||
],
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"css.designer.export": {
|
||||
"minLevel": 2,
|
||||
"description": "Export to SCSS/CSS"
|
||||
},
|
||||
"css.designer.edit": {
|
||||
"minLevel": 2,
|
||||
"description": "Edit CSS styles"
|
||||
},
|
||||
"css.designer.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View CSS designer",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "CSSDesigner",
|
||||
"render": "component"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "css_designer",
|
||||
"name": "CSS Designer",
|
||||
"version": "1.0.0",
|
||||
"description": "Visual CSS designer for creating and editing style overlays. Provides color pickers, font selectors, spacing controls, and exports to SCSS.",
|
||||
"author": "MetaBuilder",
|
||||
"category": "design",
|
||||
"minLevel": 2,
|
||||
"databaseRequired": false,
|
||||
"dependencies": [
|
||||
"shared"
|
||||
],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"CSSDesigner",
|
||||
"ColorPaletteEditor",
|
||||
"FontSelector",
|
||||
"SpacingEditor",
|
||||
"BorderEditor",
|
||||
"ShadowEditor",
|
||||
"StylePreview"
|
||||
]
|
||||
},
|
||||
"scripts": [
|
||||
"init.lua",
|
||||
"types.lua",
|
||||
"colors/init.lua",
|
||||
"colors/color_picker.lua",
|
||||
"colors/palette.lua",
|
||||
"fonts/init.lua",
|
||||
"fonts/font_selector.lua",
|
||||
"spacing/init.lua",
|
||||
"spacing/spacing_editor.lua",
|
||||
"borders/init.lua",
|
||||
"borders/border_editor.lua",
|
||||
"shadows/init.lua",
|
||||
"shadows/shadow_editor.lua",
|
||||
"export/init.lua",
|
||||
"export/to_scss.lua",
|
||||
"export/to_css.lua"
|
||||
],
|
||||
"tests": [
|
||||
"tests/colors.test.lua",
|
||||
"tests/export.test.lua"
|
||||
],
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"css.designer.export": {
|
||||
"minLevel": 2,
|
||||
"description": "Export to SCSS/CSS"
|
||||
},
|
||||
"css.designer.edit": {
|
||||
"minLevel": 2,
|
||||
"description": "Edit CSS styles"
|
||||
},
|
||||
"css.designer.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View CSS designer",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "CSSDesigner",
|
||||
"render": "component"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg"
|
||||
}
|
||||
|
||||
@@ -1,112 +1,113 @@
|
||||
{
|
||||
"packageId": "dbal_demo",
|
||||
"name": "DBAL Demo",
|
||||
"version": "1.0.0",
|
||||
"description": "DBAL Integration Demo - Demonstrates TypeScript DBAL client with MetaBuilder",
|
||||
"author": "MetaBuilder",
|
||||
"license": "MIT",
|
||||
"minLevel": 3,
|
||||
"category": "demo",
|
||||
"tags": [
|
||||
"dbal",
|
||||
"demo",
|
||||
"kv-store",
|
||||
"blob-storage",
|
||||
"cache"
|
||||
],
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"DBALDemo",
|
||||
"KVStorePanel",
|
||||
"BlobStoragePanel",
|
||||
"CachedDataPanel"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"kv_operations",
|
||||
"blob_operations",
|
||||
"cache_operations"
|
||||
]
|
||||
},
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/kv_operations.test.lua",
|
||||
"tests/cache_operations.test.lua",
|
||||
"tests/blob_operations.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/kv_operations.cases.json",
|
||||
"tests/cache_operations.cases.json",
|
||||
"tests/blob_operations.cases.json"
|
||||
]
|
||||
},
|
||||
"bindings": {
|
||||
"dbal": true,
|
||||
"browser": false
|
||||
},
|
||||
"requiredHooks": [
|
||||
"dbal",
|
||||
"kv_store",
|
||||
"blob_storage",
|
||||
"cached_data"
|
||||
],
|
||||
"layout": "layout.json",
|
||||
"permissions": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"databaseRequired": true,
|
||||
"components": {
|
||||
"DBALDemo": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true
|
||||
},
|
||||
"KVStorePanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true,
|
||||
"featureFlags": [
|
||||
"kv_store_enabled"
|
||||
]
|
||||
},
|
||||
"BlobStoragePanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 4,
|
||||
"requireDatabase": true,
|
||||
"featureFlags": [
|
||||
"blob_storage_enabled"
|
||||
]
|
||||
},
|
||||
"CachedDataPanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true,
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"primary": true,
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "DBAL_Demo",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "dbal_demo",
|
||||
"name": "DBAL Demo",
|
||||
"version": "1.0.0",
|
||||
"description": "DBAL Integration Demo - Demonstrates TypeScript DBAL client with MetaBuilder",
|
||||
"author": "MetaBuilder",
|
||||
"license": "MIT",
|
||||
"minLevel": 3,
|
||||
"category": "demo",
|
||||
"tags": [
|
||||
"dbal",
|
||||
"demo",
|
||||
"kv-store",
|
||||
"blob-storage",
|
||||
"cache"
|
||||
],
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"DBALDemo",
|
||||
"KVStorePanel",
|
||||
"BlobStoragePanel",
|
||||
"CachedDataPanel"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"kv_operations",
|
||||
"blob_operations",
|
||||
"cache_operations"
|
||||
]
|
||||
},
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/kv_operations.test.lua",
|
||||
"tests/cache_operations.test.lua",
|
||||
"tests/blob_operations.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/kv_operations.cases.json",
|
||||
"tests/cache_operations.cases.json",
|
||||
"tests/blob_operations.cases.json"
|
||||
]
|
||||
},
|
||||
"bindings": {
|
||||
"dbal": true,
|
||||
"browser": false
|
||||
},
|
||||
"requiredHooks": [
|
||||
"dbal",
|
||||
"kv_store",
|
||||
"blob_storage",
|
||||
"cached_data"
|
||||
],
|
||||
"layout": "layout.json",
|
||||
"permissions": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"databaseRequired": true,
|
||||
"components": {
|
||||
"DBALDemo": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true
|
||||
},
|
||||
"KVStorePanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true,
|
||||
"featureFlags": [
|
||||
"kv_store_enabled"
|
||||
]
|
||||
},
|
||||
"BlobStoragePanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 4,
|
||||
"requireDatabase": true,
|
||||
"featureFlags": [
|
||||
"blob_storage_enabled"
|
||||
]
|
||||
},
|
||||
"CachedDataPanel": {
|
||||
"enabled": true,
|
||||
"minLevel": 3,
|
||||
"requireDatabase": true,
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"primary": true,
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "DBAL_Demo",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg"
|
||||
}
|
||||
|
||||
@@ -1,63 +1,75 @@
|
||||
{
|
||||
"packageId": "github_tools",
|
||||
"name": "GitHub Tools",
|
||||
"description": "GitHub integration tools including Actions viewer, run analysis, and workflow management",
|
||||
"version": "1.0.0",
|
||||
"author": "MetaBuilder",
|
||||
"minLevel": 2,
|
||||
"category": "development",
|
||||
"tags": [
|
||||
"github",
|
||||
"ci-cd",
|
||||
"workflow",
|
||||
"actions"
|
||||
],
|
||||
"dependencies": [],
|
||||
"exports": {
|
||||
"components": [
|
||||
"GitHubViewer",
|
||||
"RunList",
|
||||
"RunDetails",
|
||||
"AnalysisPanel",
|
||||
"RunFilters"
|
||||
],
|
||||
"scripts": [
|
||||
"fetch_runs",
|
||||
"analyze",
|
||||
"filter",
|
||||
"status"
|
||||
]
|
||||
},
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"github.runs.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View GitHub Actions runs"
|
||||
},
|
||||
"github.runs.analyze": {
|
||||
"minLevel": 2,
|
||||
"description": "Analyze GitHub Actions runs"
|
||||
},
|
||||
"github.workflow.trigger": {
|
||||
"minLevel": 3,
|
||||
"description": "Trigger workflow runs",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "GitHub_Tools",
|
||||
"render": "fetch_runs"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "github_tools",
|
||||
"name": "GitHub Tools",
|
||||
"description": "GitHub integration tools including Actions viewer, run analysis, and workflow management",
|
||||
"version": "1.0.0",
|
||||
"author": "MetaBuilder",
|
||||
"minLevel": 2,
|
||||
"category": "development",
|
||||
"tags": [
|
||||
"github",
|
||||
"ci-cd",
|
||||
"workflow",
|
||||
"actions"
|
||||
],
|
||||
"dependencies": [],
|
||||
"exports": {
|
||||
"components": [
|
||||
"GitHubViewer",
|
||||
"RunList",
|
||||
"RunDetails",
|
||||
"AnalysisPanel",
|
||||
"RunFilters"
|
||||
],
|
||||
"scripts": [
|
||||
"fetch_runs",
|
||||
"analyze",
|
||||
"filter",
|
||||
"status"
|
||||
]
|
||||
},
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"github.runs.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View GitHub Actions runs"
|
||||
},
|
||||
"github.runs.analyze": {
|
||||
"minLevel": 2,
|
||||
"description": "Analyze GitHub Actions runs"
|
||||
},
|
||||
"github.workflow.trigger": {
|
||||
"minLevel": 3,
|
||||
"description": "Trigger workflow runs",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "GitHub_Tools",
|
||||
"render": "fetch_runs"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg",
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +1,60 @@
|
||||
{
|
||||
"packageId": "lua_test",
|
||||
"name": "Lua Test",
|
||||
"version": "1.0.0",
|
||||
"description": "Unit testing framework for Lua scripts in MetaBuilder packages",
|
||||
"icon": "static_content/icon.svg",
|
||||
"author": "MetaBuilder",
|
||||
"category": "tools",
|
||||
"dependencies": [],
|
||||
"exports": {
|
||||
"components": [
|
||||
"TestRunner",
|
||||
"TestResults"
|
||||
],
|
||||
"scripts": [
|
||||
"framework",
|
||||
"runner",
|
||||
"assertions",
|
||||
"mocks"
|
||||
]
|
||||
},
|
||||
"minLevel": 3,
|
||||
"primary": false,
|
||||
"permissions": {
|
||||
"lua.test.run": {
|
||||
"minLevel": 3,
|
||||
"description": "Run Lua tests"
|
||||
},
|
||||
"lua.test.view": {
|
||||
"minLevel": 3,
|
||||
"description": "View test results",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Lua_Test",
|
||||
"render": "framework"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "lua_test",
|
||||
"name": "Lua Test",
|
||||
"version": "1.0.0",
|
||||
"description": "Unit testing framework for Lua scripts in MetaBuilder packages",
|
||||
"icon": "static_content/icon.svg",
|
||||
"author": "MetaBuilder",
|
||||
"category": "tools",
|
||||
"dependencies": [],
|
||||
"exports": {
|
||||
"components": [
|
||||
"TestRunner",
|
||||
"TestResults"
|
||||
],
|
||||
"scripts": [
|
||||
"framework",
|
||||
"runner",
|
||||
"assertions",
|
||||
"mocks"
|
||||
]
|
||||
},
|
||||
"minLevel": 3,
|
||||
"primary": false,
|
||||
"permissions": {
|
||||
"lua.test.run": {
|
||||
"minLevel": 3,
|
||||
"description": "Run Lua tests"
|
||||
},
|
||||
"lua.test.view": {
|
||||
"minLevel": 3,
|
||||
"description": "View test results",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Lua_Test",
|
||||
"render": "framework"
|
||||
}
|
||||
]
|
||||
},
|
||||
"devDependencies": [],
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,232 +1,236 @@
|
||||
{
|
||||
"packageId": "media_center",
|
||||
"name": "Media Center",
|
||||
"version": "1.1.0",
|
||||
"description": "Media processing dashboard with job queue, radio, TV, document conversion, and retro gaming",
|
||||
"author": "MetaBuilder",
|
||||
"category": "media",
|
||||
"minLevel": 3,
|
||||
"tags": [
|
||||
"media",
|
||||
"streaming",
|
||||
"radio",
|
||||
"tv",
|
||||
"transcoding",
|
||||
"documents",
|
||||
"pdf",
|
||||
"retro",
|
||||
"gaming",
|
||||
"emulation"
|
||||
],
|
||||
"dependencies": [
|
||||
"notification_center",
|
||||
"data_table"
|
||||
],
|
||||
"schema": {
|
||||
"entities": [
|
||||
"MediaAsset",
|
||||
"MediaJob"
|
||||
],
|
||||
"path": "schema/entities.yaml"
|
||||
},
|
||||
"exports": {
|
||||
"components": [
|
||||
"MediaDashboard",
|
||||
"JobQueue",
|
||||
"JobSubmitForm",
|
||||
"RadioChannelList",
|
||||
"RadioChannelEditor",
|
||||
"RadioPlayer",
|
||||
"TvChannelList",
|
||||
"TvChannelEditor",
|
||||
"TvScheduleEditor",
|
||||
"TvEpgViewer",
|
||||
"MediaPlayer",
|
||||
"DocumentConverter",
|
||||
"QuickConvertButtons",
|
||||
"RetroGameLauncher",
|
||||
"RetroGamePlayer",
|
||||
"SaveStateManager",
|
||||
"ActiveSessionsList"
|
||||
],
|
||||
"pages": [
|
||||
"MediaOverviewPage",
|
||||
"JobsPage",
|
||||
"RadioPage",
|
||||
"TvPage",
|
||||
"DocumentsPage",
|
||||
"RetroPage"
|
||||
],
|
||||
"scripts": [
|
||||
"media_api",
|
||||
"job_helpers",
|
||||
"radio_helpers",
|
||||
"tv_helpers",
|
||||
"document_helpers",
|
||||
"retro_helpers"
|
||||
]
|
||||
},
|
||||
"routes": [
|
||||
{
|
||||
"path": "/media",
|
||||
"component": "MediaOverviewPage",
|
||||
"title": "Media Center",
|
||||
"icon": "VideoLibrary",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/jobs",
|
||||
"component": "JobsPage",
|
||||
"title": "Job Queue",
|
||||
"icon": "Queue",
|
||||
"minLevel": 2
|
||||
},
|
||||
{
|
||||
"path": "/media/radio",
|
||||
"component": "RadioPage",
|
||||
"title": "Radio Channels",
|
||||
"icon": "Radio",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/tv",
|
||||
"component": "TvPage",
|
||||
"title": "TV Channels",
|
||||
"icon": "Tv",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/retro",
|
||||
"component": "RetroPage",
|
||||
"title": "Retro Gaming",
|
||||
"icon": "SportsEsports",
|
||||
"minLevel": 2
|
||||
},
|
||||
{
|
||||
"path": "/media/retro/:sessionId",
|
||||
"component": "RetroGamePlayer",
|
||||
"title": "Now Playing",
|
||||
"icon": "SportsEsports",
|
||||
"minLevel": 2,
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"permissions": {
|
||||
"media.jobs.submit": {
|
||||
"minLevel": 1,
|
||||
"description": "Submit media processing jobs"
|
||||
},
|
||||
"media.jobs.view": {
|
||||
"minLevel": 1,
|
||||
"description": "View own jobs"
|
||||
},
|
||||
"media.jobs.view_all": {
|
||||
"minLevel": 2,
|
||||
"description": "View all jobs"
|
||||
},
|
||||
"media.jobs.cancel": {
|
||||
"minLevel": 2,
|
||||
"description": "Cancel jobs"
|
||||
},
|
||||
"media.radio.view": {
|
||||
"minLevel": 0,
|
||||
"description": "View radio channels"
|
||||
},
|
||||
"media.radio.manage": {
|
||||
"minLevel": 3,
|
||||
"description": "Create/edit radio channels"
|
||||
},
|
||||
"media.tv.view": {
|
||||
"minLevel": 0,
|
||||
"description": "View TV channels"
|
||||
},
|
||||
"media.tv.manage": {
|
||||
"minLevel": 3,
|
||||
"description": "Create/edit TV channels"
|
||||
},
|
||||
"media.tv.schedule": {
|
||||
"minLevel": 3,
|
||||
"description": "Manage TV schedule"
|
||||
},
|
||||
"media.retro.play": {
|
||||
"minLevel": 2,
|
||||
"description": "Play retro games"
|
||||
},
|
||||
"media.retro.stream": {
|
||||
"minLevel": 3,
|
||||
"description": "Stream retro gameplay"
|
||||
},
|
||||
"media.retro.manage_cores": {
|
||||
"minLevel": 4,
|
||||
"description": "Install/remove emulator cores",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"media_daemon_url": {
|
||||
"type": "string",
|
||||
"default": "http://localhost:8090",
|
||||
"description": "Media daemon API URL"
|
||||
},
|
||||
"auto_refresh_interval": {
|
||||
"type": "number",
|
||||
"default": 5000,
|
||||
"description": "Auto-refresh interval in milliseconds"
|
||||
},
|
||||
"default_video_quality": {
|
||||
"type": "select",
|
||||
"options": [
|
||||
"auto",
|
||||
"1080p",
|
||||
"720p",
|
||||
"480p"
|
||||
],
|
||||
"default": "auto",
|
||||
"description": "Default video playback quality"
|
||||
},
|
||||
"default_audio_quality": {
|
||||
"type": "select",
|
||||
"options": [
|
||||
"auto",
|
||||
"320",
|
||||
"192",
|
||||
"128",
|
||||
"64"
|
||||
],
|
||||
"default": "auto",
|
||||
"description": "Default audio streaming quality (kbps)",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"unit": [
|
||||
"media_api.test.lua",
|
||||
"job_helpers.test.lua"
|
||||
],
|
||||
"integration": [
|
||||
"job_submission.test.lua",
|
||||
"radio_streaming.test.lua"
|
||||
]
|
||||
},
|
||||
"primary": true,
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Media_Center",
|
||||
"render": "media_api"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "media_center",
|
||||
"name": "Media Center",
|
||||
"version": "1.1.0",
|
||||
"description": "Media processing dashboard with job queue, radio, TV, document conversion, and retro gaming",
|
||||
"author": "MetaBuilder",
|
||||
"category": "media",
|
||||
"minLevel": 3,
|
||||
"tags": [
|
||||
"media",
|
||||
"streaming",
|
||||
"radio",
|
||||
"tv",
|
||||
"transcoding",
|
||||
"documents",
|
||||
"pdf",
|
||||
"retro",
|
||||
"gaming",
|
||||
"emulation"
|
||||
],
|
||||
"dependencies": [
|
||||
"notification_center",
|
||||
"data_table"
|
||||
],
|
||||
"schema": {
|
||||
"entities": [
|
||||
"MediaAsset",
|
||||
"MediaJob"
|
||||
],
|
||||
"path": "schema/entities.yaml"
|
||||
},
|
||||
"exports": {
|
||||
"components": [
|
||||
"MediaDashboard",
|
||||
"JobQueue",
|
||||
"JobSubmitForm",
|
||||
"RadioChannelList",
|
||||
"RadioChannelEditor",
|
||||
"RadioPlayer",
|
||||
"TvChannelList",
|
||||
"TvChannelEditor",
|
||||
"TvScheduleEditor",
|
||||
"TvEpgViewer",
|
||||
"MediaPlayer",
|
||||
"DocumentConverter",
|
||||
"QuickConvertButtons",
|
||||
"RetroGameLauncher",
|
||||
"RetroGamePlayer",
|
||||
"SaveStateManager",
|
||||
"ActiveSessionsList"
|
||||
],
|
||||
"pages": [
|
||||
"MediaOverviewPage",
|
||||
"JobsPage",
|
||||
"RadioPage",
|
||||
"TvPage",
|
||||
"DocumentsPage",
|
||||
"RetroPage"
|
||||
],
|
||||
"scripts": [
|
||||
"media_api",
|
||||
"job_helpers",
|
||||
"radio_helpers",
|
||||
"tv_helpers",
|
||||
"document_helpers",
|
||||
"retro_helpers"
|
||||
]
|
||||
},
|
||||
"routes": [
|
||||
{
|
||||
"path": "/media",
|
||||
"component": "MediaOverviewPage",
|
||||
"title": "Media Center",
|
||||
"icon": "VideoLibrary",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/jobs",
|
||||
"component": "JobsPage",
|
||||
"title": "Job Queue",
|
||||
"icon": "Queue",
|
||||
"minLevel": 2
|
||||
},
|
||||
{
|
||||
"path": "/media/radio",
|
||||
"component": "RadioPage",
|
||||
"title": "Radio Channels",
|
||||
"icon": "Radio",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/tv",
|
||||
"component": "TvPage",
|
||||
"title": "TV Channels",
|
||||
"icon": "Tv",
|
||||
"minLevel": 3
|
||||
},
|
||||
{
|
||||
"path": "/media/retro",
|
||||
"component": "RetroPage",
|
||||
"title": "Retro Gaming",
|
||||
"icon": "SportsEsports",
|
||||
"minLevel": 2
|
||||
},
|
||||
{
|
||||
"path": "/media/retro/:sessionId",
|
||||
"component": "RetroGamePlayer",
|
||||
"title": "Now Playing",
|
||||
"icon": "SportsEsports",
|
||||
"minLevel": 2,
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"permissions": {
|
||||
"media.jobs.submit": {
|
||||
"minLevel": 1,
|
||||
"description": "Submit media processing jobs"
|
||||
},
|
||||
"media.jobs.view": {
|
||||
"minLevel": 1,
|
||||
"description": "View own jobs"
|
||||
},
|
||||
"media.jobs.view_all": {
|
||||
"minLevel": 2,
|
||||
"description": "View all jobs"
|
||||
},
|
||||
"media.jobs.cancel": {
|
||||
"minLevel": 2,
|
||||
"description": "Cancel jobs"
|
||||
},
|
||||
"media.radio.view": {
|
||||
"minLevel": 0,
|
||||
"description": "View radio channels"
|
||||
},
|
||||
"media.radio.manage": {
|
||||
"minLevel": 3,
|
||||
"description": "Create/edit radio channels"
|
||||
},
|
||||
"media.tv.view": {
|
||||
"minLevel": 0,
|
||||
"description": "View TV channels"
|
||||
},
|
||||
"media.tv.manage": {
|
||||
"minLevel": 3,
|
||||
"description": "Create/edit TV channels"
|
||||
},
|
||||
"media.tv.schedule": {
|
||||
"minLevel": 3,
|
||||
"description": "Manage TV schedule"
|
||||
},
|
||||
"media.retro.play": {
|
||||
"minLevel": 2,
|
||||
"description": "Play retro games"
|
||||
},
|
||||
"media.retro.stream": {
|
||||
"minLevel": 3,
|
||||
"description": "Stream retro gameplay"
|
||||
},
|
||||
"media.retro.manage_cores": {
|
||||
"minLevel": 4,
|
||||
"description": "Install/remove emulator cores",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"media_daemon_url": {
|
||||
"type": "string",
|
||||
"default": "http://localhost:8090",
|
||||
"description": "Media daemon API URL"
|
||||
},
|
||||
"auto_refresh_interval": {
|
||||
"type": "number",
|
||||
"default": 5000,
|
||||
"description": "Auto-refresh interval in milliseconds"
|
||||
},
|
||||
"default_video_quality": {
|
||||
"type": "select",
|
||||
"options": [
|
||||
"auto",
|
||||
"1080p",
|
||||
"720p",
|
||||
"480p"
|
||||
],
|
||||
"default": "auto",
|
||||
"description": "Default video playback quality"
|
||||
},
|
||||
"default_audio_quality": {
|
||||
"type": "select",
|
||||
"options": [
|
||||
"auto",
|
||||
"320",
|
||||
"192",
|
||||
"128",
|
||||
"64"
|
||||
],
|
||||
"default": "auto",
|
||||
"description": "Default audio streaming quality (kbps)",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"unit": [
|
||||
"media_api.test.lua",
|
||||
"job_helpers.test.lua"
|
||||
],
|
||||
"integration": [
|
||||
"job_submission.test.lua",
|
||||
"radio_streaming.test.lua"
|
||||
]
|
||||
},
|
||||
"primary": true,
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Media_Center",
|
||||
"render": "media_api"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg",
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,58 +1,66 @@
|
||||
{
|
||||
"packageId": "quick_guide",
|
||||
"name": "Quick Guide",
|
||||
"version": "1.0.0",
|
||||
"description": "Quick guide builder with steps and media management",
|
||||
"icon": "static_content/icon.svg",
|
||||
"author": "MetaBuilder",
|
||||
"category": "ui",
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"StepsEditor",
|
||||
"MediaPane",
|
||||
"QuickGuideBuilder"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"steps",
|
||||
"media"
|
||||
]
|
||||
},
|
||||
"minLevel": 2,
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"guide.edit": {
|
||||
"minLevel": 3,
|
||||
"description": "Edit quick guides"
|
||||
},
|
||||
"guide.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View quick guides"
|
||||
},
|
||||
"guide.create": {
|
||||
"minLevel": 3,
|
||||
"description": "Create quick guides",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "QuickGuide",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "quick_guide",
|
||||
"name": "Quick Guide",
|
||||
"version": "1.0.0",
|
||||
"description": "Quick guide builder with steps and media management",
|
||||
"icon": "static_content/icon.svg",
|
||||
"author": "MetaBuilder",
|
||||
"category": "ui",
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"StepsEditor",
|
||||
"MediaPane",
|
||||
"QuickGuideBuilder"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"steps",
|
||||
"media"
|
||||
]
|
||||
},
|
||||
"minLevel": 2,
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"guide.edit": {
|
||||
"minLevel": 3,
|
||||
"description": "Edit quick guides"
|
||||
},
|
||||
"guide.view": {
|
||||
"minLevel": 2,
|
||||
"description": "View quick guides"
|
||||
},
|
||||
"guide.create": {
|
||||
"minLevel": 3,
|
||||
"description": "Create quick guides",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "QuickGuide",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
},
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,82 +1,83 @@
|
||||
{
|
||||
"packageId": "screenshot_analyzer",
|
||||
"name": "Screenshot Analyzer",
|
||||
"version": "1.0.0",
|
||||
"description": "Screenshot Analyzer - Capture and analyze the current page",
|
||||
"author": "MetaBuilder",
|
||||
"license": "MIT",
|
||||
"minLevel": 5,
|
||||
"category": "demo",
|
||||
"tags": [
|
||||
"screenshot",
|
||||
"analysis",
|
||||
"browser",
|
||||
"dom"
|
||||
],
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"ScreenshotAnalyzer",
|
||||
"UploadSection",
|
||||
"ResultPanel",
|
||||
"PageInfo"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"capture",
|
||||
"analyze",
|
||||
"page_info"
|
||||
]
|
||||
},
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua",
|
||||
"tests/components.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json",
|
||||
"tests/components.cases.json"
|
||||
]
|
||||
},
|
||||
"bindings": {
|
||||
"dbal": false,
|
||||
"browser": true
|
||||
},
|
||||
"requiredHooks": [],
|
||||
"layout": "layout.json",
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"screenshot.upload": {
|
||||
"minLevel": 5,
|
||||
"description": "Upload screenshots"
|
||||
},
|
||||
"screenshot.analyze": {
|
||||
"minLevel": 5,
|
||||
"description": "Analyze screenshots"
|
||||
},
|
||||
"screenshot.capture": {
|
||||
"minLevel": 5,
|
||||
"description": "Capture screenshots",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Screenshot_Analyzer",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
"packageId": "screenshot_analyzer",
|
||||
"name": "Screenshot Analyzer",
|
||||
"version": "1.0.0",
|
||||
"description": "Screenshot Analyzer - Capture and analyze the current page",
|
||||
"author": "MetaBuilder",
|
||||
"license": "MIT",
|
||||
"minLevel": 5,
|
||||
"category": "demo",
|
||||
"tags": [
|
||||
"screenshot",
|
||||
"analysis",
|
||||
"browser",
|
||||
"dom"
|
||||
],
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [
|
||||
"ScreenshotAnalyzer",
|
||||
"UploadSection",
|
||||
"ResultPanel",
|
||||
"PageInfo"
|
||||
],
|
||||
"scripts": [
|
||||
"init",
|
||||
"capture",
|
||||
"analyze",
|
||||
"page_info"
|
||||
]
|
||||
},
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua",
|
||||
"tests/components.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json",
|
||||
"tests/components.cases.json"
|
||||
]
|
||||
},
|
||||
"bindings": {
|
||||
"dbal": false,
|
||||
"browser": true
|
||||
},
|
||||
"requiredHooks": [],
|
||||
"layout": "layout.json",
|
||||
"primary": true,
|
||||
"permissions": {
|
||||
"screenshot.upload": {
|
||||
"minLevel": 5,
|
||||
"description": "Upload screenshots"
|
||||
},
|
||||
"screenshot.analyze": {
|
||||
"minLevel": 5,
|
||||
"description": "Analyze screenshots"
|
||||
},
|
||||
"screenshot.capture": {
|
||||
"minLevel": 5,
|
||||
"description": "Capture screenshots",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"seed": {
|
||||
"styles": "seed/styles.json",
|
||||
"storybook": {
|
||||
"stories": []
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"stories": [
|
||||
{
|
||||
"name": "Screenshot_Analyzer",
|
||||
"render": "init"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg"
|
||||
}
|
||||
|
||||
@@ -49,5 +49,15 @@
|
||||
"render": "permissions.enforce_level"
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": "static_content/icon.svg",
|
||||
"devDependencies": [],
|
||||
"tests": {
|
||||
"scripts": [
|
||||
"tests/metadata.test.lua"
|
||||
],
|
||||
"cases": [
|
||||
"tests/metadata.cases.json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const packages = fs.readdirSync('packages').filter(f => fs.statSync('packages/' + f).isDirectory());
|
||||
|
||||
const fixes = {
|
||||
'css_designer': { icon: 'static_content/icon.svg' },
|
||||
'dbal_demo': { icon: 'static_content/icon.svg' },
|
||||
'github_tools': {
|
||||
icon: 'static_content/icon.svg',
|
||||
devDependencies: ['lua_test'],
|
||||
tests: {
|
||||
scripts: ['tests/metadata.test.lua'],
|
||||
cases: ['tests/metadata.cases.json']
|
||||
}
|
||||
},
|
||||
'lua_test': {
|
||||
devDependencies: [],
|
||||
tests: {
|
||||
scripts: ['tests/metadata.test.lua'],
|
||||
cases: ['tests/metadata.cases.json']
|
||||
}
|
||||
},
|
||||
'media_center': {
|
||||
icon: 'static_content/icon.svg',
|
||||
devDependencies: ['lua_test']
|
||||
},
|
||||
'quick_guide': {
|
||||
tests: {
|
||||
scripts: ['tests/metadata.test.lua'],
|
||||
cases: ['tests/metadata.cases.json']
|
||||
}
|
||||
},
|
||||
'screenshot_analyzer': {
|
||||
icon: 'static_content/icon.svg'
|
||||
},
|
||||
'shared': {
|
||||
icon: 'static_content/icon.svg',
|
||||
devDependencies: [],
|
||||
tests: {
|
||||
scripts: ['tests/metadata.test.lua'],
|
||||
cases: ['tests/metadata.cases.json']
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Object.keys(fixes).forEach(pkg => {
|
||||
const metaPath = 'packages/' + pkg + '/seed/metadata.json';
|
||||
if (!fs.existsSync(metaPath)) {
|
||||
console.log('SKIP:', pkg, '- metadata not found');
|
||||
return;
|
||||
}
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(metaPath, 'utf8'));
|
||||
|
||||
// Add missing fields
|
||||
Object.keys(fixes[pkg]).forEach(field => {
|
||||
if (!data[field]) {
|
||||
data[field] = fixes[pkg][field];
|
||||
console.log('ADD:', pkg, '-', field);
|
||||
}
|
||||
});
|
||||
|
||||
// Write back
|
||||
fs.writeFileSync(metaPath, JSON.stringify(data, null, 2) + '\n');
|
||||
console.log('✓', pkg);
|
||||
});
|
||||
|
||||
console.log('\nDone!');
|
||||
Reference in New Issue
Block a user