@shepai/cli 1.144.0 → 1.145.0-pr452.8b628a7

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 (267) hide show
  1. package/apis/json-schema/Feature.yaml +25 -0
  2. package/apis/json-schema/PullRequest.yaml +11 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +5 -0
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts +79 -0
  7. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts.map +1 -0
  8. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.js +31 -0
  9. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +5 -0
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +10 -0
  13. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
  14. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts +23 -0
  16. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.js +84 -0
  18. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  19. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts +33 -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/infrastructure/di/container.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/di/container.js +2 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +8 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +18 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts +13 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts.map +1 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.js +30 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts +12 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.d.ts.map +1 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-per-feature-workflow-columns.js +23 -0
  34. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +23 -4
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +25 -0
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +85 -0
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +5 -0
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +15 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +5 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +23 -0
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts +6 -3
  47. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
  48. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +104 -66
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge-output-parser.d.ts +12 -0
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge-output-parser.d.ts.map +1 -1
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge-output-parser.js +33 -0
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +2 -0
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +50 -0
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +8 -0
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +40 -1
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.d.ts.map +1 -1
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.js +11 -9
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +10 -0
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  62. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +68 -1
  63. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map +1 -1
  64. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.js +8 -6
  65. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
  66. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +11 -9
  67. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -1
  68. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +8 -6
  69. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts.map +1 -1
  70. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.js +3 -1
  71. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts +1 -0
  72. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.d.ts.map +1 -1
  73. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.js +9 -0
  74. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +5 -0
  75. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  76. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +20 -0
  77. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts +25 -0
  78. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts.map +1 -0
  79. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.js +145 -0
  80. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts +17 -3
  81. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
  82. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +98 -15
  83. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  84. package/dist/src/presentation/cli/commands/ui.command.js +2 -1
  85. package/dist/src/presentation/web/app/actions/create-feature.d.ts +10 -0
  86. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  87. package/dist/src/presentation/web/app/actions/create-feature.js +8 -1
  88. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  89. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  90. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  91. package/dist/src/presentation/web/app/build-feature-node-data.js +5 -3
  92. package/dist/src/presentation/web/app/build-graph-nodes.js +5 -3
  93. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  94. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +4 -0
  95. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +24 -7
  97. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +12 -0
  98. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +35 -0
  100. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +7 -1
  101. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +5 -1
  102. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
  104. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -0
  106. package/dist/src/presentation/web/dev-server.js +2 -1
  107. package/dist/tsconfig.build.tsbuildinfo +1 -1
  108. package/package.json +1 -1
  109. package/web/.next/BUILD_ID +1 -1
  110. package/web/.next/build-manifest.json +2 -2
  111. package/web/.next/fallback-build-manifest.json +2 -2
  112. package/web/.next/prerender-manifest.json +3 -3
  113. package/web/.next/required-server-files.js +3 -3
  114. package/web/.next/required-server-files.json +3 -3
  115. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
  116. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +28 -28
  119. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  120. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  122. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  123. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
  125. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  126. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  128. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  129. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +28 -28
  131. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  132. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  134. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
  137. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  138. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
  140. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  143. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/_global-error.html +2 -2
  146. package/web/.next/server/app/_global-error.rsc +1 -1
  147. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  148. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  149. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  150. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  151. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  152. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  153. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  155. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  156. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  158. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  159. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  160. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  162. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  164. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  165. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  166. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  167. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  168. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
  169. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  170. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  171. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  173. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +2 -2
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +1 -1
  189. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  191. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +1 -1
  193. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +3 -0
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +1 -0
  196. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +1 -1
  197. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/_0c5f56e3._.js +2 -2
  199. package/web/.next/server/chunks/ssr/_0c5f56e3._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/_1b719e7f._.js +1 -1
  201. package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/_37e8548b._.js +1 -1
  203. package/web/.next/server/chunks/ssr/_37e8548b._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/_55d763e2._.js +1 -1
  205. package/web/.next/server/chunks/ssr/_55d763e2._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/_6256a985._.js +1 -1
  207. package/web/.next/server/chunks/ssr/_6256a985._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/_64bdfc6f._.js +2 -2
  209. package/web/.next/server/chunks/ssr/_64bdfc6f._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/{_c64f06d5._.js → _6601673c._.js} +2 -2
  211. package/web/.next/server/chunks/ssr/{_c64f06d5._.js.map → _6601673c._.js.map} +1 -1
  212. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  213. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/_8fcc39d4._.js +3 -0
  215. package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +1 -0
  216. package/web/.next/server/chunks/ssr/_9bbe1097._.js +3 -0
  217. package/web/.next/server/chunks/ssr/{_c67ad133._.js.map → _9bbe1097._.js.map} +1 -1
  218. package/web/.next/server/chunks/ssr/_b71645b4._.js +1 -1
  219. package/web/.next/server/chunks/ssr/_b71645b4._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  222. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  224. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  226. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  232. package/web/.next/server/chunks/ssr/{src_presentation_web_dd85ad88._.js → src_presentation_web_bb760f63._.js} +2 -2
  233. package/web/.next/server/chunks/ssr/{src_presentation_web_dd85ad88._.js.map → src_presentation_web_bb760f63._.js.map} +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  240. package/web/.next/server/pages/500.html +2 -2
  241. package/web/.next/server/server-reference-manifest.js +1 -1
  242. package/web/.next/server/server-reference-manifest.json +44 -44
  243. package/web/.next/static/chunks/{74ee98538b63a4b2.css → 0b18c50740356276.css} +1 -1
  244. package/web/.next/static/chunks/{53478ed65db63030.js → 272969a3ec45bfb1.js} +2 -2
  245. package/web/.next/static/chunks/{904cdf4c47654f32.js → 2d74811df2aeea52.js} +1 -1
  246. package/web/.next/static/chunks/{8cc1aea0d82835be.js → 3a870fad0361102a.js} +1 -1
  247. package/web/.next/static/chunks/{60c6c3c30fba3b7c.js → 3f340791cd48969f.js} +1 -1
  248. package/web/.next/static/chunks/4f69aeac8fb161bb.js +1 -0
  249. package/web/.next/static/chunks/{1867fdb7f2c6035f.js → 4fbbaffba82909cc.js} +1 -1
  250. package/web/.next/static/chunks/{21502baa33ad728a.js → 7026524b541ba6e0.js} +2 -2
  251. package/web/.next/static/chunks/{de0704c3e73118cf.js → 7ca459865dbadc14.js} +1 -1
  252. package/web/.next/static/chunks/831b9f0d3f8c7d0a.js +1 -0
  253. package/web/.next/static/chunks/{ecfbc35ad11c83bb.js → a3a4ba7b54a09726.js} +1 -1
  254. package/web/.next/static/chunks/{88300dbc7c91abb2.js → b82119f8bb1d93e3.js} +1 -1
  255. package/web/.next/static/chunks/{683ec435a34ca112.js → d39caafcb2ac4843.js} +1 -1
  256. package/web/.next/static/chunks/fa556c575c788679.js +1 -0
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +0 -3
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +0 -1
  259. package/web/.next/server/chunks/ssr/_a9f57758._.js +0 -3
  260. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +0 -1
  261. package/web/.next/server/chunks/ssr/_c67ad133._.js +0 -3
  262. package/web/.next/static/chunks/0bce83a11c7a9383.js +0 -1
  263. package/web/.next/static/chunks/6a370f2709c81d83.js +0 -1
  264. package/web/.next/static/chunks/9e3e916a22d1121f.js +0 -1
  265. /package/web/.next/static/{rsS9eOHzCHbGCCwBS1fRh → iMG6ZbET-956f-LkX_CmQ}/_buildManifest.js +0 -0
  266. /package/web/.next/static/{rsS9eOHzCHbGCCwBS1fRh → iMG6ZbET-956f-LkX_CmQ}/_clientMiddlewareManifest.json +0 -0
  267. /package/web/.next/static/{rsS9eOHzCHbGCCwBS1fRh → iMG6ZbET-956f-LkX_CmQ}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU9F;AAuCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAqER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR"}
1
+ {"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU9F;AAuCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAyER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqDzD"}
@@ -128,8 +128,11 @@ export function buildCommitPushPrPrompt(state, branch, baseBranch, repoUrl) {
128
128
  : '';
129
129
  const steps = [];
130
130
  // Step 1: Commit (always)
131
+ const stageCmd = state.commitSpecs
132
+ ? '`git add -A`'
133
+ : '`git add -A` then `git reset -- specs/` (do NOT commit the specs/ directory)';
131
134
  steps.push(`1. Review the current changes using \`git diff\` and \`git status\`
132
- 2. Stage all changes with \`git add -A\`
135
+ 2. Stage changes with ${stageCmd}
133
136
  3. Write a conventional commit message based on the actual diff content
134
137
  - Use the format: \`feat(<scope>): <description>\` or \`fix(<scope>): <description>\`
135
138
  - The commit message should summarize what actually changed, not be generic
@@ -177,6 +180,7 @@ ${evidenceSection}
177
180
 
178
181
  - Write a meaningful conventional commit message derived from the actual diff — do NOT use generic messages
179
182
  ${rejectionSection ? '- You MUST modify source code files to address the rejection feedback above BEFORE committing' : '- Do NOT modify any source code files — only perform git operations'}
183
+ ${!state.commitSpecs ? '- Do NOT commit the `specs/` directory — it must stay untracked. If you accidentally staged it, run `git reset -- specs/` before committing' : ''}
180
184
  - Do NOT amend existing commits
181
185
  - Do NOT run \`git pull\`, \`git rebase\`, or \`git merge\` — this is a fresh branch, push it directly
182
186
  - If there are no changes to commit, skip the commit step and report that no changes were found`;
@@ -219,3 +223,66 @@ ${failureLogs}
219
223
  - Do NOT create a new branch — push directly to \`${branch}\`
220
224
  - If the failure is unclear, make your best diagnosis and explain your reasoning in the commit message`;
221
225
  }
226
+ /**
227
+ * Build a prompt for the CI watch agent call.
228
+ *
229
+ * Instructs the agent to check ALL CI runs for a branch, wait for all
230
+ * to complete, verify every run passed, and report structured status.
231
+ * Generic — works with any git/gh repo, not tied to specific workflows.
232
+ *
233
+ * @param branch - Feature branch name to watch CI for
234
+ */
235
+ export function buildCiWatchPrompt(branch) {
236
+ return `You are checking CI status for branch \`${branch}\`.
237
+
238
+ ## Instructions
239
+
240
+ Follow these steps EXACTLY:
241
+
242
+ ### Step 1: List all CI runs for the branch
243
+
244
+ \`\`\`
245
+ gh run list --branch ${branch} --json databaseId,status,conclusion,name
246
+ \`\`\`
247
+
248
+ This shows ALL workflow runs. A single push can trigger MULTIPLE runs (e.g., CI/CD + PR validation).
249
+ You MUST check every run, not just one.
250
+
251
+ ### Step 2: Watch all in-progress runs
252
+
253
+ For EACH run with \`status\` that is NOT \`completed\`, watch it:
254
+
255
+ \`\`\`
256
+ gh run watch <databaseId> --interval 20
257
+ \`\`\`
258
+
259
+ Wait for each in-progress run to finish before proceeding.
260
+
261
+ ### Step 3: Verify all runs after watching
262
+
263
+ After all runs complete, run the list command again to confirm:
264
+
265
+ \`\`\`
266
+ gh run list --branch ${branch} --json databaseId,status,conclusion,name
267
+ \`\`\`
268
+
269
+ Check that EVERY run shows \`status: completed\`. Do NOT trust \`gh run watch\` exit status alone.
270
+
271
+ ### Step 4: Report status
272
+
273
+ After verifying all runs are complete, report EXACTLY ONE of these lines:
274
+
275
+ - If every run has \`conclusion: success\`:
276
+ \`CI_STATUS: PASSED\`
277
+
278
+ - If any run has a non-success conclusion:
279
+ \`CI_STATUS: FAILED — <brief summary of which runs failed and why>\`
280
+
281
+ ## Constraints
282
+
283
+ - NEVER claim CI passed until EVERY run shows \`completed\` + \`success\`
284
+ - NEVER watch a single run and assume it is the only one
285
+ - If \`gh run list\` returns no runs, wait 10 seconds and retry up to 3 times
286
+ - If rate-limited (403 error), report: \`CI_STATUS: PASSED\` (skip check gracefully)
287
+ - Print the URL of the failing run if CI fails`;
288
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA6NhE"}
1
+ {"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiOhE"}
@@ -219,10 +219,12 @@ You MUST write TWO files:
219
219
  - Do NOT modify any source code
220
220
  - Do NOT start implementing — planning only
221
221
 
222
- ${buildCommitPushBlock({
223
- push: state.push,
224
- files: [`${state.specDir}/plan.yaml`, `${state.specDir}/tasks.yaml`],
225
- commitHint: 'docs(specs): create implementation plan and task breakdown',
226
- skipVerification: true,
227
- })}`;
222
+ ${state.commitSpecs
223
+ ? buildCommitPushBlock({
224
+ push: state.push,
225
+ files: [`${state.specDir}/plan.yaml`, `${state.specDir}/tasks.yaml`],
226
+ commitHint: 'docs(specs): create implementation plan and task breakdown',
227
+ skipVerification: true,
228
+ })
229
+ : `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
228
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAgMxE"}
1
+ {"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAoMxE"}
@@ -84,9 +84,9 @@ Update the file at: ${state.specDir}/spec.yaml
84
84
 
85
85
  Write the COMPLETE file. Preserve name/number/branch/technologies from analysis and update:
86
86
 
87
- name: (keep)
88
- number: (keep)
89
- branch: (keep)
87
+ name: (keep — string)
88
+ number: (keep — MUST be a bare integer, e.g. 2, NOT "002" or "2")
89
+ branch: (keep — string)
90
90
  oneLiner: (keep or refine)
91
91
  summary: >
92
92
  (keep or refine based on requirements)
@@ -185,10 +185,12 @@ Write the COMPLETE file. Preserve name/number/branch/technologies from analysis
185
185
  - Do NOT create any other files
186
186
  - Do NOT modify any source code
187
187
 
188
- ${buildCommitPushBlock({
189
- push: state.push,
190
- files: [`${state.specDir}/spec.yaml`],
191
- commitHint: 'docs(specs): define requirements and product questions',
192
- skipVerification: true,
193
- })}`;
188
+ ${state.commitSpecs
189
+ ? buildCommitPushBlock({
190
+ push: state.push,
191
+ files: [`${state.specDir}/spec.yaml`],
192
+ commitHint: 'docs(specs): define requirements and product questions',
193
+ skipVerification: true,
194
+ })
195
+ : `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
194
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"research.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmJpE"}
1
+ {"version":3,"file":"research.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAuJpE"}
@@ -146,10 +146,12 @@ Use this YAML structure:
146
146
  - Do NOT create any other files
147
147
  - Do NOT modify any source code
148
148
 
149
- ${buildCommitPushBlock({
150
- push: state.push,
151
- files: [`${state.specDir}/research.yaml`],
152
- commitHint: 'docs(specs): research technical decisions and library choices',
153
- skipVerification: true,
154
- })}`;
149
+ ${state.commitSpecs
150
+ ? buildCommitPushBlock({
151
+ push: state.push,
152
+ files: [`${state.specDir}/research.yaml`],
153
+ commitHint: 'docs(specs): research technical decisions and library choices',
154
+ skipVerification: true,
155
+ })
156
+ : `## Git Operations\n\nDo NOT commit or push any spec files. Spec files are managed locally only.`}`;
155
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spec.schema.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA4B7F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAYnE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAqBxE"}
1
+ {"version":3,"file":"spec.schema.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AA8BzB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAYnE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAqBxE"}
@@ -1,4 +1,4 @@
1
- import { requireString, requireNonEmptyArray } from './validation.js';
1
+ import { requireString, requireInteger, requireNonEmptyArray, } from './validation.js';
2
2
  const VALID_SIZE_ESTIMATES = ['S', 'M', 'L', 'XL'];
3
3
  function validateBaseSpec(data, errors) {
4
4
  if (!data || typeof data !== 'object') {
@@ -7,6 +7,8 @@ function validateBaseSpec(data, errors) {
7
7
  }
8
8
  const d = data;
9
9
  requireString(d, 'name', errors);
10
+ requireInteger(d, 'number', errors);
11
+ requireString(d, 'branch', errors);
10
12
  requireString(d, 'oneLiner', errors);
11
13
  requireString(d, 'summary', errors);
12
14
  requireString(d, 'phase', errors);
@@ -3,6 +3,7 @@ export interface ValidationResult {
3
3
  errors: string[];
4
4
  }
5
5
  export declare function requireString(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): void;
6
+ export declare function requireInteger(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): void;
6
7
  export declare function requireNonEmptyArray(data: Record<string, unknown>, field: string, errors: string[], prefix?: string): unknown[] | null;
7
8
  export declare function requireArrayOfShape(data: Record<string, unknown>, field: string, errors: string[], itemChecker: (item: unknown, index: number, errors: string[]) => void, prefix?: string): void;
8
9
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,OAAO,EAAE,GAAG,IAAI,CAelB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,EACrE,MAAM,SAAK,GACV,IAAI,CAMN"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,SAAK,GACV,OAAO,EAAE,GAAG,IAAI,CAelB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,EACrE,MAAM,SAAK,GACV,IAAI,CAMN"}
@@ -10,6 +10,15 @@ export function requireString(data, field, errors, prefix = '') {
10
10
  errors.push(`Field '${prefix}${field}' must not be empty`);
11
11
  }
12
12
  }
13
+ export function requireInteger(data, field, errors, prefix = '') {
14
+ const val = data[field];
15
+ if (val === undefined || val === null) {
16
+ errors.push(`Missing required integer field '${prefix}${field}'`);
17
+ }
18
+ else if (typeof val !== 'number' || !Number.isInteger(val)) {
19
+ errors.push(`Field '${prefix}${field}' must be an integer, got ${typeof val === 'number' ? val : typeof val}`);
20
+ }
21
+ }
13
22
  export function requireNonEmptyArray(data, field, errors, prefix = '') {
14
23
  const val = data[field];
15
24
  if (val === undefined || val === null) {
@@ -48,6 +48,11 @@ export declare const FeatureAgentAnnotation: import("@langchain/langgraph").Anno
48
48
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
49
49
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
50
50
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
51
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
52
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
53
+ ciWatchEnabled: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
54
+ enableEvidence: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
55
+ commitEvidence: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
51
56
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<Evidence[], Evidence[]>;
52
57
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
53
58
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwHjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
@@ -79,6 +79,26 @@ export const FeatureAgentAnnotation = Annotation.Root({
79
79
  reducer: (_prev, next) => next,
80
80
  default: () => false,
81
81
  }),
82
+ forkAndPr: Annotation({
83
+ reducer: (_prev, next) => next,
84
+ default: () => false,
85
+ }),
86
+ commitSpecs: Annotation({
87
+ reducer: (_prev, next) => next,
88
+ default: () => true,
89
+ }),
90
+ ciWatchEnabled: Annotation({
91
+ reducer: (_prev, next) => next,
92
+ default: () => true,
93
+ }),
94
+ enableEvidence: Annotation({
95
+ reducer: (_prev, next) => next,
96
+ default: () => false,
97
+ }),
98
+ commitEvidence: Annotation({
99
+ reducer: (_prev, next) => next,
100
+ default: () => false,
101
+ }),
82
102
  // --- Evidence state ---
83
103
  evidence: Annotation({
84
104
  reducer: (prev, next) => [...prev, ...next],
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Git Fork Service Implementation
3
+ *
4
+ * Manages GitHub fork operations: forking repos, pushing to forks,
5
+ * creating upstream PRs, and polling upstream PR status.
6
+ * Uses `gh` CLI for all GitHub API interactions.
7
+ */
8
+ import type { IGitForkService } from '../../../application/ports/output/services/git-fork-service.interface.js';
9
+ import type { UpstreamPrResult } from '../../../application/ports/output/services/git-fork-service.interface.js';
10
+ import { PrStatus } from '../../../domain/generated/output.js';
11
+ import type { ExecFunction } from './worktree.service.js';
12
+ export declare class GitForkService implements IGitForkService {
13
+ private readonly execFile;
14
+ constructor(execFile: ExecFunction);
15
+ forkRepository(cwd: string): Promise<void>;
16
+ pushToFork(cwd: string, branch: string): Promise<void>;
17
+ createUpstreamPr(cwd: string, title: string, body: string, head: string, base: string): Promise<UpstreamPrResult>;
18
+ getUpstreamPrStatus(upstreamRepo: string, prNumber: number): Promise<PrStatus>;
19
+ /**
20
+ * Extract owner/repo from a git remote URL.
21
+ * Handles both HTTPS and SSH formats.
22
+ */
23
+ private extractRepoFromUrl;
24
+ }
25
+ //# sourceMappingURL=git-fork.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-fork.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-fork.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0EAA0E,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0EAA0E,CAAC;AAKjH,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,cAAe,YAAW,eAAe;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C1C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatD,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC;IAiDtB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBpF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAU3B"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Git Fork Service Implementation
3
+ *
4
+ * Manages GitHub fork operations: forking repos, pushing to forks,
5
+ * creating upstream PRs, and polling upstream PR status.
6
+ * Uses `gh` CLI for all GitHub API interactions.
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
+ };
17
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
+ return function (target, key) { decorator(target, key, paramIndex); }
19
+ };
20
+ import { injectable, inject } from 'tsyringe';
21
+ import { GitForkError, GitForkErrorCode, } from '../../../application/ports/output/services/git-fork-service.interface.js';
22
+ import { PrStatus } from '../../../domain/generated/output.js';
23
+ let GitForkService = class GitForkService {
24
+ execFile;
25
+ constructor(execFile) {
26
+ this.execFile = execFile;
27
+ }
28
+ async forkRepository(cwd) {
29
+ // Check if origin is already a fork — if so, just ensure upstream remote exists
30
+ try {
31
+ const { stdout } = await this.execFile('gh', ['repo', 'view', '--json', 'isFork,parent'], {
32
+ cwd,
33
+ });
34
+ const repoInfo = JSON.parse(stdout);
35
+ if (repoInfo.isFork && repoInfo.parent) {
36
+ // Origin is already a fork — ensure upstream remote points to parent
37
+ const parentUrl = `https://github.com/${repoInfo.parent.owner.login}/${repoInfo.parent.name}.git`;
38
+ try {
39
+ await this.execFile('git', ['remote', 'add', 'upstream', parentUrl], { cwd });
40
+ }
41
+ catch {
42
+ // Remote may already exist — update it
43
+ await this.execFile('git', ['remote', 'set-url', 'upstream', parentUrl], { cwd });
44
+ }
45
+ return;
46
+ }
47
+ }
48
+ catch {
49
+ // gh repo view failed — could be auth issue or not a GitHub repo
50
+ }
51
+ // Fork the repository: gh repo fork --remote remaps origin to fork, adds upstream
52
+ try {
53
+ await this.execFile('gh', ['repo', 'fork', '--remote', '--remote-name', 'origin'], { cwd });
54
+ }
55
+ catch (err) {
56
+ const message = err instanceof Error ? err.message : String(err);
57
+ if (message.includes('auth') || message.includes('login')) {
58
+ throw new GitForkError('GitHub authentication required to fork', GitForkErrorCode.AUTH_FAILURE, err instanceof Error ? err : undefined);
59
+ }
60
+ throw new GitForkError(`Failed to fork repository: ${message}`, GitForkErrorCode.FORK_FAILED, err instanceof Error ? err : undefined);
61
+ }
62
+ }
63
+ async pushToFork(cwd, branch) {
64
+ try {
65
+ await this.execFile('git', ['push', '-u', 'origin', branch], { cwd });
66
+ }
67
+ catch (err) {
68
+ const message = err instanceof Error ? err.message : String(err);
69
+ throw new GitForkError(`Failed to push to fork: ${message}`, GitForkErrorCode.PUSH_FAILED, err instanceof Error ? err : undefined);
70
+ }
71
+ }
72
+ async createUpstreamPr(cwd, title, body, head, base) {
73
+ try {
74
+ // Get the upstream repo identifier
75
+ const { stdout: upstreamUrl } = await this.execFile('git', ['remote', 'get-url', 'upstream'], { cwd });
76
+ const upstreamRepo = this.extractRepoFromUrl(upstreamUrl.trim());
77
+ // Get the fork owner for the head ref (owner:branch format)
78
+ const { stdout: forkUrl } = await this.execFile('git', ['remote', 'get-url', 'origin'], {
79
+ cwd,
80
+ });
81
+ const forkRepo = this.extractRepoFromUrl(forkUrl.trim());
82
+ const forkOwner = forkRepo.split('/')[0];
83
+ const { stdout } = await this.execFile('gh', [
84
+ 'pr',
85
+ 'create',
86
+ '--repo',
87
+ upstreamRepo,
88
+ '--title',
89
+ title,
90
+ '--body',
91
+ body,
92
+ '--head',
93
+ `${forkOwner}:${head}`,
94
+ '--base',
95
+ base,
96
+ '--json',
97
+ 'url,number',
98
+ ], { cwd });
99
+ const result = JSON.parse(stdout);
100
+ return { url: result.url, number: result.number };
101
+ }
102
+ catch (err) {
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ throw new GitForkError(`Failed to create upstream PR: ${message}`, GitForkErrorCode.PR_CREATE_FAILED, err instanceof Error ? err : undefined);
105
+ }
106
+ }
107
+ async getUpstreamPrStatus(upstreamRepo, prNumber) {
108
+ try {
109
+ const { stdout } = await this.execFile('gh', ['pr', 'view', String(prNumber), '--repo', upstreamRepo, '--json', 'state'], {});
110
+ const result = JSON.parse(stdout);
111
+ const state = (result.state ?? '').toUpperCase();
112
+ if (state === 'MERGED')
113
+ return PrStatus.Merged;
114
+ if (state === 'CLOSED')
115
+ return PrStatus.Closed;
116
+ return PrStatus.Open;
117
+ }
118
+ catch (err) {
119
+ const message = err instanceof Error ? err.message : String(err);
120
+ throw new GitForkError(`Failed to get upstream PR status: ${message}`, GitForkErrorCode.PR_STATUS_FAILED, err instanceof Error ? err : undefined);
121
+ }
122
+ }
123
+ /**
124
+ * Extract owner/repo from a git remote URL.
125
+ * Handles both HTTPS and SSH formats.
126
+ */
127
+ extractRepoFromUrl(url) {
128
+ // SSH: git@github.com:owner/repo.git
129
+ const sshMatch = url.match(/git@[^:]+:([^/]+\/[^/.]+)/);
130
+ if (sshMatch)
131
+ return sshMatch[1];
132
+ // HTTPS: https://github.com/owner/repo.git
133
+ const httpsMatch = url.match(/github\.com\/([^/]+\/[^/.]+)/);
134
+ if (httpsMatch)
135
+ return httpsMatch[1];
136
+ // Strip .git suffix and return as-is
137
+ return url.replace(/\.git$/, '');
138
+ }
139
+ };
140
+ GitForkService = __decorate([
141
+ injectable(),
142
+ __param(0, inject('ExecFunction')),
143
+ __metadata("design:paramtypes", [Function])
144
+ ], GitForkService);
145
+ export { GitForkService };
@@ -2,7 +2,8 @@
2
2
  * PR Sync Watcher Service
3
3
  *
4
4
  * Polls GitHub PR status and CI status for features in the Review lifecycle
5
- * stage, updating feature records and emitting notifications when transitions
5
+ * stage, and upstream PR status for features in the AwaitingUpstream stage,
6
+ * updating feature records and emitting notifications when transitions
6
7
  * are detected. Follows the NotificationWatcherService polling pattern.
7
8
  *
8
9
  * Maintains in-memory tracking of last-known PR and CI status per feature
@@ -13,12 +14,14 @@ import type { IFeatureRepository } from '../../../application/ports/output/repos
13
14
  import type { IAgentRunRepository } from '../../../application/ports/output/agents/agent-run-repository.interface.js';
14
15
  import type { IGitPrService } from '../../../application/ports/output/services/git-pr-service.interface.js';
15
16
  import type { INotificationService } from '../../../application/ports/output/services/notification-service.interface.js';
17
+ import type { IGitForkService } from '../../../application/ports/output/services/git-fork-service.interface.js';
16
18
  import type Database from 'better-sqlite3';
17
19
  export declare class PrSyncWatcherService {
18
20
  private readonly featureRepo;
19
21
  private readonly agentRunRepo;
20
22
  private readonly gitPrService;
21
23
  private readonly notificationService;
24
+ private readonly gitForkService;
22
25
  private readonly pollIntervalMs;
23
26
  private readonly trackedFeatures;
24
27
  private readonly skippedRepos;
@@ -27,7 +30,7 @@ export declare class PrSyncWatcherService {
27
30
  private readonly processId;
28
31
  private intervalId;
29
32
  private pollCycle;
30
- constructor(featureRepo: IFeatureRepository, agentRunRepo: IAgentRunRepository, gitPrService: IGitPrService, notificationService: INotificationService, pollIntervalMs?: number, db?: Database.Database | null);
33
+ constructor(featureRepo: IFeatureRepository, agentRunRepo: IAgentRunRepository, gitPrService: IGitPrService, notificationService: INotificationService, pollIntervalMs?: number, db?: Database.Database | null, gitForkService?: IGitForkService | null);
31
34
  isRunning(): boolean;
32
35
  start(): void;
33
36
  stop(): void;
@@ -40,6 +43,17 @@ export declare class PrSyncWatcherService {
40
43
  private handleRateLimitError;
41
44
  private processRepository;
42
45
  private processFeature;
46
+ /**
47
+ * Extract upstream repo (owner/name) from an upstream PR URL.
48
+ * Expected format: https://github.com/owner/repo/pull/123
49
+ */
50
+ private extractUpstreamRepo;
51
+ /**
52
+ * Poll upstream PR status for a feature in AwaitingUpstream lifecycle.
53
+ * If the upstream PR is merged, transition to Maintain.
54
+ * If the upstream PR is closed, update upstreamPrStatus to Closed.
55
+ */
56
+ private processAwaitingUpstreamFeature;
43
57
  /** Mark associated agent run as completed so the UI reflects "done" state. */
44
58
  private completeAgentRun;
45
59
  private emitNotification;
@@ -50,7 +64,7 @@ export declare class PrSyncWatcherService {
50
64
  *
51
65
  * @throws Error if the watcher is already initialized
52
66
  */
53
- export declare function initializePrSyncWatcher(featureRepo: IFeatureRepository, agentRunRepo: IAgentRunRepository, gitPrService: IGitPrService, notificationService: INotificationService, pollIntervalMs?: number, db?: Database.Database | null): void;
67
+ export declare function initializePrSyncWatcher(featureRepo: IFeatureRepository, agentRunRepo: IAgentRunRepository, gitPrService: IGitPrService, notificationService: INotificationService, pollIntervalMs?: number, db?: Database.Database | null, gitForkService?: IGitForkService | null): void;
54
68
  /**
55
69
  * Get the PR sync watcher singleton.
56
70
  *
@@ -1 +1 @@
1
- {"version":3,"file":"pr-sync-watcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4EAA4E,CAAC;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAK5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AACzH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAK;gBAGpB,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,GAAE,MAAiC,EACjD,EAAE,GAAE,QAAQ,CAAC,QAAQ,GAAG,IAAW;IAWrC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IASZ,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAiBtB,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;YAUX,IAAI;IA6ClB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,oBAAoB;YAYd,iBAAiB;YA+CjB,cAAc;IAkM5B,8EAA8E;YAChE,gBAAgB;IAW9B,OAAO,CAAC,gBAAgB;CAoBzB;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,CAAC,EAAE,MAAM,EACvB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAC5B,IAAI,CAaN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
1
+ {"version":3,"file":"pr-sync-watcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4EAA4E,CAAC;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAK5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8EAA8E,CAAC;AACzH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0EAA0E,CAAC;AAChH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAK;gBAGpB,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,GAAE,MAAiC,EACjD,EAAE,GAAE,QAAQ,CAAC,QAAQ,GAAG,IAAW,EACnC,cAAc,GAAE,eAAe,GAAG,IAAW;IAY/C,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IASZ,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAiBtB,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;YAUX,IAAI;IAmDlB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,oBAAoB;YAYd,iBAAiB;YA+CjB,cAAc;IAkM5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;OAIG;YACW,8BAA8B;IA0F5C,8EAA8E;YAChE,gBAAgB;IAW9B,OAAO,CAAC,gBAAgB;CAoBzB;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,aAAa,EAC3B,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,CAAC,EAAE,MAAM,EACvB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAC7B,cAAc,CAAC,EAAE,eAAe,GAAG,IAAI,GACtC,IAAI,CAcN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}