@shipit-ai/cli 1.166.2 → 1.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/README.md +26 -5
  2. package/apis/json-schema/AgentConfig.yaml +3 -0
  3. package/apis/json-schema/AgentPermissionSettings.yaml +23 -0
  4. package/apis/json-schema/AgentType.yaml +0 -1
  5. package/apis/json-schema/ClaudeCodePermissionMode.yaml +9 -0
  6. package/apis/json-schema/CodexPermissionMode.yaml +8 -0
  7. package/apis/json-schema/CopilotPermissionMode.yaml +8 -0
  8. package/apis/json-schema/CursorPermissionMode.yaml +7 -0
  9. package/apis/json-schema/Feature.yaml +3 -0
  10. package/apis/json-schema/GeminiPermissionMode.yaml +8 -0
  11. package/apis/json-schema/RovoDevPermissionMode.yaml +8 -0
  12. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +8 -0
  13. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
  15. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  16. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +3 -0
  17. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  19. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  20. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts +13 -0
  21. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.js +1 -0
  23. package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.d.ts.map +1 -1
  24. package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.js +4 -6
  25. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
  26. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +1 -0
  27. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  28. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +2 -0
  29. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  30. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  31. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  32. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +1 -0
  33. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  34. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +1 -0
  35. package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.d.ts +2 -0
  36. package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.d.ts.map +1 -1
  37. package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.js +23 -0
  38. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  39. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +9 -1
  40. package/dist/packages/core/src/domain/generated/output.d.ts +68 -2
  41. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  42. package/dist/packages/core/src/domain/generated/output.js +36 -1
  43. package/dist/packages/core/src/infrastructure/di/modules/agents.module.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/di/modules/agents.module.js +4 -2
  45. package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/di/modules/services.module.js +2 -0
  47. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -0
  48. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  49. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -0
  50. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +6 -0
  51. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +31 -0
  53. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.d.ts +21 -0
  54. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.d.ts.map +1 -0
  55. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.js +35 -0
  56. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.d.ts +14 -0
  57. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.d.ts.map +1 -0
  58. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.js +19 -0
  59. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts +3 -1
  60. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +18 -7
  62. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +1 -1
  63. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  64. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +1 -6
  65. package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.d.ts +21 -0
  66. package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.d.ts.map +1 -0
  67. package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.js +49 -0
  68. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts +3 -1
  69. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
  70. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +4 -3
  71. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
  72. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +0 -3
  73. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  74. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +11 -0
  75. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
  76. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +1 -1
  77. package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts.map +1 -1
  78. package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.js +4 -1
  79. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -1
  80. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +11 -4
  81. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
  82. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +11 -1
  83. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
  84. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +2 -1
  85. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +1 -1
  86. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +11 -4
  87. package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.d.ts +3 -1
  88. package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.d.ts.map +1 -1
  89. package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.js +13 -6
  90. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +3 -1
  91. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -1
  92. package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +12 -3
  93. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +5 -0
  94. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  95. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +18 -1
  96. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  97. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
  98. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  99. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
  100. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
  101. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  102. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +8 -0
  103. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts +3 -1
  104. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
  105. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +3 -2
  106. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts +3 -0
  107. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
  108. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +1 -1
  109. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +3 -0
  110. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  111. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +2 -1
  112. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -3
  113. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  114. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +20 -5
  115. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
  116. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +6 -0
  117. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +1 -0
  118. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  119. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +4 -0
  120. package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts +7 -0
  121. package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts.map +1 -0
  122. package/dist/packages/core/src/infrastructure/services/settings-reader.service.js +25 -0
  123. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  124. package/dist/src/presentation/cli/commands/feat/new.command.js +18 -0
  125. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  126. package/dist/src/presentation/cli/commands/feat/show.command.js +2 -1
  127. package/dist/src/presentation/cli/commands/settings/agent.command.js +2 -2
  128. package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
  129. package/dist/src/presentation/cli/commands/settings/index.js +3 -1
  130. package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts +19 -0
  131. package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts.map +1 -0
  132. package/dist/src/presentation/cli/commands/settings/permission-modes.js +38 -0
  133. package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts +16 -0
  134. package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts.map +1 -0
  135. package/dist/src/presentation/cli/commands/settings/permissions.command.js +147 -0
  136. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts +4 -10
  137. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
  138. package/dist/src/presentation/tui/prompts/agent-select.prompt.js +8 -13
  139. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts +5 -3
  140. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts.map +1 -1
  141. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.js +10 -5
  142. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts +17 -0
  143. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts.map +1 -0
  144. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.js +48 -0
  145. package/dist/src/presentation/tui/wizards/onboarding/types.d.ts +2 -0
  146. package/dist/src/presentation/tui/wizards/onboarding/types.d.ts.map +1 -1
  147. package/dist/src/presentation/web/app/actions/agent-permissions.d.ts +14 -0
  148. package/dist/src/presentation/web/app/actions/agent-permissions.d.ts.map +1 -0
  149. package/dist/src/presentation/web/app/actions/agent-permissions.js +181 -0
  150. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  151. package/dist/src/presentation/web/app/actions/check-agent-auth.js +2 -5
  152. package/dist/src/presentation/web/app/actions/check-agent-tool.js +1 -1
  153. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  154. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +2 -17
  155. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  156. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +1 -0
  157. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  158. package/dist/src/presentation/web/app/actions/open-shell.js +1 -0
  159. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  160. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  161. package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts +2 -0
  162. package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts.map +1 -1
  163. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts +2 -0
  164. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts.map +1 -1
  165. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.js +6 -0
  166. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts +7 -1
  167. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts.map +1 -1
  168. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.js +24 -3
  169. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts.map +1 -1
  170. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.js +3 -0
  171. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +2 -2
  172. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +2 -2
  173. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  174. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +4 -11
  175. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts +1 -1
  176. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  177. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +5 -6
  178. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -0
  179. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  180. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  181. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -2
  182. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +10 -10
  183. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +1 -1
  184. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +2 -2
  185. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -1
  186. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  187. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +3 -3
  188. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts +8 -0
  189. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts.map +1 -0
  190. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.js +33 -0
  191. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts +15 -0
  192. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts.map +1 -0
  193. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.js +75 -0
  194. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  195. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +32 -4
  196. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -1
  197. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  198. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +2 -2
  199. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -2
  200. package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -1
  201. package/dist/src/presentation/web/lib/path-sanitizers.js +1 -0
  202. package/dist/translations/ar/cli.json +16 -0
  203. package/dist/translations/ar/tui.json +12 -10
  204. package/dist/translations/ar/web.json +15 -0
  205. package/dist/translations/de/cli.json +16 -0
  206. package/dist/translations/de/tui.json +13 -5
  207. package/dist/translations/de/web.json +15 -0
  208. package/dist/translations/en/cli.json +16 -0
  209. package/dist/translations/en/tui.json +12 -10
  210. package/dist/translations/en/web.json +15 -0
  211. package/dist/translations/es/cli.json +16 -0
  212. package/dist/translations/es/tui.json +12 -10
  213. package/dist/translations/es/web.json +15 -0
  214. package/dist/translations/fr/cli.json +16 -0
  215. package/dist/translations/fr/tui.json +12 -10
  216. package/dist/translations/fr/web.json +15 -0
  217. package/dist/translations/he/cli.json +16 -0
  218. package/dist/translations/he/tui.json +12 -10
  219. package/dist/translations/he/web.json +15 -0
  220. package/dist/translations/pt/cli.json +16 -0
  221. package/dist/translations/pt/tui.json +12 -10
  222. package/dist/translations/pt/web.json +15 -0
  223. package/dist/translations/ru/cli.json +16 -0
  224. package/dist/translations/ru/tui.json +12 -10
  225. package/dist/translations/ru/web.json +15 -0
  226. package/dist/tsconfig.build.tsbuildinfo +1 -1
  227. package/package.json +1 -1
  228. package/web/.next/BUILD_ID +1 -1
  229. package/web/.next/build-manifest.json +3 -3
  230. package/web/.next/fallback-build-manifest.json +3 -3
  231. package/web/.next/prerender-manifest.json +3 -3
  232. package/web/.next/required-server-files.js +2 -2
  233. package/web/.next/required-server-files.json +2 -2
  234. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  235. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -3
  236. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  237. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  238. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  239. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -3
  240. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  241. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  242. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +72 -60
  243. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  244. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  245. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  246. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  247. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -4
  248. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  249. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  250. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  251. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -4
  252. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  253. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  254. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  255. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -3
  256. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  257. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  258. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  259. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -3
  260. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  261. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  262. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  263. package/web/.next/server/app/(dashboard)/chat/page.js +2 -3
  264. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  265. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +72 -60
  267. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  268. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  269. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  270. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  271. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -4
  272. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  273. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  274. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  275. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -4
  276. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  277. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  278. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  279. package/web/.next/server/app/(dashboard)/page.js +2 -3
  280. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  281. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  282. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  283. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -3
  284. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  285. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  286. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  287. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -3
  288. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  289. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  290. package/web/.next/server/app/_global-error.html +1 -1
  291. package/web/.next/server/app/_global-error.rsc +1 -1
  292. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  293. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  294. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  295. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  296. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  297. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  298. package/web/.next/server/app/_not-found/page.js +2 -3
  299. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  300. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  301. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  302. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  303. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  304. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  305. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  306. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  307. package/web/.next/server/app/settings/page.js +3 -4
  308. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  309. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  310. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  311. package/web/.next/server/app/skills/page.js +3 -3
  312. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  313. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  314. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  315. package/web/.next/server/app/tools/page.js +3 -3
  316. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  317. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  318. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  319. package/web/.next/server/app/version/page.js +2 -3
  320. package/web/.next/server/app/version/page.js.nft.json +1 -1
  321. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  322. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
  323. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  324. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -1
  325. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -1
  326. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  327. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  328. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  329. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  330. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  331. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  332. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  333. package/web/.next/server/chunks/ssr/{_01mq~sm._.js → 11es_next_0q-kz~8._.js} +2 -2
  334. package/web/.next/server/chunks/ssr/11es_next_0q-kz~8._.js.map +1 -0
  335. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  336. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js +4 -0
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js.map +1 -0
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js +4 -0
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +4 -0
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -0
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js +3 -0
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js.map +1 -0
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js +4 -0
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js.map +1 -0
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  348. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +4 -0
  349. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +4 -0
  351. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js +4 -0
  353. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js.map +1 -0
  354. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +4 -0
  355. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +1 -1
  357. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  358. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  359. package/web/.next/server/chunks/ssr/_069y.js._.js +6 -0
  360. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -0
  361. package/web/.next/server/chunks/ssr/_0__4si~._.js +4 -0
  362. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -0
  363. package/web/.next/server/chunks/ssr/_0_m17kl._.js +4 -0
  364. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -0
  365. package/web/.next/server/chunks/ssr/_0d4miu.._.js +4 -0
  366. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -0
  367. package/web/.next/server/chunks/ssr/_0e8ern9._.js +4 -0
  368. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -0
  369. package/web/.next/server/chunks/ssr/{_04rrcmm._.js → _0l10ccg._.js} +2 -2
  370. package/web/.next/server/chunks/ssr/_0l10ccg._.js.map +1 -0
  371. package/web/.next/server/chunks/ssr/_0mo6j.n._.js +3 -0
  372. package/web/.next/server/chunks/ssr/_0mo6j.n._.js.map +1 -0
  373. package/web/.next/server/chunks/ssr/{_0c497sr._.js → _0mvhe_2._.js} +2 -2
  374. package/web/.next/server/chunks/ssr/{_0c497sr._.js.map → _0mvhe_2._.js.map} +1 -1
  375. package/web/.next/server/chunks/ssr/{_109n-y4._.js → _0n.magx._.js} +2 -2
  376. package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -0
  377. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +6 -0
  378. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -0
  379. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +4 -0
  380. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -0
  381. package/web/.next/server/chunks/ssr/_0t59q8r._.js +4 -0
  382. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -0
  383. package/web/.next/server/chunks/ssr/_0tcccbb._.js +3 -0
  384. package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -0
  385. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  386. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  387. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  388. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  389. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +4 -0
  390. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -0
  391. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  392. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  393. package/web/.next/server/chunks/ssr/_1161g9x._.js +4 -0
  394. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -0
  395. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +3 -0
  396. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -0
  397. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +3 -0
  398. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -0
  399. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  400. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -1
  401. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  402. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  403. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  404. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  405. package/web/.next/server/middleware-build-manifest.js +3 -3
  406. package/web/.next/server/pages/500.html +1 -1
  407. package/web/.next/server/server-reference-manifest.js +1 -1
  408. package/web/.next/server/server-reference-manifest.json +127 -109
  409. package/web/.next/static/chunks/{0ex35-_jtxyjc.js → 0.8ue6wwr7ni~.js} +1 -1
  410. package/web/.next/static/chunks/{0t_6hx6ul7umb.js → 028x3z97mchhz.js} +1 -1
  411. package/web/.next/static/chunks/044f5piy5pt5t.js +1 -0
  412. package/web/.next/static/chunks/04~sw.nhpwy6s.css +1 -0
  413. package/web/.next/static/chunks/05enics63g._-.js +7 -0
  414. package/web/.next/static/chunks/0_.x~txb5da7d.js +1 -0
  415. package/web/.next/static/chunks/0_9k2ybutuphq.js +1 -0
  416. package/web/.next/static/chunks/{07gx-h_y91lay.js → 0hti2r43x0~b7.js} +2 -2
  417. package/web/.next/static/chunks/0jo5-_q.1n69j.js +1 -0
  418. package/web/.next/static/chunks/{0oq-cvtg8rjjp.js → 0n3u~4ytndfyd.js} +1 -1
  419. package/web/.next/static/chunks/{0whez3wju~9ok.js → 0pyz97q7eg0jz.js} +1 -1
  420. package/web/.next/static/chunks/0qqe9hx_txhso.js +1 -0
  421. package/web/.next/static/chunks/{04xk1iouwcfcq.js → 0vx7ldqj8436q.js} +3 -3
  422. package/web/.next/static/chunks/11~m1ei9bh269.js +3 -0
  423. package/web/.next/static/chunks/{0c_bi0dck80dt.js → 13w6ziae82sjy.js} +1 -1
  424. package/web/.next/static/chunks/16.83v.xq8bn9.js +1 -0
  425. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts +0 -12
  426. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +0 -1
  427. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +0 -233
  428. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts +0 -8
  429. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts.map +0 -1
  430. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.js +0 -94
  431. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +0 -8
  432. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts.map +0 -1
  433. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +0 -140
  434. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts +0 -8
  435. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts.map +0 -1
  436. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.js +0 -81
  437. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts +0 -8
  438. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts.map +0 -1
  439. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.js +0 -131
  440. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +0 -6
  441. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts.map +0 -1
  442. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +0 -146
  443. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +0 -3
  444. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +0 -3
  446. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +0 -1
  447. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +0 -3
  448. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +0 -1
  449. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js +0 -3
  450. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js.map +0 -1
  451. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js +0 -3
  452. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js.map +0 -1
  453. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js +0 -3
  454. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js.map +0 -1
  455. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +0 -3
  456. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +0 -1
  457. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js +0 -3
  458. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js.map +0 -1
  459. package/web/.next/server/chunks/ssr/[root-of-the-server]__0w4__yd._.js +0 -4
  460. package/web/.next/server/chunks/ssr/[root-of-the-server]__0w4__yd._.js.map +0 -1
  461. package/web/.next/server/chunks/ssr/_0.rsra~._.js +0 -3
  462. package/web/.next/server/chunks/ssr/_0.rsra~._.js.map +0 -1
  463. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +0 -1
  464. package/web/.next/server/chunks/ssr/_04rrcmm._.js.map +0 -1
  465. package/web/.next/server/chunks/ssr/_0c741v_._.js +0 -3
  466. package/web/.next/server/chunks/ssr/_0c741v_._.js.map +0 -1
  467. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +0 -4
  468. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +0 -1
  469. package/web/.next/server/chunks/ssr/_109n-y4._.js.map +0 -1
  470. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +0 -3
  471. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +0 -1
  472. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +0 -3
  473. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +0 -1
  474. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +0 -5
  475. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +0 -1
  476. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +0 -3
  477. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +0 -1
  478. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +0 -3
  479. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +0 -1
  480. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +0 -5
  481. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +0 -1
  482. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +0 -3
  483. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +0 -1
  484. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +0 -3
  485. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +0 -1
  486. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +0 -3
  487. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +0 -1
  488. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +0 -3
  489. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +0 -1
  490. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +0 -3
  491. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +0 -1
  492. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +0 -3
  493. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js.map +0 -1
  494. package/web/.next/static/chunks/0-fy~80ui.5os.js +0 -7
  495. package/web/.next/static/chunks/039ic1ygq-to3.js +0 -1
  496. package/web/.next/static/chunks/07a4jt64wdipb.js +0 -1
  497. package/web/.next/static/chunks/0_imq4rg3q.fe.js +0 -3
  498. package/web/.next/static/chunks/0i084mozx131g.js +0 -1
  499. package/web/.next/static/chunks/0j_0i2qsrwh-c.js +0 -1
  500. package/web/.next/static/chunks/0k~55i.ofbdeb.js +0 -1
  501. package/web/.next/static/chunks/0r5dju6f1-i38.css +0 -1
  502. /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → ksBer6au8b_fS1_7dCF2D}/_buildManifest.js +0 -0
  503. /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → ksBer6au8b_fS1_7dCF2D}/_clientMiddlewareManifest.js +0 -0
  504. /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → ksBer6au8b_fS1_7dCF2D}/_ssgManifest.js +0 -0
@@ -1,233 +0,0 @@
1
- /** Dev Agent Executor — local development mock for the full SDLC flow.
2
- * Activated when settings.agent.type = "dev". Phase detection via regex on
3
- * prompt text; no interface changes. Delay: DEV_EXECUTOR_DELAY_MS (default 2000ms). */
4
- import * as fs from 'node:fs';
5
- import * as path from 'node:path';
6
- import { SPEC_ANALYZE_FIXTURE } from './fixtures/spec-analyze.fixture.js';
7
- import { SPEC_REQUIREMENTS_FIXTURE } from './fixtures/spec-requirements.fixture.js';
8
- import { RESEARCH_FIXTURE } from './fixtures/research.fixture.js';
9
- import { PLAN_FIXTURE } from './fixtures/plan.fixture.js';
10
- import { TASKS_FIXTURE } from './fixtures/tasks.fixture.js';
11
- const DEFAULT_DELAY_MS = 2000;
12
- const ADJECTIVES = [
13
- 'quantum',
14
- 'blazing',
15
- 'cosmic',
16
- 'fuzzy',
17
- 'turbo',
18
- 'hyperbolic',
19
- 'spectral',
20
- 'chromatic',
21
- 'orbital',
22
- 'fractal',
23
- 'velvet',
24
- 'neon',
25
- 'arctic',
26
- 'molten',
27
- 'prismatic',
28
- 'phantom',
29
- 'galactic',
30
- 'atomic',
31
- 'sonic',
32
- 'ethereal',
33
- ];
34
- const NOUNS = [
35
- 'widget',
36
- 'pipeline',
37
- 'dashboard',
38
- 'renderer',
39
- 'compiler',
40
- 'beacon',
41
- 'transformer',
42
- 'navigator',
43
- 'interceptor',
44
- 'gateway',
45
- 'synthesizer',
46
- 'orchestrator',
47
- 'resolver',
48
- 'dispatcher',
49
- 'emitter',
50
- 'detector',
51
- 'aggregator',
52
- 'scheduler',
53
- 'validator',
54
- 'serializer',
55
- ];
56
- const VERBS = [
57
- 'add',
58
- 'implement',
59
- 'integrate',
60
- 'build',
61
- 'create',
62
- 'wire up',
63
- 'introduce',
64
- 'scaffold',
65
- 'bootstrap',
66
- 'enable',
67
- ];
68
- function randomMetadata() {
69
- const adj = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
70
- const noun = NOUNS[Math.floor(Math.random() * NOUNS.length)];
71
- const verb = VERBS[Math.floor(Math.random() * VERBS.length)];
72
- const slug = `${adj}-${noun}`;
73
- const name = `${adj.charAt(0).toUpperCase() + adj.slice(1)} ${noun.charAt(0).toUpperCase() + noun.slice(1)}`;
74
- return JSON.stringify({
75
- slug,
76
- name,
77
- description: `${verb.charAt(0).toUpperCase() + verb.slice(1)} a ${adj} ${noun} to the application`,
78
- });
79
- }
80
- function randomPrNumber() {
81
- return Math.floor(Math.random() * 900) + 100;
82
- }
83
- function randomCommitHash() {
84
- return Math.random().toString(16).slice(2, 10);
85
- }
86
- function mergeCommitResult() {
87
- const pr = randomPrNumber();
88
- const hash = randomCommitHash();
89
- return (`[feat/dev-branch ${hash}] feat: dev implementation\n` +
90
- `https://github.com/jrmatherly/shipit/pull/${pr}\nPull request #${pr} created successfully.`);
91
- }
92
- function mergeSquashResult() {
93
- const pr = randomPrNumber();
94
- return `Merged PR #${pr} with squash merge. Branch feat/dev-branch deleted.`;
95
- }
96
- const IMPLEMENT_RESULT = 'Implementation complete. All tests pass.\npnpm test: 47 passed, 0 failed';
97
- const CI_FIX_RESULT = 'Fixed CI failure: corrected import path. All checks now passing.';
98
- /**
99
- * Extract specDir from a YAML-producing prompt.
100
- * Refs: analyze.prompt.ts:39, requirements.prompt.ts:92, research.prompt.ts:45,
101
- * plan.prompt.ts:199.
102
- */
103
- function extractSpecDir(prompt) {
104
- // Match both Unix absolute paths (/...) and Windows absolute paths (C:\...)
105
- const ABS_PATH = String.raw `(?:\/|[A-Za-z]:[/\\])[^\s\n]+`;
106
- // Analyze ("Write your analysis to:"), requirements ("Update the file at:"),
107
- // research ("Write your research to:")
108
- const fileMatch = prompt.match(new RegExp(`(?:Write your \\w+ to|Update the file at):\\s+(${ABS_PATH})`));
109
- if (fileMatch)
110
- return path.dirname(fileMatch[1]);
111
- // Plan: "Write to BOTH /path/plan.yaml AND /path/tasks.yaml"
112
- const planMatch = prompt.match(new RegExp(`Write to BOTH\\s+(${ABS_PATH})[/\\\\]plan\\.yaml`));
113
- if (planMatch)
114
- return planMatch[1];
115
- return null;
116
- }
117
- /** Validate extracted specDir: must be absolute, no ".." traversal. */
118
- function validateSpecDir(specDir) {
119
- if (!path.isAbsolute(specDir))
120
- throw new Error(`DevAgentExecutorService: invalid specDir (not absolute): ${specDir}`);
121
- if (specDir.includes('..'))
122
- throw new Error(`DevAgentExecutorService: invalid specDir (contains ".."): ${specDir}`);
123
- }
124
- export class DevAgentExecutorService {
125
- agentType = 'dev';
126
- delayMs;
127
- constructor() {
128
- this.delayMs = parseInt(process.env.DEV_EXECUTOR_DELAY_MS ?? String(DEFAULT_DELAY_MS), 10);
129
- }
130
- async execute(prompt, _options) {
131
- if (this.delayMs > 0) {
132
- await new Promise((resolve) => setTimeout(resolve, this.delayMs));
133
- }
134
- const result = this.dispatch(prompt);
135
- // Simulate realistic Claude Code token counts: prompts are large due to
136
- // system prompt + codebase context; output varies by phase.
137
- const baseInputTokens = Math.floor(prompt.length * 0.25); // ~4 chars/token
138
- const contextTokens = 25000 + Math.floor(Math.random() * 15000); // cached context
139
- const cacheReadTokens = Math.floor(contextTokens * 0.7);
140
- const cacheCreationTokens = contextTokens - cacheReadTokens;
141
- const inputTokens = baseInputTokens + contextTokens;
142
- const outputTokens = Math.floor(result.length * 0.25) + 500;
143
- const numTurns = Math.floor(Math.random() * 8) + 1;
144
- // Pricing: ~$3/M input, ~$15/M output, cache read ~$0.30/M, cache write ~$3.75/M
145
- const costUsd = baseInputTokens * 0.000003 +
146
- cacheCreationTokens * 0.00000375 +
147
- cacheReadTokens * 0.0000003 +
148
- outputTokens * 0.000015;
149
- // API time correlates with output tokens and turns
150
- const durationApiMs = Math.floor(outputTokens * 0.08 * numTurns + Math.random() * 2000);
151
- return {
152
- result,
153
- usage: {
154
- inputTokens,
155
- outputTokens,
156
- cacheCreationInputTokens: cacheCreationTokens,
157
- cacheReadInputTokens: cacheReadTokens,
158
- costUsd: Math.round(costUsd * 10000) / 10000, // 4 decimal places
159
- numTurns,
160
- durationApiMs,
161
- },
162
- };
163
- }
164
- async *executeStream(prompt, options) {
165
- const result = await this.execute(prompt, options);
166
- yield { type: 'result', content: result.result, timestamp: new Date() };
167
- }
168
- supportsFeature(_feature) {
169
- return false;
170
- }
171
- dispatch(prompt) {
172
- // Metadata: mock-executor.service.ts extractUserInput pattern
173
- if (prompt.includes('User request:\n"'))
174
- return randomMetadata();
175
- // Analyze: analyze.prompt.ts:39
176
- if (prompt.includes('Write your analysis to:')) {
177
- const specDir = extractSpecDir(prompt);
178
- if (specDir) {
179
- validateSpecDir(specDir);
180
- fs.mkdirSync(specDir, { recursive: true });
181
- fs.writeFileSync(path.join(specDir, 'spec.yaml'), SPEC_ANALYZE_FIXTURE, 'utf8');
182
- }
183
- return 'Analysis complete. spec.yaml written.';
184
- }
185
- // Requirements: requirements.prompt.ts:92
186
- if (prompt.includes('Update the file at:')) {
187
- const specDir = extractSpecDir(prompt);
188
- if (specDir) {
189
- validateSpecDir(specDir);
190
- fs.mkdirSync(specDir, { recursive: true });
191
- fs.writeFileSync(path.join(specDir, 'spec.yaml'), SPEC_REQUIREMENTS_FIXTURE, 'utf8');
192
- }
193
- return 'Requirements complete. spec.yaml updated.';
194
- }
195
- // Research: research.prompt.ts:45
196
- if (prompt.includes('Write your research to:')) {
197
- const specDir = extractSpecDir(prompt);
198
- if (specDir) {
199
- validateSpecDir(specDir);
200
- fs.mkdirSync(specDir, { recursive: true });
201
- fs.writeFileSync(path.join(specDir, 'research.yaml'), RESEARCH_FIXTURE, 'utf8');
202
- }
203
- return 'Research complete. research.yaml written.';
204
- }
205
- // Plan: plan.prompt.ts:199
206
- if (prompt.includes('Write to BOTH')) {
207
- const specDir = extractSpecDir(prompt);
208
- if (specDir) {
209
- validateSpecDir(specDir);
210
- fs.mkdirSync(specDir, { recursive: true });
211
- fs.writeFileSync(path.join(specDir, 'plan.yaml'), PLAN_FIXTURE, 'utf8');
212
- fs.writeFileSync(path.join(specDir, 'tasks.yaml'), TASKS_FIXTURE, 'utf8');
213
- }
214
- return 'Planning complete. plan.yaml and tasks.yaml written.';
215
- }
216
- // Implement: implement.prompt.ts:91
217
- if (prompt.includes('performing autonomous implementation'))
218
- return IMPLEMENT_RESULT;
219
- // Merge commit/push/PR: merge-prompts.ts:88
220
- if (prompt.includes('performing git operations in a feature worktree'))
221
- return mergeCommitResult();
222
- // Merge squash (PR): merge-prompts.ts:131
223
- if (prompt.includes('merging a pull request via the GitHub CLI'))
224
- return mergeSquashResult();
225
- // Merge squash (local): merge-prompts.ts:168
226
- if (prompt.includes('performing a local merge'))
227
- return mergeSquashResult();
228
- // CI fix: merge.prompt.ts:28
229
- if (prompt.includes('fixing a CI failure'))
230
- return CI_FIX_RESULT;
231
- return '{}';
232
- }
233
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Plan Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validatePlan() with zero repair iterations.
6
- */
7
- export declare const PLAN_FIXTURE = "name: dark-mode-toggle\nsummary: >\n Implement dark-mode toggle across 3 phases: ThemeProvider context foundation,\n ThemeToggle component, and settings panel integration. No interface changes\n required; the feature slots into existing React context and component patterns.\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19 context API\n - Tailwind CSS v4\n - shadcn/ui Switch\n - Next.js App Router\n - Storybook\n - Vitest\n\nrelatedLinks: []\n\nphases:\n - id: phase-1\n name: 'Theme Context Foundation'\n description: >\n Create the ThemeProvider component and useTheme hook. This phase establishes\n the theme state management infrastructure that all subsequent phases depend on.\n ThemeProvider reads from localStorage on mount and writes on toggle.\n parallel: false\n\n - id: phase-2\n name: 'ThemeToggle Component'\n description: >\n Create the ThemeToggle UI component using shadcn/ui Switch and Label.\n Includes Storybook story with light and dark variant knobs and unit tests\n using jsdom for DOM interaction.\n parallel: false\n\n - id: phase-3\n name: 'Settings Panel Integration'\n description: >\n Mount ThemeProvider in the root layout and add ThemeToggle to the settings\n panel. Run full pnpm validate and pnpm test to confirm no regressions.\n parallel: false\n\nfilesToCreate:\n - src/presentation/web/components/common/theme/theme-provider.tsx\n - src/presentation/web/components/common/theme/use-theme.ts\n - src/presentation/web/components/common/theme/theme-toggle.tsx\n - src/presentation/web/components/common/theme/theme-toggle.stories.tsx\n\nfilesToModify:\n - src/presentation/web/app/layout.tsx\n - src/presentation/web/components/features/settings/settings-panel.tsx\n\nopenQuestions: []\n\ncontent: |\n ## Architecture Overview\n\n The ThemeProvider wraps the Next.js App Router root layout, making the theme context\n available to the entire component tree via useTheme hook. The ThemeToggle component\n is a pure UI component that consumes useTheme and renders a shadcn/ui Switch with\n no business logic.\n\n ## Key Design Decisions\n\n **ThemeProvider in root layout**: Placing the provider at the top of the component\n tree avoids prop drilling and matches the SettingsProvider pattern already in use.\n\n **localStorage persistence**: Read on mount, write on toggle. No SSR conflicts\n because localStorage is only accessed in useEffect (client-side only).\n\n **Tailwind dark: class**: Toggling the html element class is the zero-config\n approach for Tailwind v4. No tailwind.config.ts changes needed.\n\n ## Implementation Strategy\n\n Phase 1 establishes the foundation (context, hook) before any UI is built.\n Phase 2 builds the UI component in isolation \u2014 fully testable without the settings\n panel. Phase 3 wires everything together and validates the full integration. This\n dependency ordering ensures each phase is independently verifiable.\n\n ## Risk Mitigation\n\n | Risk | Mitigation |\n | ---- | ---------- |\n | FOUC on initial load | ThemeProvider sets html class synchronously from localStorage on mount |\n | localStorage unavailable (SSR) | useEffect guard: only access localStorage in browser context |\n | shadcn/ui Switch not yet installed | Check if component exists; install via shadcn add switch if needed |\n";
8
- //# sourceMappingURL=plan.fixture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,y0GAuFxB,CAAC"}
@@ -1,94 +0,0 @@
1
- /**
2
- * Plan Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validatePlan() with zero repair iterations.
6
- */
7
- export const PLAN_FIXTURE = `name: dark-mode-toggle
8
- summary: >
9
- Implement dark-mode toggle across 3 phases: ThemeProvider context foundation,
10
- ThemeToggle component, and settings panel integration. No interface changes
11
- required; the feature slots into existing React context and component patterns.
12
-
13
- relatedFeatures: []
14
-
15
- technologies:
16
- - React 19 context API
17
- - Tailwind CSS v4
18
- - shadcn/ui Switch
19
- - Next.js App Router
20
- - Storybook
21
- - Vitest
22
-
23
- relatedLinks: []
24
-
25
- phases:
26
- - id: phase-1
27
- name: 'Theme Context Foundation'
28
- description: >
29
- Create the ThemeProvider component and useTheme hook. This phase establishes
30
- the theme state management infrastructure that all subsequent phases depend on.
31
- ThemeProvider reads from localStorage on mount and writes on toggle.
32
- parallel: false
33
-
34
- - id: phase-2
35
- name: 'ThemeToggle Component'
36
- description: >
37
- Create the ThemeToggle UI component using shadcn/ui Switch and Label.
38
- Includes Storybook story with light and dark variant knobs and unit tests
39
- using jsdom for DOM interaction.
40
- parallel: false
41
-
42
- - id: phase-3
43
- name: 'Settings Panel Integration'
44
- description: >
45
- Mount ThemeProvider in the root layout and add ThemeToggle to the settings
46
- panel. Run full pnpm validate and pnpm test to confirm no regressions.
47
- parallel: false
48
-
49
- filesToCreate:
50
- - src/presentation/web/components/common/theme/theme-provider.tsx
51
- - src/presentation/web/components/common/theme/use-theme.ts
52
- - src/presentation/web/components/common/theme/theme-toggle.tsx
53
- - src/presentation/web/components/common/theme/theme-toggle.stories.tsx
54
-
55
- filesToModify:
56
- - src/presentation/web/app/layout.tsx
57
- - src/presentation/web/components/features/settings/settings-panel.tsx
58
-
59
- openQuestions: []
60
-
61
- content: |
62
- ## Architecture Overview
63
-
64
- The ThemeProvider wraps the Next.js App Router root layout, making the theme context
65
- available to the entire component tree via useTheme hook. The ThemeToggle component
66
- is a pure UI component that consumes useTheme and renders a shadcn/ui Switch with
67
- no business logic.
68
-
69
- ## Key Design Decisions
70
-
71
- **ThemeProvider in root layout**: Placing the provider at the top of the component
72
- tree avoids prop drilling and matches the SettingsProvider pattern already in use.
73
-
74
- **localStorage persistence**: Read on mount, write on toggle. No SSR conflicts
75
- because localStorage is only accessed in useEffect (client-side only).
76
-
77
- **Tailwind dark: class**: Toggling the html element class is the zero-config
78
- approach for Tailwind v4. No tailwind.config.ts changes needed.
79
-
80
- ## Implementation Strategy
81
-
82
- Phase 1 establishes the foundation (context, hook) before any UI is built.
83
- Phase 2 builds the UI component in isolation — fully testable without the settings
84
- panel. Phase 3 wires everything together and validates the full integration. This
85
- dependency ordering ensures each phase is independently verifiable.
86
-
87
- ## Risk Mitigation
88
-
89
- | Risk | Mitigation |
90
- | ---- | ---------- |
91
- | FOUC on initial load | ThemeProvider sets html class synchronously from localStorage on mount |
92
- | localStorage unavailable (SSR) | useEffect guard: only access localStorage in browser context |
93
- | shadcn/ui Switch not yet installed | Check if component exists; install via shadcn add switch if needed |
94
- `;
@@ -1,8 +0,0 @@
1
- /**
2
- * Research Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validateResearch() with zero repair iterations.
6
- */
7
- export declare const RESEARCH_FIXTURE = "name: dark-mode-toggle\nsummary: >\n The dark-mode implementation uses React context for theme state distribution,\n Tailwind CSS v4 class-based dark mode, and localStorage for preference persistence.\n No new npm dependencies are required. Three architectural decisions cover state\n management, CSS strategy, and persistence layer.\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19 context API\n - 'Tailwind CSS v4 (dark: modifier)'\n - localStorage Web API\n - shadcn/ui Switch component\n - Next.js App Router root layout\n\nrelatedLinks: []\n\ndecisions:\n - title: 'Theme State Management'\n chosen: >\n React context with a ThemeProvider component and useTheme hook. The provider\n reads the initial value from localStorage and sets the html element class on\n mount and on toggle.\n rejected:\n - >\n Zustand global store: adds a new state management library dependency for a\n single boolean value; over-engineered for this scope when React context\n achieves the same result in ~40 lines.\n - >\n next-themes library: a popular choice but adds a new npm package for\n functionality achievable in-house; the project guideline prefers no new\n dependencies when existing tools suffice (NFR-3).\n rationale: >\n The project already uses React context extensively (e.g., SettingsProvider).\n A simple context-based ThemeProvider follows the established pattern and\n requires zero new dependencies \u2014 consistent with NFR-3.\n\n - title: 'CSS Dark Mode Strategy'\n chosen: >\n Tailwind CSS v4 class-based dark mode: add the dark class to the html element\n and rely on Tailwind dark: variants already present in shadcn/ui components.\n rejected:\n - >\n CSS custom properties (CSS variables) approach: requires redefining all\n existing Tailwind color tokens as CSS variables and large changes to every\n styled component \u2014 disproportionate for this feature.\n - >\n Inline style overrides on individual components: does not scale; breaks\n existing Tailwind utility classes; produces unmaintainable ad-hoc styling.\n rationale: >\n Tailwind CSS v4 with darkMode: class is already configured in the project.\n All shadcn/ui components expose dark: variants. Toggling the html class is\n the minimal, canonical approach that requires no additional configuration.\n\n - title: 'Persistence Layer for Theme Preference'\n chosen: >\n localStorage Web API. Read on ThemeProvider mount to restore the preference;\n write on every toggleTheme() call. Key: shipit-ai-theme, values: light or dark.\n rejected:\n - >\n SQLite settings via backend API: requires a new settings field, API endpoint,\n and schema migration \u2014 out of scope for a client-side preference.\n - >\n sessionStorage: does not persist across browser sessions; the whole point\n is remembering the user preference between visits.\n rationale: >\n localStorage is the de-facto standard for persisting UI theme preferences\n client-side. It is synchronous, zero-dependency, available in all target\n browsers, and requires no backend changes \u2014 satisfying NFR-3.\n\nopenQuestions: []\n\ncontent: |\n ## Technology Decisions\n\n ### 1. Theme State Management\n\n **Chosen:** React context ThemeProvider + useTheme hook\n\n **Rejected:**\n - Zustand global store \u2014 adds a new dependency for a single boolean\n - next-themes library \u2014 adds a package for functionality achievable in ~40 lines\n\n **Rationale:** Follows established SettingsProvider pattern. Zero new dependencies.\n\n ### 2. CSS Dark Mode Strategy\n\n **Chosen:** Tailwind CSS v4 dark: class-based (dark class on html element)\n\n **Rejected:**\n - CSS custom properties \u2014 requires redefining all color tokens (large change surface)\n - Inline style overrides \u2014 unmaintainable, breaks Tailwind utilities\n\n **Rationale:** Already configured; shadcn/ui components expose dark: variants natively.\n\n ### 3. Persistence Layer\n\n **Chosen:** localStorage (key: shipit-ai-theme, values: light | dark)\n\n **Rejected:**\n - SQLite settings via API \u2014 out of scope, requires migration\n - sessionStorage \u2014 does not survive browser restarts\n\n **Rationale:** De-facto standard for client-side theme persistence. Zero backend changes.\n\n ## Library Analysis\n\n | Library | Purpose | Decision | Reasoning |\n | ------- | ------- | -------- | --------- |\n | next-themes | SSR-safe theme management | Reject | Adds dependency for in-house functionality |\n | Tailwind CSS v4 | Dark mode via dark: class | Use (existing) | Already configured, shadcn/ui compatible |\n | shadcn/ui Switch | Toggle UI control | Use (existing) | Already a project dependency, accessible |\n | localStorage | Preference persistence | Use (built-in) | No dependency, synchronous, universally available |\n\n ## Security Considerations\n\n localStorage is readable by any JavaScript on the page. The stored value is\n light or dark \u2014 no sensitive data. The ThemeProvider must sanitize the retrieved\n value (only accept light or dark; default to light for any other value) to prevent\n unexpected CSS class injection.\n\n ## Performance Implications\n\n localStorage.getItem() is synchronous and executes in under 1ms. Setting the html\n class on mount avoids a flash of unstyled content (FOUC) provided the ThemeProvider\n is high enough in the component tree.\n\n ## Architecture Notes\n\n ThemeProvider wraps the root layout, making theme state available to all pages and\n components without prop drilling. The useTheme hook is consumed only by ThemeToggle\n and the root layout. This follows the existing SettingsProvider pattern.\n";
8
- //# sourceMappingURL=research.fixture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,+vLAqI5B,CAAC"}
@@ -1,140 +0,0 @@
1
- /**
2
- * Research Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validateResearch() with zero repair iterations.
6
- */
7
- export const RESEARCH_FIXTURE = `name: dark-mode-toggle
8
- summary: >
9
- The dark-mode implementation uses React context for theme state distribution,
10
- Tailwind CSS v4 class-based dark mode, and localStorage for preference persistence.
11
- No new npm dependencies are required. Three architectural decisions cover state
12
- management, CSS strategy, and persistence layer.
13
-
14
- relatedFeatures: []
15
-
16
- technologies:
17
- - React 19 context API
18
- - 'Tailwind CSS v4 (dark: modifier)'
19
- - localStorage Web API
20
- - shadcn/ui Switch component
21
- - Next.js App Router root layout
22
-
23
- relatedLinks: []
24
-
25
- decisions:
26
- - title: 'Theme State Management'
27
- chosen: >
28
- React context with a ThemeProvider component and useTheme hook. The provider
29
- reads the initial value from localStorage and sets the html element class on
30
- mount and on toggle.
31
- rejected:
32
- - >
33
- Zustand global store: adds a new state management library dependency for a
34
- single boolean value; over-engineered for this scope when React context
35
- achieves the same result in ~40 lines.
36
- - >
37
- next-themes library: a popular choice but adds a new npm package for
38
- functionality achievable in-house; the project guideline prefers no new
39
- dependencies when existing tools suffice (NFR-3).
40
- rationale: >
41
- The project already uses React context extensively (e.g., SettingsProvider).
42
- A simple context-based ThemeProvider follows the established pattern and
43
- requires zero new dependencies — consistent with NFR-3.
44
-
45
- - title: 'CSS Dark Mode Strategy'
46
- chosen: >
47
- Tailwind CSS v4 class-based dark mode: add the dark class to the html element
48
- and rely on Tailwind dark: variants already present in shadcn/ui components.
49
- rejected:
50
- - >
51
- CSS custom properties (CSS variables) approach: requires redefining all
52
- existing Tailwind color tokens as CSS variables and large changes to every
53
- styled component — disproportionate for this feature.
54
- - >
55
- Inline style overrides on individual components: does not scale; breaks
56
- existing Tailwind utility classes; produces unmaintainable ad-hoc styling.
57
- rationale: >
58
- Tailwind CSS v4 with darkMode: class is already configured in the project.
59
- All shadcn/ui components expose dark: variants. Toggling the html class is
60
- the minimal, canonical approach that requires no additional configuration.
61
-
62
- - title: 'Persistence Layer for Theme Preference'
63
- chosen: >
64
- localStorage Web API. Read on ThemeProvider mount to restore the preference;
65
- write on every toggleTheme() call. Key: shipit-ai-theme, values: light or dark.
66
- rejected:
67
- - >
68
- SQLite settings via backend API: requires a new settings field, API endpoint,
69
- and schema migration — out of scope for a client-side preference.
70
- - >
71
- sessionStorage: does not persist across browser sessions; the whole point
72
- is remembering the user preference between visits.
73
- rationale: >
74
- localStorage is the de-facto standard for persisting UI theme preferences
75
- client-side. It is synchronous, zero-dependency, available in all target
76
- browsers, and requires no backend changes — satisfying NFR-3.
77
-
78
- openQuestions: []
79
-
80
- content: |
81
- ## Technology Decisions
82
-
83
- ### 1. Theme State Management
84
-
85
- **Chosen:** React context ThemeProvider + useTheme hook
86
-
87
- **Rejected:**
88
- - Zustand global store — adds a new dependency for a single boolean
89
- - next-themes library — adds a package for functionality achievable in ~40 lines
90
-
91
- **Rationale:** Follows established SettingsProvider pattern. Zero new dependencies.
92
-
93
- ### 2. CSS Dark Mode Strategy
94
-
95
- **Chosen:** Tailwind CSS v4 dark: class-based (dark class on html element)
96
-
97
- **Rejected:**
98
- - CSS custom properties — requires redefining all color tokens (large change surface)
99
- - Inline style overrides — unmaintainable, breaks Tailwind utilities
100
-
101
- **Rationale:** Already configured; shadcn/ui components expose dark: variants natively.
102
-
103
- ### 3. Persistence Layer
104
-
105
- **Chosen:** localStorage (key: shipit-ai-theme, values: light | dark)
106
-
107
- **Rejected:**
108
- - SQLite settings via API — out of scope, requires migration
109
- - sessionStorage — does not survive browser restarts
110
-
111
- **Rationale:** De-facto standard for client-side theme persistence. Zero backend changes.
112
-
113
- ## Library Analysis
114
-
115
- | Library | Purpose | Decision | Reasoning |
116
- | ------- | ------- | -------- | --------- |
117
- | next-themes | SSR-safe theme management | Reject | Adds dependency for in-house functionality |
118
- | Tailwind CSS v4 | Dark mode via dark: class | Use (existing) | Already configured, shadcn/ui compatible |
119
- | shadcn/ui Switch | Toggle UI control | Use (existing) | Already a project dependency, accessible |
120
- | localStorage | Preference persistence | Use (built-in) | No dependency, synchronous, universally available |
121
-
122
- ## Security Considerations
123
-
124
- localStorage is readable by any JavaScript on the page. The stored value is
125
- light or dark — no sensitive data. The ThemeProvider must sanitize the retrieved
126
- value (only accept light or dark; default to light for any other value) to prevent
127
- unexpected CSS class injection.
128
-
129
- ## Performance Implications
130
-
131
- localStorage.getItem() is synchronous and executes in under 1ms. Setting the html
132
- class on mount avoids a flash of unstyled content (FOUC) provided the ThemeProvider
133
- is high enough in the component tree.
134
-
135
- ## Architecture Notes
136
-
137
- ThemeProvider wraps the root layout, making theme state available to all pages and
138
- components without prop drilling. The useTheme hook is consumed only by ThemeToggle
139
- and the root layout. This follows the existing SettingsProvider pattern.
140
- `;
@@ -1,8 +0,0 @@
1
- /**
2
- * Spec (Analyze Phase) Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validateSpecAnalyze() with zero repair iterations.
6
- */
7
- export declare const SPEC_ANALYZE_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel\nsummary: >\n Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that\n applies a CSS class-based theme, stores the user preference in localStorage, and\n is surfaced as a shadcn/ui Switch component with full Storybook coverage.\nphase: Analysis\nsizeEstimate: M\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19\n - Next.js 16 (App Router)\n - Tailwind CSS v4\n - shadcn/ui\n - Storybook\n - TypeScript\n\nrelatedLinks: []\n\nopenQuestions: []\n\ncontent: |\n ## Problem Statement\n\n The ShipIT web UI currently renders only in light mode. Developers working in dark\n environments or those who prefer dark themes have no way to switch the UI appearance.\n Adding a first-class dark-mode toggle improves developer experience and demonstrates\n the ShipIT settings panel as a configurable surface.\n\n ## Codebase Analysis\n\n ### Project Structure\n\n The web UI lives in src/presentation/web/ following Next.js App Router conventions.\n Components are organized into four tiers: ui/ (Tier 0), common/ (Tier 1),\n layouts/ (Tier 2), and features/ (Tier 3). Storybook stories are mandatory for every\n component.\n\n ### Architecture Patterns\n\n The project uses shadcn/ui (Radix primitives + Tailwind CSS v4) for all UI components.\n Theme state would live in a React context provider wrapping the root layout, following\n the existing SettingsProvider pattern in the codebase. Clean Architecture layers keep\n theme state in the presentation layer only.\n\n ### Relevant Technologies\n\n Tailwind CSS v4 supports dark mode via the `dark` CSS class on the html element.\n shadcn/ui provides a Switch component suitable for the toggle control. localStorage\n provides client-side persistence without any backend changes.\n\n ## Affected Areas\n\n | Area | Impact | Reasoning |\n | ---- | ------ | --------- |\n | src/presentation/web/components/features/settings/ | High | Settings panel receives the toggle component |\n | src/presentation/web/app/layout.tsx | Medium | Root layout needs ThemeProvider wrapper |\n | src/presentation/web/components/common/ | Medium | ThemeToggle and ThemeProvider components created here |\n | tailwind.config.ts | Low | Verify darkMode: class is configured |\n\n ## Dependencies\n\n - shadcn/ui Switch component\n - React context for theme state distribution\n - localStorage Web API for persistence (built-in, no new dependency)\n\n ## Size Estimate\n\n **M (days)** \u2014 Context setup, toggle component, settings integration, Storybook stories,\n and tests across 3 phases add up to roughly 2 developer-days with TDD.\n";
8
- //# sourceMappingURL=spec-analyze.fixture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-analyze.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,wtFA0EhC,CAAC"}
@@ -1,81 +0,0 @@
1
- /**
2
- * Spec (Analyze Phase) Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validateSpecAnalyze() with zero repair iterations.
6
- */
7
- export const SPEC_ANALYZE_FIXTURE = `name: dark-mode-toggle
8
- number: 42
9
- branch: feat/042-dark-mode-toggle
10
- oneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel
11
- summary: >
12
- Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that
13
- applies a CSS class-based theme, stores the user preference in localStorage, and
14
- is surfaced as a shadcn/ui Switch component with full Storybook coverage.
15
- phase: Analysis
16
- sizeEstimate: M
17
-
18
- relatedFeatures: []
19
-
20
- technologies:
21
- - React 19
22
- - Next.js 16 (App Router)
23
- - Tailwind CSS v4
24
- - shadcn/ui
25
- - Storybook
26
- - TypeScript
27
-
28
- relatedLinks: []
29
-
30
- openQuestions: []
31
-
32
- content: |
33
- ## Problem Statement
34
-
35
- The ShipIT web UI currently renders only in light mode. Developers working in dark
36
- environments or those who prefer dark themes have no way to switch the UI appearance.
37
- Adding a first-class dark-mode toggle improves developer experience and demonstrates
38
- the ShipIT settings panel as a configurable surface.
39
-
40
- ## Codebase Analysis
41
-
42
- ### Project Structure
43
-
44
- The web UI lives in src/presentation/web/ following Next.js App Router conventions.
45
- Components are organized into four tiers: ui/ (Tier 0), common/ (Tier 1),
46
- layouts/ (Tier 2), and features/ (Tier 3). Storybook stories are mandatory for every
47
- component.
48
-
49
- ### Architecture Patterns
50
-
51
- The project uses shadcn/ui (Radix primitives + Tailwind CSS v4) for all UI components.
52
- Theme state would live in a React context provider wrapping the root layout, following
53
- the existing SettingsProvider pattern in the codebase. Clean Architecture layers keep
54
- theme state in the presentation layer only.
55
-
56
- ### Relevant Technologies
57
-
58
- Tailwind CSS v4 supports dark mode via the \`dark\` CSS class on the html element.
59
- shadcn/ui provides a Switch component suitable for the toggle control. localStorage
60
- provides client-side persistence without any backend changes.
61
-
62
- ## Affected Areas
63
-
64
- | Area | Impact | Reasoning |
65
- | ---- | ------ | --------- |
66
- | src/presentation/web/components/features/settings/ | High | Settings panel receives the toggle component |
67
- | src/presentation/web/app/layout.tsx | Medium | Root layout needs ThemeProvider wrapper |
68
- | src/presentation/web/components/common/ | Medium | ThemeToggle and ThemeProvider components created here |
69
- | tailwind.config.ts | Low | Verify darkMode: class is configured |
70
-
71
- ## Dependencies
72
-
73
- - shadcn/ui Switch component
74
- - React context for theme state distribution
75
- - localStorage Web API for persistence (built-in, no new dependency)
76
-
77
- ## Size Estimate
78
-
79
- **M (days)** — Context setup, toggle component, settings integration, Storybook stories,
80
- and tests across 3 phases add up to roughly 2 developer-days with TDD.
81
- `;
@@ -1,8 +0,0 @@
1
- /**
2
- * Spec (Requirements Phase) Fixture
3
- *
4
- * Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
5
- * Passes validateSpecRequirements() with zero repair iterations.
6
- */
7
- export declare const SPEC_REQUIREMENTS_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel\nsummary: >\n Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that\n applies a CSS class-based theme via Tailwind dark: variants, stores the user\n preference in localStorage, and is surfaced as a shadcn/ui Switch component\n with full Storybook coverage and TDD-driven unit tests.\nphase: Requirements\nsizeEstimate: M\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19\n - Next.js 16 (App Router)\n - Tailwind CSS v4\n - shadcn/ui\n - Storybook\n - TypeScript\n - localStorage Web API\n\nrelatedLinks: []\n\nopenQuestions:\n - question: 'Where should the dark-mode preference be persisted?'\n resolved: true\n options:\n - option: 'localStorage only'\n description: >\n Store the theme preference in localStorage. Zero backend changes,\n instant read on page load, and no need for a settings schema migration.\n The ThemeProvider reads the key on mount and writes on toggle.\n selected: true\n - option: 'SQLite settings via backend API'\n description: >\n Persist the preference in the ShipIT SQLite settings store alongside\n other settings. Syncs across devices but requires API changes and a\n settings migration \u2014 out of scope for this feature.\n selected: false\n selectionRationale: >\n localStorage is the conventional approach for client-side theme preferences\n and requires no backend changes. The ShipIT settings API is out of scope for\n this feature; localStorage ships the value faster with zero migration risk.\n answer: 'localStorage only'\n\n - question: 'How should the CSS dark-mode implementation be applied?'\n resolved: true\n options:\n - option: 'Tailwind CSS class-based dark mode (dark: modifier)'\n description: >\n Add the dark class to the html element and use Tailwind dark: modifier\n on all themed elements. Supported natively in Tailwind CSS v4 and fully\n compatible with the shadcn/ui component library.\n selected: true\n - option: 'CSS custom properties via a custom ThemeProvider stylesheet'\n description: >\n Define a set of CSS custom properties (--color-bg, --color-text, etc.)\n and swap them by toggling a data attribute. More flexible but requires\n redefining all existing color tokens \u2014 a large change surface.\n selected: false\n selectionRationale: >\n Tailwind CSS v4 with dark: modifier is already the standard in this codebase.\n All shadcn/ui components are built to accept Tailwind dark: variants. Using\n the dark class on html is the minimal, zero-extra-dependency approach.\n answer: 'Tailwind CSS class-based dark mode (dark: modifier)'\n\ncontent: |\n ## Problem Statement\n\n The ShipIT web UI currently renders only in light mode. Developers working in dark\n environments or those who prefer dark themes have no way to switch the UI appearance.\n\n ## Success Criteria\n\n - [ ] A ThemeProvider wraps the root layout and provides a useTheme hook\n - [ ] A ThemeToggle component renders in the settings panel with a Switch and label\n - [ ] Clicking the toggle switches the html element class between light and dark\n - [ ] The preference persists across page refreshes via localStorage\n - [ ] All new components have Storybook stories with light and dark variants\n - [ ] pnpm validate passes with no new errors\n\n ## Functional Requirements\n\n - **FR-1**: A ThemeProvider component must wrap the root Next.js App Router layout\n and provide theme state to the component tree via React context.\n - **FR-2**: A useTheme hook must expose { theme, toggleTheme } to any component.\n - **FR-3**: A ThemeToggle component must render a Switch and a label (Dark mode).\n - **FR-4**: Toggling the Switch must apply the dark CSS class to the html element.\n - **FR-5**: The selected theme must be persisted to localStorage and restored on load.\n - **FR-6**: ThemeToggle must appear in the settings panel (features/settings/).\n\n ## Non-Functional Requirements\n\n - **NFR-1**: Theme switch must complete within one animation frame (no FOUC).\n - **NFR-2**: All new components must have Storybook stories per project conventions.\n - **NFR-3**: No new npm dependencies may be added; use existing React, Tailwind, shadcn/ui.\n - **NFR-4**: Each new file must stay within the 150-line project guideline.\n\n ## Product Questions & AI Recommendations\n\n | # | Question | AI Recommendation | Rationale |\n | - | -------- | ----------------- | --------- |\n | 1 | Persistence layer? | localStorage | Zero backend changes required |\n | 2 | CSS implementation? | Tailwind dark: class | Already standard in the codebase |\n\n ## Affected Areas\n\n | Area | Impact | Reasoning |\n | ---- | ------ | --------- |\n | src/presentation/web/components/features/settings/ | High | Toggle component added here |\n | src/presentation/web/app/layout.tsx | Medium | ThemeProvider wrapper added |\n | src/presentation/web/components/common/ | Medium | ThemeToggle and ThemeProvider created |\n\n ## Dependencies\n\n - shadcn/ui Switch and Label components (already installed)\n - React context API (built-in)\n - localStorage Web API (built-in)\n\n ## Size Estimate\n\n **M (days)** \u2014 3 phases: context + provider, toggle component, settings integration.\n";
8
- //# sourceMappingURL=spec-requirements.fixture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-requirements.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,yBAAyB,68KA4HrC,CAAC"}