@shepai/cli 1.58.0 → 1.60.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 (298) hide show
  1. package/dist/src/presentation/web/app/page.d.ts.map +1 -1
  2. package/dist/src/presentation/web/app/page.js +9 -0
  3. package/dist/src/presentation/web/app/skills/page.d.ts +2 -0
  4. package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -0
  5. package/dist/src/presentation/web/app/skills/page.js +11 -0
  6. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts +5 -0
  7. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts.map +1 -0
  8. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.js +14 -0
  9. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts +12 -0
  10. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts.map +1 -0
  11. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.js +20 -0
  12. package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts +2 -0
  13. package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts.map +1 -0
  14. package/dist/src/presentation/web/components/common/ci-status-badge/index.js +1 -0
  15. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  16. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +13 -2
  17. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +8 -0
  18. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +41 -0
  20. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +9 -0
  21. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  23. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -12
  24. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts +8 -0
  25. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -0
  26. package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -0
  27. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +9 -0
  28. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -0
  29. package/dist/src/presentation/web/components/features/skills/category-filter.stories.js +36 -0
  30. package/dist/src/presentation/web/components/features/skills/index.d.ts +6 -0
  31. package/dist/src/presentation/web/components/features/skills/index.d.ts.map +1 -0
  32. package/dist/src/presentation/web/components/features/skills/index.js +5 -0
  33. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts +7 -0
  34. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -0
  35. package/dist/src/presentation/web/components/features/skills/skill-card.js +12 -0
  36. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +11 -0
  37. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -0
  38. package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +88 -0
  39. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts +7 -0
  40. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -0
  41. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +13 -0
  42. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +10 -0
  43. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -0
  44. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +71 -0
  45. package/dist/src/presentation/web/components/features/skills/skill-list.d.ts +7 -0
  46. package/dist/src/presentation/web/components/features/skills/skill-list.d.ts.map +1 -0
  47. package/dist/src/presentation/web/components/features/skills/skill-list.js +21 -0
  48. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +9 -0
  49. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -0
  50. package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +124 -0
  51. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +6 -0
  52. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -0
  53. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +52 -0
  54. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +16 -0
  55. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -0
  56. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +186 -0
  57. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -2
  59. package/dist/src/presentation/web/lib/feature-flags.d.ts +10 -0
  60. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -0
  61. package/dist/src/presentation/web/lib/feature-flags.js +12 -0
  62. package/dist/src/presentation/web/lib/skills.d.ts +30 -0
  63. package/dist/src/presentation/web/lib/skills.d.ts.map +1 -0
  64. package/dist/src/presentation/web/lib/skills.js +137 -0
  65. package/dist/tsconfig.build.tsbuildinfo +1 -1
  66. package/package.json +1 -1
  67. package/web/.next/BUILD_ID +1 -1
  68. package/web/.next/app-path-routes-manifest.json +1 -0
  69. package/web/.next/build-manifest.json +4 -4
  70. package/web/.next/cache/.previewinfo +1 -1
  71. package/web/.next/cache/.rscinfo +1 -1
  72. package/web/.next/cache/.tsbuildinfo +1 -1
  73. package/web/.next/cache/config.json +3 -3
  74. package/web/.next/fallback-build-manifest.json +2 -2
  75. package/web/.next/prerender-manifest.json +3 -3
  76. package/web/.next/required-server-files.js +1 -1
  77. package/web/.next/required-server-files.json +1 -1
  78. package/web/.next/routes-manifest.json +6 -0
  79. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  80. package/web/.next/server/app/_global-error.html +2 -2
  81. package/web/.next/server/app/_global-error.rsc +1 -1
  82. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  83. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  87. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  88. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  89. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  90. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  92. package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  93. package/web/.next/server/app/page/build-manifest.json +2 -2
  94. package/web/.next/server/app/page/server-reference-manifest.json +14 -14
  95. package/web/.next/server/app/page.js +1 -1
  96. package/web/.next/server/app/page.js.nft.json +1 -1
  97. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
  99. package/web/.next/server/app/skills/page/build-manifest.json +17 -0
  100. package/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
  101. package/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
  102. package/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
  103. package/web/.next/server/app/skills/page.js +16 -0
  104. package/web/.next/server/app/skills/page.js.map +5 -0
  105. package/web/.next/server/app/skills/page.js.nft.json +1 -0
  106. package/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
  107. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  108. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  109. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  110. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  112. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  113. package/web/.next/server/app/version/page.js.nft.json +1 -1
  114. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app-paths-manifest.json +1 -0
  116. package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js.map +1 -0
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js.map +1 -0
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +2 -2
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
  130. package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js.map → [root-of-the-server]__b6839c3f._.js.map} +1 -1
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js.map +1 -0
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js.map +1 -0
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js.map +1 -0
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_34627374._.js +6 -0
  139. package/web/.next/server/chunks/ssr/_34627374._.js.map +1 -0
  140. package/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
  141. package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -0
  142. package/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
  143. package/web/.next/server/chunks/ssr/_44cce4e0._.js.map +1 -0
  144. package/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
  145. package/web/.next/server/chunks/ssr/_9915d2a7._.js.map +1 -0
  146. package/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
  147. package/web/.next/server/chunks/ssr/{_e242b954._.js.map → _a64b7b24._.js.map} +1 -1
  148. package/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
  149. package/web/.next/server/chunks/ssr/_e7a4b0e4._.js.map +1 -0
  150. 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
  151. package/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js.map +1 -0
  152. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
  153. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js.map +1 -0
  154. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  156. package/web/.next/server/middleware-build-manifest.js +2 -2
  157. package/web/.next/server/pages/500.html +2 -2
  158. package/web/.next/server/server-reference-manifest.js +1 -1
  159. package/web/.next/server/server-reference-manifest.json +22 -15
  160. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
  162. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
  163. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  164. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  165. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +6 -0
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +2 -2
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
  186. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +17 -0
  187. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
  188. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
  189. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
  190. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +16 -0
  191. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.map +5 -0
  192. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -0
  193. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
  194. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
  195. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  196. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  197. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
  199. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
  203. package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
  204. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  205. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
  206. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  207. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
  209. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +2 -2
  210. 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
  211. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
  212. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
  213. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
  214. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  215. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_34627374._.js +6 -0
  216. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
  217. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
  218. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
  219. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
  220. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
  221. 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
  222. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
  223. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  224. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
  225. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  226. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  227. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -15
  228. package/web/.next/standalone/src/presentation/web/app/page.tsx +9 -0
  229. package/web/.next/standalone/src/presentation/web/app/skills/page.tsx +12 -0
  230. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.tsx +27 -0
  231. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.tsx +29 -0
  232. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/index.ts +1 -0
  233. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +53 -0
  234. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +61 -1
  235. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +9 -0
  236. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -29
  237. package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.stories.tsx +57 -0
  238. package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.tsx +36 -0
  239. package/web/.next/standalone/src/presentation/web/components/features/skills/index.ts +5 -0
  240. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.stories.tsx +105 -0
  241. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.tsx +48 -0
  242. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.stories.tsx +96 -0
  243. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.tsx +100 -0
  244. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.stories.tsx +139 -0
  245. package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.tsx +48 -0
  246. package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.stories.tsx +199 -0
  247. package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.tsx +112 -0
  248. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +10 -1
  249. package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +14 -0
  250. package/web/.next/standalone/src/presentation/web/lib/skills.ts +188 -0
  251. package/web/.next/standalone/src/presentation/web/package.json +2 -0
  252. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  253. package/web/.next/static/chunks/09d898be63c54f20.js +1 -0
  254. package/web/.next/static/chunks/{eb0e60434c992fc1.js → 1fe24572a810eafa.js} +5 -5
  255. package/web/.next/static/chunks/25f42652257ff43d.js +1 -0
  256. package/web/.next/static/chunks/2934854f0378f815.js +1 -0
  257. package/web/.next/static/chunks/7d3c5ae8f47e74cd.js +1 -0
  258. package/web/.next/static/chunks/8b2879f911a05b55.css +2 -0
  259. package/web/.next/static/chunks/acdb8af5a21f1ae9.js +1 -0
  260. package/web/.next/static/chunks/bac5122e95f5c7eb.js +1 -0
  261. package/web/.next/static/chunks/{3d4dcf0be654a331.js → cb1b27e4a21415d3.js} +2 -2
  262. package/web/.next/static/chunks/d4379644a6145352.js +1 -0
  263. package/web/.next/static/chunks/{turbopack-6a11f2f1634ff6e0.js → turbopack-eb24b869babb34b4.js} +2 -2
  264. package/web/.next/trace +1 -1
  265. package/web/.next/trace-build +1 -1
  266. package/web/.next/types/link.d.ts +1 -0
  267. package/web/.next/types/routes.d.ts +2 -1
  268. package/web/.next/types/validator.ts +9 -0
  269. package/web/package.json +2 -0
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +0 -3
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js.map +0 -1
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +0 -1
  274. package/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
  275. package/web/.next/server/chunks/ssr/_027596cf._.js.map +0 -1
  276. package/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
  277. package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js.map +0 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  279. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
  280. package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
  281. package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js.map +0 -1
  282. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +0 -3
  283. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
  284. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
  285. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
  286. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  287. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
  288. package/web/.next/static/chunks/0cd7c513169faee3.js +0 -1
  289. package/web/.next/static/chunks/3f5de337d3fc604f.js +0 -1
  290. package/web/.next/static/chunks/60bbbe7ff679eb4c.css +0 -2
  291. package/web/.next/static/chunks/67459433cc866344.js +0 -1
  292. package/web/.next/static/chunks/7138c478667158d0.js +0 -1
  293. package/web/.next/static/chunks/a9c2b889c8749a94.js +0 -1
  294. package/web/.next/static/chunks/cda11a2491d519fc.js +0 -1
  295. /package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js.map → [root-of-the-server]__e926de65._.js.map} +0 -0
  296. /package/web/.next/static/{e7Q45G0MI6cgci9Gn2J-i → enyZhg62FqP6oInxg1T3h}/_buildManifest.js +0 -0
  297. /package/web/.next/static/{e7Q45G0MI6cgci9Gn2J-i → enyZhg62FqP6oInxg1T3h}/_clientMiddlewareManifest.json +0 -0
  298. /package/web/.next/static/{e7Q45G0MI6cgci9Gn2J-i → enyZhg62FqP6oInxg1T3h}/_ssgManifest.js +0 -0
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { SkillDetailDrawer } from './skill-detail-drawer.js';
4
+ import { Button } from '../../ui/button.js';
5
+ const meta = {
6
+ title: 'Features/SkillDetailDrawer',
7
+ component: SkillDetailDrawer,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'fullscreen',
11
+ },
12
+ };
13
+ export default meta;
14
+ /* ---------------------------------------------------------------------------
15
+ * Data fixtures
16
+ * ------------------------------------------------------------------------- */
17
+ const skillWithResources = {
18
+ name: 'shep:ui-component',
19
+ displayName: 'ui-component',
20
+ description: 'Use when creating, modifying, or reviewing web UI components. Triggers include "new component", "add component", "create UI", "build a widget".',
21
+ context: 'fork',
22
+ allowedTools: 'Read, Write, Bash, Edit, Glob, Grep',
23
+ category: 'Code Generation',
24
+ source: 'project',
25
+ body: '## Overview\n\nScaffolds UI components following the four-tier hierarchy.\n\n## Usage\n\nRun /shep:ui-component when you need to create or modify components.',
26
+ resources: [
27
+ { name: 'references', fileCount: 7 },
28
+ { name: 'templates', fileCount: 3 },
29
+ { name: 'rules', fileCount: 2 },
30
+ ],
31
+ };
32
+ const skillWithoutResources = {
33
+ name: 'shep-kit:implement',
34
+ displayName: 'implement',
35
+ description: 'Validate specs and autonomously execute implementation tasks with status tracking. Use after /shep-kit:plan when ready to start implementation.',
36
+ category: 'Workflow',
37
+ source: 'project',
38
+ body: '## Usage\n\nRun /shep-kit:implement after planning is complete to start autonomous implementation.\n\n## What it does\n\n1. Pre-Implementation Validation Gate\n2. Autonomous Execution\n3. Status Tracking',
39
+ resources: [],
40
+ };
41
+ const minimalSkill = {
42
+ name: 'find-skills',
43
+ displayName: 'find-skills',
44
+ description: 'Helps users discover and install agent skills.',
45
+ category: 'Reference',
46
+ source: 'global',
47
+ body: '',
48
+ resources: [],
49
+ };
50
+ /* ---------------------------------------------------------------------------
51
+ * Trigger wrapper — starts closed, click to open
52
+ * ------------------------------------------------------------------------- */
53
+ function DrawerTrigger({ skill, label }) {
54
+ const [selected, setSelected] = useState(null);
55
+ return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setSelected(skill), children: label }), _jsx(SkillDetailDrawer, { skill: selected, onClose: () => setSelected(null) })] }));
56
+ }
57
+ /* ---------------------------------------------------------------------------
58
+ * Stories
59
+ * ------------------------------------------------------------------------- */
60
+ export const Open = {
61
+ render: () => _jsx(DrawerTrigger, { skill: skillWithResources, label: "Open Skill Detail" }),
62
+ };
63
+ export const WithResources = {
64
+ render: () => _jsx(DrawerTrigger, { skill: skillWithResources, label: "Open With Resources" }),
65
+ };
66
+ export const WithoutResources = {
67
+ render: () => _jsx(DrawerTrigger, { skill: skillWithoutResources, label: "Open Without Resources" }),
68
+ };
69
+ export const MinimalSkill = {
70
+ render: () => _jsx(DrawerTrigger, { skill: minimalSkill, label: "Open Minimal Skill" }),
71
+ };
@@ -0,0 +1,7 @@
1
+ import type { SkillData } from '../../../lib/skills.js';
2
+ export interface SkillListProps {
3
+ skills: SkillData[];
4
+ onSkillSelect: (skill: SkillData) => void;
5
+ }
6
+ export declare function SkillList({ skills, onSkillSelect }: SkillListProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=skill-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-list.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skill-list.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAI7D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC3C;AAYD,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,cAAc,2CA2BlE"}
@@ -0,0 +1,21 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { SkillCard } from './skill-card.js';
3
+ const CATEGORY_ORDER = ['Workflow', 'Code Generation', 'Analysis', 'Reference'];
4
+ function groupByCategory(skills) {
5
+ const groups = new Map();
6
+ for (const skill of skills) {
7
+ const group = groups.get(skill.category) ?? [];
8
+ group.push(skill);
9
+ groups.set(skill.category, group);
10
+ }
11
+ return groups;
12
+ }
13
+ export function SkillList({ skills, onSkillSelect }) {
14
+ const groups = groupByCategory(skills);
15
+ return (_jsx("div", { className: "space-y-8", children: CATEGORY_ORDER.map((category) => {
16
+ const categorySkills = groups.get(category);
17
+ if (!categorySkills || categorySkills.length === 0)
18
+ return null;
19
+ return (_jsxs("section", { children: [_jsxs("h2", { className: "mb-4 text-lg font-semibold", children: [category, ' ', _jsxs("span", { className: "text-muted-foreground text-sm font-normal", children: ["(", categorySkills.length, ")"] })] }), _jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", children: categorySkills.map((skill) => (_jsx(SkillCard, { skill: skill, onSelect: onSkillSelect }, skill.name))) })] }, category));
20
+ }) }));
21
+ }
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SkillList } from './skill-list.js';
3
+ declare const meta: Meta<typeof SkillList>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const SingleCategory: Story;
8
+ export declare const Empty: Story;
9
+ //# sourceMappingURL=skill-list.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-list.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skill-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAUhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwGnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAI5B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { fn } from '@storybook/test';
2
+ import { SkillList } from './skill-list.js';
3
+ const meta = {
4
+ title: 'Features/SkillList',
5
+ component: SkillList,
6
+ tags: ['autodocs'],
7
+ parameters: {
8
+ layout: 'padded',
9
+ },
10
+ args: {
11
+ onSkillSelect: fn(),
12
+ },
13
+ };
14
+ export default meta;
15
+ /* ---------------------------------------------------------------------------
16
+ * Data fixtures
17
+ * ------------------------------------------------------------------------- */
18
+ const workflowSkills = [
19
+ {
20
+ name: 'shep-kit:implement',
21
+ displayName: 'implement',
22
+ description: 'Validate specs and autonomously execute implementation tasks.',
23
+ category: 'Workflow',
24
+ source: 'project',
25
+ body: '',
26
+ resources: [],
27
+ },
28
+ {
29
+ name: 'shep-kit:plan',
30
+ displayName: 'plan',
31
+ description: 'Create implementation plan and task breakdown.',
32
+ category: 'Workflow',
33
+ source: 'project',
34
+ body: '',
35
+ resources: [],
36
+ },
37
+ {
38
+ name: 'shep-kit:research',
39
+ displayName: 'research',
40
+ description: 'Analyze technical approach, evaluate libraries, document decisions.',
41
+ category: 'Workflow',
42
+ source: 'project',
43
+ body: '',
44
+ resources: [],
45
+ },
46
+ ];
47
+ const codeGenSkills = [
48
+ {
49
+ name: 'shep:ui-component',
50
+ displayName: 'ui-component',
51
+ description: 'Use when creating, modifying, or reviewing web UI components.',
52
+ context: 'fork',
53
+ allowedTools: 'Read, Write, Bash, Edit, Glob',
54
+ category: 'Code Generation',
55
+ source: 'project',
56
+ body: '',
57
+ resources: [{ name: 'references', fileCount: 7 }],
58
+ },
59
+ ];
60
+ const analysisSkills = [
61
+ {
62
+ name: 'architecture-reviewer',
63
+ displayName: 'architecture-reviewer',
64
+ description: 'Use when making architectural decisions or reviewing PRs.',
65
+ context: 'fork',
66
+ category: 'Analysis',
67
+ source: 'project',
68
+ body: '',
69
+ resources: [],
70
+ },
71
+ {
72
+ name: 'cross-validate-artifacts',
73
+ displayName: 'cross-validate-artifacts',
74
+ description: 'Cross-validate documentation and artifacts for consistency.',
75
+ category: 'Analysis',
76
+ source: 'project',
77
+ body: '',
78
+ resources: [],
79
+ },
80
+ ];
81
+ const referenceSkills = [
82
+ {
83
+ name: 'shadcn-ui',
84
+ displayName: 'shadcn-ui',
85
+ description: 'Complete shadcn/ui component library patterns.',
86
+ category: 'Reference',
87
+ source: 'project',
88
+ body: '',
89
+ resources: [{ name: 'references', fileCount: 3 }],
90
+ },
91
+ {
92
+ name: 'vercel-react-best-practices',
93
+ displayName: 'vercel-react-best-practices',
94
+ description: 'React and Next.js performance optimization guidelines.',
95
+ category: 'Reference',
96
+ source: 'global',
97
+ body: '',
98
+ resources: [{ name: 'references', fileCount: 4 }],
99
+ },
100
+ ];
101
+ const allSkills = [
102
+ ...workflowSkills,
103
+ ...codeGenSkills,
104
+ ...analysisSkills,
105
+ ...referenceSkills,
106
+ ];
107
+ /* ---------------------------------------------------------------------------
108
+ * Stories
109
+ * ------------------------------------------------------------------------- */
110
+ export const Default = {
111
+ args: {
112
+ skills: allSkills,
113
+ },
114
+ };
115
+ export const SingleCategory = {
116
+ args: {
117
+ skills: workflowSkills,
118
+ },
119
+ };
120
+ export const Empty = {
121
+ args: {
122
+ skills: [],
123
+ },
124
+ };
@@ -0,0 +1,6 @@
1
+ import type { SkillData } from '../../../lib/skills.js';
2
+ export interface SkillsPageClientProps {
3
+ skills: SkillData[];
4
+ }
5
+ export declare function SkillsPageClient({ skills }: SkillsPageClientProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=skills-page-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAeD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CAiFjE"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useMemo } from 'react';
4
+ import { Search, Puzzle } from 'lucide-react';
5
+ import { Input } from '../../ui/input.js';
6
+ import { Button } from '../../ui/button.js';
7
+ import { PageHeader } from '../../common/page-header/index.js';
8
+ import { EmptyState } from '../../common/empty-state/index.js';
9
+ import { SkillList } from './skill-list.js';
10
+ import { CategoryFilter } from './category-filter.js';
11
+ import { SkillDetailDrawer } from './skill-detail-drawer.js';
12
+ function computeCategoryCounts(skills) {
13
+ const counts = {
14
+ Workflow: 0,
15
+ 'Code Generation': 0,
16
+ Analysis: 0,
17
+ Reference: 0,
18
+ };
19
+ for (const skill of skills) {
20
+ counts[skill.category]++;
21
+ }
22
+ return counts;
23
+ }
24
+ export function SkillsPageClient({ skills }) {
25
+ const [searchQuery, setSearchQuery] = useState('');
26
+ const [activeCategory, setActiveCategory] = useState(null);
27
+ const [selectedSkill, setSelectedSkill] = useState(null);
28
+ const categoryCounts = useMemo(() => computeCategoryCounts(skills), [skills]);
29
+ const filteredSkills = useMemo(() => {
30
+ const query = searchQuery.toLowerCase();
31
+ return skills.filter((skill) => {
32
+ if (activeCategory && skill.category !== activeCategory)
33
+ return false;
34
+ if (query) {
35
+ const matchesName = skill.name.toLowerCase().includes(query);
36
+ const matchesDescription = skill.description.toLowerCase().includes(query);
37
+ if (!matchesName && !matchesDescription)
38
+ return false;
39
+ }
40
+ return true;
41
+ });
42
+ }, [skills, searchQuery, activeCategory]);
43
+ const clearFilters = () => {
44
+ setSearchQuery('');
45
+ setActiveCategory(null);
46
+ };
47
+ // No skills installed at all
48
+ if (skills.length === 0) {
49
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills installed in this project" }), _jsx(EmptyState, { icon: _jsx(Puzzle, { className: "size-10" }), title: "No skills found", description: "No Claude Code skills are installed. Add skills to .claude/skills/ to get started." })] }));
50
+ }
51
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills installed in this project" }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx(Input, { placeholder: "Search skills...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "pl-9" })] }), _jsx(CategoryFilter, { activeCategory: activeCategory, onCategoryChange: setActiveCategory, counts: categoryCounts }), filteredSkills.length > 0 ? (_jsx(SkillList, { skills: filteredSkills, onSkillSelect: setSelectedSkill })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: "No matching skills", description: "No skills match your current search and filter criteria.", action: _jsx(Button, { variant: "outline", onClick: clearFilters, children: "Clear filters" }) })), _jsx(SkillDetailDrawer, { skill: selectedSkill, onClose: () => setSelectedSkill(null) })] }));
52
+ }
@@ -0,0 +1,16 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import { SkillsPageClient } from './skills-page-client.js';
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof SkillsPageClient;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ };
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+ export declare const Default: Story;
14
+ export declare const Empty: Story;
15
+ export declare const ManySkills: Story;
16
+ //# sourceMappingURL=skills-page-client.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,QAAA,MAAM,IAAI;;;;;;;CAO+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwKnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC"}
@@ -0,0 +1,186 @@
1
+ import { SkillsPageClient } from './skills-page-client.js';
2
+ const meta = {
3
+ title: 'Features/SkillsPageClient',
4
+ component: SkillsPageClient,
5
+ tags: ['autodocs'],
6
+ parameters: {
7
+ layout: 'fullscreen',
8
+ },
9
+ };
10
+ export default meta;
11
+ /* ---------------------------------------------------------------------------
12
+ * Data fixtures
13
+ * ------------------------------------------------------------------------- */
14
+ const sampleSkills = [
15
+ {
16
+ name: 'shep-kit:implement',
17
+ displayName: 'implement',
18
+ description: 'Validate specs and autonomously execute implementation tasks with status tracking.',
19
+ category: 'Workflow',
20
+ source: 'project',
21
+ body: '## Usage\n\nRun /shep-kit:implement after planning is complete.',
22
+ resources: [],
23
+ },
24
+ {
25
+ name: 'shep-kit:plan',
26
+ displayName: 'plan',
27
+ description: 'Create implementation plan and task breakdown.',
28
+ category: 'Workflow',
29
+ source: 'project',
30
+ body: '',
31
+ resources: [],
32
+ },
33
+ {
34
+ name: 'shep-kit:research',
35
+ displayName: 'research',
36
+ description: 'Analyze technical approach, evaluate libraries, document decisions.',
37
+ category: 'Workflow',
38
+ source: 'project',
39
+ body: '',
40
+ resources: [],
41
+ },
42
+ {
43
+ name: 'shep:ui-component',
44
+ displayName: 'ui-component',
45
+ description: 'Use when creating, modifying, or reviewing web UI components.',
46
+ context: 'fork',
47
+ allowedTools: 'Read, Write, Bash, Edit, Glob',
48
+ category: 'Code Generation',
49
+ source: 'project',
50
+ body: '',
51
+ resources: [
52
+ { name: 'references', fileCount: 7 },
53
+ { name: 'templates', fileCount: 3 },
54
+ ],
55
+ },
56
+ {
57
+ name: 'architecture-reviewer',
58
+ displayName: 'architecture-reviewer',
59
+ description: 'Use when making architectural decisions, planning features, or reviewing PRs.',
60
+ context: 'fork',
61
+ category: 'Analysis',
62
+ source: 'project',
63
+ body: '',
64
+ resources: [],
65
+ },
66
+ {
67
+ name: 'cross-validate-artifacts',
68
+ displayName: 'cross-validate-artifacts',
69
+ description: 'Cross-validate documentation and artifacts for consistency.',
70
+ category: 'Analysis',
71
+ source: 'project',
72
+ body: '',
73
+ resources: [],
74
+ },
75
+ {
76
+ name: 'shadcn-ui',
77
+ displayName: 'shadcn-ui',
78
+ description: 'Complete shadcn/ui component library patterns and implementation.',
79
+ category: 'Reference',
80
+ source: 'project',
81
+ body: '',
82
+ resources: [{ name: 'references', fileCount: 3 }],
83
+ },
84
+ {
85
+ name: 'vercel-react-best-practices',
86
+ displayName: 'vercel-react-best-practices',
87
+ description: 'React and Next.js performance optimization guidelines from Vercel Engineering.',
88
+ category: 'Reference',
89
+ source: 'global',
90
+ body: '',
91
+ resources: [{ name: 'references', fileCount: 4 }],
92
+ },
93
+ ];
94
+ const manySkills = [
95
+ ...sampleSkills,
96
+ {
97
+ name: 'shep-kit:commit-pr',
98
+ displayName: 'commit-pr',
99
+ description: 'Use when ready to commit, push, and create a PR with CI verification.',
100
+ category: 'Workflow',
101
+ source: 'project',
102
+ body: '',
103
+ resources: [],
104
+ },
105
+ {
106
+ name: 'shep-kit:new-feature',
107
+ displayName: 'new-feature',
108
+ description: 'Use when starting any new feature, functionality, or enhancement.',
109
+ category: 'Workflow',
110
+ source: 'project',
111
+ body: '',
112
+ resources: [],
113
+ },
114
+ {
115
+ name: 'shep-kit:new-feature-fast',
116
+ displayName: 'new-feature-fast',
117
+ description: 'Fast-track feature creation that collapses new-feature, research, and planning.',
118
+ category: 'Workflow',
119
+ source: 'project',
120
+ body: '',
121
+ resources: [],
122
+ },
123
+ {
124
+ name: 'shep-kit:merged',
125
+ displayName: 'merged',
126
+ description: 'Use after a PR has been merged to clean up branches.',
127
+ category: 'Workflow',
128
+ source: 'project',
129
+ body: '',
130
+ resources: [],
131
+ },
132
+ {
133
+ name: 'mermaid-diagrams',
134
+ displayName: 'mermaid-diagrams',
135
+ description: 'Comprehensive guide for creating software diagrams using Mermaid syntax.',
136
+ category: 'Reference',
137
+ source: 'project',
138
+ body: '',
139
+ resources: [{ name: 'references', fileCount: 2 }],
140
+ },
141
+ {
142
+ name: 'react-flow',
143
+ displayName: 'react-flow',
144
+ description: 'React Flow for workflow visualization with custom nodes and edges.',
145
+ category: 'Reference',
146
+ source: 'project',
147
+ body: '',
148
+ resources: [],
149
+ },
150
+ {
151
+ name: 'tsp-model',
152
+ displayName: 'tsp-model',
153
+ description: 'Use when creating, modifying, or documenting TypeSpec domain models.',
154
+ category: 'Reference',
155
+ source: 'project',
156
+ body: '',
157
+ resources: [{ name: 'references', fileCount: 5 }],
158
+ },
159
+ {
160
+ name: 'find-skills',
161
+ displayName: 'find-skills',
162
+ description: 'Helps users discover and install agent skills.',
163
+ category: 'Reference',
164
+ source: 'global',
165
+ body: '',
166
+ resources: [],
167
+ },
168
+ ];
169
+ /* ---------------------------------------------------------------------------
170
+ * Stories
171
+ * ------------------------------------------------------------------------- */
172
+ export const Default = {
173
+ args: {
174
+ skills: sampleSkills,
175
+ },
176
+ };
177
+ export const Empty = {
178
+ args: {
179
+ skills: [],
180
+ },
181
+ };
182
+ export const ManySkills = {
183
+ args: {
184
+ skills: manySkills,
185
+ },
186
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,EAAE,eAAe,2CA+FjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,EAAE,eAAe,2CAuGjB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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 { Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarRail, useSidebar, } from '../../ui/sidebar.js';
6
6
  import { ScrollArea } from '../../ui/scroll-area.js';
7
7
  import { SidebarNavItem } from '../../common/sidebar-nav-item/index.js';
@@ -12,6 +12,7 @@ import { FeatureStatusGroup } from '../../common/feature-status-group/index.js';
12
12
  import { SidebarSectionHeader } from '../../common/sidebar-section-header/index.js';
13
13
  import { featureStatusConfig, featureStatusOrder } from '../../common/feature-status-config.js';
14
14
  import { useDeferredMount } from '../../../hooks/use-deferred-mount.js';
15
+ import { featureFlags } from '../../../lib/feature-flags.js';
15
16
  export function AppSidebar({ features, onNewFeature, onFeatureClick, onFeaturesFolderClick, onFeaturesMenuClick, }) {
16
17
  const pathname = usePathname();
17
18
  const { state } = useSidebar();
@@ -26,7 +27,7 @@ export function AppSidebar({ features, onNewFeature, onFeatureClick, onFeaturesF
26
27
  'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
27
28
  'transition-opacity duration-200 ease-out',
28
29
  expandedVisible ? 'opacity-100' : 'opacity-0',
29
- ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20 }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
30
+ ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20 }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: "Skills", href: "/skills", active: pathname === '/skills' })) : null] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
30
31
  'min-w-0 overflow-hidden transition-opacity duration-200 ease-out',
31
32
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
32
33
  expandedVisible ? 'opacity-100' : 'opacity-0',
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Feature flags for the web UI.
3
+ *
4
+ * Toggle via environment variables (NEXT_PUBLIC_ prefix for client access).
5
+ * All flags default to **off** unless explicitly set to "true" or "1".
6
+ */
7
+ export declare const featureFlags: {
8
+ readonly skills: boolean;
9
+ };
10
+ //# sourceMappingURL=feature-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,YAAY;;CAEf,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Feature flags for the web UI.
3
+ *
4
+ * Toggle via environment variables (NEXT_PUBLIC_ prefix for client access).
5
+ * All flags default to **off** unless explicitly set to "true" or "1".
6
+ */
7
+ function isEnabled(envVar) {
8
+ return envVar === 'true' || envVar === '1';
9
+ }
10
+ export const featureFlags = {
11
+ skills: isEnabled(process.env.NEXT_PUBLIC_FLAG_SKILLS),
12
+ };
@@ -0,0 +1,30 @@
1
+ export type SkillCategory = 'Workflow' | 'Code Generation' | 'Analysis' | 'Reference';
2
+ export type SkillSource = 'project' | 'global';
3
+ export interface SkillResource {
4
+ name: string;
5
+ fileCount: number;
6
+ }
7
+ export interface SkillData {
8
+ name: string;
9
+ displayName: string;
10
+ description: string;
11
+ context?: string;
12
+ allowedTools?: string;
13
+ category: SkillCategory;
14
+ source: SkillSource;
15
+ body: string;
16
+ resources: SkillResource[];
17
+ }
18
+ export declare function deriveCategory(name: string): SkillCategory;
19
+ export declare function getDisplayName(name: string): string;
20
+ interface FrontmatterResult {
21
+ name: string;
22
+ description: string;
23
+ context?: string;
24
+ allowedTools?: string;
25
+ body: string;
26
+ }
27
+ export declare function parseFrontmatter(content: string): FrontmatterResult | null;
28
+ export declare function getSkills(projectRoot?: string, homeDir?: string): Promise<SkillData[]>;
29
+ export {};
30
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/skills.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC;AACtF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAUD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAK1D;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAID,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAiC1E;AA0ED,wBAAsB,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAiB5F"}