@atlashub/smartstack-cli 4.35.0 → 4.36.0

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.
Files changed (46) hide show
  1. package/dist/index.js +28 -32
  2. package/dist/index.js.map +1 -1
  3. package/dist/mcp-entry.mjs +29 -10
  4. package/dist/mcp-entry.mjs.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/skills/apex/references/checks/seed-checks.sh +1 -1
  7. package/templates/skills/apex/references/core-seed-data.md +39 -21
  8. package/templates/skills/application/references/application-roles-template.md +14 -8
  9. package/templates/skills/application/references/provider-template.md +32 -20
  10. package/templates/skills/application/templates-frontend.md +294 -2
  11. package/templates/skills/application/templates-seed.md +23 -11
  12. package/templates/skills/audit-route/SKILL.md +107 -0
  13. package/templates/skills/audit-route/references/routing-pattern.md +129 -0
  14. package/templates/skills/audit-route/steps/step-00-init.md +128 -0
  15. package/templates/skills/audit-route/steps/step-01-inventory.md +157 -0
  16. package/templates/skills/audit-route/steps/step-02-conformity.md +193 -0
  17. package/templates/skills/audit-route/steps/step-03-report.md +201 -0
  18. package/templates/skills/dev-start/SKILL.md +12 -2
  19. package/templates/skills/efcore/SKILL.md +219 -67
  20. package/templates/agents/efcore/conflicts.md +0 -114
  21. package/templates/agents/efcore/db-deploy.md +0 -86
  22. package/templates/agents/efcore/db-reset.md +0 -98
  23. package/templates/agents/efcore/db-seed.md +0 -73
  24. package/templates/agents/efcore/db-status.md +0 -97
  25. package/templates/agents/efcore/scan.md +0 -124
  26. package/templates/skills/efcore/references/both-contexts.md +0 -32
  27. package/templates/skills/efcore/references/destructive-operations.md +0 -38
  28. package/templates/skills/efcore/steps/db/step-deploy.md +0 -217
  29. package/templates/skills/efcore/steps/db/step-reset.md +0 -186
  30. package/templates/skills/efcore/steps/db/step-seed.md +0 -166
  31. package/templates/skills/efcore/steps/db/step-status.md +0 -173
  32. package/templates/skills/efcore/steps/migration/step-00-init.md +0 -102
  33. package/templates/skills/efcore/steps/migration/step-01-check.md +0 -164
  34. package/templates/skills/efcore/steps/migration/step-02-create.md +0 -160
  35. package/templates/skills/efcore/steps/migration/step-03-validate.md +0 -168
  36. package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +0 -173
  37. package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +0 -100
  38. package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +0 -115
  39. package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +0 -112
  40. package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +0 -157
  41. package/templates/skills/efcore/steps/shared/step-00-init.md +0 -131
  42. package/templates/skills/efcore/steps/squash/step-00-init.md +0 -141
  43. package/templates/skills/efcore/steps/squash/step-01-backup.md +0 -120
  44. package/templates/skills/efcore/steps/squash/step-02-fetch.md +0 -168
  45. package/templates/skills/efcore/steps/squash/step-03-create.md +0 -184
  46. package/templates/skills/efcore/steps/squash/step-04-validate.md +0 -174
@@ -28009,7 +28009,7 @@ async function validateFrontendRoutes(structure, _config, result) {
28009
28009
  const missingRoutes2 = [];
28010
28010
  for (const nav of seedNavRoutes2) {
28011
28011
  const segments = nav.route.split("/").filter(Boolean);
28012
- const componentKey = segments.join(".");
28012
+ const componentKey = segments.map((s) => s.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()).join(".");
28013
28013
  if (!registeredKeys.has(componentKey)) {
28014
28014
  missingRoutes2.push(nav);
28015
28015
  }
@@ -28039,15 +28039,24 @@ async function validateFrontendRoutes(structure, _config, result) {
28039
28039
  });
28040
28040
  return;
28041
28041
  }
28042
+ const hasDynamicRouter = appContent.includes("DynamicRouter") || appContent.includes("<DynamicRouter");
28043
+ if (hasDynamicRouter) {
28044
+ result.warnings.push({
28045
+ type: "warning",
28046
+ category: "frontend-routes",
28047
+ message: "App.tsx uses DynamicRouter but componentRegistry.generated.ts was not found. Run scaffold_routes to generate it."
28048
+ });
28049
+ return;
28050
+ }
28042
28051
  const hasApplicationRoutes = appContent.includes("applicationRoutes") || appContent.includes("clientRoutes");
28043
28052
  const hasRouteComponents = /<Route\s/.test(appContent);
28044
28053
  if (!hasApplicationRoutes && !hasRouteComponents) {
28045
28054
  result.errors.push({
28046
28055
  type: "error",
28047
28056
  category: "frontend-routes",
28048
- message: "App.tsx has no route definitions (neither applicationRoutes import nor <Route> components)",
28057
+ message: "App.tsx has no route definitions (neither DynamicRouter, applicationRoutes import, nor <Route> components)",
28049
28058
  file: path8.relative(structure.root, appFiles[0]),
28050
- suggestion: "Wire generated routes to App.tsx. Import applicationRouteExtensions from the generated file and render them."
28059
+ suggestion: 'For v3.7+: Use DynamicRouter with componentRegistry.generated.ts (run scaffold_routes outputFormat="componentRegistry"). For legacy: Import route configuration from generated routes file.'
28051
28060
  });
28052
28061
  return;
28053
28062
  }
@@ -58588,12 +58597,16 @@ var init_scaffold_routes = __esm({
58588
58597
  init_navroute_parser();
58589
58598
  scaffoldRoutesTool = {
58590
58599
  name: "scaffold_routes",
58591
- description: `Generate React Router configuration from backend NavRoute attributes.
58600
+ description: `Generate frontend routing infrastructure from backend NavRoute attributes.
58592
58601
 
58593
- Creates:
58602
+ Creates (v3.7+ DynamicRouter, default):
58603
+ - componentRegistry.generated.ts: PageRegistry.register() calls with lazy imports for DynamicRouter
58594
58604
  - navRoutes.generated.ts: Registry of all routes with API paths and permissions
58595
- - routes.tsx: React Router configuration with nested routes
58596
- - Layout components (optional)
58605
+
58606
+ Creates (standalone, for non-SmartStack projects):
58607
+ - routes/index.tsx: createBrowserRouter() configuration with nested routes
58608
+ - navRoutes.generated.ts: Registry of all routes
58609
+ - Layout components and route guards (optional)
58597
58610
 
58598
58611
  Example:
58599
58612
  scaffold_routes source="controllers" scope="all"
@@ -59251,11 +59264,17 @@ var init_validate_frontend_routes = __esm({
59251
59264
  name: "validate_frontend_routes",
59252
59265
  description: `Validate frontend routes against backend NavRoute attributes.
59253
59266
 
59254
- Checks:
59267
+ Checks (v3.7+ DynamicRouter pattern):
59268
+ - componentRegistry.generated.ts exists with all PageRegistry.register() entries
59269
+ - main.tsx imports componentRegistry.generated
59270
+ - Backend NavRoutes have matching component keys
59271
+ - API clients use getRoute() instead of hardcoded paths
59272
+ - No hardcoded navigate()/Link paths in page components
59273
+
59274
+ Checks (legacy pattern):
59255
59275
  - navRoutes.generated.ts exists and is up-to-date
59256
- - API clients use correct NavRoute paths
59257
59276
  - React Router configuration matches backend routes
59258
- - Permission configurations are synchronized
59277
+ - App.tsx wiring is complete
59259
59278
 
59260
59279
  Example:
59261
59280
  validate_frontend_routes scope="all"