@shepai/cli 1.169.1 → 1.170.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/apis/json-schema/Feature.yaml +10 -0
  2. package/apis/json-schema/SkillInjectionConfig.yaml +17 -0
  3. package/apis/json-schema/SkillSource.yaml +21 -0
  4. package/apis/json-schema/SkillSourceType.yaml +7 -0
  5. package/apis/json-schema/WorkflowConfig.yaml +3 -0
  6. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +8 -0
  7. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  9. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts +39 -0
  11. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.js +8 -0
  13. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +1 -0
  15. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
  16. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +22 -3
  18. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  19. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  20. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +1 -1
  21. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +23 -2
  22. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  23. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +55 -1
  24. package/dist/packages/core/src/domain/generated/output.d.ts +50 -0
  25. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  26. package/dist/packages/core/src/domain/generated/output.js +5 -0
  27. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/di/container.js +2 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +2 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +6 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +27 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts +15 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts.map +1 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.js +23 -0
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts +11 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts.map +1 -0
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.js +19 -0
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +8 -4
  43. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +21 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +1 -1
  45. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +61 -0
  46. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +16 -0
  47. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -1
  48. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +47 -4
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +39 -20
  51. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts +5 -0
  52. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts.map +1 -1
  53. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.js +34 -0
  54. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
  55. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +8 -0
  57. package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts +26 -0
  58. package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts.map +1 -0
  59. package/dist/packages/core/src/infrastructure/services/skill-injector.service.js +201 -0
  60. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  61. package/dist/src/presentation/cli/commands/feat/new.command.js +3 -0
  62. package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts +7 -0
  63. package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts.map +1 -0
  64. package/dist/src/presentation/web/app/actions/add-injected-skill.js +34 -0
  65. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  66. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  68. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +1 -0
  69. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  70. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +1 -0
  71. package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts +6 -0
  72. package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts.map +1 -0
  73. package/dist/src/presentation/web/app/actions/remove-injected-skill.js +35 -0
  74. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  75. package/dist/src/presentation/web/app/build-feature-node-data.js +2 -0
  76. package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -1
  77. package/dist/src/presentation/web/app/skills/page.js +6 -1
  78. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  79. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +6 -2
  81. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -0
  83. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +10 -4
  85. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +2 -0
  86. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +12 -0
  88. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +4 -0
  89. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts +10 -0
  91. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts.map +1 -0
  92. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.js +56 -0
  93. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts +16 -0
  94. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts.map +1 -0
  95. package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.js +66 -0
  96. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts +8 -0
  97. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts.map +1 -0
  98. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.js +42 -0
  99. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts +16 -0
  100. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts.map +1 -0
  101. package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.js +69 -0
  102. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +3 -1
  103. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +5 -3
  105. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +1 -0
  106. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +27 -0
  108. package/dist/translations/ar/cli.json +2 -0
  109. package/dist/translations/ar/web.json +15 -11
  110. package/dist/translations/de/cli.json +2 -0
  111. package/dist/translations/de/web.json +35 -17
  112. package/dist/translations/en/cli.json +2 -0
  113. package/dist/translations/en/web.json +4 -0
  114. package/dist/translations/es/cli.json +2 -0
  115. package/dist/translations/es/web.json +16 -12
  116. package/dist/translations/fr/cli.json +2 -0
  117. package/dist/translations/fr/web.json +16 -12
  118. package/dist/translations/he/cli.json +2 -0
  119. package/dist/translations/he/web.json +16 -12
  120. package/dist/translations/pt/cli.json +2 -0
  121. package/dist/translations/pt/web.json +16 -12
  122. package/dist/translations/ru/cli.json +2 -0
  123. package/dist/translations/ru/web.json +16 -12
  124. package/dist/tsconfig.build.tsbuildinfo +1 -1
  125. package/package.json +1 -1
  126. package/web/.next/BUILD_ID +1 -1
  127. package/web/.next/build-manifest.json +5 -5
  128. package/web/.next/fallback-build-manifest.json +2 -2
  129. package/web/.next/prerender-manifest.json +3 -3
  130. package/web/.next/required-server-files.js +2 -2
  131. package/web/.next/required-server-files.json +2 -2
  132. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +3 -3
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  134. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  135. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +3 -3
  138. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  139. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
  143. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  144. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  148. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  149. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
  153. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  154. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  155. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  156. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +3 -3
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  161. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  162. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +3 -3
  163. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  164. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +3 -3
  168. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  169. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  170. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  171. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  172. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +3 -3
  173. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  174. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  175. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  176. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  181. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  182. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
  183. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  184. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  185. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  186. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  187. package/web/.next/server/app/(dashboard)/page/build-manifest.json +3 -3
  188. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  189. package/web/.next/server/app/(dashboard)/page.js +1 -1
  190. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  191. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  192. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +3 -3
  193. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  194. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  195. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  196. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +3 -3
  198. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  199. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  200. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  201. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  203. package/web/.next/server/app/_global-error.html +2 -2
  204. package/web/.next/server/app/_global-error.rsc +1 -1
  205. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  206. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  207. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  208. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  209. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  210. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  211. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  212. package/web/.next/server/app/_not-found/page.js +1 -1
  213. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  214. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  215. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  216. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  217. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  218. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  219. package/web/.next/server/app/features/page/build-manifest.json +3 -3
  220. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  221. package/web/.next/server/app/features/page.js +1 -1
  222. package/web/.next/server/app/features/page.js.nft.json +1 -1
  223. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  224. package/web/.next/server/app/settings/page/build-manifest.json +3 -3
  225. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  226. package/web/.next/server/app/settings/page.js +3 -3
  227. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  228. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  230. package/web/.next/server/app/skills/page/server-reference-manifest.json +52 -22
  231. package/web/.next/server/app/skills/page.js +3 -2
  232. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  233. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  235. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  236. package/web/.next/server/app/tools/page.js +1 -1
  237. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  238. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  239. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  240. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  241. package/web/.next/server/app/version/page.js +1 -1
  242. package/web/.next/server/app/version/page.js.nft.json +1 -1
  243. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  244. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  245. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  246. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  247. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  248. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/{_0727935d._.js → 403f9_next_8a33ddee._.js} +2 -2
  250. package/web/.next/server/chunks/ssr/403f9_next_8a33ddee._.js.map +1 -0
  251. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  252. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  254. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e88da4ee._.js → [root-of-the-server]__1cd4327c._.js} +2 -2
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -0
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  260. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +1 -1
  261. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  263. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/{[root-of-the-server]__7ffd3598._.js → [root-of-the-server]__92ffd5ee._.js} +3 -3
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +2 -2
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
  275. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js +3 -0
  277. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js.map +1 -0
  278. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  279. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  281. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/{_fe058119._.js → _0d7dd23b._.js} +2 -2
  283. package/web/.next/server/chunks/ssr/{_fe058119._.js.map → _0d7dd23b._.js.map} +1 -1
  284. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  285. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  287. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  289. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/_45496654._.js +3 -0
  291. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  293. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  296. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/_6f35fb9a._.js +3 -0
  298. package/web/.next/server/chunks/ssr/_6f35fb9a._.js.map +1 -0
  299. package/web/.next/server/chunks/ssr/{_a8b338ec._.js → _77ae079a._.js} +2 -2
  300. package/web/.next/server/chunks/ssr/{_a8b338ec._.js.map → _77ae079a._.js.map} +1 -1
  301. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  302. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/_a963dd3c._.js +3 -0
  304. package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +1 -0
  305. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  306. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  307. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  308. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  309. package/web/.next/server/chunks/ssr/{_9b964adc._.js → _deabc145._.js} +2 -2
  310. package/web/.next/server/chunks/ssr/{_9b964adc._.js.map → _deabc145._.js.map} +1 -1
  311. package/web/.next/server/chunks/ssr/_df737cce._.js +3 -0
  312. package/web/.next/server/chunks/ssr/_df737cce._.js.map +1 -0
  313. package/web/.next/server/chunks/ssr/_e3f14907._.js +9 -0
  314. package/web/.next/server/chunks/ssr/_e3f14907._.js.map +1 -0
  315. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  316. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  317. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  318. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  319. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  320. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  321. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  322. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  323. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  324. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  325. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  326. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  327. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +3 -0
  328. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +1 -0
  329. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  330. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  331. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  333. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  334. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +3 -0
  335. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  337. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
  338. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  339. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  340. package/web/.next/server/middleware-build-manifest.js +3 -3
  341. package/web/.next/server/pages/500.html +2 -2
  342. package/web/.next/server/server-reference-manifest.js +1 -1
  343. package/web/.next/server/server-reference-manifest.json +89 -59
  344. package/web/.next/static/chunks/06a86173379e6c51.js +1 -0
  345. package/web/.next/static/chunks/{ff9e33615f5c856c.js → 16ed73f9880b7d63.js} +1 -1
  346. package/web/.next/static/chunks/185e4f36cb6efb24.js +1 -0
  347. package/web/.next/static/chunks/2b2f3a70ebd6ac1c.js +1 -0
  348. package/web/.next/static/chunks/{04c874f52a7cd435.js → 3d1df5c349d855eb.js} +1 -1
  349. package/web/.next/static/chunks/4559a403ee40dd19.js +7 -0
  350. package/web/.next/static/chunks/74729cbad964be13.js +1 -0
  351. package/web/.next/static/chunks/{a052c19c18e9eced.js → 74e5b5c7950efbc1.js} +1 -1
  352. package/web/.next/static/chunks/{d6c39780c2f75ecd.js → 7a6854bb07182777.js} +1 -1
  353. package/web/.next/static/chunks/8e12deeabf6624e9.js +1 -0
  354. package/web/.next/static/chunks/9c6f8f49799efd3a.js +1 -0
  355. package/web/.next/static/chunks/{c5d89c12a73e0461.js → a3802d6f8677cd04.js} +2 -2
  356. package/web/.next/static/chunks/b0a6fce5425f8d3a.js +3 -0
  357. package/web/.next/static/chunks/b14085e99b88e7f7.css +1 -0
  358. package/web/.next/static/chunks/b65e555419a0c664.js +1 -0
  359. package/web/.next/static/chunks/{562c70303d910295.js → c5a0b452afc8fe47.js} +1 -1
  360. package/web/.next/static/chunks/ca23a8642f750548.js +5 -0
  361. package/web/.next/static/chunks/cc5fe8d1d9e1e519.js +5 -0
  362. package/web/.next/static/chunks/{021c9b0effb6d688.js → f29814a72404ea2b.js} +1 -1
  363. package/web/.next/static/chunks/{b0e2fb3d4eb42f3d.js → f51250616da82bd2.js} +1 -1
  364. package/web/.next/static/chunks/{caf7d7e1b439b29e.js → f9da308b3033c57a.js} +1 -1
  365. package/web/.next/static/chunks/{turbopack-57bb0674e2cd1d31.js → turbopack-b38a68b1b1c41a87.js} +1 -1
  366. package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js +0 -3
  367. package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js.map +0 -1
  368. package/web/.next/server/chunks/ssr/[root-of-the-server]__7ffd3598._.js.map +0 -1
  369. package/web/.next/server/chunks/ssr/[root-of-the-server]__e88da4ee._.js.map +0 -1
  370. package/web/.next/server/chunks/ssr/_0727935d._.js.map +0 -1
  371. package/web/.next/server/chunks/ssr/_0dc06d07._.js +0 -3
  372. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +0 -1
  373. package/web/.next/server/chunks/ssr/_682fc996._.js +0 -9
  374. package/web/.next/server/chunks/ssr/_682fc996._.js.map +0 -1
  375. package/web/.next/server/chunks/ssr/_6892e3b9._.js +0 -3
  376. package/web/.next/server/chunks/ssr/_6892e3b9._.js.map +0 -1
  377. package/web/.next/server/chunks/ssr/_a1068852._.js +0 -3
  378. package/web/.next/server/chunks/ssr/_a1068852._.js.map +0 -1
  379. package/web/.next/server/chunks/ssr/node_modules__pnpm_12a7ede0._.js +0 -3
  380. package/web/.next/server/chunks/ssr/node_modules__pnpm_12a7ede0._.js.map +0 -1
  381. package/web/.next/static/chunks/20f7cc98a013b11c.js +0 -1
  382. package/web/.next/static/chunks/4cec255f2754e5ec.js +0 -1
  383. package/web/.next/static/chunks/5b7275374d2696b3.css +0 -1
  384. package/web/.next/static/chunks/647140fe96a7c88a.js +0 -1
  385. package/web/.next/static/chunks/6d6f70ff5151b8cb.js +0 -7
  386. package/web/.next/static/chunks/84792d40edc4b027.js +0 -5
  387. package/web/.next/static/chunks/8800875bb3d56192.js +0 -3
  388. package/web/.next/static/chunks/8d581adafe8d1dd0.js +0 -1
  389. package/web/.next/static/chunks/982aef195c118996.js +0 -1
  390. package/web/.next/static/chunks/a6b5e739d2f89c6b.js +0 -1
  391. package/web/.next/static/chunks/c3ef3b892f7794ec.js +0 -1
  392. package/web/.next/static/chunks/dc134f3f58cdf850.js +0 -5
  393. /package/web/.next/static/{lFiCv3l4nIAIpZmj6eehh → 0KDwNT3AGQmFGIwjHx99r}/_buildManifest.js +0 -0
  394. /package/web/.next/static/{lFiCv3l4nIAIpZmj6eehh → 0KDwNT3AGQmFGIwjHx99r}/_clientMiddlewareManifest.json +0 -0
  395. /package/web/.next/static/{lFiCv3l4nIAIpZmj6eehh → 0KDwNT3AGQmFGIwjHx99r}/_ssgManifest.js +0 -0
@@ -3,9 +3,14 @@ import { notFound } from 'next/navigation';
3
3
  import { getSkills } from '../../lib/skills.js';
4
4
  import { SkillsPageClient } from '../../components/features/skills/index.js';
5
5
  import { featureFlags } from '../../lib/feature-flags.js';
6
+ import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
7
+ import { createDefaultSettings } from '../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
8
+ const defaultInjectionConfig = createDefaultSettings().workflow.skillInjection;
6
9
  export default async function SkillsPage() {
7
10
  if (!featureFlags.skills)
8
11
  notFound();
9
12
  const skills = await getSkills();
10
- return _jsx(SkillsPageClient, { skills: skills });
13
+ const settings = getSettings();
14
+ const injectionConfig = settings.workflow.skillInjection ?? defaultInjectionConfig;
15
+ return _jsx(SkillsPageClient, { skills: skills, injectionConfig: injectionConfig });
11
16
  }
@@ -47,6 +47,8 @@ export interface FeatureCreatePayload {
47
47
  commitSpecs: boolean;
48
48
  /** Sync main from remote before creating the feature branch (default: true). */
49
49
  rebaseBeforeBranch: boolean;
50
+ /** Inject curated skills into the feature worktree. */
51
+ injectSkills: boolean;
50
52
  /** Optional agent type override for this feature run */
51
53
  agentType?: string;
52
54
  /** Optional model override for this feature run */
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useEffect, useRef } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
- import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, GitFork, FileText, RefreshCw, } from 'lucide-react';
5
+ import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, GitFork, FileText, Puzzle, RefreshCw, } from 'lucide-react';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
8
8
  import { BaseDrawer } from '../../common/base-drawer/index.js';
@@ -133,6 +133,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
133
133
  const [forkAndPr, setForkAndPr] = useState(false);
134
134
  const [commitSpecs, setCommitSpecs] = useState(true);
135
135
  const [rebaseBeforeBranch, setRebaseBeforeBranch] = useState(true);
136
+ const [injectSkills, setInjectSkills] = useState(workflowDefaults?.injectSkills ?? false);
136
137
  const [overrideAgent, setOverrideAgent] = useState(undefined);
137
138
  const [overrideModel, setOverrideModel] = useState(undefined);
138
139
  const [selectedRepoPath, setSelectedRepoPath] = useState(validRepoPath || undefined);
@@ -154,6 +155,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
154
155
  setEnableEvidence(workflowDefaults.enableEvidence);
155
156
  setCommitEvidence(workflowDefaults.commitEvidence);
156
157
  setFast(workflowDefaults.fast !== false);
158
+ setInjectSkills(workflowDefaults.injectSkills ?? false);
157
159
  }
158
160
  }, [workflowDefaults]);
159
161
  // Sync localRepos when repositories prop changes
@@ -361,6 +363,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
361
363
  forkAndPr,
362
364
  commitSpecs,
363
365
  rebaseBeforeBranch,
366
+ injectSkills,
364
367
  ...(pending ? { pending } : {}),
365
368
  ...(overrideAgent ? { agentType: overrideAgent } : {}),
366
369
  ...(overrideModel ? { model: overrideModel } : {}),
@@ -384,6 +387,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
384
387
  forkAndPr,
385
388
  commitSpecs,
386
389
  rebaseBeforeBranch,
390
+ injectSkills,
387
391
  pending,
388
392
  overrideAgent,
389
393
  overrideModel,
@@ -507,7 +511,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
507
511
  ? t('createDrawer.requiresPr')
508
512
  : !enableEvidence
509
513
  ? t('createDrawer.requiresEvidence')
510
- : t('createDrawer.addToPrDescription') })] })] })] }), _jsxs("div", { className: "border-input flex items-start gap-4 rounded-md border px-3 py-2.5", children: [_jsx("span", { className: "text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider", children: t('createDrawer.git') }), _jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-4", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "push", size: "sm", checked: forkAndPr ? true : push || openPr, onCheckedChange: (v) => {
514
+ : t('createDrawer.addToPrDescription') })] })] })] }), _jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider", children: t('createDrawer.skills') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.skillsDescription') })] }), _jsx("div", { className: "flex flex-1 items-center gap-4", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "inject-skills", size: "sm", checked: injectSkills, onCheckedChange: setInjectSkills, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "inject-skills", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(Puzzle, { className: "h-3 w-3" }), t('createDrawer.injectSkills')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.injectSkillsDescription') })] }) })] }), _jsxs("div", { className: "border-input flex items-start gap-4 rounded-md border px-3 py-2.5", children: [_jsx("span", { className: "text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider", children: t('createDrawer.git') }), _jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-4", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "push", size: "sm", checked: forkAndPr ? true : push || openPr, onCheckedChange: (v) => {
511
515
  setPush(v);
512
516
  if (!v && openPr)
513
517
  setOpenPr(false);
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAgC1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAsDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAkDF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAwCF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAY3B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,KAwCzB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAatC,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AA6BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC"}
1
+ {"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAgC1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAsDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAkDF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAwCF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAY3B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,KAwCzB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAatC,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AA6BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC"}
@@ -272,6 +272,7 @@ const SAMPLE_WORKFLOW_DEFAULTS = {
272
272
  enableEvidence: true,
273
273
  commitEvidence: false,
274
274
  fast: true,
275
+ injectSkills: false,
275
276
  };
276
277
  /**
277
278
  * Drawer pre-populated from workflow settings — PRD and Plan approval gates
@@ -1 +1 @@
1
- {"version":3,"file":"overview-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAQxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AA2G9F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,GACZ,EAAE,gBAAgB,2CAuLlB"}
1
+ {"version":3,"file":"overview-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAQxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AA2G9F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,GACZ,EAAE,gBAAgB,2CA0LlB"}
@@ -2,10 +2,11 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useEffect, useRef } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
- import { AlertTriangle, Check, CheckCircle2, Clock, ExternalLink, FileSearch, GitBranch, GitCommitHorizontal, GitMerge, Info, RefreshCw, Settings, ShieldCheck, X, Zap, } from 'lucide-react';
5
+ import { AlertTriangle, Check, CheckCircle2, Clock, ExternalLink, FileSearch, GitBranch, GitCommitHorizontal, GitMerge, Info, Puzzle, RefreshCw, Settings, ShieldCheck, X, Zap, } from 'lucide-react';
6
6
  import { InlineAttachments } from '../../common/inline-attachments/index.js';
7
7
  import { PrStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
8
8
  import { cn } from '../../../lib/utils.js';
9
+ import { Badge } from '../../ui/badge.js';
9
10
  import { CiStatusBadge } from '../../common/ci-status-badge/index.js';
10
11
  import { CometSpinner } from '../../ui/comet-spinner.js';
11
12
  import { ActionButton } from '../../common/action-button/index.js';
@@ -88,7 +89,7 @@ export function OverviewTab({ data, pinnedConfig, syncStatus, syncLoading, syncE
88
89
  return _jsx(I, { className: "size-3.5 shrink-0 opacity-50" });
89
90
  })()
90
91
  : null, data.agentType ? (_jsx("span", { children: agentTypeLabels[data.agentType] ??
91
- data.agentType })) : null, data.agentType && data.modelId ? (_jsx("span", { className: "text-foreground/20", children: "/" })) : null, data.modelId ? (_jsx("span", { className: "text-foreground/50 text-[12px]", children: getModelMeta(data.modelId).displayName || data.modelId })) : null] }) }) })) : null, data.createdAt ? (_jsx(Card, { children: _jsx(KV, { label: "Created", children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Clock, { className: "text-foreground/30 size-3 shrink-0" }), formatRelativeTime(data.createdAt)] }) }) })) : null, data.fastMode ? (_jsx(Card, { children: _jsx(KV, { label: "Mode", children: _jsxs("span", { className: "inline-flex items-center gap-1 text-amber-600 dark:text-amber-400", children: [_jsx(Zap, { className: "size-3.5" }), " Fast"] }) }) })) : null, data.runtime || elapsedTime ? (_jsx(Card, { children: _jsx(KV, { label: data.runtime ? 'Runtime' : 'Elapsed', children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Clock, { className: "text-foreground/30 size-3 shrink-0" }), data.runtime ?? elapsedTime] }) }) })) : null] }), data.blockedBy || data.errorMessage ? (_jsx(Section, { icon: AlertTriangle, title: "Issues", children: _jsxs(Card, { className: "border-destructive/20 bg-destructive/5", children: [data.blockedBy ? _jsx(KV, { label: "Blocked By", children: data.blockedBy }) : null, data.errorMessage ? (_jsx(KV, { label: "Error", children: _jsx("span", { className: "text-destructive", children: data.errorMessage }) })) : null] }) })) : null, onRebaseOnMain && data.branch && onRefreshSync ? (_jsx(Section, { icon: RefreshCw, title: "Branch Sync", children: _jsx(SyncCard, { syncStatus: syncStatus ?? null, syncLoading: syncLoading ?? false, syncError: syncError ?? null, onRefreshSync: onRefreshSync, onRebaseOnMain: onRebaseOnMain, rebaseLoading: rebaseLoading ?? false, rebaseError: rebaseError ?? null }) })) : null, _jsx(SettingsBlock, { data: data, pinnedConfig: pinnedConfig })] }));
92
+ data.agentType })) : null, data.agentType && data.modelId ? (_jsx("span", { className: "text-foreground/20", children: "/" })) : null, data.modelId ? (_jsx("span", { className: "text-foreground/50 text-[12px]", children: getModelMeta(data.modelId).displayName || data.modelId })) : null] }) }) })) : null, data.createdAt ? (_jsx(Card, { children: _jsx(KV, { label: "Created", children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Clock, { className: "text-foreground/30 size-3 shrink-0" }), formatRelativeTime(data.createdAt)] }) }) })) : null, data.fastMode ? (_jsx(Card, { children: _jsx(KV, { label: "Mode", children: _jsxs("span", { className: "inline-flex items-center gap-1 text-amber-600 dark:text-amber-400", children: [_jsx(Zap, { className: "size-3.5" }), " Fast"] }) }) })) : null, data.runtime || elapsedTime ? (_jsx(Card, { children: _jsx(KV, { label: data.runtime ? 'Runtime' : 'Elapsed', children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Clock, { className: "text-foreground/30 size-3 shrink-0" }), data.runtime ?? elapsedTime] }) }) })) : null] }), data.blockedBy || data.errorMessage ? (_jsx(Section, { icon: AlertTriangle, title: "Issues", children: _jsxs(Card, { className: "border-destructive/20 bg-destructive/5", children: [data.blockedBy ? _jsx(KV, { label: "Blocked By", children: data.blockedBy }) : null, data.errorMessage ? (_jsx(KV, { label: "Error", children: _jsx("span", { className: "text-destructive", children: data.errorMessage }) })) : null] }) })) : null, onRebaseOnMain && data.branch && onRefreshSync ? (_jsx(Section, { icon: RefreshCw, title: "Branch Sync", children: _jsx(SyncCard, { syncStatus: syncStatus ?? null, syncLoading: syncLoading ?? false, syncError: syncError ?? null, onRefreshSync: onRefreshSync, onRebaseOnMain: onRebaseOnMain, rebaseLoading: rebaseLoading ?? false, rebaseError: rebaseError ?? null }) })) : null, _jsx(SettingsBlock, { data: data, pinnedConfig: pinnedConfig }), data.injectedSkills?.length ? _jsx(InjectedSkillsSection, { skills: data.injectedSkills }) : null] }));
92
93
  }
93
94
  // ── Sync card ───────────────────────────────────────────────────────
94
95
  function SyncCard({ syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, }) {
@@ -114,13 +115,18 @@ function SettingsBlock({ data, pinnedConfig, }) {
114
115
  data.ciWatchEnabled != null ||
115
116
  data.enableEvidence != null ||
116
117
  data.forkAndPr != null ||
117
- data.commitSpecs != null;
118
+ data.commitSpecs != null ||
119
+ data.injectSkills != null;
118
120
  const showPinnedConfig = pinnedConfig != null && canSwitchPinnedConfig(data.state);
119
121
  if (!hasSettings && !showPinnedConfig)
120
122
  return null;
121
- return (_jsx(Section, { icon: Settings, title: "Settings", children: _jsxs("div", { className: "flex flex-col gap-2", children: [showPinnedConfig ? _jsx(PinnedConfigCard, { pinnedConfig: pinnedConfig }) : null, hasSettings ? (_jsxs("div", { className: "grid grid-cols-3 gap-2", children: [data.approvalGates ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(ShieldCheck, { className: "size-3" }), " Approve"] }), _jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(Flag, { on: data.approvalGates.allowPrd, label: "PRD" }), _jsx(Flag, { on: data.approvalGates.allowPlan, label: "Plan" }), _jsx(Flag, { on: data.approvalGates.allowMerge, label: "Merge" })] })] })) : null, data.enableEvidence != null ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(FileSearch, { className: "size-3" }), " Evidence"] }), _jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(Flag, { on: data.enableEvidence, label: "Collect" }), data.commitEvidence != null ? (_jsx(Flag, { on: data.commitEvidence, label: "Add to PR" })) : null] })] })) : null, data.push != null ||
123
+ return (_jsx(Section, { icon: Settings, title: "Settings", children: _jsxs("div", { className: "flex flex-col gap-2", children: [showPinnedConfig ? _jsx(PinnedConfigCard, { pinnedConfig: pinnedConfig }) : null, hasSettings ? (_jsxs("div", { className: "grid grid-cols-3 gap-2", children: [data.approvalGates ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(ShieldCheck, { className: "size-3" }), " Approve"] }), _jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(Flag, { on: data.approvalGates.allowPrd, label: "PRD" }), _jsx(Flag, { on: data.approvalGates.allowPlan, label: "Plan" }), _jsx(Flag, { on: data.approvalGates.allowMerge, label: "Merge" })] })] })) : null, data.enableEvidence != null ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(FileSearch, { className: "size-3" }), " Evidence"] }), _jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(Flag, { on: data.enableEvidence, label: "Collect" }), data.commitEvidence != null ? (_jsx(Flag, { on: data.commitEvidence, label: "Add to PR" })) : null] })] })) : null, data.injectSkills != null ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(Puzzle, { className: "size-3" }), " Skills"] }), _jsx("div", { className: "flex flex-col gap-0.5", children: _jsx(Flag, { on: data.injectSkills, label: "Inject" }) })] })) : null, data.push != null ||
122
124
  data.openPr != null ||
123
125
  data.ciWatchEnabled != null ||
124
126
  data.commitSpecs != null ||
125
127
  data.forkAndPr != null ? (_jsxs(Card, { children: [_jsxs("div", { className: "text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase", children: [_jsx(GitBranch, { className: "size-3" }), " Git"] }), _jsxs("div", { className: "flex flex-col gap-0.5", children: [data.push != null ? _jsx(Flag, { on: data.push, label: "Push" }) : null, data.openPr != null ? _jsx(Flag, { on: data.openPr, label: "PR" }) : null, data.ciWatchEnabled != null ? (_jsx(Flag, { on: data.ciWatchEnabled, label: "Watch" })) : null, data.commitSpecs != null ? _jsx(Flag, { on: data.commitSpecs, label: "Specs" }) : null, data.forkAndPr != null ? _jsx(Flag, { on: data.forkAndPr, label: "Fork" }) : null] })] })) : null] })) : null] }) }));
126
128
  }
129
+ // ── Injected Skills ────────────────────────────────────────────────
130
+ function InjectedSkillsSection({ skills }) {
131
+ return (_jsx(Section, { icon: Puzzle, title: "Feature Skills", children: _jsx("div", { className: "flex flex-wrap gap-1.5", children: skills.map((name) => (_jsx(Badge, { variant: "secondary", children: name }, name))) }) }));
132
+ }
@@ -59,4 +59,6 @@ export declare const WithRebaseAction: Story;
59
59
  export declare const RebaseLoading: Story;
60
60
  /** Rebase action showing error. */
61
61
  export declare const RebaseError: Story;
62
+ /** Feature with injected skills displayed in a dedicated section. */
63
+ export declare const WithInjectedSkills: Story;
62
64
  //# sourceMappingURL=overview-tab.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overview-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AA0G1C,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,6BAA6B,EAAE,KAc3C,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,4BAA4B,EAAE,KAe1C,CAAC;AAOF,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,KAE7B,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAwBF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAMF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,KAclC,CAAC;AAqBF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,KAEpC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,EAAE,KAgB7B,CAAC;AAMF,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,EAAE,KAYrC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,EAAE,KAYrC,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,EAAE,KAQjC,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC"}
1
+ {"version":3,"file":"overview-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AA0G1C,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,6BAA6B,EAAE,KAc3C,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,4BAA4B,EAAE,KAe1C,CAAC;AAOF,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,KAE7B,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAwBF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAMF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,KAclC,CAAC;AAqBF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,KAEpC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,EAAE,KAgB7B,CAAC;AAMF,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,EAAE,KAYrC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,EAAE,KAYrC,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,EAAE,KAQjC,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAMF,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC"}
@@ -392,3 +392,15 @@ export const RebaseError = {
392
392
  rebaseError: 'Rebase failed: unresolvable conflicts in src/index.ts',
393
393
  },
394
394
  };
395
+ /* ---------------------------------------------------------------------------
396
+ * Injected skills stories
397
+ * ------------------------------------------------------------------------- */
398
+ /** Feature with injected skills displayed in a dedicated section. */
399
+ export const WithInjectedSkills = {
400
+ args: {
401
+ data: {
402
+ ...fullData,
403
+ injectedSkills: ['architecture-reviewer', 'cross-validate-artifacts', 'tsp-model'],
404
+ },
405
+ },
406
+ };
@@ -112,6 +112,10 @@ export interface FeatureNodeData {
112
112
  onAction?: () => void;
113
113
  onSettings?: () => void;
114
114
  hasChildren?: boolean;
115
+ /** Whether skill injection was enabled for this feature */
116
+ injectSkills?: boolean;
117
+ /** Skills that were injected into this feature's worktree */
118
+ injectedSkills?: string[];
115
119
  onDelete?: (featureId: string, cleanup?: boolean, cascadeDelete?: boolean, closePr?: boolean) => void;
116
120
  onRetry?: (featureId: string) => void;
117
121
  onStart?: (featureId: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,56 @@
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
+ }
@@ -0,0 +1,16 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,66 @@
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
+ };
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,42 @@
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
+ }
@@ -0,0 +1,16 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,69 @@
1
+ import { SkillSourceType } from '../../../../../../packages/core/src/domain/generated/output.js';
2
+ import { AutoInjectedSkillsSection } from './auto-injected-skills-section.js';
3
+ const meta = {
4
+ title: 'Features/Skills/AutoInjectedSkillsSection',
5
+ component: AutoInjectedSkillsSection,
6
+ tags: ['autodocs'],
7
+ parameters: {
8
+ layout: 'padded',
9
+ },
10
+ };
11
+ export default meta;
12
+ const sampleConfig = {
13
+ enabled: true,
14
+ skills: [
15
+ {
16
+ name: 'architecture-reviewer',
17
+ type: SkillSourceType.Local,
18
+ source: '.claude/skills/architecture-reviewer',
19
+ },
20
+ { name: 'tsp-model', type: SkillSourceType.Local, source: '.claude/skills/tsp-model' },
21
+ {
22
+ name: 'remotion-best-practices',
23
+ type: SkillSourceType.Remote,
24
+ source: '@anthropic/remotion-skills',
25
+ remoteSkillName: 'remotion-best-practices',
26
+ },
27
+ ],
28
+ };
29
+ const sampleDiscoveredSkills = [
30
+ {
31
+ name: 'architecture-reviewer',
32
+ displayName: 'architecture-reviewer',
33
+ description: 'Review architecture decisions against Clean Architecture principles',
34
+ category: 'Analysis',
35
+ source: 'project',
36
+ body: '',
37
+ resources: [],
38
+ },
39
+ {
40
+ name: 'cross-validate-artifacts',
41
+ displayName: 'cross-validate-artifacts',
42
+ description: 'Cross-validate documentation and artifacts across the codebase',
43
+ category: 'Analysis',
44
+ source: 'project',
45
+ body: '',
46
+ resources: [],
47
+ },
48
+ ];
49
+ export const Default = {
50
+ args: {
51
+ config: sampleConfig,
52
+ discoveredSkills: sampleDiscoveredSkills,
53
+ },
54
+ };
55
+ export const SingleSkill = {
56
+ args: {
57
+ config: {
58
+ enabled: true,
59
+ skills: [sampleConfig.skills[0]],
60
+ },
61
+ discoveredSkills: sampleDiscoveredSkills,
62
+ },
63
+ };
64
+ export const EmptySkills = {
65
+ args: {
66
+ config: { enabled: true, skills: [] },
67
+ discoveredSkills: sampleDiscoveredSkills,
68
+ },
69
+ };
@@ -1,6 +1,8 @@
1
+ import type { SkillInjectionConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
1
2
  import type { SkillData } from '../../../lib/skills.js';
2
3
  export interface SkillsPageClientProps {
3
4
  skills: SkillData[];
5
+ injectionConfig: SkillInjectionConfig;
4
6
  }
5
- export declare function SkillsPageClient({ skills }: SkillsPageClientProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function SkillsPageClient({ skills, injectionConfig }: SkillsPageClientProps): import("react/jsx-runtime").JSX.Element;
6
8
  //# sourceMappingURL=skills-page-client.d.ts.map
@@ -1 +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"}
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,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,eAAe,EAAE,oBAAoB,CAAC;CACvC;AAeD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,qBAAqB,2CAuFlF"}