@shepai/cli 1.157.0-pr496.7e3ce96 → 1.157.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 (188) hide show
  1. package/apis/json-schema/WorkflowConfig.yaml +0 -5
  2. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  3. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +0 -1
  4. package/dist/packages/core/src/domain/generated/output.d.ts +0 -4
  5. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -1
  7. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -3
  9. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -6
  11. package/dist/src/presentation/cli/commands/_serve.command.d.ts.map +1 -1
  12. package/dist/src/presentation/cli/commands/_serve.command.js +0 -5
  13. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  14. package/dist/src/presentation/cli/commands/ui.command.js +0 -5
  15. package/dist/src/presentation/web/dev-server.js +0 -10
  16. package/dist/tsconfig.build.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/web/.next/BUILD_ID +1 -1
  19. package/web/.next/build-manifest.json +2 -2
  20. package/web/.next/fallback-build-manifest.json +2 -2
  21. package/web/.next/prerender-manifest.json +3 -3
  22. package/web/.next/required-server-files.js +3 -3
  23. package/web/.next/required-server-files.json +3 -3
  24. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
  25. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +26 -26
  28. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +29 -29
  31. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
  37. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +26 -26
  40. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  43. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +26 -26
  46. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +29 -29
  49. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  52. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
  55. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  56. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  57. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
  58. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +26 -26
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  62. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  64. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  65. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/_global-error.html +2 -2
  67. package/web/.next/server/app/_global-error.rsc +1 -1
  68. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  69. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  71. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  72. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  73. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +5 -5
  74. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  75. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  77. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  78. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/skills/page/server-reference-manifest.json +10 -10
  80. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  81. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/tools/page/server-reference-manifest.json +10 -10
  83. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  84. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/version/page/server-reference-manifest.json +5 -5
  86. package/web/.next/server/app/version/page.js.nft.json +1 -1
  87. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  89. package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js.map +1 -1
  90. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  92. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  94. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__209c9597._.js +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__209c9597._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__27301e38._.js +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__27301e38._.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__6fecf886._.js +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__6fecf886._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__8d27866c._.js +2 -2
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__8d27866c._.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f3504c7._.js +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f3504c7._.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd6ed91a._.js +2 -2
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd6ed91a._.js.map +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  116. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  119. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/_3a0b989f._.js +2 -2
  121. package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  124. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/_5f69c13f._.js +1 -1
  126. package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/_7c5b97c6._.js +1 -1
  128. package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/_82c57f10._.js +1 -1
  130. package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/_9495d50b._.js +1 -1
  132. package/web/.next/server/chunks/ssr/_9495d50b._.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/_9f6b4b4a._.js +3 -0
  134. package/web/.next/server/chunks/ssr/{_8e3fa3c7._.js.map → _9f6b4b4a._.js.map} +1 -1
  135. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +1 -1
  136. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/_ac4a3873._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/{_5d73b993._.js → _b3bcbae5._.js} +2 -2
  140. package/web/.next/server/chunks/ssr/{_5d73b993._.js.map → _b3bcbae5._.js.map} +1 -1
  141. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +1 -1
  142. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/_cb5a021e._.js +1 -1
  144. package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/_d86175ae._.js +1 -1
  146. package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/_d8bedf13._.js +1 -1
  148. package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/{_54af0d8c._.js → _ddbf84e9._.js} +2 -2
  150. package/web/.next/server/chunks/ssr/{_54af0d8c._.js.map → _ddbf84e9._.js.map} +1 -1
  151. package/web/.next/server/chunks/ssr/_fa7efce3._.js +2 -2
  152. package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  154. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  156. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  157. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  159. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  160. package/web/.next/server/pages/500.html +2 -2
  161. package/web/.next/server/server-reference-manifest.js +1 -1
  162. package/web/.next/server/server-reference-manifest.json +45 -45
  163. package/web/.next/static/chunks/{504d1bd34e9f7dd8.js → 19591a6c619a8d84.js} +1 -1
  164. package/web/.next/static/chunks/1c541c77fae77297.js +1 -0
  165. package/web/.next/static/chunks/{ec99e6be5b32ecc9.js → 42484808c3fdd6f1.js} +1 -1
  166. package/web/.next/static/chunks/{a272e115fd5ca5a0.js → 443f46d9ffb173d9.js} +2 -2
  167. package/web/.next/static/chunks/{02eb9809370f1b44.js → 6a12dec4a63ed342.js} +2 -2
  168. package/web/.next/static/chunks/{7b9ed1c6d9eea406.js → 91c1a0ccc964c832.js} +1 -1
  169. package/web/.next/static/chunks/{9d314b2b855bc050.js → b820b3d89776f2ae.js} +1 -1
  170. package/web/.next/static/chunks/{ed078ae150b9499a.js → c142797526c0a85c.js} +1 -1
  171. package/web/.next/static/chunks/{b8196a574b97e029.js → c66b8a09a10d8855.js} +1 -1
  172. package/web/.next/static/chunks/{7e2465210c64ed91.js → c9ead31f0a1c2de1.js} +1 -1
  173. package/web/.next/static/chunks/{18d0ec4f7b848983.js → cf55aeccca2297f0.js} +1 -1
  174. package/web/.next/static/chunks/{0b1c2bbc0169229f.js → f8e198917b279786.js} +1 -1
  175. package/dist/packages/core/src/application/use-cases/features/auto-archive-completed.use-case.d.ts +0 -30
  176. package/dist/packages/core/src/application/use-cases/features/auto-archive-completed.use-case.d.ts.map +0 -1
  177. package/dist/packages/core/src/application/use-cases/features/auto-archive-completed.use-case.js +0 -75
  178. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/049-add-auto-archive-delay-minutes.d.ts +0 -15
  179. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/049-add-auto-archive-delay-minutes.d.ts.map +0 -1
  180. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/049-add-auto-archive-delay-minutes.js +0 -20
  181. package/dist/packages/core/src/infrastructure/services/auto-archive/auto-archive-watcher.service.d.ts +0 -48
  182. package/dist/packages/core/src/infrastructure/services/auto-archive/auto-archive-watcher.service.d.ts.map +0 -1
  183. package/dist/packages/core/src/infrastructure/services/auto-archive/auto-archive-watcher.service.js +0 -101
  184. package/web/.next/server/chunks/ssr/_8e3fa3c7._.js +0 -3
  185. package/web/.next/static/chunks/36768c59216eeaf9.js +0 -1
  186. /package/web/.next/static/{jBQpz78BQ7UsAMcJbVOPf → t8-30La5Z2OhsRJq4XLko}/_buildManifest.js +0 -0
  187. /package/web/.next/static/{jBQpz78BQ7UsAMcJbVOPf → t8-30La5Z2OhsRJq4XLko}/_clientMiddlewareManifest.json +0 -0
  188. /package/web/.next/static/{jBQpz78BQ7UsAMcJbVOPf → t8-30La5Z2OhsRJq4XLko}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16868,e=>{"use strict";var t=e.i(43698);e.s(["PaperclipIcon",()=>t.default])},70471,e=>{"use strict";var t=e.i(16298);e.s(["FileText",()=>t.default])},42076,e=>{"use strict";async function t(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}e.s(["pickFiles",()=>t])},83843,e=>{"use strict";let t=(0,e.i(3645).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);e.s(["ChevronsUpDown",()=>t],83843)},51911,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),i=e.i(22528),o=e.i(36589),n=e.i(23405),l=e.i(77624),c=e.i(87620),d="Switch",[p,u]=(0,i.createContextScope)(d),[h,m]=p(d),x=r.forwardRef((e,i)=>{let{__scopeSwitch:n,name:l,checked:p,defaultChecked:u,required:m,disabled:x,value:f="on",onCheckedChange:b,form:j,...v}=e,[y,k]=r.useState(null),C=(0,s.useComposedRefs)(i,e=>k(e)),N=r.useRef(!1),D=!y||j||!!y.closest("form"),[T,S]=(0,o.useControllableState)({prop:p,defaultProp:u??!1,onChange:b,caller:d});return(0,t.jsxs)(h,{scope:n,checked:T,disabled:x,children:[(0,t.jsx)(c.Primitive.button,{type:"button",role:"switch","aria-checked":T,"aria-required":m,"data-state":w(T),"data-disabled":x?"":void 0,disabled:x,value:f,...v,ref:C,onClick:(0,a.composeEventHandlers)(e.onClick,e=>{S(e=>!e),D&&(N.current=e.isPropagationStopped(),N.current||e.stopPropagation())})}),D&&(0,t.jsx)(g,{control:y,bubbles:!N.current,name:l,value:f,checked:T,required:m,disabled:x,form:j,style:{transform:"translateX(-100%)"}})]})});x.displayName=d;var f="SwitchThumb",b=r.forwardRef((e,r)=>{let{__scopeSwitch:a,...s}=e,i=m(f,a);return(0,t.jsx)(c.Primitive.span,{"data-state":w(i.checked),"data-disabled":i.disabled?"":void 0,...s,ref:r})});b.displayName=f;var g=r.forwardRef(({__scopeSwitch:e,control:a,checked:i,bubbles:o=!0,...c},d)=>{let p=r.useRef(null),u=(0,s.useComposedRefs)(p,d),h=(0,n.usePrevious)(i),m=(0,l.useSize)(a);return r.useEffect(()=>{let e=p.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==i&&t){let r=new Event("click",{bubbles:o});t.call(e,i),e.dispatchEvent(r)}},[h,i,o]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:i,...c,tabIndex:-1,ref:u,style:{...c.style,...m,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function w(e){return e?"checked":"unchecked"}g.displayName="SwitchBubbleInput",e.s(["Root",()=>x,"Switch",()=>x,"SwitchThumb",()=>b,"Thumb",()=>b,"createSwitchScope",()=>u],95291);var j=e.i(95291),j=j,v=e.i(31777);function y({className:e,size:r="default",...a}){return(0,t.jsx)(j.Root,{"data-slot":"switch","data-size":r,className:(0,v.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...a,children:(0,t.jsx)(j.Thumb,{"data-slot":"switch-thumb",className:(0,v.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]")})})}e.s(["Switch",()=>y],51911)},15203,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(31406),s=e.i(60112),i=e.i(21023);let o=(0,i.createServerReference)("40693a5e8b1b1158506367bc57bb6b635bdb60ca62",i.callServer,void 0,i.findSourceMapURL,"createFeature");e.i(41001);var n=e.i(64780),l=e.i(16868),c=e.i(83843),d=e.i(97667),p=e.i(53360),u=e.i(55016),h=e.i(91925),m=e.i(83428);let x=(0,e.i(3645).default)("git-fork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);var f=e.i(70471),b=e.i(31777),g=e.i(8361);e.i(1650);var w=e.i(11495),j=e.i(45811),v=e.i(35364),y=e.i(98127),k=e.i(48306),C=e.i(41957),N=e.i(81846),D=e.i(90382),T=e.i(51911),S=e.i(2828),P=e.i(30153);e.i(50032);var F=e.i(86254);let E=(0,i.createServerReference)("40be5ba5ba5b6db37faefc8a7c6306a96d8c244f68",i.callServer,void 0,i.findSourceMapURL,"getViewerPermission");var R=e.i(41413),z=e.i(25235),L=e.i(78521);e.i(13322);var I=e.i(61201),M=e.i(75921),U=e.i(41383),A=e.i(42076);let O=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp",".ico",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".csv",".json",".yaml",".yml",".xml",".ts",".tsx",".js",".jsx",".py",".rb",".go",".rs",".java",".c",".cpp",".h",".hpp",".cs",".swift",".kt",".html",".css",".scss",".less",".sh",".bash",".zsh",".fish",".toml",".ini",".cfg",".conf",".env",".zip",".tar",".gz",".log"]),B={allowPrd:!1,allowPlan:!1,allowMerge:!1};function $({open:e,onClose:a,onSubmit:s,repositoryPath:i,isSubmitting:o=!1,workflowDefaults:c,features:d,repositories:h,initialParentId:m,currentAgentType:y,currentModel:D,initialDescription:z,canPushDirectly:L}){let I=(0,g.useSoundAction)("create"),{t:M}=(0,n.useTranslation)("web"),U=i&&(!h||0===h.length||h.some(e=>e.path===i))?i:"",$=c?.approvalGates??B,K=c?.push??!1,W=c?.openPr??!1,H=c?.ciWatchEnabled!==!1,V=c?.enableEvidence??!1,Z=c?.commitEvidence??!1,[J,X]=(0,r.useState)(z??"");(0,r.useEffect)(()=>{z&&X(z)},[z]);let[Q,Y]=(0,r.useState)([]),[_,ee]=(0,r.useState)({...$}),[et,er]=(0,r.useState)(K),[ea,es]=(0,r.useState)(W),[ei,eo]=(0,r.useState)(c?.ciWatchEnabled!==!1),[en,el]=(0,r.useState)(V),[ec,ed]=(0,r.useState)(Z),[ep,eu]=(0,r.useState)(void 0),[eh,em]=(0,r.useState)(!1),[ex,ef]=(0,r.useState)(!1),[eb,eg]=(0,r.useState)(!1),[ew,ej]=(0,r.useState)(!0),[ev,ey]=(0,r.useState)(void 0),[ek,eC]=(0,r.useState)(void 0),[eN,eD]=(0,r.useState)(U||void 0),[eT,eS]=(0,r.useState)(h??[]),[eP,eF]=(0,r.useState)(!1),[eE,eR]=(0,r.useState)(null),[ez,eL]=(0,r.useState)(!1),eI=(0,r.useRef)(crypto.randomUUID()),eM=(0,r.useRef)(0),eU=(0,r.useRef)(null);(0,r.useEffect)(()=>{c&&(ee({...c.approvalGates}),er(c.push),es(c.openPr),eo(!1!==c.ciWatchEnabled),el(c.enableEvidence),ed(c.commitEvidence))},[c]),(0,r.useEffect)(()=>{eS(h??[])},[h]),(0,r.useEffect)(()=>{e&&m&&eu(m)},[e,m]);let[eA,eO]=(0,r.useState)(L??!1);(0,r.useEffect)(()=>{eO(L??!1)},[L]);let eB=(0,r.useRef)(eN);(0,r.useEffect)(()=>{eN&&eN!==eB.current&&(eB.current=eN,E(eN).then(e=>eO(e.canPushDirectly)).catch(()=>eO(!1)))},[eN]),(0,r.useEffect)(()=>{eA&&(eg(!1),er(K),es(W),ej(!0))},[eA,K,W]);let e$=(0,r.useCallback)(()=>{X(""),Y([]),ee({...$}),er(K),es(W),eo(H),el(V),ed(Z),eu(void 0),eD(U||void 0),eS(h??[]),em(!1),ef(!1),eg(!1),ej(!0),ey(void 0),eC(void 0),eR(null),eM.current=0,eF(!1)},[$,K,W,V,H,Z,U,h]),eq=""!==J.trim()||Q.length>0,{attemptClose:eG}=(0,P.useGuardedDrawerClose)({open:e,isDirty:eq,onClose:a,onReset:e$}),eK=(0,r.useCallback)(async e=>{for(let t of(eR(null),e)){if(t.size>0xa00000)return void eR(`"${t.name}" exceeds 10 MB limit`);let e=function(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}(t.name);if(e&&!O.has(e))return void eR(`File type "${e}" is not allowed`)}for(let t of e){let e=crypto.randomUUID();Y(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:t.type||"application/octet-stream",path:"",loading:!0}]);try{let r=new FormData;r.append("file",t),r.append("sessionId",eI.current);let a=await fetch("/api/attachments/upload",{method:"POST",body:r});if(!a.ok){let t=await a.json().catch(()=>({error:"Upload failed"}));Y(t=>t.filter(t=>t.id!==e)),eR(t.error??"Upload failed");return}let s=await a.json();Y(t=>t.some(t=>t.id!==e&&t.path===s.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...s,id:e,loading:!1}:t))}catch{Y(t=>t.filter(t=>t.id!==e)),eR("Upload failed")}}},[]),eW=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current+=1,1===eM.current&&eF(!0)},[]),eH=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current-=1,0===eM.current&&eF(!1)},[]),eV=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation()},[]),eZ=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current=0,eF(!1);let t=Array.from(e.dataTransfer.files);t.length>0&&eK(t)},[eK]),eJ=(0,r.useCallback)(e=>{let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e of Array.from(t))if("file"===e.kind){let t=e.getAsFile();t&&r.push(t)}r.length>0&&(e.preventDefault(),eK(r))},[eK]),eX=(0,r.useCallback)(e=>{if(e.preventDefault(),!J.trim())return;let t=eN??U;t&&(I.play(),s({description:J.trim(),attachments:Q.filter(e=>!e.loading),repositoryPath:t,approvalGates:{allowPrd:_.allowPrd??!1,allowPlan:_.allowPlan??!1,allowMerge:_.allowMerge??!1},push:!!eb||et||ea,openPr:!!eb||ea,ciWatchEnabled:ei,enableEvidence:en,commitEvidence:ec,fast:eh,forkAndPr:eb,commitSpecs:ew,...ex?{pending:ex}:{},...ev?{agentType:ev}:{},...ek?{model:ek}:{},...ep?{parentId:ep}:{},sessionId:eI.current}),e$())},[J,Q,_,eN,U,s,et,ea,en,ei,ec,eh,eb,ew,ex,ev,ek,ep,I,e$]),eQ=(0,r.useCallback)(async()=>{try{let e=await (0,A.pickFiles)();if(!e)return;for(let t of e){let e=crypto.randomUUID();Y(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:"application/octet-stream",path:"",loading:!0}]);try{let r=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:t.path,sessionId:eI.current})});if(!r.ok){let t=await r.json().catch(()=>({error:"Upload failed"}));Y(t=>t.filter(t=>t.id!==e)),eR(t.error??"Upload failed");return}let a=await r.json();Y(t=>t.some(t=>t.id!==e&&t.path===a.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...a,id:e,loading:!1}:t))}catch{Y(t=>t.filter(t=>t.id!==e)),eR("Upload failed")}}}catch{}},[]),eY=(0,r.useCallback)(e=>{Y(t=>t.filter(t=>t.id!==e))},[]),e_=(0,r.useCallback)((e,t)=>{Y(r=>r.map(r=>r.id===e?{...r,notes:t}:r))},[]),e0=(0,r.useRef)(null),e1=(0,r.useCallback)(e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&(e.preventDefault(),e0.current?.requestSubmit())},[]),e5=(0,r.useCallback)(()=>{eL(!0)},[]),e2=(0,r.useCallback)(()=>{setTimeout(()=>{let e=eU.current?.contains(document.activeElement),t=eU.current?.querySelector('[aria-expanded="true"]')!==null;e||t||eL(!1)},0)},[]),e3=d&&d.length>0,e4=!U&&!eN,e6=!U&&void 0!==h,e8=[{id:"allowPrd",label:M("createDrawer.prd"),description:M("createDrawer.prdDescription")},{id:"allowPlan",label:M("createDrawer.plan"),description:M("createDrawer.planDescription")},{id:"allowMerge",label:M("createDrawer.merge"),description:M("createDrawer.mergeDescription")}];return(0,t.jsx)(w.BaseDrawer,{open:e,onClose:eG,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsx)(j.DrawerTitle,{children:M("createDrawer.title")})]}),o?(0,t.jsx)(j.DrawerDescription,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsx)(N.Badge,{variant:"secondary",children:M("createDrawer.creating")})})}):null]}),footer:(0,t.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,t.jsx)(v.Button,{variant:"outline",onClick:eG,disabled:o,children:M("createDrawer.cancel")}),(0,t.jsx)(v.Button,{type:"submit",form:"create-feature-form",disabled:!J.trim()||o||e4,children:o?M("createDrawer.creating"):M("createDrawer.createFeature")})]}),children:(0,t.jsx)("div",{className:"overflow-y-auto p-4",children:(0,t.jsx)(S.TooltipProvider,{delayDuration:400,children:(0,t.jsxs)("form",{ref:e0,id:"create-feature-form",onSubmit:eX,onKeyDown:e1,className:"flex flex-col gap-4",children:[e6?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-selector-section",children:[(0,t.jsx)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.repository")}),(0,t.jsx)(G,{repositories:eT,value:eN,onChange:eD,onAddRepository:e=>{eS(t=>[...t,e]),eD(e.path)},disabled:o})]}):U?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-readonly-section",children:[(0,t.jsx)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.repository")}),(0,t.jsx)("p",{className:"text-sm","data-testid":"repo-readonly-label",children:h?.find(e=>e.path===U)?.name??U.split("/").pop()})]}):null,(0,t.jsxs)("div",{role:"region","aria-label":M("createDrawer.fileDropZone"),"data-drag-over":eP?"true":"false",onDragEnter:eW,onDragLeave:eH,onDragOver:eV,onDrop:eZ,className:(0,b.cn)("flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors",eP&&"border-primary/50 bg-primary/5"),children:[(0,t.jsx)(C.Label,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.describeFeature")}),(0,t.jsxs)("div",{ref:eU,onFocus:e5,onBlur:e2,className:(0,b.cn)("border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]",ez&&"ring-ring/50 border-ring ring-[3px]"),children:[(0,t.jsx)(k.Textarea,{id:"feature-description",placeholder:M("createDrawer.featurePlaceholder"),value:J,onChange:e=>X(e.target.value),onPaste:eJ,required:!0,disabled:o,className:"min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0"}),Q.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 py-2",children:Q.map(e=>(0,t.jsx)(F.AttachmentChip,{name:e.name,size:e.size,mimeType:e.mimeType,path:e.path,onRemove:()=>eY(e.id),disabled:o,loading:e.loading,notes:e.notes,onNotesChange:t=>e_(e.id,t)},e.id))}),eE?(0,t.jsx)("p",{className:"text-destructive px-3 pb-2 text-xs",children:eE}):null,(0,t.jsxs)("div",{className:"border-input flex items-center gap-3 border-t px-3 py-1.5",children:[(0,t.jsx)(R.AgentModelPicker,{initialAgentType:ev??y??"claude-code",initialModel:ek??D??"claude-sonnet-4-6",mode:"override",onAgentModelChange:(e,t)=>{ey(e),eC(t)},disabled:o,className:"w-55"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(T.Switch,{id:"pending-mode",checked:ex,onCheckedChange:ef,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"pending-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(u.Clock,{className:"h-3.5 w-3.5"}),M("createDrawer.pendingMode")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.pendingModeDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(T.Switch,{id:"fast-mode",checked:eh,onCheckedChange:em,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"fast-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(p.Zap,{className:"h-3.5 w-3.5"}),M("createDrawer.fastModeLabel")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.fastModeDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:eQ,disabled:o,"aria-label":M("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors",children:(0,t.jsx)(l.PaperclipIcon,{className:"h-4 w-4"})})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("chat.attachFiles")})]})]})]})]}),e3&&void 0!==m?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.parentFeature")}),(0,t.jsx)(q,{features:d,value:ep,onChange:eu,disabled:o})]}):null,(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:M("createDrawer.approve")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.approveDescription")})]}),(0,t.jsx)("div",{className:"flex flex-1 items-center gap-4",children:e8.map(e=>(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:`approve-${e.id}`,size:"sm",checked:_[e.id]??!1,onCheckedChange:t=>ee(r=>({...r,[e.id]:t})),disabled:o||eh&&("allowPrd"===e.id||"allowPlan"===e.id)}),(0,t.jsx)(C.Label,{htmlFor:`approve-${e.id}`,className:"cursor-pointer text-xs font-medium",children:e.label})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eh&&("allowPrd"===e.id||"allowPlan"===e.id)?M("createDrawer.skippedInFastMode"):e.description})]},e.id))}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=e8.every(e=>_[e.id]),t={};for(let r of e8)t[r.id]=!e;ee(t)},disabled:o,className:(0,b.cn)("text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors",e8.every(e=>_[e.id])&&"text-primary"),children:M("createDrawer.all")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.toggleAllApprovalGates")})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:M("createDrawer.evidence")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.evidenceDescription")})]}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"enable-evidence",size:"sm",checked:en,onCheckedChange:e=>{el(e),e||ed(!1)},disabled:o}),(0,t.jsx)(C.Label,{htmlFor:"enable-evidence",className:"cursor-pointer text-xs font-medium",children:M("createDrawer.collect")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.collectDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"commit-evidence",size:"sm",checked:ec,onCheckedChange:ed,disabled:o||!en||!ea&&!eb}),(0,t.jsx)(C.Label,{htmlFor:"commit-evidence",className:(0,b.cn)("cursor-pointer text-xs font-medium",(!en||!ea&&!eb)&&"opacity-50"),children:M("createDrawer.addToPr")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:ea||eb?en?M("createDrawer.addToPrDescription"):M("createDrawer.requiresEvidence"):M("createDrawer.requiresPr")})]})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-start gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider",children:M("createDrawer.git")}),(0,t.jsxs)("div",{className:"flex flex-1 flex-wrap items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"push",size:"sm",checked:!!eb||et||ea,onCheckedChange:e=>{er(e),!e&&ea&&es(!1)},disabled:o||eb}),(0,t.jsx)(C.Label,{htmlFor:"push",className:(0,b.cn)("cursor-pointer text-xs font-medium",eb&&"opacity-50"),children:M("createDrawer.push")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eb?"Enabled — contributing to upstream":M("createDrawer.pushDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"open-pr",size:"sm",checked:!!eb||ea,onCheckedChange:e=>{es(e),e||ed(!1)},disabled:o||eb}),(0,t.jsx)(C.Label,{htmlFor:"open-pr",className:(0,b.cn)("cursor-pointer text-xs font-medium",eb&&"opacity-50"),children:M("createDrawer.pr")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eb?"Enabled — contributing to upstream":M("createDrawer.prDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"ci-watch",size:"sm",checked:ei,onCheckedChange:eo,disabled:o}),(0,t.jsx)(C.Label,{htmlFor:"ci-watch",className:"cursor-pointer text-xs font-medium",children:M("createDrawer.watch")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.watchDescription")})]}),(0,t.jsx)("div",{className:"bg-border h-4 w-px shrink-0"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"commit-specs",size:"sm",checked:ew,onCheckedChange:ej,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"commit-specs",className:"flex cursor-pointer items-center gap-1 text-xs font-medium",children:[(0,t.jsx)(f.FileText,{className:"h-3 w-3"}),M("createDrawer.commitSpecs")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.commitSpecsDescription")})]}),!eA&&(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"fork-and-pr",size:"sm",checked:eb,onCheckedChange:e=>{eg(e),e&&ej(!1)},disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"fork-and-pr",className:"flex cursor-pointer items-center gap-1 text-xs font-medium",children:[(0,t.jsx)(x,{className:"h-3 w-3"}),M("createDrawer.forkAndPr")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.forkAndPrDescription")})]})]})]})]})]})})})})}function q({features:e,value:a,onChange:s,disabled:i}){let{t:o}=(0,n.useTranslation)("web"),[l,p]=(0,r.useState)(!1),[u,h]=(0,r.useState)(""),m=(0,r.useRef)(null),x=e.find(e=>e.id===a),f=u.trim()?e.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.id.toLowerCase().includes(u.toLowerCase())):e,g=(0,r.useCallback)(e=>{s(e),p(!1),h("")},[s]);return(0,r.useEffect)(()=>{l?setTimeout(()=>m.current?.focus(),0):h("")},[l]),(0,t.jsxs)(D.Popover,{open:l,onOpenChange:p,children:[(0,t.jsx)(D.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":l,"aria-label":"Parent Feature",disabled:i,"data-testid":"parent-feature-combobox",className:(0,b.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!x&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:x?`${x.name} (${x.id.slice(0,8)})`:o("createDrawer.selectParent")}),(0,t.jsx)(c.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(D.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(y.Input,{ref:m,placeholder:o("createDrawer.searchFeatures"),value:u,onChange:e=>h(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===a,onClick:()=>g(void 0),className:(0,b.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===a&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,t.jsx)(d.CheckIcon,{className:(0,b.cn)("h-4 w-4 shrink-0",void 0!==a&&"invisible")}),(0,t.jsx)("span",{className:"text-muted-foreground italic",children:o("createDrawer.noParent")})]}),0===f.length&&u?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:o("createDrawer.noFeaturesFound")}):f.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.id,onClick:()=>g(e.id),className:(0,b.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,b.cn)("h-4 w-4 shrink-0",a!==e.id&&"invisible")}),(0,t.jsxs)("span",{className:"truncate",children:[e.name," ",(0,t.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",e.id.slice(0,8),")"]})]})]},e.id))]})]})})]})}function G({repositories:e,value:a,onChange:s,onAddRepository:i,disabled:o}){let[l,p]=(0,r.useState)(!1),[u,x]=(0,r.useState)(""),[f,g]=(0,r.useState)(!1),[w,j]=(0,r.useState)(null),[v,k]=(0,r.useState)(!1),C=(0,r.useRef)(null),{reactFileManager:N}=(0,M.useFeatureFlags)(),{t:T}=(0,n.useTranslation)("web"),S=e.find(e=>e.path===a),P=u.trim()?e.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.path.toLowerCase().includes(u.toLowerCase())):e,F=(0,r.useCallback)(e=>{s(e),p(!1),x("")},[s]),E=(0,r.useCallback)(async e=>{let t=await (0,U.addRepository)({path:e});if(t.error){j(t.error),g(!1);return}if(t.repository){let e={id:t.repository.id,name:t.repository.name,path:t.repository.path};i?.(e),s(e.path),p(!1),x("")}},[i,s]),R=(0,r.useCallback)(async()=>{if(!f){if(N)return void k(!0);g(!0),j(null);try{let e=await (0,L.pickFolder)();if(!e)return void g(!1);await E(e)}catch{k(!0)}finally{g(!1)}}},[f,N,E]),A=(0,r.useCallback)(async e=>{if(k(!1),e){g(!0),j(null);try{await E(e)}catch(e){j(e instanceof Error?e.message:"Failed to add repository")}finally{g(!1)}}},[E]);return(0,r.useEffect)(()=>{l?setTimeout(()=>C.current?.focus(),0):x("")},[l]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(D.Popover,{open:l,onOpenChange:p,children:[(0,t.jsx)(D.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{type:"button",role:"combobox","aria-expanded":l,"aria-label":"Repository",disabled:o,"data-testid":"repository-combobox",className:(0,b.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!S&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:S?S.name:"Select repository..."}),(0,t.jsx)(c.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(D.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"repository-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(y.Input,{ref:C,placeholder:T("createDrawer.searchRepositories"),value:u,onChange:e=>x(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"repository-search"})}),(0,t.jsx)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Repositories",children:0===P.length?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm","data-testid":"repository-empty",children:"No repositories found."}):P.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.path,onClick:()=>F(e.path),className:(0,b.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.path&&"bg-accent/50"),"data-testid":`repository-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,b.cn)("h-4 w-4 shrink-0",a!==e.path&&"invisible")}),(0,t.jsxs)("span",{className:"flex flex-col items-start truncate",children:[(0,t.jsx)("span",{className:"truncate",children:e.name}),(0,t.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:e.path})]})]},e.id))}),(0,t.jsx)(z.Separator,{}),(0,t.jsxs)("button",{type:"button",onClick:R,disabled:f,className:"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm","data-testid":"add-repository-item",children:[f?(0,t.jsx)(m.Loader2,{className:"h-4 w-4 shrink-0 animate-spin"}):(0,t.jsx)(h.FolderPlus,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:"Add new repository..."})]}),w?(0,t.jsx)("p",{className:"px-3 pb-2 text-xs text-red-500","data-testid":"add-repository-error",children:w}):null]})})]}),(0,t.jsx)(I.ReactFileManagerDialog,{open:v,onOpenChange:e=>{e||k(!1)},onSelect:A})]})}function K({repositoryPath:e,initialParentId:i,initialDescription:n,features:l,repositories:c,workflowDefaults:d,currentAgentType:p,currentModel:u,canPushDirectly:h}){let m=(0,a.useRouter)(),[x,f]=(0,r.useState)(!1),b=(0,a.usePathname)().startsWith("/create"),g=!x&&b;(0,r.useEffect)(()=>{!b&&x&&f(!1)},[b,x]);let w=(0,r.useCallback)(()=>{m.push("/")},[m]),j=(0,r.useCallback)(e=>{f(!0),m.push("/"),o(e).then(t=>{t.error?s.toast.error(t.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:t.feature.id,name:t.feature.name,description:t.feature.description,repositoryPath:t.feature.repositoryPath,parentId:e.parentId}}))}).catch(()=>{s.toast.error("Failed to create feature"),f(!1)})},[m]);return(0,t.jsx)($,{open:g,onClose:w,onSubmit:j,repositoryPath:e,features:l,repositories:c,workflowDefaults:d,initialParentId:i,initialDescription:n,isSubmitting:x,currentAgentType:p,currentModel:u,canPushDirectly:h})}e.s(["CreateDrawerClient",()=>K],15203)}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16868,e=>{"use strict";var t=e.i(43698);e.s(["PaperclipIcon",()=>t.default])},70471,e=>{"use strict";var t=e.i(16298);e.s(["FileText",()=>t.default])},42076,e=>{"use strict";async function t(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}e.s(["pickFiles",()=>t])},83843,e=>{"use strict";let t=(0,e.i(3645).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);e.s(["ChevronsUpDown",()=>t],83843)},51911,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(91967),s=e.i(5978),i=e.i(22528),o=e.i(36589),n=e.i(23405),l=e.i(77624),c=e.i(87620),d="Switch",[p,u]=(0,i.createContextScope)(d),[h,m]=p(d),x=r.forwardRef((e,i)=>{let{__scopeSwitch:n,name:l,checked:p,defaultChecked:u,required:m,disabled:x,value:f="on",onCheckedChange:g,form:j,...v}=e,[y,k]=r.useState(null),C=(0,s.useComposedRefs)(i,e=>k(e)),N=r.useRef(!1),D=!y||j||!!y.closest("form"),[T,S]=(0,o.useControllableState)({prop:p,defaultProp:u??!1,onChange:g,caller:d});return(0,t.jsxs)(h,{scope:n,checked:T,disabled:x,children:[(0,t.jsx)(c.Primitive.button,{type:"button",role:"switch","aria-checked":T,"aria-required":m,"data-state":w(T),"data-disabled":x?"":void 0,disabled:x,value:f,...v,ref:C,onClick:(0,a.composeEventHandlers)(e.onClick,e=>{S(e=>!e),D&&(N.current=e.isPropagationStopped(),N.current||e.stopPropagation())})}),D&&(0,t.jsx)(b,{control:y,bubbles:!N.current,name:l,value:f,checked:T,required:m,disabled:x,form:j,style:{transform:"translateX(-100%)"}})]})});x.displayName=d;var f="SwitchThumb",g=r.forwardRef((e,r)=>{let{__scopeSwitch:a,...s}=e,i=m(f,a);return(0,t.jsx)(c.Primitive.span,{"data-state":w(i.checked),"data-disabled":i.disabled?"":void 0,...s,ref:r})});g.displayName=f;var b=r.forwardRef(({__scopeSwitch:e,control:a,checked:i,bubbles:o=!0,...c},d)=>{let p=r.useRef(null),u=(0,s.useComposedRefs)(p,d),h=(0,n.usePrevious)(i),m=(0,l.useSize)(a);return r.useEffect(()=>{let e=p.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==i&&t){let r=new Event("click",{bubbles:o});t.call(e,i),e.dispatchEvent(r)}},[h,i,o]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:i,...c,tabIndex:-1,ref:u,style:{...c.style,...m,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function w(e){return e?"checked":"unchecked"}b.displayName="SwitchBubbleInput",e.s(["Root",()=>x,"Switch",()=>x,"SwitchThumb",()=>g,"Thumb",()=>g,"createSwitchScope",()=>u],95291);var j=e.i(95291),j=j,v=e.i(31777);function y({className:e,size:r="default",...a}){return(0,t.jsx)(j.Root,{"data-slot":"switch","data-size":r,className:(0,v.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...a,children:(0,t.jsx)(j.Thumb,{"data-slot":"switch-thumb",className:(0,v.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]")})})}e.s(["Switch",()=>y],51911)},15203,e=>{"use strict";var t=e.i(20314),r=e.i(79054),a=e.i(31406),s=e.i(60112),i=e.i(21023);let o=(0,i.createServerReference)("4063d6cd78e434c9efc5e6e45a94e39ab42575c520",i.callServer,void 0,i.findSourceMapURL,"createFeature");e.i(41001);var n=e.i(64780),l=e.i(16868),c=e.i(83843),d=e.i(97667),p=e.i(53360),u=e.i(55016),h=e.i(91925),m=e.i(83428);let x=(0,e.i(3645).default)("git-fork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);var f=e.i(70471),g=e.i(31777),b=e.i(8361);e.i(1650);var w=e.i(11495),j=e.i(45811),v=e.i(35364),y=e.i(98127),k=e.i(48306),C=e.i(41957),N=e.i(81846),D=e.i(90382),T=e.i(51911),S=e.i(2828),P=e.i(30153);e.i(50032);var F=e.i(86254);let E=(0,i.createServerReference)("40ccf7468c4d2c8eaf2e5b33c8421f74de7552eada",i.callServer,void 0,i.findSourceMapURL,"getViewerPermission");var R=e.i(41413),z=e.i(25235),L=e.i(78521);e.i(13322);var I=e.i(61201),M=e.i(75921),U=e.i(28036),A=e.i(42076);let O=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp",".ico",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".csv",".json",".yaml",".yml",".xml",".ts",".tsx",".js",".jsx",".py",".rb",".go",".rs",".java",".c",".cpp",".h",".hpp",".cs",".swift",".kt",".html",".css",".scss",".less",".sh",".bash",".zsh",".fish",".toml",".ini",".cfg",".conf",".env",".zip",".tar",".gz",".log"]),B={allowPrd:!1,allowPlan:!1,allowMerge:!1};function $({open:e,onClose:a,onSubmit:s,repositoryPath:i,isSubmitting:o=!1,workflowDefaults:c,features:d,repositories:h,initialParentId:m,currentAgentType:y,currentModel:D,initialDescription:z,canPushDirectly:L}){let I=(0,b.useSoundAction)("create"),{t:M}=(0,n.useTranslation)("web"),U=i&&(!h||0===h.length||h.some(e=>e.path===i))?i:"",$=c?.approvalGates??B,K=c?.push??!1,W=c?.openPr??!1,H=c?.ciWatchEnabled!==!1,V=c?.enableEvidence??!1,Z=c?.commitEvidence??!1,[J,X]=(0,r.useState)(z??"");(0,r.useEffect)(()=>{z&&X(z)},[z]);let[Q,Y]=(0,r.useState)([]),[_,ee]=(0,r.useState)({...$}),[et,er]=(0,r.useState)(K),[ea,es]=(0,r.useState)(W),[ei,eo]=(0,r.useState)(c?.ciWatchEnabled!==!1),[en,el]=(0,r.useState)(V),[ec,ed]=(0,r.useState)(Z),[ep,eu]=(0,r.useState)(void 0),[eh,em]=(0,r.useState)(!1),[ex,ef]=(0,r.useState)(!1),[eg,eb]=(0,r.useState)(!1),[ew,ej]=(0,r.useState)(!0),[ev,ey]=(0,r.useState)(void 0),[ek,eC]=(0,r.useState)(void 0),[eN,eD]=(0,r.useState)(U||void 0),[eT,eS]=(0,r.useState)(h??[]),[eP,eF]=(0,r.useState)(!1),[eE,eR]=(0,r.useState)(null),[ez,eL]=(0,r.useState)(!1),eI=(0,r.useRef)(crypto.randomUUID()),eM=(0,r.useRef)(0),eU=(0,r.useRef)(null);(0,r.useEffect)(()=>{c&&(ee({...c.approvalGates}),er(c.push),es(c.openPr),eo(!1!==c.ciWatchEnabled),el(c.enableEvidence),ed(c.commitEvidence))},[c]),(0,r.useEffect)(()=>{eS(h??[])},[h]),(0,r.useEffect)(()=>{e&&m&&eu(m)},[e,m]);let[eA,eO]=(0,r.useState)(L??!1);(0,r.useEffect)(()=>{eO(L??!1)},[L]);let eB=(0,r.useRef)(eN);(0,r.useEffect)(()=>{eN&&eN!==eB.current&&(eB.current=eN,E(eN).then(e=>eO(e.canPushDirectly)).catch(()=>eO(!1)))},[eN]),(0,r.useEffect)(()=>{eA&&(eb(!1),er(K),es(W),ej(!0))},[eA,K,W]);let e$=(0,r.useCallback)(()=>{X(""),Y([]),ee({...$}),er(K),es(W),eo(H),el(V),ed(Z),eu(void 0),eD(U||void 0),eS(h??[]),em(!1),ef(!1),eb(!1),ej(!0),ey(void 0),eC(void 0),eR(null),eM.current=0,eF(!1)},[$,K,W,V,H,Z,U,h]),eq=""!==J.trim()||Q.length>0,{attemptClose:eG}=(0,P.useGuardedDrawerClose)({open:e,isDirty:eq,onClose:a,onReset:e$}),eK=(0,r.useCallback)(async e=>{for(let t of(eR(null),e)){if(t.size>0xa00000)return void eR(`"${t.name}" exceeds 10 MB limit`);let e=function(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}(t.name);if(e&&!O.has(e))return void eR(`File type "${e}" is not allowed`)}for(let t of e){let e=crypto.randomUUID();Y(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:t.type||"application/octet-stream",path:"",loading:!0}]);try{let r=new FormData;r.append("file",t),r.append("sessionId",eI.current);let a=await fetch("/api/attachments/upload",{method:"POST",body:r});if(!a.ok){let t=await a.json().catch(()=>({error:"Upload failed"}));Y(t=>t.filter(t=>t.id!==e)),eR(t.error??"Upload failed");return}let s=await a.json();Y(t=>t.some(t=>t.id!==e&&t.path===s.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...s,id:e,loading:!1}:t))}catch{Y(t=>t.filter(t=>t.id!==e)),eR("Upload failed")}}},[]),eW=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current+=1,1===eM.current&&eF(!0)},[]),eH=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current-=1,0===eM.current&&eF(!1)},[]),eV=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation()},[]),eZ=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),eM.current=0,eF(!1);let t=Array.from(e.dataTransfer.files);t.length>0&&eK(t)},[eK]),eJ=(0,r.useCallback)(e=>{let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e of Array.from(t))if("file"===e.kind){let t=e.getAsFile();t&&r.push(t)}r.length>0&&(e.preventDefault(),eK(r))},[eK]),eX=(0,r.useCallback)(e=>{if(e.preventDefault(),!J.trim())return;let t=eN??U;t&&(I.play(),s({description:J.trim(),attachments:Q.filter(e=>!e.loading),repositoryPath:t,approvalGates:{allowPrd:_.allowPrd??!1,allowPlan:_.allowPlan??!1,allowMerge:_.allowMerge??!1},push:!!eg||et||ea,openPr:!!eg||ea,ciWatchEnabled:ei,enableEvidence:en,commitEvidence:ec,fast:eh,forkAndPr:eg,commitSpecs:ew,...ex?{pending:ex}:{},...ev?{agentType:ev}:{},...ek?{model:ek}:{},...ep?{parentId:ep}:{},sessionId:eI.current}),e$())},[J,Q,_,eN,U,s,et,ea,en,ei,ec,eh,eg,ew,ex,ev,ek,ep,I,e$]),eQ=(0,r.useCallback)(async()=>{try{let e=await (0,A.pickFiles)();if(!e)return;for(let t of e){let e=crypto.randomUUID();Y(r=>[...r,{id:e,name:t.name,size:t.size,mimeType:"application/octet-stream",path:"",loading:!0}]);try{let r=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:t.path,sessionId:eI.current})});if(!r.ok){let t=await r.json().catch(()=>({error:"Upload failed"}));Y(t=>t.filter(t=>t.id!==e)),eR(t.error??"Upload failed");return}let a=await r.json();Y(t=>t.some(t=>t.id!==e&&t.path===a.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...a,id:e,loading:!1}:t))}catch{Y(t=>t.filter(t=>t.id!==e)),eR("Upload failed")}}}catch{}},[]),eY=(0,r.useCallback)(e=>{Y(t=>t.filter(t=>t.id!==e))},[]),e_=(0,r.useCallback)((e,t)=>{Y(r=>r.map(r=>r.id===e?{...r,notes:t}:r))},[]),e0=(0,r.useRef)(null),e1=(0,r.useCallback)(e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&(e.preventDefault(),e0.current?.requestSubmit())},[]),e5=(0,r.useCallback)(()=>{eL(!0)},[]),e2=(0,r.useCallback)(()=>{setTimeout(()=>{let e=eU.current?.contains(document.activeElement),t=eU.current?.querySelector('[aria-expanded="true"]')!==null;e||t||eL(!1)},0)},[]),e4=d&&d.length>0,e3=!U&&!eN,e8=!U&&void 0!==h,e6=[{id:"allowPrd",label:M("createDrawer.prd"),description:M("createDrawer.prdDescription")},{id:"allowPlan",label:M("createDrawer.plan"),description:M("createDrawer.planDescription")},{id:"allowMerge",label:M("createDrawer.merge"),description:M("createDrawer.mergeDescription")}];return(0,t.jsx)(w.BaseDrawer,{open:e,onClose:eG,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsx)(j.DrawerTitle,{children:M("createDrawer.title")})]}),o?(0,t.jsx)(j.DrawerDescription,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsx)(N.Badge,{variant:"secondary",children:M("createDrawer.creating")})})}):null]}),footer:(0,t.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,t.jsx)(v.Button,{variant:"outline",onClick:eG,disabled:o,children:M("createDrawer.cancel")}),(0,t.jsx)(v.Button,{type:"submit",form:"create-feature-form",disabled:!J.trim()||o||e3,children:o?M("createDrawer.creating"):M("createDrawer.createFeature")})]}),children:(0,t.jsx)("div",{className:"overflow-y-auto p-4",children:(0,t.jsx)(S.TooltipProvider,{delayDuration:400,children:(0,t.jsxs)("form",{ref:e0,id:"create-feature-form",onSubmit:eX,onKeyDown:e1,className:"flex flex-col gap-4",children:[e8?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-selector-section",children:[(0,t.jsx)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.repository")}),(0,t.jsx)(G,{repositories:eT,value:eN,onChange:eD,onAddRepository:e=>{eS(t=>[...t,e]),eD(e.path)},disabled:o})]}):U?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5","data-testid":"repo-readonly-section",children:[(0,t.jsx)(C.Label,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.repository")}),(0,t.jsx)("p",{className:"text-sm","data-testid":"repo-readonly-label",children:h?.find(e=>e.path===U)?.name??U.split("/").pop()})]}):null,(0,t.jsxs)("div",{role:"region","aria-label":M("createDrawer.fileDropZone"),"data-drag-over":eP?"true":"false",onDragEnter:eW,onDragLeave:eH,onDragOver:eV,onDrop:eZ,className:(0,g.cn)("flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors",eP&&"border-primary/50 bg-primary/5"),children:[(0,t.jsx)(C.Label,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.describeFeature")}),(0,t.jsxs)("div",{ref:eU,onFocus:e5,onBlur:e2,className:(0,g.cn)("border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]",ez&&"ring-ring/50 border-ring ring-[3px]"),children:[(0,t.jsx)(k.Textarea,{id:"feature-description",placeholder:M("createDrawer.featurePlaceholder"),value:J,onChange:e=>X(e.target.value),onPaste:eJ,required:!0,disabled:o,className:"min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0"}),Q.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 py-2",children:Q.map(e=>(0,t.jsx)(F.AttachmentChip,{name:e.name,size:e.size,mimeType:e.mimeType,path:e.path,onRemove:()=>eY(e.id),disabled:o,loading:e.loading,notes:e.notes,onNotesChange:t=>e_(e.id,t)},e.id))}),eE?(0,t.jsx)("p",{className:"text-destructive px-3 pb-2 text-xs",children:eE}):null,(0,t.jsxs)("div",{className:"border-input flex items-center gap-3 border-t px-3 py-1.5",children:[(0,t.jsx)(R.AgentModelPicker,{initialAgentType:ev??y??"claude-code",initialModel:ek??D??"claude-sonnet-4-6",mode:"override",onAgentModelChange:(e,t)=>{ey(e),eC(t)},disabled:o,className:"w-55"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(T.Switch,{id:"pending-mode",checked:ex,onCheckedChange:ef,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"pending-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(u.Clock,{className:"h-3.5 w-3.5"}),M("createDrawer.pendingMode")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.pendingModeDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-2",children:[(0,t.jsx)(T.Switch,{id:"fast-mode",checked:eh,onCheckedChange:em,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"fast-mode",className:"flex cursor-pointer items-center gap-1 text-sm font-medium",children:[(0,t.jsx)(p.Zap,{className:"h-3.5 w-3.5"}),M("createDrawer.fastModeLabel")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.fastModeDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:eQ,disabled:o,"aria-label":M("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors",children:(0,t.jsx)(l.PaperclipIcon,{className:"h-4 w-4"})})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("chat.attachFiles")})]})]})]})]}),e4&&void 0!==m?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)(C.Label,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:M("createDrawer.parentFeature")}),(0,t.jsx)(q,{features:d,value:ep,onChange:eu,disabled:o})]}):null,(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:M("createDrawer.approve")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.approveDescription")})]}),(0,t.jsx)("div",{className:"flex flex-1 items-center gap-4",children:e6.map(e=>(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:`approve-${e.id}`,size:"sm",checked:_[e.id]??!1,onCheckedChange:t=>ee(r=>({...r,[e.id]:t})),disabled:o||eh&&("allowPrd"===e.id||"allowPlan"===e.id)}),(0,t.jsx)(C.Label,{htmlFor:`approve-${e.id}`,className:"cursor-pointer text-xs font-medium",children:e.label})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eh&&("allowPrd"===e.id||"allowPlan"===e.id)?M("createDrawer.skippedInFastMode"):e.description})]},e.id))}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=e6.every(e=>_[e.id]),t={};for(let r of e6)t[r.id]=!e;ee(t)},disabled:o,className:(0,g.cn)("text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors",e6.every(e=>_[e.id])&&"text-primary"),children:M("createDrawer.all")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.toggleAllApprovalGates")})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-center gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider",children:M("createDrawer.evidence")})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.evidenceDescription")})]}),(0,t.jsxs)("div",{className:"flex flex-1 items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"enable-evidence",size:"sm",checked:en,onCheckedChange:e=>{el(e),e||ed(!1)},disabled:o}),(0,t.jsx)(C.Label,{htmlFor:"enable-evidence",className:"cursor-pointer text-xs font-medium",children:M("createDrawer.collect")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.collectDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"commit-evidence",size:"sm",checked:ec,onCheckedChange:ed,disabled:o||!en||!ea&&!eg}),(0,t.jsx)(C.Label,{htmlFor:"commit-evidence",className:(0,g.cn)("cursor-pointer text-xs font-medium",(!en||!ea&&!eg)&&"opacity-50"),children:M("createDrawer.addToPr")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:ea||eg?en?M("createDrawer.addToPrDescription"):M("createDrawer.requiresEvidence"):M("createDrawer.requiresPr")})]})]})]}),(0,t.jsxs)("div",{className:"border-input flex items-start gap-4 rounded-md border px-3 py-2.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 pt-0.5 text-xs font-semibold tracking-wider",children:M("createDrawer.git")}),(0,t.jsxs)("div",{className:"flex flex-1 flex-wrap items-center gap-4",children:[(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"push",size:"sm",checked:!!eg||et||ea,onCheckedChange:e=>{er(e),!e&&ea&&es(!1)},disabled:o||eg}),(0,t.jsx)(C.Label,{htmlFor:"push",className:(0,g.cn)("cursor-pointer text-xs font-medium",eg&&"opacity-50"),children:M("createDrawer.push")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eg?"Enabled — contributing to upstream":M("createDrawer.pushDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"open-pr",size:"sm",checked:!!eg||ea,onCheckedChange:e=>{es(e),e||ed(!1)},disabled:o||eg}),(0,t.jsx)(C.Label,{htmlFor:"open-pr",className:(0,g.cn)("cursor-pointer text-xs font-medium",eg&&"opacity-50"),children:M("createDrawer.pr")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:eg?"Enabled — contributing to upstream":M("createDrawer.prDescription")})]}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"ci-watch",size:"sm",checked:ei,onCheckedChange:eo,disabled:o}),(0,t.jsx)(C.Label,{htmlFor:"ci-watch",className:"cursor-pointer text-xs font-medium",children:M("createDrawer.watch")})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.watchDescription")})]}),(0,t.jsx)("div",{className:"bg-border h-4 w-px shrink-0"}),(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"commit-specs",size:"sm",checked:ew,onCheckedChange:ej,disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"commit-specs",className:"flex cursor-pointer items-center gap-1 text-xs font-medium",children:[(0,t.jsx)(f.FileText,{className:"h-3 w-3"}),M("createDrawer.commitSpecs")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.commitSpecsDescription")})]}),!eA&&(0,t.jsxs)(S.Tooltip,{children:[(0,t.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"flex cursor-pointer items-center gap-1.5",children:[(0,t.jsx)(T.Switch,{id:"fork-and-pr",size:"sm",checked:eg,onCheckedChange:e=>{eb(e),e&&ej(!1)},disabled:o}),(0,t.jsxs)(C.Label,{htmlFor:"fork-and-pr",className:"flex cursor-pointer items-center gap-1 text-xs font-medium",children:[(0,t.jsx)(x,{className:"h-3 w-3"}),M("createDrawer.forkAndPr")]})]})}),(0,t.jsx)(S.TooltipContent,{side:"bottom",children:M("createDrawer.forkAndPrDescription")})]})]})]})]})]})})})})}function q({features:e,value:a,onChange:s,disabled:i}){let{t:o}=(0,n.useTranslation)("web"),[l,p]=(0,r.useState)(!1),[u,h]=(0,r.useState)(""),m=(0,r.useRef)(null),x=e.find(e=>e.id===a),f=u.trim()?e.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.id.toLowerCase().includes(u.toLowerCase())):e,b=(0,r.useCallback)(e=>{s(e),p(!1),h("")},[s]);return(0,r.useEffect)(()=>{l?setTimeout(()=>m.current?.focus(),0):h("")},[l]),(0,t.jsxs)(D.Popover,{open:l,onOpenChange:p,children:[(0,t.jsx)(D.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":l,"aria-label":"Parent Feature",disabled:i,"data-testid":"parent-feature-combobox",className:(0,g.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!x&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:x?`${x.name} (${x.id.slice(0,8)})`:o("createDrawer.selectParent")}),(0,t.jsx)(c.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(D.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(y.Input,{ref:m,placeholder:o("createDrawer.searchFeatures"),value:u,onChange:e=>h(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===a,onClick:()=>b(void 0),className:(0,g.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===a&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,t.jsx)(d.CheckIcon,{className:(0,g.cn)("h-4 w-4 shrink-0",void 0!==a&&"invisible")}),(0,t.jsx)("span",{className:"text-muted-foreground italic",children:o("createDrawer.noParent")})]}),0===f.length&&u?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:o("createDrawer.noFeaturesFound")}):f.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.id,onClick:()=>b(e.id),className:(0,g.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,g.cn)("h-4 w-4 shrink-0",a!==e.id&&"invisible")}),(0,t.jsxs)("span",{className:"truncate",children:[e.name," ",(0,t.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",e.id.slice(0,8),")"]})]})]},e.id))]})]})})]})}function G({repositories:e,value:a,onChange:s,onAddRepository:i,disabled:o}){let[l,p]=(0,r.useState)(!1),[u,x]=(0,r.useState)(""),[f,b]=(0,r.useState)(!1),[w,j]=(0,r.useState)(null),[v,k]=(0,r.useState)(!1),C=(0,r.useRef)(null),{reactFileManager:N}=(0,M.useFeatureFlags)(),{t:T}=(0,n.useTranslation)("web"),S=e.find(e=>e.path===a),P=u.trim()?e.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.path.toLowerCase().includes(u.toLowerCase())):e,F=(0,r.useCallback)(e=>{s(e),p(!1),x("")},[s]),E=(0,r.useCallback)(async e=>{let t=await (0,U.addRepository)({path:e});if(t.error){j(t.error),b(!1);return}if(t.repository){let e={id:t.repository.id,name:t.repository.name,path:t.repository.path};i?.(e),s(e.path),p(!1),x("")}},[i,s]),R=(0,r.useCallback)(async()=>{if(!f){if(N)return void k(!0);b(!0),j(null);try{let e=await (0,L.pickFolder)();if(!e)return void b(!1);await E(e)}catch{k(!0)}finally{b(!1)}}},[f,N,E]),A=(0,r.useCallback)(async e=>{if(k(!1),e){b(!0),j(null);try{await E(e)}catch(e){j(e instanceof Error?e.message:"Failed to add repository")}finally{b(!1)}}},[E]);return(0,r.useEffect)(()=>{l?setTimeout(()=>C.current?.focus(),0):x("")},[l]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(D.Popover,{open:l,onOpenChange:p,children:[(0,t.jsx)(D.PopoverTrigger,{asChild:!0,children:(0,t.jsxs)("button",{type:"button",role:"combobox","aria-expanded":l,"aria-label":"Repository",disabled:o,"data-testid":"repository-combobox",className:(0,g.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!S&&"text-muted-foreground"),children:[(0,t.jsx)("span",{className:"truncate",children:S?S.name:"Select repository..."}),(0,t.jsx)(c.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,t.jsx)(D.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"repository-combobox-content",children:(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("div",{className:"border-b p-2",children:(0,t.jsx)(y.Input,{ref:C,placeholder:T("createDrawer.searchRepositories"),value:u,onChange:e=>x(e.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"repository-search"})}),(0,t.jsx)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Repositories",children:0===P.length?(0,t.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm","data-testid":"repository-empty",children:"No repositories found."}):P.map(e=>(0,t.jsxs)("button",{type:"button",role:"option","aria-selected":a===e.path,onClick:()=>F(e.path),className:(0,g.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",a===e.path&&"bg-accent/50"),"data-testid":`repository-option-${e.id}`,children:[(0,t.jsx)(d.CheckIcon,{className:(0,g.cn)("h-4 w-4 shrink-0",a!==e.path&&"invisible")}),(0,t.jsxs)("span",{className:"flex flex-col items-start truncate",children:[(0,t.jsx)("span",{className:"truncate",children:e.name}),(0,t.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:e.path})]})]},e.id))}),(0,t.jsx)(z.Separator,{}),(0,t.jsxs)("button",{type:"button",onClick:R,disabled:f,className:"hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm","data-testid":"add-repository-item",children:[f?(0,t.jsx)(m.Loader2,{className:"h-4 w-4 shrink-0 animate-spin"}):(0,t.jsx)(h.FolderPlus,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:"Add new repository..."})]}),w?(0,t.jsx)("p",{className:"px-3 pb-2 text-xs text-red-500","data-testid":"add-repository-error",children:w}):null]})})]}),(0,t.jsx)(I.ReactFileManagerDialog,{open:v,onOpenChange:e=>{e||k(!1)},onSelect:A})]})}function K({repositoryPath:e,initialParentId:i,initialDescription:n,features:l,repositories:c,workflowDefaults:d,currentAgentType:p,currentModel:u,canPushDirectly:h}){let m=(0,a.useRouter)(),[x,f]=(0,r.useState)(!1),g=(0,a.usePathname)().startsWith("/create"),b=!x&&g;(0,r.useEffect)(()=>{!g&&x&&f(!1)},[g,x]);let w=(0,r.useCallback)(()=>{m.push("/")},[m]),j=(0,r.useCallback)(e=>{f(!0),m.push("/"),o(e).then(t=>{t.error?s.toast.error(t.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:t.feature.id,name:t.feature.name,description:t.feature.description,repositoryPath:t.feature.repositoryPath,parentId:e.parentId}}))}).catch(()=>{s.toast.error("Failed to create feature"),f(!1)})},[m]);return(0,t.jsx)($,{open:b,onClose:w,onSubmit:j,repositoryPath:e,features:l,repositories:c,workflowDefaults:d,initialParentId:i,initialDescription:n,isSubmitting:x,currentAgentType:p,currentModel:u,canPushDirectly:h})}e.s(["CreateDrawerClient",()=>K],15203)}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,76852,e=>{"use strict";var t=e.i(79054),r=e.i(45113),a=e.i(69342),l=e.i(54690),c=e.i(21023);let s=(0,c.createServerReference)("402fda983d6926c2e87a59e98b9a92b99d2f243529",c.callServer,void 0,c.findSourceMapURL,"syncRepository");function u(e){let[c,u]=(0,t.useState)(!1),[i,n]=(0,t.useState)(!1),[d,o]=(0,t.useState)(!1),[p,f]=(0,t.useState)(!1),[h,y]=(0,t.useState)(null),[m,v]=(0,t.useState)(null),[k,S]=(0,t.useState)(null),[b,x]=(0,t.useState)(null),R=(0,t.useRef)(null),M=(0,t.useRef)(null),g=(0,t.useRef)(null),C=(0,t.useRef)(null);(0,t.useEffect)(()=>()=>{R.current&&clearTimeout(R.current),M.current&&clearTimeout(M.current),g.current&&clearTimeout(g.current),C.current&&clearTimeout(C.current)},[]);let T=(0,t.useCallback)(async(t,r,a,l,c)=>{if(e&&!c){l.current&&clearTimeout(l.current),r(!0),a(null);try{let e=await t();if(!e.success){let t=e.error??"An unexpected error occurred";a(t),l.current=setTimeout(()=>a(null),5e3)}}catch(e){a(e instanceof Error?e.message:"An unexpected error occurred"),l.current=setTimeout(()=>a(null),5e3)}finally{r(!1)}}},[e]);return{openInIde:(0,t.useCallback)(()=>T(()=>(0,r.openIde)({repositoryPath:e.repositoryPath}),u,y,R,c),[T,c,e]),openInShell:(0,t.useCallback)(()=>T(()=>(0,a.openShell)({repositoryPath:e.repositoryPath}),n,v,M,i),[T,i,e]),openFolder:(0,t.useCallback)(()=>T(()=>(0,l.openFolder)(e.repositoryPath),o,S,g,d),[T,d,e]),syncMain:(0,t.useCallback)(()=>T(()=>s(e.repositoryId??""),f,x,C,p),[T,p,e]),ideLoading:c,shellLoading:i,folderLoading:d,syncLoading:p,ideError:h,shellError:m,folderError:k,syncError:b}}e.s(["useRepositoryActions",()=>u],76852)},30702,e=>{"use strict";let t=(0,e.i(3645).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["ExternalLink",()=>t],30702)},38573,e=>{"use strict";let t=(0,e.i(3645).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);e.s(["Terminal",()=>t],38573)},1650,e=>{"use strict";e.i(11495),e.s([])},19933,e=>{"use strict";let t=(0,e.i(3645).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",()=>t],19933)},8986,45113,69342,54690,e=>{"use strict";let t=(0,e.i(3645).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);e.s(["Code2",()=>t],8986);var r=e.i(21023);let a=(0,r.createServerReference)("4011cc48aa0b11ac02bff1c34f6dc1c3e173dea37b",r.callServer,void 0,r.findSourceMapURL,"openIde");e.s(["openIde",()=>a],45113);let l=(0,r.createServerReference)("402392c3e04bbe50434a5e244ddd3d789b1aa1f226",r.callServer,void 0,r.findSourceMapURL,"openShell");e.s(["openShell",()=>l],69342);let c=(0,r.createServerReference)("40d88d1b380354088f3276ac76269d894c5ec2069b",r.callServer,void 0,r.findSourceMapURL,"openFolder");e.s(["openFolder",()=>c],54690)},53360,e=>{"use strict";let t=(0,e.i(3645).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],53360)},97667,e=>{"use strict";var t=e.i(1012);e.s(["CheckIcon",()=>t.default])},23405,e=>{"use strict";var t=e.i(79054);function r(e){let r=t.useRef({value:e,previous:e});return t.useMemo(()=>(r.current.value!==e&&(r.current.previous=r.current.value,r.current.value=e),r.current.previous),[e])}e.s(["usePrevious",()=>r])},3214,e=>{"use strict";let t=(0,e.i(3645).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>t],3214)},10714,e=>{"use strict";let t=(0,e.i(3645).default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["default",()=>t])},49228,e=>{"use strict";let t=(0,e.i(3645).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>t],49228)},95812,35e3,e=>{"use strict";let t=(0,e.i(3645).default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["Circle",()=>t],95812);var r=e.i(80986);e.s(["CheckCircle2",()=>r.default],35e3)},54793,7729,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function a({icon:e,title:a,description:l,action:c,className:s,...u}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",s),...u,children:[e?(0,t.jsx)("div",{className:"text-muted-foreground",children:e}):null,(0,t.jsx)("h3",{className:"text-lg font-semibold",children:a}),l?(0,t.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:l}):null,c?(0,t.jsx)("div",{className:"mt-2",children:c}):null]})}e.s(["EmptyState",()=>a],7729),e.s([],54793)},91925,e=>{"use strict";let t=(0,e.i(3645).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);e.s(["FolderPlus",()=>t],91925)},41383,e=>{"use strict";var t=e.i(21023);let r=(0,t.createServerReference)("40b05f9304c5dfafb5c2d99f97aae0d94fc300b78a",t.callServer,void 0,t.findSourceMapURL,"addRepository");e.s(["addRepository",()=>r])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,76852,e=>{"use strict";var t=e.i(79054),r=e.i(31011),a=e.i(48079),l=e.i(15825),c=e.i(21023);let s=(0,c.createServerReference)("40bd6537f549bf80c4d78a083be9862c7e7f71f25d",c.callServer,void 0,c.findSourceMapURL,"syncRepository");function u(e){let[c,u]=(0,t.useState)(!1),[i,n]=(0,t.useState)(!1),[d,o]=(0,t.useState)(!1),[p,f]=(0,t.useState)(!1),[h,y]=(0,t.useState)(null),[m,v]=(0,t.useState)(null),[k,S]=(0,t.useState)(null),[x,b]=(0,t.useState)(null),R=(0,t.useRef)(null),M=(0,t.useRef)(null),g=(0,t.useRef)(null),C=(0,t.useRef)(null);(0,t.useEffect)(()=>()=>{R.current&&clearTimeout(R.current),M.current&&clearTimeout(M.current),g.current&&clearTimeout(g.current),C.current&&clearTimeout(C.current)},[]);let T=(0,t.useCallback)(async(t,r,a,l,c)=>{if(e&&!c){l.current&&clearTimeout(l.current),r(!0),a(null);try{let e=await t();if(!e.success){let t=e.error??"An unexpected error occurred";a(t),l.current=setTimeout(()=>a(null),5e3)}}catch(e){a(e instanceof Error?e.message:"An unexpected error occurred"),l.current=setTimeout(()=>a(null),5e3)}finally{r(!1)}}},[e]);return{openInIde:(0,t.useCallback)(()=>T(()=>(0,r.openIde)({repositoryPath:e.repositoryPath}),u,y,R,c),[T,c,e]),openInShell:(0,t.useCallback)(()=>T(()=>(0,a.openShell)({repositoryPath:e.repositoryPath}),n,v,M,i),[T,i,e]),openFolder:(0,t.useCallback)(()=>T(()=>(0,l.openFolder)(e.repositoryPath),o,S,g,d),[T,d,e]),syncMain:(0,t.useCallback)(()=>T(()=>s(e.repositoryId??""),f,b,C,p),[T,p,e]),ideLoading:c,shellLoading:i,folderLoading:d,syncLoading:p,ideError:h,shellError:m,folderError:k,syncError:x}}e.s(["useRepositoryActions",()=>u],76852)},30702,e=>{"use strict";let t=(0,e.i(3645).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["ExternalLink",()=>t],30702)},38573,e=>{"use strict";let t=(0,e.i(3645).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);e.s(["Terminal",()=>t],38573)},1650,e=>{"use strict";e.i(11495),e.s([])},19933,e=>{"use strict";let t=(0,e.i(3645).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",()=>t],19933)},8986,31011,48079,15825,e=>{"use strict";let t=(0,e.i(3645).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);e.s(["Code2",()=>t],8986);var r=e.i(21023);let a=(0,r.createServerReference)("4041e8f414f04cd579fb17a1191daf721ac6a19b35",r.callServer,void 0,r.findSourceMapURL,"openIde");e.s(["openIde",()=>a],31011);let l=(0,r.createServerReference)("40f485127431db736c5d807d83c1eb3d51159d1085",r.callServer,void 0,r.findSourceMapURL,"openShell");e.s(["openShell",()=>l],48079);let c=(0,r.createServerReference)("404cf4771cee557941feb5dcaa855f99eab0346656",r.callServer,void 0,r.findSourceMapURL,"openFolder");e.s(["openFolder",()=>c],15825)},53360,e=>{"use strict";let t=(0,e.i(3645).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],53360)},97667,e=>{"use strict";var t=e.i(1012);e.s(["CheckIcon",()=>t.default])},23405,e=>{"use strict";var t=e.i(79054);function r(e){let r=t.useRef({value:e,previous:e});return t.useMemo(()=>(r.current.value!==e&&(r.current.previous=r.current.value,r.current.value=e),r.current.previous),[e])}e.s(["usePrevious",()=>r])},3214,e=>{"use strict";let t=(0,e.i(3645).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>t],3214)},10714,e=>{"use strict";let t=(0,e.i(3645).default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["default",()=>t])},49228,e=>{"use strict";let t=(0,e.i(3645).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>t],49228)},95812,35e3,e=>{"use strict";let t=(0,e.i(3645).default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["Circle",()=>t],95812);var r=e.i(80986);e.s(["CheckCircle2",()=>r.default],35e3)},54793,7729,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function a({icon:e,title:a,description:l,action:c,className:s,...u}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",s),...u,children:[e?(0,t.jsx)("div",{className:"text-muted-foreground",children:e}):null,(0,t.jsx)("h3",{className:"text-lg font-semibold",children:a}),l?(0,t.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:l}):null,c?(0,t.jsx)("div",{className:"mt-2",children:c}):null]})}e.s(["EmptyState",()=>a],7729),e.s([],54793)},91925,e=>{"use strict";let t=(0,e.i(3645).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);e.s(["FolderPlus",()=>t],91925)},28036,e=>{"use strict";var t=e.i(21023);let r=(0,t.createServerReference)("40d4d9b6346383f44429e35ecca2ba4a032f392955",t.callServer,void 0,t.findSourceMapURL,"addRepository");e.s(["addRepository",()=>r])}]);
@@ -1,30 +0,0 @@
1
- /**
2
- * Auto-Archive Completed Use Case
3
- *
4
- * Scans for features in the Maintain (completed) lifecycle whose updatedAt
5
- * timestamp is older than the configured delay, and archives them automatically.
6
- *
7
- * Business Rules:
8
- * - Only features in Maintain lifecycle are candidates
9
- * - The delay is read from settings (workflow.autoArchiveDelayMinutes)
10
- * - A delay of 0 disables auto-archiving
11
- * - Uses the existing ArchiveFeatureUseCase for each archival to maintain
12
- * consistent lifecycle transitions (previousLifecycle preservation, etc.)
13
- */
14
- import type { Feature } from '../../../domain/generated/output.js';
15
- import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
16
- import { ArchiveFeatureUseCase } from './archive-feature.use-case.js';
17
- export declare class AutoArchiveCompletedUseCase {
18
- private readonly featureRepo;
19
- private readonly archiveFeature;
20
- constructor(featureRepo: IFeatureRepository, archiveFeature: ArchiveFeatureUseCase);
21
- /**
22
- * Archive all features in Maintain state that have been completed longer
23
- * than the given delay.
24
- *
25
- * @param delayMinutes - Minutes after completion before archiving. 0 = disabled.
26
- * @returns Array of features that were archived.
27
- */
28
- execute(delayMinutes: number): Promise<Feature[]>;
29
- }
30
- //# sourceMappingURL=auto-archive-completed.use-case.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-archive-completed.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/auto-archive-completed.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAItE,qBACa,2BAA2B;IAEN,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADgB,WAAW,EAAE,kBAAkB,EAC7D,cAAc,EAAE,qBAAqB;IAGxD;;;;;;OAMG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6BxD"}
@@ -1,75 +0,0 @@
1
- /**
2
- * Auto-Archive Completed Use Case
3
- *
4
- * Scans for features in the Maintain (completed) lifecycle whose updatedAt
5
- * timestamp is older than the configured delay, and archives them automatically.
6
- *
7
- * Business Rules:
8
- * - Only features in Maintain lifecycle are candidates
9
- * - The delay is read from settings (workflow.autoArchiveDelayMinutes)
10
- * - A delay of 0 disables auto-archiving
11
- * - Uses the existing ArchiveFeatureUseCase for each archival to maintain
12
- * consistent lifecycle transitions (previousLifecycle preservation, etc.)
13
- */
14
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- };
20
- var __metadata = (this && this.__metadata) || function (k, v) {
21
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
- };
23
- var __param = (this && this.__param) || function (paramIndex, decorator) {
24
- return function (target, key) { decorator(target, key, paramIndex); }
25
- };
26
- import { injectable, inject } from 'tsyringe';
27
- import { SdlcLifecycle } from '../../../domain/generated/output.js';
28
- import { ArchiveFeatureUseCase } from './archive-feature.use-case.js';
29
- const MS_PER_MINUTE = 60_000;
30
- let AutoArchiveCompletedUseCase = class AutoArchiveCompletedUseCase {
31
- featureRepo;
32
- archiveFeature;
33
- constructor(featureRepo, archiveFeature) {
34
- this.featureRepo = featureRepo;
35
- this.archiveFeature = archiveFeature;
36
- }
37
- /**
38
- * Archive all features in Maintain state that have been completed longer
39
- * than the given delay.
40
- *
41
- * @param delayMinutes - Minutes after completion before archiving. 0 = disabled.
42
- * @returns Array of features that were archived.
43
- */
44
- async execute(delayMinutes) {
45
- if (delayMinutes <= 0)
46
- return [];
47
- const features = await this.featureRepo.list({
48
- lifecycle: SdlcLifecycle.Maintain,
49
- });
50
- const now = Date.now();
51
- const thresholdMs = delayMinutes * MS_PER_MINUTE;
52
- const archived = [];
53
- for (const feature of features) {
54
- const updatedMs = feature.updatedAt instanceof Date
55
- ? feature.updatedAt.getTime()
56
- : new Date(feature.updatedAt).getTime();
57
- if (now - updatedMs >= thresholdMs) {
58
- try {
59
- const result = await this.archiveFeature.execute(feature.id);
60
- archived.push(result);
61
- }
62
- catch {
63
- // Feature may have been archived/deleted by another process — skip
64
- }
65
- }
66
- }
67
- return archived;
68
- }
69
- };
70
- AutoArchiveCompletedUseCase = __decorate([
71
- injectable(),
72
- __param(0, inject('IFeatureRepository')),
73
- __metadata("design:paramtypes", [Object, ArchiveFeatureUseCase])
74
- ], AutoArchiveCompletedUseCase);
75
- export { AutoArchiveCompletedUseCase };
@@ -1,15 +0,0 @@
1
- /**
2
- * Migration 049: Add auto_archive_delay_minutes column to the settings table.
3
- *
4
- * Adds one new column for configuring automatic archiving of completed features:
5
- * - auto_archive_delay_minutes (INTEGER DEFAULT 10): minutes after completion
6
- * before a Maintain-state feature is auto-archived. 0 = disabled.
7
- *
8
- * Default value of 10 means completed features are archived after 10 minutes.
9
- * Guards against duplicate column errors using table_info pragma.
10
- */
11
- import type { MigrationParams } from 'umzug';
12
- import type Database from 'better-sqlite3';
13
- export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
14
- export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
15
- //# sourceMappingURL=049-add-auto-archive-delay-minutes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"049-add-auto-archive-delay-minutes.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/049-add-auto-archive-delay-minutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Migration 049: Add auto_archive_delay_minutes column to the settings table.
3
- *
4
- * Adds one new column for configuring automatic archiving of completed features:
5
- * - auto_archive_delay_minutes (INTEGER DEFAULT 10): minutes after completion
6
- * before a Maintain-state feature is auto-archived. 0 = disabled.
7
- *
8
- * Default value of 10 means completed features are archived after 10 minutes.
9
- * Guards against duplicate column errors using table_info pragma.
10
- */
11
- export async function up({ context: db }) {
12
- const columns = db.pragma('table_info(settings)');
13
- const names = new Set(columns.map((c) => c.name));
14
- if (!names.has('auto_archive_delay_minutes')) {
15
- db.exec('ALTER TABLE settings ADD COLUMN auto_archive_delay_minutes INTEGER NOT NULL DEFAULT 10');
16
- }
17
- }
18
- export async function down({ context: db }) {
19
- void db;
20
- }
@@ -1,48 +0,0 @@
1
- /**
2
- * Auto-Archive Watcher Service
3
- *
4
- * Periodically polls for completed features (Maintain lifecycle) that have
5
- * exceeded the configured auto-archive delay, and archives them automatically.
6
- *
7
- * Follows the same singleton + start/stop pattern as NotificationWatcherService.
8
- *
9
- * The poll interval is 60 seconds — auto-archiving is not time-critical and
10
- * a minute-level granularity keeps DB load minimal.
11
- */
12
- import type { IFeatureRepository } from '../../../application/ports/output/repositories/feature-repository.interface.js';
13
- export declare class AutoArchiveWatcherService {
14
- private readonly featureRepo;
15
- private readonly pollIntervalMs;
16
- private intervalId;
17
- constructor(featureRepo: IFeatureRepository, pollIntervalMs?: number);
18
- isRunning(): boolean;
19
- start(): void;
20
- stop(): void;
21
- private poll;
22
- }
23
- /**
24
- * Initialize the auto-archive watcher singleton.
25
- * Must be called once during web server startup.
26
- *
27
- * @throws Error if the watcher is already initialized
28
- */
29
- export declare function initializeAutoArchiveWatcher(featureRepo: IFeatureRepository, pollIntervalMs?: number): void;
30
- /**
31
- * Get the auto-archive watcher singleton.
32
- *
33
- * @returns The auto-archive watcher service
34
- * @throws Error if the watcher hasn't been initialized yet
35
- */
36
- export declare function getAutoArchiveWatcher(): AutoArchiveWatcherService;
37
- /**
38
- * Check if the auto-archive watcher has been initialized.
39
- */
40
- export declare function hasAutoArchiveWatcher(): boolean;
41
- /**
42
- * Reset the auto-archive watcher singleton (for testing purposes only).
43
- * Stops the watcher if running before resetting.
44
- *
45
- * @internal
46
- */
47
- export declare function resetAutoArchiveWatcher(): void;
48
- //# sourceMappingURL=auto-archive-watcher.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-archive-watcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/auto-archive/auto-archive-watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gFAAgF,CAAC;AAQzH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,UAAU,CAA+C;gBAErD,WAAW,EAAE,kBAAkB,EAAE,cAAc,GAAE,MAAiC;IAK9F,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAWb,IAAI,IAAI,IAAI;YAOE,IAAI;CAcnB;AAMD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAMN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,yBAAyB,CAQjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
@@ -1,101 +0,0 @@
1
- /**
2
- * Auto-Archive Watcher Service
3
- *
4
- * Periodically polls for completed features (Maintain lifecycle) that have
5
- * exceeded the configured auto-archive delay, and archives them automatically.
6
- *
7
- * Follows the same singleton + start/stop pattern as NotificationWatcherService.
8
- *
9
- * The poll interval is 60 seconds — auto-archiving is not time-critical and
10
- * a minute-level granularity keeps DB load minimal.
11
- */
12
- import { AutoArchiveCompletedUseCase } from '../../../application/use-cases/features/auto-archive-completed.use-case.js';
13
- import { ArchiveFeatureUseCase } from '../../../application/use-cases/features/archive-feature.use-case.js';
14
- import { getSettings } from '../settings.service.js';
15
- const DEFAULT_POLL_INTERVAL_MS = 60_000;
16
- const DEFAULT_DELAY_MINUTES = 10;
17
- export class AutoArchiveWatcherService {
18
- featureRepo;
19
- pollIntervalMs;
20
- intervalId = null;
21
- constructor(featureRepo, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS) {
22
- this.featureRepo = featureRepo;
23
- this.pollIntervalMs = pollIntervalMs;
24
- }
25
- isRunning() {
26
- return this.intervalId !== null;
27
- }
28
- start() {
29
- if (this.intervalId !== null)
30
- return;
31
- // Run first poll immediately
32
- void this.poll();
33
- this.intervalId = setInterval(() => {
34
- void this.poll();
35
- }, this.pollIntervalMs);
36
- }
37
- stop() {
38
- if (this.intervalId !== null) {
39
- clearInterval(this.intervalId);
40
- this.intervalId = null;
41
- }
42
- }
43
- async poll() {
44
- try {
45
- const settings = getSettings();
46
- const delayMinutes = settings.workflow.autoArchiveDelayMinutes ?? DEFAULT_DELAY_MINUTES;
47
- if (delayMinutes <= 0)
48
- return;
49
- const archiveFeature = new ArchiveFeatureUseCase(this.featureRepo);
50
- const useCase = new AutoArchiveCompletedUseCase(this.featureRepo, archiveFeature);
51
- await useCase.execute(delayMinutes);
52
- }
53
- catch {
54
- // Settings not initialized or DB not ready — skip this poll cycle
55
- }
56
- }
57
- }
58
- // --- Singleton accessors (follows NotificationWatcher pattern) ---
59
- let watcherInstance = null;
60
- /**
61
- * Initialize the auto-archive watcher singleton.
62
- * Must be called once during web server startup.
63
- *
64
- * @throws Error if the watcher is already initialized
65
- */
66
- export function initializeAutoArchiveWatcher(featureRepo, pollIntervalMs) {
67
- if (watcherInstance !== null) {
68
- throw new Error('Auto-archive watcher already initialized. Cannot re-initialize.');
69
- }
70
- watcherInstance = new AutoArchiveWatcherService(featureRepo, pollIntervalMs);
71
- }
72
- /**
73
- * Get the auto-archive watcher singleton.
74
- *
75
- * @returns The auto-archive watcher service
76
- * @throws Error if the watcher hasn't been initialized yet
77
- */
78
- export function getAutoArchiveWatcher() {
79
- if (watcherInstance === null) {
80
- throw new Error('Auto-archive watcher not initialized. Call initializeAutoArchiveWatcher() during web server startup.');
81
- }
82
- return watcherInstance;
83
- }
84
- /**
85
- * Check if the auto-archive watcher has been initialized.
86
- */
87
- export function hasAutoArchiveWatcher() {
88
- return watcherInstance !== null;
89
- }
90
- /**
91
- * Reset the auto-archive watcher singleton (for testing purposes only).
92
- * Stops the watcher if running before resetting.
93
- *
94
- * @internal
95
- */
96
- export function resetAutoArchiveWatcher() {
97
- if (watcherInstance !== null) {
98
- watcherInstance.stop();
99
- }
100
- watcherInstance = null;
101
- }
@@ -1,3 +0,0 @@
1
- module.exports=[55628,a=>{"use strict";var b=a.i(96960),c=a.i(79393),d=a.i(9157),e=a.i(58363),f=a.i(25674);let g=(0,f.createServerReference)("402fda983d6926c2e87a59e98b9a92b99d2f243529",f.callServer,void 0,f.findSourceMapURL,"syncRepository");function h(a){let[f,h]=(0,b.useState)(!1),[i,j]=(0,b.useState)(!1),[k,l]=(0,b.useState)(!1),[m,n]=(0,b.useState)(!1),[o,p]=(0,b.useState)(null),[q,r]=(0,b.useState)(null),[s,t]=(0,b.useState)(null),[u,v]=(0,b.useState)(null),w=(0,b.useRef)(null),x=(0,b.useRef)(null),y=(0,b.useRef)(null),z=(0,b.useRef)(null);(0,b.useEffect)(()=>()=>{w.current&&clearTimeout(w.current),x.current&&clearTimeout(x.current),y.current&&clearTimeout(y.current),z.current&&clearTimeout(z.current)},[]);let A=(0,b.useCallback)(async(b,c,d,e,f)=>{if(a&&!f){e.current&&clearTimeout(e.current),c(!0),d(null);try{let a=await b();if(!a.success){let b=a.error??"An unexpected error occurred";d(b),e.current=setTimeout(()=>d(null),5e3)}}catch(a){d(a instanceof Error?a.message:"An unexpected error occurred"),e.current=setTimeout(()=>d(null),5e3)}finally{c(!1)}}},[a]);return{openInIde:(0,b.useCallback)(()=>A(()=>(0,c.openIde)({repositoryPath:a.repositoryPath}),h,p,w,f),[A,f,a]),openInShell:(0,b.useCallback)(()=>A(()=>(0,d.openShell)({repositoryPath:a.repositoryPath}),j,r,x,i),[A,i,a]),openFolder:(0,b.useCallback)(()=>A(()=>(0,e.openFolder)(a.repositoryPath),l,t,y,k),[A,k,a]),syncMain:(0,b.useCallback)(()=>A(()=>g(a.repositoryId??""),n,v,z,m),[A,m,a]),ideLoading:f,shellLoading:i,folderLoading:k,syncLoading:m,ideError:o,shellError:q,folderError:s,syncError:u}}a.s(["useRepositoryActions",()=>h],55628)},71238,a=>{"use strict";let b=(0,a.i(25700).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>b],71238)},63698,a=>{"use strict";let b=(0,a.i(25700).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",()=>b],63698)},78454,a=>{"use strict";a.i(24255),a.s([])},3195,a=>{"use strict";let b=(0,a.i(25700).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);a.s(["FolderOpen",()=>b],3195)},50488,79393,9157,58363,a=>{"use strict";let b=(0,a.i(25700).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);a.s(["Code2",()=>b],50488);var c=a.i(25674);let d=(0,c.createServerReference)("4011cc48aa0b11ac02bff1c34f6dc1c3e173dea37b",c.callServer,void 0,c.findSourceMapURL,"openIde");a.s(["openIde",()=>d],79393);let e=(0,c.createServerReference)("402392c3e04bbe50434a5e244ddd3d789b1aa1f226",c.callServer,void 0,c.findSourceMapURL,"openShell");a.s(["openShell",()=>e],9157);let f=(0,c.createServerReference)("40d88d1b380354088f3276ac76269d894c5ec2069b",c.callServer,void 0,c.findSourceMapURL,"openFolder");a.s(["openFolder",()=>f],58363)},3942,a=>{"use strict";let b=(0,a.i(25700).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);a.s(["Zap",()=>b],3942)},10606,a=>{"use strict";var b=a.i(51969);a.s(["CheckIcon",()=>b.default])},64005,a=>{"use strict";var b=a.i(96960);function c(a){let c=b.useRef({value:a,previous:a});return b.useMemo(()=>(c.current.value!==a&&(c.current.previous=c.current.value,c.current.value=a),c.current.previous),[a])}a.s(["usePrevious",()=>c])},67837,a=>{"use strict";let b=(0,a.i(25700).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",()=>b],67837)},96853,a=>{"use strict";let b=(0,a.i(25700).default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);a.s(["default",()=>b])},53170,a=>{"use strict";let b=(0,a.i(25700).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);a.s(["GitBranch",()=>b],53170)},4019,67075,a=>{"use strict";let b=(0,a.i(25700).default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["Circle",()=>b],4019);var c=a.i(2811);a.s(["CheckCircle2",()=>c.default],67075)},38702,16223,a=>{"use strict";var b=a.i(10973),c=a.i(85536);function d({icon:a,title:d,description:e,action:f,className:g,...h}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",g),...h,children:[a?(0,b.jsx)("div",{className:"text-muted-foreground",children:a}):null,(0,b.jsx)("h3",{className:"text-lg font-semibold",children:d}),e?(0,b.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:e}):null,f?(0,b.jsx)("div",{className:"mt-2",children:f}):null]})}a.s(["EmptyState",()=>d],16223),a.s([],38702)},42527,a=>{"use strict";let b=(0,a.i(25700).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],42527)},55039,a=>{"use strict";var b=a.i(25674);let c=(0,b.createServerReference)("40b05f9304c5dfafb5c2d99f97aae0d94fc300b78a",b.callServer,void 0,b.findSourceMapURL,"addRepository");a.s(["addRepository",()=>c])}];
2
-
3
- //# sourceMappingURL=_8e3fa3c7._.js.map