@atlashub/smartstack-cli 4.3.0 → 4.5.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
|
@@ -166,6 +166,22 @@ WAIT for the user's response. Store as `{PROJECT_NAME}`.
|
|
|
166
166
|
|
|
167
167
|
Then normalize name into variants (PascalCase.Dot, PascalCase, kebab-case, snake_case, Display Name).
|
|
168
168
|
|
|
169
|
+
### 2c-bis. Compute Final Project Path
|
|
170
|
+
|
|
171
|
+
After collecting root folder and project name, compute the actual project base:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
ROOT_BASENAME=$(basename "{PROJECT_BASE}")
|
|
175
|
+
if [ "$ROOT_BASENAME" != "{PROJECT_NAME}" ]; then
|
|
176
|
+
PROJECT_BASE="{PROJECT_BASE}/{PROJECT_NAME}"
|
|
177
|
+
echo "Project path: $PROJECT_BASE (appended project name)"
|
|
178
|
+
else
|
|
179
|
+
echo "Project path: {PROJECT_BASE} (already includes project name)"
|
|
180
|
+
fi
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Update `{PROJECT_BASE}` with the result. This value is what gets passed to `gitflow-init-clone`.
|
|
184
|
+
|
|
169
185
|
### 2d. Worktree Mode — CALL AskUserQuestion NOW
|
|
170
186
|
|
|
171
187
|
DO NOT SKIP THIS. This question has been skipped in past sessions causing incorrect defaults.
|
|
@@ -195,7 +211,7 @@ All 4 variables MUST have been confirmed by the user (not auto-derived):
|
|
|
195
211
|
| Variable | Required | How to verify |
|
|
196
212
|
|----------|----------|---------------|
|
|
197
213
|
| {REPO_URL} | ✅ | From command arg OR user answered question 2a |
|
|
198
|
-
| {PROJECT_BASE} | ✅ | User answered question 2b
|
|
214
|
+
| {PROJECT_BASE} | ✅ | User answered question 2b, then adjusted by 2c-bis if needed |
|
|
199
215
|
| {PROJECT_NAME} | ✅ | User answered question 2c (NEVER auto-derived) |
|
|
200
216
|
| {WORKTREE_MODE} | ✅ | User answered question 2d (NEVER defaulted to "organized") |
|
|
201
217
|
|
|
@@ -12,7 +12,6 @@ var builder = WebApplication.CreateBuilder(args);
|
|
|
12
12
|
builder.Services.AddSmartStack(builder.Configuration, options =>
|
|
13
13
|
{
|
|
14
14
|
options.EnableDevSeeding = builder.Environment.IsDevelopment();
|
|
15
|
-
options.EnableSwagger = builder.Environment.IsDevelopment();
|
|
16
15
|
});
|
|
17
16
|
|
|
18
17
|
// ===================================================================
|
|
@@ -6,17 +6,15 @@
|
|
|
6
6
|
"AutoMigrate": true,
|
|
7
7
|
"FailOnMigrationError": true,
|
|
8
8
|
"EnableDevSeeding": false,
|
|
9
|
-
"UseAzureStorage": false,
|
|
10
|
-
"UseEntraId": false,
|
|
11
|
-
"EnableSwagger": true,
|
|
12
9
|
"CorsOrigins": [
|
|
13
|
-
"http://localhost:3000",
|
|
14
10
|
"http://localhost:5173",
|
|
15
11
|
"http://localhost:5174",
|
|
16
|
-
"http://localhost:5175"
|
|
12
|
+
"http://localhost:5175",
|
|
13
|
+
"http://localhost:6173"
|
|
17
14
|
]
|
|
18
15
|
},
|
|
19
16
|
"Jwt": {
|
|
17
|
+
"RsaPrivateKeyPem": "",
|
|
20
18
|
"Secret": "{{JwtSecret}}",
|
|
21
19
|
"Issuer": "{{ProjectName}}",
|
|
22
20
|
"Audience": "{{ProjectName}}",
|
|
@@ -27,14 +25,16 @@
|
|
|
27
25
|
"Microsoft": {
|
|
28
26
|
"ClientId": "",
|
|
29
27
|
"ClientSecret": "",
|
|
28
|
+
"SecretExpiresAt": "",
|
|
30
29
|
"CallbackPath": "/api/auth/microsoft/callback"
|
|
31
30
|
},
|
|
32
31
|
"Google": {
|
|
33
32
|
"ClientId": "",
|
|
34
33
|
"ClientSecret": "",
|
|
34
|
+
"SecretExpiresAt": "",
|
|
35
35
|
"CallbackPath": "/api/auth/google/callback"
|
|
36
36
|
},
|
|
37
|
-
"FrontendUrl": "http://localhost:
|
|
37
|
+
"FrontendUrl": "http://localhost:6173"
|
|
38
38
|
},
|
|
39
39
|
"Session": {
|
|
40
40
|
"IdleTimeoutMinutes": 20,
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"EnableValidation": true,
|
|
44
44
|
"RefreshTokenExpirationDays": 7,
|
|
45
45
|
"CleanupBatchSize": 100,
|
|
46
|
-
"MaxConcurrentSessions":
|
|
46
|
+
"MaxConcurrentSessions": 1,
|
|
47
47
|
"CleanupIntervalMinutes": 5
|
|
48
48
|
},
|
|
49
49
|
"Serilog": {
|
|
@@ -82,6 +82,10 @@
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
|
+
"Redis": {
|
|
86
|
+
"Enabled": false,
|
|
87
|
+
"ConnectionString": "localhost:6379"
|
|
88
|
+
},
|
|
85
89
|
"AzureStorage": {
|
|
86
90
|
"UseAzure": false,
|
|
87
91
|
"Normal": {
|
|
@@ -155,6 +159,11 @@
|
|
|
155
159
|
"UseDeltaSync": true,
|
|
156
160
|
"DefaultConflictResolution": "ManualReview",
|
|
157
161
|
"AutoCreateReferences": true,
|
|
162
|
+
"BackgroundSyncEnabled": false,
|
|
163
|
+
"BackgroundSyncIntervalMinutes": 60,
|
|
164
|
+
"MaxGraphQueryPageSize": 999
|
|
165
|
+
},
|
|
166
|
+
"Glpi": {
|
|
158
167
|
"BackgroundSyncEnabled": false,
|
|
159
168
|
"BackgroundSyncIntervalMinutes": 60
|
|
160
169
|
},
|
|
@@ -166,5 +175,23 @@
|
|
|
166
175
|
"SystemTenantName": "Default Workspace",
|
|
167
176
|
"AutoAssignUsersToSystemTenant": true
|
|
168
177
|
},
|
|
178
|
+
"LicenseServer": {
|
|
179
|
+
"BaseUrl": "https://license.atlashub.ch/",
|
|
180
|
+
"ApiKey": "",
|
|
181
|
+
"Enabled": true,
|
|
182
|
+
"HeartbeatIntervalHours": 168,
|
|
183
|
+
"StartupDelaySeconds": 30,
|
|
184
|
+
"TimeoutSeconds": 30,
|
|
185
|
+
"RetryCount": 3,
|
|
186
|
+
"RetryDelaySeconds": 5
|
|
187
|
+
},
|
|
188
|
+
"Security": {
|
|
189
|
+
"LockoutWindowMinutes": 15,
|
|
190
|
+
"MaxFailedAttempts": 5
|
|
191
|
+
},
|
|
192
|
+
"Localization": {
|
|
193
|
+
"DefaultLanguage": "fr",
|
|
194
|
+
"FallbackLanguage": "fr"
|
|
195
|
+
},
|
|
169
196
|
"AllowedHosts": "*"
|
|
170
197
|
}
|
|
@@ -67,6 +67,16 @@ Store as `{PROJECT_NAME}`.
|
|
|
67
67
|
Then normalize into variants: PascalCase.Dot, PascalCase, kebab-case, snake_case, Display Name.
|
|
68
68
|
See [references/init-name-normalization.md](../references/init-name-normalization.md).
|
|
69
69
|
|
|
70
|
+
### 5b. Compute Final Project Path
|
|
71
|
+
|
|
72
|
+
After collecting both root folder and project name, ensure `{PROJECT_BASE}` points to the project-specific directory:
|
|
73
|
+
|
|
74
|
+
- If `basename({PROJECT_BASE})` already equals `{PROJECT_NAME}` → keep as-is (existing repo case)
|
|
75
|
+
- Otherwise → set `{PROJECT_BASE} = {PROJECT_BASE}/{PROJECT_NAME}` (fresh project case)
|
|
76
|
+
|
|
77
|
+
> **Example:** Root `D:/01 - projets/` + name `MyApp` → `PROJECT_BASE = D:/01 - projets/MyApp/`
|
|
78
|
+
> **Example:** Root `D:/01 - projets/MyApp/` + name `MyApp` → stays `D:/01 - projets/MyApp/` (no double nesting)
|
|
79
|
+
|
|
70
80
|
### 6. Question: Worktree Mode
|
|
71
81
|
|
|
72
82
|
Call AskUserQuestion:
|