@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.
- package/dist/src/presentation/web/app/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/page.js +9 -0
- package/dist/src/presentation/web/app/skills/page.d.ts +2 -0
- package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/skills/page.js +11 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts +5 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.js +14 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.js +20 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/ci-status-badge/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +13 -2
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +41 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +9 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -12
- package/dist/src/presentation/web/components/features/skills/category-filter.d.ts +8 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.js +36 -0
- package/dist/src/presentation/web/components/features/skills/index.d.ts +6 -0
- package/dist/src/presentation/web/components/features/skills/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/index.js +5 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.js +12 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +88 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +13 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +71 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.js +21 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +124 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +6 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.js +52 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +186 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -2
- package/dist/src/presentation/web/lib/feature-flags.d.ts +10 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/feature-flags.js +12 -0
- package/dist/src/presentation/web/lib/skills.d.ts +30 -0
- package/dist/src/presentation/web/lib/skills.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/skills.js +137 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +4 -4
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +6 -0
- package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/server/app/page/build-manifest.json +2 -2
- package/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/page.js +1 -1
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/skills/page/build-manifest.json +17 -0
- package/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
- package/web/.next/server/app/skills/page.js +16 -0
- package/web/.next/server/app/skills/page.js.map +5 -0
- package/web/.next/server/app/skills/page.js.nft.json +1 -0
- package/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js.map → [root-of-the-server]__b6839c3f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
- package/web/.next/server/chunks/ssr/_34627374._.js +6 -0
- package/web/.next/server/chunks/ssr/_34627374._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
- package/web/.next/server/chunks/ssr/_9915d2a7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
- package/web/.next/server/chunks/ssr/{_e242b954._.js.map → _a64b7b24._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
- package/web/.next/server/chunks/ssr/_e7a4b0e4._.js.map +1 -0
- 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
- package/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +22 -15
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +17 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +16 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +2 -2
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_34627374._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -15
- package/web/.next/standalone/src/presentation/web/app/page.tsx +9 -0
- package/web/.next/standalone/src/presentation/web/app/skills/page.tsx +12 -0
- package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.tsx +27 -0
- package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.tsx +29 -0
- package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/index.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +53 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +61 -1
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +9 -0
- package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -29
- package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.stories.tsx +57 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.tsx +36 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/index.ts +5 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.stories.tsx +105 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.tsx +48 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.stories.tsx +96 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.tsx +100 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.stories.tsx +139 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.tsx +48 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.stories.tsx +199 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.tsx +112 -0
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +10 -1
- package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +14 -0
- package/web/.next/standalone/src/presentation/web/lib/skills.ts +188 -0
- package/web/.next/standalone/src/presentation/web/package.json +2 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/09d898be63c54f20.js +1 -0
- package/web/.next/static/chunks/{eb0e60434c992fc1.js → 1fe24572a810eafa.js} +5 -5
- package/web/.next/static/chunks/25f42652257ff43d.js +1 -0
- package/web/.next/static/chunks/2934854f0378f815.js +1 -0
- package/web/.next/static/chunks/7d3c5ae8f47e74cd.js +1 -0
- package/web/.next/static/chunks/8b2879f911a05b55.css +2 -0
- package/web/.next/static/chunks/acdb8af5a21f1ae9.js +1 -0
- package/web/.next/static/chunks/bac5122e95f5c7eb.js +1 -0
- package/web/.next/static/chunks/{3d4dcf0be654a331.js → cb1b27e4a21415d3.js} +2 -2
- package/web/.next/static/chunks/d4379644a6145352.js +1 -0
- package/web/.next/static/chunks/{turbopack-6a11f2f1634ff6e0.js → turbopack-eb24b869babb34b4.js} +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +1 -0
- package/web/.next/types/routes.d.ts +2 -1
- package/web/.next/types/validator.ts +9 -0
- package/web/package.json +2 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
- package/web/.next/server/chunks/ssr/_027596cf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
- package/web/.next/static/chunks/0cd7c513169faee3.js +0 -1
- package/web/.next/static/chunks/3f5de337d3fc604f.js +0 -1
- package/web/.next/static/chunks/60bbbe7ff679eb4c.css +0 -2
- package/web/.next/static/chunks/67459433cc866344.js +0 -1
- package/web/.next/static/chunks/7138c478667158d0.js +0 -1
- package/web/.next/static/chunks/a9c2b889c8749a94.js +0 -1
- package/web/.next/static/chunks/cda11a2491d519fc.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js.map → [root-of-the-server]__e926de65._.js.map} +0 -0
- /package/web/.next/static/{e7Q45G0MI6cgci9Gn2J-i → enyZhg62FqP6oInxg1T3h}/_buildManifest.js +0 -0
- /package/web/.next/static/{e7Q45G0MI6cgci9Gn2J-i → enyZhg62FqP6oInxg1T3h}/_clientMiddlewareManifest.json +0 -0
- /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
|
package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map
ADDED
|
@@ -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;
|
|
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"}
|