@shepai/cli 1.116.3 → 1.117.0-pr367.ca5b6ac

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 (460) hide show
  1. package/apis/json-schema/AnalyzeRepoTimeouts.yaml +10 -0
  2. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  3. package/apis/json-schema/StageTimeouts.yaml +35 -0
  4. package/apis/json-schema/WorkflowConfig.yaml +6 -0
  5. package/dist/packages/core/src/application/ports/output/services/index.d.ts +2 -0
  6. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts +41 -0
  8. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts.map +1 -0
  9. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.js +14 -0
  10. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts +65 -0
  11. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.js +10 -0
  13. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +17 -8
  15. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts +25 -0
  18. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -0
  19. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +116 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts +47 -0
  21. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  22. package/dist/packages/core/src/domain/generated/output.js +1 -0
  23. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +3 -0
  24. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  25. package/dist/packages/core/src/domain/lifecycle-gates.js +3 -0
  26. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/di/container.js +19 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +7 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +44 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts +22 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts.map +1 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.js +53 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +15 -6
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +15 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +15 -0
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +42 -3
  43. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts +55 -0
  44. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts.map +1 -0
  45. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.js +203 -0
  46. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts +75 -0
  47. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts.map +1 -0
  48. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.js +372 -0
  49. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts +82 -0
  50. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map +1 -0
  51. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.js +206 -0
  52. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  53. package/dist/src/presentation/cli/commands/feat/index.js +2 -0
  54. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  55. package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -0
  56. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  57. package/dist/src/presentation/cli/commands/feat/new.command.js +9 -1
  58. package/dist/src/presentation/cli/commands/feat/start.command.d.ts +12 -0
  59. package/dist/src/presentation/cli/commands/feat/start.command.d.ts.map +1 -0
  60. package/dist/src/presentation/cli/commands/feat/start.command.js +43 -0
  61. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  62. package/dist/src/presentation/cli/commands/ui.command.js +15 -0
  63. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  64. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  65. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  66. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts +3 -0
  67. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts.map +1 -0
  68. package/dist/src/presentation/web/app/actions/load-webhook-status.js +19 -0
  69. package/dist/src/presentation/web/app/actions/start-feature.d.ts +5 -0
  70. package/dist/src/presentation/web/app/actions/start-feature.d.ts.map +1 -0
  71. package/dist/src/presentation/web/app/actions/start-feature.js +16 -0
  72. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  73. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  74. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts +9 -0
  75. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts.map +1 -0
  76. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.js +27 -0
  77. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts +17 -0
  78. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts.map +1 -0
  79. package/dist/src/presentation/web/app/api/webhooks/github/route.js +70 -0
  80. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts +9 -0
  81. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts.map +1 -0
  82. package/dist/src/presentation/web/app/api/webhooks/status/route.js +26 -0
  83. package/dist/src/presentation/web/app/webhooks/page.d.ts +4 -0
  84. package/dist/src/presentation/web/app/webhooks/page.d.ts.map +1 -0
  85. package/dist/src/presentation/web/app/webhooks/page.js +9 -0
  86. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  87. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +1 -1
  88. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +20 -1
  90. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  91. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +6 -2
  93. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
  95. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -2
  96. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +13 -1
  98. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +12 -3
  100. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +2 -0
  101. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +36 -2
  103. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -1
  105. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  106. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -0
  108. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +75 -2
  110. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -0
  111. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  112. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +23 -0
  113. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts +11 -0
  114. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts.map +1 -0
  115. package/dist/src/presentation/web/components/features/settings/timeout-slider.js +63 -0
  116. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +10 -0
  117. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -0
  118. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.js +24 -0
  119. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  120. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +97 -2
  121. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  122. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +22 -0
  123. package/dist/src/presentation/web/components/features/webhooks/types.d.ts +32 -0
  124. package/dist/src/presentation/web/components/features/webhooks/types.d.ts.map +1 -0
  125. package/dist/src/presentation/web/components/features/webhooks/types.js +1 -0
  126. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts +6 -0
  127. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map +1 -0
  128. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.js +38 -0
  129. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts +9 -0
  130. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts.map +1 -0
  131. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js +69 -0
  132. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts +7 -0
  133. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts.map +1 -0
  134. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.js +11 -0
  135. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts +9 -0
  136. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map +1 -0
  137. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.js +31 -0
  138. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts +6 -0
  139. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map +1 -0
  140. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.js +21 -0
  141. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts +9 -0
  142. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map +1 -0
  143. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js +56 -0
  144. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts +6 -0
  145. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map +1 -0
  146. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.js +39 -0
  147. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts +8 -0
  148. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map +1 -0
  149. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.js +59 -0
  150. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  151. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  152. package/dist/src/presentation/web/components/ui/slider.d.ts +5 -0
  153. package/dist/src/presentation/web/components/ui/slider.d.ts.map +1 -0
  154. package/dist/src/presentation/web/components/ui/slider.js +10 -0
  155. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +7 -0
  156. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -0
  157. package/dist/src/presentation/web/components/ui/slider.stories.js +15 -0
  158. package/dist/src/presentation/web/dev-server.js +20 -0
  159. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  160. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -0
  161. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  162. package/dist/src/presentation/web/hooks/use-graph-state.js +1 -0
  163. package/dist/src/presentation/web/lib/derive-graph.d.ts +2 -0
  164. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  165. package/dist/src/presentation/web/lib/derive-graph.js +5 -0
  166. package/dist/tsconfig.build.tsbuildinfo +1 -1
  167. package/package.json +3 -1
  168. package/web/.next/BUILD_ID +1 -1
  169. package/web/.next/app-path-routes-manifest.json +5 -1
  170. package/web/.next/build-manifest.json +6 -6
  171. package/web/.next/fallback-build-manifest.json +2 -2
  172. package/web/.next/prerender-manifest.json +3 -3
  173. package/web/.next/required-server-files.js +3 -3
  174. package/web/.next/required-server-files.json +3 -3
  175. package/web/.next/routes-manifest.json +24 -0
  176. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
  177. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +55 -40
  178. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  179. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  182. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  183. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  184. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  185. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
  187. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +67 -52
  188. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  189. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  190. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  191. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
  192. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  193. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  194. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  195. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  196. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
  197. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +55 -40
  198. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  199. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  200. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  201. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  202. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  203. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  204. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  205. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  206. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
  207. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +67 -52
  208. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  209. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  210. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  211. package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
  212. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +51 -36
  213. package/web/.next/server/app/(dashboard)/page.js +1 -1
  214. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  215. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  216. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
  217. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  218. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  219. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  220. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  221. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  222. package/web/.next/server/app/_global-error.html +2 -2
  223. package/web/.next/server/app/_global-error.rsc +1 -1
  224. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  225. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  226. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  227. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  228. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  229. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  230. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  231. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  232. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  233. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  234. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  235. package/web/.next/server/app/api/webhooks/deliveries/route/app-paths-manifest.json +3 -0
  236. package/web/.next/server/app/api/webhooks/deliveries/route/build-manifest.json +11 -0
  237. package/web/.next/server/app/api/webhooks/deliveries/route/server-reference-manifest.json +4 -0
  238. package/web/.next/server/app/api/webhooks/deliveries/route.js +6 -0
  239. package/web/.next/server/app/api/webhooks/deliveries/route.js.map +5 -0
  240. package/web/.next/server/app/api/webhooks/deliveries/route.js.nft.json +1 -0
  241. package/web/.next/server/app/api/webhooks/deliveries/route_client-reference-manifest.js +2 -0
  242. package/web/.next/server/app/api/webhooks/github/route/app-paths-manifest.json +3 -0
  243. package/web/.next/server/app/api/webhooks/github/route/build-manifest.json +11 -0
  244. package/web/.next/server/app/api/webhooks/github/route/server-reference-manifest.json +4 -0
  245. package/web/.next/server/app/api/webhooks/github/route.js +6 -0
  246. package/web/.next/server/app/api/webhooks/github/route.js.map +5 -0
  247. package/web/.next/server/app/api/webhooks/github/route.js.nft.json +1 -0
  248. package/web/.next/server/app/api/webhooks/github/route_client-reference-manifest.js +2 -0
  249. package/web/.next/server/app/api/webhooks/status/route/app-paths-manifest.json +3 -0
  250. package/web/.next/server/app/api/webhooks/status/route/build-manifest.json +11 -0
  251. package/web/.next/server/app/api/webhooks/status/route/server-reference-manifest.json +4 -0
  252. package/web/.next/server/app/api/webhooks/status/route.js +6 -0
  253. package/web/.next/server/app/api/webhooks/status/route.js.map +5 -0
  254. package/web/.next/server/app/api/webhooks/status/route.js.nft.json +1 -0
  255. package/web/.next/server/app/api/webhooks/status/route_client-reference-manifest.js +2 -0
  256. package/web/.next/server/app/settings/page/build-manifest.json +4 -4
  257. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  258. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  259. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/skills/page/build-manifest.json +4 -4
  261. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  262. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  263. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  264. package/web/.next/server/app/tools/page/build-manifest.json +4 -4
  265. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  266. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  267. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  268. package/web/.next/server/app/version/page/build-manifest.json +4 -4
  269. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  270. package/web/.next/server/app/version/page.js.nft.json +1 -1
  271. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  272. package/web/.next/server/app/webhooks/page/app-paths-manifest.json +3 -0
  273. package/web/.next/server/app/webhooks/page/build-manifest.json +18 -0
  274. package/web/.next/server/app/webhooks/page/next-font-manifest.json +6 -0
  275. package/web/.next/server/app/webhooks/page/react-loadable-manifest.json +1 -0
  276. package/web/.next/server/app/webhooks/page/server-reference-manifest.json +35 -0
  277. package/web/.next/server/app/webhooks/page.js +16 -0
  278. package/web/.next/server/app/webhooks/page.js.map +5 -0
  279. package/web/.next/server/app/webhooks/page.js.nft.json +1 -0
  280. package/web/.next/server/app/webhooks/page_client-reference-manifest.js +2 -0
  281. package/web/.next/server/app-paths-manifest.json +5 -1
  282. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  283. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  284. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  285. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  286. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js +3 -0
  287. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js.map +1 -0
  288. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js +3 -0
  289. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js.map +1 -0
  290. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js +3 -0
  291. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js.map +1 -0
  292. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js +3 -0
  293. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js.map +1 -0
  294. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js +3 -0
  295. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js.map +1 -0
  296. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +1 -1
  297. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
  298. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js +3 -0
  299. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js.map +1 -0
  300. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  301. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  302. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  304. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js +3 -0
  306. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map +1 -0
  307. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +3 -0
  308. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -0
  309. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +3 -0
  310. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -0
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js → [root-of-the-server]__172d9576._.js} +2 -2
  315. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js.map → [root-of-the-server]__172d9576._.js.map} +1 -1
  316. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  317. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  318. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js → [root-of-the-server]__2a5592d5._.js} +2 -2
  319. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js.map → [root-of-the-server]__2a5592d5._.js.map} +1 -1
  320. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js +3 -0
  321. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js.map +1 -0
  322. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  323. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js +3 -0
  324. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js.map +1 -0
  325. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  326. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  327. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js +4 -0
  328. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js.map +1 -0
  329. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js +3 -0
  330. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js.map +1 -0
  331. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js → [root-of-the-server]__a93289b0._.js} +2 -2
  332. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js.map → [root-of-the-server]__a93289b0._.js.map} +1 -1
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  335. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js → [root-of-the-server]__ac0304e7._.js} +2 -2
  336. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js.map → [root-of-the-server]__ac0304e7._.js.map} +1 -1
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  339. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  340. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  341. package/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  342. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  343. package/web/.next/server/chunks/ssr/_26b2c311._.js +3 -0
  344. package/web/.next/server/chunks/ssr/_26b2c311._.js.map +1 -0
  345. package/web/.next/server/chunks/ssr/{_6f0118a0._.js → _719ef347._.js} +2 -2
  346. package/web/.next/server/chunks/ssr/_719ef347._.js.map +1 -0
  347. package/web/.next/server/chunks/ssr/_809c53f6._.js +9 -0
  348. package/web/.next/server/chunks/ssr/_809c53f6._.js.map +1 -0
  349. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  350. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  351. package/web/.next/server/chunks/ssr/_98047ffd._.js +3 -0
  352. package/web/.next/server/chunks/ssr/_98047ffd._.js.map +1 -0
  353. package/web/.next/server/chunks/ssr/_9eea4c51._.js +3 -0
  354. package/web/.next/server/chunks/ssr/_9eea4c51._.js.map +1 -0
  355. package/web/.next/server/chunks/ssr/_a4899a76._.js +3 -0
  356. package/web/.next/server/chunks/ssr/_a4899a76._.js.map +1 -0
  357. package/web/.next/server/chunks/ssr/_b715515b._.js +3 -0
  358. package/web/.next/server/chunks/ssr/{_c5f84841._.js.map → _b715515b._.js.map} +1 -1
  359. package/web/.next/server/chunks/ssr/_b7eb93fc._.js +4 -0
  360. package/web/.next/server/chunks/ssr/_b7eb93fc._.js.map +1 -0
  361. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  362. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  363. package/web/.next/server/chunks/ssr/_e0a01382._.js +3 -0
  364. package/web/.next/server/chunks/ssr/_e0a01382._.js.map +1 -0
  365. package/web/.next/server/chunks/ssr/_f8b36e2c._.js +3 -0
  366. package/web/.next/server/chunks/ssr/_f8b36e2c._.js.map +1 -0
  367. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  368. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  369. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js +3 -0
  370. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js.map +1 -0
  371. package/web/.next/server/chunks/ssr/{_1bb131c4._.js → node_modules__pnpm_747b43ac._.js} +2 -2
  372. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +1 -0
  373. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +5 -0
  374. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -0
  375. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +3 -0
  376. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -0
  377. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  378. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  379. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  380. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  381. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  382. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  383. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  384. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  385. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  386. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  387. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +5 -0
  388. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -0
  389. package/web/.next/server/middleware-build-manifest.js +4 -4
  390. package/web/.next/server/pages/500.html +2 -2
  391. package/web/.next/server/server-reference-manifest.js +1 -1
  392. package/web/.next/server/server-reference-manifest.json +323 -230
  393. package/web/.next/static/chunks/06b948216df083c1.js +1 -0
  394. package/web/.next/static/chunks/{52285fdb39925ad5.js → 2ac228556e3d1db4.js} +1 -1
  395. package/web/.next/static/chunks/31f35710932542ef.js +1 -0
  396. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
  397. package/web/.next/static/chunks/4714eb891fa4fd81.js +1 -0
  398. package/web/.next/static/chunks/57094e1cbd326d6c.css +1 -0
  399. package/web/.next/static/chunks/{18de73b2f14204d3.js → 5856c588eb7f21fd.js} +1 -1
  400. package/web/.next/static/chunks/5f6161ceb4263319.js +1 -0
  401. package/web/.next/static/chunks/81f470d21748eafd.js +2 -0
  402. package/web/.next/static/chunks/829305a6e02eff1f.js +1 -0
  403. package/web/.next/static/chunks/97aaeeee72be634b.js +1 -0
  404. package/web/.next/static/chunks/{672e3da3ad26005b.js → 98e3a7cf58fc912a.js} +1 -1
  405. package/web/.next/static/chunks/9a7361e2365b2d8e.js +1 -0
  406. package/web/.next/static/chunks/9af45e885bd4ccef.js +1 -0
  407. package/web/.next/static/chunks/{5de387864b89e64c.js → ab8b8f80cbc8366f.js} +2 -2
  408. package/web/.next/static/chunks/c3c3f2c9eb309920.js +1 -0
  409. package/web/.next/static/chunks/c7e793951b20a67f.js +1 -0
  410. package/web/.next/static/chunks/cb2824954c3975b0.js +1 -0
  411. package/web/.next/static/chunks/{2babc8e3ae9ba6e8.js → d3db43fcdbbd9b68.js} +1 -1
  412. package/web/.next/static/chunks/e9621b096a69e4e8.js +11 -0
  413. package/web/.next/static/chunks/fb99c57e6d28a274.js +1 -0
  414. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-b1685b5f87ad1d60.js} +1 -1
  415. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +0 -3
  416. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +0 -1
  417. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +0 -3
  418. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +0 -1
  419. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +0 -3
  420. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +0 -1
  421. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  422. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js.map +0 -1
  423. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +0 -1
  424. package/web/.next/server/chunks/ssr/_273d4632._.js +0 -3
  425. package/web/.next/server/chunks/ssr/_273d4632._.js.map +0 -1
  426. package/web/.next/server/chunks/ssr/_6d26a08f._.js +0 -3
  427. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +0 -1
  428. package/web/.next/server/chunks/ssr/_6f0118a0._.js.map +0 -1
  429. package/web/.next/server/chunks/ssr/_a68d7e1c._.js +0 -9
  430. package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +0 -1
  431. package/web/.next/server/chunks/ssr/_b5fc318a._.js +0 -3
  432. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
  433. package/web/.next/server/chunks/ssr/_c5f84841._.js +0 -3
  434. package/web/.next/server/chunks/ssr/_d2e408a9._.js +0 -3
  435. package/web/.next/server/chunks/ssr/_d2e408a9._.js.map +0 -1
  436. package/web/.next/server/chunks/ssr/_f5316e67._.js +0 -3
  437. package/web/.next/server/chunks/ssr/_f5316e67._.js.map +0 -1
  438. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +0 -3
  439. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +0 -1
  440. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +0 -5
  441. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +0 -1
  442. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +0 -5
  443. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +0 -1
  444. package/web/.next/static/chunks/0b3ab176958a8286.js +0 -1
  445. package/web/.next/static/chunks/242446982e8d196e.js +0 -1
  446. package/web/.next/static/chunks/303a1217006489b9.js +0 -1
  447. package/web/.next/static/chunks/3a806cf059241bc9.js +0 -1
  448. package/web/.next/static/chunks/552e0f129144b54d.js +0 -1
  449. package/web/.next/static/chunks/57b45edf86522369.css +0 -1
  450. package/web/.next/static/chunks/619af41a8d3232e5.js +0 -1
  451. package/web/.next/static/chunks/7b924c47dd2a5a53.js +0 -2
  452. package/web/.next/static/chunks/84a181ff3270fd9f.js +0 -1
  453. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +0 -1
  454. package/web/.next/static/chunks/c172f4a6010cb5b5.js +0 -1
  455. package/web/.next/static/chunks/e12f41ac3d49a7b5.js +0 -11
  456. package/web/.next/static/chunks/ed3a602003bcb31b.js +0 -1
  457. package/web/.next/static/chunks/fcde0cbb2976b933.js +0 -1
  458. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → T6bpRqj4p37ell4NNYIUl}/_buildManifest.js +0 -0
  459. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → T6bpRqj4p37ell4NNYIUl}/_clientMiddlewareManifest.json +0 -0
  460. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → T6bpRqj4p37ell4NNYIUl}/_ssgManifest.js +0 -0
@@ -11,6 +11,9 @@ import { SdlcLifecycle } from './generated/output.js';
11
11
  *
12
12
  * A parent whose lifecycle is a member of this set satisfies Gate 1:
13
13
  * directly-blocked children may transition from Blocked to Started.
14
+ *
15
+ * Note: Pending is intentionally excluded — pending features are
16
+ * user-deferred and cannot unblock child features.
14
17
  */
15
18
  export declare const POST_IMPLEMENTATION: Set<SdlcLifecycle>;
16
19
  //# sourceMappingURL=lifecycle-gates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-gates.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/domain/lifecycle-gates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,oBAI9B,CAAC"}
1
+ {"version":3,"file":"lifecycle-gates.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/domain/lifecycle-gates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,oBAI9B,CAAC"}
@@ -11,6 +11,9 @@ import { SdlcLifecycle } from './generated/output.js';
11
11
  *
12
12
  * A parent whose lifecycle is a member of this set satisfies Gate 1:
13
13
  * directly-blocked children may transition from Blocked to Started.
14
+ *
15
+ * Note: Pending is intentionally excluded — pending features are
16
+ * user-deferred and cannot unblock child features.
14
17
  */
15
18
  export const POST_IMPLEMENTATION = new Set([
16
19
  SdlcLifecycle.Implementation,
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA6TrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAwHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA+UrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -27,6 +27,8 @@ import { JsonDrivenIdeLauncherService } from '../services/ide-launchers/json-dri
27
27
  import { DaemonPidService } from '../services/daemon/daemon-pid.service.js';
28
28
  import { DeploymentService } from '../services/deployment/deployment.service.js';
29
29
  import { AttachmentStorageService } from '../services/attachment-storage.service.js';
30
+ import { CloudflareTunnelService } from '../services/tunnel/cloudflare-tunnel.service.js';
31
+ import { GitHubWebhookService } from '../services/webhook/github-webhook.service.js';
30
32
  import { AgentExecutorFactory } from '../services/agents/common/agent-executor-factory.service.js';
31
33
  import { AgentExecutorProvider } from '../services/agents/common/agent-executor-provider.service.js';
32
34
  import { StructuredAgentCallerService } from '../services/agents/common/structured-agent-caller.service.js';
@@ -64,6 +66,7 @@ import { ListFeaturesUseCase } from '../../application/use-cases/features/list-f
64
66
  import { ShowFeatureUseCase } from '../../application/use-cases/features/show-feature.use-case.js';
65
67
  import { DeleteFeatureUseCase } from '../../application/use-cases/features/delete-feature.use-case.js';
66
68
  import { ResumeFeatureUseCase } from '../../application/use-cases/features/resume-feature.use-case.js';
69
+ import { StartFeatureUseCase } from '../../application/use-cases/features/start-feature.use-case.js';
67
70
  import { GetFeatureArtifactUseCase } from '../../application/use-cases/features/get-feature-artifact.use-case.js';
68
71
  import { GetResearchArtifactUseCase } from '../../application/use-cases/features/get-research-artifact.use-case.js';
69
72
  import { GetPlanArtifactUseCase } from '../../application/use-cases/features/get-plan-artifact.use-case.js';
@@ -169,6 +172,18 @@ export async function initializeContainer() {
169
172
  container.register('AttachmentStorageService', { useToken: AttachmentStorageService });
170
173
  const deploymentService = new DeploymentService();
171
174
  container.registerInstance('IDeploymentService', deploymentService);
175
+ // Register tunnel and webhook services
176
+ container.register('ITunnelService', {
177
+ useFactory: () => new CloudflareTunnelService(),
178
+ });
179
+ container.register('IWebhookService', {
180
+ useFactory: (c) => {
181
+ const featureRepo = c.resolve('IFeatureRepository');
182
+ const gitPrService = c.resolve('IGitPrService');
183
+ const notifService = c.resolve('INotificationService');
184
+ return new GitHubWebhookService(featureRepo, gitPrService, notifService, execFn);
185
+ },
186
+ });
172
187
  // Register agent infrastructure
173
188
  container.register('IAgentRunRepository', {
174
189
  useFactory: (c) => {
@@ -276,6 +291,7 @@ export async function initializeContainer() {
276
291
  container.registerSingleton(ShowFeatureUseCase);
277
292
  container.registerSingleton(DeleteFeatureUseCase);
278
293
  container.registerSingleton(ResumeFeatureUseCase);
294
+ container.registerSingleton(StartFeatureUseCase);
279
295
  container.registerSingleton(GetFeatureArtifactUseCase);
280
296
  container.registerSingleton(GetResearchArtifactUseCase);
281
297
  container.registerSingleton(GetPlanArtifactUseCase);
@@ -323,6 +339,9 @@ export async function initializeContainer() {
323
339
  container.register('ResumeFeatureUseCase', {
324
340
  useFactory: (c) => c.resolve(ResumeFeatureUseCase),
325
341
  });
342
+ container.register('StartFeatureUseCase', {
343
+ useFactory: (c) => c.resolve(StartFeatureUseCase),
344
+ });
326
345
  container.register('ApproveAgentRunUseCase', {
327
346
  useFactory: (c) => c.resolve(ApproveAgentRunUseCase),
328
347
  });
@@ -52,6 +52,13 @@ export interface SettingsRow {
52
52
  ci_max_fix_attempts: number | null;
53
53
  ci_watch_timeout_ms: number | null;
54
54
  ci_log_max_chars: number | null;
55
+ stage_timeout_analyze_ms: number | null;
56
+ stage_timeout_requirements_ms: number | null;
57
+ stage_timeout_research_ms: number | null;
58
+ stage_timeout_plan_ms: number | null;
59
+ stage_timeout_implement_ms: number | null;
60
+ stage_timeout_merge_ms: number | null;
61
+ analyze_repo_timeout_analyze_ms: number | null;
55
62
  onboarding_complete: number;
56
63
  approval_gate_allow_prd: number;
57
64
  approval_gate_allow_plan: number;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.mapper.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAOvE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAInB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAG7B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4BAA4B,EAAE,MAAM,CAAC;IAGrC,iCAAiC,EAAE,MAAM,CAAC;IAG1C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhC,mBAAmB,EAAE,MAAM,CAAC;IAG5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,mCAAmC,EAAE,MAAM,CAAC;IAG5C,wBAAwB,EAAE,MAAM,CAAC;IACjC,wBAAwB,EAAE,MAAM,CAAC;IAGjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CA+E1D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAoFvD"}
1
+ {"version":3,"file":"settings.mapper.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAOvE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAInB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAG7B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4BAA4B,EAAE,MAAM,CAAC;IAGrC,iCAAiC,EAAE,MAAM,CAAC;IAG1C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtC,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAG/C,mBAAmB,EAAE,MAAM,CAAC;IAG5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,mCAAmC,EAAE,MAAM,CAAC;IAG5C,wBAAwB,EAAE,MAAM,CAAC;IACjC,wBAAwB,EAAE,MAAM,CAAC;IAGjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CA0F1D;AAsCD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAsFvD"}
@@ -64,6 +64,15 @@ export function toDatabase(settings) {
64
64
  ci_max_fix_attempts: settings.workflow.ciMaxFixAttempts ?? null,
65
65
  ci_watch_timeout_ms: settings.workflow.ciWatchTimeoutMs ?? null,
66
66
  ci_log_max_chars: settings.workflow.ciLogMaxChars ?? null,
67
+ // WorkflowConfig per-stage timeouts (optional number → INTEGER | null)
68
+ stage_timeout_analyze_ms: settings.workflow.stageTimeouts?.analyzeMs ?? null,
69
+ stage_timeout_requirements_ms: settings.workflow.stageTimeouts?.requirementsMs ?? null,
70
+ stage_timeout_research_ms: settings.workflow.stageTimeouts?.researchMs ?? null,
71
+ stage_timeout_plan_ms: settings.workflow.stageTimeouts?.planMs ?? null,
72
+ stage_timeout_implement_ms: settings.workflow.stageTimeouts?.implementMs ?? null,
73
+ stage_timeout_merge_ms: settings.workflow.stageTimeouts?.mergeMs ?? null,
74
+ // WorkflowConfig analyze-repo timeouts (optional number → INTEGER | null)
75
+ analyze_repo_timeout_analyze_ms: settings.workflow.analyzeRepoTimeouts?.analyzeMs ?? null,
67
76
  // WorkflowConfig evidence settings (boolean → INTEGER)
68
77
  workflow_enable_evidence: settings.workflow.enableEvidence ? 1 : 0,
69
78
  workflow_commit_evidence: settings.workflow.commitEvidence ? 1 : 0,
@@ -83,6 +92,39 @@ export function toDatabase(settings) {
83
92
  feature_flag_debug: settings.featureFlags?.debug ? 1 : 0,
84
93
  };
85
94
  }
95
+ /**
96
+ * Build the stageTimeouts spread from DB row columns.
97
+ * Returns `{ stageTimeouts: { ... } }` when at least one column is non-null,
98
+ * or an empty object `{}` when all are null (so the field stays undefined).
99
+ */
100
+ function buildStageTimeoutsFromRow(row) {
101
+ const entries = [];
102
+ if (row.stage_timeout_analyze_ms !== null)
103
+ entries.push(['analyzeMs', row.stage_timeout_analyze_ms]);
104
+ if (row.stage_timeout_requirements_ms !== null)
105
+ entries.push(['requirementsMs', row.stage_timeout_requirements_ms]);
106
+ if (row.stage_timeout_research_ms !== null)
107
+ entries.push(['researchMs', row.stage_timeout_research_ms]);
108
+ if (row.stage_timeout_plan_ms !== null)
109
+ entries.push(['planMs', row.stage_timeout_plan_ms]);
110
+ if (row.stage_timeout_implement_ms !== null)
111
+ entries.push(['implementMs', row.stage_timeout_implement_ms]);
112
+ if (row.stage_timeout_merge_ms !== null)
113
+ entries.push(['mergeMs', row.stage_timeout_merge_ms]);
114
+ if (entries.length === 0)
115
+ return {};
116
+ return { stageTimeouts: Object.fromEntries(entries) };
117
+ }
118
+ /**
119
+ * Build the analyzeRepoTimeouts spread from DB row columns.
120
+ * Returns `{ analyzeRepoTimeouts: { ... } }` when the column is non-null,
121
+ * or an empty object `{}` when null (so the field stays undefined).
122
+ */
123
+ function buildAnalyzeRepoTimeoutsFromRow(row) {
124
+ if (row.analyze_repo_timeout_analyze_ms === null)
125
+ return {};
126
+ return { analyzeRepoTimeouts: { analyzeMs: row.analyze_repo_timeout_analyze_ms } };
127
+ }
86
128
  /**
87
129
  * Maps database row to Settings domain object.
88
130
  * Reconstructs nested objects and converts types from SQL.
@@ -153,6 +195,8 @@ export function fromDatabase(row) {
153
195
  ...(row.ci_max_fix_attempts !== null && { ciMaxFixAttempts: row.ci_max_fix_attempts }),
154
196
  ...(row.ci_watch_timeout_ms !== null && { ciWatchTimeoutMs: row.ci_watch_timeout_ms }),
155
197
  ...(row.ci_log_max_chars !== null && { ciLogMaxChars: row.ci_log_max_chars }),
198
+ ...buildStageTimeoutsFromRow(row),
199
+ ...buildAnalyzeRepoTimeoutsFromRow(row),
156
200
  enableEvidence: row.workflow_enable_evidence === 1,
157
201
  commitEvidence: row.workflow_commit_evidence === 1,
158
202
  },
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Migration 035: Add per-stage timeout columns to settings table.
3
+ *
4
+ * Replaces the single stage_timeout_ms column with individual per-stage
5
+ * timeout columns. Each is a nullable INTEGER (milliseconds). When NULL,
6
+ * the application falls back to the hardcoded default of 600_000 ms
7
+ * (10 minutes).
8
+ *
9
+ * Columns added:
10
+ * - stage_timeout_analyze_ms
11
+ * - stage_timeout_requirements_ms
12
+ * - stage_timeout_research_ms
13
+ * - stage_timeout_plan_ms
14
+ * - stage_timeout_implement_ms
15
+ * - stage_timeout_merge_ms
16
+ * - analyze_repo_timeout_analyze_ms
17
+ */
18
+ import type { MigrationParams } from 'umzug';
19
+ import type Database from 'better-sqlite3';
20
+ export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
21
+ export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
22
+ //# sourceMappingURL=035-add-stage-timeout-ms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"035-add-stage-timeout-ms.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAY3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7F"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Migration 035: Add per-stage timeout columns to settings table.
3
+ *
4
+ * Replaces the single stage_timeout_ms column with individual per-stage
5
+ * timeout columns. Each is a nullable INTEGER (milliseconds). When NULL,
6
+ * the application falls back to the hardcoded default of 600_000 ms
7
+ * (10 minutes).
8
+ *
9
+ * Columns added:
10
+ * - stage_timeout_analyze_ms
11
+ * - stage_timeout_requirements_ms
12
+ * - stage_timeout_research_ms
13
+ * - stage_timeout_plan_ms
14
+ * - stage_timeout_implement_ms
15
+ * - stage_timeout_merge_ms
16
+ * - analyze_repo_timeout_analyze_ms
17
+ */
18
+ const STAGE_COLUMNS = [
19
+ 'stage_timeout_analyze_ms',
20
+ 'stage_timeout_requirements_ms',
21
+ 'stage_timeout_research_ms',
22
+ 'stage_timeout_plan_ms',
23
+ 'stage_timeout_implement_ms',
24
+ 'stage_timeout_merge_ms',
25
+ 'analyze_repo_timeout_analyze_ms',
26
+ ];
27
+ export async function up({ context: db }) {
28
+ const columns = db.pragma('table_info(settings)');
29
+ const existingNames = new Set(columns.map((c) => c.name));
30
+ for (const col of STAGE_COLUMNS) {
31
+ if (!existingNames.has(col)) {
32
+ db.exec(`ALTER TABLE settings ADD COLUMN ${col} INTEGER`);
33
+ }
34
+ }
35
+ // Migrate existing stage_timeout_ms value to all per-stage columns
36
+ if (existingNames.has('stage_timeout_ms')) {
37
+ db.exec(`
38
+ UPDATE settings SET
39
+ stage_timeout_analyze_ms = COALESCE(stage_timeout_analyze_ms, stage_timeout_ms),
40
+ stage_timeout_requirements_ms = COALESCE(stage_timeout_requirements_ms, stage_timeout_ms),
41
+ stage_timeout_research_ms = COALESCE(stage_timeout_research_ms, stage_timeout_ms),
42
+ stage_timeout_plan_ms = COALESCE(stage_timeout_plan_ms, stage_timeout_ms),
43
+ stage_timeout_implement_ms = COALESCE(stage_timeout_implement_ms, stage_timeout_ms),
44
+ stage_timeout_merge_ms = COALESCE(stage_timeout_merge_ms, stage_timeout_ms)
45
+ WHERE stage_timeout_ms IS NOT NULL
46
+ `);
47
+ }
48
+ }
49
+ export async function down({ context: db }) {
50
+ // SQLite does not support DROP COLUMN before 3.35.0; the columns are
51
+ // nullable and ignored when absent, so this is a no-op.
52
+ void db;
53
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAwFxC;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9E"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAoGxC;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9E"}
@@ -11,7 +11,7 @@
11
11
  */
12
12
  import { readdirSync } from 'node:fs';
13
13
  import { dirname, join } from 'node:path';
14
- import { pathToFileURL } from 'node:url';
14
+ import { fileURLToPath, pathToFileURL } from 'node:url';
15
15
  import { Umzug } from 'umzug';
16
16
  import { SQLiteMigrationStorage } from './sqlite-migration-storage.js';
17
17
  import { LEGACY_MIGRATIONS, LEGACY_MIGRATION_NAMES } from './legacy-migrations.js';
@@ -27,7 +27,7 @@ export const LATEST_SCHEMA_VERSION = 34;
27
27
  function getMigrationsDir() {
28
28
  // import.meta.url is available in ESM; fallback to __dirname for CJS
29
29
  // The migrations/ directory is a sibling of this file
30
- return join(dirname(new URL(import.meta.url).pathname), 'migrations');
30
+ return join(dirname(fileURLToPath(import.meta.url)), 'migrations');
31
31
  }
32
32
  /**
33
33
  * Discovers new migration files (035+) in the migrations/ directory.
@@ -41,9 +41,18 @@ function getMigrationsDir() {
41
41
  async function discoverNewMigrations(migrationsDir) {
42
42
  let files;
43
43
  try {
44
- files = readdirSync(migrationsDir)
45
- .filter((f) => f.endsWith('.js') && !f.endsWith('.d.js'))
46
- .sort();
44
+ const allFiles = readdirSync(migrationsDir);
45
+ // Accept .js (compiled) and .ts (dev via tsx) but exclude .d.ts declaration files
46
+ const candidates = allFiles.filter((f) => (f.endsWith('.js') || f.endsWith('.ts')) && !f.endsWith('.d.ts') && !f.endsWith('.d.js'));
47
+ // Deduplicate: if both .ts and .js exist for the same migration, prefer .js
48
+ const byName = new Map();
49
+ for (const f of candidates) {
50
+ const base = f.replace(/\.(js|ts)$/, '');
51
+ if (!byName.has(base) || f.endsWith('.js')) {
52
+ byName.set(base, f);
53
+ }
54
+ }
55
+ files = [...byName.values()].sort();
47
56
  }
48
57
  catch {
49
58
  // Directory doesn't exist or is unreadable — no new migrations
@@ -52,7 +61,7 @@ async function discoverNewMigrations(migrationsDir) {
52
61
  const migrations = [];
53
62
  for (const file of files) {
54
63
  const filePath = join(migrationsDir, file);
55
- const name = file.replace(/\.js$/, '');
64
+ const name = file.replace(/\.(js|ts)$/, '');
56
65
  const mod = (await import(pathToFileURL(filePath).href));
57
66
  migrations.push({
58
67
  name,
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DnD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgBtC;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAqEhD"}
1
+ {"version":3,"file":"sqlite-settings.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-settings.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8EAA8E,CAAC;AACxH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE;;;GAGG;AACH,qBACa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEnD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgBtC;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA4EhD"}
@@ -57,6 +57,10 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
57
57
  notif_evt_pr_blocked, notif_evt_merge_review_ready,
58
58
  workflow_open_pr_on_impl_complete,
59
59
  ci_max_fix_attempts, ci_watch_timeout_ms, ci_log_max_chars,
60
+ stage_timeout_analyze_ms, stage_timeout_requirements_ms,
61
+ stage_timeout_research_ms, stage_timeout_plan_ms,
62
+ stage_timeout_implement_ms, stage_timeout_merge_ms,
63
+ analyze_repo_timeout_analyze_ms,
60
64
  onboarding_complete,
61
65
  approval_gate_allow_prd, approval_gate_allow_plan,
62
66
  approval_gate_allow_merge, approval_gate_push_on_impl_complete,
@@ -77,6 +81,10 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
77
81
  @notif_evt_pr_blocked, @notif_evt_merge_review_ready,
78
82
  @workflow_open_pr_on_impl_complete,
79
83
  @ci_max_fix_attempts, @ci_watch_timeout_ms, @ci_log_max_chars,
84
+ @stage_timeout_analyze_ms, @stage_timeout_requirements_ms,
85
+ @stage_timeout_research_ms, @stage_timeout_plan_ms,
86
+ @stage_timeout_implement_ms, @stage_timeout_merge_ms,
87
+ @analyze_repo_timeout_analyze_ms,
80
88
  @onboarding_complete,
81
89
  @approval_gate_allow_prd, @approval_gate_allow_plan,
82
90
  @approval_gate_allow_merge, @approval_gate_push_on_impl_complete,
@@ -156,6 +164,13 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
156
164
  ci_max_fix_attempts = @ci_max_fix_attempts,
157
165
  ci_watch_timeout_ms = @ci_watch_timeout_ms,
158
166
  ci_log_max_chars = @ci_log_max_chars,
167
+ stage_timeout_analyze_ms = @stage_timeout_analyze_ms,
168
+ stage_timeout_requirements_ms = @stage_timeout_requirements_ms,
169
+ stage_timeout_research_ms = @stage_timeout_research_ms,
170
+ stage_timeout_plan_ms = @stage_timeout_plan_ms,
171
+ stage_timeout_implement_ms = @stage_timeout_implement_ms,
172
+ stage_timeout_merge_ms = @stage_timeout_merge_ms,
173
+ analyze_repo_timeout_analyze_ms = @analyze_repo_timeout_analyze_ms,
159
174
  onboarding_complete = @onboarding_complete,
160
175
  approval_gate_allow_prd = @approval_gate_allow_prd,
161
176
  approval_gate_allow_plan = @approval_gate_allow_plan,
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-repository-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;EAIjC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC;AAyB7E;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAQnC"}
1
+ {"version":3,"file":"analyze-repository-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAkBpG;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;EAIjC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC;AA0B7E;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAQnC"}
@@ -1,5 +1,19 @@
1
1
  import { Annotation, StateGraph, START, END } from '@langchain/langgraph';
2
2
  import { buildAnalyzePrompt } from './prompts/analyze-repository.prompt.js';
3
+ import { hasSettings, getSettings } from '../../../services/settings.service.js';
4
+ /** Default timeout for analyze-repo agent (10 minutes) — prevents infinite hangs. */
5
+ const DEFAULT_ANALYZE_REPO_TIMEOUT_MS = 600_000;
6
+ /**
7
+ * Resolve the timeout for the analyze-repository agent.
8
+ * Reads from settings (workflow.analyzeRepoTimeouts.analyzeMs),
9
+ * falling back to DEFAULT_ANALYZE_REPO_TIMEOUT_MS when not configured.
10
+ */
11
+ function getAnalyzeRepoTimeoutMs() {
12
+ if (!hasSettings())
13
+ return DEFAULT_ANALYZE_REPO_TIMEOUT_MS;
14
+ const timeouts = getSettings().workflow?.analyzeRepoTimeouts;
15
+ return timeouts?.analyzeMs ?? DEFAULT_ANALYZE_REPO_TIMEOUT_MS;
16
+ }
3
17
  /**
4
18
  * State annotation for the analyze-repository graph.
5
19
  *
@@ -23,6 +37,7 @@ function createAnalyzeNode(executor) {
23
37
  const prompt = buildAnalyzePrompt(state.repositoryPath);
24
38
  const result = await executor.execute(prompt, {
25
39
  cwd: state.repositoryPath,
40
+ timeout: getAnalyzeRepoTimeoutMs(),
26
41
  });
27
42
  return {
28
43
  analysisMarkdown: result.result,
@@ -23,10 +23,20 @@ export type NodeLogger = ReturnType<typeof createNodeLogger>;
23
23
  * Safely read a file from the spec directory. Returns empty string if file doesn't exist.
24
24
  */
25
25
  export declare function readSpecFile(specDir: string, filename: string): string;
26
+ /**
27
+ * Resolve the timeout for a specific stage.
28
+ * Reads per-stage timeout from settings (workflow.stageTimeouts.<stage>Ms),
29
+ * falling back to DEFAULT_STAGE_TIMEOUT_MS when not configured.
30
+ */
31
+ export declare function getStageTimeoutMs(nodeName: string): number;
26
32
  /**
27
33
  * Build executor options with cwd. Each node gets a clean agent context.
34
+ * The timeout is resolved per-stage from settings (workflow.stageTimeouts)
35
+ * with a fallback to DEFAULT_STAGE_TIMEOUT_MS (10 min).
36
+ *
37
+ * When no `nodeName` is provided, the current node from state is used.
28
38
  */
29
- export declare function buildExecutorOptions(state: FeatureAgentState, overrides?: Partial<Pick<AgentExecutionOptions, 'timeout'>>): AgentExecutionOptions;
39
+ export declare function buildExecutorOptions(state: FeatureAgentState, overrides?: Partial<Pick<AgentExecutionOptions, 'timeout'>>, nodeName?: string): AgentExecutionOptions;
30
40
  /**
31
41
  * Parse YAML with automatic sanitization of common AI-generated issues.
32
42
  * First attempts normal parsing; on failure, sanitizes unquoted braces
@@ -1 +1 @@
1
- {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import yaml from 'js-yaml';
8
8
  import { readFileSync, writeFileSync, renameSync, unlinkSync } from 'node:fs';
9
9
  import { join } from 'node:path';
10
10
  import { interrupt, isGraphBubbleUp } from '@langchain/langgraph';
11
+ import { hasSettings, getSettings } from '../../../../services/settings.service.js';
11
12
  import { reportNodeStart } from '../heartbeat.js';
12
13
  import { recordPhaseStart, recordPhaseEnd, recordApprovalWaitStart, } from '../phase-timing-context.js';
13
14
  import { updateNodeLifecycle } from '../lifecycle-context.js';
@@ -44,14 +45,52 @@ export function readSpecFile(specDir, filename) {
44
45
  return '';
45
46
  }
46
47
  }
48
+ /** Default timeout per agent call (30 minutes) — prevents infinite hangs. */
49
+ const DEFAULT_STAGE_TIMEOUT_MS = 1_800_000;
50
+ /**
51
+ * Map from node name to the corresponding StageTimeouts field.
52
+ * `fast-implement` reuses the implement timeout; `evidence` also reuses implement.
53
+ */
54
+ const STAGE_TIMEOUT_KEY = {
55
+ analyze: 'analyzeMs',
56
+ requirements: 'requirementsMs',
57
+ research: 'researchMs',
58
+ plan: 'planMs',
59
+ implement: 'implementMs',
60
+ 'fast-implement': 'implementMs',
61
+ evidence: 'implementMs',
62
+ merge: 'mergeMs',
63
+ };
64
+ /**
65
+ * Resolve the timeout for a specific stage.
66
+ * Reads per-stage timeout from settings (workflow.stageTimeouts.<stage>Ms),
67
+ * falling back to DEFAULT_STAGE_TIMEOUT_MS when not configured.
68
+ */
69
+ export function getStageTimeoutMs(nodeName) {
70
+ if (!hasSettings())
71
+ return DEFAULT_STAGE_TIMEOUT_MS;
72
+ const timeouts = getSettings().workflow?.stageTimeouts;
73
+ if (!timeouts)
74
+ return DEFAULT_STAGE_TIMEOUT_MS;
75
+ const key = STAGE_TIMEOUT_KEY[nodeName];
76
+ if (!key)
77
+ return DEFAULT_STAGE_TIMEOUT_MS;
78
+ return timeouts[key] ?? DEFAULT_STAGE_TIMEOUT_MS;
79
+ }
47
80
  /**
48
81
  * Build executor options with cwd. Each node gets a clean agent context.
82
+ * The timeout is resolved per-stage from settings (workflow.stageTimeouts)
83
+ * with a fallback to DEFAULT_STAGE_TIMEOUT_MS (10 min).
84
+ *
85
+ * When no `nodeName` is provided, the current node from state is used.
49
86
  */
50
- export function buildExecutorOptions(state, overrides) {
87
+ export function buildExecutorOptions(state, overrides, nodeName) {
88
+ const stage = nodeName ?? state.currentNode ?? '';
89
+ const stageTimeout = getStageTimeoutMs(stage);
51
90
  return {
52
91
  cwd: state.worktreePath || state.repositoryPath,
53
92
  maxTurns: 5000,
54
- timeout: 1_800_000, // 30 minutes per agent call — prevents infinite hangs
93
+ timeout: stageTimeout,
55
94
  ...(state.model ? { model: state.model } : {}),
56
95
  ...overrides,
57
96
  };
@@ -373,7 +412,7 @@ export function executeNode(nodeName, executor, buildPrompt) {
373
412
  try {
374
413
  const resumePrefix = buildResumeContext(state.resumeReason);
375
414
  const prompt = resumePrefix + buildPrompt(state, log);
376
- const options = buildExecutorOptions(state);
415
+ const options = buildExecutorOptions(state, undefined, nodeName);
377
416
  log.info(`Executing agent at cwd=${options.cwd}`);
378
417
  log.info(`Prompt length: ${prompt.length} chars`);
379
418
  const result = await executor.execute(prompt, options);
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Cloudflare Tunnel Service
3
+ *
4
+ * Manages a `cloudflared` quick-tunnel that exposes ONLY the webhook
5
+ * API routes to the public internet via a random *.trycloudflare.com
6
+ * subdomain.
7
+ *
8
+ * Uses the `cloudflared` npm package which handles binary installation
9
+ * and provides a typed Tunnel API — no need for the user to install
10
+ * cloudflared separately.
11
+ *
12
+ * Security: A lightweight proxy HTTP server is started on a random port
13
+ * that only forwards requests matching the allowed path prefix
14
+ * (/api/webhooks) to the main app. The tunnel connects to this proxy,
15
+ * not the main app server. All other paths return 404.
16
+ */
17
+ import type { ITunnelService, TunnelUrlChangeHandler } from '../../../application/ports/output/services/tunnel-service.interface.js';
18
+ export interface CloudflareTunnelDeps {
19
+ createTunnel: (origin: string) => TunnelLike | Promise<TunnelLike>;
20
+ }
21
+ export interface TunnelLike {
22
+ on(event: 'url', handler: (url: string) => void): void;
23
+ on(event: 'connected', handler: (connection: {
24
+ id: string;
25
+ ip: string;
26
+ location: string;
27
+ }) => void): void;
28
+ on(event: 'error', handler: (error: Error) => void): void;
29
+ on(event: 'exit', handler: (code: number | null, signal: string | null) => void): void;
30
+ once(event: string, handler: (...args: unknown[]) => void): void;
31
+ stop(): void;
32
+ }
33
+ export declare class CloudflareTunnelService implements ITunnelService {
34
+ private tunnel;
35
+ private proxyServer;
36
+ private publicUrl;
37
+ private readonly urlChangeHandlers;
38
+ private readonly deps;
39
+ constructor(deps?: Partial<CloudflareTunnelDeps>);
40
+ start(localPort: number): Promise<string>;
41
+ stop(): Promise<void>;
42
+ getPublicUrl(): string | null;
43
+ onUrlChange(handler: TunnelUrlChangeHandler): void;
44
+ isRunning(): boolean;
45
+ /**
46
+ * Start a lightweight HTTP proxy on a random port that only forwards
47
+ * requests with paths starting with ALLOWED_PATH_PREFIX to the main app.
48
+ * Everything else gets a 404.
49
+ */
50
+ private startProxyServer;
51
+ private stopProxyServer;
52
+ private stopTunnel;
53
+ private notifyUrlChange;
54
+ }
55
+ //# sourceMappingURL=cloudflare-tunnel.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-tunnel.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,wEAAwE,CAAC;AAMhF,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACvD,EAAE,CACA,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,CAAC,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAC1E,IAAI,CAAC;IACR,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACvF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,IAAI,IAAI,CAAC;CACd;AAWD,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;gBAEhC,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAI9C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuEzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAIlD,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA0DxB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,eAAe;CAgBxB"}