@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.
- package/dist/index.js +28 -32
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +29 -10
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/skills/apex/references/checks/seed-checks.sh +1 -1
- package/templates/skills/apex/references/core-seed-data.md +39 -21
- package/templates/skills/application/references/application-roles-template.md +14 -8
- package/templates/skills/application/references/provider-template.md +32 -20
- package/templates/skills/application/templates-frontend.md +294 -2
- package/templates/skills/application/templates-seed.md +23 -11
- package/templates/skills/audit-route/SKILL.md +107 -0
- package/templates/skills/audit-route/references/routing-pattern.md +129 -0
- package/templates/skills/audit-route/steps/step-00-init.md +128 -0
- package/templates/skills/audit-route/steps/step-01-inventory.md +157 -0
- package/templates/skills/audit-route/steps/step-02-conformity.md +193 -0
- package/templates/skills/audit-route/steps/step-03-report.md +201 -0
- package/templates/skills/dev-start/SKILL.md +12 -2
- package/templates/skills/efcore/SKILL.md +219 -67
- package/templates/agents/efcore/conflicts.md +0 -114
- package/templates/agents/efcore/db-deploy.md +0 -86
- package/templates/agents/efcore/db-reset.md +0 -98
- package/templates/agents/efcore/db-seed.md +0 -73
- package/templates/agents/efcore/db-status.md +0 -97
- package/templates/agents/efcore/scan.md +0 -124
- package/templates/skills/efcore/references/both-contexts.md +0 -32
- package/templates/skills/efcore/references/destructive-operations.md +0 -38
- package/templates/skills/efcore/steps/db/step-deploy.md +0 -217
- package/templates/skills/efcore/steps/db/step-reset.md +0 -186
- package/templates/skills/efcore/steps/db/step-seed.md +0 -166
- package/templates/skills/efcore/steps/db/step-status.md +0 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +0 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +0 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +0 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +0 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +0 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +0 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +0 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +0 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +0 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +0 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +0 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +0 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +0 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +0 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +0 -174
package/dist/mcp-entry.mjs
CHANGED
|
@@ -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:
|
|
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
|
|
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
|
-
|
|
58596
|
-
|
|
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
|
-
-
|
|
59277
|
+
- App.tsx wiring is complete
|
|
59259
59278
|
|
|
59260
59279
|
Example:
|
|
59261
59280
|
validate_frontend_routes scope="all"
|