@atlashub/smartstack-cli 3.34.0 → 3.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/.documentation/init.html +409 -0
- package/dist/index.js +35 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +118 -70
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -2
- package/templates/mcp-scaffolding/controller.cs.hbs +5 -1
- package/templates/skills/apex/SKILL.md +6 -3
- package/templates/skills/apex/references/post-checks.md +225 -0
- package/templates/skills/apex/references/smartstack-api.md +29 -1
- package/templates/skills/apex/references/smartstack-frontend.md +27 -0
- package/templates/skills/apex/references/smartstack-layers.md +18 -2
- package/templates/skills/apex/steps/step-00-init.md +77 -1
- package/templates/skills/apex/steps/step-01-analyze.md +21 -0
- package/templates/skills/apex/steps/step-03-execute.md +94 -5
- package/templates/skills/apex/steps/step-04-examine.md +7 -1
- package/templates/skills/business-analyse/SKILL.md +4 -3
- package/templates/skills/business-analyse/_shared.md +9 -0
- package/templates/skills/business-analyse/schemas/application-schema.json +13 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +190 -34
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +129 -10
- package/templates/skills/business-analyse/steps/step-01b-applications.md +184 -13
- package/templates/skills/business-analyse/steps/step-03c-compile.md +14 -2
- package/templates/skills/business-analyse/steps/step-03d-validate.md +5 -1
- package/templates/skills/documentation/SKILL.md +175 -9
- package/templates/skills/efcore/steps/squash/step-03-create.md +6 -4
- package/templates/skills/gitflow/_shared.md +3 -1
- package/templates/skills/gitflow/steps/step-pr.md +34 -0
- package/templates/skills/ralph-loop/SKILL.md +31 -2
- package/templates/skills/ralph-loop/references/category-rules.md +29 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +85 -2
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -0
- package/templates/skills/ralph-loop/references/team-orchestration.md +331 -14
- package/templates/skills/ralph-loop/steps/step-00-init.md +4 -0
- package/templates/skills/ralph-loop/steps/step-01-task.md +27 -0
- package/templates/skills/ralph-loop/steps/step-02-execute.md +206 -1
- package/templates/skills/ralph-loop/steps/step-05-report.md +19 -0
- package/scripts/health-check.sh +0 -168
- package/scripts/postinstall.js +0 -18
package/.documentation/init.html
CHANGED
|
@@ -92,6 +92,10 @@
|
|
|
92
92
|
<span data-lang="fr">Premiers pas</span>
|
|
93
93
|
<span data-lang="en">First steps</span>
|
|
94
94
|
</a>
|
|
95
|
+
<a href="#wsl-ubuntu" class="sidebar-toc-link">
|
|
96
|
+
<span data-lang="fr">WSL & Ubuntu</span>
|
|
97
|
+
<span data-lang="en">WSL & Ubuntu</span>
|
|
98
|
+
</a>
|
|
95
99
|
</nav>
|
|
96
100
|
</div>
|
|
97
101
|
</div>
|
|
@@ -954,6 +958,411 @@
|
|
|
954
958
|
</ol>
|
|
955
959
|
</section>
|
|
956
960
|
|
|
961
|
+
<!-- ============================================
|
|
962
|
+
8. WSL & UBUNTU & TMUX
|
|
963
|
+
============================================ -->
|
|
964
|
+
<section id="wsl-ubuntu">
|
|
965
|
+
<h2>
|
|
966
|
+
<span data-lang="fr">Environnement Linux sur Windows (WSL)</span>
|
|
967
|
+
<span data-lang="en">Linux Environment on Windows (WSL)</span>
|
|
968
|
+
</h2>
|
|
969
|
+
|
|
970
|
+
<p data-lang="fr">
|
|
971
|
+
SmartStack fonctionne nativement sous Windows, mais l'utilisation d'un <strong>terminal Linux via WSL</strong> (Windows Subsystem for Linux) offre un environnement de developpement plus fluide et performant — meilleur support de Git, scripts bash natifs, et outils comme <code>tmux</code> pour gerer plusieurs sessions.
|
|
972
|
+
</p>
|
|
973
|
+
<p data-lang="en">
|
|
974
|
+
SmartStack works natively on Windows, but using a <strong>Linux terminal via WSL</strong> (Windows Subsystem for Linux) provides a smoother and more performant development environment — better Git support, native bash scripts, and tools like <code>tmux</code> for managing multiple sessions.
|
|
975
|
+
</p>
|
|
976
|
+
|
|
977
|
+
<!-- ── WSL2 Installation ── -->
|
|
978
|
+
<h3>
|
|
979
|
+
<span data-lang="fr">1. Installer WSL2 et Ubuntu</span>
|
|
980
|
+
<span data-lang="en">1. Install WSL2 and Ubuntu</span>
|
|
981
|
+
</h3>
|
|
982
|
+
|
|
983
|
+
<p data-lang="fr">
|
|
984
|
+
Ouvrez un terminal <strong>PowerShell en administrateur</strong> et lancez la commande suivante. Elle installe WSL2 avec Ubuntu comme distribution par defaut :
|
|
985
|
+
</p>
|
|
986
|
+
<p data-lang="en">
|
|
987
|
+
Open a <strong>PowerShell terminal as Administrator</strong> and run the following command. It installs WSL2 with Ubuntu as the default distribution:
|
|
988
|
+
</p>
|
|
989
|
+
|
|
990
|
+
<div class="code-block">
|
|
991
|
+
<button class="copy-btn">Copy</button>
|
|
992
|
+
<pre><code><span class="code-comment"># PowerShell (Administrateur) — installe WSL2 + Ubuntu</span>
|
|
993
|
+
<span class="code-cmd">wsl</span> <span class="code-flag">--install</span></code></pre>
|
|
994
|
+
</div>
|
|
995
|
+
|
|
996
|
+
<p data-lang="fr">
|
|
997
|
+
Redemarrez votre machine apres l'installation. Au premier lancement d'Ubuntu, vous devrez creer un <strong>nom d'utilisateur</strong> et un <strong>mot de passe</strong> Linux (independants de votre compte Windows).
|
|
998
|
+
</p>
|
|
999
|
+
<p data-lang="en">
|
|
1000
|
+
Restart your machine after installation. On first Ubuntu launch, you'll need to create a Linux <strong>username</strong> and <strong>password</strong> (independent from your Windows account).
|
|
1001
|
+
</p>
|
|
1002
|
+
|
|
1003
|
+
<div class="alert alert-info">
|
|
1004
|
+
<span class="alert-icon">💡</span>
|
|
1005
|
+
<div class="alert-content">
|
|
1006
|
+
<p data-lang="fr">
|
|
1007
|
+
Si WSL est deja installe mais avec la version 1, mettez a jour vers WSL2 :
|
|
1008
|
+
<code>wsl --set-default-version 2</code>. WSL2 utilise un vrai noyau Linux et offre de meilleures performances I/O.
|
|
1009
|
+
</p>
|
|
1010
|
+
<p data-lang="en">
|
|
1011
|
+
If WSL is already installed but on version 1, upgrade to WSL2:
|
|
1012
|
+
<code>wsl --set-default-version 2</code>. WSL2 uses a real Linux kernel and offers better I/O performance.
|
|
1013
|
+
</p>
|
|
1014
|
+
</div>
|
|
1015
|
+
</div>
|
|
1016
|
+
|
|
1017
|
+
<p data-lang="fr">Pour verifier que tout fonctionne :</p>
|
|
1018
|
+
<p data-lang="en">To verify everything works:</p>
|
|
1019
|
+
|
|
1020
|
+
<div class="code-block">
|
|
1021
|
+
<button class="copy-btn">Copy</button>
|
|
1022
|
+
<pre><code><span class="code-comment"># PowerShell — verifier la version et la distribution</span>
|
|
1023
|
+
<span class="code-cmd">wsl</span> <span class="code-flag">--list --verbose</span>
|
|
1024
|
+
|
|
1025
|
+
<span class="code-comment"># Resultat attendu :</span>
|
|
1026
|
+
<span class="code-comment"># NAME STATE VERSION</span>
|
|
1027
|
+
<span class="code-comment"># * Ubuntu Running 2</span></code></pre>
|
|
1028
|
+
</div>
|
|
1029
|
+
|
|
1030
|
+
<!-- ── Ubuntu Configuration ── -->
|
|
1031
|
+
<h3>
|
|
1032
|
+
<span data-lang="fr">2. Configurer Ubuntu</span>
|
|
1033
|
+
<span data-lang="en">2. Configure Ubuntu</span>
|
|
1034
|
+
</h3>
|
|
1035
|
+
|
|
1036
|
+
<p data-lang="fr">
|
|
1037
|
+
Une fois dans le terminal Ubuntu, commencez par mettre a jour les paquets systeme, puis installez les outils de developpement essentiels :
|
|
1038
|
+
</p>
|
|
1039
|
+
<p data-lang="en">
|
|
1040
|
+
Once inside the Ubuntu terminal, start by updating system packages, then install essential development tools:
|
|
1041
|
+
</p>
|
|
1042
|
+
|
|
1043
|
+
<div class="code-block">
|
|
1044
|
+
<button class="copy-btn">Copy</button>
|
|
1045
|
+
<pre><code><span class="code-comment"># Mettre a jour les paquets systeme</span>
|
|
1046
|
+
<span class="code-cmd">sudo apt update</span> && <span class="code-cmd">sudo apt upgrade</span> <span class="code-flag">-y</span>
|
|
1047
|
+
|
|
1048
|
+
<span class="code-comment"># Installer les outils de base</span>
|
|
1049
|
+
<span class="code-cmd">sudo apt install</span> <span class="code-flag">-y</span> <span class="code-arg">git curl wget unzip build-essential</span></code></pre>
|
|
1050
|
+
</div>
|
|
1051
|
+
|
|
1052
|
+
<h4>
|
|
1053
|
+
<span data-lang="fr">Installer Node.js (via nvm)</span>
|
|
1054
|
+
<span data-lang="en">Install Node.js (via nvm)</span>
|
|
1055
|
+
</h4>
|
|
1056
|
+
|
|
1057
|
+
<p data-lang="fr">
|
|
1058
|
+
Utilisez <strong>nvm</strong> (Node Version Manager) pour installer Node.js — cela permet de gerer facilement plusieurs versions :
|
|
1059
|
+
</p>
|
|
1060
|
+
<p data-lang="en">
|
|
1061
|
+
Use <strong>nvm</strong> (Node Version Manager) to install Node.js — it allows easy management of multiple versions:
|
|
1062
|
+
</p>
|
|
1063
|
+
|
|
1064
|
+
<div class="code-block">
|
|
1065
|
+
<button class="copy-btn">Copy</button>
|
|
1066
|
+
<pre><code><span class="code-comment"># Installer nvm</span>
|
|
1067
|
+
<span class="code-cmd">curl</span> <span class="code-flag">-o-</span> https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | <span class="code-cmd">bash</span>
|
|
1068
|
+
|
|
1069
|
+
<span class="code-comment"># Recharger le profil</span>
|
|
1070
|
+
<span class="code-cmd">source</span> <span class="code-arg">~/.bashrc</span>
|
|
1071
|
+
|
|
1072
|
+
<span class="code-comment"># Installer la derniere version LTS de Node.js</span>
|
|
1073
|
+
<span class="code-cmd">nvm install</span> <span class="code-flag">--lts</span>
|
|
1074
|
+
|
|
1075
|
+
<span class="code-comment"># Verifier</span>
|
|
1076
|
+
<span class="code-cmd">node</span> <span class="code-flag">--version</span>
|
|
1077
|
+
<span class="code-cmd">npm</span> <span class="code-flag">--version</span></code></pre>
|
|
1078
|
+
</div>
|
|
1079
|
+
|
|
1080
|
+
<h4>
|
|
1081
|
+
<span data-lang="fr">Installer .NET SDK</span>
|
|
1082
|
+
<span data-lang="en">Install .NET SDK</span>
|
|
1083
|
+
</h4>
|
|
1084
|
+
|
|
1085
|
+
<div class="code-block">
|
|
1086
|
+
<button class="copy-btn">Copy</button>
|
|
1087
|
+
<pre><code><span class="code-comment"># Installer le SDK .NET (Ubuntu)</span>
|
|
1088
|
+
<span class="code-cmd">sudo apt install</span> <span class="code-flag">-y</span> <span class="code-arg">dotnet-sdk-10.0</span>
|
|
1089
|
+
|
|
1090
|
+
<span class="code-comment"># Verifier</span>
|
|
1091
|
+
<span class="code-cmd">dotnet</span> <span class="code-flag">--version</span></code></pre>
|
|
1092
|
+
</div>
|
|
1093
|
+
|
|
1094
|
+
<div class="alert alert-warning">
|
|
1095
|
+
<span class="alert-icon">⚠️</span>
|
|
1096
|
+
<div class="alert-content">
|
|
1097
|
+
<p data-lang="fr">
|
|
1098
|
+
Si le paquet <code>dotnet-sdk-10.0</code> n'est pas disponible, ajoutez d'abord le depot Microsoft :
|
|
1099
|
+
</p>
|
|
1100
|
+
<p data-lang="en">
|
|
1101
|
+
If the <code>dotnet-sdk-10.0</code> package is not available, add the Microsoft repository first:
|
|
1102
|
+
</p>
|
|
1103
|
+
<div class="code-block">
|
|
1104
|
+
<button class="copy-btn">Copy</button>
|
|
1105
|
+
<pre><code><span class="code-cmd">wget</span> https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb <span class="code-flag">-O</span> packages-microsoft-prod.deb
|
|
1106
|
+
<span class="code-cmd">sudo dpkg</span> <span class="code-flag">-i</span> packages-microsoft-prod.deb
|
|
1107
|
+
<span class="code-cmd">rm</span> packages-microsoft-prod.deb
|
|
1108
|
+
<span class="code-cmd">sudo apt update</span>
|
|
1109
|
+
<span class="code-cmd">sudo apt install</span> <span class="code-flag">-y</span> <span class="code-arg">dotnet-sdk-10.0</span></code></pre>
|
|
1110
|
+
</div>
|
|
1111
|
+
</div>
|
|
1112
|
+
</div>
|
|
1113
|
+
|
|
1114
|
+
<!-- ── TMUX Installation ── -->
|
|
1115
|
+
<h3>
|
|
1116
|
+
<span data-lang="fr">3. Installer et configurer tmux</span>
|
|
1117
|
+
<span data-lang="en">3. Install and configure tmux</span>
|
|
1118
|
+
</h3>
|
|
1119
|
+
|
|
1120
|
+
<p data-lang="fr">
|
|
1121
|
+
<strong>tmux</strong> (terminal multiplexer) vous permet de diviser votre terminal en plusieurs panneaux, de detacher des sessions et de garder des processus en cours meme si vous fermez votre terminal. C'est particulierement utile pour lancer simultanement le backend .NET, le frontend React et Claude Code.
|
|
1122
|
+
</p>
|
|
1123
|
+
<p data-lang="en">
|
|
1124
|
+
<strong>tmux</strong> (terminal multiplexer) lets you split your terminal into multiple panes, detach sessions and keep processes running even if you close your terminal. It's particularly useful for simultaneously running the .NET backend, React frontend and Claude Code.
|
|
1125
|
+
</p>
|
|
1126
|
+
|
|
1127
|
+
<div class="code-block">
|
|
1128
|
+
<button class="copy-btn">Copy</button>
|
|
1129
|
+
<pre><code><span class="code-comment"># Installer tmux</span>
|
|
1130
|
+
<span class="code-cmd">sudo apt install</span> <span class="code-flag">-y</span> <span class="code-arg">tmux</span>
|
|
1131
|
+
|
|
1132
|
+
<span class="code-comment"># Verifier la version</span>
|
|
1133
|
+
<span class="code-cmd">tmux</span> <span class="code-flag">-V</span></code></pre>
|
|
1134
|
+
</div>
|
|
1135
|
+
|
|
1136
|
+
<!-- ── TMUX Mouse ── -->
|
|
1137
|
+
<h4>
|
|
1138
|
+
<span data-lang="fr">Activer la souris dans tmux</span>
|
|
1139
|
+
<span data-lang="en">Enable mouse in tmux</span>
|
|
1140
|
+
</h4>
|
|
1141
|
+
|
|
1142
|
+
<p data-lang="fr">
|
|
1143
|
+
Par defaut, tmux ne repond pas aux clics de souris. Pour activer le support complet de la souris (clic pour changer de panneau, scroll, redimensionnement, selection de texte), creez ou modifiez le fichier <code>~/.tmux.conf</code> :
|
|
1144
|
+
</p>
|
|
1145
|
+
<p data-lang="en">
|
|
1146
|
+
By default, tmux does not respond to mouse clicks. To enable full mouse support (click to switch panes, scroll, resize, text selection), create or edit the <code>~/.tmux.conf</code> file:
|
|
1147
|
+
</p>
|
|
1148
|
+
|
|
1149
|
+
<div class="code-block">
|
|
1150
|
+
<button class="copy-btn">Copy</button>
|
|
1151
|
+
<pre><code><span class="code-comment"># Creer/editer la configuration tmux</span>
|
|
1152
|
+
<span class="code-cmd">cat</span> << 'EOF' > <span class="code-arg">~/.tmux.conf</span>
|
|
1153
|
+
<span class="code-comment"># ── Activer la souris ──</span>
|
|
1154
|
+
set -g mouse on
|
|
1155
|
+
|
|
1156
|
+
<span class="code-comment"># ── Ameliorer le support des couleurs ──</span>
|
|
1157
|
+
set -g default-terminal "tmux-256color"
|
|
1158
|
+
set -ag terminal-overrides ",xterm-256color:RGB"
|
|
1159
|
+
|
|
1160
|
+
<span class="code-comment"># ── Historique de scroll etendu (10 000 lignes) ──</span>
|
|
1161
|
+
set -g history-limit 10000
|
|
1162
|
+
|
|
1163
|
+
<span class="code-comment"># ── Commencer les indices de fenetres/panneaux a 1 ──</span>
|
|
1164
|
+
set -g base-index 1
|
|
1165
|
+
setw -g pane-base-index 1
|
|
1166
|
+
|
|
1167
|
+
<span class="code-comment"># ── Raccourcis pratiques pour diviser les panneaux ──</span>
|
|
1168
|
+
<span class="code-comment"># Ctrl+b puis | = split vertical</span>
|
|
1169
|
+
bind | split-window -h -c "#{pane_current_path}"
|
|
1170
|
+
<span class="code-comment"># Ctrl+b puis - = split horizontal</span>
|
|
1171
|
+
bind - split-window -v -c "#{pane_current_path}"
|
|
1172
|
+
|
|
1173
|
+
<span class="code-comment"># ── Recharger la config avec Ctrl+b puis r ──</span>
|
|
1174
|
+
bind r source-file ~/.tmux.conf \; display "Config rechargee!"
|
|
1175
|
+
EOF</code></pre>
|
|
1176
|
+
</div>
|
|
1177
|
+
|
|
1178
|
+
<p data-lang="fr">
|
|
1179
|
+
Si tmux est deja en cours d'execution, rechargez la configuration sans le fermer :
|
|
1180
|
+
</p>
|
|
1181
|
+
<p data-lang="en">
|
|
1182
|
+
If tmux is already running, reload the configuration without closing it:
|
|
1183
|
+
</p>
|
|
1184
|
+
|
|
1185
|
+
<div class="code-block">
|
|
1186
|
+
<button class="copy-btn">Copy</button>
|
|
1187
|
+
<pre><code><span class="code-comment"># Depuis l'interieur de tmux : Ctrl+b puis :</span>
|
|
1188
|
+
<span class="code-comment"># Tapez la commande suivante :</span>
|
|
1189
|
+
source-file ~/.tmux.conf
|
|
1190
|
+
|
|
1191
|
+
<span class="code-comment"># Ou si vous avez ajoute le raccourci ci-dessus :</span>
|
|
1192
|
+
<span class="code-comment"># Ctrl+b puis r</span></code></pre>
|
|
1193
|
+
</div>
|
|
1194
|
+
|
|
1195
|
+
<!-- ── TMUX Usage ── -->
|
|
1196
|
+
<h4>
|
|
1197
|
+
<span data-lang="fr">Commandes essentielles tmux</span>
|
|
1198
|
+
<span data-lang="en">Essential tmux commands</span>
|
|
1199
|
+
</h4>
|
|
1200
|
+
|
|
1201
|
+
<p data-lang="fr">
|
|
1202
|
+
Toutes les commandes tmux commencent par le <strong>prefixe</strong> <code>Ctrl+b</code>, suivi d'une touche. Voici les plus utiles :
|
|
1203
|
+
</p>
|
|
1204
|
+
<p data-lang="en">
|
|
1205
|
+
All tmux commands start with the <strong>prefix</strong> <code>Ctrl+b</code>, followed by a key. Here are the most useful ones:
|
|
1206
|
+
</p>
|
|
1207
|
+
|
|
1208
|
+
<div class="table-wrapper">
|
|
1209
|
+
<table>
|
|
1210
|
+
<thead>
|
|
1211
|
+
<tr>
|
|
1212
|
+
<th data-lang="fr">Action</th>
|
|
1213
|
+
<th data-lang="en">Action</th>
|
|
1214
|
+
<th data-lang="fr">Raccourci</th>
|
|
1215
|
+
<th data-lang="en">Shortcut</th>
|
|
1216
|
+
<th>Description</th>
|
|
1217
|
+
</tr>
|
|
1218
|
+
</thead>
|
|
1219
|
+
<tbody>
|
|
1220
|
+
<tr>
|
|
1221
|
+
<td data-lang="fr">Nouvelle session</td>
|
|
1222
|
+
<td data-lang="en">New session</td>
|
|
1223
|
+
<td colspan="2"><code>tmux new -s dev</code></td>
|
|
1224
|
+
<td data-lang="fr">Cree une session nommee "dev"</td>
|
|
1225
|
+
<td data-lang="en">Creates a session named "dev"</td>
|
|
1226
|
+
</tr>
|
|
1227
|
+
<tr>
|
|
1228
|
+
<td data-lang="fr">Detacher la session</td>
|
|
1229
|
+
<td data-lang="en">Detach session</td>
|
|
1230
|
+
<td colspan="2"><code>Ctrl+b d</code></td>
|
|
1231
|
+
<td data-lang="fr">Detache sans fermer (les processus continuent)</td>
|
|
1232
|
+
<td data-lang="en">Detaches without closing (processes keep running)</td>
|
|
1233
|
+
</tr>
|
|
1234
|
+
<tr>
|
|
1235
|
+
<td data-lang="fr">Rattacher la session</td>
|
|
1236
|
+
<td data-lang="en">Reattach session</td>
|
|
1237
|
+
<td colspan="2"><code>tmux attach -t dev</code></td>
|
|
1238
|
+
<td data-lang="fr">Revient a la session "dev"</td>
|
|
1239
|
+
<td data-lang="en">Returns to the "dev" session</td>
|
|
1240
|
+
</tr>
|
|
1241
|
+
<tr>
|
|
1242
|
+
<td data-lang="fr">Split vertical</td>
|
|
1243
|
+
<td data-lang="en">Vertical split</td>
|
|
1244
|
+
<td colspan="2"><code>Ctrl+b |</code></td>
|
|
1245
|
+
<td data-lang="fr">Divise le panneau verticalement</td>
|
|
1246
|
+
<td data-lang="en">Splits the pane vertically</td>
|
|
1247
|
+
</tr>
|
|
1248
|
+
<tr>
|
|
1249
|
+
<td data-lang="fr">Split horizontal</td>
|
|
1250
|
+
<td data-lang="en">Horizontal split</td>
|
|
1251
|
+
<td colspan="2"><code>Ctrl+b -</code></td>
|
|
1252
|
+
<td data-lang="fr">Divise le panneau horizontalement</td>
|
|
1253
|
+
<td data-lang="en">Splits the pane horizontally</td>
|
|
1254
|
+
</tr>
|
|
1255
|
+
<tr>
|
|
1256
|
+
<td data-lang="fr">Naviguer entre panneaux</td>
|
|
1257
|
+
<td data-lang="en">Navigate panes</td>
|
|
1258
|
+
<td colspan="2"><code>Ctrl+b ←↑↓→</code></td>
|
|
1259
|
+
<td data-lang="fr">Fleches directionnelles pour changer de panneau</td>
|
|
1260
|
+
<td data-lang="en">Arrow keys to switch panes</td>
|
|
1261
|
+
</tr>
|
|
1262
|
+
<tr>
|
|
1263
|
+
<td data-lang="fr">Fermer un panneau</td>
|
|
1264
|
+
<td data-lang="en">Close pane</td>
|
|
1265
|
+
<td colspan="2"><code>Ctrl+b x</code></td>
|
|
1266
|
+
<td data-lang="fr">Ferme le panneau actif (confirmation demandee)</td>
|
|
1267
|
+
<td data-lang="en">Closes the active pane (confirmation required)</td>
|
|
1268
|
+
</tr>
|
|
1269
|
+
<tr>
|
|
1270
|
+
<td data-lang="fr">Lister les sessions</td>
|
|
1271
|
+
<td data-lang="en">List sessions</td>
|
|
1272
|
+
<td colspan="2"><code>tmux ls</code></td>
|
|
1273
|
+
<td data-lang="fr">Affiche toutes les sessions actives</td>
|
|
1274
|
+
<td data-lang="en">Shows all active sessions</td>
|
|
1275
|
+
</tr>
|
|
1276
|
+
</tbody>
|
|
1277
|
+
</table>
|
|
1278
|
+
</div>
|
|
1279
|
+
|
|
1280
|
+
<!-- ── Workflow SmartStack with tmux ── -->
|
|
1281
|
+
<h4>
|
|
1282
|
+
<span data-lang="fr">Workflow SmartStack avec tmux</span>
|
|
1283
|
+
<span data-lang="en">SmartStack workflow with tmux</span>
|
|
1284
|
+
</h4>
|
|
1285
|
+
|
|
1286
|
+
<p data-lang="fr">
|
|
1287
|
+
Voici un exemple de session tmux typique pour le developpement SmartStack avec 3 panneaux :
|
|
1288
|
+
</p>
|
|
1289
|
+
<p data-lang="en">
|
|
1290
|
+
Here's a typical tmux session example for SmartStack development with 3 panes:
|
|
1291
|
+
</p>
|
|
1292
|
+
|
|
1293
|
+
<div class="code-block">
|
|
1294
|
+
<button class="copy-btn">Copy</button>
|
|
1295
|
+
<pre><code><span class="code-comment"># Creer une session de developpement</span>
|
|
1296
|
+
<span class="code-cmd">tmux</span> <span class="code-arg">new -s smartstack</span>
|
|
1297
|
+
|
|
1298
|
+
<span class="code-comment"># Panneau 1 : Backend .NET (deja actif)</span>
|
|
1299
|
+
<span class="code-cmd">cd</span> <span class="code-arg">/mnt/d/MyApp/src/MyApp.Api</span>
|
|
1300
|
+
<span class="code-cmd">dotnet watch run</span>
|
|
1301
|
+
|
|
1302
|
+
<span class="code-comment"># Ctrl+b | → Split vertical pour le panneau 2 : Frontend</span>
|
|
1303
|
+
<span class="code-cmd">cd</span> <span class="code-arg">/mnt/d/MyApp/web/myapp-web</span>
|
|
1304
|
+
<span class="code-cmd">npm run dev</span>
|
|
1305
|
+
|
|
1306
|
+
<span class="code-comment"># Ctrl+b - → Split horizontal pour le panneau 3 : Claude Code</span>
|
|
1307
|
+
<span class="code-cmd">cd</span> <span class="code-arg">/mnt/d/MyApp</span>
|
|
1308
|
+
<span class="code-cmd">claude</span></code></pre>
|
|
1309
|
+
</div>
|
|
1310
|
+
|
|
1311
|
+
<!-- SVG: tmux layout -->
|
|
1312
|
+
<div class="svg-diagram">
|
|
1313
|
+
<svg viewBox="0 0 780 240" xmlns="http://www.w3.org/2000/svg" style="font-family: 'Inter', system-ui, sans-serif; width: 100%; max-width: 780px; height: auto; display: block; margin: 1.5rem auto;">
|
|
1314
|
+
<!-- tmux window frame -->
|
|
1315
|
+
<rect x="20" y="10" width="740" height="220" rx="10" fill="#0f172a" stroke="#475569" stroke-width="2"/>
|
|
1316
|
+
|
|
1317
|
+
<!-- Title bar -->
|
|
1318
|
+
<rect x="20" y="10" width="740" height="28" rx="10" fill="#1e293b"/>
|
|
1319
|
+
<rect x="20" y="28" width="740" height="10" fill="#1e293b"/>
|
|
1320
|
+
<circle cx="44" cy="24" r="6" fill="#ef4444"/>
|
|
1321
|
+
<circle cx="64" cy="24" r="6" fill="#eab308"/>
|
|
1322
|
+
<circle cx="84" cy="24" r="6" fill="#22c55e"/>
|
|
1323
|
+
<text x="390" y="28" text-anchor="middle" fill="#8a9bb0" font-size="11">tmux: smartstack</text>
|
|
1324
|
+
|
|
1325
|
+
<!-- Pane 1: Backend (left) -->
|
|
1326
|
+
<rect x="24" y="42" width="360" height="110" fill="#0f172a" stroke="#6366f1" stroke-width="1.5"/>
|
|
1327
|
+
<text x="34" y="60" fill="#6366f1" font-weight="600" font-size="11" data-lang="fr">▌ Backend .NET</text>
|
|
1328
|
+
<text x="34" y="60" fill="#6366f1" font-weight="600" font-size="11" data-lang="en">▌ Backend .NET</text>
|
|
1329
|
+
<text x="34" y="80" fill="#22c55e" font-size="10" font-family="monospace">$ dotnet watch run</text>
|
|
1330
|
+
<text x="34" y="96" fill="#8a9bb0" font-size="10" font-family="monospace">info: Listening on https://localhost:5001</text>
|
|
1331
|
+
<text x="34" y="112" fill="#8a9bb0" font-size="10" font-family="monospace">info: Application started</text>
|
|
1332
|
+
<text x="34" y="140" fill="#475569" font-size="10" font-family="monospace">█</text>
|
|
1333
|
+
|
|
1334
|
+
<!-- Pane 2: Frontend (right) -->
|
|
1335
|
+
<rect x="388" y="42" width="368" height="110" fill="#0f172a" stroke="#06b6d4" stroke-width="1.5"/>
|
|
1336
|
+
<text x="398" y="60" fill="#06b6d4" font-weight="600" font-size="11">▌ Frontend React</text>
|
|
1337
|
+
<text x="398" y="80" fill="#22c55e" font-size="10" font-family="monospace">$ npm run dev</text>
|
|
1338
|
+
<text x="398" y="96" fill="#8a9bb0" font-size="10" font-family="monospace">VITE v6.x ready in 320 ms</text>
|
|
1339
|
+
<text x="398" y="112" fill="#3b82f6" font-size="10" font-family="monospace">Local: http://localhost:5173/</text>
|
|
1340
|
+
<text x="398" y="140" fill="#475569" font-size="10" font-family="monospace">█</text>
|
|
1341
|
+
|
|
1342
|
+
<!-- Pane 3: Claude Code (bottom) -->
|
|
1343
|
+
<rect x="24" y="156" width="732" height="70" fill="#0f172a" stroke="#f97316" stroke-width="1.5"/>
|
|
1344
|
+
<text x="34" y="174" fill="#f97316" font-weight="600" font-size="11">▌ Claude Code</text>
|
|
1345
|
+
<text x="34" y="194" fill="#22c55e" font-size="10" font-family="monospace">$ claude</text>
|
|
1346
|
+
<text x="34" y="210" fill="#c8d0dc" font-size="10" font-family="monospace" data-lang="fr">Claude > Pret a vous aider avec votre projet SmartStack</text>
|
|
1347
|
+
<text x="34" y="210" fill="#c8d0dc" font-size="10" font-family="monospace" data-lang="en">Claude > Ready to help with your SmartStack project</text>
|
|
1348
|
+
</svg>
|
|
1349
|
+
</div>
|
|
1350
|
+
|
|
1351
|
+
<div class="alert alert-info">
|
|
1352
|
+
<span class="alert-icon">💡</span>
|
|
1353
|
+
<div class="alert-content">
|
|
1354
|
+
<h5 data-lang="fr">Acceder a vos fichiers Windows depuis WSL</h5>
|
|
1355
|
+
<h5 data-lang="en">Access your Windows files from WSL</h5>
|
|
1356
|
+
<p data-lang="fr">
|
|
1357
|
+
Vos disques Windows sont montes automatiquement sous <code>/mnt/</code>. Le disque <code>C:</code> est accessible a <code>/mnt/c/</code>, le disque <code>D:</code> a <code>/mnt/d/</code>, etc. Vous pouvez donc travailler directement sur vos projets Windows depuis le terminal Ubuntu.
|
|
1358
|
+
</p>
|
|
1359
|
+
<p data-lang="en">
|
|
1360
|
+
Your Windows drives are automatically mounted under <code>/mnt/</code>. The <code>C:</code> drive is accessible at <code>/mnt/c/</code>, the <code>D:</code> drive at <code>/mnt/d/</code>, etc. You can therefore work directly on your Windows projects from the Ubuntu terminal.
|
|
1361
|
+
</p>
|
|
1362
|
+
</div>
|
|
1363
|
+
</div>
|
|
1364
|
+
</section>
|
|
1365
|
+
|
|
957
1366
|
</div>
|
|
958
1367
|
</main>
|
|
959
1368
|
</div>
|
package/dist/index.js
CHANGED
|
@@ -116791,13 +116791,14 @@ EndGlobal
|
|
|
116791
116791
|
}
|
|
116792
116792
|
];
|
|
116793
116793
|
const smartstackVersion = config.smartStackVersion || null;
|
|
116794
|
-
const prereleaseFlag = config.preview ? " --prerelease" : "";
|
|
116795
116794
|
for (const { project, packages } of nugetPackages) {
|
|
116796
116795
|
for (const pkg2 of packages) {
|
|
116797
116796
|
if (pkg2 === "SmartStack" && smartstackVersion) {
|
|
116798
116797
|
execCommand(`dotnet add "${(0, import_path7.join)(srcDir, project)}" package ${pkg2} --version ${smartstackVersion}`, void 0, dryRun);
|
|
116798
|
+
} else if (pkg2 === "SmartStack" && config.preview) {
|
|
116799
|
+
execCommand(`dotnet add "${(0, import_path7.join)(srcDir, project)}" package ${pkg2} --prerelease`, void 0, dryRun);
|
|
116799
116800
|
} else {
|
|
116800
|
-
execCommand(`dotnet add "${(0, import_path7.join)(srcDir, project)}" package ${pkg2}
|
|
116801
|
+
execCommand(`dotnet add "${(0, import_path7.join)(srcDir, project)}" package ${pkg2}`, void 0, dryRun);
|
|
116801
116802
|
}
|
|
116802
116803
|
}
|
|
116803
116804
|
}
|
|
@@ -126947,6 +126948,7 @@ var LAYER_ORDER = [
|
|
|
126947
126948
|
{ key: "tests", category: "test" }
|
|
126948
126949
|
];
|
|
126949
126950
|
function createTask(ctx, category, description, deps, acceptanceCriteria, filesCreated = [], meta) {
|
|
126951
|
+
const section = resolveSection(ctx.entityToSection, filesCreated, description);
|
|
126950
126952
|
const task = {
|
|
126951
126953
|
id: ctx.nextId++,
|
|
126952
126954
|
description,
|
|
@@ -126962,6 +126964,7 @@ function createTask(ctx, category, description, deps, acceptanceCriteria, filesC
|
|
|
126962
126964
|
validation: null,
|
|
126963
126965
|
error: null,
|
|
126964
126966
|
module: ctx.moduleCode,
|
|
126967
|
+
...section ? { section } : {},
|
|
126965
126968
|
...meta ?? {}
|
|
126966
126969
|
};
|
|
126967
126970
|
ctx.lastIdByCategory[category] = task.id;
|
|
@@ -127218,10 +127221,12 @@ function generateValidationTask(ctx) {
|
|
|
127218
127221
|
}
|
|
127219
127222
|
function generateTasks(prd) {
|
|
127220
127223
|
const moduleCode = prd.project.module;
|
|
127224
|
+
const entityToSection = buildEntityToSectionMap(prd.architecture?.sections ?? []);
|
|
127221
127225
|
const ctx = {
|
|
127222
127226
|
moduleCode,
|
|
127223
127227
|
lastIdByCategory: {},
|
|
127224
|
-
nextId: 1
|
|
127228
|
+
nextId: 1,
|
|
127229
|
+
entityToSection
|
|
127225
127230
|
};
|
|
127226
127231
|
const frontendFiles = [];
|
|
127227
127232
|
const i18nFiles = [];
|
|
@@ -127260,6 +127265,33 @@ function validateTaskIntegrity(tasks) {
|
|
|
127260
127265
|
}
|
|
127261
127266
|
return errors;
|
|
127262
127267
|
}
|
|
127268
|
+
function buildEntityToSectionMap(sections) {
|
|
127269
|
+
const map8 = /* @__PURE__ */ new Map();
|
|
127270
|
+
for (const section of sections) {
|
|
127271
|
+
for (const resource of section.resources ?? []) {
|
|
127272
|
+
if (resource.entity) {
|
|
127273
|
+
map8.set(resource.entity, section.code);
|
|
127274
|
+
}
|
|
127275
|
+
}
|
|
127276
|
+
}
|
|
127277
|
+
return map8;
|
|
127278
|
+
}
|
|
127279
|
+
function resolveSection(entityToSection, filePaths, description) {
|
|
127280
|
+
if (entityToSection.size === 0) return void 0;
|
|
127281
|
+
for (const filePath of filePaths) {
|
|
127282
|
+
const fileName = filePath.split("/").pop()?.replace(/\.cs$|\.tsx?$/, "") ?? "";
|
|
127283
|
+
const entityName = fileName.replace(/(Controller|Service|Validator|Configuration|Dto|Tests?|Page|Api)$/i, "").replace(/^(Create|Update|Delete|Get|List|Detail|Edit)/, "");
|
|
127284
|
+
if (entityName && entityToSection.has(entityName)) {
|
|
127285
|
+
return entityToSection.get(entityName);
|
|
127286
|
+
}
|
|
127287
|
+
}
|
|
127288
|
+
for (const [entity, section] of entityToSection) {
|
|
127289
|
+
if (description.includes(entity)) {
|
|
127290
|
+
return section;
|
|
127291
|
+
}
|
|
127292
|
+
}
|
|
127293
|
+
return void 0;
|
|
127294
|
+
}
|
|
127263
127295
|
function capitalize(s) {
|
|
127264
127296
|
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
127265
127297
|
}
|