diff --git a/docs/.gitkeep b/docs/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/MVP_PACKAGE_METADATA_MIGRATION.md b/docs/MVP_PACKAGE_METADATA_MIGRATION.md deleted file mode 100644 index 223aaf390..000000000 --- a/docs/MVP_PACKAGE_METADATA_MIGRATION.md +++ /dev/null @@ -1,207 +0,0 @@ -# MVP Package Metadata Migration - -**Date**: 2026-01-07 -**Status**: ✅ Complete -**Issue**: Work towards MVP - Package Metadata Compliance - -## Overview - -This document describes the work done to bring all MetaBuilder packages into compliance with the metadata schema defined in `/schemas/package-schemas/metadata_schema.json`. - -## Problem - -The MetaBuilder platform had 51 packages, but only 8 had proper `seed/metadata.json` files conforming to the standardized schema. This created inconsistency and made package management difficult. - -## Solution - -Created automated tooling to: -1. Generate missing `seed/` directories -2. Create standardized `metadata.json` files for all packages -3. Validate all metadata files against the schema -4. Update tests to cover all packages - -## Changes Made - -### 1. Scripts Created - -#### `scripts/generate-package-metadata.js` -Automated generation of metadata.json files for all packages. - -**Features:** -- Scans all packages in `/packages/` directory -- Creates `seed/` directories where missing -- Generates metadata with intelligent defaults: - - Converts package_id to "Package Name" format - - Auto-categorizes based on package name patterns - - Sets standard fields (version 0.1.0, author, etc.) -- Skips packages that already have metadata -- Reports detailed progress and summary - -**Usage:** -```bash -node scripts/generate-package-metadata.js -``` - -#### `scripts/validate-package-metadata.js` -Validates all package metadata files against schema requirements. - -**Validation Checks:** -- Required fields present (packageId, name, version, description) -- packageId format (snake_case/kebab-case matching `^[a-z][a-z0-9_-]*$`) -- Version format (semver matching `^\d+\.\d+\.\d+(-prerelease)?(+buildmeta)?$`) -- packageId matches directory name -- Correct field types (strings, arrays, etc.) -- Valid JSON syntax - -**Usage:** -```bash -node scripts/validate-package-metadata.js -``` - -### 2. Metadata Generated - -Created `seed/metadata.json` files for **43 packages**: - -``` -arcade_lobby, audit_log, code_editor, codegen_studio, component_editor, -config_summary, css_designer, database_manager, dbal_demo, dropdown_manager, -forum_forge, github_tools, irc_webchat, json_script_example, media_center, -nerd_mode_ide, package_manager, package_validator, quick_guide, role_editor, -route_manager, schema_editor, screenshot_analyzer, smtp_config, social_hub, -stats_grid, stream_cast, testing, theme_editor, ui_auth, ui_footer, -ui_header, ui_home, ui_intro, ui_level2, ui_level3, ui_level4, ui_level5, -ui_level6, ui_login, ui_pages, user_manager, workflow_editor -``` - -### 3. Metadata Structure - -Each generated metadata.json follows this structure: - -```json -{ - "packageId": "package_name", - "name": "Package Name", - "version": "0.1.0", - "description": "Package package_name", - "author": "MetaBuilder Team", - "category": "ui|management|editor|utility|media|testing|database", - "exports": { - "components": [] - }, - "dependencies": [] -} -``` - -### 4. Package Categories - -Packages were intelligently categorized: - -- **UI (20 packages)**: ui_* packages for user interface components -- **Utility (15 packages)**: General utilities, tools, and helpers -- **Editor (6 packages)**: Code, component, schema, theme, role, CSS editors -- **Management (5 packages)**: Package, database, user, route, dropdown managers -- **Media (3 packages)**: Arcade lobby, IRC webchat, media center -- **Testing (1 package)**: Testing framework -- **Database (1 package)**: Database manager -- **Auth (subset of UI)**: Authentication-related UI packages - -### 5. Tests Updated - -**File**: `frontends/nextjs/src/tests/package-integration.test.ts` - -**Changes:** -- Added imports for all 43 newly-documented packages -- Expanded from 8 to 51 total packages in test suite -- Updated valid categories list to include all generated categories -- All existing tests now run against complete package set - -**Test Coverage:** -- ✅ Unique package IDs -- ✅ Semver version format -- ✅ Required metadata fields -- ✅ Valid categories -- ✅ Exports configuration structure -- ✅ Dependencies array presence -- ✅ No circular dependencies -- ✅ Valid dependency references - -## Results - -### Before -- 8/51 packages with metadata (16%) -- 43 packages without standardized metadata -- No validation tooling -- Tests covered only 8 packages - -### After -- ✅ **51/51 packages with metadata (100%)** -- ✅ **All metadata validated and conforming to schema** -- ✅ **Automated generation and validation scripts** -- ✅ **Tests cover all 51 packages** - -## Validation Results - -``` -📊 Validation Summary: - ✅ Valid: 51 - ❌ Invalid: 0 - 🚫 Missing: 0 - 📦 Total: 51 -``` - -## Schema Compliance - -All metadata files now comply with: -- **Schema**: `/schemas/package-schemas/metadata_schema.json` -- **Required fields**: packageId, name, version, description -- **Optional fields**: author, category, license, repository, etc. -- **Version format**: Semantic versioning (e.g., "0.1.0") -- **PackageId format**: snake_case or kebab-case - -## Future Maintenance - -### Adding New Packages - -1. Create package directory: `packages/new_package/` -2. Run generator: `node scripts/generate-package-metadata.js` -3. Review and customize generated `packages/new_package/seed/metadata.json` -4. Validate: `node scripts/validate-package-metadata.js` -5. Add import to `package-integration.test.ts` if needed - -### Updating Metadata - -1. Edit `packages/{name}/seed/metadata.json` directly -2. Validate changes: `node scripts/validate-package-metadata.js` -3. Ensure tests pass: `npm test` - -### Categories - -When adding new packages, use these standard categories: -- `ui` - User interface components -- `utility` - General utilities and helpers -- `editor` - Code/content editors -- `management` - System management tools -- `media` - Media processing/display -- `testing` - Testing frameworks -- `database` - Database tools -- `auth` - Authentication/authorization -- `components` - Generic reusable components - -## Related Files - -- `/schemas/package-schemas/metadata_schema.json` - Schema definition -- `/schemas/package-schemas/README.md` - Schema documentation -- `/schemas/package-schemas/QUICKSTART.md` - Quick start guide -- `/scripts/generate-package-metadata.js` - Generator script -- `/scripts/validate-package-metadata.js` - Validator script -- `/frontends/nextjs/src/tests/package-integration.test.ts` - Integration tests - -## References - -- [MetaBuilder Package System](../README.md#package-system) -- [Schema Documentation](../schemas/package-schemas/README.md) - ---- - -**Status**: ✅ MVP package metadata compliance complete -**All 51 packages now have standardized, validated metadata** diff --git a/frontends/nextjs/src/tests/package-integration.test.ts b/frontends/nextjs/src/tests/package-integration.test.ts index ac849e441..c2cfad941 100644 --- a/frontends/nextjs/src/tests/package-integration.test.ts +++ b/frontends/nextjs/src/tests/package-integration.test.ts @@ -1,109 +1,23 @@ import { describe, expect, it } from 'vitest' import adminDialogMetadata from '../../../../packages/admin_dialog/seed/metadata.json' -import arcadeLobbyMetadata from '../../../../packages/arcade_lobby/seed/metadata.json' -import auditLogMetadata from '../../../../packages/audit_log/seed/metadata.json' -import codeEditorMetadata from '../../../../packages/code_editor/seed/metadata.json' -import codegenStudioMetadata from '../../../../packages/codegen_studio/seed/metadata.json' -import componentEditorMetadata from '../../../../packages/component_editor/seed/metadata.json' -import configSummaryMetadata from '../../../../packages/config_summary/seed/metadata.json' -import cssDesignerMetadata from '../../../../packages/css_designer/seed/metadata.json' import dashboardMetadata from '../../../../packages/dashboard/seed/metadata.json' import dataTableMetadata from '../../../../packages/data_table/seed/metadata.json' -import databaseManagerMetadata from '../../../../packages/database_manager/seed/metadata.json' -import dbalDemoMetadata from '../../../../packages/dbal_demo/seed/metadata.json' -import dropdownManagerMetadata from '../../../../packages/dropdown_manager/seed/metadata.json' import formBuilderMetadata from '../../../../packages/form_builder/seed/metadata.json' -import forumForgeMetadata from '../../../../packages/forum_forge/seed/metadata.json' -import githubToolsMetadata from '../../../../packages/github_tools/seed/metadata.json' -import ircWebchatMetadata from '../../../../packages/irc_webchat/seed/metadata.json' -import jsonScriptExampleMetadata from '../../../../packages/json_script_example/seed/metadata.json' -import mediaCenterMetadata from '../../../../packages/media_center/seed/metadata.json' import navMenuMetadata from '../../../../packages/nav_menu/seed/metadata.json' -import nerdModeIdeMetadata from '../../../../packages/nerd_mode_ide/seed/metadata.json' import notificationCenterMetadata from '../../../../packages/notification_center/seed/metadata.json' -import packageManagerMetadata from '../../../../packages/package_manager/seed/metadata.json' -import packageValidatorMetadata from '../../../../packages/package_validator/seed/metadata.json' -import quickGuideMetadata from '../../../../packages/quick_guide/seed/metadata.json' -import roleEditorMetadata from '../../../../packages/role_editor/seed/metadata.json' -import routeManagerMetadata from '../../../../packages/route_manager/seed/metadata.json' -import schemaEditorMetadata from '../../../../packages/schema_editor/seed/metadata.json' -import screenshotAnalyzerMetadata from '../../../../packages/screenshot_analyzer/seed/metadata.json' -import smtpConfigMetadata from '../../../../packages/smtp_config/seed/metadata.json' -import socialHubMetadata from '../../../../packages/social_hub/seed/metadata.json' -import statsGridMetadata from '../../../../packages/stats_grid/seed/metadata.json' -import streamCastMetadata from '../../../../packages/stream_cast/seed/metadata.json' -import testingMetadata from '../../../../packages/testing/seed/metadata.json' -import themeEditorMetadata from '../../../../packages/theme_editor/seed/metadata.json' -import uiAuthMetadata from '../../../../packages/ui_auth/seed/metadata.json' import uiDialogsMetadata from '../../../../packages/ui_dialogs/seed/metadata.json' -import uiFooterMetadata from '../../../../packages/ui_footer/seed/metadata.json' -import uiHeaderMetadata from '../../../../packages/ui_header/seed/metadata.json' -import uiHomeMetadata from '../../../../packages/ui_home/seed/metadata.json' -import uiIntroMetadata from '../../../../packages/ui_intro/seed/metadata.json' -import uiLevel2Metadata from '../../../../packages/ui_level2/seed/metadata.json' -import uiLevel3Metadata from '../../../../packages/ui_level3/seed/metadata.json' -import uiLevel4Metadata from '../../../../packages/ui_level4/seed/metadata.json' -import uiLevel5Metadata from '../../../../packages/ui_level5/seed/metadata.json' -import uiLevel6Metadata from '../../../../packages/ui_level6/seed/metadata.json' -import uiLoginMetadata from '../../../../packages/ui_login/seed/metadata.json' -import uiPagesMetadata from '../../../../packages/ui_pages/seed/metadata.json' import uiPermissionsMetadata from '../../../../packages/ui_permissions/seed/metadata.json' -import userManagerMetadata from '../../../../packages/user_manager/seed/metadata.json' -import workflowEditorMetadata from '../../../../packages/workflow_editor/seed/metadata.json' const packages = [ adminDialogMetadata, - arcadeLobbyMetadata, - auditLogMetadata, - codeEditorMetadata, - codegenStudioMetadata, - componentEditorMetadata, - configSummaryMetadata, - cssDesignerMetadata, dashboardMetadata, dataTableMetadata, - databaseManagerMetadata, - dbalDemoMetadata, - dropdownManagerMetadata, formBuilderMetadata, - forumForgeMetadata, - githubToolsMetadata, - ircWebchatMetadata, - jsonScriptExampleMetadata, - mediaCenterMetadata, navMenuMetadata, - nerdModeIdeMetadata, notificationCenterMetadata, - packageManagerMetadata, - packageValidatorMetadata, - quickGuideMetadata, - roleEditorMetadata, - routeManagerMetadata, - schemaEditorMetadata, - screenshotAnalyzerMetadata, - smtpConfigMetadata, - socialHubMetadata, - statsGridMetadata, - streamCastMetadata, - testingMetadata, - themeEditorMetadata, - uiAuthMetadata, uiDialogsMetadata, - uiFooterMetadata, - uiHeaderMetadata, - uiHomeMetadata, - uiIntroMetadata, - uiLevel2Metadata, - uiLevel3Metadata, - uiLevel4Metadata, - uiLevel5Metadata, - uiLevel6Metadata, - uiLoginMetadata, - uiPagesMetadata, uiPermissionsMetadata, - userManagerMetadata, - workflowEditorMetadata, ] describe('Package System Integration', () => { @@ -129,7 +43,7 @@ describe('Package System Integration', () => { }) it('should have all packages with valid categories', () => { - const validCategories = ['ui', 'utility', 'editor', 'management', 'media', 'testing', 'database', 'components', 'auth', 'data', 'system', 'integration'] + const validCategories = ['ui', 'data', 'utility', 'system', 'integration'] packages.forEach(pkg => { expect(validCategories).toContain(pkg.category) }) diff --git a/packages/arcade_lobby/seed/metadata.json b/packages/arcade_lobby/seed/metadata.json deleted file mode 100644 index 8a59b14e6..000000000 --- a/packages/arcade_lobby/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "arcade_lobby", - "name": "Arcade Lobby", - "version": "0.1.0", - "description": "Package arcade_lobby", - "author": "MetaBuilder Team", - "category": "media", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/audit_log/seed/metadata.json b/packages/audit_log/seed/metadata.json deleted file mode 100644 index 34eeaf6fa..000000000 --- a/packages/audit_log/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "audit_log", - "name": "Audit Log", - "version": "0.1.0", - "description": "Package audit_log", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/code_editor/seed/metadata.json b/packages/code_editor/seed/metadata.json deleted file mode 100644 index cefbe16fe..000000000 --- a/packages/code_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "code_editor", - "name": "Code Editor", - "version": "0.1.0", - "description": "Package code_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/codegen_studio/seed/metadata.json b/packages/codegen_studio/seed/metadata.json deleted file mode 100644 index 258d50a89..000000000 --- a/packages/codegen_studio/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "codegen_studio", - "name": "Codegen Studio", - "version": "0.1.0", - "description": "Package codegen_studio", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/component_editor/seed/metadata.json b/packages/component_editor/seed/metadata.json deleted file mode 100644 index 4c7669160..000000000 --- a/packages/component_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "component_editor", - "name": "Component Editor", - "version": "0.1.0", - "description": "Package component_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/config_summary/seed/metadata.json b/packages/config_summary/seed/metadata.json deleted file mode 100644 index a6e826318..000000000 --- a/packages/config_summary/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "config_summary", - "name": "Config Summary", - "version": "0.1.0", - "description": "Package config_summary", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/css_designer/seed/metadata.json b/packages/css_designer/seed/metadata.json deleted file mode 100644 index 1a42751d0..000000000 --- a/packages/css_designer/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "css_designer", - "name": "Css Designer", - "version": "0.1.0", - "description": "Package css_designer", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/database_manager/seed/metadata.json b/packages/database_manager/seed/metadata.json deleted file mode 100644 index 6be134311..000000000 --- a/packages/database_manager/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "database_manager", - "name": "Database Manager", - "version": "0.1.0", - "description": "Package database_manager", - "author": "MetaBuilder Team", - "category": "management", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/dbal_demo/seed/metadata.json b/packages/dbal_demo/seed/metadata.json deleted file mode 100644 index 7d7536a5c..000000000 --- a/packages/dbal_demo/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "dbal_demo", - "name": "Dbal Demo", - "version": "0.1.0", - "description": "Package dbal_demo", - "author": "MetaBuilder Team", - "category": "database", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/dropdown_manager/seed/metadata.json b/packages/dropdown_manager/seed/metadata.json deleted file mode 100644 index 9eb6c3616..000000000 --- a/packages/dropdown_manager/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "dropdown_manager", - "name": "Dropdown Manager", - "version": "0.1.0", - "description": "Package dropdown_manager", - "author": "MetaBuilder Team", - "category": "management", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/forum_forge/seed/metadata.json b/packages/forum_forge/seed/metadata.json deleted file mode 100644 index f98b3208d..000000000 --- a/packages/forum_forge/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "forum_forge", - "name": "Forum Forge", - "version": "0.1.0", - "description": "Package forum_forge", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/github_tools/seed/metadata.json b/packages/github_tools/seed/metadata.json deleted file mode 100644 index 942fa13cd..000000000 --- a/packages/github_tools/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "github_tools", - "name": "Github Tools", - "version": "0.1.0", - "description": "Package github_tools", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/irc_webchat/seed/metadata.json b/packages/irc_webchat/seed/metadata.json deleted file mode 100644 index 68a713e0f..000000000 --- a/packages/irc_webchat/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "irc_webchat", - "name": "Irc Webchat", - "version": "0.1.0", - "description": "Package irc_webchat", - "author": "MetaBuilder Team", - "category": "media", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/json_script_example/seed/metadata.json b/packages/json_script_example/seed/metadata.json deleted file mode 100644 index e406f26a5..000000000 --- a/packages/json_script_example/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "json_script_example", - "name": "Json Script Example", - "version": "0.1.0", - "description": "Package json_script_example", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/media_center/seed/metadata.json b/packages/media_center/seed/metadata.json deleted file mode 100644 index 706878d67..000000000 --- a/packages/media_center/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "media_center", - "name": "Media Center", - "version": "0.1.0", - "description": "Package media_center", - "author": "MetaBuilder Team", - "category": "media", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/nerd_mode_ide/seed/metadata.json b/packages/nerd_mode_ide/seed/metadata.json deleted file mode 100644 index ad02abeec..000000000 --- a/packages/nerd_mode_ide/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "nerd_mode_ide", - "name": "Nerd Mode Ide", - "version": "0.1.0", - "description": "Package nerd_mode_ide", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/package_manager/seed/metadata.json b/packages/package_manager/seed/metadata.json deleted file mode 100644 index 4ce12c930..000000000 --- a/packages/package_manager/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "package_manager", - "name": "Package Manager", - "version": "0.1.0", - "description": "Package package_manager", - "author": "MetaBuilder Team", - "category": "management", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/package_validator/seed/metadata.json b/packages/package_validator/seed/metadata.json deleted file mode 100644 index 34760a385..000000000 --- a/packages/package_validator/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "package_validator", - "name": "Package Validator", - "version": "0.1.0", - "description": "Package package_validator", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/quick_guide/seed/metadata.json b/packages/quick_guide/seed/metadata.json deleted file mode 100644 index b13b64bfe..000000000 --- a/packages/quick_guide/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "quick_guide", - "name": "Quick Guide", - "version": "0.1.0", - "description": "Package quick_guide", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/role_editor/seed/metadata.json b/packages/role_editor/seed/metadata.json deleted file mode 100644 index 1d79407bc..000000000 --- a/packages/role_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "role_editor", - "name": "Role Editor", - "version": "0.1.0", - "description": "Package role_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/route_manager/seed/metadata.json b/packages/route_manager/seed/metadata.json deleted file mode 100644 index ffa787a00..000000000 --- a/packages/route_manager/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "route_manager", - "name": "Route Manager", - "version": "0.1.0", - "description": "Package route_manager", - "author": "MetaBuilder Team", - "category": "management", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/schema_editor/seed/metadata.json b/packages/schema_editor/seed/metadata.json deleted file mode 100644 index 706e1c7e4..000000000 --- a/packages/schema_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "schema_editor", - "name": "Schema Editor", - "version": "0.1.0", - "description": "Package schema_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/screenshot_analyzer/seed/metadata.json b/packages/screenshot_analyzer/seed/metadata.json deleted file mode 100644 index 8ea263ab5..000000000 --- a/packages/screenshot_analyzer/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "screenshot_analyzer", - "name": "Screenshot Analyzer", - "version": "0.1.0", - "description": "Package screenshot_analyzer", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/smtp_config/seed/metadata.json b/packages/smtp_config/seed/metadata.json deleted file mode 100644 index beb526f8a..000000000 --- a/packages/smtp_config/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "smtp_config", - "name": "Smtp Config", - "version": "0.1.0", - "description": "Package smtp_config", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/social_hub/seed/metadata.json b/packages/social_hub/seed/metadata.json deleted file mode 100644 index 469483e22..000000000 --- a/packages/social_hub/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "social_hub", - "name": "Social Hub", - "version": "0.1.0", - "description": "Package social_hub", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/stats_grid/seed/metadata.json b/packages/stats_grid/seed/metadata.json deleted file mode 100644 index 9fa4cb9d7..000000000 --- a/packages/stats_grid/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "stats_grid", - "name": "Stats Grid", - "version": "0.1.0", - "description": "Package stats_grid", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/stream_cast/seed/metadata.json b/packages/stream_cast/seed/metadata.json deleted file mode 100644 index df29b8dcc..000000000 --- a/packages/stream_cast/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "stream_cast", - "name": "Stream Cast", - "version": "0.1.0", - "description": "Package stream_cast", - "author": "MetaBuilder Team", - "category": "utility", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/testing/seed/metadata.json b/packages/testing/seed/metadata.json deleted file mode 100644 index effe33001..000000000 --- a/packages/testing/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "testing", - "name": "Testing", - "version": "0.1.0", - "description": "Package testing", - "author": "MetaBuilder Team", - "category": "testing", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/theme_editor/seed/metadata.json b/packages/theme_editor/seed/metadata.json deleted file mode 100644 index 723fa4a57..000000000 --- a/packages/theme_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "theme_editor", - "name": "Theme Editor", - "version": "0.1.0", - "description": "Package theme_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_auth/seed/metadata.json b/packages/ui_auth/seed/metadata.json deleted file mode 100644 index f5aeb7503..000000000 --- a/packages/ui_auth/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_auth", - "name": "Ui Auth", - "version": "0.1.0", - "description": "Package ui_auth", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_footer/seed/metadata.json b/packages/ui_footer/seed/metadata.json deleted file mode 100644 index fcf7c2ca1..000000000 --- a/packages/ui_footer/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_footer", - "name": "Ui Footer", - "version": "0.1.0", - "description": "Package ui_footer", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_header/seed/metadata.json b/packages/ui_header/seed/metadata.json deleted file mode 100644 index 7334ad8ea..000000000 --- a/packages/ui_header/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_header", - "name": "Ui Header", - "version": "0.1.0", - "description": "Package ui_header", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_home/seed/metadata.json b/packages/ui_home/seed/metadata.json deleted file mode 100644 index 3ce1955f6..000000000 --- a/packages/ui_home/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_home", - "name": "Ui Home", - "version": "0.1.0", - "description": "Package ui_home", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_intro/seed/metadata.json b/packages/ui_intro/seed/metadata.json deleted file mode 100644 index 7a4af1d11..000000000 --- a/packages/ui_intro/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_intro", - "name": "Ui Intro", - "version": "0.1.0", - "description": "Package ui_intro", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_level2/seed/metadata.json b/packages/ui_level2/seed/metadata.json deleted file mode 100644 index 857088e19..000000000 --- a/packages/ui_level2/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_level2", - "name": "Ui Level2", - "version": "0.1.0", - "description": "Package ui_level2", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_level3/seed/metadata.json b/packages/ui_level3/seed/metadata.json deleted file mode 100644 index 2d493b357..000000000 --- a/packages/ui_level3/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_level3", - "name": "Ui Level3", - "version": "0.1.0", - "description": "Package ui_level3", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_level4/seed/metadata.json b/packages/ui_level4/seed/metadata.json deleted file mode 100644 index 68eea5fa0..000000000 --- a/packages/ui_level4/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_level4", - "name": "Ui Level4", - "version": "0.1.0", - "description": "Package ui_level4", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_level5/seed/metadata.json b/packages/ui_level5/seed/metadata.json deleted file mode 100644 index ec032122f..000000000 --- a/packages/ui_level5/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_level5", - "name": "Ui Level5", - "version": "0.1.0", - "description": "Package ui_level5", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_level6/seed/metadata.json b/packages/ui_level6/seed/metadata.json deleted file mode 100644 index 5bb6fe192..000000000 --- a/packages/ui_level6/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_level6", - "name": "Ui Level6", - "version": "0.1.0", - "description": "Package ui_level6", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_login/seed/metadata.json b/packages/ui_login/seed/metadata.json deleted file mode 100644 index 660bcedb8..000000000 --- a/packages/ui_login/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_login", - "name": "Ui Login", - "version": "0.1.0", - "description": "Package ui_login", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/ui_pages/seed/metadata.json b/packages/ui_pages/seed/metadata.json deleted file mode 100644 index 24c2735d6..000000000 --- a/packages/ui_pages/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "ui_pages", - "name": "Ui Pages", - "version": "0.1.0", - "description": "Package ui_pages", - "author": "MetaBuilder Team", - "category": "ui", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/user_manager/seed/metadata.json b/packages/user_manager/seed/metadata.json deleted file mode 100644 index dd05354dd..000000000 --- a/packages/user_manager/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "user_manager", - "name": "User Manager", - "version": "0.1.0", - "description": "Package user_manager", - "author": "MetaBuilder Team", - "category": "management", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/packages/workflow_editor/seed/metadata.json b/packages/workflow_editor/seed/metadata.json deleted file mode 100644 index 699f8560a..000000000 --- a/packages/workflow_editor/seed/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "packageId": "workflow_editor", - "name": "Workflow Editor", - "version": "0.1.0", - "description": "Package workflow_editor", - "author": "MetaBuilder Team", - "category": "editor", - "exports": { - "components": [] - }, - "dependencies": [] -} diff --git a/scripts/README.md b/scripts/README.md index 50d89a551..eba984284 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -4,98 +4,7 @@ This directory contains utility scripts for the MetaBuilder project. ## Scripts -### Package Metadata Management - -#### `generate-package-metadata.js` - -**Purpose:** Automatically generates `seed/metadata.json` files for all packages that don't have them. - -**Features:** -- 🔍 Scans all packages in `/packages/` directory -- 📁 Creates `seed/` directories where missing -- 🤖 Generates metadata with intelligent defaults: - - Converts package_id to "Package Name" format - - Auto-categorizes based on package name patterns (ui, editor, management, etc.) - - Sets standard fields (version 0.1.0, author, etc.) -- ⏭️ Skips packages that already have metadata -- 📊 Reports detailed progress and summary - -**Usage:** -```bash -node scripts/generate-package-metadata.js -``` - -**Example output:** -``` -🔍 Scanning packages directory... -📦 Found 51 packages - -⏭️ admin_dialog: metadata.json already exists -📁 arcade_lobby: created seed/ directory -✅ arcade_lobby: created metadata.json -... - -============================================================ -📊 Summary: - ✅ Created: 43 - ⏭️ Skipped: 8 - ❌ Errors: 0 - 📦 Total: 51 -============================================================ -``` - -**Related Documentation:** -- [MVP Package Metadata Migration](../docs/MVP_PACKAGE_METADATA_MIGRATION.md) -- [Package Metadata Schema](../schemas/package-schemas/metadata_schema.json) - ---- - -#### `validate-package-metadata.js` - -**Purpose:** Validates all package metadata files against schema requirements. - -**Features:** -- ✅ Validates required fields (packageId, name, version, description) -- 🔤 Checks packageId format (snake_case/kebab-case) -- 📋 Validates version format (semver) -- 🔍 Ensures packageId matches directory name -- 🎯 Verifies correct field types -- 🛡️ Validates JSON syntax - -**Usage:** -```bash -node scripts/validate-package-metadata.js -``` - -**Example output:** -``` -🔍 Validating package metadata files... - -✅ admin_dialog: Valid -✅ arcade_lobby: Valid -✅ dashboard: Valid -... - -============================================================ -📊 Validation Summary: - ✅ Valid: 51 - ❌ Invalid: 0 - 🚫 Missing: 0 - 📦 Total: 51 -============================================================ - -✅ All metadata files are valid! -``` - -**Related Documentation:** -- [MVP Package Metadata Migration](../docs/MVP_PACKAGE_METADATA_MIGRATION.md) -- [Package Metadata Schema](../schemas/package-schemas/metadata_schema.json) - ---- - -### GitHub Issue Management - -#### `triage-duplicate-issues.sh` +### `triage-duplicate-issues.sh` **Purpose:** Automatically finds and closes duplicate GitHub issues while keeping the most recent one open. @@ -154,9 +63,7 @@ export SEARCH_TITLE="Your custom issue title" --- -### Testing Scripts - -#### `test-triage-logic.sh` +### `test-triage-logic.sh` **Purpose:** Comprehensive test suite for the triage script logic. @@ -192,9 +99,7 @@ Test 1: Multiple duplicate issues (should close all except most recent) --- -### Other Utilities - -#### `generate_mod.py` +### `generate_mod.py` **Purpose:** Python script for generating module files. diff --git a/scripts/generate-package-metadata.js b/scripts/generate-package-metadata.js deleted file mode 100755 index 52ed17c48..000000000 --- a/scripts/generate-package-metadata.js +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env node -/** - * Generate metadata.json files for all packages - * This script ensures all packages have proper seed/metadata.json files - * conforming to the metadata_schema.json in schemas/package-schemas/ - */ - -const fs = require('fs'); -const path = require('path'); - -const PACKAGES_DIR = path.join(__dirname, '..', 'packages'); -const METADATA_SCHEMA = 'https://metabuilder.dev/schemas/package-metadata.schema.json'; - -/** - * Convert package directory name to human-readable name - * e.g., "ui_auth" -> "UI Auth", "package_manager" -> "Package Manager" - */ -function toHumanReadableName(packageId) { - return packageId - .split(/[_-]/) - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); -} - -/** - * Determine package category based on package ID - */ -function determineCategory(packageId) { - if (packageId.startsWith('ui_')) return 'ui'; - if (packageId.includes('editor')) return 'editor'; - if (packageId.includes('manager')) return 'management'; - if (packageId.includes('database') || packageId.includes('dbal')) return 'database'; - if (packageId.includes('auth') || packageId.includes('login')) return 'auth'; - if (packageId.includes('test')) return 'testing'; - if (packageId.includes('media') || packageId.includes('irc') || packageId.includes('arcade')) return 'media'; - if (packageId.includes('form') || packageId.includes('component')) return 'components'; - return 'utility'; -} - -/** - * Generate metadata object for a package - */ -function generateMetadata(packageId) { - const name = toHumanReadableName(packageId); - const category = determineCategory(packageId); - - return { - packageId, - name, - version: '0.1.0', - description: `Package ${packageId}`, - author: 'MetaBuilder Team', - category, - exports: { - components: [] - }, - dependencies: [] - }; -} - -/** - * Main function - */ -function main() { - console.log('🔍 Scanning packages directory...'); - - // Get all package directories - const packageDirs = fs.readdirSync(PACKAGES_DIR, { withFileTypes: true }) - .filter(dirent => dirent.isDirectory()) - .map(dirent => dirent.name) - .sort(); - - console.log(`📦 Found ${packageDirs.length} packages\n`); - - let created = 0; - let skipped = 0; - let errors = 0; - - for (const packageId of packageDirs) { - const packagePath = path.join(PACKAGES_DIR, packageId); - const seedDir = path.join(packagePath, 'seed'); - const metadataPath = path.join(seedDir, 'metadata.json'); - - // Check if metadata.json already exists - if (fs.existsSync(metadataPath)) { - console.log(`⏭️ ${packageId}: metadata.json already exists`); - skipped++; - continue; - } - - try { - // Create seed directory if it doesn't exist - if (!fs.existsSync(seedDir)) { - fs.mkdirSync(seedDir, { recursive: true }); - console.log(`📁 ${packageId}: created seed/ directory`); - } - - // Generate metadata - const metadata = generateMetadata(packageId); - - // Write metadata.json - fs.writeFileSync( - metadataPath, - JSON.stringify(metadata, null, 2) + '\n', - 'utf-8' - ); - - console.log(`✅ ${packageId}: created metadata.json`); - created++; - - } catch (error) { - console.error(`❌ ${packageId}: Error - ${error.message}`); - errors++; - } - } - - console.log('\n' + '='.repeat(60)); - console.log('📊 Summary:'); - console.log(` ✅ Created: ${created}`); - console.log(` ⏭️ Skipped: ${skipped}`); - console.log(` ❌ Errors: ${errors}`); - console.log(` 📦 Total: ${packageDirs.length}`); - console.log('='.repeat(60)); - - if (errors > 0) { - process.exit(1); - } -} - -// Run the script -main(); diff --git a/scripts/validate-package-metadata.js b/scripts/validate-package-metadata.js deleted file mode 100755 index 15235ab6f..000000000 --- a/scripts/validate-package-metadata.js +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env node -/** - * Validate all package metadata.json files against the schema - * This performs basic validation without external dependencies - */ - -const fs = require('fs'); -const path = require('path'); - -const PACKAGES_DIR = path.join(__dirname, '..', 'packages'); - -// Required fields from metadata_schema.json -const REQUIRED_FIELDS = ['packageId', 'name', 'version', 'description']; - -// Version regex from schema (semver pattern) -const VERSION_REGEX = /^\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$/; - -// PackageId regex from schema (snake_case or kebab-case) -const PACKAGE_ID_REGEX = /^[a-z][a-z0-9_-]*$/; - -/** - * Validate a single metadata object - */ -function validateMetadata(packageId, metadata, filePath) { - const errors = []; - - // Check required fields - for (const field of REQUIRED_FIELDS) { - if (!metadata[field]) { - errors.push(`Missing required field: ${field}`); - } - } - - // Validate packageId format - if (metadata.packageId && !PACKAGE_ID_REGEX.test(metadata.packageId)) { - errors.push(`Invalid packageId format: "${metadata.packageId}" (must be snake_case or kebab-case)`); - } - - // Validate packageId matches directory name - if (metadata.packageId && metadata.packageId !== packageId) { - errors.push(`PackageId mismatch: metadata says "${metadata.packageId}" but directory is "${packageId}"`); - } - - // Validate version format (semver) - if (metadata.version && !VERSION_REGEX.test(metadata.version)) { - errors.push(`Invalid version format: "${metadata.version}" (must be semver like "1.0.0")`); - } - - // Check field types - if (metadata.name && typeof metadata.name !== 'string') { - errors.push(`Field "name" must be a string`); - } - - if (metadata.description && typeof metadata.description !== 'string') { - errors.push(`Field "description" must be a string`); - } - - if (metadata.dependencies && !Array.isArray(metadata.dependencies)) { - errors.push(`Field "dependencies" must be an array`); - } - - return errors; -} - -/** - * Main function - */ -function main() { - console.log('🔍 Validating package metadata files...\n'); - - // Get all package directories - const packageDirs = fs.readdirSync(PACKAGES_DIR, { withFileTypes: true }) - .filter(dirent => dirent.isDirectory()) - .map(dirent => dirent.name) - .sort(); - - let valid = 0; - let invalid = 0; - let missing = 0; - const allErrors = []; - - for (const packageId of packageDirs) { - const metadataPath = path.join(PACKAGES_DIR, packageId, 'seed', 'metadata.json'); - - // Check if metadata.json exists - if (!fs.existsSync(metadataPath)) { - console.log(`❌ ${packageId}: metadata.json not found`); - missing++; - allErrors.push({ packageId, errors: ['File not found'] }); - continue; - } - - try { - // Read and parse metadata - const content = fs.readFileSync(metadataPath, 'utf-8'); - const metadata = JSON.parse(content); - - // Validate - const errors = validateMetadata(packageId, metadata, metadataPath); - - if (errors.length === 0) { - console.log(`✅ ${packageId}: Valid`); - valid++; - } else { - console.log(`❌ ${packageId}: ${errors.length} error(s)`); - errors.forEach(err => console.log(` - ${err}`)); - invalid++; - allErrors.push({ packageId, errors }); - } - - } catch (error) { - console.log(`❌ ${packageId}: Parse error - ${error.message}`); - invalid++; - allErrors.push({ packageId, errors: [error.message] }); - } - } - - console.log('\n' + '='.repeat(60)); - console.log('📊 Validation Summary:'); - console.log(` ✅ Valid: ${valid}`); - console.log(` ❌ Invalid: ${invalid}`); - console.log(` 🚫 Missing: ${missing}`); - console.log(` 📦 Total: ${packageDirs.length}`); - console.log('='.repeat(60)); - - if (invalid > 0 || missing > 0) { - console.log('\n❌ Validation failed!'); - console.log(`\nPackages with errors (${allErrors.length}):`); - allErrors.forEach(({ packageId, errors }) => { - console.log(`\n${packageId}:`); - errors.forEach(err => console.log(` - ${err}`)); - }); - process.exit(1); - } else { - console.log('\n✅ All metadata files are valid!'); - } -} - -// Run the script -main();