diff --git a/check_packages.js b/check_packages.js deleted file mode 100644 index 6e450092f..000000000 --- a/check_packages.js +++ /dev/null @@ -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(', ')); - } -}); diff --git a/packages/css_designer/seed/metadata.json b/packages/css_designer/seed/metadata.json index 8e5726328..f4cbd7db1 100644 --- a/packages/css_designer/seed/metadata.json +++ b/packages/css_designer/seed/metadata.json @@ -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" +} diff --git a/packages/dbal_demo/seed/metadata.json b/packages/dbal_demo/seed/metadata.json index d383ca3fd..776c800e6 100644 --- a/packages/dbal_demo/seed/metadata.json +++ b/packages/dbal_demo/seed/metadata.json @@ -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" +} diff --git a/packages/github_tools/seed/metadata.json b/packages/github_tools/seed/metadata.json index 2eff0dfcb..4b3140679 100644 --- a/packages/github_tools/seed/metadata.json +++ b/packages/github_tools/seed/metadata.json @@ -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" + ] + } +} diff --git a/packages/lua_test/seed/metadata.json b/packages/lua_test/seed/metadata.json index 4c07638df..0662bedb8 100644 --- a/packages/lua_test/seed/metadata.json +++ b/packages/lua_test/seed/metadata.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" + ] + } +} diff --git a/packages/media_center/seed/metadata.json b/packages/media_center/seed/metadata.json index 4af130f73..c6d6fc254 100644 --- a/packages/media_center/seed/metadata.json +++ b/packages/media_center/seed/metadata.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" + ] +} diff --git a/packages/quick_guide/seed/metadata.json b/packages/quick_guide/seed/metadata.json index 179a8a8ce..b1cb911c8 100644 --- a/packages/quick_guide/seed/metadata.json +++ b/packages/quick_guide/seed/metadata.json @@ -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" + ] + } +} diff --git a/packages/screenshot_analyzer/seed/metadata.json b/packages/screenshot_analyzer/seed/metadata.json index ad543997d..0df9568dc 100644 --- a/packages/screenshot_analyzer/seed/metadata.json +++ b/packages/screenshot_analyzer/seed/metadata.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" +} diff --git a/packages/shared/seed/metadata.json b/packages/shared/seed/metadata.json index 63e5a5fac..3305cc7c8 100644 --- a/packages/shared/seed/metadata.json +++ b/packages/shared/seed/metadata.json @@ -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" + ] } } diff --git a/unify_packages.js b/unify_packages.js deleted file mode 100644 index d2d612d63..000000000 --- a/unify_packages.js +++ /dev/null @@ -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!');