@atlashub/smartstack-cli 4.34.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 (50) hide show
  1. package/dist/index.js +28 -32
  2. package/dist/index.js.map +1 -1
  3. package/dist/mcp-entry.mjs +35 -303
  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 +350 -89
  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/cli-app-sync/SKILL.md +2 -2
  19. package/templates/skills/cli-app-sync/references/comparison-map.md +1 -1
  20. package/templates/skills/dev-start/SKILL.md +12 -2
  21. package/templates/skills/documentation/steps/step-03-validate.md +12 -14
  22. package/templates/skills/efcore/SKILL.md +219 -67
  23. package/templates/agents/efcore/conflicts.md +0 -114
  24. package/templates/agents/efcore/db-deploy.md +0 -86
  25. package/templates/agents/efcore/db-reset.md +0 -98
  26. package/templates/agents/efcore/db-seed.md +0 -73
  27. package/templates/agents/efcore/db-status.md +0 -97
  28. package/templates/agents/efcore/scan.md +0 -124
  29. package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +0 -126
  30. package/templates/skills/efcore/references/both-contexts.md +0 -32
  31. package/templates/skills/efcore/references/destructive-operations.md +0 -38
  32. package/templates/skills/efcore/steps/db/step-deploy.md +0 -217
  33. package/templates/skills/efcore/steps/db/step-reset.md +0 -186
  34. package/templates/skills/efcore/steps/db/step-seed.md +0 -166
  35. package/templates/skills/efcore/steps/db/step-status.md +0 -173
  36. package/templates/skills/efcore/steps/migration/step-00-init.md +0 -102
  37. package/templates/skills/efcore/steps/migration/step-01-check.md +0 -164
  38. package/templates/skills/efcore/steps/migration/step-02-create.md +0 -160
  39. package/templates/skills/efcore/steps/migration/step-03-validate.md +0 -168
  40. package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +0 -173
  41. package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +0 -100
  42. package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +0 -115
  43. package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +0 -112
  44. package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +0 -157
  45. package/templates/skills/efcore/steps/shared/step-00-init.md +0 -131
  46. package/templates/skills/efcore/steps/squash/step-00-init.md +0 -141
  47. package/templates/skills/efcore/steps/squash/step-01-backup.md +0 -120
  48. package/templates/skills/efcore/steps/squash/step-02-fetch.md +0 -168
  49. package/templates/skills/efcore/steps/squash/step-03-create.md +0 -184
  50. package/templates/skills/efcore/steps/squash/step-04-validate.md +0 -174
package/dist/index.js CHANGED
@@ -117240,6 +117240,7 @@ async function createFrontendStructure(config, state, dryRun) {
117240
117240
  await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "hooks"));
117241
117241
  await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "types"));
117242
117242
  await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "i18n"));
117243
+ await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "extensions"));
117243
117244
  await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "public"));
117244
117245
  const packageJson = {
117245
117246
  name: `${projectName.toLowerCase()}-web`,
@@ -117464,6 +117465,7 @@ import { createRoot } from 'react-dom/client';
117464
117465
  import { BrowserRouter } from 'react-router-dom';
117465
117466
  import { SmartStackProvider } from '@atlashub/smartstack';
117466
117467
  import '@atlashub/smartstack/styles.css';
117468
+ import './extensions/componentRegistry.generated';
117467
117469
  import App from './App';
117468
117470
  import './index.css';
117469
117471
  import './i18n';
@@ -117487,43 +117489,22 @@ createRoot(document.getElementById('root')!).render(
117487
117489
  const main_result = await safeWriteFile((0, import_path7.join)(webDir, "src", "main.tsx"), mainTsx, findKnownHash(state, "frontend", main_relPath));
117488
117490
  logSafeWriteResult(main_relPath, main_result);
117489
117491
  recordFile(state, "frontend", main_relPath, main_result.hash);
117490
- const appTsx = `import { useRoutes, Navigate } from 'react-router-dom';
117491
- import { mergeRoutes } from '@atlashub/smartstack';
117492
- import type { RouteConfig, ApplicationRouteExtensions } from '@atlashub/smartstack';
117493
-
117494
- /**
117495
- * Client-specific routes (outside SmartStack locked applications)
117496
- * Add your custom routes here. Locked SmartStack paths cannot be overridden.
117497
- */
117498
- const clientRoutes: RouteConfig[] = [
117499
- // Redirect root to login page
117500
- { path: '/', element: <Navigate to="/login" replace /> },
117501
- // Add your custom routes below:
117502
- // { path: '/about', element: <AboutPage /> },
117503
- ];
117504
-
117505
- /**
117506
- * Application-scoped route extensions
117507
- * Add your routes here.
117508
- * Paths are RELATIVE to the application root.
117509
- * Example: 'users/list' (NOT '/administration/users/list')
117510
- */
117511
- const applicationRoutes: ApplicationRouteExtensions = {
117512
- // sales: [],
117513
- // administration: [],
117514
- };
117515
-
117516
- /**
117517
- * Merged routes combining client, application extensions, and SmartStack core routes
117518
- */
117519
- const routes = mergeRoutes(clientRoutes, applicationRoutes);
117492
+ const appTsx = `import { DynamicRouter } from '@atlashub/smartstack';
117520
117493
 
117521
117494
  /**
117522
117495
  * App - Main application component
117496
+ *
117497
+ * DynamicRouter generates routes from the /api/navigation/menu response.
117498
+ * Pages are resolved via PageRegistry \u2014 register them in componentRegistry.generated.ts.
117499
+ *
117500
+ * To add custom pages:
117501
+ * 1. Create your page component in src/pages/
117502
+ * 2. Register it with PageRegistry.register('your.page.key', lazy(() => import('./pages/YourPage')))
117503
+ * 3. Add navigation seed data with matching ComponentKey in the backend
117504
+ * 4. DynamicRouter resolves it automatically \u2014 no manual route wiring needed
117523
117505
  */
117524
117506
  function App() {
117525
- const element = useRoutes(routes);
117526
- return element;
117507
+ return <DynamicRouter />;
117527
117508
  }
117528
117509
 
117529
117510
  export default App;
@@ -117532,6 +117513,21 @@ export default App;
117532
117513
  const app_result = await safeWriteFile((0, import_path7.join)(webDir, "src", "App.tsx"), appTsx, findKnownHash(state, "frontend", app_relPath));
117533
117514
  logSafeWriteResult(app_relPath, app_result);
117534
117515
  recordFile(state, "frontend", app_relPath, app_result.hash);
117516
+ const componentRegistryTs = `/**
117517
+ * Component Registry
117518
+ *
117519
+ * Auto-generated by SmartStack MCP - DO NOT EDIT MANUALLY
117520
+ * Run \`scaffold_routes\` to regenerate with your project's pages.
117521
+ */
117522
+ import { PageRegistry } from '@atlashub/smartstack';
117523
+
117524
+ // Register your pages here (auto-generated by scaffold_routes):
117525
+ // PageRegistry.register('your.page.key', lazy(() => import('./pages/YourPage').then(m => ({ default: m.YourPage }))));
117526
+ `;
117527
+ const registry_relPath = `${webRelPrefix}/src/extensions/componentRegistry.generated.ts`;
117528
+ const registry_result = await safeWriteFile((0, import_path7.join)(webDir, "src", "extensions", "componentRegistry.generated.ts"), componentRegistryTs, findKnownHash(state, "frontend", registry_relPath));
117529
+ logSafeWriteResult(registry_relPath, registry_result);
117530
+ recordFile(state, "frontend", registry_relPath, registry_result.hash);
117535
117531
  const indexCss = `@import "tailwindcss";
117536
117532
  @source "../node_modules/@atlashub/smartstack/dist/**/*.js";
117537
117533
  @custom-variant dark (&:where(.dark, .dark *));