@shepai/cli 1.116.3 → 1.117.0-pr376.0b9d7e1

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 (327) hide show
  1. package/apis/json-schema/AnalyzeRepoTimeouts.yaml +10 -0
  2. package/apis/json-schema/EnvironmentConfig.yaml +5 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/apis/json-schema/StageTimeouts.yaml +35 -0
  5. package/apis/json-schema/TerminalType.yaml +10 -0
  6. package/apis/json-schema/WorkflowConfig.yaml +6 -0
  7. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +17 -8
  9. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  10. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts +25 -0
  12. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +116 -0
  14. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  15. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +7 -1
  16. package/dist/packages/core/src/domain/generated/output.d.ts +58 -0
  17. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  18. package/dist/packages/core/src/domain/generated/output.js +9 -0
  19. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +3 -0
  20. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  21. package/dist/packages/core/src/domain/lifecycle-gates.js +3 -0
  22. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +8 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +46 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts +22 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts.map +1 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.js +53 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts +11 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts.map +1 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.js +13 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +15 -6
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +18 -2
  37. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +15 -0
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +42 -3
  42. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +5 -0
  43. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +7 -0
  45. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/system-terminal.json +24 -0
  46. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  47. package/dist/src/presentation/cli/commands/feat/index.js +2 -0
  48. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  49. package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -0
  50. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  51. package/dist/src/presentation/cli/commands/feat/new.command.js +9 -1
  52. package/dist/src/presentation/cli/commands/feat/start.command.d.ts +12 -0
  53. package/dist/src/presentation/cli/commands/feat/start.command.d.ts.map +1 -0
  54. package/dist/src/presentation/cli/commands/feat/start.command.js +43 -0
  55. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  56. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  57. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  58. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts +12 -0
  59. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts.map +1 -0
  60. package/dist/src/presentation/web/app/actions/get-available-terminals.js +53 -0
  61. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  62. package/dist/src/presentation/web/app/actions/open-shell.js +47 -3
  63. package/dist/src/presentation/web/app/actions/start-feature.d.ts +5 -0
  64. package/dist/src/presentation/web/app/actions/start-feature.d.ts.map +1 -0
  65. package/dist/src/presentation/web/app/actions/start-feature.js +16 -0
  66. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  68. package/dist/src/presentation/web/app/settings/page.d.ts.map +1 -1
  69. package/dist/src/presentation/web/app/settings/page.js +6 -2
  70. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  71. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +1 -1
  72. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +20 -1
  74. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  75. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +6 -2
  77. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
  79. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -2
  80. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +13 -1
  82. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +12 -3
  84. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +2 -0
  85. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  86. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +36 -2
  87. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -1
  89. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  90. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -0
  92. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +3 -1
  93. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +32 -5
  95. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +2 -0
  96. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +34 -1
  98. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +3 -1
  99. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +120 -15
  101. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -0
  102. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +23 -0
  104. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts +11 -0
  105. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts.map +1 -0
  106. package/dist/src/presentation/web/components/features/settings/timeout-slider.js +63 -0
  107. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +10 -0
  108. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -0
  109. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.js +24 -0
  110. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +97 -2
  112. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +22 -0
  114. package/dist/src/presentation/web/components/ui/slider.d.ts +5 -0
  115. package/dist/src/presentation/web/components/ui/slider.d.ts.map +1 -0
  116. package/dist/src/presentation/web/components/ui/slider.js +10 -0
  117. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +7 -0
  118. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -0
  119. package/dist/src/presentation/web/components/ui/slider.stories.js +15 -0
  120. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  121. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -0
  122. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  123. package/dist/src/presentation/web/hooks/use-graph-state.js +1 -0
  124. package/dist/src/presentation/web/lib/derive-graph.d.ts +2 -0
  125. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  126. package/dist/src/presentation/web/lib/derive-graph.js +5 -0
  127. package/dist/tsconfig.build.tsbuildinfo +1 -1
  128. package/package.json +1 -1
  129. package/web/.next/BUILD_ID +1 -1
  130. package/web/.next/build-manifest.json +2 -2
  131. package/web/.next/fallback-build-manifest.json +2 -2
  132. package/web/.next/prerender-manifest.json +3 -3
  133. package/web/.next/required-server-files.js +3 -3
  134. package/web/.next/required-server-files.json +3 -3
  135. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +55 -40
  136. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  137. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  138. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  140. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  141. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +67 -52
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  148. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +55 -40
  152. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  153. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  156. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  157. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  158. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  159. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +67 -52
  160. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +51 -36
  164. package/web/.next/server/app/(dashboard)/page.js +3 -3
  165. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  168. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  169. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  170. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app/_global-error/page.js +1 -1
  172. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  173. package/web/.next/server/app/_global-error.html +2 -2
  174. package/web/.next/server/app/_global-error.rsc +1 -1
  175. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  176. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  177. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  178. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  179. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  180. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  181. package/web/.next/server/app/_not-found/page.js +2 -2
  182. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  183. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  185. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  186. package/web/.next/server/app/settings/page/server-reference-manifest.json +25 -10
  187. package/web/.next/server/app/settings/page.js +3 -3
  188. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  189. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  190. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  191. package/web/.next/server/app/skills/page.js +2 -2
  192. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  193. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  195. package/web/.next/server/app/tools/page.js +2 -2
  196. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  197. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  199. package/web/.next/server/app/version/page.js +2 -2
  200. package/web/.next/server/app/version/page.js.nft.json +1 -1
  201. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  203. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  204. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  205. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  206. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +1 -1
  207. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
  208. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  209. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  210. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  212. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +3 -0
  214. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +3 -0
  216. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  218. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js → [root-of-the-server]__2dddfea9._.js} +2 -2
  219. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js.map → [root-of-the-server]__2dddfea9._.js.map} +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js +4 -0
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js → [root-of-the-server]__3155add4._.js} +2 -2
  223. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js.map → [root-of-the-server]__3155add4._.js.map} +1 -1
  224. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js → [root-of-the-server]__4c7486cb._.js} +2 -2
  225. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js.map → [root-of-the-server]__4c7486cb._.js.map} +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  229. package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +4 -0
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js +4 -0
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js.map +1 -0
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  237. package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/{[root-of-the-server]__89e8a5cc._.js → [root-of-the-server]__8763fd7a._.js} +3 -3
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__8763fd7a._.js.map +1 -0
  240. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js → [root-of-the-server]__9c56d724._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js.map → [root-of-the-server]__9c56d724._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js → [root-of-the-server]__cfc116d5._.js} +2 -2
  243. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js.map → [root-of-the-server]__cfc116d5._.js.map} +1 -1
  244. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js → [root-of-the-server]__d3841d9e._.js} +2 -2
  245. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js.map → [root-of-the-server]__d3841d9e._.js.map} +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__db9afe04._.js +3 -0
  247. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1e68e34._.js.map → [root-of-the-server]__db9afe04._.js.map} +1 -1
  248. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  249. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  250. package/web/.next/server/chunks/ssr/_1bb131c4._.js +1 -1
  251. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -1
  252. package/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/_2eea2048._.js +3 -0
  255. package/web/.next/server/chunks/ssr/{_c5f84841._.js.map → _2eea2048._.js.map} +1 -1
  256. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js → _2f6f48b8._.js} +2 -2
  257. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js.map → _2f6f48b8._.js.map} +1 -1
  258. package/web/.next/server/chunks/ssr/{_6f0118a0._.js → _3d260002._.js} +2 -2
  259. package/web/.next/server/chunks/ssr/_3d260002._.js.map +1 -0
  260. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  261. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_f5a1a9b8._.js +3 -0
  263. package/web/.next/server/chunks/ssr/_f5a1a9b8._.js.map +1 -0
  264. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  265. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +5 -0
  267. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +3 -0
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -0
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +5 -0
  279. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -0
  280. package/web/.next/server/pages/500.html +2 -2
  281. package/web/.next/server/server-reference-manifest.js +1 -1
  282. package/web/.next/server/server-reference-manifest.json +320 -234
  283. package/web/.next/static/chunks/{18de73b2f14204d3.js → 09528d327a2bb15a.js} +1 -1
  284. package/web/.next/static/chunks/{e12f41ac3d49a7b5.js → 261a4f0c60d9e4ba.js} +1 -1
  285. package/web/.next/static/chunks/304a3dced97f4f68.js +2 -0
  286. package/web/.next/static/chunks/62a8173911f8f130.css +1 -0
  287. package/web/.next/static/chunks/{52285fdb39925ad5.js → 6a2f770718cd585d.js} +1 -1
  288. package/web/.next/static/chunks/{5de387864b89e64c.js → 8748274a8d9400da.js} +2 -2
  289. package/web/.next/static/chunks/a6d2916a7b4b2633.js +1 -0
  290. package/web/.next/static/chunks/bba38aefe51cfdfc.js +1 -0
  291. package/web/.next/static/chunks/bf6bd3385f65bed8.js +1 -0
  292. package/web/.next/static/chunks/{2babc8e3ae9ba6e8.js → c039476485c8b4e8.js} +1 -1
  293. package/web/.next/static/chunks/d363520c26e1cd08.js +1 -0
  294. package/web/.next/static/chunks/{fcde0cbb2976b933.js → e2ef95d904c360f3.js} +1 -1
  295. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +0 -3
  296. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +0 -1
  297. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +0 -3
  298. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +0 -1
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +0 -4
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +0 -1
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +0 -4
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +0 -1
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +0 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -4
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
  309. package/web/.next/server/chunks/ssr/_6f0118a0._.js.map +0 -1
  310. package/web/.next/server/chunks/ssr/_c5f84841._.js +0 -3
  311. package/web/.next/server/chunks/ssr/_d2e408a9._.js +0 -3
  312. package/web/.next/server/chunks/ssr/_d2e408a9._.js.map +0 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +0 -3
  314. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +0 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +0 -5
  316. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +0 -1
  317. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +0 -5
  318. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +0 -1
  319. package/web/.next/static/chunks/0b3ab176958a8286.js +0 -1
  320. package/web/.next/static/chunks/242446982e8d196e.js +0 -1
  321. package/web/.next/static/chunks/552e0f129144b54d.js +0 -1
  322. package/web/.next/static/chunks/57b45edf86522369.css +0 -1
  323. package/web/.next/static/chunks/7b924c47dd2a5a53.js +0 -2
  324. package/web/.next/static/chunks/c172f4a6010cb5b5.js +0 -1
  325. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_buildManifest.js +0 -0
  326. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_clientMiddlewareManifest.json +0 -0
  327. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_ssgManifest.js +0 -0
@@ -29,6 +29,7 @@ export interface SettingsRow {
29
29
  user_github_username: string | null;
30
30
  env_default_editor: string;
31
31
  env_shell_preference: string;
32
+ env_terminal_preference: string;
32
33
  sys_auto_update: number;
33
34
  sys_log_level: string;
34
35
  agent_type: string;
@@ -52,6 +53,13 @@ export interface SettingsRow {
52
53
  ci_max_fix_attempts: number | null;
53
54
  ci_watch_timeout_ms: number | null;
54
55
  ci_log_max_chars: number | null;
56
+ stage_timeout_analyze_ms: number | null;
57
+ stage_timeout_requirements_ms: number | null;
58
+ stage_timeout_research_ms: number | null;
59
+ stage_timeout_plan_ms: number | null;
60
+ stage_timeout_implement_ms: number | null;
61
+ stage_timeout_merge_ms: number | null;
62
+ analyze_repo_timeout_analyze_ms: number | null;
55
63
  onboarding_complete: number;
56
64
  approval_gate_allow_prd: number;
57
65
  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;AAQvE;;;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;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAGhC,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,CA2F1D;AAsCD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAuFvD"}
@@ -36,6 +36,7 @@ export function toDatabase(settings) {
36
36
  // EnvironmentConfig
37
37
  env_default_editor: settings.environment.defaultEditor,
38
38
  env_shell_preference: settings.environment.shellPreference,
39
+ env_terminal_preference: settings.environment.terminalPreference,
39
40
  // SystemConfig
40
41
  sys_auto_update: settings.system.autoUpdate ? 1 : 0,
41
42
  sys_log_level: settings.system.logLevel,
@@ -64,6 +65,15 @@ export function toDatabase(settings) {
64
65
  ci_max_fix_attempts: settings.workflow.ciMaxFixAttempts ?? null,
65
66
  ci_watch_timeout_ms: settings.workflow.ciWatchTimeoutMs ?? null,
66
67
  ci_log_max_chars: settings.workflow.ciLogMaxChars ?? null,
68
+ // WorkflowConfig per-stage timeouts (optional number → INTEGER | null)
69
+ stage_timeout_analyze_ms: settings.workflow.stageTimeouts?.analyzeMs ?? null,
70
+ stage_timeout_requirements_ms: settings.workflow.stageTimeouts?.requirementsMs ?? null,
71
+ stage_timeout_research_ms: settings.workflow.stageTimeouts?.researchMs ?? null,
72
+ stage_timeout_plan_ms: settings.workflow.stageTimeouts?.planMs ?? null,
73
+ stage_timeout_implement_ms: settings.workflow.stageTimeouts?.implementMs ?? null,
74
+ stage_timeout_merge_ms: settings.workflow.stageTimeouts?.mergeMs ?? null,
75
+ // WorkflowConfig analyze-repo timeouts (optional number → INTEGER | null)
76
+ analyze_repo_timeout_analyze_ms: settings.workflow.analyzeRepoTimeouts?.analyzeMs ?? null,
67
77
  // WorkflowConfig evidence settings (boolean → INTEGER)
68
78
  workflow_enable_evidence: settings.workflow.enableEvidence ? 1 : 0,
69
79
  workflow_commit_evidence: settings.workflow.commitEvidence ? 1 : 0,
@@ -83,6 +93,39 @@ export function toDatabase(settings) {
83
93
  feature_flag_debug: settings.featureFlags?.debug ? 1 : 0,
84
94
  };
85
95
  }
96
+ /**
97
+ * Build the stageTimeouts spread from DB row columns.
98
+ * Returns `{ stageTimeouts: { ... } }` when at least one column is non-null,
99
+ * or an empty object `{}` when all are null (so the field stays undefined).
100
+ */
101
+ function buildStageTimeoutsFromRow(row) {
102
+ const entries = [];
103
+ if (row.stage_timeout_analyze_ms !== null)
104
+ entries.push(['analyzeMs', row.stage_timeout_analyze_ms]);
105
+ if (row.stage_timeout_requirements_ms !== null)
106
+ entries.push(['requirementsMs', row.stage_timeout_requirements_ms]);
107
+ if (row.stage_timeout_research_ms !== null)
108
+ entries.push(['researchMs', row.stage_timeout_research_ms]);
109
+ if (row.stage_timeout_plan_ms !== null)
110
+ entries.push(['planMs', row.stage_timeout_plan_ms]);
111
+ if (row.stage_timeout_implement_ms !== null)
112
+ entries.push(['implementMs', row.stage_timeout_implement_ms]);
113
+ if (row.stage_timeout_merge_ms !== null)
114
+ entries.push(['mergeMs', row.stage_timeout_merge_ms]);
115
+ if (entries.length === 0)
116
+ return {};
117
+ return { stageTimeouts: Object.fromEntries(entries) };
118
+ }
119
+ /**
120
+ * Build the analyzeRepoTimeouts spread from DB row columns.
121
+ * Returns `{ analyzeRepoTimeouts: { ... } }` when the column is non-null,
122
+ * or an empty object `{}` when null (so the field stays undefined).
123
+ */
124
+ function buildAnalyzeRepoTimeoutsFromRow(row) {
125
+ if (row.analyze_repo_timeout_analyze_ms === null)
126
+ return {};
127
+ return { analyzeRepoTimeouts: { analyzeMs: row.analyze_repo_timeout_analyze_ms } };
128
+ }
86
129
  /**
87
130
  * Maps database row to Settings domain object.
88
131
  * Reconstructs nested objects and converts types from SQL.
@@ -110,6 +153,7 @@ export function fromDatabase(row) {
110
153
  environment: {
111
154
  defaultEditor: row.env_default_editor,
112
155
  shellPreference: row.env_shell_preference,
156
+ terminalPreference: (row.env_terminal_preference ?? 'system'),
113
157
  },
114
158
  // SystemConfig (INTEGER → boolean)
115
159
  system: {
@@ -153,6 +197,8 @@ export function fromDatabase(row) {
153
197
  ...(row.ci_max_fix_attempts !== null && { ciMaxFixAttempts: row.ci_max_fix_attempts }),
154
198
  ...(row.ci_watch_timeout_ms !== null && { ciWatchTimeoutMs: row.ci_watch_timeout_ms }),
155
199
  ...(row.ci_log_max_chars !== null && { ciLogMaxChars: row.ci_log_max_chars }),
200
+ ...buildStageTimeoutsFromRow(row),
201
+ ...buildAnalyzeRepoTimeoutsFromRow(row),
156
202
  enableEvidence: row.workflow_enable_evidence === 1,
157
203
  commitEvidence: row.workflow_commit_evidence === 1,
158
204
  },
@@ -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
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Migration 035: Add terminal preference to settings.
3
+ *
4
+ * Adds the env_terminal_preference column to the settings table.
5
+ * Defaults to 'system' (OS default terminal).
6
+ */
7
+ import type { MigrationParams } from 'umzug';
8
+ import type Database from 'better-sqlite3';
9
+ export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
10
+ export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
11
+ //# sourceMappingURL=036-add-terminal-preference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"036-add-terminal-preference.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F"}
@@ -0,0 +1,13 @@
1
+ export async function up({ context: db }) {
2
+ const columns = db.pragma('table_info(settings)');
3
+ if (!columns.some((c) => c.name === 'env_terminal_preference')) {
4
+ db.exec("ALTER TABLE settings ADD COLUMN env_terminal_preference TEXT NOT NULL DEFAULT 'system'");
5
+ }
6
+ }
7
+ export async function down({ context: db }) {
8
+ // SQLite does not support DROP COLUMN before version 3.35.0.
9
+ // For safety we recreate the table without the column.
10
+ // However, since this is a simple addition and we guard with IF NOT EXISTS
11
+ // in `up`, a no-op down is acceptable for this migration.
12
+ void db;
13
+ }
@@ -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
@@ -51,8 +60,8 @@ async function discoverNewMigrations(migrationsDir) {
51
60
  }
52
61
  const migrations = [];
53
62
  for (const file of files) {
63
+ const name = file.replace(/\.(js|ts)$/, '');
54
64
  const filePath = join(migrationsDir, file);
55
- const name = file.replace(/\.js$/, '');
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;CA6EhD"}
@@ -46,7 +46,7 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
46
46
  id, created_at, updated_at,
47
47
  model_analyze, model_requirements, model_plan, model_implement, model_default,
48
48
  user_name, user_email, user_github_username,
49
- env_default_editor, env_shell_preference,
49
+ env_default_editor, env_shell_preference, env_terminal_preference,
50
50
  sys_auto_update, sys_log_level,
51
51
  agent_type, agent_auth_method, agent_token,
52
52
  notif_in_app_enabled, notif_browser_enabled, notif_desktop_enabled,
@@ -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,
@@ -66,7 +70,7 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
66
70
  @id, @created_at, @updated_at,
67
71
  @model_analyze, @model_requirements, @model_plan, @model_implement, @model_default,
68
72
  @user_name, @user_email, @user_github_username,
69
- @env_default_editor, @env_shell_preference,
73
+ @env_default_editor, @env_shell_preference, @env_terminal_preference,
70
74
  @sys_auto_update, @sys_log_level,
71
75
  @agent_type, @agent_auth_method, @agent_token,
72
76
  @notif_in_app_enabled, @notif_browser_enabled, @notif_desktop_enabled,
@@ -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,
@@ -133,6 +141,7 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
133
141
  user_github_username = @user_github_username,
134
142
  env_default_editor = @env_default_editor,
135
143
  env_shell_preference = @env_shell_preference,
144
+ env_terminal_preference = @env_terminal_preference,
136
145
  sys_auto_update = @sys_auto_update,
137
146
  sys_log_level = @sys_log_level,
138
147
  agent_type = @agent_type,
@@ -156,6 +165,13 @@ let SQLiteSettingsRepository = class SQLiteSettingsRepository {
156
165
  ci_max_fix_attempts = @ci_max_fix_attempts,
157
166
  ci_watch_timeout_ms = @ci_watch_timeout_ms,
158
167
  ci_log_max_chars = @ci_log_max_chars,
168
+ stage_timeout_analyze_ms = @stage_timeout_analyze_ms,
169
+ stage_timeout_requirements_ms = @stage_timeout_requirements_ms,
170
+ stage_timeout_research_ms = @stage_timeout_research_ms,
171
+ stage_timeout_plan_ms = @stage_timeout_plan_ms,
172
+ stage_timeout_implement_ms = @stage_timeout_implement_ms,
173
+ stage_timeout_merge_ms = @stage_timeout_merge_ms,
174
+ analyze_repo_timeout_analyze_ms = @analyze_repo_timeout_analyze_ms,
159
175
  onboarding_complete = @onboarding_complete,
160
176
  approval_gate_allow_prd = @approval_gate_allow_prd,
161
177
  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);
@@ -66,4 +66,9 @@ export declare const TOOL_METADATA: Record<string, ToolMetadata>;
66
66
  * Each entry is [toolId, metadata].
67
67
  */
68
68
  export declare function getIdeEntries(): [string, ToolMetadata][];
69
+ /**
70
+ * Returns entries from TOOL_METADATA tagged as "terminal" that have an
71
+ * `openDirectory` field. Each entry is [toolId, metadata].
72
+ */
73
+ export declare function getTerminalEntries(): [string, ToolMetadata][];
69
74
  //# sourceMappingURL=tool-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
1
+ {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAI7D"}
@@ -63,3 +63,10 @@ export const TOOL_METADATA = loadToolMetadata();
63
63
  export function getIdeEntries() {
64
64
  return Object.entries(TOOL_METADATA).filter(([, meta]) => meta.openDirectory != null);
65
65
  }
66
+ /**
67
+ * Returns entries from TOOL_METADATA tagged as "terminal" that have an
68
+ * `openDirectory` field. Each entry is [toolId, metadata].
69
+ */
70
+ export function getTerminalEntries() {
71
+ return Object.entries(TOOL_METADATA).filter(([, meta]) => meta.tags.includes('terminal') && meta.openDirectory != null);
72
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "System Terminal",
3
+ "summary": "OS default terminal emulator",
4
+ "description": "The default terminal emulator for your operating system: Terminal.app on macOS, x-terminal-emulator on Linux, and PowerShell on Windows.",
5
+ "tags": ["terminal"],
6
+ "author": "System",
7
+ "platforms": ["linux", "darwin", "win32"],
8
+ "binary": {
9
+ "darwin": "open",
10
+ "linux": "x-terminal-emulator",
11
+ "win32": "powershell"
12
+ },
13
+ "packageManager": "system",
14
+ "commands": {},
15
+ "timeout": 5000,
16
+ "documentationUrl": "https://support.apple.com/guide/terminal/welcome/mac",
17
+ "verifyCommand": "true",
18
+ "autoInstall": false,
19
+ "openDirectory": {
20
+ "darwin": "open -a Terminal {dir}",
21
+ "linux": "x-terminal-emulator --working-directory={dir}",
22
+ "win32": "powershell -NoExit -Command \"Set-Location \\\"{dir}\\\"\""
23
+ }
24
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C"}
@@ -15,6 +15,7 @@ import { createLsCommand } from './ls.command.js';
15
15
  import { createShowCommand } from './show.command.js';
16
16
  import { createDelCommand } from './del.command.js';
17
17
  import { createResumeCommand } from './resume.command.js';
18
+ import { createStartCommand } from './start.command.js';
18
19
  import { createReviewCommand } from './review.command.js';
19
20
  import { createApproveCommand } from './approve.command.js';
20
21
  import { createRejectCommand } from './reject.command.js';
@@ -30,6 +31,7 @@ export function createFeatCommand() {
30
31
  .addCommand(createShowCommand())
31
32
  .addCommand(createDelCommand())
32
33
  .addCommand(createResumeCommand())
34
+ .addCommand(createStartCommand())
33
35
  .addCommand(createReviewCommand())
34
36
  .addCommand(createApproveCommand())
35
37
  .addCommand(createRejectCommand())
@@ -1 +1 @@
1
- {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyKpC,wBAAgB,eAAe,IAAI,OAAO,CAsGzC"}
1
+ {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6KpC,wBAAgB,eAAe,IAAI,OAAO,CAsGzC"}
@@ -54,6 +54,9 @@ function formatStatus(feature, run) {
54
54
  if (feature.lifecycle === 'Blocked') {
55
55
  return `${colors.warning(symbols.dotEmpty)} ${colors.warning('Blocked')}`;
56
56
  }
57
+ if (feature.lifecycle === 'Pending') {
58
+ return `${colors.muted(symbols.dotEmpty)} ${colors.muted('Pending')}`;
59
+ }
57
60
  if (!run) {
58
61
  return `${colors.muted(symbols.dotEmpty)} ${colors.muted(feature.lifecycle)}`;
59
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAwI1C"}
1
+ {"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAmJ1C"}