@shepai/cli 1.59.0 → 1.61.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.
Files changed (339) hide show
  1. package/dist/src/presentation/web/app/skills/page.d.ts +2 -0
  2. package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -0
  3. package/dist/src/presentation/web/app/skills/page.js +11 -0
  4. package/dist/src/presentation/web/components/common/action-button/action-button.d.ts.map +1 -1
  5. package/dist/src/presentation/web/components/common/action-button/action-button.js +7 -1
  6. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts +1 -1
  7. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/action-button/action-button.stories.js +1 -1
  9. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +10 -1
  11. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +20 -0
  12. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -0
  13. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +68 -0
  14. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +21 -2
  16. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +13 -2
  18. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +16 -3
  20. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +1 -1
  21. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
  23. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +14 -1
  25. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +2 -0
  26. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.js +2 -0
  28. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +4 -1
  30. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +1 -0
  31. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js +1 -0
  33. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +14 -1
  35. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +1 -1
  36. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -1
  38. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.js +13 -0
  40. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts +2 -0
  41. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts.map +1 -1
  42. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.js +2 -0
  43. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  44. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +7 -13
  46. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts +8 -0
  47. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -0
  48. package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -0
  49. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +9 -0
  50. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -0
  51. package/dist/src/presentation/web/components/features/skills/category-filter.stories.js +36 -0
  52. package/dist/src/presentation/web/components/features/skills/index.d.ts +6 -0
  53. package/dist/src/presentation/web/components/features/skills/index.d.ts.map +1 -0
  54. package/dist/src/presentation/web/components/features/skills/index.js +5 -0
  55. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts +7 -0
  56. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -0
  57. package/dist/src/presentation/web/components/features/skills/skill-card.js +12 -0
  58. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +11 -0
  59. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -0
  60. package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +88 -0
  61. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts +7 -0
  62. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -0
  63. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +13 -0
  64. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +10 -0
  65. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -0
  66. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +71 -0
  67. package/dist/src/presentation/web/components/features/skills/skill-list.d.ts +7 -0
  68. package/dist/src/presentation/web/components/features/skills/skill-list.d.ts.map +1 -0
  69. package/dist/src/presentation/web/components/features/skills/skill-list.js +21 -0
  70. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +9 -0
  71. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -0
  72. package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +124 -0
  73. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +6 -0
  74. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +52 -0
  76. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +16 -0
  77. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -0
  78. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +186 -0
  79. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -2
  81. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  82. package/dist/src/presentation/web/hooks/use-notifications.js +18 -18
  83. package/dist/src/presentation/web/hooks/use-sound-action.d.ts +100 -0
  84. package/dist/src/presentation/web/hooks/use-sound-action.d.ts.map +1 -0
  85. package/dist/src/presentation/web/hooks/use-sound-action.js +42 -0
  86. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts +6 -0
  87. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts.map +1 -0
  88. package/dist/src/presentation/web/hooks/use-sound-action.stories.js +61 -0
  89. package/dist/src/presentation/web/lib/feature-flags.d.ts +10 -0
  90. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -0
  91. package/dist/src/presentation/web/lib/feature-flags.js +12 -0
  92. package/dist/src/presentation/web/lib/skills.d.ts +30 -0
  93. package/dist/src/presentation/web/lib/skills.d.ts.map +1 -0
  94. package/dist/src/presentation/web/lib/skills.js +137 -0
  95. package/dist/tsconfig.build.tsbuildinfo +1 -1
  96. package/package.json +1 -1
  97. package/web/.next/BUILD_ID +1 -1
  98. package/web/.next/app-path-routes-manifest.json +1 -0
  99. package/web/.next/build-manifest.json +4 -4
  100. package/web/.next/cache/.previewinfo +1 -1
  101. package/web/.next/cache/.rscinfo +1 -1
  102. package/web/.next/cache/.tsbuildinfo +1 -1
  103. package/web/.next/cache/config.json +3 -3
  104. package/web/.next/fallback-build-manifest.json +2 -2
  105. package/web/.next/prerender-manifest.json +3 -3
  106. package/web/.next/required-server-files.js +1 -1
  107. package/web/.next/required-server-files.json +1 -1
  108. package/web/.next/routes-manifest.json +6 -0
  109. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  110. package/web/.next/server/app/_global-error.html +2 -2
  111. package/web/.next/server/app/_global-error.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  116. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  117. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  118. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  119. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  120. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  122. package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  123. package/web/.next/server/app/page/build-manifest.json +2 -2
  124. package/web/.next/server/app/page/server-reference-manifest.json +14 -14
  125. package/web/.next/server/app/page.js +1 -1
  126. package/web/.next/server/app/page.js.nft.json +1 -1
  127. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
  129. package/web/.next/server/app/skills/page/build-manifest.json +17 -0
  130. package/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
  131. package/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
  132. package/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
  133. package/web/.next/server/app/skills/page.js +16 -0
  134. package/web/.next/server/app/skills/page.js.map +5 -0
  135. package/web/.next/server/app/skills/page.js.nft.json +1 -0
  136. package/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
  137. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  138. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  139. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  140. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  142. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  143. package/web/.next/server/app/version/page.js.nft.json +1 -1
  144. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app-paths-manifest.json +1 -0
  146. package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js.map +1 -0
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
  160. package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js.map → [root-of-the-server]__b6839c3f._.js.map} +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js.map +1 -0
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js.map +1 -0
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
  169. package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -0
  170. package/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
  171. package/web/.next/server/chunks/ssr/_44cce4e0._.js.map +1 -0
  172. package/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
  173. package/web/.next/server/chunks/ssr/_9915d2a7._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
  175. package/web/.next/server/chunks/ssr/{_e242b954._.js.map → _a64b7b24._.js.map} +1 -1
  176. package/web/.next/server/chunks/ssr/_d3711354._.js +6 -0
  177. package/web/.next/server/chunks/ssr/_d3711354._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
  179. package/web/.next/server/chunks/ssr/_e7a4b0e4._.js.map +1 -0
  180. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js → server/chunks/ssr/node_modules__pnpm_fe355030._.js} +2 -2
  181. package/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js.map +1 -0
  182. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
  183. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js.map +1 -0
  184. package/web/.next/server/middleware-build-manifest.js +2 -2
  185. package/web/.next/server/pages/500.html +2 -2
  186. package/web/.next/server/server-reference-manifest.js +1 -1
  187. package/web/.next/server/server-reference-manifest.json +22 -15
  188. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
  190. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
  191. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  192. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  193. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +6 -0
  194. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  195. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  196. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  197. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  199. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  203. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  205. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  206. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  207. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +2 -2
  209. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
  210. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  211. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  213. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
  214. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +17 -0
  215. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
  216. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
  217. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
  218. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +16 -0
  219. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.map +5 -0
  220. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -0
  221. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
  222. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
  223. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  224. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  225. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  226. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
  227. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  228. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  229. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  230. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
  231. package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
  232. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  233. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
  234. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  235. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  236. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
  237. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  238. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
  239. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
  240. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
  241. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
  242. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  243. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
  244. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
  245. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
  246. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
  247. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d3711354._.js +6 -0
  248. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
  249. package/web/.next/{server/chunks/ssr/node_modules__pnpm_d26a7485._.js → standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js} +2 -2
  250. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
  251. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
  252. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  253. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  254. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -15
  255. package/web/.next/standalone/src/presentation/web/app/skills/page.tsx +12 -0
  256. package/web/.next/standalone/src/presentation/web/components/common/action-button/action-button.stories.tsx +1 -1
  257. package/web/.next/standalone/src/presentation/web/components/common/action-button/action-button.tsx +9 -1
  258. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +82 -0
  259. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +16 -2
  260. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +27 -3
  261. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +14 -2
  262. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -1
  263. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +17 -4
  264. package/web/.next/standalone/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.tsx +2 -0
  265. package/web/.next/standalone/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx +14 -1
  266. package/web/.next/standalone/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.tsx +1 -0
  267. package/web/.next/standalone/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx +6 -1
  268. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -1
  269. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +14 -1
  270. package/web/.next/standalone/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.tsx +2 -0
  271. package/web/.next/standalone/src/presentation/web/components/common/theme-toggle/theme-toggle.tsx +14 -0
  272. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +2 -2
  273. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +7 -12
  274. package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.stories.tsx +57 -0
  275. package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.tsx +36 -0
  276. package/web/.next/standalone/src/presentation/web/components/features/skills/index.ts +5 -0
  277. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.stories.tsx +105 -0
  278. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.tsx +48 -0
  279. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.stories.tsx +96 -0
  280. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.tsx +100 -0
  281. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.stories.tsx +139 -0
  282. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.tsx +48 -0
  283. package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.stories.tsx +199 -0
  284. package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.tsx +112 -0
  285. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +10 -1
  286. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +20 -19
  287. package/web/.next/standalone/src/presentation/web/hooks/use-sound-action.stories.tsx +107 -0
  288. package/web/.next/standalone/src/presentation/web/hooks/use-sound-action.ts +53 -0
  289. package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +14 -0
  290. package/web/.next/standalone/src/presentation/web/lib/skills.ts +188 -0
  291. package/web/.next/standalone/src/presentation/web/package.json +2 -0
  292. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  293. package/web/.next/static/chunks/09d898be63c54f20.js +1 -0
  294. package/web/.next/static/chunks/13664c029245afc8.js +1 -0
  295. package/web/.next/static/chunks/25f42652257ff43d.js +1 -0
  296. package/web/.next/static/chunks/2934854f0378f815.js +1 -0
  297. package/web/.next/static/chunks/2960a70537e4fd12.js +10 -0
  298. package/web/.next/static/chunks/45f510f84c7c417d.css +2 -0
  299. package/web/.next/static/chunks/79718b1f5713fdc0.js +1 -0
  300. package/web/.next/static/chunks/acdb8af5a21f1ae9.js +1 -0
  301. package/web/.next/static/chunks/{3d4dcf0be654a331.js → cb1b27e4a21415d3.js} +2 -2
  302. package/web/.next/static/chunks/d4379644a6145352.js +1 -0
  303. package/web/.next/static/chunks/{turbopack-6a11f2f1634ff6e0.js → turbopack-eb24b869babb34b4.js} +2 -2
  304. package/web/.next/trace +1 -1
  305. package/web/.next/trace-build +1 -1
  306. package/web/.next/types/link.d.ts +1 -0
  307. package/web/.next/types/routes.d.ts +2 -1
  308. package/web/.next/types/validator.ts +9 -0
  309. package/web/package.json +2 -0
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js +0 -3
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js.map +0 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +0 -1
  314. package/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
  315. package/web/.next/server/chunks/ssr/_027596cf._.js.map +0 -1
  316. package/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
  317. package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js.map +0 -1
  318. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  319. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
  320. package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
  321. package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js.map +0 -1
  322. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js +0 -3
  323. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
  324. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
  325. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
  326. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  327. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
  328. package/web/.next/static/chunks/0cd7c513169faee3.js +0 -1
  329. package/web/.next/static/chunks/4f7d89c9e09aed99.js +0 -10
  330. package/web/.next/static/chunks/67459433cc866344.js +0 -1
  331. package/web/.next/static/chunks/6d33cb9af6245c98.js +0 -1
  332. package/web/.next/static/chunks/a9c2b889c8749a94.js +0 -1
  333. package/web/.next/static/chunks/b511c65023ec1889.css +0 -2
  334. package/web/.next/static/chunks/cda11a2491d519fc.js +0 -1
  335. package/web/.next/static/chunks/d85b95e893db08bc.js +0 -1
  336. /package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js.map → [root-of-the-server]__e926de65._.js.map} +0 -0
  337. /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_buildManifest.js +0 -0
  338. /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_clientMiddlewareManifest.json +0 -0
  339. /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_ssgManifest.js +0 -0
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+
3
+ import {
4
+ Sheet,
5
+ SheetContent,
6
+ SheetHeader,
7
+ SheetTitle,
8
+ SheetDescription,
9
+ } from '@/components/ui/sheet';
10
+ import { Badge } from '@/components/ui/badge';
11
+ import { ScrollArea } from '@/components/ui/scroll-area';
12
+ import { Separator } from '@/components/ui/separator';
13
+ import { FolderOpen } from 'lucide-react';
14
+ import type { SkillData } from '@/lib/skills';
15
+
16
+ export interface SkillDetailDrawerProps {
17
+ skill: SkillData | null;
18
+ onClose: () => void;
19
+ }
20
+
21
+ export function SkillDetailDrawer({ skill, onClose }: SkillDetailDrawerProps) {
22
+ return (
23
+ <Sheet
24
+ open={skill !== null}
25
+ onOpenChange={(open) => {
26
+ if (!open) onClose();
27
+ }}
28
+ >
29
+ <SheetContent side="right" className="w-full sm:max-w-lg">
30
+ {skill ? (
31
+ <>
32
+ <SheetHeader>
33
+ <SheetTitle>{skill.displayName}</SheetTitle>
34
+ <SheetDescription>{skill.name}</SheetDescription>
35
+ </SheetHeader>
36
+
37
+ <ScrollArea className="flex-1 px-4 pb-4">
38
+ {/* Description */}
39
+ <p className="text-muted-foreground text-sm">{skill.description}</p>
40
+
41
+ {/* Badges */}
42
+ <div className="mt-4 flex flex-wrap items-center gap-1.5">
43
+ <Badge variant={skill.source === 'project' ? 'secondary' : 'outline'}>
44
+ {skill.source === 'project' ? 'Project' : 'Global'}
45
+ </Badge>
46
+ <Badge variant="outline">{skill.category}</Badge>
47
+ {skill.context ? <Badge variant="outline">{skill.context}</Badge> : null}
48
+ </div>
49
+
50
+ {/* Allowed Tools */}
51
+ {skill.allowedTools ? (
52
+ <>
53
+ <Separator className="my-4" />
54
+ <div>
55
+ <h3 className="text-sm font-semibold">Allowed Tools</h3>
56
+ <p className="text-muted-foreground mt-1 text-sm">{skill.allowedTools}</p>
57
+ </div>
58
+ </>
59
+ ) : null}
60
+
61
+ {/* Resources */}
62
+ {skill.resources.length > 0 ? (
63
+ <>
64
+ <Separator className="my-4" />
65
+ <div>
66
+ <h3 className="text-sm font-semibold">Resources</h3>
67
+ <ul className="mt-2 space-y-1.5">
68
+ {skill.resources.map((resource) => (
69
+ <li
70
+ key={resource.name}
71
+ className="text-muted-foreground flex items-center gap-2 text-sm"
72
+ >
73
+ <FolderOpen className="size-3.5 shrink-0" />
74
+ <span>
75
+ {resource.name}/ — {resource.fileCount}{' '}
76
+ {resource.fileCount === 1 ? 'file' : 'files'}
77
+ </span>
78
+ </li>
79
+ ))}
80
+ </ul>
81
+ </div>
82
+ </>
83
+ ) : null}
84
+
85
+ {/* Body */}
86
+ {skill.body ? (
87
+ <>
88
+ <Separator className="my-4" />
89
+ <pre className="text-muted-foreground text-sm leading-relaxed whitespace-pre-wrap">
90
+ {skill.body}
91
+ </pre>
92
+ </>
93
+ ) : null}
94
+ </ScrollArea>
95
+ </>
96
+ ) : null}
97
+ </SheetContent>
98
+ </Sheet>
99
+ );
100
+ }
@@ -0,0 +1,139 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { fn } from '@storybook/test';
3
+ import { SkillList } from './skill-list';
4
+ import type { SkillData } from '@/lib/skills';
5
+
6
+ const meta: Meta<typeof SkillList> = {
7
+ title: 'Features/SkillList',
8
+ component: SkillList,
9
+ tags: ['autodocs'],
10
+ parameters: {
11
+ layout: 'padded',
12
+ },
13
+ args: {
14
+ onSkillSelect: fn(),
15
+ },
16
+ };
17
+
18
+ export default meta;
19
+ type Story = StoryObj<typeof meta>;
20
+
21
+ /* ---------------------------------------------------------------------------
22
+ * Data fixtures
23
+ * ------------------------------------------------------------------------- */
24
+
25
+ const workflowSkills: SkillData[] = [
26
+ {
27
+ name: 'shep-kit:implement',
28
+ displayName: 'implement',
29
+ description: 'Validate specs and autonomously execute implementation tasks.',
30
+ category: 'Workflow',
31
+ source: 'project',
32
+ body: '',
33
+ resources: [],
34
+ },
35
+ {
36
+ name: 'shep-kit:plan',
37
+ displayName: 'plan',
38
+ description: 'Create implementation plan and task breakdown.',
39
+ category: 'Workflow',
40
+ source: 'project',
41
+ body: '',
42
+ resources: [],
43
+ },
44
+ {
45
+ name: 'shep-kit:research',
46
+ displayName: 'research',
47
+ description: 'Analyze technical approach, evaluate libraries, document decisions.',
48
+ category: 'Workflow',
49
+ source: 'project',
50
+ body: '',
51
+ resources: [],
52
+ },
53
+ ];
54
+
55
+ const codeGenSkills: SkillData[] = [
56
+ {
57
+ name: 'shep:ui-component',
58
+ displayName: 'ui-component',
59
+ description: 'Use when creating, modifying, or reviewing web UI components.',
60
+ context: 'fork',
61
+ allowedTools: 'Read, Write, Bash, Edit, Glob',
62
+ category: 'Code Generation',
63
+ source: 'project',
64
+ body: '',
65
+ resources: [{ name: 'references', fileCount: 7 }],
66
+ },
67
+ ];
68
+
69
+ const analysisSkills: SkillData[] = [
70
+ {
71
+ name: 'architecture-reviewer',
72
+ displayName: 'architecture-reviewer',
73
+ description: 'Use when making architectural decisions or reviewing PRs.',
74
+ context: 'fork',
75
+ category: 'Analysis',
76
+ source: 'project',
77
+ body: '',
78
+ resources: [],
79
+ },
80
+ {
81
+ name: 'cross-validate-artifacts',
82
+ displayName: 'cross-validate-artifacts',
83
+ description: 'Cross-validate documentation and artifacts for consistency.',
84
+ category: 'Analysis',
85
+ source: 'project',
86
+ body: '',
87
+ resources: [],
88
+ },
89
+ ];
90
+
91
+ const referenceSkills: SkillData[] = [
92
+ {
93
+ name: 'shadcn-ui',
94
+ displayName: 'shadcn-ui',
95
+ description: 'Complete shadcn/ui component library patterns.',
96
+ category: 'Reference',
97
+ source: 'project',
98
+ body: '',
99
+ resources: [{ name: 'references', fileCount: 3 }],
100
+ },
101
+ {
102
+ name: 'vercel-react-best-practices',
103
+ displayName: 'vercel-react-best-practices',
104
+ description: 'React and Next.js performance optimization guidelines.',
105
+ category: 'Reference',
106
+ source: 'global',
107
+ body: '',
108
+ resources: [{ name: 'references', fileCount: 4 }],
109
+ },
110
+ ];
111
+
112
+ const allSkills: SkillData[] = [
113
+ ...workflowSkills,
114
+ ...codeGenSkills,
115
+ ...analysisSkills,
116
+ ...referenceSkills,
117
+ ];
118
+
119
+ /* ---------------------------------------------------------------------------
120
+ * Stories
121
+ * ------------------------------------------------------------------------- */
122
+
123
+ export const Default: Story = {
124
+ args: {
125
+ skills: allSkills,
126
+ },
127
+ };
128
+
129
+ export const SingleCategory: Story = {
130
+ args: {
131
+ skills: workflowSkills,
132
+ },
133
+ };
134
+
135
+ export const Empty: Story = {
136
+ args: {
137
+ skills: [],
138
+ },
139
+ };
@@ -0,0 +1,48 @@
1
+ import { SkillCard } from './skill-card';
2
+ import type { SkillCategory, SkillData } from '@/lib/skills';
3
+
4
+ const CATEGORY_ORDER: SkillCategory[] = ['Workflow', 'Code Generation', 'Analysis', 'Reference'];
5
+
6
+ export interface SkillListProps {
7
+ skills: SkillData[];
8
+ onSkillSelect: (skill: SkillData) => void;
9
+ }
10
+
11
+ function groupByCategory(skills: SkillData[]): Map<SkillCategory, SkillData[]> {
12
+ const groups = new Map<SkillCategory, SkillData[]>();
13
+ for (const skill of skills) {
14
+ const group = groups.get(skill.category) ?? [];
15
+ group.push(skill);
16
+ groups.set(skill.category, group);
17
+ }
18
+ return groups;
19
+ }
20
+
21
+ export function SkillList({ skills, onSkillSelect }: SkillListProps) {
22
+ const groups = groupByCategory(skills);
23
+
24
+ return (
25
+ <div className="space-y-8">
26
+ {CATEGORY_ORDER.map((category) => {
27
+ const categorySkills = groups.get(category);
28
+ if (!categorySkills || categorySkills.length === 0) return null;
29
+
30
+ return (
31
+ <section key={category}>
32
+ <h2 className="mb-4 text-lg font-semibold">
33
+ {category}{' '}
34
+ <span className="text-muted-foreground text-sm font-normal">
35
+ ({categorySkills.length})
36
+ </span>
37
+ </h2>
38
+ <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
39
+ {categorySkills.map((skill) => (
40
+ <SkillCard key={skill.name} skill={skill} onSelect={onSkillSelect} />
41
+ ))}
42
+ </div>
43
+ </section>
44
+ );
45
+ })}
46
+ </div>
47
+ );
48
+ }
@@ -0,0 +1,199 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SkillsPageClient } from './skills-page-client';
3
+ import type { SkillData } from '@/lib/skills';
4
+
5
+ const meta = {
6
+ title: 'Features/SkillsPageClient',
7
+ component: SkillsPageClient,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'fullscreen',
11
+ },
12
+ } satisfies Meta<typeof SkillsPageClient>;
13
+
14
+ export default meta;
15
+ type Story = StoryObj<typeof meta>;
16
+
17
+ /* ---------------------------------------------------------------------------
18
+ * Data fixtures
19
+ * ------------------------------------------------------------------------- */
20
+
21
+ const sampleSkills: SkillData[] = [
22
+ {
23
+ name: 'shep-kit:implement',
24
+ displayName: 'implement',
25
+ description:
26
+ 'Validate specs and autonomously execute implementation tasks with status tracking.',
27
+ category: 'Workflow',
28
+ source: 'project',
29
+ body: '## Usage\n\nRun /shep-kit:implement after planning is complete.',
30
+ resources: [],
31
+ },
32
+ {
33
+ name: 'shep-kit:plan',
34
+ displayName: 'plan',
35
+ description: 'Create implementation plan and task breakdown.',
36
+ category: 'Workflow',
37
+ source: 'project',
38
+ body: '',
39
+ resources: [],
40
+ },
41
+ {
42
+ name: 'shep-kit:research',
43
+ displayName: 'research',
44
+ description: 'Analyze technical approach, evaluate libraries, document decisions.',
45
+ category: 'Workflow',
46
+ source: 'project',
47
+ body: '',
48
+ resources: [],
49
+ },
50
+ {
51
+ name: 'shep:ui-component',
52
+ displayName: 'ui-component',
53
+ description: 'Use when creating, modifying, or reviewing web UI components.',
54
+ context: 'fork',
55
+ allowedTools: 'Read, Write, Bash, Edit, Glob',
56
+ category: 'Code Generation',
57
+ source: 'project',
58
+ body: '',
59
+ resources: [
60
+ { name: 'references', fileCount: 7 },
61
+ { name: 'templates', fileCount: 3 },
62
+ ],
63
+ },
64
+ {
65
+ name: 'architecture-reviewer',
66
+ displayName: 'architecture-reviewer',
67
+ description: 'Use when making architectural decisions, planning features, or reviewing PRs.',
68
+ context: 'fork',
69
+ category: 'Analysis',
70
+ source: 'project',
71
+ body: '',
72
+ resources: [],
73
+ },
74
+ {
75
+ name: 'cross-validate-artifacts',
76
+ displayName: 'cross-validate-artifacts',
77
+ description: 'Cross-validate documentation and artifacts for consistency.',
78
+ category: 'Analysis',
79
+ source: 'project',
80
+ body: '',
81
+ resources: [],
82
+ },
83
+ {
84
+ name: 'shadcn-ui',
85
+ displayName: 'shadcn-ui',
86
+ description: 'Complete shadcn/ui component library patterns and implementation.',
87
+ category: 'Reference',
88
+ source: 'project',
89
+ body: '',
90
+ resources: [{ name: 'references', fileCount: 3 }],
91
+ },
92
+ {
93
+ name: 'vercel-react-best-practices',
94
+ displayName: 'vercel-react-best-practices',
95
+ description: 'React and Next.js performance optimization guidelines from Vercel Engineering.',
96
+ category: 'Reference',
97
+ source: 'global',
98
+ body: '',
99
+ resources: [{ name: 'references', fileCount: 4 }],
100
+ },
101
+ ];
102
+
103
+ const manySkills: SkillData[] = [
104
+ ...sampleSkills,
105
+ {
106
+ name: 'shep-kit:commit-pr',
107
+ displayName: 'commit-pr',
108
+ description: 'Use when ready to commit, push, and create a PR with CI verification.',
109
+ category: 'Workflow',
110
+ source: 'project',
111
+ body: '',
112
+ resources: [],
113
+ },
114
+ {
115
+ name: 'shep-kit:new-feature',
116
+ displayName: 'new-feature',
117
+ description: 'Use when starting any new feature, functionality, or enhancement.',
118
+ category: 'Workflow',
119
+ source: 'project',
120
+ body: '',
121
+ resources: [],
122
+ },
123
+ {
124
+ name: 'shep-kit:new-feature-fast',
125
+ displayName: 'new-feature-fast',
126
+ description: 'Fast-track feature creation that collapses new-feature, research, and planning.',
127
+ category: 'Workflow',
128
+ source: 'project',
129
+ body: '',
130
+ resources: [],
131
+ },
132
+ {
133
+ name: 'shep-kit:merged',
134
+ displayName: 'merged',
135
+ description: 'Use after a PR has been merged to clean up branches.',
136
+ category: 'Workflow',
137
+ source: 'project',
138
+ body: '',
139
+ resources: [],
140
+ },
141
+ {
142
+ name: 'mermaid-diagrams',
143
+ displayName: 'mermaid-diagrams',
144
+ description: 'Comprehensive guide for creating software diagrams using Mermaid syntax.',
145
+ category: 'Reference',
146
+ source: 'project',
147
+ body: '',
148
+ resources: [{ name: 'references', fileCount: 2 }],
149
+ },
150
+ {
151
+ name: 'react-flow',
152
+ displayName: 'react-flow',
153
+ description: 'React Flow for workflow visualization with custom nodes and edges.',
154
+ category: 'Reference',
155
+ source: 'project',
156
+ body: '',
157
+ resources: [],
158
+ },
159
+ {
160
+ name: 'tsp-model',
161
+ displayName: 'tsp-model',
162
+ description: 'Use when creating, modifying, or documenting TypeSpec domain models.',
163
+ category: 'Reference',
164
+ source: 'project',
165
+ body: '',
166
+ resources: [{ name: 'references', fileCount: 5 }],
167
+ },
168
+ {
169
+ name: 'find-skills',
170
+ displayName: 'find-skills',
171
+ description: 'Helps users discover and install agent skills.',
172
+ category: 'Reference',
173
+ source: 'global',
174
+ body: '',
175
+ resources: [],
176
+ },
177
+ ];
178
+
179
+ /* ---------------------------------------------------------------------------
180
+ * Stories
181
+ * ------------------------------------------------------------------------- */
182
+
183
+ export const Default: Story = {
184
+ args: {
185
+ skills: sampleSkills,
186
+ },
187
+ };
188
+
189
+ export const Empty: Story = {
190
+ args: {
191
+ skills: [],
192
+ },
193
+ };
194
+
195
+ export const ManySkills: Story = {
196
+ args: {
197
+ skills: manySkills,
198
+ },
199
+ };
@@ -0,0 +1,112 @@
1
+ 'use client';
2
+
3
+ import { useState, useMemo } from 'react';
4
+ import { Search, Puzzle } from 'lucide-react';
5
+ import { Input } from '@/components/ui/input';
6
+ import { Button } from '@/components/ui/button';
7
+ import { PageHeader } from '@/components/common/page-header';
8
+ import { EmptyState } from '@/components/common/empty-state';
9
+ import { SkillList } from './skill-list';
10
+ import { CategoryFilter } from './category-filter';
11
+ import { SkillDetailDrawer } from './skill-detail-drawer';
12
+ import type { SkillCategory, SkillData } from '@/lib/skills';
13
+
14
+ export interface SkillsPageClientProps {
15
+ skills: SkillData[];
16
+ }
17
+
18
+ function computeCategoryCounts(skills: SkillData[]): Record<SkillCategory, number> {
19
+ const counts: Record<SkillCategory, number> = {
20
+ Workflow: 0,
21
+ 'Code Generation': 0,
22
+ Analysis: 0,
23
+ Reference: 0,
24
+ };
25
+ for (const skill of skills) {
26
+ counts[skill.category]++;
27
+ }
28
+ return counts;
29
+ }
30
+
31
+ export function SkillsPageClient({ skills }: SkillsPageClientProps) {
32
+ const [searchQuery, setSearchQuery] = useState('');
33
+ const [activeCategory, setActiveCategory] = useState<SkillCategory | null>(null);
34
+ const [selectedSkill, setSelectedSkill] = useState<SkillData | null>(null);
35
+
36
+ const categoryCounts = useMemo(() => computeCategoryCounts(skills), [skills]);
37
+
38
+ const filteredSkills = useMemo(() => {
39
+ const query = searchQuery.toLowerCase();
40
+ return skills.filter((skill) => {
41
+ if (activeCategory && skill.category !== activeCategory) return false;
42
+ if (query) {
43
+ const matchesName = skill.name.toLowerCase().includes(query);
44
+ const matchesDescription = skill.description.toLowerCase().includes(query);
45
+ if (!matchesName && !matchesDescription) return false;
46
+ }
47
+ return true;
48
+ });
49
+ }, [skills, searchQuery, activeCategory]);
50
+
51
+ const clearFilters = () => {
52
+ setSearchQuery('');
53
+ setActiveCategory(null);
54
+ };
55
+
56
+ // No skills installed at all
57
+ if (skills.length === 0) {
58
+ return (
59
+ <div className="flex flex-col gap-6 p-6">
60
+ <PageHeader title="Skills" description="Claude Code skills installed in this project" />
61
+ <EmptyState
62
+ icon={<Puzzle className="size-10" />}
63
+ title="No skills found"
64
+ description="No Claude Code skills are installed. Add skills to .claude/skills/ to get started."
65
+ />
66
+ </div>
67
+ );
68
+ }
69
+
70
+ return (
71
+ <div className="flex flex-col gap-6 p-6">
72
+ <PageHeader title="Skills" description="Claude Code skills installed in this project" />
73
+
74
+ {/* Search */}
75
+ <div className="relative">
76
+ <Search className="text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" />
77
+ <Input
78
+ placeholder="Search skills..."
79
+ value={searchQuery}
80
+ onChange={(e) => setSearchQuery(e.target.value)}
81
+ className="pl-9"
82
+ />
83
+ </div>
84
+
85
+ {/* Category Filter */}
86
+ <CategoryFilter
87
+ activeCategory={activeCategory}
88
+ onCategoryChange={setActiveCategory}
89
+ counts={categoryCounts}
90
+ />
91
+
92
+ {/* Skill List or Empty Filter State */}
93
+ {filteredSkills.length > 0 ? (
94
+ <SkillList skills={filteredSkills} onSkillSelect={setSelectedSkill} />
95
+ ) : (
96
+ <EmptyState
97
+ icon={<Search className="size-10" />}
98
+ title="No matching skills"
99
+ description="No skills match your current search and filter criteria."
100
+ action={
101
+ <Button variant="outline" onClick={clearFilters}>
102
+ Clear filters
103
+ </Button>
104
+ }
105
+ />
106
+ )}
107
+
108
+ {/* Skill Detail Drawer */}
109
+ <SkillDetailDrawer skill={selectedSkill} onClose={() => setSelectedSkill(null)} />
110
+ </div>
111
+ );
112
+ }
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { usePathname } from 'next/navigation';
4
- import { Home, Wrench, Plus } from 'lucide-react';
4
+ import { Home, Wrench, Puzzle, Plus } from 'lucide-react';
5
5
  import {
6
6
  Sidebar,
7
7
  SidebarHeader,
@@ -23,6 +23,7 @@ import { SidebarSectionHeader } from '@/components/common/sidebar-section-header
23
23
  import { featureStatusConfig, featureStatusOrder } from '@/components/common/feature-status-config';
24
24
  import type { FeatureStatus } from '@/components/common/feature-status-config';
25
25
  import { useDeferredMount } from '@/hooks/use-deferred-mount';
26
+ import { featureFlags } from '@/lib/feature-flags';
26
27
 
27
28
  interface FeatureItem {
28
29
  name: string;
@@ -87,6 +88,14 @@ export function AppSidebar({
87
88
  href="/tools"
88
89
  active={pathname === '/tools'}
89
90
  />
91
+ {featureFlags.skills ? (
92
+ <SidebarNavItem
93
+ icon={Puzzle}
94
+ label="Skills"
95
+ href="/skills"
96
+ active={pathname === '/skills'}
97
+ />
98
+ ) : null}
90
99
  </SidebarMenu>
91
100
  </SidebarHeader>
92
101