@enfyra/mcp-server 0.0.110 → 0.0.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enfyra/mcp-server",
3
- "version": "0.0.110",
3
+ "version": "0.0.111",
4
4
  "description": "MCP server for Enfyra - manage Enfyra instances from MCP-compatible coding tools",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1546,7 +1546,8 @@ ensure_page_extension({
1546
1546
  'Put page-level actions in useHeaderActionRegistry or useSubHeaderActionRegistry, destructure register first, then call it with one action or an array.',
1547
1547
  'Page extensions should be full-bleed by default and responsive from the first version.',
1548
1548
  'The extension root is already inside Enfyra admin page main; do not add root-level page padding.',
1549
- 'Use theme tokens/classes for panels, rows, badges, borders, and text. Pair border/divide utilities with border-default or divide-[var(--border-default)] so light and dark themes stay consistent.',
1549
+ 'Use existing eApp theme variables for panels, rows, badges, borders, and text. Pair border/divide utilities with border-[var(--border-default)] or divide-[var(--border-default)] so light and dark themes stay consistent.',
1550
+ 'Do not inject global CSS, create theme guards, redefine the app palette, or solve one extension by overriding the whole app shell.',
1550
1551
  'Keep list selection local and fetch detail rows only; do not refetch the whole list after a row click unless the list data changed.',
1551
1552
  'Page extension paths are admin app UI routes. Do not verify them with test_rest_endpoint against ENFYRA_API_URL unless inspect_route shows an API route with the same path.',
1552
1553
  'After saving, open Enfyra admin tabs should update through the server/Enfyra admin UI realtime reload contract; do not tell the user to refresh unless that contract is proven broken.',
@@ -299,10 +299,10 @@ function getExtensionThemeContract() {
299
299
  'Use usePageHeaderRegistry for the shell title and useHeaderActionRegistry/useSubHeaderActionRegistry for page actions.',
300
300
  ],
301
301
  theme: [
302
- 'Use eApp theme tokens/classes, not hardcoded light or dark colors.',
303
- 'Use bg-default, bg-muted, text-highlighted, text-muted, border-default when available.',
304
- 'When using arbitrary CSS vars, prefer var(--surface-default), var(--surface-muted), var(--border-default), var(--text-primary), var(--text-secondary), and var(--text-tertiary).',
305
- 'Never use bare border/divide-y for panels or rows: pair them with border-default or divide-[var(--border-default)]. Avoid border-black, black, slate-only, gray-only, and dark-only palettes.',
302
+ 'Use existing eApp theme variables/classes, not hardcoded light or dark colors.',
303
+ 'Do not inject global CSS, create theme guards, redefine the app palette, or solve one extension by overriding the whole app shell.',
304
+ 'For dynamic admin extensions, prefer the eApp CSS variables already present in the app: var(--surface-default), var(--surface-muted), var(--border-default), var(--text-primary), var(--text-secondary), and var(--text-tertiary).',
305
+ 'Never use bare border/divide-y for panels or rows: pair them with border-[var(--border-default)] or divide-[var(--border-default)]. Avoid border-black, black, slate-only, gray-only, and dark-only palettes.',
306
306
  'Status colors must remain readable in both themes; warning badges need high contrast text and a visible but not harsh border/background.',
307
307
  ],
308
308
  interaction: [
@@ -316,7 +316,7 @@ function getExtensionThemeContract() {
316
316
  'UI checks are only guidance; handlers/hooks must independently enforce owner/root-admin authorization.',
317
317
  'Use the most specific business route or MCP tool. Do not write directly to raw tables when a domain route exists.',
318
318
  ],
319
- compactExample: '<template><section class="min-h-full w-full space-y-4"><div class="rounded-lg border border-default bg-default"><div class="border-b border-default px-4 py-3"><h2 class="text-base font-semibold text-highlighted">Title</h2><p class="text-sm text-muted">Short operational context.</p></div><div class="divide-y divide-[var(--border-default)]"><button class="flex w-full items-center justify-between px-4 py-3 text-left hover:bg-muted/60"><span class="text-sm font-medium text-highlighted">Row</span><span class="text-sm text-muted">Open</span></button></div></div></section></template>',
319
+ compactExample: '<template><section class="min-h-full w-full space-y-4"><div class="rounded-lg border border-[var(--border-default)] bg-[var(--surface-default)]"><div class="border-b border-[var(--border-default)] px-4 py-3"><h2 class="text-base font-semibold text-[var(--text-primary)]">Title</h2><p class="text-sm text-[var(--text-tertiary)]">Short operational context.</p></div><div class="divide-y divide-[var(--border-default)]"><button class="flex w-full items-center justify-between px-4 py-3 text-left hover:bg-[var(--surface-muted)]"><span class="text-sm font-medium text-[var(--text-primary)]">Row</span><span class="text-sm text-[var(--text-tertiary)]">Open</span></button></div></div></section></template>',
320
320
  };
321
321
  }
322
322