config: packages,metadata,json (10 files)

This commit is contained in:
Richard Ward
2025-12-31 12:31:11 +00:00
parent d676b3ec04
commit 5dad01c4fe
10 changed files with 725 additions and 769 deletions

View File

@@ -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(', '));
}
});

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
]
}
}

View File

@@ -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"
]
}
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}
}

View File

@@ -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"
}

View File

@@ -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"
]
}
}

View File

@@ -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!');