@shepai/cli 1.145.0 → 1.146.0-pr437.aa23c1e

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 (349) hide show
  1. package/apis/json-schema/Feature.yaml +25 -0
  2. package/apis/json-schema/FeatureFlags.yaml +5 -0
  3. package/apis/json-schema/PullRequest.yaml +11 -0
  4. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +5 -0
  6. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.d.ts +132 -0
  8. package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.d.ts.map +1 -0
  9. package/dist/packages/core/src/application/ports/output/services/coasts-service.interface.js +12 -0
  10. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts +79 -0
  11. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.js +31 -0
  13. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  14. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  16. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +5 -0
  17. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +10 -0
  19. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
  20. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  21. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts +23 -0
  22. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts.map +1 -0
  23. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.js +84 -0
  24. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  25. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  27. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
  28. package/dist/packages/core/src/domain/generated/output.d.ts +37 -0
  29. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  30. package/dist/packages/core/src/domain/generated/output.js +1 -0
  31. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/di/container.js +12 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +8 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +18 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.d.ts +11 -0
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.d.ts.map +1 -0
  41. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-feature-flag-coasts-dev-server.js +17 -0
  42. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts +13 -0
  43. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts.map +1 -0
  44. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.js +30 -0
  45. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts +12 -0
  46. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts.map +1 -0
  47. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.js +23 -0
  48. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  49. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +23 -4
  50. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  51. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +25 -0
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +85 -0
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +5 -0
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +15 -0
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +5 -0
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +23 -0
  62. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +2 -0
  63. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  64. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +50 -0
  65. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +8 -0
  66. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  67. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +40 -1
  68. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.d.ts.map +1 -1
  69. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.js +11 -9
  70. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  71. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +5 -1
  72. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map +1 -1
  73. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.js +8 -6
  74. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
  75. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +11 -9
  76. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -1
  77. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +8 -6
  78. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts.map +1 -1
  79. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.js +3 -1
  80. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts +1 -0
  81. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts.map +1 -1
  82. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.js +9 -0
  83. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +5 -0
  84. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  85. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +20 -0
  86. package/dist/packages/core/src/infrastructure/services/coasts.service.d.ts +42 -0
  87. package/dist/packages/core/src/infrastructure/services/coasts.service.d.ts.map +1 -0
  88. package/dist/packages/core/src/infrastructure/services/coasts.service.js +185 -0
  89. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts +25 -0
  90. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts.map +1 -0
  91. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.js +145 -0
  92. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts +17 -3
  93. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
  94. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +98 -15
  95. package/dist/src/presentation/cli/commands/coasts/index.d.ts +3 -0
  96. package/dist/src/presentation/cli/commands/coasts/index.d.ts.map +1 -0
  97. package/dist/src/presentation/cli/commands/coasts/index.js +7 -0
  98. package/dist/src/presentation/cli/commands/coasts/init.command.d.ts +3 -0
  99. package/dist/src/presentation/cli/commands/coasts/init.command.d.ts.map +1 -0
  100. package/dist/src/presentation/cli/commands/coasts/init.command.js +40 -0
  101. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  102. package/dist/src/presentation/cli/commands/ui.command.js +2 -1
  103. package/dist/src/presentation/cli/index.js +2 -0
  104. package/dist/src/presentation/web/app/actions/check-coastfile.d.ts +5 -0
  105. package/dist/src/presentation/web/app/actions/check-coastfile.d.ts.map +1 -0
  106. package/dist/src/presentation/web/app/actions/check-coastfile.js +16 -0
  107. package/dist/src/presentation/web/app/actions/create-feature.d.ts +10 -0
  108. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  109. package/dist/src/presentation/web/app/actions/create-feature.js +8 -1
  110. package/dist/src/presentation/web/app/actions/generate-coastfile.d.ts +7 -0
  111. package/dist/src/presentation/web/app/actions/generate-coastfile.d.ts.map +1 -0
  112. package/dist/src/presentation/web/app/actions/generate-coastfile.js +22 -0
  113. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  114. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  115. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  116. package/dist/src/presentation/web/app/build-feature-node-data.js +5 -3
  117. package/dist/src/presentation/web/app/build-graph-nodes.js +5 -3
  118. package/dist/src/presentation/web/coasts-dev-server.d.ts +34 -0
  119. package/dist/src/presentation/web/coasts-dev-server.d.ts.map +1 -0
  120. package/dist/src/presentation/web/coasts-dev-server.js +69 -0
  121. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  122. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +4 -0
  123. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +24 -7
  125. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +12 -0
  126. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  127. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +35 -0
  128. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +7 -1
  129. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +5 -1
  130. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  131. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
  132. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  133. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -0
  134. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  135. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
  136. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +9 -2
  138. package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.d.ts +12 -0
  139. package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.d.ts.map +1 -0
  140. package/dist/src/presentation/web/components/common/repository-node/use-coasts-actions.js +76 -0
  141. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  142. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
  143. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  144. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
  145. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  146. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +5 -0
  147. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  148. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  149. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  150. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
  151. package/dist/src/presentation/web/dev-server.js +64 -2
  152. package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
  153. package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
  154. package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
  155. package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
  156. package/dist/src/presentation/web/lib/feature-flags.js +5 -0
  157. package/dist/tsconfig.build.tsbuildinfo +1 -1
  158. package/package.json +2 -1
  159. package/web/.next/BUILD_ID +1 -1
  160. package/web/.next/build-manifest.json +2 -2
  161. package/web/.next/fallback-build-manifest.json +2 -2
  162. package/web/.next/prerender-manifest.json +3 -3
  163. package/web/.next/required-server-files.js +3 -3
  164. package/web/.next/required-server-files.json +3 -3
  165. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +86 -56
  166. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  167. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +86 -56
  170. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  171. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +102 -72
  174. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  175. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  176. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  177. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +102 -72
  178. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  179. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +82 -52
  182. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  183. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  184. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  185. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +86 -56
  186. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  187. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  188. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +102 -72
  190. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  191. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  192. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +102 -72
  194. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  195. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  196. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +82 -52
  198. package/web/.next/server/app/(dashboard)/page.js +1 -1
  199. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  200. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  201. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +82 -52
  202. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  203. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  204. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  205. package/web/.next/server/app/_global-error.html +2 -2
  206. package/web/.next/server/app/_global-error.rsc +1 -1
  207. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  208. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  209. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  210. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  211. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  212. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  213. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  214. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  215. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  216. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  217. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  218. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  219. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  220. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  221. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  222. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  223. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  224. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  225. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  226. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  227. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  228. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/chunks/403f9_next_567de315._.js +2 -2
  230. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  231. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  232. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  233. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  234. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  235. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
  236. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  237. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  238. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  240. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js +1 -1
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +2 -2
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js.map +1 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__581769f7._.js +4 -0
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__581769f7._.js.map +1 -0
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__6df523d1._.js +4 -0
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__6df523d1._.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/[root-of-the-server]__8004c676._.js +4 -0
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__8004c676._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__815f85e7._.js +4 -0
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__815f85e7._.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  260. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +3 -0
  264. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +1 -0
  265. package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
  266. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/{_0c5f56e3._.js → _45117016._.js} +3 -3
  268. package/web/.next/server/chunks/ssr/{_0c5f56e3._.js.map → _45117016._.js.map} +1 -1
  269. package/web/.next/server/chunks/ssr/_4b432739._.js +1 -1
  270. package/web/.next/server/chunks/ssr/_4b432739._.js.map +1 -1
  271. package/web/.next/server/chunks/ssr/_6256a985._.js +1 -1
  272. package/web/.next/server/chunks/ssr/_6256a985._.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/{_1fa6f5f0._.js → _7b12d338._.js} +2 -2
  274. package/web/.next/server/chunks/ssr/{_1fa6f5f0._.js.map → _7b12d338._.js.map} +1 -1
  275. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  276. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/_8fcc39d4._.js +3 -0
  278. package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +1 -0
  279. package/web/.next/server/chunks/ssr/{_b71645b4._.js → _9133ca98._.js} +2 -2
  280. package/web/.next/server/chunks/ssr/{_b71645b4._.js.map → _9133ca98._.js.map} +1 -1
  281. package/web/.next/server/chunks/ssr/{_1b719e7f._.js → _913a6589._.js} +2 -2
  282. package/web/.next/server/chunks/ssr/{_1b719e7f._.js.map → _913a6589._.js.map} +1 -1
  283. package/web/.next/server/chunks/ssr/_a93b44aa._.js +3 -0
  284. package/web/.next/server/chunks/ssr/{_2a415784._.js.map → _a93b44aa._.js.map} +1 -1
  285. package/web/.next/server/chunks/ssr/{_64bdfc6f._.js → _c7d0d381._.js} +3 -3
  286. package/web/.next/server/chunks/ssr/{_64bdfc6f._.js.map → _c7d0d381._.js.map} +1 -1
  287. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  289. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/{_55d763e2._.js → _e816b997._.js} +2 -2
  291. package/web/.next/server/chunks/ssr/{_37e8548b._.js.map → _e816b997._.js.map} +1 -1
  292. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  293. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/{_37e8548b._.js → _f483d14b._.js} +2 -2
  295. package/web/.next/server/chunks/ssr/{_55d763e2._.js.map → _f483d14b._.js.map} +1 -1
  296. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  297. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_0c3330d7._.js +3 -0
  299. package/web/.next/server/chunks/ssr/{src_presentation_web_721fb773._.js.map → src_presentation_web_0c3330d7._.js.map} +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  312. package/web/.next/server/pages/500.html +2 -2
  313. package/web/.next/server/server-reference-manifest.js +1 -1
  314. package/web/.next/server/server-reference-manifest.json +506 -350
  315. package/web/.next/static/chunks/{74ee98538b63a4b2.css → 080d853d319c5cc5.css} +1 -1
  316. package/web/.next/static/chunks/{41667f7f505952e6.js → 179c3052fd19c46d.js} +1 -1
  317. package/web/.next/static/chunks/{18c49ba954b15750.js → 1f4814c4adb31418.js} +1 -1
  318. package/web/.next/static/chunks/{149c88eadafaf835.js → 47d12705199052e7.js} +1 -1
  319. package/web/.next/static/chunks/{7559d0ac9e155de8.js → 524add4103e8a3b9.js} +2 -2
  320. package/web/.next/static/chunks/{c0fd9ae3d7b3ebe3.js → 6b7a1e5e9f1b014a.js} +1 -1
  321. package/web/.next/static/chunks/{08baac5434d9528e.js → 7d5e500fab64cfb5.js} +7 -7
  322. package/web/.next/static/chunks/816b98cd7e8330b5.js +1 -0
  323. package/web/.next/static/chunks/{f2a6406394a41d3c.js → 8e26be828072d7f6.js} +1 -1
  324. package/web/.next/static/chunks/9d6689f6cc4f825f.js +1 -0
  325. package/web/.next/static/chunks/{e2e3d8a7d339c110.js → a511514839eda467.js} +1 -1
  326. package/web/.next/static/chunks/{266fe61224d14058.js → d540d45e05b43599.js} +1 -1
  327. package/web/.next/static/chunks/{ed43f5ec24322234.js → ee3fb116e420b158.js} +1 -1
  328. package/web/.next/static/chunks/{37b065777853153c.js → f5a7f4c2313fad01.js} +2 -2
  329. package/web/.next/static/chunks/fa556c575c788679.js +1 -0
  330. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +0 -4
  331. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +0 -1
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +0 -4
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +0 -1
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +0 -3
  335. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +0 -1
  336. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +0 -4
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +0 -1
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +0 -4
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +0 -1
  340. package/web/.next/server/chunks/ssr/_2a415784._.js +0 -3
  341. package/web/.next/server/chunks/ssr/_a9f57758._.js +0 -3
  342. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +0 -1
  343. package/web/.next/server/chunks/ssr/src_presentation_web_721fb773._.js +0 -3
  344. package/web/.next/static/chunks/6a370f2709c81d83.js +0 -1
  345. package/web/.next/static/chunks/a6f8230f1756f318.js +0 -1
  346. package/web/.next/static/chunks/d1c52a649f1c7704.js +0 -1
  347. /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_buildManifest.js +0 -0
  348. /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_clientMiddlewareManifest.json +0 -0
  349. /package/web/.next/static/{CrBDjRQwzIQuEXTobFPfK → MsLpLuZsb_IZtZfJuzG81}/_ssgManifest.js +0 -0
@@ -28,9 +28,11 @@ export function buildFeatureNodeData(feature, run, options) {
28
28
  approvalGates: feature.approvalGates,
29
29
  push: feature.push,
30
30
  openPr: feature.openPr,
31
- ...(options?.enableEvidence != null && { enableEvidence: options.enableEvidence }),
32
- ...(options?.commitEvidence != null && { commitEvidence: options.commitEvidence }),
33
- ...(options?.ciWatchEnabled != null && { ciWatchEnabled: options.ciWatchEnabled }),
31
+ forkAndPr: feature.forkAndPr,
32
+ commitSpecs: feature.commitSpecs,
33
+ enableEvidence: feature.enableEvidence ?? options?.enableEvidence ?? false,
34
+ commitEvidence: feature.commitEvidence ?? options?.commitEvidence ?? false,
35
+ ciWatchEnabled: feature.ciWatchEnabled ?? options?.ciWatchEnabled ?? true,
34
36
  ...(options?.hideCiStatus != null && { hideCiStatus: options.hideCiStatus }),
35
37
  ...(options?.repositoryName && { repositoryName: options.repositoryName }),
36
38
  ...(options?.baseBranch && { baseBranch: options.baseBranch }),
@@ -118,9 +118,11 @@ function appendFeatureNodes(repoFeatures, repoNodeId, allFeaturesWithRuns, nodes
118
118
  approvalGates: feature.approvalGates,
119
119
  push: feature.push,
120
120
  openPr: feature.openPr,
121
- ...(options?.enableEvidence != null && { enableEvidence: options.enableEvidence }),
122
- ...(options?.commitEvidence != null && { commitEvidence: options.commitEvidence }),
123
- ...(options?.ciWatchEnabled != null && { ciWatchEnabled: options.ciWatchEnabled }),
121
+ forkAndPr: feature.forkAndPr,
122
+ commitSpecs: feature.commitSpecs,
123
+ enableEvidence: feature.enableEvidence ?? options?.enableEvidence ?? false,
124
+ commitEvidence: feature.commitEvidence ?? options?.commitEvidence ?? false,
125
+ ciWatchEnabled: feature.ciWatchEnabled ?? options?.ciWatchEnabled ?? true,
124
126
  ...(repoName && { repositoryName: repoName }),
125
127
  ...(run?.agentType && { agentType: run.agentType }),
126
128
  ...(run?.modelId && { modelId: run.modelId }),
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Coasts Dev Server Startup & Shutdown
3
+ *
4
+ * Extracted from dev-server.ts for testability. Provides the Coasts startup
5
+ * sequence (prerequisite checks, Coastfile existence check, build, run) and
6
+ * graceful shutdown logic.
7
+ *
8
+ * All log messages use [dev-server:coasts] prefix per NFR-10.
9
+ */
10
+ import type { ICoastsService, CoastInstance } from '../../../packages/core/src/application/ports/output/services/coasts-service.interface.js';
11
+ /**
12
+ * Start the dev server in Coasts mode.
13
+ *
14
+ * Sequence:
15
+ * 1. Check prerequisites (coast binary, Docker, coastd daemon)
16
+ * 2. Check for Coastfile — fail if missing
17
+ * 3. Build the coast container image
18
+ * 4. Run the coast instance
19
+ *
20
+ * @param coastsService - Resolved ICoastsService from the DI container
21
+ * @param workDir - Working directory (repo/worktree root)
22
+ * @returns The running CoastInstance with port and URL
23
+ * @throws Error if prerequisites are not met or any step fails
24
+ */
25
+ export declare function startCoastsDevServer(coastsService: ICoastsService, workDir: string): Promise<CoastInstance>;
26
+ /**
27
+ * Gracefully shut down the Coasts instance.
28
+ * Catches and logs errors to prevent shutdown failures.
29
+ *
30
+ * @param coastsService - The ICoastsService instance, or null if not in Coasts mode
31
+ * @param workDir - Working directory for the coast instance
32
+ */
33
+ export declare function shutdownCoasts(coastsService: ICoastsService | null, workDir: string): Promise<void>;
34
+ //# sourceMappingURL=coasts-dev-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coasts-dev-server.d.ts","sourceRoot":"","sources":["../../../../src/presentation/web/coasts-dev-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACd,MAAM,yEAAyE,CAAC;AAEjF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,cAAc,EAC7B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,cAAc,GAAG,IAAI,EACpC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Coasts Dev Server Startup & Shutdown
3
+ *
4
+ * Extracted from dev-server.ts for testability. Provides the Coasts startup
5
+ * sequence (prerequisite checks, Coastfile existence check, build, run) and
6
+ * graceful shutdown logic.
7
+ *
8
+ * All log messages use [dev-server:coasts] prefix per NFR-10.
9
+ */
10
+ /**
11
+ * Start the dev server in Coasts mode.
12
+ *
13
+ * Sequence:
14
+ * 1. Check prerequisites (coast binary, Docker, coastd daemon)
15
+ * 2. Check for Coastfile — fail if missing
16
+ * 3. Build the coast container image
17
+ * 4. Run the coast instance
18
+ *
19
+ * @param coastsService - Resolved ICoastsService from the DI container
20
+ * @param workDir - Working directory (repo/worktree root)
21
+ * @returns The running CoastInstance with port and URL
22
+ * @throws Error if prerequisites are not met or any step fails
23
+ */
24
+ export async function startCoastsDevServer(coastsService, workDir) {
25
+ // Step 1: Check prerequisites
26
+ console.log('[dev-server:coasts] Checking prerequisites...');
27
+ const prereqs = await coastsService.checkPrerequisites(workDir);
28
+ if (!prereqs.allMet) {
29
+ const messages = prereqs.missingMessages.map((m) => ` - ${m}`).join('\n');
30
+ throw new Error(`[dev-server:coasts] Prerequisites not met:\n${messages}`);
31
+ }
32
+ console.log('[dev-server:coasts] All prerequisites met.');
33
+ // Step 2: Check for Coastfile — fail if missing (generate on-demand via CLI or web UI)
34
+ const hasCoastfile = await coastsService.hasCoastfile(workDir);
35
+ if (!hasCoastfile) {
36
+ throw new Error(`[dev-server:coasts] No Coastfile found in ${workDir} (expected: Coastfile).\n` +
37
+ 'Generate one with:\n' +
38
+ ' - CLI: shep coasts init\n' +
39
+ ' - Web UI: Use the "Generate Coastfile" button on the repository node');
40
+ }
41
+ // Step 3: Build the coast container image
42
+ console.log('[dev-server:coasts] Building coast container...');
43
+ await coastsService.build(workDir);
44
+ console.log('[dev-server:coasts] Build complete.');
45
+ // Step 4: Run the coast instance
46
+ console.log('[dev-server:coasts] Starting coast instance...');
47
+ const instance = await coastsService.run(workDir);
48
+ console.log(`[dev-server:coasts] Ready at ${instance.url}`);
49
+ return instance;
50
+ }
51
+ /**
52
+ * Gracefully shut down the Coasts instance.
53
+ * Catches and logs errors to prevent shutdown failures.
54
+ *
55
+ * @param coastsService - The ICoastsService instance, or null if not in Coasts mode
56
+ * @param workDir - Working directory for the coast instance
57
+ */
58
+ export async function shutdownCoasts(coastsService, workDir) {
59
+ if (!coastsService)
60
+ return;
61
+ try {
62
+ console.log('[dev-server:coasts] Stopping coast instance...');
63
+ await coastsService.stop(workDir);
64
+ console.log('[dev-server:coasts] Coast instance stopped.');
65
+ }
66
+ catch (error) {
67
+ console.warn('[dev-server:coasts] Failed to stop coast instance:', error);
68
+ }
69
+ }
@@ -59,5 +59,5 @@ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick
59
59
  function DeployBar({ deployTarget }) {
60
60
  const deployAction = useDeployAction(deployTarget);
61
61
  const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';
62
- return (_jsxs("div", { "data-testid": "base-drawer-deploy-bar", className: "flex items-center gap-2 px-4 pb-3", children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: deployTarget.targetId })) : null] }));
62
+ return (_jsxs("div", { "data-testid": "base-drawer-deploy-bar", className: "flex items-center gap-2 px-4 pt-3 pb-3", children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: deployTarget.targetId })) : null] }));
63
63
  }
@@ -39,6 +39,10 @@ export interface FeatureCreatePayload {
39
39
  fast: boolean;
40
40
  /** When true, create the feature in pending state (no agent spawned). */
41
41
  pending?: boolean;
42
+ /** Fork repo and create PR to upstream at merge time. */
43
+ forkAndPr: boolean;
44
+ /** Commit specs/evidences into the repo (defaults false when forkAndPr is enabled). */
45
+ commitSpecs: boolean;
42
46
  /** Optional agent type override for this feature run */
43
47
  agentType?: string;
44
48
  /** 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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"}
@@ -1,7 +1,7 @@
1
1
  'use client';
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
- import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, } from 'lucide-react';
4
+ import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, GitFork, FileText, } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
6
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
7
7
  import { BaseDrawer } from '../../common/base-drawer/index.js';
@@ -131,6 +131,8 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
131
131
  const [parentId, setParentId] = useState(undefined);
132
132
  const [fast, setFast] = useState(false);
133
133
  const [pending, setPending] = useState(false);
134
+ const [forkAndPr, setForkAndPr] = useState(false);
135
+ const [commitSpecs, setCommitSpecs] = useState(true);
134
136
  const [overrideAgent, setOverrideAgent] = useState(undefined);
135
137
  const [overrideModel, setOverrideModel] = useState(undefined);
136
138
  const [selectedRepoPath, setSelectedRepoPath] = useState(validRepoPath || undefined);
@@ -177,6 +179,8 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
177
179
  setLocalRepos(repositories ?? []);
178
180
  setFast(false);
179
181
  setPending(false);
182
+ setForkAndPr(false);
183
+ setCommitSpecs(true);
180
184
  setOverrideAgent(undefined);
181
185
  setOverrideModel(undefined);
182
186
  setUploadError(null);
@@ -320,12 +324,14 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
320
324
  allowPlan: approvalGates.allowPlan ?? false,
321
325
  allowMerge: approvalGates.allowMerge ?? false,
322
326
  },
323
- push: push || openPr,
324
- openPr,
327
+ push: forkAndPr ? true : push || openPr,
328
+ openPr: forkAndPr ? true : openPr,
325
329
  ciWatchEnabled,
326
330
  enableEvidence,
327
331
  commitEvidence,
328
332
  fast,
333
+ forkAndPr,
334
+ commitSpecs,
329
335
  ...(pending ? { pending } : {}),
330
336
  ...(overrideAgent ? { agentType: overrideAgent } : {}),
331
337
  ...(overrideModel ? { model: overrideModel } : {}),
@@ -346,6 +352,8 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
346
352
  ciWatchEnabled,
347
353
  commitEvidence,
348
354
  fast,
355
+ forkAndPr,
356
+ commitSpecs,
349
357
  pending,
350
358
  overrideAgent,
351
359
  overrideModel,
@@ -449,19 +457,28 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
449
457
  setEnableEvidence(v);
450
458
  if (!v)
451
459
  setCommitEvidence(false);
452
- }, disabled: isSubmitting }), _jsx(Label, { htmlFor: "enable-evidence", className: "cursor-pointer text-xs font-medium", children: "Collect" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Capture screenshots and artifacts after implementation." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "commit-evidence", size: "sm", checked: commitEvidence, onCheckedChange: setCommitEvidence, disabled: isSubmitting || !enableEvidence || !openPr }), _jsx(Label, { htmlFor: "commit-evidence", className: cn('cursor-pointer text-xs font-medium', (!enableEvidence || !openPr) && 'opacity-50'), children: "Add to PR" })] }) }), _jsx(TooltipContent, { side: "bottom", children: !openPr
460
+ }, disabled: isSubmitting }), _jsx(Label, { htmlFor: "enable-evidence", className: "cursor-pointer text-xs font-medium", children: "Collect" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Capture screenshots and artifacts after implementation." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "commit-evidence", size: "sm", checked: commitEvidence, onCheckedChange: setCommitEvidence, disabled: isSubmitting || !enableEvidence || (!openPr && !forkAndPr) }), _jsx(Label, { htmlFor: "commit-evidence", className: cn('cursor-pointer text-xs font-medium', (!enableEvidence || (!openPr && !forkAndPr)) && 'opacity-50'), children: "Add to PR" })] }) }), _jsx(TooltipContent, { side: "bottom", children: !openPr && !forkAndPr
453
461
  ? 'Requires PR to be enabled'
454
462
  : !enableEvidence
455
463
  ? 'Requires evidence collection to be enabled'
456
- : 'Include evidence in the pull request body.' })] })] })] }), _jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsx("span", { className: "text-muted-foreground w-16 shrink-0 text-xs font-semibold tracking-wider", children: "GIT" }), _jsxs("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: "push", size: "sm", checked: push || openPr, onCheckedChange: (v) => {
464
+ : 'Include evidence in the pull request body.' })] })] })] }), _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: "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) => {
457
465
  setPush(v);
458
466
  if (!v && openPr)
459
467
  setOpenPr(false);
460
- }, disabled: isSubmitting }), _jsx(Label, { htmlFor: "push", className: "cursor-pointer text-xs font-medium", children: "Push" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Push branch to remote after implementation." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "open-pr", size: "sm", checked: openPr, onCheckedChange: (v) => {
468
+ }, disabled: isSubmitting || forkAndPr }), _jsx(Label, { htmlFor: "push", className: cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50'), children: "Push" })] }) }), _jsx(TooltipContent, { side: "bottom", children: forkAndPr
469
+ ? 'Enabled — contributing to upstream'
470
+ : 'Push branch to remote after implementation.' })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "open-pr", size: "sm", checked: forkAndPr ? true : openPr, onCheckedChange: (v) => {
461
471
  setOpenPr(v);
462
472
  if (!v)
463
473
  setCommitEvidence(false);
464
- }, disabled: isSubmitting }), _jsx(Label, { htmlFor: "open-pr", className: "cursor-pointer text-xs font-medium", children: "PR" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Open a pull request after pushing." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "ci-watch", size: "sm", checked: ciWatchEnabled, onCheckedChange: setCiWatchEnabled, disabled: isSubmitting }), _jsx(Label, { htmlFor: "ci-watch", className: "cursor-pointer text-xs font-medium", children: "Watch" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Watch CI and auto-fix after push." })] })] })] })] })] }) }) }) }));
474
+ }, disabled: isSubmitting || forkAndPr }), _jsx(Label, { htmlFor: "open-pr", className: cn('cursor-pointer text-xs font-medium', forkAndPr && 'opacity-50'), children: "PR" })] }) }), _jsx(TooltipContent, { side: "bottom", children: forkAndPr
475
+ ? 'Enabled — contributing to upstream'
476
+ : 'Open a pull request after pushing.' })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "ci-watch", size: "sm", checked: ciWatchEnabled, onCheckedChange: setCiWatchEnabled, disabled: isSubmitting }), _jsx(Label, { htmlFor: "ci-watch", className: "cursor-pointer text-xs font-medium", children: "Watch" })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Watch CI and auto-fix after push." })] }), _jsx("div", { className: "bg-border h-4 w-px shrink-0" }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "commit-specs", size: "sm", checked: commitSpecs, onCheckedChange: setCommitSpecs, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "commit-specs", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(FileText, { className: "h-3 w-3" }), "Commit Specs"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Commit specs to repository." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "fork-and-pr", size: "sm", checked: forkAndPr, onCheckedChange: (v) => {
477
+ setForkAndPr(v);
478
+ // Auto-flip commitSpecs to false when enabling contribute mode
479
+ if (v)
480
+ setCommitSpecs(false);
481
+ }, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fork-and-pr", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(GitFork, { className: "h-3 w-3" }), "Fork & PR"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Contribute via fork (PR to upstream)." })] })] })] })] })] }) }) }) }));
465
482
  }
466
483
  function ParentFeatureCombobox({ features, value, onChange, disabled, }) {
467
484
  const [open, setOpen] = useState(false);
@@ -120,6 +120,18 @@ export declare const DiscardConfirmation: Story;
120
120
  */
121
121
  export declare const DragDropReady: Story;
122
122
  export declare const Interactive: Story;
123
+ /**
124
+ * Fork & PR enabled — the "Fork & PR" toggle in the GIT row is checked.
125
+ * When enabled, Push and PR toggles are locked to `true` (disabled with
126
+ * "Enabled — contributing to upstream" tooltip), and `commitSpecs`
127
+ * auto-flips to `false`.
128
+ */
129
+ export declare const ForkAndPrEnabled: Story;
130
+ /**
131
+ * Fork & PR with Commit Specs re-enabled — after enabling contribute mode
132
+ * (which auto-disables commitSpecs), the user overrides commitSpecs back to `true`.
133
+ */
134
+ export declare const ForkAndPrWithCommitSpecs: Story;
123
135
  /**
124
136
  * With repository selector — opened from sidebar without repo context.
125
137
  * Shows the searchable repository combobox at the top of the form.
@@ -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;AAmDlD,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;AAeF;;;;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;AAuCF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AA6BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAMnC,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;AAmDlD,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;AAeF;;;;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;;;;;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"}
@@ -398,6 +398,41 @@ export const Interactive = {
398
398
  }, repositoryPath: "/Users/dev/my-repo", currentAgentType: "claude-code", currentModel: "claude-sonnet-4-6" })] }));
399
399
  },
400
400
  };
401
+ /* ---------------------------------------------------------------------------
402
+ * Contribute (Fork & PR) stories
403
+ * ------------------------------------------------------------------------- */
404
+ /**
405
+ * Fork & PR enabled — the "Fork & PR" toggle in the GIT row is checked.
406
+ * When enabled, Push and PR toggles are locked to `true` (disabled with
407
+ * "Enabled — contributing to upstream" tooltip), and `commitSpecs`
408
+ * auto-flips to `false`.
409
+ */
410
+ export const ForkAndPrEnabled = {
411
+ render: () => _jsx(CreateDrawerTrigger, { label: "Open (Fork & PR)" }),
412
+ play: async ({ canvasElement }) => {
413
+ const canvas = within(canvasElement);
414
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Fork & PR)' }));
415
+ const body = within(canvasElement.ownerDocument.body);
416
+ const forkToggle = await body.findByLabelText('Fork & PR');
417
+ await userEvent.click(forkToggle);
418
+ },
419
+ };
420
+ /**
421
+ * Fork & PR with Commit Specs re-enabled — after enabling contribute mode
422
+ * (which auto-disables commitSpecs), the user overrides commitSpecs back to `true`.
423
+ */
424
+ export const ForkAndPrWithCommitSpecs = {
425
+ render: () => _jsx(CreateDrawerTrigger, { label: "Open (Fork + Specs)" }),
426
+ play: async ({ canvasElement }) => {
427
+ const canvas = within(canvasElement);
428
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Fork + Specs)' }));
429
+ const body = within(canvasElement.ownerDocument.body);
430
+ const forkToggle = await body.findByLabelText('Fork & PR');
431
+ await userEvent.click(forkToggle);
432
+ const specsToggle = body.getByLabelText('Commit Specs');
433
+ await userEvent.click(specsToggle);
434
+ },
435
+ };
401
436
  /* ---------------------------------------------------------------------------
402
437
  * Repository selector stories
403
438
  * ------------------------------------------------------------------------- */
@@ -120,10 +120,16 @@ function FeatureSettings({ data }) {
120
120
  data.openPr != null ||
121
121
  data.ciWatchEnabled != null ||
122
122
  data.enableEvidence != null ||
123
+ data.forkAndPr != null ||
124
+ data.commitSpecs != null ||
123
125
  data.modelId;
124
126
  if (!hasSettings)
125
127
  return null;
126
- return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-settings", className: "flex flex-col gap-3 p-4", children: [_jsx("span", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "SETTINGS" }), data.modelId ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Model" }), _jsx("span", { className: "text-sm", children: getModelMeta(data.modelId).displayName || data.modelId })] })) : null, data.approvalGates ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(ShieldCheck, { className: "h-3 w-3" }), "Auto-Approve"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [_jsx(SettingBadge, { enabled: data.approvalGates.allowPrd, label: "PRD" }), _jsx(SettingBadge, { enabled: data.approvalGates.allowPlan, label: "Plan" }), _jsx(SettingBadge, { enabled: data.approvalGates.allowMerge, label: "Merge" })] })] })) : null, data.enableEvidence != null ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(FileSearch, { className: "h-3 w-3" }), "Evidence"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [_jsx(SettingBadge, { enabled: data.enableEvidence, label: "Collect" }), data.commitEvidence != null ? (_jsx(SettingBadge, { enabled: data.commitEvidence, label: "Add to PR" })) : null] })] })) : null, data.push != null || data.openPr != null || data.ciWatchEnabled != null ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(GitBranch, { className: "h-3 w-3" }), "Git"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [data.push != null ? _jsx(SettingBadge, { enabled: data.push, label: "Push" }) : null, data.openPr != null ? _jsx(SettingBadge, { enabled: data.openPr, label: "PR" }) : null, data.ciWatchEnabled != null ? (_jsx(SettingBadge, { enabled: data.ciWatchEnabled, label: "Watch" })) : null] })] })) : null] })] }));
128
+ return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-settings", className: "flex flex-col gap-3 p-4", children: [_jsx("span", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "SETTINGS" }), data.modelId ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Model" }), _jsx("span", { className: "text-sm", children: getModelMeta(data.modelId).displayName || data.modelId })] })) : null, data.approvalGates ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(ShieldCheck, { className: "h-3 w-3" }), "Auto-Approve"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [_jsx(SettingBadge, { enabled: data.approvalGates.allowPrd, label: "PRD" }), _jsx(SettingBadge, { enabled: data.approvalGates.allowPlan, label: "Plan" }), _jsx(SettingBadge, { enabled: data.approvalGates.allowMerge, label: "Merge" })] })] })) : null, data.enableEvidence != null ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(FileSearch, { className: "h-3 w-3" }), "Evidence"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [_jsx(SettingBadge, { enabled: data.enableEvidence, label: "Collect" }), data.commitEvidence != null ? (_jsx(SettingBadge, { enabled: data.commitEvidence, label: "Add to PR" })) : null] })] })) : null, data.push != null ||
129
+ data.openPr != null ||
130
+ data.ciWatchEnabled != null ||
131
+ data.commitSpecs != null ||
132
+ data.forkAndPr != null ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-xs font-medium", children: [_jsx(GitBranch, { className: "h-3 w-3" }), "Git"] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [data.push != null ? _jsx(SettingBadge, { enabled: data.push, label: "Push" }) : null, data.openPr != null ? _jsx(SettingBadge, { enabled: data.openPr, label: "PR" }) : null, data.ciWatchEnabled != null ? (_jsx(SettingBadge, { enabled: data.ciWatchEnabled, label: "Watch" })) : null, data.commitSpecs != null ? (_jsx(SettingBadge, { enabled: data.commitSpecs, label: "Commit Specs" })) : null, data.forkAndPr != null ? (_jsx(SettingBadge, { enabled: data.forkAndPr, label: "Fork & PR" })) : null] })] })) : null] })] }));
127
133
  }
128
134
  function DetailRow({ label, value }) {
129
135
  return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: label }), _jsx("span", { className: "text-sm", children: value })] }));
@@ -3,7 +3,7 @@ import type { Node } from '@xyflow/react';
3
3
  import type { PrStatus, CiStatus, DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
4
4
  import type { AgentTypeValue } from './agent-type-icons.js';
5
5
  export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'pending' | 'error' | 'deleting' | 'archived';
6
- export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'deploy' | 'maintain';
6
+ export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'awaitingUpstream' | 'deploy' | 'maintain';
7
7
  /** Human-readable display labels for lifecycle phases. */
8
8
  export declare const lifecycleDisplayLabels: Record<FeatureLifecyclePhase, string>;
9
9
  /** Left border color for each lifecycle phase. */
@@ -94,6 +94,10 @@ export interface FeatureNodeData {
94
94
  enableEvidence?: boolean;
95
95
  /** Whether evidence is committed to the PR body */
96
96
  commitEvidence?: boolean;
97
+ /** Whether to fork the repo and create a PR to upstream */
98
+ forkAndPr?: boolean;
99
+ /** Whether to commit specs into the repository */
100
+ commitSpecs?: boolean;
97
101
  /** Whether to hide CI status badges from UI */
98
102
  hideCiStatus?: boolean;
99
103
  /** Whether the feature has an associated agent run (for log tab visibility) */
@@ -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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"}
@@ -6,6 +6,7 @@ export const lifecycleDisplayLabels = {
6
6
  research: 'RESEARCH',
7
7
  implementation: 'IMPLEMENTATION',
8
8
  review: 'REVIEW',
9
+ awaitingUpstream: 'AWAITING UPSTREAM',
9
10
  deploy: 'DEPLOY & QA',
10
11
  maintain: 'COMPLETED',
11
12
  };
@@ -16,6 +17,7 @@ export const lifecycleBorderColors = {
16
17
  research: 'border-l-cyan-500',
17
18
  implementation: 'border-l-blue-500',
18
19
  review: 'border-l-amber-500',
20
+ awaitingUpstream: 'border-l-amber-500',
19
21
  deploy: 'border-l-emerald-500',
20
22
  maintain: 'border-l-gray-400',
21
23
  };
@@ -26,6 +28,7 @@ export const lifecycleAccentColors = {
26
28
  research: 'bg-cyan-500',
27
29
  implementation: 'bg-blue-500',
28
30
  review: 'bg-amber-500',
31
+ awaitingUpstream: 'bg-amber-500',
29
32
  deploy: 'bg-emerald-500',
30
33
  maintain: 'bg-gray-400',
31
34
  };
@@ -71,6 +74,14 @@ export const lifecyclePhaseBadge = {
71
74
  tooltip: 'Merge Review',
72
75
  description: 'Ready to merge — the code is complete. Review the changes and approve to merge into your repository.',
73
76
  },
77
+ awaitingUpstream: {
78
+ letter: 'U',
79
+ bg: 'bg-amber-100 dark:bg-amber-900/40',
80
+ text: 'text-amber-600 dark:text-amber-300',
81
+ dot: 'bg-amber-500',
82
+ tooltip: 'Awaiting upstream merge',
83
+ description: 'PR submitted to upstream — waiting for the upstream maintainer to review and merge.',
84
+ },
74
85
  deploy: {
75
86
  letter: 'Q',
76
87
  bg: 'bg-lime-100 dark:bg-lime-900/40',
@@ -107,6 +118,7 @@ export const lifecycleRunningVerbs = {
107
118
  research: 'Researching',
108
119
  implementation: 'Implementing',
109
120
  review: 'Reviewing',
121
+ awaitingUpstream: 'Awaiting upstream',
110
122
  deploy: 'Deploying',
111
123
  maintain: 'Maintaining',
112
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAoCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAqB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AA+LF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAYF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAatB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,KAe5C,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAWnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,EAAE,KAyBvC,CAAC;AA0DF,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,EAAE,KAoCvC,CAAC"}
1
+ {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAoCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAqB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AA+LF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAaF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAatB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,KAe5C,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAWnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,EAAE,KAyBvC,CAAC;AA0DF,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,EAAE,KAoCvC,CAAC"}
@@ -234,6 +234,7 @@ const allLifecycles = [
234
234
  'research',
235
235
  'implementation',
236
236
  'review',
237
+ 'awaitingUpstream',
237
238
  'deploy',
238
239
  'maintain',
239
240
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"repository-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAOvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB/C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAuBF,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAkCF,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC"}
1
+ {"version":3,"file":"repository-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAOvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB/C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAuBF,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAmCF,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC"}
@@ -57,6 +57,7 @@ function WithGitOpsTemplate({ data }) {
57
57
  adoptBranch: true,
58
58
  gitRebaseSync: true,
59
59
  reactFileManager: true,
60
+ coastsDevServer: true,
60
61
  };
61
62
  return (_jsx(FeatureFlagsProvider, { flags: allEnabledFlags, children: _jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setSelected(data), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(RepositoryDrawer, { data: selected, onClose: () => setSelected(null) })] }) }));
62
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA0aA"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAwdA"}
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  import { useState, useCallback } from 'react';
4
4
  import { Handle, Position } from '@xyflow/react';
5
5
  import { useRouter } from 'next/navigation';
6
- import { Github, Plus, Code2, Terminal, FolderOpen, Trash2, Play, Square, GitBranch, GitCommitHorizontal, ArrowDown, User, RotateCcw, } from 'lucide-react';
6
+ import { Github, Plus, Code2, Terminal, FolderOpen, Trash2, Play, Square, GitBranch, GitCommitHorizontal, ArrowDown, User, RotateCcw, FileCode2, } from 'lucide-react';
7
7
  import { cn } from '../../../lib/utils.js';
8
8
  import { ActionButton } from '../../common/action-button/index.js';
9
9
  import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
@@ -12,6 +12,7 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../
12
12
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
13
13
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
14
14
  import { useRepositoryActions } from './use-repository-actions.js';
15
+ import { useCoastsActions } from './use-coasts-actions.js';
15
16
  import { FeatureSessionsDropdown, } from '../../common/feature-node/feature-sessions-dropdown.js';
16
17
  export function RepositoryNode({ data, selected, }) {
17
18
  const router = useRouter();
@@ -25,6 +26,7 @@ export function RepositoryNode({ data, selected, }) {
25
26
  repositoryPath: data.repositoryPath,
26
27
  }
27
28
  : null);
29
+ const coastsActions = useCoastsActions(data.repositoryPath ? { repositoryPath: data.repositoryPath } : null);
28
30
  const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';
29
31
  const handleCreateFromSession = useCallback((session, sessionFilePath) => {
30
32
  if (!data.repositoryPath)
@@ -84,5 +86,10 @@ export function RepositoryNode({ data, selected, }) {
84
86
  ? 'Retry'
85
87
  : isDeploymentActive
86
88
  ? 'Stop Dev Server'
87
- : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: false, icon: deployAction.deployError ? RotateCcw : isDeploymentActive ? Square : Play, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) })] }) })) : null] }), data.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!", style: { top: 70 } })) : null] }));
89
+ : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: false, icon: deployAction.deployError ? RotateCcw : isDeploymentActive ? Square : Play, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) })] }) })) : null, featureFlags.coastsDevServer && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-coastfile", className: "border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: coastsActions.coastfileExists ? 'Coastfile' : 'No Coastfile' }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "ml-auto flex items-center", children: _jsx(ActionButton, { label: coastsActions.coastfileExists
90
+ ? 'Regenerate Coastfile'
91
+ : 'Generate Coastfile', onClick: coastsActions.generateCoastfile, loading: coastsActions.generating || coastsActions.checkLoading, error: !!coastsActions.error, icon: FileCode2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: coastsActions.error ??
92
+ (coastsActions.coastfileExists
93
+ ? 'Regenerate Coastfile'
94
+ : 'Generate Coastfile') })] }) })] }) })) : null] }), data.onAdd || data.showHandles ? (_jsx(Handle, { type: "source", position: Position.Right, isConnectable: !data.showHandles, className: "opacity-0!", style: { top: 70 } })) : null] }));
88
95
  }
@@ -0,0 +1,12 @@
1
+ export interface CoastsActionsInput {
2
+ repositoryPath: string;
3
+ }
4
+ export interface CoastsActionsState {
5
+ coastfileExists: boolean;
6
+ generating: boolean;
7
+ checkLoading: boolean;
8
+ error: string | null;
9
+ generateCoastfile: () => Promise<void>;
10
+ }
11
+ export declare function useCoastsActions(input: CoastsActionsInput | null): CoastsActionsState;
12
+ //# sourceMappingURL=use-coasts-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-coasts-actions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/use-coasts-actions.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,kBAAkB,CA0ErF"}