@atlashub/smartstack-cli 2.7.4 → 2.9.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/package.json
CHANGED
|
@@ -99,6 +99,27 @@ if (entity.UserType == UserType.System || entity.UserType == UserType.LocalAdmin
|
|
|
99
99
|
return BadRequest(new { message = "Cannot modify system accounts" });
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
+
## FORBIDDEN: Temporary Files and Scripts (ALL SKILLS)
|
|
103
|
+
|
|
104
|
+
> **ABSOLUTE PROHIBITION: NEVER create temporary files, scripts, or helper files.**
|
|
105
|
+
|
|
106
|
+
This includes but is not limited to:
|
|
107
|
+
- `.ps1`, `.sh`, `.bat`, `.cmd` scripts
|
|
108
|
+
- `temp-*`, `tmp-*`, `helper-*` files
|
|
109
|
+
- Any file created solely to discover types, scan DLLs, or read metadata
|
|
110
|
+
|
|
111
|
+
**How to discover .NET types WITHOUT scripts:**
|
|
112
|
+
| Need | Tool to Use |
|
|
113
|
+
|------|-------------|
|
|
114
|
+
| Find a class/entity | `Grep` for `class {Name}` in `*.cs` files |
|
|
115
|
+
| Find services/interfaces | `Glob` for `**/I*Service.cs` in Application layer |
|
|
116
|
+
| Find NuGet packages | `Read` the `.csproj` file directly |
|
|
117
|
+
| Find existing entities | `Glob` for `**/*.cs` in Domain layer |
|
|
118
|
+
| Validate conventions | MCP `validate_conventions` tool |
|
|
119
|
+
| Cannot find after 2 tries | **ASK the user** |
|
|
120
|
+
|
|
121
|
+
**If you catch yourself about to create a script file: STOP. Use the tools above instead.**
|
|
122
|
+
|
|
102
123
|
## Common Validation Checklist
|
|
103
124
|
|
|
104
125
|
```
|
|
@@ -179,6 +179,26 @@ await _workflowService.TriggerAsync("{entity}.created", new Dictionary<string, o
|
|
|
179
179
|
| EntityCard for cards | Manual cards with divs |
|
|
180
180
|
| DataTable for tables | Sequential GUIDs |
|
|
181
181
|
|
|
182
|
+
### FORBIDDEN ACTIONS (BLOCKING)
|
|
183
|
+
|
|
184
|
+
> **NEVER create temporary files, scripts, or helper files of any kind.**
|
|
185
|
+
|
|
186
|
+
| FORBIDDEN | USE INSTEAD |
|
|
187
|
+
|-----------|-------------|
|
|
188
|
+
| Creating `.ps1` scripts | `Grep` tool to search `.cs` files |
|
|
189
|
+
| Creating `.sh` / `.bat` scripts | `Glob` tool to find files by pattern |
|
|
190
|
+
| Creating `temp-*` files | `Read` tool to inspect file contents |
|
|
191
|
+
| Scanning DLLs / assemblies | Search source `.cs` files directly |
|
|
192
|
+
| Running `dotnet` reflection commands | MCP `validate_conventions` tool |
|
|
193
|
+
| Any file not part of the final deliverable | Ask the user if information is missing |
|
|
194
|
+
|
|
195
|
+
**Type Discovery Rules:**
|
|
196
|
+
- To find base classes: `Grep` for `class BaseEntity` or `class {Name}` in `*.cs` files
|
|
197
|
+
- To find existing services: `Glob` for `**/I*Service.cs` in the Application layer
|
|
198
|
+
- To find NuGet packages: `Read` the `.csproj` files directly
|
|
199
|
+
- To find existing entities: `Glob` for `**/*.cs` in the Domain layer
|
|
200
|
+
- If a type cannot be found after 2 search attempts: **ASK the user**, do NOT create scripts
|
|
201
|
+
|
|
182
202
|
## ASSOCIATED FILES
|
|
183
203
|
|
|
184
204
|
### Step Files (ACTIVE - Use These)
|
|
@@ -40,22 +40,28 @@ From previous steps:
|
|
|
40
40
|
|
|
41
41
|
## EXECUTION SEQUENCE
|
|
42
42
|
|
|
43
|
-
### 1. Generate
|
|
43
|
+
### 1. Generate Frontend Pages (conventions-compliant)
|
|
44
44
|
|
|
45
45
|
```
|
|
46
46
|
Tool: mcp__smartstack__scaffold_extension
|
|
47
47
|
Args:
|
|
48
|
-
type: "
|
|
48
|
+
type: "page"
|
|
49
49
|
name: "{entity_name}"
|
|
50
50
|
options:
|
|
51
|
+
navRoute: "{full_path}"
|
|
51
52
|
outputPath: "web/src/pages/{context}/{application}/{module}"
|
|
52
53
|
dryRun: false
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
This generates:
|
|
56
|
-
- `{EntityName}Page.tsx`
|
|
57
|
-
- `{EntityName}ListView.tsx`
|
|
58
|
-
- `
|
|
56
|
+
This generates (all natively compliant with /ui-components conventions):
|
|
57
|
+
- `{EntityName}Page.tsx` — List page wrapper with i18n
|
|
58
|
+
- `{EntityName}ListView.tsx` — EntityCard grid + DataTable + ViewToggle + responsive + loading/error/empty states
|
|
59
|
+
- `{EntityName}DetailPage.tsx` — Detail page with back button + pill tabs + info cards
|
|
60
|
+
- `use{EntityName}Preferences.ts` — Preferences hook (viewMode, sorting, filters, columns)
|
|
61
|
+
- i18n files for 4 languages (fr, en, it, de)
|
|
62
|
+
|
|
63
|
+
> **Note:** The `type: "page"` scaffold already includes CSS variables, EntityCard, responsive grid,
|
|
64
|
+
> semantic HTML, memo/useCallback, and all ui-components conventions. No manual corrections needed.
|
|
59
65
|
|
|
60
66
|
### 2. Generate API Client
|
|
61
67
|
|
|
@@ -134,38 +140,16 @@ If the context doesn't have a layout route yet, create one wrapping all child ro
|
|
|
134
140
|
|
|
135
141
|
**Remember:** Also add the routes inside the tenant-prefixed block (`/t/:slug/...`) if it exists.
|
|
136
142
|
|
|
137
|
-
### 4.
|
|
138
|
-
|
|
139
|
-
Create translation files for each language:
|
|
143
|
+
### 4. Verify i18n Files
|
|
140
144
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
```json
|
|
144
|
-
{
|
|
145
|
-
"title": "{labels.fr}",
|
|
146
|
-
"subtitle": "Gestion de {labels.fr}",
|
|
147
|
-
"columns": {
|
|
148
|
-
"code": "Code",
|
|
149
|
-
"name": "Nom",
|
|
150
|
-
"createdAt": "Créé le",
|
|
151
|
-
"actions": "Actions"
|
|
152
|
-
},
|
|
153
|
-
"form": {
|
|
154
|
-
"code": "Code",
|
|
155
|
-
"name": "Nom",
|
|
156
|
-
"submit": "Enregistrer",
|
|
157
|
-
"cancel": "Annuler"
|
|
158
|
-
},
|
|
159
|
-
"messages": {
|
|
160
|
-
"created": "{labels.fr} créé avec succès",
|
|
161
|
-
"updated": "{labels.fr} mis à jour avec succès",
|
|
162
|
-
"deleted": "{labels.fr} supprimé avec succès",
|
|
163
|
-
"error": "Une erreur est survenue"
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
145
|
+
> **Note:** i18n files are now auto-generated by `type: "page"` scaffold (step 1).
|
|
146
|
+
> Verify the 4 language files were created and customize the `title`/`subtitle` with the proper labels.
|
|
167
147
|
|
|
168
|
-
|
|
148
|
+
If the generated translations need customization (e.g., replacing generic title with `{labels.fr}`):
|
|
149
|
+
- `i18n/locales/fr/{entityCode}.json` → set `"title": "{labels.fr}"`
|
|
150
|
+
- `i18n/locales/en/{entityCode}.json` → set `"title": "{labels.en}"`
|
|
151
|
+
- `i18n/locales/it/{entityCode}.json` → set `"title": "{labels.it}"`
|
|
152
|
+
- `i18n/locales/de/{entityCode}.json` → set `"title": "{labels.de}"`
|
|
169
153
|
|
|
170
154
|
### 5. Present Output to User
|
|
171
155
|
|