@shipit-ai/cli 1.166.1 → 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 (577) 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 +21 -2
  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/external/github-repository.service.d.ts.map +1 -1
  121. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +14 -3
  122. package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts +7 -0
  123. package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts.map +1 -0
  124. package/dist/packages/core/src/infrastructure/services/settings-reader.service.js +25 -0
  125. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  126. package/dist/src/presentation/cli/commands/feat/new.command.js +18 -0
  127. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  128. package/dist/src/presentation/cli/commands/feat/show.command.js +2 -1
  129. package/dist/src/presentation/cli/commands/settings/agent.command.js +2 -2
  130. package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
  131. package/dist/src/presentation/cli/commands/settings/index.js +3 -1
  132. package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts +19 -0
  133. package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts.map +1 -0
  134. package/dist/src/presentation/cli/commands/settings/permission-modes.js +38 -0
  135. package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts +16 -0
  136. package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts.map +1 -0
  137. package/dist/src/presentation/cli/commands/settings/permissions.command.js +147 -0
  138. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts +4 -10
  139. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
  140. package/dist/src/presentation/tui/prompts/agent-select.prompt.js +8 -13
  141. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts +5 -3
  142. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts.map +1 -1
  143. package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.js +10 -5
  144. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts +17 -0
  145. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts.map +1 -0
  146. package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.js +48 -0
  147. package/dist/src/presentation/tui/wizards/onboarding/types.d.ts +2 -0
  148. package/dist/src/presentation/tui/wizards/onboarding/types.d.ts.map +1 -1
  149. package/dist/src/presentation/web/app/actions/agent-permissions.d.ts +14 -0
  150. package/dist/src/presentation/web/app/actions/agent-permissions.d.ts.map +1 -0
  151. package/dist/src/presentation/web/app/actions/agent-permissions.js +181 -0
  152. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  153. package/dist/src/presentation/web/app/actions/check-agent-auth.js +2 -5
  154. package/dist/src/presentation/web/app/actions/check-agent-tool.js +1 -1
  155. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  156. package/dist/src/presentation/web/app/actions/deploy-repository.js +14 -7
  157. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  158. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +2 -17
  159. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  160. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +67 -23
  161. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  162. package/dist/src/presentation/web/app/actions/open-folder.js +12 -4
  163. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  164. package/dist/src/presentation/web/app/actions/open-shell.js +47 -7
  165. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  166. package/dist/src/presentation/web/app/api/agent-events/route.js +2 -6
  167. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
  168. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +21 -17
  169. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
  170. package/dist/src/presentation/web/app/api/deployment-logs/route.js +2 -6
  171. package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
  172. package/dist/src/presentation/web/app/api/directory/list/route.js +39 -24
  173. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
  174. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +2 -6
  175. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
  176. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +2 -6
  177. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  178. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  179. package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts +2 -0
  180. package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts.map +1 -1
  181. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts +2 -0
  182. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts.map +1 -1
  183. package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.js +6 -0
  184. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts +7 -1
  185. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts.map +1 -1
  186. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.js +24 -3
  187. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts.map +1 -1
  188. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.js +3 -0
  189. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +2 -2
  190. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +2 -2
  191. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  192. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +4 -11
  193. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts +1 -1
  194. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  195. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +5 -6
  196. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -0
  197. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  198. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  199. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -2
  200. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +10 -10
  201. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +1 -1
  202. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +2 -2
  203. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -1
  204. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  205. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +3 -3
  206. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts +8 -0
  207. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts.map +1 -0
  208. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.js +33 -0
  209. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts +15 -0
  210. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts.map +1 -0
  211. package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.js +75 -0
  212. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  213. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +32 -4
  214. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -1
  215. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  216. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +2 -2
  217. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -2
  218. package/dist/src/presentation/web/lib/path-sanitizers.d.ts +50 -0
  219. package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -0
  220. package/dist/src/presentation/web/lib/path-sanitizers.js +137 -0
  221. package/dist/translations/ar/cli.json +16 -0
  222. package/dist/translations/ar/tui.json +12 -10
  223. package/dist/translations/ar/web.json +15 -0
  224. package/dist/translations/de/cli.json +16 -0
  225. package/dist/translations/de/tui.json +13 -5
  226. package/dist/translations/de/web.json +15 -0
  227. package/dist/translations/en/cli.json +16 -0
  228. package/dist/translations/en/tui.json +12 -10
  229. package/dist/translations/en/web.json +15 -0
  230. package/dist/translations/es/cli.json +16 -0
  231. package/dist/translations/es/tui.json +12 -10
  232. package/dist/translations/es/web.json +15 -0
  233. package/dist/translations/fr/cli.json +16 -0
  234. package/dist/translations/fr/tui.json +12 -10
  235. package/dist/translations/fr/web.json +15 -0
  236. package/dist/translations/he/cli.json +16 -0
  237. package/dist/translations/he/tui.json +12 -10
  238. package/dist/translations/he/web.json +15 -0
  239. package/dist/translations/pt/cli.json +16 -0
  240. package/dist/translations/pt/tui.json +12 -10
  241. package/dist/translations/pt/web.json +15 -0
  242. package/dist/translations/ru/cli.json +16 -0
  243. package/dist/translations/ru/tui.json +12 -10
  244. package/dist/translations/ru/web.json +15 -0
  245. package/dist/tsconfig.build.tsbuildinfo +1 -1
  246. package/package.json +6 -6
  247. package/web/.next/BUILD_ID +1 -1
  248. package/web/.next/build-manifest.json +3 -3
  249. package/web/.next/fallback-build-manifest.json +3 -3
  250. package/web/.next/prerender-manifest.json +3 -3
  251. package/web/.next/required-server-files.js +2 -2
  252. package/web/.next/required-server-files.json +2 -2
  253. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  254. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -4
  255. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  256. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  257. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  258. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +3 -4
  259. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  260. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  261. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +72 -60
  262. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +4 -4
  263. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  264. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  265. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  266. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -4
  267. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  268. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  269. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  270. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -4
  271. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  272. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  273. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  274. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +3 -4
  275. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  276. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  277. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  278. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -4
  279. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  280. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  281. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  282. package/web/.next/server/app/(dashboard)/chat/page.js +3 -4
  283. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  284. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  285. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +72 -60
  286. package/web/.next/server/app/(dashboard)/create/page.js +4 -4
  287. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  288. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  289. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  290. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -4
  291. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  292. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  293. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  294. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -4
  295. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  296. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  297. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  298. package/web/.next/server/app/(dashboard)/page.js +3 -4
  299. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  300. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  301. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  302. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +3 -4
  303. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  304. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  305. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  306. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -4
  307. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  308. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  309. package/web/.next/server/app/_global-error.html +1 -1
  310. package/web/.next/server/app/_global-error.rsc +1 -1
  311. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  312. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  313. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  314. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  315. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  316. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  317. package/web/.next/server/app/_not-found/page.js +2 -3
  318. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  319. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  320. package/web/.next/server/app/api/agent-events/route.js +2 -1
  321. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  322. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  323. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  324. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  325. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  326. package/web/.next/server/app/api/deployment-logs/route.js +2 -1
  327. package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
  328. package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
  329. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  330. package/web/.next/server/app/api/directory/list/route.js +1 -1
  331. package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
  332. package/web/.next/server/app/api/evidence/route.js +1 -1
  333. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  334. package/web/.next/server/app/api/graph-data/route.js +1 -1
  335. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  336. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  337. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  338. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +2 -1
  339. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
  340. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +2 -1
  341. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
  342. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  343. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  344. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  345. package/web/.next/server/app/settings/page.js +3 -4
  346. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  347. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  348. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  349. package/web/.next/server/app/skills/page.js +3 -3
  350. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  351. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  352. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  353. package/web/.next/server/app/tools/page.js +3 -3
  354. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  355. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  356. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  357. package/web/.next/server/app/version/page.js +2 -3
  358. package/web/.next/server/app/version/page.js.nft.json +1 -1
  359. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  360. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
  361. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  362. package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js → [root-of-the-server]__08cpfre._.js} +2 -2
  363. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js +3 -0
  364. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -0
  365. package/web/.next/server/chunks/[root-of-the-server]__0aft8l4._.js +9 -0
  366. package/web/.next/server/chunks/{[root-of-the-server]__0_6fhza._.js.map → [root-of-the-server]__0aft8l4._.js.map} +1 -1
  367. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js +3 -0
  368. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -0
  369. package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js → [root-of-the-server]__0gfvkg8._.js} +2 -2
  370. package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js → [root-of-the-server]__0hcp97v._.js} +2 -2
  371. package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js → [root-of-the-server]__0iel39d._.js} +2 -2
  372. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js +12 -0
  373. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js.map +1 -0
  374. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js +9 -0
  375. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js.map +1 -0
  376. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  377. package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js → [root-of-the-server]__0u1jyv9._.js} +2 -2
  378. package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js → [root-of-the-server]__0zu_byw._.js} +2 -2
  379. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js +18 -0
  380. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js.map +1 -0
  381. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  382. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  383. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  384. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  385. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  386. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  387. package/web/.next/server/chunks/ssr/{_01mq~sm._.js → 11es_next_0q-kz~8._.js} +2 -2
  388. package/web/.next/server/chunks/ssr/11es_next_0q-kz~8._.js.map +1 -0
  389. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  390. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  391. package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js +4 -0
  392. package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js.map +1 -0
  393. package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js +4 -0
  394. package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js.map +1 -0
  395. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +4 -0
  396. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -0
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js +3 -0
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js.map +1 -0
  399. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js → [root-of-the-server]__0q3-gz.._.js} +2 -2
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js +4 -0
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js.map +1 -0
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +4 -0
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -0
  405. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +4 -0
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js.map +1 -0
  407. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js +4 -0
  408. package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js.map +1 -0
  409. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +4 -0
  410. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -0
  411. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +1 -1
  412. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  413. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  414. package/web/.next/server/chunks/ssr/_069y.js._.js +6 -0
  415. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -0
  416. package/web/.next/server/chunks/ssr/_0__4si~._.js +4 -0
  417. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -0
  418. package/web/.next/server/chunks/ssr/_0_m17kl._.js +4 -0
  419. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -0
  420. package/web/.next/server/chunks/ssr/_0d4miu.._.js +4 -0
  421. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -0
  422. package/web/.next/server/chunks/ssr/_0e8ern9._.js +4 -0
  423. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -0
  424. package/web/.next/server/chunks/ssr/{_0e4npv~._.js → _0l10ccg._.js} +2 -2
  425. package/web/.next/server/chunks/ssr/_0l10ccg._.js.map +1 -0
  426. package/web/.next/server/chunks/ssr/_0mo6j.n._.js +3 -0
  427. package/web/.next/server/chunks/ssr/_0mo6j.n._.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/{_0nvrqsj._.js → _0mvhe_2._.js} +2 -2
  429. package/web/.next/server/chunks/ssr/{_0nvrqsj._.js.map → _0mvhe_2._.js.map} +1 -1
  430. package/web/.next/server/chunks/ssr/{_109n-y4._.js → _0n.magx._.js} +2 -2
  431. package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -0
  432. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +6 -0
  433. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +4 -0
  435. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/_0t59q8r._.js +4 -0
  437. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -0
  438. package/web/.next/server/chunks/ssr/_0tcccbb._.js +3 -0
  439. package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -0
  440. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  441. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  442. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  443. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  444. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +4 -0
  445. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -0
  446. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  447. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  448. package/web/.next/server/chunks/ssr/_1161g9x._.js +4 -0
  449. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +3 -0
  451. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -0
  452. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +3 -0
  453. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -0
  454. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +3 -0
  455. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -0
  456. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  457. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  458. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  459. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  460. package/web/.next/server/middleware-build-manifest.js +3 -3
  461. package/web/.next/server/pages/500.html +1 -1
  462. package/web/.next/server/server-reference-manifest.js +1 -1
  463. package/web/.next/server/server-reference-manifest.json +127 -109
  464. package/web/.next/static/chunks/{0awttldb-.7m..js → 0.8ue6wwr7ni~.js} +1 -1
  465. package/web/.next/static/chunks/{0d-2jp.f._l2e.js → 028x3z97mchhz.js} +1 -1
  466. package/web/.next/static/chunks/044f5piy5pt5t.js +1 -0
  467. package/web/.next/static/chunks/04~sw.nhpwy6s.css +1 -0
  468. package/web/.next/static/chunks/05enics63g._-.js +7 -0
  469. package/web/.next/static/chunks/0_.x~txb5da7d.js +1 -0
  470. package/web/.next/static/chunks/0_9k2ybutuphq.js +1 -0
  471. package/web/.next/static/chunks/{14g1l3~6i5251.js → 0hti2r43x0~b7.js} +2 -2
  472. package/web/.next/static/chunks/0jo5-_q.1n69j.js +1 -0
  473. package/web/.next/static/chunks/{0t8zwgaz.d1s5.js → 0n3u~4ytndfyd.js} +1 -1
  474. package/web/.next/static/chunks/{0nk2r-18.7g6r.js → 0pyz97q7eg0jz.js} +1 -1
  475. package/web/.next/static/chunks/0qqe9hx_txhso.js +1 -0
  476. package/web/.next/static/chunks/{0ntgq3d_.m5el.js → 0vx7ldqj8436q.js} +2 -2
  477. package/web/.next/static/chunks/11~m1ei9bh269.js +3 -0
  478. package/web/.next/static/chunks/{09dqgshddfxff.js → 13w6ziae82sjy.js} +1 -1
  479. package/web/.next/static/chunks/16.83v.xq8bn9.js +1 -0
  480. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts +0 -12
  481. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +0 -1
  482. package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +0 -233
  483. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts +0 -8
  484. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts.map +0 -1
  485. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.js +0 -94
  486. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +0 -8
  487. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts.map +0 -1
  488. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +0 -140
  489. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts +0 -8
  490. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts.map +0 -1
  491. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.js +0 -81
  492. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts +0 -8
  493. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts.map +0 -1
  494. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.js +0 -131
  495. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +0 -6
  496. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts.map +0 -1
  497. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +0 -146
  498. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js +0 -9
  499. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js.map +0 -1
  500. package/web/.next/server/chunks/[root-of-the-server]__0_6fhza._.js +0 -9
  501. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js +0 -12
  502. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js.map +0 -1
  503. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js +0 -3
  504. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js.map +0 -1
  505. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js +0 -18
  506. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js.map +0 -1
  507. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js +0 -3
  508. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js.map +0 -1
  509. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +0 -3
  510. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +0 -1
  511. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +0 -3
  512. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +0 -1
  513. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +0 -3
  514. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +0 -1
  515. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js +0 -3
  516. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +0 -1
  517. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +0 -3
  518. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +0 -1
  519. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +0 -3
  520. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js.map +0 -1
  521. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +0 -3
  522. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +0 -1
  523. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js +0 -3
  524. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +0 -1
  525. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +0 -4
  526. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js.map +0 -1
  527. package/web/.next/server/chunks/ssr/_0.rsra~._.js +0 -3
  528. package/web/.next/server/chunks/ssr/_0.rsra~._.js.map +0 -1
  529. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +0 -1
  530. package/web/.next/server/chunks/ssr/_0a-ddx-._.js +0 -3
  531. package/web/.next/server/chunks/ssr/_0a-ddx-._.js.map +0 -1
  532. package/web/.next/server/chunks/ssr/_0e4npv~._.js.map +0 -1
  533. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +0 -4
  534. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +0 -1
  535. package/web/.next/server/chunks/ssr/_109n-y4._.js.map +0 -1
  536. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +0 -3
  537. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +0 -1
  538. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +0 -3
  539. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +0 -1
  540. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +0 -5
  541. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +0 -1
  542. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +0 -3
  543. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +0 -1
  544. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +0 -3
  545. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +0 -1
  546. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +0 -5
  547. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +0 -1
  548. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +0 -3
  549. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +0 -1
  550. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +0 -3
  551. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +0 -1
  552. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +0 -3
  553. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +0 -1
  554. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +0 -3
  555. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +0 -1
  556. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +0 -3
  557. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +0 -1
  558. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +0 -3
  559. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js.map +0 -1
  560. package/web/.next/static/chunks/00dg6gti40.3i.js +0 -1
  561. package/web/.next/static/chunks/0_--5mgqukm__.js +0 -1
  562. package/web/.next/static/chunks/0_c5~n__lz4ks.js +0 -1
  563. package/web/.next/static/chunks/0ist7260j__0m.js +0 -3
  564. package/web/.next/static/chunks/0j_0i2qsrwh-c.js +0 -1
  565. package/web/.next/static/chunks/0njrgvmyafrod.js +0 -1
  566. package/web/.next/static/chunks/0r5dju6f1-i38.css +0 -1
  567. package/web/.next/static/chunks/0t.pzrmeoq6th.js +0 -7
  568. /package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js.map → [root-of-the-server]__08cpfre._.js.map} +0 -0
  569. /package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js.map → [root-of-the-server]__0gfvkg8._.js.map} +0 -0
  570. /package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js.map → [root-of-the-server]__0hcp97v._.js.map} +0 -0
  571. /package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js.map → [root-of-the-server]__0iel39d._.js.map} +0 -0
  572. /package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js.map → [root-of-the-server]__0u1jyv9._.js.map} +0 -0
  573. /package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js.map → [root-of-the-server]__0zu_byw._.js.map} +0 -0
  574. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js.map → [root-of-the-server]__0q3-gz.._.js.map} +0 -0
  575. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_buildManifest.js +0 -0
  576. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_clientMiddlewareManifest.js +0 -0
  577. /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_ssgManifest.js +0 -0
@@ -1,8 +1,9 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { readFile, realpath } from 'fs/promises';
3
- import { extname, basename, resolve as resolvePath, sep } from 'path';
2
+ import { readFile } from 'fs/promises';
3
+ import { extname, basename, resolve as resolvePath } from 'path';
4
4
  import { homedir } from 'node:os';
5
5
  import { resolve } from '../../../../lib/server-container.js';
6
+ import { realpathWithinAllowedRootsAsync } from '../../../../lib/path-sanitizers.js';
6
7
  const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB
7
8
  const ALLOWED_EXTENSIONS = new Set([
8
9
  '.png',
@@ -91,25 +92,28 @@ export async function POST(request) {
91
92
  : 'Files without an extension are not allowed',
92
93
  }, { status: 400 });
93
94
  }
94
- // Path containment: resolve symlinks then verify within allowed roots
95
- let physicalPath;
96
- try {
97
- physicalPath = await realpath(resolvePath(path));
98
- }
99
- catch {
95
+ // Path containment: resolve symlinks and verify within allowed roots
96
+ // in a single helper call. `physicalPath` is the single authoritative
97
+ // value — every subsequent filesystem call uses it, never the raw
98
+ // `path` input. This eliminates the TOCTOU window between the
99
+ // containment check and the read, and gives CodeQL a clean
100
+ // sanitizer→sink flow for js/path-injection.
101
+ const physicalPath = await realpathWithinAllowedRootsAsync(resolvePath(path), [
102
+ process.cwd(),
103
+ homedir(),
104
+ ]);
105
+ if (!physicalPath) {
106
+ // Could be a missing file OR a path outside the allowed roots. Return
107
+ // a single generic 404 either way — leaking the distinction would
108
+ // let an attacker probe for existence of arbitrary paths on the host.
100
109
  return NextResponse.json({ error: 'File not found or unreadable' }, { status: 404 });
101
110
  }
102
- const allowedRoots = [
103
- await realpath(process.cwd()).catch(() => process.cwd()),
104
- await realpath(homedir()).catch(() => homedir()),
105
- ];
106
- const isAllowed = allowedRoots.some((root) => physicalPath === root || physicalPath.startsWith(root + sep));
107
- if (!isAllowed) {
108
- return NextResponse.json({ error: 'Access denied' }, { status: 403 });
109
- }
110
111
  let buffer;
111
112
  try {
112
- buffer = await readFile(resolvePath(path));
113
+ // Read using the validated physicalPath, NOT a re-resolution of `path`.
114
+ // This closes the TOCTOU gap where a symlink could be swapped between
115
+ // the containment check and the read.
116
+ buffer = await readFile(physicalPath);
113
117
  }
114
118
  catch {
115
119
  return NextResponse.json({ error: 'File not found or unreadable' }, { status: 404 });
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/deployment-logs/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAIvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAuF9C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/deployment-logs/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAIvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAkF9C"}
@@ -11,6 +11,7 @@
11
11
  * - Cleans up EventEmitter subscription on client disconnect
12
12
  */
13
13
  import { resolve } from '../../../lib/server-container.js';
14
+ import { apiError } from '../../../lib/api-helpers.js';
14
15
  // Force dynamic — SSE streams must never be statically optimized or cached
15
16
  export const dynamic = 'force-dynamic';
16
17
  const HEARTBEAT_INTERVAL_MS = 30_000;
@@ -84,11 +85,6 @@ export function GET(request) {
84
85
  });
85
86
  }
86
87
  catch (error) {
87
- // eslint-disable-next-line no-console
88
- console.error('[SSE route] GET /api/deployment-logs error:', error);
89
- return new Response(JSON.stringify({ error: String(error) }), {
90
- status: 500,
91
- headers: { 'Content-Type': 'application/json' },
92
- });
88
+ return apiError(500, 'Failed to open deployment logs stream', error);
93
89
  }
94
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/directory/list/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAa3C,wBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAgGjE"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/directory/list/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,wBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAyGjE"}
@@ -1,8 +1,9 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { readdir, realpath, stat } from 'node:fs/promises';
2
+ import { readdir, stat } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import path from 'node:path';
5
5
  import { apiError } from '../../../../lib/api-helpers.js';
6
+ import { realpathWithinAllowedRootsAsync } from '../../../../lib/path-sanitizers.js';
6
7
  export async function GET(request) {
7
8
  const url = new URL(request.url);
8
9
  const rawPath = url.searchParams.get('path') ?? homedir();
@@ -10,25 +11,33 @@ export async function GET(request) {
10
11
  if (!path.isAbsolute(rawPath)) {
11
12
  return NextResponse.json({ error: 'Path must be absolute' }, { status: 400 });
12
13
  }
13
- const resolvedPath = path.resolve(rawPath);
14
- // Path containment: resolve symlinks then verify within allowed roots
15
- let physicalPath;
16
- try {
17
- physicalPath = await realpath(resolvedPath);
18
- }
19
- catch {
14
+ // Keep two names for the same directory:
15
+ //
16
+ // - `displayPath` is what the client originally asked for (after
17
+ // path.resolve normalization). It's what the UI shows in the
18
+ // breadcrumb and what we echo back as `currentPath`. This matches
19
+ // user expectation — e.g. on macOS the user sees /tmp/foo, not the
20
+ // realpath'd /private/tmp/foo.
21
+ //
22
+ // - `physicalPath` is the realpath'd absolute path produced by the
23
+ // path-containment sanitizer. Every FILESYSTEM operation (stat,
24
+ // readdir, per-entry joins) uses this value, NEVER the display
25
+ // path. That gives CodeQL a clean sanitizer→sink flow for
26
+ // js/path-injection and closes the TOCTOU window where a symlink
27
+ // could be swapped between the containment check and the read.
28
+ const displayPath = path.resolve(rawPath);
29
+ const physicalPath = await realpathWithinAllowedRootsAsync(displayPath, [
30
+ process.cwd(),
31
+ homedir(),
32
+ ]);
33
+ if (!physicalPath) {
34
+ // Could be a missing directory OR a path outside the allowed roots.
35
+ // Return a uniform 404 either way so we don't leak existence of
36
+ // arbitrary paths on the host.
20
37
  return NextResponse.json({ error: 'Directory not found' }, { status: 404 });
21
38
  }
22
- const allowedRoots = [
23
- await realpath(process.cwd()).catch(() => process.cwd()),
24
- await realpath(homedir()).catch(() => homedir()),
25
- ];
26
- const isAllowed = allowedRoots.some((root) => physicalPath === root || physicalPath.startsWith(root + path.sep));
27
- if (!isAllowed) {
28
- return NextResponse.json({ error: 'Access denied' }, { status: 403 });
29
- }
30
39
  try {
31
- const dirStat = await stat(resolvedPath);
40
+ const dirStat = await stat(physicalPath);
32
41
  if (!dirStat.isDirectory()) {
33
42
  return NextResponse.json({ error: 'Path is not a directory' }, { status: 400 });
34
43
  }
@@ -40,29 +49,35 @@ export async function GET(request) {
40
49
  return apiError(500, 'Failed to access directory', error);
41
50
  }
42
51
  try {
43
- const dirents = await readdir(resolvedPath, { withFileTypes: true });
52
+ const dirents = await readdir(physicalPath, { withFileTypes: true });
44
53
  const entries = [];
45
54
  const entryPromises = dirents.map(async (dirent) => {
46
55
  if (!showHidden && dirent.name.startsWith('.')) {
47
56
  return null;
48
57
  }
49
- const entryPath = path.join(resolvedPath, dirent.name);
58
+ // Build two path forms per entry: a physical path for stat() and a
59
+ // display path for the response payload. The client navigates using
60
+ // the display path on subsequent requests, so it must match the
61
+ // user-visible form of the parent directory — never the realpath'd
62
+ // form, which would surprise the user with /private/tmp on macOS.
63
+ const physicalEntry = path.join(physicalPath, dirent.name);
64
+ const displayEntry = path.join(displayPath, dirent.name);
50
65
  try {
51
66
  if (dirent.isDirectory()) {
52
- const entryStat = await stat(entryPath);
67
+ const entryStat = await stat(physicalEntry);
53
68
  return {
54
69
  name: dirent.name,
55
- path: entryPath,
70
+ path: displayEntry,
56
71
  isDirectory: true,
57
72
  updatedAt: entryStat.mtime.toISOString(),
58
73
  };
59
74
  }
60
75
  if (dirent.isSymbolicLink()) {
61
- const entryStat = await stat(entryPath);
76
+ const entryStat = await stat(physicalEntry);
62
77
  if (entryStat.isDirectory()) {
63
78
  return {
64
79
  name: dirent.name,
65
- path: entryPath,
80
+ path: displayEntry,
66
81
  isDirectory: true,
67
82
  updatedAt: entryStat.mtime.toISOString(),
68
83
  };
@@ -80,7 +95,7 @@ export async function GET(request) {
80
95
  entries.push(result);
81
96
  }
82
97
  }
83
- return NextResponse.json({ entries, currentPath: resolvedPath });
98
+ return NextResponse.json({ entries, currentPath: displayPath });
84
99
  }
85
100
  catch (error) {
86
101
  return apiError(500, 'Failed to read directory', error);
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4E1F"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuE1F"}
@@ -10,6 +10,7 @@
10
10
  * `featureId` is a polymorphic scope key: a feature UUID, "repo-<id>", or "global".
11
11
  */
12
12
  import { resolve } from '../../../../../../lib/server-container.js';
13
+ import { apiError } from '../../../../../../lib/api-helpers.js';
13
14
  export const dynamic = 'force-dynamic';
14
15
  export async function GET(request, { params }) {
15
16
  const { featureId } = await params;
@@ -77,11 +78,6 @@ export async function GET(request, { params }) {
77
78
  });
78
79
  }
79
80
  catch (error) {
80
- // eslint-disable-next-line no-console
81
- console.error('[GET /api/interactive/chat/:featureId/stream]', error);
82
- return new Response(JSON.stringify({ error: String(error) }), {
83
- status: 500,
84
- headers: { 'Content-Type': 'application/json' },
85
- });
81
+ return apiError(500, 'Failed to open chat stream', error);
86
82
  }
87
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/sessions/[id]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoF1F"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/sessions/[id]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+E1F"}
@@ -8,6 +8,7 @@
8
8
  * - Cleans up listener when the client disconnects
9
9
  */
10
10
  import { resolve } from '../../../../../../lib/server-container.js';
11
+ import { apiError } from '../../../../../../lib/api-helpers.js';
11
12
  export const dynamic = 'force-dynamic';
12
13
  export async function GET(request, { params }) {
13
14
  const { id: sessionId } = await params;
@@ -82,11 +83,6 @@ export async function GET(request, { params }) {
82
83
  });
83
84
  }
84
85
  catch (error) {
85
- // eslint-disable-next-line no-console
86
- console.error('[GET /api/interactive/sessions/:id/stream]', error);
87
- return new Response(JSON.stringify({ error: String(error) }), {
88
- status: 500,
89
- headers: { 'Content-Type': 'application/json' },
90
- });
86
+ return apiError(500, 'Failed to open interactive session stream', error);
91
87
  }
92
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAM5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3F,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,wBAAwB,2CA6L1B"}
1
+ {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAM5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3F,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,wBAAwB,2CAgM1B"}
@@ -46,5 +46,5 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
46
46
  form.validRepoPath.split('/').pop() })] })) : null, _jsx(PromptSection, { description: form.description, onDescriptionChange: form.setDescription, attachments: form.attachments, onRemoveFile: form.handleRemoveFile, onNotesChange: form.handleNotesChange, onPaste: form.handlePaste, onDragEnter: form.handleDragEnter, onDragLeave: form.handleDragLeave, onDragOver: form.handleDragOver, onDrop: form.handleDrop, onAddFiles: form.handleAddFiles, isDragOver: form.isDragOver, uploadError: form.uploadError, isPromptFocused: form.isPromptFocused, onPromptFocus: () => form.setIsPromptFocused(true), onPromptBlur: () => form.setIsPromptFocused(false), fast: form.fast, onFastChange: form.setFast, pending: form.pending, onPendingChange: form.setPending, overrideAgent: form.overrideAgent, overrideModel: form.overrideModel, currentAgentType: currentAgentType, currentModel: currentModel, onAgentModelChange: (agent, model) => {
47
47
  form.setOverrideAgent(agent);
48
48
  form.setOverrideModel(model);
49
- }, isSubmitting: isSubmitting }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: t('createDrawer.parentFeature') }), _jsx(ParentFeatureCombobox, { features: features, value: form.parentId, onChange: form.setParentId, disabled: isSubmitting })] })) : null, _jsx(WorkflowOptionsSection, { approvalGates: form.approvalGates, onApprovalGatesChange: form.setApprovalGates, enableEvidence: form.enableEvidence, onEnableEvidenceChange: form.setEnableEvidence, commitEvidence: form.commitEvidence, onCommitEvidenceChange: form.setCommitEvidence, push: form.push, onPushChange: form.setPush, openPr: form.openPr, onOpenPrChange: form.setOpenPr, ciWatchEnabled: form.ciWatchEnabled, onCiWatchChange: form.setCiWatchEnabled, rebaseBeforeBranch: form.rebaseBeforeBranch, onRebaseBeforeBranchChange: form.setRebaseBeforeBranch, commitSpecs: form.commitSpecs, onCommitSpecsChange: form.setCommitSpecs, forkAndPr: form.forkAndPr, onForkAndPrChange: form.setForkAndPr, canPush: form.canPush, fast: form.fast, computedPush: form.computedPush, computedOpenPr: form.computedOpenPr, isSubmitting: isSubmitting })] }) }) }) }));
49
+ }, isSubmitting: isSubmitting }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: t('createDrawer.parentFeature') }), _jsx(ParentFeatureCombobox, { features: features, value: form.parentId, onChange: form.setParentId, disabled: isSubmitting })] })) : null, _jsx(WorkflowOptionsSection, { approvalGates: form.approvalGates, onApprovalGatesChange: form.setApprovalGates, enableEvidence: form.enableEvidence, onEnableEvidenceChange: form.setEnableEvidence, commitEvidence: form.commitEvidence, onCommitEvidenceChange: form.setCommitEvidence, push: form.push, onPushChange: form.setPush, openPr: form.openPr, onOpenPrChange: form.setOpenPr, ciWatchEnabled: form.ciWatchEnabled, onCiWatchChange: form.setCiWatchEnabled, rebaseBeforeBranch: form.rebaseBeforeBranch, onRebaseBeforeBranchChange: form.setRebaseBeforeBranch, commitSpecs: form.commitSpecs, onCommitSpecsChange: form.setCommitSpecs, forkAndPr: form.forkAndPr, onForkAndPrChange: form.setForkAndPr, canPush: form.canPush, fast: form.fast, computedPush: form.computedPush, computedOpenPr: form.computedOpenPr, isSubmitting: isSubmitting, agentType: form.overrideAgent ?? currentAgentType, permissionMode: form.permissionMode, onPermissionModeChange: form.setPermissionMode })] }) }) }) }));
50
50
  }
@@ -50,6 +50,8 @@ export interface FeatureCreatePayload {
50
50
  agentType?: string;
51
51
  /** Optional model override for this feature run */
52
52
  model?: string;
53
+ /** Optional per-feature permission mode override (overrides agent default from settings) */
54
+ permissionMode?: string;
53
55
  sessionId?: string;
54
56
  }
55
57
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAElG,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAElG,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -50,6 +50,8 @@ export declare function useFeatureCreateForm({ open, onClose, onSubmit, reposito
50
50
  setOverrideAgent: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
51
51
  overrideModel: string | undefined;
52
52
  setOverrideModel: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
53
+ permissionMode: string | undefined;
54
+ setPermissionMode: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
53
55
  selectedRepoPath: string | undefined;
54
56
  setSelectedRepoPath: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
55
57
  localRepos: RepositoryOption[];
@@ -1 +1 @@
1
- {"version":3,"file":"use-feature-create-form.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyEtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAwJuB,IAAI,EAAE;yBA8Df,KAAK,CAAC,SAAS;yBASf,KAAK,CAAC,SAAS;wBAShB,KAAK,CAAC,SAAS;oBAMhD,KAAK,CAAC,SAAS;qBAef,KAAK,CAAC,cAAc;sBAqBpB,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;;2BA6GI,MAAM;4BAIL,MAAM,SAAS,MAAM;;EA2EjE"}
1
+ {"version":3,"file":"use-feature-create-form.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyEtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA0JuB,IAAI,EAAE;yBA8Df,KAAK,CAAC,SAAS;yBASf,KAAK,CAAC,SAAS;wBAShB,KAAK,CAAC,SAAS;oBAMhD,KAAK,CAAC,SAAS;qBAef,KAAK,CAAC,cAAc;sBAqBpB,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;;2BA+GI,MAAM;4BAIL,MAAM,SAAS,MAAM;;EA6EjE"}
@@ -111,6 +111,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
111
111
  const [rebaseBeforeBranch, setRebaseBeforeBranch] = useState(true);
112
112
  const [overrideAgent, setOverrideAgent] = useState(undefined);
113
113
  const [overrideModel, setOverrideModel] = useState(undefined);
114
+ const [permissionMode, setPermissionMode] = useState(undefined);
114
115
  const [selectedRepoPath, setSelectedRepoPath] = useState(validRepoPath || undefined);
115
116
  const [localRepos, setLocalRepos] = useState(repositories ?? []);
116
117
  const [isDragOver, setIsDragOver] = useState(false);
@@ -185,6 +186,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
185
186
  setRebaseBeforeBranch(true);
186
187
  setOverrideAgent(undefined);
187
188
  setOverrideModel(undefined);
189
+ setPermissionMode(undefined);
188
190
  setUploadError(null);
189
191
  dragCounterRef.current = 0;
190
192
  setIsDragOver(false);
@@ -334,6 +336,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
334
336
  ...(pending ? { pending } : {}),
335
337
  ...(overrideAgent ? { agentType: overrideAgent } : {}),
336
338
  ...(overrideModel ? { model: overrideModel } : {}),
339
+ ...(permissionMode ? { permissionMode } : {}),
337
340
  ...(parentId ? { parentId } : {}),
338
341
  sessionId: sessionIdRef.current,
339
342
  });
@@ -357,6 +360,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
357
360
  pending,
358
361
  overrideAgent,
359
362
  overrideModel,
363
+ permissionMode,
360
364
  parentId,
361
365
  createSound,
362
366
  resetForm,
@@ -456,6 +460,8 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
456
460
  setOverrideAgent,
457
461
  overrideModel,
458
462
  setOverrideModel,
463
+ permissionMode,
464
+ setPermissionMode,
459
465
  selectedRepoPath,
460
466
  setSelectedRepoPath,
461
467
  localRepos,
@@ -22,6 +22,12 @@ export interface WorkflowOptionsSectionProps {
22
22
  computedPush: boolean;
23
23
  computedOpenPr: boolean;
24
24
  isSubmitting: boolean;
25
+ /** Currently selected agent type (for permission mode options) */
26
+ agentType?: string;
27
+ /** Selected per-feature permission mode override */
28
+ permissionMode?: string;
29
+ /** Callback when permission mode changes */
30
+ onPermissionModeChange?: (mode: string | undefined) => void;
25
31
  }
26
- export declare function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, }: WorkflowOptionsSectionProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, agentType, permissionMode, onPermissionModeChange, }: WorkflowOptionsSectionProps): import("react/jsx-runtime").JSX.Element;
27
33
  //# sourceMappingURL=workflow-options-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-options-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,IAAI,EAAE,KAAK,EACX,YAAY,EACZ,MAAM,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,YAAY,GACb,EAAE,2BAA2B,2CA4S7B"}
1
+ {"version":3,"file":"workflow-options-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx"],"names":[],"mappings":"AAoBA,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC7D;AAED,wBAAgB,sBAAsB,CAAC,EACrC,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,IAAI,EAAE,KAAK,EACX,YAAY,EACZ,MAAM,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,sBAAsB,GACvB,EAAE,2BAA2B,2CAsT7B"}
@@ -1,13 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
3
4
  import { useTranslation } from 'react-i18next';
4
- import { GitFork, FileText, RefreshCw } from 'lucide-react';
5
+ import { GitFork, FileText, RefreshCw, Shield } from 'lucide-react';
5
6
  import { cn } from '../../../lib/utils.js';
6
7
  import { Label } from '../../ui/label.js';
7
8
  import { Switch } from '../../ui/switch.js';
9
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
8
10
  import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip.js';
11
+ import { getAgentPermissionOptions } from '../../../app/actions/agent-permissions.js';
9
12
  const AUTO_APPROVE_OPTION_IDS = ['allowPrd', 'allowPlan', 'allowMerge'];
10
- export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, }) {
13
+ export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, agentType, permissionMode, onPermissionModeChange, }) {
11
14
  const { t } = useTranslation('web');
12
15
  const AUTO_APPROVE_OPTIONS = [
13
16
  { id: 'allowPrd', label: t('createDrawer.prd'), description: t('createDrawer.prdDescription') },
@@ -51,5 +54,23 @@ export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, e
51
54
  // Auto-flip commitSpecs to false when enabling contribute mode
52
55
  if (v)
53
56
  onCommitSpecsChange(false);
54
- }, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fork-and-pr", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(GitFork, { className: "h-3 w-3" }), t('createDrawer.forkAndPr')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.forkAndPrDescription') })] }))] })] })] }));
57
+ }, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fork-and-pr", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(GitFork, { className: "h-3 w-3" }), t('createDrawer.forkAndPr')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.forkAndPrDescription') })] }))] })] }), agentType && onPermissionModeChange ? (_jsx(PermissionModeRow, { agentType: agentType, permissionMode: permissionMode, onPermissionModeChange: onPermissionModeChange, isSubmitting: isSubmitting })) : null] }));
58
+ }
59
+ /** Internal sub-component for the permission mode select in the workflow options row. */
60
+ function PermissionModeRow({ agentType, permissionMode, onPermissionModeChange, isSubmitting, }) {
61
+ const { t } = useTranslation('web');
62
+ const [options, setOptions] = useState([]);
63
+ useEffect(() => {
64
+ let cancelled = false;
65
+ getAgentPermissionOptions(agentType).then((opts) => {
66
+ if (!cancelled)
67
+ setOptions(opts);
68
+ });
69
+ return () => {
70
+ cancelled = true;
71
+ };
72
+ }, [agentType]);
73
+ if (options.length === 0)
74
+ return null;
75
+ return (_jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground flex w-16 shrink-0 cursor-default items-center gap-1 text-xs font-semibold tracking-wider", children: [_jsx(Shield, { className: "h-3 w-3" }), t('feature.create.permissionMode')] }) }), _jsx(TooltipContent, { side: "bottom", children: t('settings.agent.permissions.description', { agent: agentType }) })] }), _jsx("div", { className: "flex-1", children: _jsxs(Select, { value: permissionMode ?? '__default__', onValueChange: (v) => onPermissionModeChange(v === '__default__' ? undefined : v), disabled: isSubmitting, children: [_jsx(SelectTrigger, { id: "permission-mode", "data-testid": "permission-mode-select", className: "h-7 text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__default__", children: t('feature.create.permissionModeDefault') }), options.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value)))] })] }) })] }));
55
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-options-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,CAyC7C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErD,kEAAkE;AAClE,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,EAAE,KAI9B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,KAI7B,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAC"}
1
+ {"version":3,"file":"workflow-options-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,CA4C7C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErD,kEAAkE;AAClE,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,EAAE,KAI9B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,KAI7B,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAC"}
@@ -36,6 +36,9 @@ const meta = {
36
36
  computedPush: false,
37
37
  computedOpenPr: false,
38
38
  isSubmitting: false,
39
+ agentType: 'claude-code',
40
+ permissionMode: undefined,
41
+ onPermissionModeChange: fn(),
39
42
  },
40
43
  };
41
44
  export default meta;
@@ -67,8 +67,8 @@ export const WithClickHandler = {
67
67
  args: {
68
68
  name: 'API Gateway',
69
69
  status: 'action-needed',
70
- agentType: 'dev',
71
- modelId: 'gpt-8',
70
+ agentType: 'gemini-cli',
71
+ modelId: 'gemini-2.5-pro',
72
72
  onClick: () => alert('Clicked!'),
73
73
  },
74
74
  };
@@ -1,6 +1,6 @@
1
1
  import type { ComponentType, SVGProps } from 'react';
2
- /** Agent type values mirroring the TypeSpec AgentType enum. */
3
- export type AgentTypeValue = 'claude-code' | 'codex-cli' | 'cursor' | 'gemini-cli' | 'aider' | 'continue' | 'dev';
2
+ /** Agent type values mirroring the TypeSpec AgentType enum (UI-visible subset). */
3
+ export type AgentTypeValue = 'claude-code' | 'codex-cli' | 'copilot-cli' | 'cursor' | 'gemini-cli' | 'rovo-dev';
4
4
  type IconProps = SVGProps<SVGSVGElement> & {
5
5
  className?: string;
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-type-icons.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIrD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,2CAOhD;AA4DD,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQ1D,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAK7E"}
1
+ {"version":3,"file":"agent-type-icons.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIrD,mFAAmF;AACnF,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,UAAU,CAAC;AAEf,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,2CAOhD;AAWD,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAO1D,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAK7E"}
@@ -13,29 +13,22 @@ function createBrandIcon(src, alt) {
13
13
  export function DefaultAgentIcon(props) {
14
14
  return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [_jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2" }), _jsx("circle", { cx: "12", cy: "12", r: "3", fill: "currentColor" })] }));
15
15
  }
16
- /** Colorful flask icon for the Demo Executor agent. */
17
- function DevAgentIcon({ className, ...props }) {
18
- return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: cn('h-6 w-6', className), ...props, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "dev-flask-grad", x1: "6", y1: "22", x2: "18", y2: "8", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0%", stopColor: "#8B5CF6" }), _jsx("stop", { offset: "50%", stopColor: "#EC4899" }), _jsx("stop", { offset: "100%", stopColor: "#F59E0B" })] }) }), _jsx("path", { d: "M9 2h6v6l4.5 9a2 2 0 0 1-1.79 2.89H6.29A2 2 0 0 1 4.5 17L9 8V2z", fill: "url(#dev-flask-grad)", opacity: "0.9" }), _jsx("path", { d: "M9 2h6v6l4.5 9a2 2 0 0 1-1.79 2.89H6.29A2 2 0 0 1 4.5 17L9 8V2z", stroke: "url(#dev-flask-grad)", strokeWidth: "1.5", fill: "none" }), _jsx("circle", { cx: "10", cy: "14", r: "1.2", fill: "white", opacity: "0.7" }), _jsx("circle", { cx: "13.5", cy: "16", r: "0.8", fill: "white", opacity: "0.5" }), _jsx("circle", { cx: "11.5", cy: "17.5", r: "0.6", fill: "white", opacity: "0.4" }), _jsx("path", { d: "M16 4l1-2 1 2-2 1 2 1-1 2-1-2-2-1z", fill: "#F59E0B" })] }));
19
- }
20
- DevAgentIcon.displayName = 'DevAgentIcon';
21
16
  const agentTypeIconMap = {
22
17
  'claude-code': createBrandIcon('/icons/agents/claude-ai-icon.svg', 'Claude Code'),
23
18
  'codex-cli': createBrandIcon('/icons/agents/openai.svg', 'Codex CLI'),
19
+ 'copilot-cli': DefaultAgentIcon,
24
20
  cursor: createBrandIcon('/icons/agents/cursor.jpeg', 'Cursor'),
25
21
  'gemini-cli': createBrandIcon('/icons/agents/gemini-cli.jpeg', 'Gemini CLI'),
26
- aider: createBrandIcon('/icons/agents/aider.png', 'Aider'),
27
- continue: createBrandIcon('/icons/agents/continue.jpeg', 'Continue'),
28
- dev: DevAgentIcon,
22
+ 'rovo-dev': DefaultAgentIcon,
29
23
  };
30
24
  /** Human-readable labels for agent types. */
31
25
  export const agentTypeLabels = {
32
26
  'claude-code': 'Claude Code',
33
27
  'codex-cli': 'Codex CLI',
28
+ 'copilot-cli': 'GitHub Copilot CLI',
34
29
  cursor: 'Cursor',
35
30
  'gemini-cli': 'Gemini CLI',
36
- aider: 'Aider',
37
- continue: 'Continue',
38
- dev: 'Demo',
31
+ 'rovo-dev': 'Rovo Dev CLI',
39
32
  };
40
33
  /** Resolve an agent type string to its corresponding icon component. */
41
34
  export function getAgentTypeIcon(agentType) {
@@ -5,5 +5,5 @@ type Story = StoryObj;
5
5
  export declare const AllIcons: Story;
6
6
  export declare const SmallIcons: Story;
7
7
  export declare const LargeIcons: Story;
8
- export declare const DevAgentIcon: Story;
8
+ export declare const FallbackIcon: Story;
9
9
  //# sourceMappingURL=agent-type-icons.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0C5D,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
1
+ {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAyC5D,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
@@ -3,11 +3,10 @@ import { getAgentTypeIcon, DefaultAgentIcon } from './agent-type-icons.js';
3
3
  const allAgentTypes = [
4
4
  { type: 'claude-code', label: 'Claude Code' },
5
5
  { type: 'codex-cli', label: 'Codex CLI' },
6
+ { type: 'copilot-cli', label: 'GitHub Copilot CLI' },
6
7
  { type: 'cursor', label: 'Cursor' },
7
8
  { type: 'gemini-cli', label: 'Gemini CLI' },
8
- { type: 'aider', label: 'Aider' },
9
- { type: 'continue', label: 'Continue' },
10
- { type: 'dev', label: 'Dev (Mock)' },
9
+ { type: 'rovo-dev', label: 'Rovo Dev CLI' },
11
10
  ];
12
11
  function AgentIconGallery({ size }) {
13
12
  return (_jsxs("div", { className: "flex flex-wrap gap-6", children: [allAgentTypes.map(({ type, label }) => {
@@ -30,9 +29,9 @@ export const SmallIcons = {
30
29
  export const LargeIcons = {
31
30
  render: () => _jsx(AgentIconGallery, { size: 16 }),
32
31
  };
33
- export const DevAgentIcon = {
32
+ export const FallbackIcon = {
34
33
  render: () => {
35
- const Icon = getAgentTypeIcon('dev');
36
- return (_jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "border-border bg-muted/30 rounded-md border p-3", children: _jsx(Icon, { style: { width: 40, height: 40 } }) }), _jsx("span", { className: "text-sm font-medium", children: "Dev (Mock)" }), _jsx("code", { className: "text-muted-foreground text-xs", children: "dev" })] }));
34
+ const Icon = getAgentTypeIcon('unknown-agent');
35
+ return (_jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "border-border bg-muted/30 rounded-md border p-3", children: _jsx(Icon, { style: { width: 40, height: 40 } }) }), _jsx("span", { className: "text-sm font-medium", children: "Unknown Agent (Fallback)" }), _jsx("code", { className: "text-muted-foreground text-xs", children: "unknown-agent" })] }));
37
36
  },
38
37
  };
@@ -104,6 +104,8 @@ export interface FeatureNodeData {
104
104
  hasAgentRun?: boolean;
105
105
  /** Whether the feature has plan data available */
106
106
  hasPlan?: boolean;
107
+ /** Per-feature permission mode override (overrides agent default from settings) */
108
+ permissionMode?: string;
107
109
  /** Deployment status for features with an active deployment */
108
110
  deployment?: {
109
111
  status: DeploymentState;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAynBA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA2oBA"}