@vc-shell/vc-app-skill 2.0.0-alpha.33 → 2.0.0-alpha.34

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 (195) hide show
  1. package/CHANGELOG.md +78 -54
  2. package/README.md +42 -12
  3. package/package.json +4 -4
  4. package/runtime/VERSION +1 -1
  5. package/runtime/agents/api-analyzer.md +31 -16
  6. package/runtime/agents/blade-enhancer.md +15 -9
  7. package/runtime/agents/details-blade-generator.md +47 -31
  8. package/runtime/agents/list-blade-generator.md +21 -37
  9. package/runtime/agents/locales-generator.md +3 -0
  10. package/runtime/agents/migration-agent.md +18 -7
  11. package/runtime/agents/module-analyzer.md +2 -0
  12. package/runtime/agents/module-assembler.md +15 -0
  13. package/runtime/agents/promote-agent.md +15 -4
  14. package/runtime/agents/type-checker.md +11 -0
  15. package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
  16. package/runtime/knowledge/docs/core/api/platform.docs.md +30 -30
  17. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +41 -41
  18. package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +12 -10
  19. package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +11 -14
  20. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +35 -35
  21. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +35 -35
  22. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +15 -15
  23. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +21 -18
  24. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +28 -24
  25. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +90 -61
  26. package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +19 -18
  27. package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +89 -68
  28. package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +27 -25
  29. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
  30. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +43 -47
  31. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +11 -11
  32. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +27 -15
  33. package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +30 -30
  34. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +34 -36
  35. package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +44 -23
  36. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +14 -11
  37. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +47 -38
  38. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +37 -28
  39. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +23 -17
  40. package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +9 -9
  41. package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +42 -42
  42. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +22 -12
  43. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +33 -41
  44. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +16 -16
  45. package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +28 -0
  46. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +32 -24
  47. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +32 -11
  48. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +22 -13
  49. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +7 -7
  50. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +32 -24
  51. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +21 -17
  52. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +24 -24
  53. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +28 -31
  54. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +43 -24
  55. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +68 -48
  56. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +19 -19
  57. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +42 -47
  58. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +10 -4
  59. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +35 -20
  60. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +36 -35
  61. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +38 -38
  62. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +79 -62
  63. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +10 -10
  64. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +21 -23
  65. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +91 -83
  66. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +10 -16
  67. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +9 -9
  68. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +65 -22
  69. package/runtime/knowledge/docs/core/services/services.docs.md +19 -22
  70. package/runtime/knowledge/docs/core/types/types.docs.md +40 -40
  71. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +27 -27
  72. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +23 -23
  73. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +22 -25
  74. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +64 -64
  75. package/runtime/knowledge/docs/injection-keys.docs.md +52 -51
  76. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +9 -9
  77. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +23 -43
  78. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +5 -5
  79. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +5 -5
  80. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +8 -7
  81. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -7
  82. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +8 -7
  83. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +29 -13
  84. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +13 -16
  85. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +1 -7
  86. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +5 -5
  87. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +1 -1
  88. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  89. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -9
  90. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +11 -17
  91. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +34 -65
  92. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +16 -26
  93. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +2 -2
  94. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -9
  95. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +30 -40
  96. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +26 -19
  97. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +15 -12
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +15 -26
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +21 -19
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +83 -67
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +100 -59
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +28 -11
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +20 -17
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +26 -17
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +30 -32
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +25 -48
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +29 -24
  108. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +23 -15
  109. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +22 -13
  110. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +33 -18
  111. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +56 -15
  112. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +28 -15
  113. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +40 -20
  114. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +25 -14
  115. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +40 -14
  116. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +54 -42
  117. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +17 -17
  118. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +21 -21
  119. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +23 -10
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +55 -44
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +23 -20
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +92 -65
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +22 -36
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +65 -23
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +52 -73
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +91 -85
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +38 -42
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +56 -73
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +61 -27
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +42 -50
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +35 -64
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +38 -41
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +109 -131
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +47 -88
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +50 -64
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +29 -24
  137. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +32 -28
  138. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +57 -65
  139. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +28 -26
  140. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +55 -20
  141. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +21 -35
  142. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +38 -33
  143. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +72 -83
  144. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +21 -16
  145. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +55 -64
  146. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +51 -70
  147. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +58 -57
  148. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +49 -26
  149. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +82 -28
  150. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +90 -75
  151. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +99 -48
  152. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +548 -367
  153. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +35 -52
  154. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +33 -62
  155. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +17 -23
  156. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +109 -68
  157. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +82 -44
  158. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +8 -8
  159. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +164 -0
  160. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +34 -26
  161. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +48 -40
  162. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +30 -17
  163. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +40 -29
  164. package/runtime/knowledge/examples/offers-module.md +15 -13
  165. package/runtime/knowledge/examples/team-module.md +82 -119
  166. package/runtime/knowledge/examples/videos-module.md +44 -17
  167. package/runtime/knowledge/index.md +22 -0
  168. package/runtime/knowledge/migration-prompts/blade-form-migration.md +17 -8
  169. package/runtime/knowledge/migration-prompts/blade-props-migration.md +1 -2
  170. package/runtime/knowledge/migration-prompts/datatable-migration.md +801 -0
  171. package/runtime/knowledge/migration-prompts/icon-migration.md +97 -0
  172. package/runtime/knowledge/migration-prompts/manual-migration-audit.md +117 -0
  173. package/runtime/knowledge/migration-prompts/notifications-migration.md +8 -3
  174. package/runtime/knowledge/migration-prompts/nswag-migration.md +25 -29
  175. package/runtime/knowledge/migration-prompts/use-assets-migration.md +164 -0
  176. package/runtime/knowledge/migration-prompts/use-data-table-pagination-migration.md +176 -0
  177. package/runtime/knowledge/migration-prompts/widgets-migration.md +48 -27
  178. package/runtime/knowledge/patterns/assets-management.md +20 -20
  179. package/runtime/knowledge/patterns/blade-navigation.md +7 -14
  180. package/runtime/knowledge/patterns/blade-widget.md +19 -17
  181. package/runtime/knowledge/patterns/child-blade-flow.md +19 -7
  182. package/runtime/knowledge/patterns/composable-details.md +20 -50
  183. package/runtime/knowledge/patterns/composable-list.md +43 -31
  184. package/runtime/knowledge/patterns/dashboard-widget.md +14 -16
  185. package/runtime/knowledge/patterns/datatable-pattern.md +521 -0
  186. package/runtime/knowledge/patterns/details-blade-pattern.md +78 -116
  187. package/runtime/knowledge/patterns/extension-points-usage.md +53 -44
  188. package/runtime/knowledge/patterns/form-validation.md +28 -64
  189. package/runtime/knowledge/patterns/list-blade-pattern.md +33 -21
  190. package/runtime/knowledge/patterns/module-structure.md +7 -1
  191. package/runtime/knowledge/patterns/multilanguage-fields.md +8 -14
  192. package/runtime/knowledge/patterns/notification-template.md +21 -14
  193. package/runtime/knowledge/patterns/signalr-notifications.md +30 -32
  194. package/runtime/knowledge/patterns/toolbar-pattern.md +18 -20
  195. package/runtime/vc-app.md +241 -62
package/runtime/vc-app.md CHANGED
@@ -45,16 +45,16 @@ Store `DOCS_ROOT` for passing to subagents.
45
45
 
46
46
  Parse `$ARGUMENTS` to determine the subcommand:
47
47
 
48
- | Arguments pattern | Route to |
49
- |---|---|
50
- | `create ...` | Section: `/vc-app create` |
51
- | `connect ...` | Section: `/vc-app connect` |
52
- | `add-module <name>` | Section: `/vc-app add-module` |
53
- | `generate ...` | Section: `/vc-app generate` |
54
- | `promote <moduleName>` | Section: `/vc-app promote` |
55
- | `design ...` | Section: `/vc-app design` |
56
- | `migrate` | Section: `/vc-app migrate` |
57
- | empty / `help` / `--help` | Section: Help |
48
+ | Arguments pattern | Route to |
49
+ | ------------------------- | ----------------------------- |
50
+ | `create ...` | Section: `/vc-app create` |
51
+ | `connect ...` | Section: `/vc-app connect` |
52
+ | `add-module <name>` | Section: `/vc-app add-module` |
53
+ | `generate ...` | Section: `/vc-app generate` |
54
+ | `promote <moduleName>` | Section: `/vc-app promote` |
55
+ | `design ...` | Section: `/vc-app design` |
56
+ | `migrate` | Section: `/vc-app migrate` |
57
+ | empty / `help` / `--help` | Section: Help |
58
58
 
59
59
  If no arguments match, show the help section.
60
60
 
@@ -161,7 +161,7 @@ Interactive platform connection dialog. This configures environment variables an
161
161
  ### Dialog
162
162
 
163
163
  1. **Ask the user:** What is the platform URL? (e.g., `https://admin.example.com` or `https://localhost:5001`)
164
- 2. **Ask the user:** Which platform modules do you need API clients for? (comma-separated, e.g., `VirtoCommerce.Orders,VirtoCommerce.Catalog,VirtoCommerce.MarketplaceVendor`)
164
+ 2. **Ask the user:** Which platform modules do you need API clients for? (comma-separated, e.g., `VirtoCommerce.Orders,VirtoCommerce.Catalog,VirtoCommerce.MyModule`)
165
165
 
166
166
  ### Execution
167
167
 
@@ -196,16 +196,19 @@ cat package.json | grep -q "generate-api-client"
196
196
  ```
197
197
 
198
198
  If yes, run:
199
+
199
200
  ```bash
200
201
  yarn generate-api-client
201
202
  ```
202
203
 
203
204
  If no, run:
205
+
204
206
  ```bash
205
207
  npx @vc-shell/api-client-generator
206
208
  ```
207
209
 
208
210
  If the command fails, show stderr and suggest:
211
+
209
212
  - Check that the platform URL is reachable
210
213
  - Check that the module names are correct
211
214
  - Try running with `--verbose` for more details
@@ -219,6 +222,7 @@ npx vue-tsc --noEmit
219
222
  ```
220
223
 
221
224
  If `vue-tsc` is not available, fall back to:
225
+
222
226
  ```bash
223
227
  npx tsc --noEmit
224
228
  ```
@@ -308,6 +312,7 @@ Full intent-driven module generation. This is the main power feature — it walk
308
312
  - Menu priority? (default: 100)
309
313
 
310
314
  Store all collected values:
315
+
311
316
  ```
312
317
  INTENT = {
313
318
  description: string,
@@ -334,10 +339,12 @@ After collecting `INTENT.moduleName`, check if `src/modules/<moduleName>/` alrea
334
339
  ### Phase 2: Data Source (Interactive Dialog)
335
340
 
336
341
  **Auto-detect no-API mode:** Before asking, check whether an API client directory exists:
342
+
337
343
  - Check `src/api_client/` relative to project root
338
344
  - Check the value of `APP_API_CLIENT_DIRECTORY` from `.env`
339
345
 
340
346
  If neither exists and `APP_API_CLIENT_DIRECTORY` is not set, skip the "Should this module use an API client?" question — go directly to mock mode (Phase 3 with empty data source). Show a note to the user:
347
+
341
348
  ```
342
349
  No API client found — generating with mock data.
343
350
  ```
@@ -357,6 +364,7 @@ If an API client directory does exist, proceed with the interactive dialog:
357
364
  > Read the file `{SKILL_DIR}/agents/api-analyzer.md` for your full instructions.
358
365
  >
359
366
  > Execute with these parameters:
367
+ >
360
368
  > ```json
361
369
  > {
362
370
  > "apiClientDir": "<resolved api_client directory absolute path>",
@@ -367,10 +375,11 @@ If an API client directory does exist, proceed with the interactive dialog:
367
375
  > Return the structured JSON result.
368
376
 
369
377
  3. **Present discovered entities to the user.** Show a numbered list:
378
+
370
379
  ```
371
380
  Discovered API entities:
372
- 1. SellerUser (VcmpSellerSecurityClient) — search, get, create, update, delete
373
- 2. TeamMember (VcmpSellerSecurityClient) — search, get, update
381
+ 1. User (UserSecurityClient) — search, get, create, update, delete
382
+ 2. TeamMember (UserSecurityClient) — search, get, update
374
383
  ...
375
384
  Select an entity (number):
376
385
  ```
@@ -378,8 +387,9 @@ If an API client directory does exist, proceed with the interactive dialog:
378
387
  4. **Ask the user:** Which entity to use? (number from list)
379
388
 
380
389
  5. **Read the entity's type file** to discover available fields. Use Grep to find the entity class definition and extract its properties. Present them to the user:
390
+
381
391
  ```
382
- Fields on SellerUser:
392
+ Fields on User:
383
393
  1. id (string)
384
394
  2. userName (string)
385
395
  3. email (string)
@@ -400,15 +410,16 @@ If an API client directory does exist, proceed with the interactive dialog:
400
410
  - Default: all available operations checked
401
411
  ```
402
412
  Available CRUD methods:
403
- [x] search (searchSellerUsers)
404
- [x] get (getSellerUser)
405
- [x] create (createSellerUser)
406
- [x] update (updateSellerUser)
407
- [x] delete (deleteSellerUsers)
413
+ [x] search (searchUsers)
414
+ [x] get (getUser)
415
+ [x] create (createUser)
416
+ [x] update (updateUser)
417
+ [x] delete (deleteUsers)
408
418
  Uncheck any you don't need (comma-separated numbers to toggle, or Enter to accept all):
409
419
  ```
410
420
 
411
421
  Store all collected values:
422
+
412
423
  ```
413
424
  DATA_SOURCE = {
414
425
  clientClass: string,
@@ -428,11 +439,13 @@ DATA_SOURCE = {
428
439
  ### Phase 3: Generation (Dispatch Subagents)
429
440
 
430
441
  Determine the target directory for the module:
442
+
431
443
  ```
432
444
  TARGET_DIR = <project root>/src/modules/{INTENT.moduleName}
433
445
  ```
434
446
 
435
447
  Create the directory if it doesn't exist:
448
+
436
449
  ```bash
437
450
  mkdir -p {TARGET_DIR}/pages {TARGET_DIR}/composables {TARGET_DIR}/locales
438
451
  ```
@@ -448,6 +461,7 @@ Dispatch the `list-blade-generator` agent:
448
461
  > Read the file `{SKILL_DIR}/agents/list-blade-generator.md` for your full instructions.
449
462
  >
450
463
  > Execute with these parameters:
464
+ >
451
465
  > ```json
452
466
  > {
453
467
  > "moduleName": "{INTENT.moduleName}",
@@ -474,6 +488,7 @@ Dispatch the `details-blade-generator` agent:
474
488
  > Read the file `{SKILL_DIR}/agents/details-blade-generator.md` for your full instructions.
475
489
  >
476
490
  > Execute with these parameters:
491
+ >
477
492
  > ```json
478
493
  > {
479
494
  > "moduleName": "{INTENT.moduleName}",
@@ -507,6 +522,7 @@ After blade generators complete (wait for both if parallel), dispatch the `local
507
522
  > Read the file `{SKILL_DIR}/agents/locales-generator.md` for your full instructions.
508
523
  >
509
524
  > Execute with these parameters:
525
+ >
510
526
  > ```json
511
527
  > {
512
528
  > "moduleName": "{INTENT.moduleName}",
@@ -526,6 +542,7 @@ After locales are generated, dispatch the `module-assembler` agent:
526
542
  > Read the file `{SKILL_DIR}/agents/module-assembler.md` for your full instructions.
527
543
  >
528
544
  > Execute with these parameters:
545
+ >
529
546
  > ```json
530
547
  > {
531
548
  > "moduleName": "{INTENT.moduleName}",
@@ -577,6 +594,7 @@ Populate `mockFields.columns` from the column definitions used to dispatch the l
577
594
  3. Add `.vc-app-prototype.json` to `GENERATED_FILES`.
578
595
 
579
596
  4. Append to the Phase 4 summary output:
597
+
580
598
  ```
581
599
  Module generated with mock data.
582
600
  When your API is ready, run: /vc-app connect && /vc-app promote <moduleName>
@@ -591,6 +609,7 @@ After all generation is complete, dispatch the `type-checker` agent:
591
609
  > Read the file `{SKILL_DIR}/agents/type-checker.md` for your full instructions.
592
610
  >
593
611
  > Execute with these parameters:
612
+ >
594
613
  > ```json
595
614
  > {
596
615
  > "projectRoot": "<project root absolute path>",
@@ -642,6 +661,7 @@ Dispatch `module-analyzer` agent:
642
661
  > Read the file `{SKILL_DIR}/agents/module-analyzer.md` for your full instructions.
643
662
  >
644
663
  > Execute with these parameters:
664
+ >
645
665
  > ```json
646
666
  > {
647
667
  > "targetDir": "<absolute path to module directory>"
@@ -651,6 +671,7 @@ Dispatch `module-analyzer` agent:
651
671
  Store the result as `MODULE_ANALYSIS`.
652
672
 
653
673
  Present the module summary to the user:
674
+
654
675
  ```
655
676
  Module "<moduleName>" analysis:
656
677
  Blades: <list blade names and types>
@@ -664,6 +685,7 @@ Ask: **"What would you like to change? (describe in free text)"**
664
685
  #### Phase E2: Intent Parsing
665
686
 
666
687
  Parse the user's free-text description into an action plan. Map to action types:
688
+
667
689
  - Mentions of "column", "add to list/table" → `add-column`
668
690
  - Mentions of "field", "input", "form" → `add-field`
669
691
  - Mentions of "logic", "validation", "computed", "watcher" → `add-logic`
@@ -672,6 +694,7 @@ Parse the user's free-text description into an action plan. Map to action types:
672
694
  - Mentions of "new blade", "new list", "new details" → new blade creation (uses existing generators)
673
695
 
674
696
  Present the parsed action plan to the user for confirmation:
697
+
675
698
  ```
676
699
  Proposed changes:
677
700
  1. [add-column] Add "email" column to team-list after "name"
@@ -692,6 +715,7 @@ Confirm? (y to proceed, or describe corrections)
692
715
  For each action in the confirmed plan:
693
716
 
694
717
  **New blades** → dispatch `list-blade-generator` or `details-blade-generator` with `existingModule` context:
718
+
695
719
  - `existingModule.blades` = blade names from `MODULE_ANALYSIS.blades`
696
720
  - `existingModule.localePrefix` = derive from existing locale keys
697
721
  - `existingModule.indexPath` = path to module's `index.ts`
@@ -706,6 +730,7 @@ Then dispatch `module-assembler` with `mode: "append"`.
706
730
  > Read the file `{SKILL_DIR}/agents/blade-enhancer.md` for your full instructions.
707
731
  >
708
732
  > Execute with these parameters:
733
+ >
709
734
  > ```json
710
735
  > {
711
736
  > "targetDir": "<absolute path to module>",
@@ -718,6 +743,7 @@ Then dispatch `module-assembler` with `mode: "append"`.
718
743
  > ```
719
744
 
720
745
  Handle agent status:
746
+
721
747
  - `DONE` → proceed to Phase E5
722
748
  - `DONE_WITH_CONCERNS` → show concerns to user, proceed to Phase E5
723
749
  - `BLOCKED` → show error, stop
@@ -727,6 +753,7 @@ Handle agent status:
727
753
  Dispatch `type-checker` agent to verify TypeScript compiles.
728
754
 
729
755
  Present summary of all changes:
756
+
730
757
  ```
731
758
  Module "<moduleName>" enhanced:
732
759
 
@@ -751,10 +778,13 @@ Transition a prototype module from mock data to a real API client. This command
751
778
  1. **Parse arguments.** Extract the module name from `$ARGUMENTS`. Format: `promote <moduleName>`. If no name provided, ask the user.
752
779
 
753
780
  2. **Read prototype metadata.** Look for `.vc-app-prototype.json` in `src/modules/<moduleName>/`:
781
+
754
782
  ```bash
755
783
  cat src/modules/<moduleName>/.vc-app-prototype.json
756
784
  ```
785
+
757
786
  If the file does not exist, stop with an error:
787
+
758
788
  ```
759
789
  Error: Module '<moduleName>' is not a prototype. Only modules generated without an API client can be promoted.
760
790
  Run /vc-app generate with an API client to create a production module directly.
@@ -771,6 +801,7 @@ Transition a prototype module from mock data to a real API client. This command
771
801
  ```
772
802
 
773
803
  Store:
804
+
774
805
  ```
775
806
  MODULE_DIR = <project root>/src/modules/<moduleName>
776
807
  PROTOTYPE = <parsed .vc-app-prototype.json>
@@ -782,6 +813,7 @@ API_CLIENT_DIR = <resolved api_client directory>
782
813
  Follow the same interactive dialog flow as `/vc-app generate` Phase 2 — dispatch the `api-analyzer` agent, present entities to the user, let them select an entity, discover fields, select columns/form fields, and choose CRUD methods.
783
814
 
784
815
  Key differences from generate:
816
+
785
817
  - Only collect **columns** if `PROTOTYPE.intent.bladeTypes` includes `"list"`.
786
818
  - Only collect **form fields** if `PROTOTYPE.intent.bladeTypes` includes `"details"`.
787
819
 
@@ -797,6 +829,7 @@ Map prototype mock fields to real API entity fields.
797
829
  - **Unmatched**: no reasonable API counterpart found
798
830
 
799
831
  2. **Present mapping table** to the user for confirmation:
832
+
800
833
  ```
801
834
  Field Mapping (mock → API):
802
835
  name → displayName (semantic match)
@@ -836,6 +869,7 @@ Dispatch the `promote-agent` to rewrite module files:
836
869
  > Read the file `{SKILL_DIR}/agents/promote-agent.md` for your full instructions.
837
870
  >
838
871
  > Execute with these parameters:
872
+ >
839
873
  > ```json
840
874
  > {
841
875
  > "targetDir": "<absolute path to module directory>",
@@ -848,6 +882,7 @@ Dispatch the `promote-agent` to rewrite module files:
848
882
  > ```
849
883
 
850
884
  Handle agent status:
885
+
851
886
  - **DONE** — Proceed to Phase 5.
852
887
  - **DONE_WITH_CONCERNS** — Show concerns to the user, then proceed to Phase 5.
853
888
  - **BLOCKED** — Show the error to the user. Do NOT proceed. Suggest fixing the issue and re-running `/vc-app promote <moduleName>`.
@@ -861,6 +896,7 @@ Handle agent status:
861
896
  > Read the file `{SKILL_DIR}/agents/type-checker.md` for your full instructions.
862
897
  >
863
898
  > Execute with these parameters:
899
+ >
864
900
  > ```json
865
901
  > {
866
902
  > "projectRoot": "<project root absolute path>",
@@ -930,10 +966,12 @@ After acquiring the prompt, ask the user for the platform address:
930
966
  - **If the user skips** (says "skip", "no", "none", empty, "later", etc.) → set `PLATFORM_URL = null`
931
967
 
932
968
  This URL is needed for:
969
+
933
970
  - Writing `.env.local` with `APP_PLATFORM_URL` so the app can authenticate against the platform
934
971
  - Enabling API client generation (via `/vc-app connect` flow) during or after design
935
972
 
936
973
  If the prompt is very short (under 20 words) or too abstract (no concrete entities/data mentioned), ask for clarification:
974
+
937
975
  ```
938
976
  Your description is quite abstract. To generate modules, I need to know what entities/data the app manages.
939
977
 
@@ -948,43 +986,47 @@ Could you describe:
948
986
  Parse `DESIGN_PROMPT` into a structured application plan. Apply these parsing rules:
949
987
 
950
988
  **Entity extraction:**
989
+
951
990
  - Nouns that represent manageable data objects → modules (e.g., "tenants", "subscriptions", "agents")
952
991
  - Module names: always kebab-case english, derived from entity names, regardless of prompt language
953
992
 
954
993
  **Field extraction:**
994
+
955
995
  - Concrete field mentions ("subscription token key", "trial period", "email") → columns or formFields with inferred types
956
996
  - Type inference — use the most specific type possible:
957
997
 
958
- | Signal in prompt | Field type | Component (details) | Column type (list) |
959
- |---|---|---|---|
960
- | date, deadline, birthday, created, expires | `date-time` | `VcDatePicker` | `date-ago` |
961
- | is*, has*, can*, enabled, active, published | `boolean` | `VcSwitch` | `status-icon` |
962
- | price, cost, amount, total, salary, budget, fee | `currency` | `VcInputCurrency` | `money` |
963
- | count, quantity, age, priority (numeric) | `number` | `VcInput type="number"` | `number` |
964
- | description, notes, comment, bio, summary | `text` | `VcTextarea` | — (not in list) |
965
- | body, content, html, article, template | `rich-text` | `VcEditor` | — (not in list) |
966
- | status, state, type, category (from fixed set) | `enum` | `VcSelect` or `VcRadioGroup` | `status` |
967
- | tags, labels, categories, roles, permissions | `multi-select` | `VcMultivalue` | — (not in list) |
968
- | avatar, logo, photo, thumbnail, banner | `image` | `VcImageUpload` | `image` |
969
- | photos, images, screenshots, gallery | `gallery` | `VcGallery` | — (not in list) |
970
- | file, attachment, document, contract | `file` | `VcFileUpload` | — (not in list) |
971
- | rating, score, stars | `rating` | `VcRating` | — (custom slot) |
972
- | color, colour, brandColor | `color` | `VcColorInput` | — (custom slot) |
973
- | discount, opacity, percentage, progress | `range` | `VcSlider` | — (custom slot) |
974
- | email | `string` | `VcInput` (rules="email") | plain text |
975
- | phone, tel | `string` | `VcInput` (type="tel") | plain text |
976
- | url, website, link | `string` | `VcInput` (type="url") | plain text |
977
- | everything else | `string` | `VcInput` | plain text |
998
+ | Signal in prompt | Field type | Component (details) | Column type (list) |
999
+ | ----------------------------------------------- | -------------- | ---------------------------- | ------------------ |
1000
+ | date, deadline, birthday, created, expires | `date-time` | `VcDatePicker` | `date-ago` |
1001
+ | is*, has*, can\*, enabled, active, published | `boolean` | `VcSwitch` | `status-icon` |
1002
+ | price, cost, amount, total, salary, budget, fee | `currency` | `VcInputCurrency` | `money` |
1003
+ | count, quantity, age, priority (numeric) | `number` | `VcInput type="number"` | `number` |
1004
+ | description, notes, comment, bio, summary | `text` | `VcTextarea` | — (not in list) |
1005
+ | body, content, html, article, template | `rich-text` | `VcEditor` | — (not in list) |
1006
+ | status, state, type, category (from fixed set) | `enum` | `VcSelect` or `VcRadioGroup` | `status` |
1007
+ | tags, labels, categories, roles, permissions | `multi-select` | `VcMultivalue` | — (not in list) |
1008
+ | avatar, logo, photo, thumbnail, banner | `image` | `VcImageUpload` | `image` |
1009
+ | photos, images, screenshots, gallery | `gallery` | `VcGallery` | — (not in list) |
1010
+ | file, attachment, document, contract | `file` | `VcFileUpload` | — (not in list) |
1011
+ | rating, score, stars | `rating` | `VcRating` | — (custom slot) |
1012
+ | color, colour, brandColor | `color` | `VcColorInput` | — (custom slot) |
1013
+ | discount, opacity, percentage, progress | `range` | `VcSlider` | — (custom slot) |
1014
+ | email | `string` | `VcInput` (rules="email") | plain text |
1015
+ | phone, tel | `string` | `VcInput` (type="tel") | plain text |
1016
+ | url, website, link | `string` | `VcInput` (type="url") | plain text |
1017
+ | everything else | `string` | `VcInput` | plain text |
978
1018
 
979
1019
  - If a field clearly belongs to a list view (searchable, sortable characteristic) → column
980
1020
  - If a field clearly belongs to a form (editable, configurable) → formField
981
1021
  - If unclear → put in both columns and formFields
982
1022
 
983
1023
  **Action extraction:**
1024
+
984
1025
  - Concrete actions ("start trial", "upgrade plan", "approve") → toolbarActions with action name derived from the verb
985
1026
  - Navigation mentions ("from tenant to subscription", "drill into details") → connections
986
1027
 
987
1028
  **Abstract requirement extraction:**
1029
+
988
1030
  - Anything that cannot be mapped to a concrete field/action/connection → todos
989
1031
  - Quote the original text from the prompt
990
1032
  - Examples: "plan limits will be identified later", "integration with external billing TBD"
@@ -1018,11 +1060,13 @@ DESIGN_PLAN = {
1018
1060
  ```
1019
1061
 
1020
1062
  **Scaffold detection:** Check if the current directory is a vc-shell project:
1063
+
1021
1064
  - Look for `package.json` with `@vc-shell/framework` in dependencies or devDependencies
1022
1065
  - If not found → set `needsScaffold: true`
1023
1066
  - If found → set `needsScaffold: false`
1024
1067
 
1025
1068
  **Blade type inference:**
1069
+
1026
1070
  - Entity with both list-worthy columns AND editable fields → `"list+details"`
1027
1071
  - Entity that is mainly a collection/catalog with no edit form → `"list-only"`
1028
1072
  - Entity that is a singleton/settings with no list → `"details-only"`
@@ -1030,10 +1074,12 @@ DESIGN_PLAN = {
1030
1074
  - Default to `"list+details"` when unclear
1031
1075
 
1032
1076
  **Details blade mode inference:**
1077
+
1033
1078
  - If the entity is view-only (order, transaction, audit log, payment) → set `readOnly: true` on the module — the details generator will use `VcField` for display instead of `VcInput`
1034
1079
  - If the entity has mixed editable + read-only fields → default `readOnly: false`, individual fields marked as `readOnly` in `formFields`
1035
1080
 
1036
1081
  **Feature inference (enrich modules based on prompt signals):**
1082
+
1037
1083
  - If entity mentions "related" sub-entities (e.g., "product has offers and videos") → add `widgets: ["sub-entity-name"]` — generates blade sidebar widgets with `useBladeWidgets()`
1038
1084
  - If entity is a "primary" concept that would benefit from a dashboard summary → add `dashboard: true` — generates a `DashboardWidgetCard` with stats
1039
1085
  - If entity mentions "notifications" or "events" or "alerts" → add `notifications: ["EventName"]` — generates notification template components
@@ -1071,6 +1117,7 @@ Confirm? (y to proceed, or describe corrections)
1071
1117
  **Confirmation loop:**
1072
1118
 
1073
1119
  Wait for the user's response:
1120
+
1074
1121
  - **"y" / "yes" / confirmation** → proceed to Phase 4
1075
1122
  - **Free-text corrections** → re-parse the corrections, update `DESIGN_PLAN`, show the updated plan again. Examples of corrections the user might give:
1076
1123
  - "remove the agent-catalog module"
@@ -1080,6 +1127,7 @@ Wait for the user's response:
1080
1127
  - **No iteration limit** — keep looping until the user confirms or cancels
1081
1128
 
1082
1129
  **Large plan warning:** If the plan has 10 or more modules, show a suggestion before the confirmation prompt:
1130
+
1083
1131
  ```
1084
1132
  This is a large application ({count} modules). Consider generating in batches:
1085
1133
  - Generate first {N} modules now, the rest later?
@@ -1100,6 +1148,7 @@ After the user confirms the plan:
1100
1148
  > Read the file `{SKILL_DIR}/agents/api-analyzer.md` for your full instructions.
1101
1149
  >
1102
1150
  > Execute with these parameters:
1151
+ >
1103
1152
  > ```json
1104
1153
  > {
1105
1154
  > "apiClientDir": "<resolved api_client directory absolute path>",
@@ -1115,6 +1164,7 @@ After the user confirms the plan:
1115
1164
  - No match → module stays in mock mode
1116
1165
 
1117
1166
  Update the plan display with data source info:
1167
+
1118
1168
  ```
1119
1169
  1. tenants (list+details) — Data: API (TenantEntity matched)
1120
1170
  2. subscriptions (details-only) — Data: API (SubscriptionEntity matched)
@@ -1124,11 +1174,13 @@ After the user confirms the plan:
1124
1174
  Show the updated plan to the user for final confirmation before execution.
1125
1175
 
1126
1176
  3. **If no API client AND `DESIGN_PLAN.platformUrl` is set** → the user provided a platform URL but hasn't generated API clients yet. Ask:
1177
+
1127
1178
  ```
1128
1179
  Platform URL is set ({DESIGN_PLAN.platformUrl}) but no API client found.
1129
1180
  Would you like to connect to the platform and generate API clients now? (y/n)
1130
1181
  - If yes: which platform modules? (comma-separated, e.g., VirtoCommerce.Orders,VirtoCommerce.Catalog)
1131
1182
  ```
1183
+
1132
1184
  If the user says yes and provides module names → run the `/vc-app connect` execution steps (Steps 1-4 from the connect section) using `DESIGN_PLAN.platformUrl` and the provided module list. After connect completes, re-run API Detection (step 1-2 above) to match entities.
1133
1185
 
1134
1186
  If the user declines → proceed with mock mode for all modules.
@@ -1144,6 +1196,7 @@ After the user confirms the plan:
1144
1196
  #### Step 1: Scaffold (if `needsScaffold: true`)
1145
1197
 
1146
1198
  If `DESIGN_PLAN.needsScaffold` is true, run the `/vc-app create` flow:
1199
+
1147
1200
  - Use `DESIGN_PLAN.appName` as the project name
1148
1201
  - Enable default options (no dashboard, no tenant-routes, no ai-agent, no mocks)
1149
1202
  - After scaffold completes, `cd` into the new project directory
@@ -1156,9 +1209,11 @@ If scaffold is not needed, skip to the `.env.local` step below.
1156
1209
  If `DESIGN_PLAN.platformUrl` is not null:
1157
1210
 
1158
1211
  1. Write or update `.env.local` in the project root:
1212
+
1159
1213
  ```env
1160
1214
  APP_PLATFORM_URL=<DESIGN_PLAN.platformUrl>
1161
1215
  ```
1216
+
1162
1217
  If `.env.local` already exists, read it first and only update/add the `APP_PLATFORM_URL` line. Do NOT remove other variables.
1163
1218
 
1164
1219
  2. This enables the app to authenticate against the platform on first launch (`yarn serve`).
@@ -1172,6 +1227,7 @@ Process each module in `DESIGN_PLAN.modules` in order:
1172
1227
  For module at index `i`:
1173
1228
 
1174
1229
  **2a: Build INTENT**
1230
+
1175
1231
  ```json
1176
1232
  INTENT = {
1177
1233
  "description": "{module.description}",
@@ -1185,6 +1241,7 @@ INTENT = {
1185
1241
  "isWorkspace": true
1186
1242
  }
1187
1243
  ```
1244
+
1188
1245
  Where `I18N_PREFIX` = SCREAMING_SNAKE_CASE of `module.name`.
1189
1246
 
1190
1247
  **2b: Build DATA_SOURCE**
@@ -1198,9 +1255,11 @@ Where `I18N_PREFIX` = SCREAMING_SNAKE_CASE of `module.name`.
1198
1255
  Follow the same Phase 3 generation flow as `/vc-app generate`:
1199
1256
 
1200
1257
  1. Create target directory:
1258
+
1201
1259
  ```bash
1202
1260
  mkdir -p {TARGET_DIR}/pages {TARGET_DIR}/composables {TARGET_DIR}/locales
1203
1261
  ```
1262
+
1204
1263
  Where `TARGET_DIR = <project root>/src/modules/{module.name}`
1205
1264
 
1206
1265
  2. Initialize `GENERATED_FILES = []`
@@ -1219,6 +1278,7 @@ Follow the same Phase 3 generation flow as `/vc-app generate`:
1219
1278
  **2d: Pass context for connections**
1220
1279
 
1221
1280
  For modules after the first, if `DESIGN_PLAN.connections` references a connection FROM an already-generated blade TO the current module's blade, pass `existingModule` context to the blade generator:
1281
+
1222
1282
  ```json
1223
1283
  "existingModule": {
1224
1284
  "blades": ["<list of already-generated blade names>"],
@@ -1241,6 +1301,7 @@ After all modules are generated, for each connection in `DESIGN_PLAN.connections
1241
1301
  > Read the file `{SKILL_DIR}/agents/blade-enhancer.md` for your full instructions.
1242
1302
  >
1243
1303
  > Execute with these parameters:
1304
+ >
1244
1305
  > ```json
1245
1306
  > {
1246
1307
  > "targetDir": "<absolute path to source module directory>",
@@ -1278,6 +1339,7 @@ After all modules are generated and TODOs injected, dispatch the `type-checker`
1278
1339
  > Read the file `{SKILL_DIR}/agents/type-checker.md` for your full instructions.
1279
1340
  >
1280
1341
  > Execute with these parameters:
1342
+ >
1281
1343
  > ```json
1282
1344
  > {
1283
1345
  > "projectRoot": "<project root absolute path>",
@@ -1312,6 +1374,7 @@ TypeScript: {✓ no errors / ✗ N errors (see above)}
1312
1374
  ```
1313
1375
 
1314
1376
  If all modules used mock data, append:
1377
+
1315
1378
  ```
1316
1379
  Next steps:
1317
1380
  /vc-app connect — connect to platform API
@@ -1319,6 +1382,7 @@ Next steps:
1319
1382
  ```
1320
1383
 
1321
1384
  If some modules matched API and some didn't, append:
1385
+
1322
1386
  ```
1323
1387
  Next steps:
1324
1388
  /vc-app promote <name> — transition mock modules to real API when ready
@@ -1331,53 +1395,71 @@ Next steps:
1331
1395
  Apply these rules throughout all sections:
1332
1396
 
1333
1397
  ### CLI command fails
1398
+
1334
1399
  If any `npx` or `yarn` command exits with non-zero status:
1400
+
1335
1401
  - Show the stderr/stdout output to the user
1336
1402
  - Suggest a manual fix or alternative command
1337
1403
  - Do NOT proceed to subsequent steps that depend on the failed step
1338
1404
 
1339
1405
  ### `vue-tsc` / `tsc` fails during connect
1406
+
1340
1407
  If type checking fails after API client generation:
1408
+
1341
1409
  - Dispatch the `type-checker` agent with the generated files in `src/api_client/`
1342
1410
  - Show the type-checker's report to the user
1343
1411
 
1344
1412
  ### User cancels mid-dialog
1413
+
1345
1414
  If the user indicates they want to cancel (says "cancel", "stop", "nevermind", etc.) at any dialog step:
1415
+
1346
1416
  - Stop immediately
1347
1417
  - Do NOT write any partial files
1348
1418
  - Confirm cancellation: "Generation cancelled. No files were created."
1349
1419
 
1350
1420
  ### Agent returns error
1421
+
1351
1422
  If any subagent reports an error or fails to complete:
1423
+
1352
1424
  - Show the error details to the user
1353
1425
  - Suggest retrying: "You can retry with `/vc-app generate` — your previous answers will need to be re-entered."
1354
1426
  - Do NOT proceed to subsequent phases that depend on the failed agent
1355
1427
 
1356
1428
  ### Missing API client directory
1429
+
1357
1430
  If `src/api_client/` does not exist and the user wants API-backed generation:
1431
+
1358
1432
  - Suggest running `/vc-app connect` first
1359
1433
  - Do NOT proceed with generation
1360
1434
 
1361
1435
  ### Prompt too abstract (design)
1436
+
1362
1437
  If the prompt contains no identifiable entities, data objects, or concrete fields (e.g., "make me an app", "something cool"):
1438
+
1363
1439
  - Ask the user to clarify: "Describe what entities/data the app manages, what actions users perform, and how objects relate."
1364
1440
  - Do NOT attempt to parse an empty/abstract prompt into modules.
1365
1441
 
1366
1442
  ### Large design plan (10+ modules)
1443
+
1367
1444
  If prompt analysis produces 10 or more modules:
1445
+
1368
1446
  - Show the full plan for review
1369
1447
  - Suggest batching: "Generate first N now, rest later?"
1370
1448
  - If user agrees to split, truncate modules list and note the remainder
1371
1449
 
1372
1450
  ### One module fails in design loop
1451
+
1373
1452
  If a single module's generation fails during the design execution loop:
1453
+
1374
1454
  - Show the error for that module
1375
1455
  - Continue generating remaining modules
1376
1456
  - In the final summary, list the failed module under "Skipped (errors):" with the error message
1377
1457
  - Suggest: "Re-run /vc-app generate for the skipped module after fixing the issue."
1378
1458
 
1379
1459
  ### Prompt in non-English (design)
1460
+
1380
1461
  The prompt may be in any language. This is fine — parse entities and intent from any language, but:
1462
+
1381
1463
  - Module names → always kebab-case english
1382
1464
  - Field names → always camelCase english
1383
1465
  - If you cannot confidently translate an entity name, ask the user to confirm the english name
@@ -1388,17 +1470,17 @@ The prompt may be in any language. This is fine — parse entities and intent fr
1388
1470
 
1389
1471
  All agents live at `{SKILL_DIR}/agents/`. Each agent file contains its own Input Contract, Knowledge Loading, Generation Rules, Output Contract, and Self-Check.
1390
1472
 
1391
- | Agent | File | Purpose | Writes files? |
1392
- |---|---|---|---|
1393
- | api-analyzer | `agents/api-analyzer.md` | Discovers entities/methods in API client files | No (returns JSON) |
1394
- | list-blade-generator | `agents/list-blade-generator.md` | Generates list blade + plural composable | Yes |
1395
- | details-blade-generator | `agents/details-blade-generator.md` | Generates details blade + singular composable | Yes |
1396
- | locales-generator | `agents/locales-generator.md` | Scans generated files for i18n keys, writes en.json | Yes |
1397
- | module-assembler | `agents/module-assembler.md` | Creates barrel files, registers module | Yes |
1398
- | type-checker | `agents/type-checker.md` | Runs vue-tsc, fixes type errors iteratively | Yes (fixes only) |
1399
- | promote-agent | `agents/promote-agent.md` | Transforms mock composables/blades/locales to use real API | Yes (edits only) |
1400
- | module-analyzer | `agents/module-analyzer.md` | Analyzes existing module structure (blades, composables, locales) | No (returns JSON) |
1401
- | blade-enhancer | `agents/blade-enhancer.md` | Surgical edits to existing blades/composables/locales | Yes (edits only) |
1473
+ | Agent | File | Purpose | Writes files? |
1474
+ | ----------------------- | ----------------------------------- | ----------------------------------------------------------------- | ----------------- |
1475
+ | api-analyzer | `agents/api-analyzer.md` | Discovers entities/methods in API client files | No (returns JSON) |
1476
+ | list-blade-generator | `agents/list-blade-generator.md` | Generates list blade + plural composable | Yes |
1477
+ | details-blade-generator | `agents/details-blade-generator.md` | Generates details blade + singular composable | Yes |
1478
+ | locales-generator | `agents/locales-generator.md` | Scans generated files for i18n keys, writes en.json | Yes |
1479
+ | module-assembler | `agents/module-assembler.md` | Creates barrel files, registers module | Yes |
1480
+ | type-checker | `agents/type-checker.md` | Runs vue-tsc, fixes type errors iteratively | Yes (fixes only) |
1481
+ | promote-agent | `agents/promote-agent.md` | Transforms mock composables/blades/locales to use real API | Yes (edits only) |
1482
+ | module-analyzer | `agents/module-analyzer.md` | Analyzes existing module structure (blades, composables, locales) | No (returns JSON) |
1483
+ | blade-enhancer | `agents/blade-enhancer.md` | Surgical edits to existing blades/composables/locales | Yes (edits only) |
1402
1484
 
1403
1485
  ### How to dispatch an agent
1404
1486
 
@@ -1445,6 +1527,7 @@ fi
1445
1527
  ```
1446
1528
 
1447
1529
  Priority:
1530
+
1448
1531
  1. **Env override:** `VC_SHELL_MIGRATE_CLI` env var
1449
1532
  2. **Project node_modules:** `./node_modules/@vc-shell/migrate/dist/cli.js`
1450
1533
  3. **npx fallback:** `npx @vc-shell/migrate`
@@ -1455,8 +1538,50 @@ Run:
1455
1538
  {resolved_migrate_command} --update-deps
1456
1539
  ```
1457
1540
 
1541
+ `--update-deps` bumps all `@vc-shell/*` dependencies to the target framework version **and** aligns peer-dep versions (ESLint, Vite, TypeScript, VueUse, `vue-router`, etc.) with the curated set at `configs/peer-versions.json` in the framework repo. Intersection-only — nothing is added or removed from the user's `package.json`.
1542
+
1458
1543
  Display the output to the user. If the command fails, stop and show the error.
1459
1544
 
1545
+ ### Step 2.5: Regenerate API clients with Interface style
1546
+
1547
+ 1. **Detect config location:**
1548
+ - Read `package.json`. If the `generate-api-client` script contains `--APP_PLATFORM_MODULES`, configuration is inline in package.json.
1549
+ - Otherwise, read `.env`. If it contains `APP_PLATFORM_MODULES`, configuration is in the .env file.
1550
+
1551
+ 2. **Add `APP_TYPE_STYLE=Interface`:**
1552
+ - If inline in package.json: append `--APP_TYPE_STYLE=Interface` to the `generate-api-client` script arguments.
1553
+ - If in `.env`: add or update the line `APP_TYPE_STYLE=Interface`.
1554
+
1555
+ 3. **Hard gate — verify platform accessibility:**
1556
+ - Check for `APP_PLATFORM_URL` in `.env.local` or `.env`.
1557
+ - If not found, **STOP** with this error:
1558
+
1559
+ ```
1560
+ Error: Platform URL not configured.
1561
+
1562
+ API clients must be regenerated with Interface style before migration can continue.
1563
+
1564
+ 1. Create .env.local with: APP_PLATFORM_URL=https://your-platform-url
1565
+ 2. Ensure the platform is running and accessible
1566
+ 3. Re-run /vc-app migrate
1567
+ ```
1568
+
1569
+ - If found, run:
1570
+ ```bash
1571
+ yarn generate-api-client
1572
+ ```
1573
+ - If the generator fails (platform unreachable), **STOP** with the same error.
1574
+
1575
+ 4. **Verify generated types compile:**
1576
+
1577
+ ```bash
1578
+ npx vue-tsc --noEmit 2>&1 | head -20
1579
+ ```
1580
+
1581
+ If there are errors in `src/api_client/` files, the generator produced invalid output — **STOP** and ask the user to check the platform API and re-run.
1582
+
1583
+ 5. On success, continue to Step 3.
1584
+
1460
1585
  ### Step 3: Install dependencies
1461
1586
 
1462
1587
  Run:
@@ -1475,18 +1600,38 @@ Parse the "Manual Migration Required" section. Extract each topic heading and th
1475
1600
 
1476
1601
  Map topic headings to migration prompt files and pattern files:
1477
1602
 
1478
- | Report Heading contains | Migration Prompt | Pattern |
1479
- |---|---|---|
1480
- | Widget | `{KNOWLEDGE_BASE}/migration-prompts/widgets-migration.md` | `{KNOWLEDGE_BASE}/patterns/blade-widget.md` |
1481
- | Form Management / useBladeForm | `{KNOWLEDGE_BASE}/migration-prompts/blade-form-migration.md` | `{KNOWLEDGE_BASE}/patterns/form-validation.md` |
1482
- | Injection Key | `{KNOWLEDGE_BASE}/migration-prompts/blade-props-migration.md` | `{KNOWLEDGE_BASE}/patterns/blade-navigation.md` |
1483
- | NSwag / DTO / Clone-then-mutate | `{KNOWLEDGE_BASE}/migration-prompts/nswag-migration.md` | — |
1484
- | Reusable Blade Components | `{KNOWLEDGE_BASE}/migration-prompts/blade-props-migration.md` | `{KNOWLEDGE_BASE}/patterns/child-blade-flow.md` |
1485
- | Notification | `{KNOWLEDGE_BASE}/migration-prompts/notifications-migration.md` | `{KNOWLEDGE_BASE}/patterns/signalr-notifications.md` |
1603
+ | Report Heading contains (or equals transform name) | Canonical topic name | Migration Prompt | Pattern |
1604
+ | -------------------------------------------------------------------------------------------- | --------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------- |
1605
+ | Widget / widgets-migration | `widgets-migration` | `{KNOWLEDGE_BASE}/migration-prompts/widgets-migration.md` | `{KNOWLEDGE_BASE}/patterns/blade-widget.md` |
1606
+ | Form Management / useBladeForm / use-blade-form | `use-blade-form` | `{KNOWLEDGE_BASE}/migration-prompts/blade-form-migration.md` | `{KNOWLEDGE_BASE}/patterns/form-validation.md` |
1607
+ | Injection Key / remove-deprecated-aliases | `remove-deprecated-aliases` | `{KNOWLEDGE_BASE}/migration-prompts/blade-props-migration.md` | `{KNOWLEDGE_BASE}/patterns/blade-navigation.md` |
1608
+ | NSwag / DTO / Clone-then-mutate / nswag-class-to-interface | `nswag-class-to-interface` | `{KNOWLEDGE_BASE}/migration-prompts/nswag-migration.md` | — |
1609
+ | Reusable Blade Components / blade-props-simplification | `blade-props-simplification` | `{KNOWLEDGE_BASE}/migration-prompts/blade-props-migration.md` | `{KNOWLEDGE_BASE}/patterns/child-blade-flow.md` |
1610
+ | Notification / notification-migration | `notification-migration` | `{KNOWLEDGE_BASE}/migration-prompts/notifications-migration.md` | `{KNOWLEDGE_BASE}/patterns/signalr-notifications.md` |
1611
+ | VcTable / DataTable / vctable-audit | `vctable-audit` | `{KNOWLEDGE_BASE}/migration-prompts/datatable-migration.md` | `{KNOWLEDGE_BASE}/patterns/datatable-pattern.md` |
1612
+ | Icon / material- / bi- / fa- / icon-audit | `icon-audit` | `{KNOWLEDGE_BASE}/migration-prompts/icon-migration.md` | — |
1613
+ | Assets API / useAssets / useAssetsManager / use-assets-migration | `use-assets-migration` | `{KNOWLEDGE_BASE}/migration-prompts/use-assets-migration.md` | `{KNOWLEDGE_BASE}/patterns/assets-management.md` |
1614
+ | Manual Migration Audit / useExternalWidgets / moment / useFunctions / manual-migration-audit | `manual-migration-audit` | `{KNOWLEDGE_BASE}/migration-prompts/manual-migration-audit.md` | — |
1615
+ | Pagination / useDataTablePagination / use-data-table-pagination-audit | `use-data-table-pagination-audit` | `{KNOWLEDGE_BASE}/migration-prompts/use-data-table-pagination-migration.md` | — |
1486
1616
 
1487
- Build the `topics` array for the migration-agent, including only topics that appear in the report.
1617
+ Build the `topics` array for the migration-agent using the canonical topic names above.
1488
1618
 
1489
- ### Step 5: Dispatch migration-agent
1619
+ Hard gate:
1620
+
1621
+ 1. If a heading from "Manual Migration Required" does not match any row, add it to `unmappedTopics`.
1622
+ 2. If a mapped row references a missing migration prompt file, add it to `missingPrompts`.
1623
+ 3. If `unmappedTopics` or `missingPrompts` is non-empty, **STOP** and print both lists. Do not silently skip actionable topics.
1624
+
1625
+ ### Step 5: Dispatch migration-agent (with partial recovery)
1626
+
1627
+ **Before dispatching, check for partial completion** from a previous run:
1628
+
1629
+ 1. Parse `MIGRATION_REPORT.md` and collect topics already marked as completed (`### ✅ ...` headings).
1630
+ 2. If `.vc-app-migrate-state.json` exists, load completed topics from it.
1631
+ 3. Union both sources into `alreadyCompletedTopics`.
1632
+ 4. Run `npx vue-tsc --noEmit`. If it fails, do **not** infer completion from file diffs.
1633
+ 5. Use `git diff --name-only` only as a weak signal for "in-progress" topics, not as completion proof.
1634
+ 6. Dispatch only topics not in `alreadyCompletedTopics`.
1490
1635
 
1491
1636
  If there are topics to process, dispatch the migration-agent subagent:
1492
1637
 
@@ -1509,24 +1654,58 @@ If there are topics to process, dispatch the migration-agent subagent:
1509
1654
  }
1510
1655
  ```
1511
1656
 
1512
- ### Step 6: Type-check verification
1657
+ ### Step 6: Type-check and build verification
1513
1658
 
1514
- After migration-agent completes, run:
1659
+ After migration-agent completes, run type-check:
1515
1660
 
1516
1661
  ```bash
1517
1662
  npx vue-tsc --noEmit
1518
1663
  ```
1519
1664
 
1520
1665
  If there are remaining TypeScript errors:
1666
+
1521
1667
  1. Show the errors to the user
1522
1668
  2. Attempt to fix iteratively — read each error, fix the file, re-check (max 3 rounds)
1523
1669
 
1670
+ After type-check passes, run a full build:
1671
+
1672
+ ```bash
1673
+ yarn build
1674
+ ```
1675
+
1676
+ If the build fails (Vite resolve errors, missing assets, etc.):
1677
+
1678
+ 1. Show the error to the user
1679
+ 2. Attempt to fix iteratively (max 2 rounds) — common issues: missing imports, deleted files still referenced, CSS import paths
1680
+ 3. If still failing after 2 rounds, **STOP** and mark migration as incomplete (do not print "Migration complete")
1681
+
1682
+ ### Step 6.5: Run Prettier across the project
1683
+
1684
+ After type-check/build are green, run formatting:
1685
+
1686
+ 1. If `package.json` has a `prettier` script:
1687
+ ```bash
1688
+ yarn prettier --write .
1689
+ ```
1690
+ 2. Otherwise run:
1691
+ ```bash
1692
+ npx prettier --write .
1693
+ ```
1694
+
1695
+ If Prettier fails, stop and show the error.
1696
+
1524
1697
  ### Step 7: Update report and summarize
1525
1698
 
1526
1699
  Update `MIGRATION_REPORT.md`:
1700
+
1527
1701
  - For each topic the agent successfully completed, add ✅ to the heading
1528
1702
  - Add a "Completed by AI" section listing what was done
1529
1703
 
1704
+ Write `.vc-app-migrate-state.json` in project root:
1705
+
1706
+ - Store per-topic status (`completed`/`failed`), affected files, and timestamp
1707
+ - This state is used by Step 5 for automatic resume on the next `/vc-app migrate` run
1708
+
1530
1709
  Print summary to user:
1531
1710
 
1532
1711
  ```