@shepai/cli 1.51.0 → 1.51.2

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 (85) hide show
  1. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +3 -1
  2. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -1
  3. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +1 -1
  4. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +1 -1
  5. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +3 -2
  6. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts +3 -1
  7. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +1 -1
  9. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +3 -2
  11. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +1 -1
  12. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +1 -1
  13. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +3 -2
  15. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts +3 -1
  16. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +1 -1
  18. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -11
  20. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +6 -5
  22. package/dist/tsconfig.build.tsbuildinfo +1 -1
  23. package/package.json +1 -1
  24. package/web/.next/BUILD_ID +1 -1
  25. package/web/.next/build-manifest.json +2 -2
  26. package/web/.next/cache/.previewinfo +1 -1
  27. package/web/.next/cache/.rscinfo +1 -1
  28. package/web/.next/cache/.tsbuildinfo +1 -1
  29. package/web/.next/cache/config.json +3 -3
  30. package/web/.next/fallback-build-manifest.json +2 -2
  31. package/web/.next/prerender-manifest.json +3 -3
  32. package/web/.next/required-server-files.js +1 -1
  33. package/web/.next/required-server-files.json +1 -1
  34. package/web/.next/server/app/_global-error.html +2 -2
  35. package/web/.next/server/app/_global-error.rsc +1 -1
  36. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  37. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  38. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  39. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  40. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  41. package/web/.next/server/app/page/server-reference-manifest.json +14 -14
  42. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
  44. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
  45. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  46. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
  47. package/web/.next/server/pages/500.html +2 -2
  48. package/web/.next/server/server-reference-manifest.js +1 -1
  49. package/web/.next/server/server-reference-manifest.json +15 -15
  50. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  51. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  52. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  53. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  54. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  55. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  56. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  57. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  58. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  59. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  60. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  61. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
  62. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  63. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
  64. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  65. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
  66. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  67. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  68. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +15 -15
  69. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-config.ts +3 -1
  70. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-drawer.tsx +9 -1
  71. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.ts +3 -1
  72. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.tsx +9 -1
  73. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +1 -1
  74. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.tsx +9 -1
  75. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.ts +3 -1
  76. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +6 -6
  77. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +51 -35
  78. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +6 -5
  79. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  80. package/web/.next/static/chunks/{52930750dd593d0c.js → f6f61237a0ec20e3.js} +2 -2
  81. package/web/.next/trace +1 -1
  82. package/web/.next/trace-build +1 -1
  83. /package/web/.next/static/{xkINn0kUHKOhvEvbvlh-B → w8CFnR5hKioREFJyh8hpW}/_buildManifest.js +0 -0
  84. /package/web/.next/static/{xkINn0kUHKOhvEvbvlh-B → w8CFnR5hKioREFJyh8hpW}/_clientMiddlewareManifest.json +0 -0
  85. /package/web/.next/static/{xkINn0kUHKOhvEvbvlh-B → w8CFnR5hKioREFJyh8hpW}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},59975,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},22672,a=>{a.n(a.i(41208))},32459,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation>","default")},93933,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx","default")},67651,a=>{"use strict";a.i(32459);var b=a.i(93933);a.n(b)},77048,a=>{"use strict";var b=a.i(92807),c=a.i(60526),d=a.i(67651);function e(){let a={nodeVersion:process.version,platform:(0,c.platform)(),arch:(0,c.arch)()};return(0,b.jsx)(d.default,{versionInfo:{version:"1.50.0",name:"@shepai/cli",description:"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},systemInfo:a})}a.s(["default",()=>e],77048)}];
1
+ module.exports=[60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},59975,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},22672,a=>{a.n(a.i(41208))},32459,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation>","default")},93933,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx","default")},67651,a=>{"use strict";a.i(32459);var b=a.i(93933);a.n(b)},77048,a=>{"use strict";var b=a.i(92807),c=a.i(60526),d=a.i(67651);function e(){let a={nodeVersion:process.version,platform:(0,c.platform)(),arch:(0,c.arch)()};return(0,b.jsx)(d.default,{versionInfo:{version:"1.51.1",name:"@shepai/cli",description:"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},systemInfo:a})}a.s(["default",()=>e],77048)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__249c74f6._.js.map
@@ -1,9 +1,9 @@
1
1
  module.exports=[92658,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(28478)},12581,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},12714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},4510,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{rejected:!1,error:"Feature not found"};if(!e.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("RejectAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.rejected)return{rejected:!1,error:g.reason};return{rejected:!0,iteration:g.iteration,iterationWarning:g.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a);return{questionnaire:{question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"601c2afb12ccd3b70ba841b84b00c396f9debb936c",null),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"60efbc282de9773456be991941bce88ccd5c77c3c3",null),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"407596c99afd6fc8063d73018fe07e7c2602d80f5f",null),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"4007e226f7991913fb327e7a4fa639887b14b55d0c",null);let i="__shepSettings";function j(){let a=function(){let a=globalThis[i];if(null!=a)return a;let b=process[i];return null!=b?b:null}();if(null===a)throw Error("Settings not initialized. Call initializeSettings() during CLI bootstrap.");return a}async function k(){let{workflow:a}=j();return{approvalGates:{allowPrd:a.approvalGateDefaults.allowPrd,allowPlan:a.approvalGateDefaults.allowPlan,allowMerge:a.approvalGateDefaults.allowMerge},push:a.approvalGateDefaults.pushOnImplementationComplete,openPr:a.openPrOnImplementationComplete}}async function l(a){if(!a.trim())return{error:"Feature id is required"};try{let b,d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{error:"Feature not found"};let f=e.pr?{url:e.pr.url,number:e.pr.number,status:e.pr.status,commitHash:e.pr.commitHash,ciStatus:e.pr.ciStatus}:void 0,g=e.branch?{source:e.branch,target:"main"}:void 0;try{let d=(0,c.resolve)("GetPlanArtifactUseCase");b=(await d.execute(a)).phases.map(({id:a,name:b,description:c})=>({id:a,name:b,description:c}))}catch{}if(!e.worktreePath)return{pr:f,branch:g,phases:b,warning:f?void 0:"No PR or diff data available"};try{let a=(0,c.resolve)("IGitPrService"),d=await a.getPrDiffSummary(e.worktreePath,"main");return{pr:f,branch:g,phases:b,diffSummary:d}}catch{return{pr:f,branch:g,phases:b,warning:"Diff statistics unavailable"}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function m(a){let{repositoryPath:b,branch:d}=a;if(!b?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};let e=j().environment.defaultEditor,f=(0,c.resolve)("LaunchIdeUseCase"),g=await f.execute({editorId:e,repositoryPath:b,branch:d,checkAvailability:!0});return g.ok?{success:!0,editor:g.editorName,path:g.worktreePath}:{success:!1,error:g.message}}(0,d.ensureServerEntryExports)([k]),(0,b.registerServerReference)(k,"00d3b3262406ae56ae24c5307abceffe0132339713",null),(0,d.ensureServerEntryExports)([l]),(0,b.registerServerReference)(l,"4031ebf661aeb54b2a3ea5394dba213071bf1214fc",null),(0,d.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"409579487533bc30d97af785a2f7bb088020b4867f",null);var n=a.i(2157),o=a.i(60526),p=a.i(74533),q=a.i(66680),r=a.i(50227);async function s(a){let{repositoryPath:b,branch:c}=a;if(!b?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a,d,e=j().environment.shellPreference,f=c?(a=(0,q.createHash)("sha256").update(b).digest("hex").slice(0,16),d=c.replace(/\//g,"-"),(0,r.join)(process.env.SHEP_HOME??(0,r.join)((0,o.homedir)(),".shep"),"repos",a,"wt",d)):b;if(!(0,n.existsSync)(f))return{success:!1,error:`Path does not exist: ${f}`};return(0,o.platform)(),(0,p.spawn)("x-terminal-emulator",[`--working-directory=${f}`],{detached:!0,stdio:"ignore"}).unref(),{success:!0,path:f,shell:e}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}async function t(a){if(!a?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,n.existsSync)(a))return{success:!1,error:"Directory not found"};return(0,o.platform)(),(0,p.spawn)("xdg-open",[a],{detached:!0,stdio:"ignore"}).unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}a.i(12714),(0,d.ensureServerEntryExports)([s]),(0,b.registerServerReference)(s,"40265a49e7ab8af4798a57fca97ab2cbecb2b4e3ea",null),(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"409ed90129b15206f22aa4a6aa0ad5a8d57d5a6344",null);let u={platform:process.platform,exec:(a,b)=>(0,p.execSync)(a,b)},v={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class w{deps;constructor(a={}){this.deps={...u,...a}}getCommand(){return v[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function x(){let a=new w;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}async function y(a){let{name:b,description:d,repositoryPath:e,attachments:f,approvalGates:g,push:h,openPr:i}=a;if(!b?.trim())return{error:"name is required"};if(!e?.trim())return{error:"repositoryPath is required"};let j=function(a,b,c){let d=`Feature: ${a}`;if(b&&(d+=`
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},12714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},4510,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{rejected:!1,error:"Feature not found"};if(!e.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("RejectAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.rejected)return{rejected:!1,error:g.reason};return{rejected:!0,iteration:g.iteration,iterationWarning:g.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a);return{questionnaire:{question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"6000e87c7be0bb90f8d2a5ca94bf34a7fde32f1975",null),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"603cd0fbf455df9a388120be2372bd4d014175d7c9",null),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40ef67fc413bb4bc3578be6a0144a5594062d7180f",null),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"40ba263f95d8e2668fff21da6f533abe99d643595c",null);let i="__shepSettings";function j(){let a=function(){let a=globalThis[i];if(null!=a)return a;let b=process[i];return null!=b?b:null}();if(null===a)throw Error("Settings not initialized. Call initializeSettings() during CLI bootstrap.");return a}async function k(){let{workflow:a}=j();return{approvalGates:{allowPrd:a.approvalGateDefaults.allowPrd,allowPlan:a.approvalGateDefaults.allowPlan,allowMerge:a.approvalGateDefaults.allowMerge},push:a.approvalGateDefaults.pushOnImplementationComplete,openPr:a.openPrOnImplementationComplete}}async function l(a){if(!a.trim())return{error:"Feature id is required"};try{let b,d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{error:"Feature not found"};let f=e.pr?{url:e.pr.url,number:e.pr.number,status:e.pr.status,commitHash:e.pr.commitHash,ciStatus:e.pr.ciStatus}:void 0,g=e.branch?{source:e.branch,target:"main"}:void 0;try{let d=(0,c.resolve)("GetPlanArtifactUseCase");b=(await d.execute(a)).phases.map(({id:a,name:b,description:c})=>({id:a,name:b,description:c}))}catch{}if(!e.worktreePath)return{pr:f,branch:g,phases:b,warning:f?void 0:"No PR or diff data available"};try{let a=(0,c.resolve)("IGitPrService"),d=await a.getPrDiffSummary(e.worktreePath,"main");return{pr:f,branch:g,phases:b,diffSummary:d}}catch{return{pr:f,branch:g,phases:b,warning:"Diff statistics unavailable"}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function m(a){let{repositoryPath:b,branch:d}=a;if(!b?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};let e=j().environment.defaultEditor,f=(0,c.resolve)("LaunchIdeUseCase"),g=await f.execute({editorId:e,repositoryPath:b,branch:d,checkAvailability:!0});return g.ok?{success:!0,editor:g.editorName,path:g.worktreePath}:{success:!1,error:g.message}}(0,d.ensureServerEntryExports)([k]),(0,b.registerServerReference)(k,"00f4e2cdb00ecef7ee04a454f6d5411711007570e5",null),(0,d.ensureServerEntryExports)([l]),(0,b.registerServerReference)(l,"40ec0a43b23af9ab37c1039c612ce29d163469d84e",null),(0,d.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"402832ce5a9e646156dbca05cb70ee546d5f5039ba",null);var n=a.i(2157),o=a.i(60526),p=a.i(74533),q=a.i(66680),r=a.i(50227);async function s(a){let{repositoryPath:b,branch:c}=a;if(!b?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a,d,e=j().environment.shellPreference,f=c?(a=(0,q.createHash)("sha256").update(b).digest("hex").slice(0,16),d=c.replace(/\//g,"-"),(0,r.join)(process.env.SHEP_HOME??(0,r.join)((0,o.homedir)(),".shep"),"repos",a,"wt",d)):b;if(!(0,n.existsSync)(f))return{success:!1,error:`Path does not exist: ${f}`};return(0,o.platform)(),(0,p.spawn)("x-terminal-emulator",[`--working-directory=${f}`],{detached:!0,stdio:"ignore"}).unref(),{success:!0,path:f,shell:e}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}async function t(a){if(!a?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,n.existsSync)(a))return{success:!1,error:"Directory not found"};return(0,o.platform)(),(0,p.spawn)("xdg-open",[a],{detached:!0,stdio:"ignore"}).unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}a.i(12714),(0,d.ensureServerEntryExports)([s]),(0,b.registerServerReference)(s,"401b7543e49d4acf71f7c5ef876a8f2b9c55f965fd",null),(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"4055a0446b272911496e20a4482d461eb0335fb462",null);let u={platform:process.platform,exec:(a,b)=>(0,p.execSync)(a,b)},v={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class w{deps;constructor(a={}){this.deps={...u,...a}}getCommand(){return v[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function x(){let a=new w;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}async function y(a){let{name:b,description:d,repositoryPath:e,attachments:f,approvalGates:g,push:h,openPr:i}=a;if(!b?.trim())return{error:"name is required"};if(!e?.trim())return{error:"repositoryPath is required"};let j=function(a,b,c){let d=`Feature: ${a}`;if(b&&(d+=`
3
3
 
4
4
  ${b}`),c&&c.length>0){let a=c.map(a=>`- ${a.path}`).join("\n");d+=`
5
5
 
6
6
  Attached files:
7
- ${a}`}return d}(b,d,f),k={allowPrd:g?.allowPrd??!1,allowPlan:g?.allowPlan??!1,allowMerge:g?.allowMerge??!1};try{let a=(0,c.resolve)("CreateFeatureUseCase");return{feature:(await a.execute({userInput:j,repositoryPath:e,approvalGates:k,push:h??!1,openPr:i??!1})).feature}}catch(a){return{error:a instanceof Error?a.message:"Failed to create feature"}}}async function z(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,c.resolve)("DeleteFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function A(a){let{path:b,name:d}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,c.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:d})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function B(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,c.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}(0,d.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"004a6867a7e4c0aa6af2e58bebb7492ea82f99fc66",null),(0,d.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"4053ca51d95837f55eb74b43bc2597847c0d50bd43",null),(0,d.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"404d8969825b42bad6d11032e41a40993b1063f549",null),(0,d.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"40f7f7db1a72a2564d018dd27cb7a21d335b1c93d0",null),(0,d.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"40785a025418bff546ea08f492135a5069696505c2",null),a.s([],36114),a.i(36114),a.s(["004a6867a7e4c0aa6af2e58bebb7492ea82f99fc66",()=>x,"00d3b3262406ae56ae24c5307abceffe0132339713",()=>k,"4007e226f7991913fb327e7a4fa639887b14b55d0c",()=>h,"40265a49e7ab8af4798a57fca97ab2cbecb2b4e3ea",()=>s,"4031ebf661aeb54b2a3ea5394dba213071bf1214fc",()=>l,"404d8969825b42bad6d11032e41a40993b1063f549",()=>z,"4053ca51d95837f55eb74b43bc2597847c0d50bd43",()=>y,"407596c99afd6fc8063d73018fe07e7c2602d80f5f",()=>g,"40785a025418bff546ea08f492135a5069696505c2",()=>B,"409579487533bc30d97af785a2f7bb088020b4867f",()=>m,"409ed90129b15206f22aa4a6aa0ad5a8d57d5a6344",()=>t,"40f7f7db1a72a2564d018dd27cb7a21d335b1c93d0",()=>A,"601c2afb12ccd3b70ba841b84b00c396f9debb936c",()=>e,"60efbc282de9773456be991941bce88ccd5c77c3c3",()=>f],4510)}];
7
+ ${a}`}return d}(b,d,f),k={allowPrd:g?.allowPrd??!1,allowPlan:g?.allowPlan??!1,allowMerge:g?.allowMerge??!1};try{let a=(0,c.resolve)("CreateFeatureUseCase");return{feature:(await a.execute({userInput:j,repositoryPath:e,approvalGates:k,push:h??!1,openPr:i??!1})).feature}}catch(a){return{error:a instanceof Error?a.message:"Failed to create feature"}}}async function z(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,c.resolve)("DeleteFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function A(a){let{path:b,name:d}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,c.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:d})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function B(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,c.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}(0,d.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"00802a6dbb662d862d6532f901be2ca61b6d205617",null),(0,d.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"40d922e41b8c03348e504e8c793c417d336d91696b",null),(0,d.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"4076b1476db664f123d6350780cf4dd44f9c71bdfe",null),(0,d.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"40c1c6012823efbaea1464795ce8639175dac854b9",null),(0,d.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"40c848c0071f11db41c03326234bd1a6059d15d498",null),a.s([],36114),a.i(36114),a.s(["00802a6dbb662d862d6532f901be2ca61b6d205617",()=>x,"00f4e2cdb00ecef7ee04a454f6d5411711007570e5",()=>k,"401b7543e49d4acf71f7c5ef876a8f2b9c55f965fd",()=>s,"402832ce5a9e646156dbca05cb70ee546d5f5039ba",()=>m,"4055a0446b272911496e20a4482d461eb0335fb462",()=>t,"4076b1476db664f123d6350780cf4dd44f9c71bdfe",()=>z,"40ba263f95d8e2668fff21da6f533abe99d643595c",()=>h,"40c1c6012823efbaea1464795ce8639175dac854b9",()=>A,"40c848c0071f11db41c03326234bd1a6059d15d498",()=>B,"40d922e41b8c03348e504e8c793c417d336d91696b",()=>y,"40ec0a43b23af9ab37c1039c612ce29d163469d84e",()=>l,"40ef67fc413bb4bc3578be6a0144a5594062d7180f",()=>g,"6000e87c7be0bb90f8d2a5ca94bf34a7fde32f1975",()=>e,"603cd0fbf455df9a388120be2372bd4d014175d7c9",()=>f],4510)}];
8
8
 
9
9
  //# sourceMappingURL=%5Broot-of-the-server%5D__2d1a8e37._.js.map
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--xkINn0kUHKOhvEvbvlh_B--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b13aa397579082e7.js"/><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/cfe4dc9904fcfddb.js" async=""></script><script src="/_next/static/chunks/084314470f2144d2.js" async=""></script><script src="/_next/static/chunks/turbopack-35ff53de4dab1e56.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/fe70e73feb07bcfd.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/b13aa397579082e7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n3:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n4:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"ViewportBoundary\"]\n9:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"MetadataBoundary\"]\nb:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"xkINn0kUHKOhvEvbvlh-B\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ab02eec995295bef.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/fe70e73feb07bcfd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--w8CFnR5hKioREFJyh8hpW--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b13aa397579082e7.js"/><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/cfe4dc9904fcfddb.js" async=""></script><script src="/_next/static/chunks/084314470f2144d2.js" async=""></script><script src="/_next/static/chunks/turbopack-35ff53de4dab1e56.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/fe70e73feb07bcfd.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/b13aa397579082e7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n3:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n4:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"ViewportBoundary\"]\n9:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"MetadataBoundary\"]\nb:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"w8CFnR5hKioREFJyh8hpW\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ab02eec995295bef.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/fe70e73feb07bcfd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"601c2afb12ccd3b70ba841b84b00c396f9debb936c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"approveFeature\",\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\",\n \"exportedName\": \"approveFeature\"\n },\n \"60efbc282de9773456be991941bce88ccd5c77c3c3\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"rejectFeature\",\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\",\n \"exportedName\": \"rejectFeature\"\n },\n \"407596c99afd6fc8063d73018fe07e7c2602d80f5f\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getFeatureArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\",\n \"exportedName\": \"getFeatureArtifact\"\n },\n \"4007e226f7991913fb327e7a4fa639887b14b55d0c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getResearchArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\",\n \"exportedName\": \"getResearchArtifact\"\n },\n \"00d3b3262406ae56ae24c5307abceffe0132339713\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getWorkflowDefaults\",\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\",\n \"exportedName\": \"getWorkflowDefaults\"\n },\n \"4031ebf661aeb54b2a3ea5394dba213071bf1214fc\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getMergeReviewData\",\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\",\n \"exportedName\": \"getMergeReviewData\"\n },\n \"409579487533bc30d97af785a2f7bb088020b4867f\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openIde\",\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\",\n \"exportedName\": \"openIde\"\n },\n \"40265a49e7ab8af4798a57fca97ab2cbecb2b4e3ea\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openShell\",\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\",\n \"exportedName\": \"openShell\"\n },\n \"409ed90129b15206f22aa4a6aa0ad5a8d57d5a6344\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openFolder\",\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\",\n \"exportedName\": \"openFolder\"\n },\n \"004a6867a7e4c0aa6af2e58bebb7492ea82f99fc66\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\",\n \"exportedName\": \"pickFolder\"\n },\n \"4053ca51d95837f55eb74b43bc2597847c0d50bd43\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"createFeature\",\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\",\n \"exportedName\": \"createFeature\"\n },\n \"404d8969825b42bad6d11032e41a40993b1063f549\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"deleteFeature\",\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\",\n \"exportedName\": \"deleteFeature\"\n },\n \"40f7f7db1a72a2564d018dd27cb7a21d335b1c93d0\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"addRepository\",\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\",\n \"exportedName\": \"addRepository\"\n },\n \"40785a025418bff546ea08f492135a5069696505c2\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"deleteRepository\",\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\",\n \"exportedName\": \"deleteRepository\"\n }\n },\n \"edge\": {},\n \"encryptionKey\": \"kxTKv5inGgQZhKWPcittz6z1ENflj+cOZGUYhUiwi3c=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"6000e87c7be0bb90f8d2a5ca94bf34a7fde32f1975\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"approveFeature\",\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\",\n \"exportedName\": \"approveFeature\"\n },\n \"603cd0fbf455df9a388120be2372bd4d014175d7c9\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"rejectFeature\",\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\",\n \"exportedName\": \"rejectFeature\"\n },\n \"40ef67fc413bb4bc3578be6a0144a5594062d7180f\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getFeatureArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\",\n \"exportedName\": \"getFeatureArtifact\"\n },\n \"40ba263f95d8e2668fff21da6f533abe99d643595c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getResearchArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\",\n \"exportedName\": \"getResearchArtifact\"\n },\n \"00f4e2cdb00ecef7ee04a454f6d5411711007570e5\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getWorkflowDefaults\",\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\",\n \"exportedName\": \"getWorkflowDefaults\"\n },\n \"40ec0a43b23af9ab37c1039c612ce29d163469d84e\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"getMergeReviewData\",\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\",\n \"exportedName\": \"getMergeReviewData\"\n },\n \"402832ce5a9e646156dbca05cb70ee546d5f5039ba\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openIde\",\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\",\n \"exportedName\": \"openIde\"\n },\n \"401b7543e49d4acf71f7c5ef876a8f2b9c55f965fd\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openShell\",\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\",\n \"exportedName\": \"openShell\"\n },\n \"4055a0446b272911496e20a4482d461eb0335fb462\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"openFolder\",\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\",\n \"exportedName\": \"openFolder\"\n },\n \"00802a6dbb662d862d6532f901be2ca61b6d205617\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\",\n \"exportedName\": \"pickFolder\"\n },\n \"40d922e41b8c03348e504e8c793c417d336d91696b\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"createFeature\",\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\",\n \"exportedName\": \"createFeature\"\n },\n \"4076b1476db664f123d6350780cf4dd44f9c71bdfe\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"deleteFeature\",\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\",\n \"exportedName\": \"deleteFeature\"\n },\n \"40c1c6012823efbaea1464795ce8639175dac854b9\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"addRepository\",\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\",\n \"exportedName\": \"addRepository\"\n },\n \"40c848c0071f11db41c03326234bd1a6059d15d498\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 4510,\n \"async\": false,\n \"exportedName\": \"deleteRepository\",\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\",\n \"exportedName\": \"deleteRepository\"\n }\n },\n \"edge\": {},\n \"encryptionKey\": \"7Gnz/cY+7++sTLbuy/b4sIuGWkA4YHeAhWDfduRd05Q=\"\n}"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "node": {
3
- "601c2afb12ccd3b70ba841b84b00c396f9debb936c": {
3
+ "6000e87c7be0bb90f8d2a5ca94bf34a7fde32f1975": {
4
4
  "workers": {
5
5
  "app/page": {
6
6
  "moduleId": 4510,
@@ -15,7 +15,7 @@
15
15
  "filename": "src/presentation/web/app/actions/approve-feature.ts",
16
16
  "exportedName": "approveFeature"
17
17
  },
18
- "60efbc282de9773456be991941bce88ccd5c77c3c3": {
18
+ "603cd0fbf455df9a388120be2372bd4d014175d7c9": {
19
19
  "workers": {
20
20
  "app/page": {
21
21
  "moduleId": 4510,
@@ -30,7 +30,7 @@
30
30
  "filename": "src/presentation/web/app/actions/reject-feature.ts",
31
31
  "exportedName": "rejectFeature"
32
32
  },
33
- "407596c99afd6fc8063d73018fe07e7c2602d80f5f": {
33
+ "40ef67fc413bb4bc3578be6a0144a5594062d7180f": {
34
34
  "workers": {
35
35
  "app/page": {
36
36
  "moduleId": 4510,
@@ -45,7 +45,7 @@
45
45
  "filename": "src/presentation/web/app/actions/get-feature-artifact.ts",
46
46
  "exportedName": "getFeatureArtifact"
47
47
  },
48
- "4007e226f7991913fb327e7a4fa639887b14b55d0c": {
48
+ "40ba263f95d8e2668fff21da6f533abe99d643595c": {
49
49
  "workers": {
50
50
  "app/page": {
51
51
  "moduleId": 4510,
@@ -60,7 +60,7 @@
60
60
  "filename": "src/presentation/web/app/actions/get-research-artifact.ts",
61
61
  "exportedName": "getResearchArtifact"
62
62
  },
63
- "00d3b3262406ae56ae24c5307abceffe0132339713": {
63
+ "00f4e2cdb00ecef7ee04a454f6d5411711007570e5": {
64
64
  "workers": {
65
65
  "app/page": {
66
66
  "moduleId": 4510,
@@ -75,7 +75,7 @@
75
75
  "filename": "src/presentation/web/app/actions/get-workflow-defaults.ts",
76
76
  "exportedName": "getWorkflowDefaults"
77
77
  },
78
- "4031ebf661aeb54b2a3ea5394dba213071bf1214fc": {
78
+ "40ec0a43b23af9ab37c1039c612ce29d163469d84e": {
79
79
  "workers": {
80
80
  "app/page": {
81
81
  "moduleId": 4510,
@@ -90,7 +90,7 @@
90
90
  "filename": "src/presentation/web/app/actions/get-merge-review-data.ts",
91
91
  "exportedName": "getMergeReviewData"
92
92
  },
93
- "409579487533bc30d97af785a2f7bb088020b4867f": {
93
+ "402832ce5a9e646156dbca05cb70ee546d5f5039ba": {
94
94
  "workers": {
95
95
  "app/page": {
96
96
  "moduleId": 4510,
@@ -105,7 +105,7 @@
105
105
  "filename": "src/presentation/web/app/actions/open-ide.ts",
106
106
  "exportedName": "openIde"
107
107
  },
108
- "40265a49e7ab8af4798a57fca97ab2cbecb2b4e3ea": {
108
+ "401b7543e49d4acf71f7c5ef876a8f2b9c55f965fd": {
109
109
  "workers": {
110
110
  "app/page": {
111
111
  "moduleId": 4510,
@@ -120,7 +120,7 @@
120
120
  "filename": "src/presentation/web/app/actions/open-shell.ts",
121
121
  "exportedName": "openShell"
122
122
  },
123
- "409ed90129b15206f22aa4a6aa0ad5a8d57d5a6344": {
123
+ "4055a0446b272911496e20a4482d461eb0335fb462": {
124
124
  "workers": {
125
125
  "app/page": {
126
126
  "moduleId": 4510,
@@ -135,7 +135,7 @@
135
135
  "filename": "src/presentation/web/app/actions/open-folder.ts",
136
136
  "exportedName": "openFolder"
137
137
  },
138
- "004a6867a7e4c0aa6af2e58bebb7492ea82f99fc66": {
138
+ "00802a6dbb662d862d6532f901be2ca61b6d205617": {
139
139
  "workers": {
140
140
  "app/page": {
141
141
  "moduleId": 4510,
@@ -150,7 +150,7 @@
150
150
  "filename": "src/presentation/web/app/actions/pick-folder.ts",
151
151
  "exportedName": "pickFolder"
152
152
  },
153
- "4053ca51d95837f55eb74b43bc2597847c0d50bd43": {
153
+ "40d922e41b8c03348e504e8c793c417d336d91696b": {
154
154
  "workers": {
155
155
  "app/page": {
156
156
  "moduleId": 4510,
@@ -165,7 +165,7 @@
165
165
  "filename": "src/presentation/web/app/actions/create-feature.ts",
166
166
  "exportedName": "createFeature"
167
167
  },
168
- "404d8969825b42bad6d11032e41a40993b1063f549": {
168
+ "4076b1476db664f123d6350780cf4dd44f9c71bdfe": {
169
169
  "workers": {
170
170
  "app/page": {
171
171
  "moduleId": 4510,
@@ -180,7 +180,7 @@
180
180
  "filename": "src/presentation/web/app/actions/delete-feature.ts",
181
181
  "exportedName": "deleteFeature"
182
182
  },
183
- "40f7f7db1a72a2564d018dd27cb7a21d335b1c93d0": {
183
+ "40c1c6012823efbaea1464795ce8639175dac854b9": {
184
184
  "workers": {
185
185
  "app/page": {
186
186
  "moduleId": 4510,
@@ -195,7 +195,7 @@
195
195
  "filename": "src/presentation/web/app/actions/add-repository.ts",
196
196
  "exportedName": "addRepository"
197
197
  },
198
- "40785a025418bff546ea08f492135a5069696505c2": {
198
+ "40c848c0071f11db41c03326234bd1a6059d15d498": {
199
199
  "workers": {
200
200
  "app/page": {
201
201
  "moduleId": 4510,
@@ -212,5 +212,5 @@
212
212
  }
213
213
  },
214
214
  "edge": {},
215
- "encryptionKey": "kxTKv5inGgQZhKWPcittz6z1ENflj+cOZGUYhUiwi3c="
215
+ "encryptionKey": "7Gnz/cY+7++sTLbuy/b4sIuGWkA4YHeAhWDfduRd05Q="
216
216
  }
@@ -61,7 +61,9 @@ export interface MergeReviewProps {
61
61
  }
62
62
 
63
63
  /** Props for the merge review drawer (shell wrapper) */
64
- export interface MergeReviewDrawerProps extends MergeReviewProps {
64
+ export interface MergeReviewDrawerProps extends Omit<MergeReviewProps, 'data'> {
65
+ /** Merge review data — null while loading */
66
+ data: MergeReviewData | null;
65
67
  /** Whether the drawer is open */
66
68
  open: boolean;
67
69
  /** Callback when drawer should close */
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { Loader2 } from 'lucide-react';
3
4
  import { ReviewDrawerShell } from '@/components/common/review-drawer-shell';
4
5
  import { MergeReview } from './merge-review';
5
6
  import type { MergeReviewDrawerProps } from './merge-review-config';
@@ -14,6 +15,7 @@ export function MergeReviewDrawer({
14
15
  specPath,
15
16
  onDelete,
16
17
  isDeleting,
18
+ data,
17
19
  ...reviewProps
18
20
  }: MergeReviewDrawerProps) {
19
21
  return (
@@ -28,7 +30,13 @@ export function MergeReviewDrawer({
28
30
  onDelete={onDelete}
29
31
  isDeleting={isDeleting}
30
32
  >
31
- <MergeReview {...reviewProps} />
33
+ {data ? (
34
+ <MergeReview data={data} {...reviewProps} />
35
+ ) : (
36
+ <div className="flex items-center justify-center p-8">
37
+ <Loader2 className="text-muted-foreground h-6 w-6 animate-spin" />
38
+ </div>
39
+ )}
32
40
  </ReviewDrawerShell>
33
41
  );
34
42
  }
@@ -26,7 +26,9 @@ export interface PrdQuestionnaireProps {
26
26
  showHeader?: boolean;
27
27
  }
28
28
 
29
- export interface PrdQuestionnaireDrawerProps extends PrdQuestionnaireProps {
29
+ export interface PrdQuestionnaireDrawerProps extends Omit<PrdQuestionnaireProps, 'data'> {
30
+ /** Questionnaire data — null while loading */
31
+ data: PrdQuestionnaireData | null;
30
32
  /** Whether the drawer is open */
31
33
  open: boolean;
32
34
  /** Callback when drawer should close */
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { Loader2 } from 'lucide-react';
3
4
  import { ReviewDrawerShell } from '@/components/common/review-drawer-shell';
4
5
  import { PrdQuestionnaire } from './prd-questionnaire';
5
6
  import type { PrdQuestionnaireDrawerProps } from './prd-questionnaire-config';
@@ -15,6 +16,7 @@ export function PrdQuestionnaireDrawer({
15
16
  specPath,
16
17
  onDelete,
17
18
  isDeleting,
19
+ data,
18
20
  ...questionnaireProps
19
21
  }: PrdQuestionnaireDrawerProps) {
20
22
  return (
@@ -30,7 +32,13 @@ export function PrdQuestionnaireDrawer({
30
32
  onDelete={onDelete}
31
33
  isDeleting={isDeleting}
32
34
  >
33
- <PrdQuestionnaire {...questionnaireProps} />
35
+ {data ? (
36
+ <PrdQuestionnaire data={data} {...questionnaireProps} />
37
+ ) : (
38
+ <div className="flex items-center justify-center p-8">
39
+ <Loader2 className="text-muted-foreground h-6 w-6 animate-spin" />
40
+ </div>
41
+ )}
34
42
  </ReviewDrawerShell>
35
43
  );
36
44
  }
@@ -63,7 +63,7 @@ export function ReviewDrawerShell({
63
63
  </button>
64
64
 
65
65
  {/* Header */}
66
- <DrawerHeader>
66
+ <DrawerHeader data-testid="feature-drawer-header">
67
67
  <DrawerTitle>{featureName}</DrawerTitle>
68
68
  {featureDescription ? (
69
69
  <DrawerDescription>{featureDescription}</DrawerDescription>
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { Loader2 } from 'lucide-react';
3
4
  import { ReviewDrawerShell } from '@/components/common/review-drawer-shell';
4
5
  import { TechDecisionsReview } from './tech-decisions-review';
5
6
  import type { TechDecisionsDrawerProps } from './tech-decisions-review-config';
@@ -14,6 +15,7 @@ export function TechDecisionsDrawer({
14
15
  specPath,
15
16
  onDelete,
16
17
  isDeleting,
18
+ data,
17
19
  ...reviewProps
18
20
  }: TechDecisionsDrawerProps) {
19
21
  return (
@@ -28,7 +30,13 @@ export function TechDecisionsDrawer({
28
30
  onDelete={onDelete}
29
31
  isDeleting={isDeleting}
30
32
  >
31
- <TechDecisionsReview {...reviewProps} />
33
+ {data ? (
34
+ <TechDecisionsReview data={data} {...reviewProps} />
35
+ ) : (
36
+ <div className="flex items-center justify-center p-8">
37
+ <Loader2 className="text-muted-foreground h-6 w-6 animate-spin" />
38
+ </div>
39
+ )}
32
40
  </ReviewDrawerShell>
33
41
  );
34
42
  }
@@ -22,7 +22,9 @@ export interface TechDecisionsReviewProps {
22
22
  isRejecting?: boolean;
23
23
  }
24
24
 
25
- export interface TechDecisionsDrawerProps extends TechDecisionsReviewProps {
25
+ export interface TechDecisionsDrawerProps extends Omit<TechDecisionsReviewProps, 'data'> {
26
+ /** Tech decisions data — null while loading */
27
+ data: TechDecisionsReviewData | null;
26
28
  /** Whether the drawer is open */
27
29
  open: boolean;
28
30
  /** Callback when drawer should close */
@@ -351,9 +351,9 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
351
351
  onDelete={handleDeleteFeature}
352
352
  isDeleting={isDeleting}
353
353
  />
354
- {questionnaireData ? (
354
+ {showPrdDrawer ? (
355
355
  <PrdQuestionnaireDrawer
356
- open={showPrdDrawer}
356
+ open
357
357
  onClose={clearSelection}
358
358
  featureName={selectedNode?.name ?? ''}
359
359
  featureDescription={selectedNode?.description}
@@ -372,9 +372,9 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
372
372
  isProcessing={isLoadingQuestionnaire}
373
373
  />
374
374
  ) : null}
375
- {techDecisionsData ? (
375
+ {showTechDecisionsDrawer ? (
376
376
  <TechDecisionsDrawer
377
- open={showTechDecisionsDrawer}
377
+ open
378
378
  onClose={clearSelection}
379
379
  featureName={selectedNode?.name ?? ''}
380
380
  featureId={selectedNode?.featureId}
@@ -390,9 +390,9 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
390
390
  isProcessing={isLoadingTechDecisions}
391
391
  />
392
392
  ) : null}
393
- {mergeReviewData ? (
393
+ {showMergeReviewDrawer ? (
394
394
  <MergeReviewDrawer
395
- open={showMergeReviewDrawer}
395
+ open
396
396
  onClose={clearSelection}
397
397
  featureName={selectedNode?.name ?? ''}
398
398
  featureId={selectedNode?.featureId}
@@ -49,7 +49,19 @@ export function useControlCenterState(
49
49
  ): ControlCenterState {
50
50
  const router = useRouter();
51
51
  const [nodes, setNodes] = useState<CanvasNodeType[]>(initialNodes);
52
- const [edges, setEdges] = useState<Edge[]>(initialEdges);
52
+ // eslint-disable-next-line react/hook-use-state -- raw setter renamed; public setEdges wrapper keeps edgesRef in sync
53
+ const [edges, setEdgesRaw] = useState<Edge[]>(initialEdges);
54
+ const edgesRef = useRef<Edge[]>(initialEdges);
55
+
56
+ // Wrapper that keeps edgesRef in sync with edges state, allowing
57
+ // createFeatureNode to read current edges without a closure dependency.
58
+ const setEdges = useCallback((update: Edge[] | ((prev: Edge[]) => Edge[])) => {
59
+ setEdgesRaw((prev) => {
60
+ const next = typeof update === 'function' ? update(prev) : update;
61
+ edgesRef.current = next;
62
+ return next;
63
+ });
64
+ }, []);
53
65
  const [selectedNode, setSelectedNode] = useState<FeatureNodeData | null>(null);
54
66
  const [isCreateDrawerOpen, setIsCreateDrawerOpen] = useState(false);
55
67
  const [isDeleting, setIsDeleting] = useState(false);
@@ -103,7 +115,7 @@ export function useControlCenterState(
103
115
 
104
116
  useEffect(() => {
105
117
  setEdges(initialEdges);
106
- }, [initialEdgeKey, initialEdges]);
118
+ }, [initialEdgeKey, initialEdges, setEdges]);
107
119
 
108
120
  // Refresh server data when SSE agent events arrive (status changes)
109
121
  const { lastEvent } = useAgentEventsContext();
@@ -145,35 +157,38 @@ export function useControlCenterState(
145
157
  return () => document.removeEventListener('keydown', handleKeyDown);
146
158
  }, [clearSelection]);
147
159
 
148
- const handleConnect = useCallback((connection: Connection) => {
149
- if (!connection.source || !connection.target) return;
160
+ const handleConnect = useCallback(
161
+ (connection: Connection) => {
162
+ if (!connection.source || !connection.target) return;
150
163
 
151
- setNodes((currentNodes) => {
152
- const sourceNode = currentNodes.find((n) => n.id === connection.source);
153
- if (sourceNode?.type !== 'repositoryNode') return currentNodes;
154
-
155
- // Block if target feature already has a repo source
156
- setEdges((currentEdges) => {
157
- const targetAlreadyHasRepo = currentEdges.some((e) => {
158
- const edgeSource = currentNodes.find((n) => n.id === e.source);
159
- return edgeSource?.type === 'repositoryNode' && e.target === connection.target;
164
+ setNodes((currentNodes) => {
165
+ const sourceNode = currentNodes.find((n) => n.id === connection.source);
166
+ if (sourceNode?.type !== 'repositoryNode') return currentNodes;
167
+
168
+ // Block if target feature already has a repo source
169
+ setEdges((currentEdges) => {
170
+ const targetAlreadyHasRepo = currentEdges.some((e) => {
171
+ const edgeSource = currentNodes.find((n) => n.id === e.source);
172
+ return edgeSource?.type === 'repositoryNode' && e.target === connection.target;
173
+ });
174
+ if (targetAlreadyHasRepo) return currentEdges;
175
+
176
+ return [
177
+ ...currentEdges,
178
+ {
179
+ id: `edge-${connection.source}-${connection.target}`,
180
+ source: connection.source,
181
+ target: connection.target,
182
+ style: { strokeDasharray: '5 5' },
183
+ },
184
+ ];
160
185
  });
161
- if (targetAlreadyHasRepo) return currentEdges;
162
186
 
163
- return [
164
- ...currentEdges,
165
- {
166
- id: `edge-${connection.source}-${connection.target}`,
167
- source: connection.source,
168
- target: connection.target,
169
- style: { strokeDasharray: '5 5' },
170
- },
171
- ];
187
+ return currentNodes;
172
188
  });
173
-
174
- return currentNodes;
175
- });
176
- }, []);
189
+ },
190
+ [setEdges]
191
+ );
177
192
 
178
193
  const createFeatureNode = useCallback(
179
194
  (sourceNodeId: string | null, dataOverride?: Partial<FeatureNodeData>): string => {
@@ -190,9 +205,10 @@ export function useControlCenterState(
190
205
  };
191
206
 
192
207
  setNodes((currentNodes) => {
193
- // Find siblings connected to the same parent
208
+ // Read edges from ref to avoid closure dependency on `edges` state.
209
+ // edgesRef is kept in sync by the setEdges wrapper.
194
210
  const siblingIds = sourceNodeId
195
- ? new Set(edges.filter((e) => e.source === sourceNodeId).map((e) => e.target))
211
+ ? new Set(edgesRef.current.filter((e) => e.source === sourceNodeId).map((e) => e.target))
196
212
  : new Set<string>();
197
213
  const siblings = currentNodes.filter((n) => siblingIds.has(n.id));
198
214
 
@@ -290,7 +306,7 @@ export function useControlCenterState(
290
306
 
291
307
  return id;
292
308
  },
293
- [edges]
309
+ [setEdges]
294
310
  );
295
311
 
296
312
  const handleAddFeature = useCallback(() => {
@@ -332,7 +348,7 @@ export function useControlCenterState(
332
348
  toast.error('Failed to create feature');
333
349
  });
334
350
  },
335
- [router, createFeatureNode, pendingRepoNodeId]
351
+ [router, createFeatureNode, pendingRepoNodeId, setEdges]
336
352
  );
337
353
 
338
354
  const closeCreateDrawer = useCallback(() => {
@@ -372,7 +388,7 @@ export function useControlCenterState(
372
388
  setIsDeleting(false);
373
389
  }
374
390
  },
375
- [router, edges]
391
+ [router, edges, setEdges]
376
392
  );
377
393
 
378
394
  const handleDeleteRepository = useCallback(
@@ -399,7 +415,7 @@ export function useControlCenterState(
399
415
  router.refresh();
400
416
  }
401
417
  },
402
- [router]
418
+ [router, setEdges]
403
419
  );
404
420
 
405
421
  const handleAddFeatureToRepo = useCallback((repoNodeId: string) => {
@@ -428,7 +444,7 @@ export function useControlCenterState(
428
444
  return result.nodes;
429
445
  });
430
446
  },
431
- [edges]
447
+ [edges, setEdges]
432
448
  );
433
449
 
434
450
  const handleAddRepository = useCallback(
@@ -535,7 +551,7 @@ export function useControlCenterState(
535
551
  toast.error('Failed to add repository');
536
552
  });
537
553
  },
538
- [router]
554
+ [router, setEdges]
539
555
  );
540
556
 
541
557
  const pendingNode = pendingRepoNodeId ? nodes.find((n) => n.id === pendingRepoNodeId) : null;