diff --git a/dbal/development/src/core/foundation/tenant-context.ts b/dbal/development/src/core/foundation/tenant-context.ts index 8fb5dcb48..cc9feacad 100644 --- a/dbal/development/src/core/foundation/tenant-context.ts +++ b/dbal/development/src/core/foundation/tenant-context.ts @@ -5,4 +5,11 @@ export interface TenantContext { tenantId: string; + canRead?: boolean; + canWrite?: boolean; + canDelete?: boolean; + canCreateRecord?: boolean; + canAddToList?: boolean; + quota?: { used: number; limit: number }; + namespace?: string; } diff --git a/frontends/nextjs/scripts/validate-packages.cjs b/frontends/nextjs/scripts/validate-packages.cjs index 079471bff..6f9eeaabc 100644 --- a/frontends/nextjs/scripts/validate-packages.cjs +++ b/frontends/nextjs/scripts/validate-packages.cjs @@ -82,20 +82,24 @@ function validateComponentsJson(seedPath) { try { const content = fs.readFileSync(componentsPath, 'utf-8') - const components = JSON.parse(content) - - if (!Array.isArray(components)) { - errors.push('components.json must be an array') + const parsed = JSON.parse(content) + + // Accept both formats: bare array or { components: [...] } + const components = Array.isArray(parsed) ? parsed : parsed.components + + if (!components || !Array.isArray(components)) { + errors.push('components.json must be an array or have a "components" array property') return { valid: false, errors, warnings } } for (let i = 0; i < components.length; i++) { const comp = components[i] - if (!comp.id) { - errors.push(`Component at index ${i} missing required field: id`) + // Accept either "id" or "name" for component identifier + if (!comp.id && !comp.name) { + errors.push(`Component at index ${i} missing required field: id or name`) } - if (!comp.type) { - errors.push(`Component at index ${i} missing required field: type`) + if (!comp.type && !comp.description) { + warnings.push(`Component at index ${i} has no type or description`) } } diff --git a/packages/github_tools/seed/metadata.json b/packages/github_tools/seed/metadata.json index cb75b4fd1..d8e1d6677 100644 --- a/packages/github_tools/seed/metadata.json +++ b/packages/github_tools/seed/metadata.json @@ -1,5 +1,5 @@ { - "id": "github_tools", + "packageId": "github_tools", "name": "GitHub Tools", "description": "GitHub integration tools including Actions viewer, run analysis, and workflow management", "version": "1.0.0", diff --git a/packages/media_center/seed/metadata.json b/packages/media_center/seed/metadata.json index 855005dba..96b04fa0e 100644 --- a/packages/media_center/seed/metadata.json +++ b/packages/media_center/seed/metadata.json @@ -1,9 +1,10 @@ { - "id": "media_center", + "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"], diff --git a/packages/screenshot_analyzer/seed/metadata.json b/packages/screenshot_analyzer/seed/metadata.json index 438cb0022..ef4c42f2c 100644 --- a/packages/screenshot_analyzer/seed/metadata.json +++ b/packages/screenshot_analyzer/seed/metadata.json @@ -1,5 +1,6 @@ { - "name": "screenshot_analyzer", + "packageId": "screenshot_analyzer", + "name": "Screenshot Analyzer", "version": "1.0.0", "description": "Screenshot Analyzer - Capture and analyze the current page", "author": "MetaBuilder", diff --git a/packages/shared/seed/metadata.json b/packages/shared/seed/metadata.json index 67f17c7f7..b54eb5d45 100644 --- a/packages/shared/seed/metadata.json +++ b/packages/shared/seed/metadata.json @@ -1,7 +1,10 @@ { - "name": "shared", + "packageId": "shared", + "name": "Shared Utilities", "version": "1.1.0", "description": "Shared types, utilities, and permission system for all Lua packages", + "author": "MetaBuilder", + "category": "core", "exports": [ "types.ui_types", "permissions"