@shepai/cli 1.169.1-pr509.3238903 → 1.169.1

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 (379) hide show
  1. package/apis/json-schema/Feature.yaml +0 -10
  2. package/apis/json-schema/WorkflowConfig.yaml +0 -3
  3. package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -1
  4. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +0 -1
  7. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +1 -3
  8. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +3 -22
  10. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +0 -2
  11. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  12. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  13. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -55
  14. package/dist/packages/core/src/domain/generated/output.d.ts +0 -50
  15. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  16. package/dist/packages/core/src/domain/generated/output.js +0 -5
  17. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/di/container.js +0 -2
  19. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +0 -2
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +0 -6
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -2
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -27
  25. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +4 -8
  27. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  28. package/dist/src/presentation/cli/commands/feat/new.command.js +0 -3
  29. package/dist/src/presentation/web/app/actions/create-feature.d.ts +0 -2
  30. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  31. package/dist/src/presentation/web/app/actions/create-feature.js +1 -3
  32. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +0 -1
  33. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  34. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +0 -1
  35. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  36. package/dist/src/presentation/web/app/build-feature-node-data.js +0 -2
  37. package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -1
  38. package/dist/src/presentation/web/app/skills/page.js +1 -6
  39. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +0 -2
  40. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +2 -6
  42. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +0 -1
  44. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +4 -10
  46. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -2
  47. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -12
  49. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +0 -4
  50. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +1 -3
  52. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +3 -5
  54. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +0 -1
  55. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +0 -27
  57. package/dist/translations/ar/cli.json +0 -2
  58. package/dist/translations/ar/web.json +11 -15
  59. package/dist/translations/de/cli.json +0 -2
  60. package/dist/translations/de/web.json +17 -35
  61. package/dist/translations/en/cli.json +0 -2
  62. package/dist/translations/en/web.json +0 -4
  63. package/dist/translations/es/cli.json +0 -2
  64. package/dist/translations/es/web.json +12 -16
  65. package/dist/translations/fr/cli.json +0 -2
  66. package/dist/translations/fr/web.json +12 -16
  67. package/dist/translations/he/cli.json +0 -2
  68. package/dist/translations/he/web.json +12 -16
  69. package/dist/translations/pt/cli.json +0 -2
  70. package/dist/translations/pt/web.json +12 -16
  71. package/dist/translations/ru/cli.json +0 -2
  72. package/dist/translations/ru/web.json +12 -16
  73. package/dist/tsconfig.build.tsbuildinfo +1 -1
  74. package/package.json +1 -1
  75. package/web/.next/BUILD_ID +1 -1
  76. package/web/.next/build-manifest.json +5 -5
  77. package/web/.next/fallback-build-manifest.json +2 -2
  78. package/web/.next/prerender-manifest.json +3 -3
  79. package/web/.next/required-server-files.js +3 -3
  80. package/web/.next/required-server-files.json +3 -3
  81. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +3 -3
  82. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  83. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +3 -3
  87. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  88. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
  92. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  93. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  95. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  97. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  98. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  99. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  100. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
  102. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  103. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  104. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +3 -3
  107. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  108. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  109. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  110. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +3 -3
  112. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  113. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  114. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  115. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +3 -3
  117. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  118. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  119. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  120. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +3 -3
  122. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  123. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  124. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  125. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  127. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  128. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  129. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  130. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
  132. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  133. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  134. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/page/build-manifest.json +3 -3
  137. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  138. package/web/.next/server/app/(dashboard)/page.js +1 -1
  139. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +3 -3
  142. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  143. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  144. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +3 -3
  147. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  148. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  149. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  152. package/web/.next/server/app/_global-error.html +2 -2
  153. package/web/.next/server/app/_global-error.rsc +1 -1
  154. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  155. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  156. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  157. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  158. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  159. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  160. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  161. package/web/.next/server/app/_not-found/page.js +1 -1
  162. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  163. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  165. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  166. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  167. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  168. package/web/.next/server/app/features/page/build-manifest.json +3 -3
  169. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  170. package/web/.next/server/app/features/page.js +1 -1
  171. package/web/.next/server/app/features/page.js.nft.json +1 -1
  172. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/settings/page/build-manifest.json +3 -3
  174. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  175. package/web/.next/server/app/settings/page.js +3 -3
  176. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  177. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  178. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  179. package/web/.next/server/app/skills/page/server-reference-manifest.json +22 -52
  180. package/web/.next/server/app/skills/page.js +2 -3
  181. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  182. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  184. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  185. package/web/.next/server/app/tools/page.js +1 -1
  186. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  187. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  188. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  189. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  190. package/web/.next/server/app/version/page.js +1 -1
  191. package/web/.next/server/app/version/page.js.nft.json +1 -1
  192. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  194. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  195. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  196. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  197. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  199. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  201. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js +3 -0
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js.map +1 -0
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +1 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/{[root-of-the-server]__92ffd5ee._.js → [root-of-the-server]__7ffd3598._.js} +3 -3
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__7ffd3598._.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +2 -2
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1cd4327c._.js → [root-of-the-server]__e88da4ee._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__e88da4ee._.js.map +1 -0
  225. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  226. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  228. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/{403f9_next_8a33ddee._.js → _0727935d._.js} +2 -2
  230. package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -0
  231. package/web/.next/server/chunks/ssr/_0dc06d07._.js +3 -0
  232. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -0
  233. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  234. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  236. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  238. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  240. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  242. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  243. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/_682fc996._.js +9 -0
  245. package/web/.next/server/chunks/ssr/_682fc996._.js.map +1 -0
  246. package/web/.next/server/chunks/ssr/_6892e3b9._.js +3 -0
  247. package/web/.next/server/chunks/ssr/_6892e3b9._.js.map +1 -0
  248. package/web/.next/server/chunks/ssr/_9b964adc._.js +3 -0
  249. package/web/.next/server/chunks/ssr/{_10a571b8._.js.map → _9b964adc._.js.map} +1 -1
  250. package/web/.next/server/chunks/ssr/_a1068852._.js +3 -0
  251. package/web/.next/server/chunks/ssr/_a1068852._.js.map +1 -0
  252. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/{_d55b34d1._.js → _a8b338ec._.js} +2 -2
  255. package/web/.next/server/chunks/ssr/{_d55b34d1._.js.map → _a8b338ec._.js.map} +1 -1
  256. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  257. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  258. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  259. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  260. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  261. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  263. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  265. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  267. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  268. package/web/.next/server/chunks/ssr/{_11cbed18._.js → _fe058119._.js} +2 -2
  269. package/web/.next/server/chunks/ssr/{_11cbed18._.js.map → _fe058119._.js.map} +1 -1
  270. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  271. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  273. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/node_modules__pnpm_12a7ede0._.js +3 -0
  275. package/web/.next/server/chunks/ssr/node_modules__pnpm_12a7ede0._.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  280. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  281. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  284. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  285. package/web/.next/server/middleware-build-manifest.js +3 -3
  286. package/web/.next/server/pages/500.html +2 -2
  287. package/web/.next/server/server-reference-manifest.js +1 -1
  288. package/web/.next/server/server-reference-manifest.json +59 -89
  289. package/web/.next/static/chunks/{f1a5cda6353fe321.js → 021c9b0effb6d688.js} +1 -1
  290. package/web/.next/static/chunks/{cb638c28c942e3ca.js → 04c874f52a7cd435.js} +1 -1
  291. package/web/.next/static/chunks/20f7cc98a013b11c.js +1 -0
  292. package/web/.next/static/chunks/4cec255f2754e5ec.js +1 -0
  293. package/web/.next/static/chunks/{d52622eb492eadb1.js → 562c70303d910295.js} +1 -1
  294. package/web/.next/static/chunks/5b7275374d2696b3.css +1 -0
  295. package/web/.next/static/chunks/647140fe96a7c88a.js +1 -0
  296. package/web/.next/static/chunks/6d6f70ff5151b8cb.js +7 -0
  297. package/web/.next/static/chunks/84792d40edc4b027.js +5 -0
  298. package/web/.next/static/chunks/8800875bb3d56192.js +3 -0
  299. package/web/.next/static/chunks/8d581adafe8d1dd0.js +1 -0
  300. package/web/.next/static/chunks/982aef195c118996.js +1 -0
  301. package/web/.next/static/chunks/{f844d62e4159c965.js → a052c19c18e9eced.js} +1 -1
  302. package/web/.next/static/chunks/a6b5e739d2f89c6b.js +1 -0
  303. package/web/.next/static/chunks/b0e2fb3d4eb42f3d.js +1 -0
  304. package/web/.next/static/chunks/c3ef3b892f7794ec.js +1 -0
  305. package/web/.next/static/chunks/{783b3ac450c8199b.js → c5d89c12a73e0461.js} +2 -2
  306. package/web/.next/static/chunks/{9ba70e315d9b5dd6.js → caf7d7e1b439b29e.js} +1 -1
  307. package/web/.next/static/chunks/{853459c5497533d4.js → d6c39780c2f75ecd.js} +1 -1
  308. package/web/.next/static/chunks/dc134f3f58cdf850.js +5 -0
  309. package/web/.next/static/chunks/{205b4659bdfc9b72.js → ff9e33615f5c856c.js} +1 -1
  310. package/web/.next/static/chunks/{turbopack-b38a68b1b1c41a87.js → turbopack-57bb0674e2cd1d31.js} +1 -1
  311. package/apis/json-schema/SkillInjectionConfig.yaml +0 -17
  312. package/apis/json-schema/SkillSource.yaml +0 -21
  313. package/apis/json-schema/SkillSourceType.yaml +0 -7
  314. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts +0 -39
  315. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts.map +0 -1
  316. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.js +0 -8
  317. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts +0 -15
  318. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts.map +0 -1
  319. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.js +0 -23
  320. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts +0 -11
  321. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts.map +0 -1
  322. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.js +0 -19
  323. package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts +0 -26
  324. package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts.map +0 -1
  325. package/dist/packages/core/src/infrastructure/services/skill-injector.service.js +0 -201
  326. package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts +0 -7
  327. package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts.map +0 -1
  328. package/dist/src/presentation/web/app/actions/add-injected-skill.js +0 -34
  329. package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts +0 -6
  330. package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts.map +0 -1
  331. package/dist/src/presentation/web/app/actions/remove-injected-skill.js +0 -35
  332. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts +0 -10
  333. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts.map +0 -1
  334. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.js +0 -56
  335. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts +0 -16
  336. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts.map +0 -1
  337. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.js +0 -66
  338. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts +0 -8
  339. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts.map +0 -1
  340. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.js +0 -42
  341. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts +0 -16
  342. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts.map +0 -1
  343. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.js +0 -69
  344. package/web/.next/server/chunks/ssr/403f9_next_8a33ddee._.js.map +0 -1
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +0 -1
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js +0 -3
  348. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js.map +0 -1
  349. package/web/.next/server/chunks/ssr/_10a571b8._.js +0 -3
  350. package/web/.next/server/chunks/ssr/_45496654._.js +0 -3
  351. package/web/.next/server/chunks/ssr/_45496654._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/_6f35fb9a._.js +0 -3
  353. package/web/.next/server/chunks/ssr/_6f35fb9a._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/_a963dd3c._.js +0 -3
  355. package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +0 -1
  356. package/web/.next/server/chunks/ssr/_df737cce._.js +0 -3
  357. package/web/.next/server/chunks/ssr/_df737cce._.js.map +0 -1
  358. package/web/.next/server/chunks/ssr/_e3f14907._.js +0 -9
  359. package/web/.next/server/chunks/ssr/_e3f14907._.js.map +0 -1
  360. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
  361. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
  362. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +0 -3
  363. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +0 -1
  364. package/web/.next/static/chunks/008a238e3827134a.js +0 -1
  365. package/web/.next/static/chunks/185e4f36cb6efb24.js +0 -1
  366. package/web/.next/static/chunks/24ef0e36f68901cd.js +0 -1
  367. package/web/.next/static/chunks/74729cbad964be13.js +0 -1
  368. package/web/.next/static/chunks/86b3891618d9e165.js +0 -1
  369. package/web/.next/static/chunks/8cedbf904e6bca33.js +0 -3
  370. package/web/.next/static/chunks/a4668ef7bb93c465.js +0 -1
  371. package/web/.next/static/chunks/b0ed1ec320a0e51a.js +0 -1
  372. package/web/.next/static/chunks/b14085e99b88e7f7.css +0 -1
  373. package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
  374. package/web/.next/static/chunks/c669da1a499f4683.js +0 -7
  375. package/web/.next/static/chunks/cc5fe8d1d9e1e519.js +0 -5
  376. package/web/.next/static/chunks/cf1c386f350d1f1b.js +0 -5
  377. /package/web/.next/static/{w_8Pssf6--RSvCF6kGM86 → lFiCv3l4nIAIpZmj6eehh}/_buildManifest.js +0 -0
  378. /package/web/.next/static/{w_8Pssf6--RSvCF6kGM86 → lFiCv3l4nIAIpZmj6eehh}/_clientMiddlewareManifest.json +0 -0
  379. /package/web/.next/static/{w_8Pssf6--RSvCF6kGM86 → lFiCv3l4nIAIpZmj6eehh}/_ssgManifest.js +0 -0
@@ -1,23 +0,0 @@
1
- /**
2
- * Migration 050: Add skill injection config columns to the settings table.
3
- *
4
- * Adds two new columns for configuring skill injection during feature creation:
5
- * - skill_injection_enabled (INTEGER DEFAULT 0): whether skill injection is active
6
- * - skill_injection_skills (TEXT, nullable): JSON array of SkillSource objects
7
- *
8
- * Default value of 0 means skill injection is opt-in (disabled by default).
9
- * Guards against duplicate column errors using table_info pragma.
10
- */
11
- export async function up({ context: db }) {
12
- const columns = db.pragma('table_info(settings)');
13
- const names = new Set(columns.map((c) => c.name));
14
- if (!names.has('skill_injection_enabled')) {
15
- db.exec('ALTER TABLE settings ADD COLUMN skill_injection_enabled INTEGER NOT NULL DEFAULT 0');
16
- }
17
- if (!names.has('skill_injection_skills')) {
18
- db.exec('ALTER TABLE settings ADD COLUMN skill_injection_skills TEXT');
19
- }
20
- }
21
- export async function down({ context: db }) {
22
- void db;
23
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Migration 054: Add inject_skills and injected_skills columns to features table.
3
- *
4
- * inject_skills: boolean flag indicating skill injection was enabled for this feature.
5
- * injected_skills: JSON array of skill names that were injected into the worktree.
6
- */
7
- import type { MigrationParams } from 'umzug';
8
- import type Database from 'better-sqlite3';
9
- export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
10
- export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
11
- //# sourceMappingURL=054-add-injected-skills-to-features.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"054-add-injected-skills-to-features.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Migration 054: Add inject_skills and injected_skills columns to features table.
3
- *
4
- * inject_skills: boolean flag indicating skill injection was enabled for this feature.
5
- * injected_skills: JSON array of skill names that were injected into the worktree.
6
- */
7
- export async function up({ context: db }) {
8
- const columns = db.pragma('table_info(features)');
9
- const names = new Set(columns.map((c) => c.name));
10
- if (!names.has('inject_skills')) {
11
- db.exec('ALTER TABLE features ADD COLUMN inject_skills INTEGER NOT NULL DEFAULT 0');
12
- }
13
- if (!names.has('injected_skills')) {
14
- db.exec('ALTER TABLE features ADD COLUMN injected_skills TEXT');
15
- }
16
- }
17
- export async function down({ context: db }) {
18
- void db;
19
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Skill Injector Service Implementation
3
- *
4
- * Injects curated agent skills into worktrees during feature creation.
5
- * Handles local skill copying via fs.cp, remote skill installation via npx,
6
- * SKILL.md idempotency checks, and .gitignore management.
7
- *
8
- * Uses constructor-injected ExecFunction for process execution (npx, git)
9
- * and direct fs/promises imports for filesystem operations, following
10
- * the established codebase conventions.
11
- */
12
- import type { SkillInjectionConfig } from '../../domain/generated/output.js';
13
- import type { ISkillInjectorService, SkillInjectionResult } from '../../application/ports/output/services/skill-injector.interface.js';
14
- import type { ExecFunction } from './git/worktree.service.js';
15
- export declare class SkillInjectorService implements ISkillInjectorService {
16
- private readonly execFile;
17
- constructor(execFile: ExecFunction);
18
- inject(worktreePath: string, config: SkillInjectionConfig, repoRoot?: string): Promise<SkillInjectionResult>;
19
- private validateSkill;
20
- private isSkillPresent;
21
- private injectLocalSkill;
22
- private injectRemoteSkill;
23
- private isTrackedInGit;
24
- private updateGitignore;
25
- }
26
- //# sourceMappingURL=skill-injector.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-injector.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/skill-injector.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,kCAAkC,CAAC;AAE1F,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qEAAqE,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAY9D,qBACa,oBAAqB,YAAW,qBAAqB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC;IAgDhC,OAAO,CAAC,aAAa;YAoBP,cAAc;YASd,gBAAgB;YAkBhB,iBAAiB;YAiCjB,cAAc;YAWd,eAAe;CA4C9B"}
@@ -1,201 +0,0 @@
1
- /**
2
- * Skill Injector Service Implementation
3
- *
4
- * Injects curated agent skills into worktrees during feature creation.
5
- * Handles local skill copying via fs.cp, remote skill installation via npx,
6
- * SKILL.md idempotency checks, and .gitignore management.
7
- *
8
- * Uses constructor-injected ExecFunction for process execution (npx, git)
9
- * and direct fs/promises imports for filesystem operations, following
10
- * the established codebase conventions.
11
- */
12
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
- return c > 3 && r && Object.defineProperty(target, key, r), r;
17
- };
18
- var __metadata = (this && this.__metadata) || function (k, v) {
19
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20
- };
21
- var __param = (this && this.__param) || function (paramIndex, decorator) {
22
- return function (target, key) { decorator(target, key, paramIndex); }
23
- };
24
- import { access, cp, mkdir, readFile, writeFile } from 'node:fs/promises';
25
- import { join } from 'node:path';
26
- import { injectable, inject } from 'tsyringe';
27
- import { SkillSourceType } from '../../domain/generated/output.js';
28
- const SKILLS_DIR = '.claude/skills';
29
- const SKILL_MARKER = 'SKILL.md';
30
- const REMOTE_SKILL_TIMEOUT_MS = 30_000;
31
- /** Shell metacharacters that must not appear in skill source strings */
32
- const SHELL_METACHAR_PATTERN = /[;|&$`\\(){}< >]/;
33
- /** Patterns that indicate path traversal in skill names */
34
- const PATH_TRAVERSAL_PATTERN = /\.\./;
35
- let SkillInjectorService = class SkillInjectorService {
36
- execFile;
37
- constructor(execFile) {
38
- this.execFile = execFile;
39
- }
40
- async inject(worktreePath, config, repoRoot) {
41
- // Validate worktree path exists
42
- await access(worktreePath);
43
- const result = {
44
- injected: [],
45
- skipped: [],
46
- failed: [],
47
- };
48
- if (!config.skills.length) {
49
- return result;
50
- }
51
- // Bootstrap .claude/skills/ directory
52
- const skillsDir = join(worktreePath, SKILLS_DIR);
53
- await mkdir(skillsDir, { recursive: true });
54
- // Process each skill
55
- for (const skill of config.skills) {
56
- // Validate skill name and source
57
- const validationError = this.validateSkill(skill);
58
- if (validationError) {
59
- result.failed.push({ name: skill.name, error: validationError });
60
- continue;
61
- }
62
- // Idempotency check: skip if SKILL.md already exists
63
- if (await this.isSkillPresent(worktreePath, skill.name)) {
64
- result.skipped.push(skill.name);
65
- continue;
66
- }
67
- // Inject based on type
68
- if (skill.type === SkillSourceType.Local) {
69
- await this.injectLocalSkill(worktreePath, skill, repoRoot, result);
70
- }
71
- else {
72
- await this.injectRemoteSkill(worktreePath, skill, result);
73
- }
74
- }
75
- // Update .gitignore for injected and skipped untracked skills
76
- const allSkillNames = [...result.injected, ...result.skipped];
77
- await this.updateGitignore(worktreePath, allSkillNames);
78
- return result;
79
- }
80
- validateSkill(skill) {
81
- // Validate skill name
82
- if (PATH_TRAVERSAL_PATTERN.test(skill.name)) {
83
- return `invalid skill name '${skill.name}': contains path traversal`;
84
- }
85
- if (skill.name.startsWith('/')) {
86
- return `invalid skill name '${skill.name}': absolute path not allowed`;
87
- }
88
- if (skill.name.includes('\\')) {
89
- return `invalid skill name '${skill.name}': backslash not allowed`;
90
- }
91
- // Validate source for remote skills (shell injection prevention)
92
- if (skill.type === SkillSourceType.Remote && SHELL_METACHAR_PATTERN.test(skill.source)) {
93
- return `invalid source '${skill.source}': contains shell metacharacters`;
94
- }
95
- return undefined;
96
- }
97
- async isSkillPresent(worktreePath, skillName) {
98
- try {
99
- await access(join(worktreePath, SKILLS_DIR, skillName, SKILL_MARKER));
100
- return true;
101
- }
102
- catch {
103
- return false;
104
- }
105
- }
106
- async injectLocalSkill(worktreePath, skill, repoRoot, result) {
107
- const sourcePath = repoRoot ? join(repoRoot, skill.source) : skill.source;
108
- const destPath = join(worktreePath, SKILLS_DIR, skill.name);
109
- try {
110
- await cp(sourcePath, destPath, { recursive: true });
111
- result.injected.push(skill.name);
112
- }
113
- catch (error) {
114
- const message = error instanceof Error ? error.message : String(error);
115
- result.failed.push({ name: skill.name, error: message });
116
- }
117
- }
118
- async injectRemoteSkill(worktreePath, skill, result) {
119
- const controller = new AbortController();
120
- const timer = setTimeout(() => controller.abort(), REMOTE_SKILL_TIMEOUT_MS);
121
- try {
122
- const args = ['skills', 'add', skill.source, '--yes'];
123
- if (skill.remoteSkillName) {
124
- args.push('--skill', skill.remoteSkillName);
125
- }
126
- await this.execFile('npx', args, {
127
- cwd: worktreePath,
128
- signal: controller.signal,
129
- });
130
- result.injected.push(skill.name);
131
- }
132
- catch (error) {
133
- const isTimeout = error instanceof Error && error.name === 'AbortError';
134
- const message = isTimeout
135
- ? `timeout: remote skill installation exceeded ${REMOTE_SKILL_TIMEOUT_MS / 1000}s`
136
- : error instanceof Error
137
- ? error.message
138
- : String(error);
139
- result.failed.push({ name: skill.name, error: message });
140
- }
141
- finally {
142
- clearTimeout(timer);
143
- }
144
- }
145
- async isTrackedInGit(worktreePath, skillName) {
146
- try {
147
- await this.execFile('git', ['ls-files', '--error-unmatch', `${SKILLS_DIR}/${skillName}/`], {
148
- cwd: worktreePath,
149
- });
150
- return true;
151
- }
152
- catch {
153
- return false;
154
- }
155
- }
156
- async updateGitignore(worktreePath, skillNames) {
157
- if (!skillNames.length)
158
- return;
159
- // Determine which skills need .gitignore entries (untracked only)
160
- const untrackedSkills = [];
161
- for (const name of skillNames) {
162
- if (!(await this.isTrackedInGit(worktreePath, name))) {
163
- untrackedSkills.push(name);
164
- }
165
- }
166
- if (!untrackedSkills.length)
167
- return;
168
- const gitignorePath = join(worktreePath, '.gitignore');
169
- // Read existing .gitignore (or start with empty string)
170
- let existingContent = '';
171
- try {
172
- const content = await readFile(gitignorePath, 'utf-8');
173
- existingContent = typeof content === 'string' ? content : '';
174
- }
175
- catch {
176
- // File doesn't exist — will create it
177
- }
178
- // Determine which entries are new
179
- const existingLines = new Set(existingContent.split('\n').map((line) => line.trim()));
180
- const newEntries = [];
181
- for (const name of untrackedSkills) {
182
- const pattern = `${SKILLS_DIR}/${name}/`;
183
- if (!existingLines.has(pattern)) {
184
- newEntries.push(pattern);
185
- }
186
- }
187
- if (!newEntries.length)
188
- return;
189
- // Append new entries, ensuring trailing newline
190
- const needsNewline = existingContent.length > 0 && !existingContent.endsWith('\n');
191
- const separator = needsNewline ? '\n' : '';
192
- const updatedContent = `${existingContent + separator + newEntries.join('\n')}\n`;
193
- await writeFile(gitignorePath, updatedContent);
194
- }
195
- };
196
- SkillInjectorService = __decorate([
197
- injectable(),
198
- __param(0, inject('ExecFunction')),
199
- __metadata("design:paramtypes", [Function])
200
- ], SkillInjectorService);
201
- export { SkillInjectorService };
@@ -1,7 +0,0 @@
1
- import type { SkillSource } from '../../../../../packages/core/src/domain/generated/output.js';
2
- export interface AddInjectedSkillResult {
3
- success: boolean;
4
- error?: string;
5
- }
6
- export declare function addInjectedSkill(skill: SkillSource): Promise<AddInjectedSkillResult>;
7
- //# sourceMappingURL=add-injected-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-injected-skill.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/add-injected-skill.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgC1F"}
@@ -1,34 +0,0 @@
1
- 'use server';
2
- import { revalidatePath } from 'next/cache';
3
- import { resolve } from '../../lib/server-container.js';
4
- import { updateSettings as updateSettingsSingleton } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
5
- export async function addInjectedSkill(skill) {
6
- try {
7
- const loadUseCase = resolve('LoadSettingsUseCase');
8
- const current = await loadUseCase.execute();
9
- const existingSkills = current.workflow.skillInjection?.skills ?? [];
10
- if (existingSkills.some((s) => s.name === skill.name)) {
11
- return { success: false, error: `Skill "${skill.name}" is already configured` };
12
- }
13
- const updated = {
14
- ...current,
15
- workflow: {
16
- ...current.workflow,
17
- skillInjection: {
18
- enabled: current.workflow.skillInjection?.enabled ?? true,
19
- skills: [...existingSkills, skill],
20
- },
21
- },
22
- updatedAt: new Date(),
23
- };
24
- const updateUseCase = resolve('UpdateSettingsUseCase');
25
- await updateUseCase.execute(updated);
26
- updateSettingsSingleton(updated);
27
- revalidatePath('/skills');
28
- return { success: true };
29
- }
30
- catch (error) {
31
- const message = error instanceof Error ? error.message : 'Failed to add skill';
32
- return { success: false, error: message };
33
- }
34
- }
@@ -1,6 +0,0 @@
1
- export interface RemoveInjectedSkillResult {
2
- success: boolean;
3
- error?: string;
4
- }
5
- export declare function removeInjectedSkill(skillName: string): Promise<RemoveInjectedSkillResult>;
6
- //# sourceMappingURL=remove-injected-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove-injected-skill.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/remove-injected-skill.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAkC/F"}
@@ -1,35 +0,0 @@
1
- 'use server';
2
- import { revalidatePath } from 'next/cache';
3
- import { resolve } from '../../lib/server-container.js';
4
- import { updateSettings as updateSettingsSingleton } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
5
- export async function removeInjectedSkill(skillName) {
6
- try {
7
- const loadUseCase = resolve('LoadSettingsUseCase');
8
- const current = await loadUseCase.execute();
9
- const existingSkills = current.workflow.skillInjection?.skills ?? [];
10
- const filtered = existingSkills.filter((s) => s.name !== skillName);
11
- if (filtered.length === existingSkills.length) {
12
- return { success: false, error: `Skill "${skillName}" not found in configuration` };
13
- }
14
- const updated = {
15
- ...current,
16
- workflow: {
17
- ...current.workflow,
18
- skillInjection: {
19
- enabled: current.workflow.skillInjection?.enabled ?? false,
20
- skills: filtered,
21
- },
22
- },
23
- updatedAt: new Date(),
24
- };
25
- const updateUseCase = resolve('UpdateSettingsUseCase');
26
- await updateUseCase.execute(updated);
27
- updateSettingsSingleton(updated);
28
- revalidatePath('/skills');
29
- return { success: true };
30
- }
31
- catch (error) {
32
- const message = error instanceof Error ? error.message : 'Failed to remove skill';
33
- return { success: false, error: message };
34
- }
35
- }
@@ -1,10 +0,0 @@
1
- import type { SkillData } from '../../../lib/skills.js';
2
- export interface AddSkillDialogProps {
3
- open: boolean;
4
- onOpenChange: (open: boolean) => void;
5
- onAdded: () => void;
6
- discoveredSkills: SkillData[];
7
- existingSkillNames: string[];
8
- }
9
- export declare function AddSkillDialog({ open, onOpenChange, onAdded, discoveredSkills, existingSkillNames, }: AddSkillDialogProps): import("react/jsx-runtime").JSX.Element;
10
- //# sourceMappingURL=add-skill-dialog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-skill-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,mBAAmB,2CAuIrB"}
@@ -1,56 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from 'react';
4
- import { toast } from 'sonner';
5
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '../../ui/dialog.js';
6
- import { Button } from '../../ui/button.js';
7
- import { Input } from '../../ui/input.js';
8
- import { Label } from '../../ui/label.js';
9
- import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs.js';
10
- import { addInjectedSkill } from '../../../app/actions/add-injected-skill.js';
11
- export function AddSkillDialog({ open, onOpenChange, onAdded, discoveredSkills, existingSkillNames, }) {
12
- const [isSubmitting, setIsSubmitting] = useState(false);
13
- const [remoteName, setRemoteName] = useState('');
14
- const [remoteSource, setRemoteSource] = useState('');
15
- const [remoteSkillName, setRemoteSkillName] = useState('');
16
- const availableSkills = discoveredSkills.filter((s) => !existingSkillNames.includes(s.name));
17
- const handleAddLocal = async (skill) => {
18
- setIsSubmitting(true);
19
- const result = await addInjectedSkill({
20
- name: skill.name,
21
- type: 'local',
22
- source: `.claude/skills/${skill.name}`,
23
- });
24
- setIsSubmitting(false);
25
- if (!result.success) {
26
- toast.error(result.error ?? 'Failed to add skill');
27
- return;
28
- }
29
- toast.success(`Added "${skill.name}" to feature skills`);
30
- onAdded();
31
- };
32
- const handleAddRemote = async () => {
33
- if (!remoteName.trim() || !remoteSource.trim()) {
34
- toast.error('Name and source are required');
35
- return;
36
- }
37
- setIsSubmitting(true);
38
- const result = await addInjectedSkill({
39
- name: remoteName.trim(),
40
- type: 'remote',
41
- source: remoteSource.trim(),
42
- ...(remoteSkillName.trim() && { remoteSkillName: remoteSkillName.trim() }),
43
- });
44
- setIsSubmitting(false);
45
- if (!result.success) {
46
- toast.error(result.error ?? 'Failed to add skill');
47
- return;
48
- }
49
- toast.success(`Added "${remoteName.trim()}" to feature skills`);
50
- setRemoteName('');
51
- setRemoteSource('');
52
- setRemoteSkillName('');
53
- onAdded();
54
- };
55
- return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-md", "data-testid": "add-skill-dialog", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Add Skill to Features" }) }), _jsxs(Tabs, { defaultValue: "local", children: [_jsxs(TabsList, { className: "w-full", children: [_jsx(TabsTrigger, { value: "local", className: "flex-1", children: "Local" }), _jsx(TabsTrigger, { value: "remote", className: "flex-1", children: "Remote" })] }), _jsx(TabsContent, { value: "local", className: "mt-4", children: availableSkills.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "All discovered skills are already configured." })) : (_jsx("div", { className: "flex max-h-60 flex-col gap-2 overflow-y-auto", children: availableSkills.map((skill) => (_jsxs("button", { type: "button", className: "hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors", onClick: () => handleAddLocal(skill), disabled: isSubmitting, "data-testid": `add-local-skill-${skill.name}`, children: [_jsx("span", { className: "text-sm font-medium", children: skill.displayName }), _jsx("span", { className: "text-muted-foreground line-clamp-1 text-xs", children: skill.description })] }, skill.name))) })) }), _jsx(TabsContent, { value: "remote", className: "mt-4", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-name", children: "Name" }), _jsx(Input, { id: "remote-name", placeholder: "e.g. remotion-best-practices", value: remoteName, onChange: (e) => setRemoteName(e.target.value), "data-testid": "remote-skill-name" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-source", children: "Source (npm package or URL)" }), _jsx(Input, { id: "remote-source", placeholder: "e.g. @anthropic/remotion-skills", value: remoteSource, onChange: (e) => setRemoteSource(e.target.value), "data-testid": "remote-skill-source" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-skill-name", children: "Skill Name (optional)" }), _jsx(Input, { id: "remote-skill-name", placeholder: "e.g. remotion-best-practices", value: remoteSkillName, onChange: (e) => setRemoteSkillName(e.target.value), "data-testid": "remote-skill-skill-name" })] }), _jsx(DialogFooter, { children: _jsx(Button, { onClick: handleAddRemote, disabled: isSubmitting || !remoteName.trim() || !remoteSource.trim(), "data-testid": "add-remote-skill-submit", children: "Add Remote Skill" }) })] }) })] })] }) }));
56
- }
@@ -1,16 +0,0 @@
1
- import type { StoryObj } from '@storybook/react';
2
- import { AddSkillDialog } from './add-skill-dialog.js';
3
- declare const meta: {
4
- title: string;
5
- component: typeof AddSkillDialog;
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 SomeAlreadyConfigured: Story;
15
- export declare const AllConfigured: Story;
16
- //# sourceMappingURL=add-skill-dialog.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-skill-dialog.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,QAAA,MAAM,IAAI;;;;;;;CAO6B,CAAC;AAExC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAgCnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAQnC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC"}
@@ -1,66 +0,0 @@
1
- import { AddSkillDialog } from './add-skill-dialog.js';
2
- const meta = {
3
- title: 'Features/Skills/AddSkillDialog',
4
- component: AddSkillDialog,
5
- tags: ['autodocs'],
6
- parameters: {
7
- layout: 'centered',
8
- },
9
- };
10
- export default meta;
11
- const sampleDiscoveredSkills = [
12
- {
13
- name: 'architecture-reviewer',
14
- displayName: 'architecture-reviewer',
15
- description: 'Review architecture decisions against Clean Architecture principles',
16
- category: 'Analysis',
17
- source: 'project',
18
- body: '',
19
- resources: [],
20
- },
21
- {
22
- name: 'cross-validate-artifacts',
23
- displayName: 'cross-validate-artifacts',
24
- description: 'Cross-validate documentation and artifacts across the codebase',
25
- category: 'Analysis',
26
- source: 'project',
27
- body: '',
28
- resources: [],
29
- },
30
- {
31
- name: 'tsp-model',
32
- displayName: 'tsp-model',
33
- description: 'Create and modify TypeSpec domain models',
34
- category: 'Code Generation',
35
- source: 'project',
36
- body: '',
37
- resources: [],
38
- },
39
- ];
40
- export const Default = {
41
- args: {
42
- open: true,
43
- onOpenChange: () => undefined,
44
- onAdded: () => undefined,
45
- discoveredSkills: sampleDiscoveredSkills,
46
- existingSkillNames: [],
47
- },
48
- };
49
- export const SomeAlreadyConfigured = {
50
- args: {
51
- open: true,
52
- onOpenChange: () => undefined,
53
- onAdded: () => undefined,
54
- discoveredSkills: sampleDiscoveredSkills,
55
- existingSkillNames: ['architecture-reviewer'],
56
- },
57
- };
58
- export const AllConfigured = {
59
- args: {
60
- open: true,
61
- onOpenChange: () => undefined,
62
- onAdded: () => undefined,
63
- discoveredSkills: sampleDiscoveredSkills,
64
- existingSkillNames: ['architecture-reviewer', 'cross-validate-artifacts', 'tsp-model'],
65
- },
66
- };
@@ -1,8 +0,0 @@
1
- import type { SkillInjectionConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
2
- import type { SkillData } from '../../../lib/skills.js';
3
- export interface AutoInjectedSkillsSectionProps {
4
- config: SkillInjectionConfig;
5
- discoveredSkills: SkillData[];
6
- }
7
- export declare function AutoInjectedSkillsSection({ config, discoveredSkills, }: AutoInjectedSkillsSectionProps): import("react/jsx-runtime").JSX.Element;
8
- //# sourceMappingURL=auto-injected-skills-section.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-injected-skills-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,sCAAsC,CAAC;AAM9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,gBAAgB,EAAE,SAAS,EAAE,CAAC;CAC/B;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,gBAAgB,GACjB,EAAE,8BAA8B,2CA2EhC"}
@@ -1,42 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useMemo, useState } from 'react';
4
- import { useRouter } from 'next/navigation';
5
- import { Plus, X } from 'lucide-react';
6
- import { toast } from 'sonner';
7
- import { Badge } from '../../ui/badge.js';
8
- import { Button } from '../../ui/button.js';
9
- import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
10
- import { removeInjectedSkill } from '../../../app/actions/remove-injected-skill.js';
11
- import { AddSkillDialog } from './add-skill-dialog.js';
12
- export function AutoInjectedSkillsSection({ config, discoveredSkills, }) {
13
- const router = useRouter();
14
- const [addDialogOpen, setAddDialogOpen] = useState(false);
15
- const [removingSkill, setRemovingSkill] = useState(null);
16
- const skillDescriptions = useMemo(() => {
17
- const map = new Map();
18
- for (const s of discoveredSkills) {
19
- map.set(s.name, s.description);
20
- }
21
- return map;
22
- }, [discoveredSkills]);
23
- const handleRemove = async (skillName) => {
24
- setRemovingSkill(skillName);
25
- const result = await removeInjectedSkill(skillName);
26
- setRemovingSkill(null);
27
- if (!result.success) {
28
- toast.error(result.error ?? 'Failed to remove skill');
29
- return;
30
- }
31
- toast.success(`Removed "${skillName}" from feature skills`);
32
- router.refresh();
33
- };
34
- const handleAdded = () => {
35
- setAddDialogOpen(false);
36
- router.refresh();
37
- };
38
- return (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-base font-semibold", children: "Feature Skills" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Curated skills included in new feature worktrees to guide the agent" })] }), config.skills.length > 0 ? (_jsx("div", { className: "grid gap-2 sm:grid-cols-2 lg:grid-cols-3", children: config.skills.map((skill) => (_jsx(InjectedSkillCard, { skill: skill, description: skillDescriptions.get(skill.name), onRemove: () => handleRemove(skill.name), isRemoving: removingSkill === skill.name }, skill.name))) })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: "No skills configured. Add skills to guide the agent when working on new features." })), _jsx("div", { children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => setAddDialogOpen(true), "data-testid": "add-injected-skill-button", children: [_jsx(Plus, { className: "mr-1.5 size-4" }), "Add Skill"] }) }), _jsx(AddSkillDialog, { open: addDialogOpen, onOpenChange: setAddDialogOpen, onAdded: handleAdded, discoveredSkills: discoveredSkills, existingSkillNames: config.skills.map((s) => s.name) })] }));
39
- }
40
- function InjectedSkillCard({ skill, description, onRemove, isRemoving, }) {
41
- return (_jsxs(Card, { "data-testid": `injected-skill-${skill.name}`, children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-2 pb-2", children: [_jsx("div", { className: "min-w-0", children: _jsx(CardTitle, { className: "truncate text-sm", children: skill.name }) }), _jsx(Button, { variant: "ghost", size: "icon-sm", className: "shrink-0", onClick: onRemove, disabled: isRemoving, "aria-label": `Remove ${skill.name}`, "data-testid": `remove-injected-skill-${skill.name}`, children: _jsx(X, { className: "size-4" }) })] }), _jsxs(CardContent, { className: "space-y-2 pt-0", children: [description ? (_jsx("p", { className: "text-muted-foreground line-clamp-2 text-xs", children: description })) : null, _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Badge, { variant: skill.type === 'local' ? 'secondary' : 'outline', className: "text-xs", children: skill.type === 'local' ? 'Local' : 'Remote' }), _jsx("span", { className: "text-muted-foreground max-w-37.5 truncate text-xs", children: skill.source })] })] })] }));
42
- }
@@ -1,16 +0,0 @@
1
- import type { StoryObj } from '@storybook/react';
2
- import { AutoInjectedSkillsSection } from './auto-injected-skills-section.js';
3
- declare const meta: {
4
- title: string;
5
- component: typeof AutoInjectedSkillsSection;
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 SingleSkill: Story;
15
- export declare const EmptySkills: Story;
16
- //# sourceMappingURL=auto-injected-skills-section.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-injected-skills-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,QAAA,MAAM,IAAI;;;;;;;CAOwC,CAAC;AAEnD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAyCnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAQzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC"}