@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.
- package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +3 -2
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +3 -2
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +3 -2
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -11
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +6 -5
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +15 -15
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +15 -15
- package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-config.ts +3 -1
- package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-drawer.tsx +9 -1
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.ts +3 -1
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.tsx +9 -1
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.tsx +9 -1
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.ts +3 -1
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +6 -6
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +51 -35
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +6 -5
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{52930750dd593d0c.js → f6f61237a0ec20e3.js} +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- /package/web/.next/static/{xkINn0kUHKOhvEvbvlh-B → w8CFnR5hKioREFJyh8hpW}/_buildManifest.js +0 -0
- /package/web/.next/static/{xkINn0kUHKOhvEvbvlh-B → w8CFnR5hKioREFJyh8hpW}/_clientMiddlewareManifest.json +0 -0
- /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.
|
|
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,"
|
|
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,"
|
|
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><!--
|
|
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\":\"
|
|
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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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 \"
|
|
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}"
|
package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"node": {
|
|
3
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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": "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
{
|
|
354
|
+
{showPrdDrawer ? (
|
|
355
355
|
<PrdQuestionnaireDrawer
|
|
356
|
-
open
|
|
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
|
-
{
|
|
375
|
+
{showTechDecisionsDrawer ? (
|
|
376
376
|
<TechDecisionsDrawer
|
|
377
|
-
open
|
|
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
|
-
{
|
|
393
|
+
{showMergeReviewDrawer ? (
|
|
394
394
|
<MergeReviewDrawer
|
|
395
|
-
open
|
|
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
|
-
|
|
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(
|
|
149
|
-
|
|
160
|
+
const handleConnect = useCallback(
|
|
161
|
+
(connection: Connection) => {
|
|
162
|
+
if (!connection.source || !connection.target) return;
|
|
150
163
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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(
|
|
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
|
-
[
|
|
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;
|