@shepai/cli 1.46.0 → 1.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  2. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  3. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  4. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +11 -0
  5. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -0
  6. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +15 -0
  7. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +5 -1
  8. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  9. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +25 -7
  10. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +17 -0
  11. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  12. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +54 -2
  13. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +12 -2
  15. package/dist/tsconfig.build.tsbuildinfo +1 -1
  16. package/package.json +1 -1
  17. package/web/.next/BUILD_ID +1 -1
  18. package/web/.next/build-manifest.json +2 -2
  19. package/web/.next/cache/.previewinfo +1 -1
  20. package/web/.next/cache/.rscinfo +1 -1
  21. package/web/.next/cache/.tsbuildinfo +1 -1
  22. package/web/.next/cache/config.json +3 -3
  23. package/web/.next/fallback-build-manifest.json +2 -2
  24. package/web/.next/prerender-manifest.json +3 -3
  25. package/web/.next/required-server-files.js +1 -1
  26. package/web/.next/required-server-files.json +1 -1
  27. package/web/.next/server/app/_global-error.html +2 -2
  28. package/web/.next/server/app/_global-error.rsc +1 -1
  29. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  30. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  31. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/web/.next/server/app/page/server-reference-manifest.json +37 -22
  35. package/web/.next/server/app/page.js +1 -1
  36. package/web/.next/server/app/page.js.nft.json +1 -1
  37. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +4 -4
  39. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
  40. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  41. package/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js +9 -0
  42. package/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js.map +1 -0
  43. package/web/.next/server/pages/500.html +2 -2
  44. package/web/.next/server/server-reference-manifest.js +1 -1
  45. package/web/.next/server/server-reference-manifest.json +38 -23
  46. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  47. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  48. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  49. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  50. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  51. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  52. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  53. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  54. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  55. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  56. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  57. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +37 -22
  58. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  59. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  60. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  61. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +4 -4
  62. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  63. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js +9 -0
  64. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  65. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  66. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +38 -23
  67. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +5 -1
  68. package/web/.next/standalone/src/presentation/web/app/actions/get-workflow-defaults.ts +28 -0
  69. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +74 -1
  70. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +55 -5
  71. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +14 -0
  72. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  73. package/web/.next/static/chunks/{ecf44fa8a155c854.js → 779c99975c85389e.js} +4 -4
  74. package/web/.next/trace +1 -1
  75. package/web/.next/trace-build +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__4e8ca89c._.js +0 -9
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__4e8ca89c._.js.map +0 -1
  78. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__4e8ca89c._.js +0 -9
  79. /package/web/.next/static/{nM-uXIiW9k_0Z_GM_4bI4 → wQ3vPV9I8JeacVNyp4HFg}/_buildManifest.js +0 -0
  80. /package/web/.next/static/{nM-uXIiW9k_0Z_GM_4bI4 → wQ3vPV9I8JeacVNyp4HFg}/_clientMiddlewareManifest.json +0 -0
  81. /package/web/.next/static/{nM-uXIiW9k_0Z_GM_4bI4 → wQ3vPV9I8JeacVNyp4HFg}/_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.45.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.46.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)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__249c74f6._.js.map
@@ -0,0 +1,9 @@
1
+ module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},96380,a=>{"use strict";function b(a){let b=globalThis.__shepContainer;if(!b)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return b.resolve(a)}a.s(["resolve",()=>b])},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"))},94090,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{approved:!1,error:"Feature not found"};if(!d.agentRunId)return{approved:!1,error:"Feature has no agent run"};let e=(0,c.resolve)("ApproveAgentRunUseCase"),f=await e.execute(d.agentRunId);if(!f.approved)return{approved:!1,error:f.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(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 g(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,"40d0a3e706fa8b01e4364b67a1f80c2f26dc02af10",null),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"40115d3ddb31ff86dafde210f83d4d01739ef550de",null),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"403ea6c9bd10b21438b631731894e18e2c9a72a037",null);let h="__shepSettings";function i(){let a=function(){let a=globalThis[h];if(null!=a)return a;let b=process[h];return null!=b?b:null}();if(null===a)throw Error("Settings not initialized. Call initializeSettings() during CLI bootstrap.");return a}async function j(){let{workflow:a}=i();return{approvalGates:{allowPrd:a.approvalGateDefaults.allowPrd,allowPlan:a.approvalGateDefaults.allowPlan,allowMerge:a.approvalGateDefaults.allowMerge},push:a.approvalGateDefaults.pushOnImplementationComplete,openPr:a.openPrOnImplementationComplete}}async function k(a){let{repositoryPath:b,branch:d}=a;if(!b?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};let e=i().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)([j]),(0,b.registerServerReference)(j,"0093c723faa4b6cfd43ff6a346973c45dcdafd917c",null),(0,d.ensureServerEntryExports)([k]),(0,b.registerServerReference)(k,"40a30ff303cb355d994314077a44146c2afe41633a",null);var l=a.i(2157),m=a.i(60526),n=a.i(74533),o=a.i(66680),p=a.i(50227);async function q(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=i().environment.shellPreference,f=c?(a=(0,o.createHash)("sha256").update(b).digest("hex").slice(0,16),d=c.replace(/\//g,"-"),(0,p.join)(process.env.SHEP_HOME??(0,p.join)((0,m.homedir)(),".shep"),"repos",a,"wt",d)):b;if(!(0,l.existsSync)(f))return{success:!1,error:`Path does not exist: ${f}`};return(0,m.platform)(),(0,n.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 r(a){if(!a?.startsWith("/"))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,l.existsSync)(a))return{success:!1,error:"Directory not found"};return(0,m.platform)(),(0,n.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)([q]),(0,b.registerServerReference)(q,"40c994b683284ab7c96f945c8b95fb023aa0ffc854",null),(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"40ed3604b89a263f2d2428a04b03e0397d4d1dfe14",null);let s={platform:process.platform,exec:(a,b)=>(0,n.execSync)(a,b)},t={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 u{deps;constructor(a={}){this.deps={...s,...a}}getCommand(){return t[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 v(){let a=new u;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}async function w(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
+
4
+ ${b}`),c&&c.length>0){let a=c.map(a=>`- ${a.path}`).join("\n");d+=`
5
+
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 x(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 y(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 z(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)([v]),(0,b.registerServerReference)(v,"002cfb464c1d3ab32bd963f49035b100891de6215e",null),(0,d.ensureServerEntryExports)([w]),(0,b.registerServerReference)(w,"40ebcd0e44246e2d829ed41e5882ccfc8f2d9ea549",null),(0,d.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"40aeecbe93c1ac4107b91ca18021b180088949d524",null),(0,d.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"40f460f3a71643a4470fe6b0624a42ffe4328ac96a",null),(0,d.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"40076d6aa59873fb8fc1482d79ec46f1190e5586ed",null),a.s([],59684),a.i(59684),a.s(["002cfb464c1d3ab32bd963f49035b100891de6215e",()=>v,"0093c723faa4b6cfd43ff6a346973c45dcdafd917c",()=>j,"40076d6aa59873fb8fc1482d79ec46f1190e5586ed",()=>z,"40115d3ddb31ff86dafde210f83d4d01739ef550de",()=>f,"403ea6c9bd10b21438b631731894e18e2c9a72a037",()=>g,"40a30ff303cb355d994314077a44146c2afe41633a",()=>k,"40aeecbe93c1ac4107b91ca18021b180088949d524",()=>x,"40c994b683284ab7c96f945c8b95fb023aa0ffc854",()=>q,"40d0a3e706fa8b01e4364b67a1f80c2f26dc02af10",()=>e,"40ebcd0e44246e2d829ed41e5882ccfc8f2d9ea549",()=>w,"40ed3604b89a263f2d2428a04b03e0397d4d1dfe14",()=>r,"40f460f3a71643a4470fe6b0624a42ffe4328ac96a",()=>y],94090)}];
8
+
9
+ //# sourceMappingURL=%5Broot-of-the-server%5D__d6d75c22._.js.map
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--nM_uXIiW9k_0Z_GM_4bI4--><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\":\"nM-uXIiW9k_0Z_GM_4bI4\",\"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><!--wQ3vPV9I8JeacVNyp4HFg--><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\":\"wQ3vPV9I8JeacVNyp4HFg\",\"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 \"40ec19e5dbcddd81282a5e566066b8fe1b310f1786\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"407ac719162649e3a92d1d66213136b4f3049706b1\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"404bd4c7e835b3c134b911ca855719ad0541728c9f\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"40ef4c3a7d8c17c97a759027453ae9fb2a674eb831\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"4083093b10c0bf2c4b635ab659b9047b7ee71f2eec\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"406b0905f6f16e1cbe4c3e457de80482ec1de3f298\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"00e5fbd6452e1769c8d04f2f456d45281bef984172\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"40ad939617f957f8c29d2c37c088433f000f3fa4df\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"40ef8320799551d45d3bc1579b90bf9e0e62a7ffa7\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"40b2dd613250d04133b76e2b6972c715bf57e4bd99\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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 \"40eadea1d575abd2b4f8bffd4e55fa1411b42a8169\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 23768,\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\": \"GgVq/PcpPblftJmrvtOlevtwRA1pxQYdoN2fEZDJXaI=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"40d0a3e706fa8b01e4364b67a1f80c2f26dc02af10\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40115d3ddb31ff86dafde210f83d4d01739ef550de\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"403ea6c9bd10b21438b631731894e18e2c9a72a037\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"0093c723faa4b6cfd43ff6a346973c45dcdafd917c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40a30ff303cb355d994314077a44146c2afe41633a\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40c994b683284ab7c96f945c8b95fb023aa0ffc854\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40ed3604b89a263f2d2428a04b03e0397d4d1dfe14\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"002cfb464c1d3ab32bd963f49035b100891de6215e\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40ebcd0e44246e2d829ed41e5882ccfc8f2d9ea549\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40aeecbe93c1ac4107b91ca18021b180088949d524\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40f460f3a71643a4470fe6b0624a42ffe4328ac96a\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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 \"40076d6aa59873fb8fc1482d79ec46f1190e5586ed\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 94090,\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\": \"NtfNvj3HgiKgYLoNQgEO3FR4k83Rs/qJeYJ3CJR63lI=\"\n}"
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "node": {
3
- "40ec19e5dbcddd81282a5e566066b8fe1b310f1786": {
3
+ "40d0a3e706fa8b01e4364b67a1f80c2f26dc02af10": {
4
4
  "workers": {
5
5
  "app/page": {
6
- "moduleId": 23768,
6
+ "moduleId": 94090,
7
7
  "async": false,
8
8
  "exportedName": "approveFeature",
9
9
  "filename": "src/presentation/web/app/actions/approve-feature.ts"
@@ -15,10 +15,10 @@
15
15
  "filename": "src/presentation/web/app/actions/approve-feature.ts",
16
16
  "exportedName": "approveFeature"
17
17
  },
18
- "407ac719162649e3a92d1d66213136b4f3049706b1": {
18
+ "40115d3ddb31ff86dafde210f83d4d01739ef550de": {
19
19
  "workers": {
20
20
  "app/page": {
21
- "moduleId": 23768,
21
+ "moduleId": 94090,
22
22
  "async": false,
23
23
  "exportedName": "getFeatureArtifact",
24
24
  "filename": "src/presentation/web/app/actions/get-feature-artifact.ts"
@@ -30,10 +30,10 @@
30
30
  "filename": "src/presentation/web/app/actions/get-feature-artifact.ts",
31
31
  "exportedName": "getFeatureArtifact"
32
32
  },
33
- "404bd4c7e835b3c134b911ca855719ad0541728c9f": {
33
+ "403ea6c9bd10b21438b631731894e18e2c9a72a037": {
34
34
  "workers": {
35
35
  "app/page": {
36
- "moduleId": 23768,
36
+ "moduleId": 94090,
37
37
  "async": false,
38
38
  "exportedName": "getResearchArtifact",
39
39
  "filename": "src/presentation/web/app/actions/get-research-artifact.ts"
@@ -45,10 +45,25 @@
45
45
  "filename": "src/presentation/web/app/actions/get-research-artifact.ts",
46
46
  "exportedName": "getResearchArtifact"
47
47
  },
48
- "40ef4c3a7d8c17c97a759027453ae9fb2a674eb831": {
48
+ "0093c723faa4b6cfd43ff6a346973c45dcdafd917c": {
49
49
  "workers": {
50
50
  "app/page": {
51
- "moduleId": 23768,
51
+ "moduleId": 94090,
52
+ "async": false,
53
+ "exportedName": "getWorkflowDefaults",
54
+ "filename": "src/presentation/web/app/actions/get-workflow-defaults.ts"
55
+ }
56
+ },
57
+ "layer": {
58
+ "app/page": "action-browser"
59
+ },
60
+ "filename": "src/presentation/web/app/actions/get-workflow-defaults.ts",
61
+ "exportedName": "getWorkflowDefaults"
62
+ },
63
+ "40a30ff303cb355d994314077a44146c2afe41633a": {
64
+ "workers": {
65
+ "app/page": {
66
+ "moduleId": 94090,
52
67
  "async": false,
53
68
  "exportedName": "openIde",
54
69
  "filename": "src/presentation/web/app/actions/open-ide.ts"
@@ -60,10 +75,10 @@
60
75
  "filename": "src/presentation/web/app/actions/open-ide.ts",
61
76
  "exportedName": "openIde"
62
77
  },
63
- "4083093b10c0bf2c4b635ab659b9047b7ee71f2eec": {
78
+ "40c994b683284ab7c96f945c8b95fb023aa0ffc854": {
64
79
  "workers": {
65
80
  "app/page": {
66
- "moduleId": 23768,
81
+ "moduleId": 94090,
67
82
  "async": false,
68
83
  "exportedName": "openShell",
69
84
  "filename": "src/presentation/web/app/actions/open-shell.ts"
@@ -75,10 +90,10 @@
75
90
  "filename": "src/presentation/web/app/actions/open-shell.ts",
76
91
  "exportedName": "openShell"
77
92
  },
78
- "406b0905f6f16e1cbe4c3e457de80482ec1de3f298": {
93
+ "40ed3604b89a263f2d2428a04b03e0397d4d1dfe14": {
79
94
  "workers": {
80
95
  "app/page": {
81
- "moduleId": 23768,
96
+ "moduleId": 94090,
82
97
  "async": false,
83
98
  "exportedName": "openFolder",
84
99
  "filename": "src/presentation/web/app/actions/open-folder.ts"
@@ -90,10 +105,10 @@
90
105
  "filename": "src/presentation/web/app/actions/open-folder.ts",
91
106
  "exportedName": "openFolder"
92
107
  },
93
- "00e5fbd6452e1769c8d04f2f456d45281bef984172": {
108
+ "002cfb464c1d3ab32bd963f49035b100891de6215e": {
94
109
  "workers": {
95
110
  "app/page": {
96
- "moduleId": 23768,
111
+ "moduleId": 94090,
97
112
  "async": false,
98
113
  "exportedName": "pickFolder",
99
114
  "filename": "src/presentation/web/app/actions/pick-folder.ts"
@@ -105,10 +120,10 @@
105
120
  "filename": "src/presentation/web/app/actions/pick-folder.ts",
106
121
  "exportedName": "pickFolder"
107
122
  },
108
- "40ad939617f957f8c29d2c37c088433f000f3fa4df": {
123
+ "40ebcd0e44246e2d829ed41e5882ccfc8f2d9ea549": {
109
124
  "workers": {
110
125
  "app/page": {
111
- "moduleId": 23768,
126
+ "moduleId": 94090,
112
127
  "async": false,
113
128
  "exportedName": "createFeature",
114
129
  "filename": "src/presentation/web/app/actions/create-feature.ts"
@@ -120,10 +135,10 @@
120
135
  "filename": "src/presentation/web/app/actions/create-feature.ts",
121
136
  "exportedName": "createFeature"
122
137
  },
123
- "40ef8320799551d45d3bc1579b90bf9e0e62a7ffa7": {
138
+ "40aeecbe93c1ac4107b91ca18021b180088949d524": {
124
139
  "workers": {
125
140
  "app/page": {
126
- "moduleId": 23768,
141
+ "moduleId": 94090,
127
142
  "async": false,
128
143
  "exportedName": "deleteFeature",
129
144
  "filename": "src/presentation/web/app/actions/delete-feature.ts"
@@ -135,10 +150,10 @@
135
150
  "filename": "src/presentation/web/app/actions/delete-feature.ts",
136
151
  "exportedName": "deleteFeature"
137
152
  },
138
- "40b2dd613250d04133b76e2b6972c715bf57e4bd99": {
153
+ "40f460f3a71643a4470fe6b0624a42ffe4328ac96a": {
139
154
  "workers": {
140
155
  "app/page": {
141
- "moduleId": 23768,
156
+ "moduleId": 94090,
142
157
  "async": false,
143
158
  "exportedName": "addRepository",
144
159
  "filename": "src/presentation/web/app/actions/add-repository.ts"
@@ -150,10 +165,10 @@
150
165
  "filename": "src/presentation/web/app/actions/add-repository.ts",
151
166
  "exportedName": "addRepository"
152
167
  },
153
- "40eadea1d575abd2b4f8bffd4e55fa1411b42a8169": {
168
+ "40076d6aa59873fb8fc1482d79ec46f1190e5586ed": {
154
169
  "workers": {
155
170
  "app/page": {
156
- "moduleId": 23768,
171
+ "moduleId": 94090,
157
172
  "async": false,
158
173
  "exportedName": "deleteRepository",
159
174
  "filename": "src/presentation/web/app/actions/delete-repository.ts"
@@ -167,5 +182,5 @@
167
182
  }
168
183
  },
169
184
  "edge": {},
170
- "encryptionKey": "GgVq/PcpPblftJmrvtOlevtwRA1pxQYdoN2fEZDJXaI="
185
+ "encryptionKey": "NtfNvj3HgiKgYLoNQgEO3FR4k83Rs/qJeYJ3CJR63lI="
171
186
  }
@@ -25,6 +25,8 @@ interface CreateFeatureInput {
25
25
  allowPlan: boolean;
26
26
  allowMerge?: boolean;
27
27
  };
28
+ push?: boolean;
29
+ openPr?: boolean;
28
30
  }
29
31
 
30
32
  function composeUserInput(
@@ -49,7 +51,7 @@ function composeUserInput(
49
51
  export async function createFeature(
50
52
  input: CreateFeatureInput
51
53
  ): Promise<{ feature?: Feature; error?: string }> {
52
- const { name, description, repositoryPath, attachments, approvalGates } = input;
54
+ const { name, description, repositoryPath, attachments, approvalGates, push, openPr } = input;
53
55
 
54
56
  if (!name?.trim()) {
55
57
  return { error: 'name is required' };
@@ -72,6 +74,8 @@ export async function createFeature(
72
74
  userInput,
73
75
  repositoryPath,
74
76
  approvalGates: gates,
77
+ push: push ?? false,
78
+ openPr: openPr ?? false,
75
79
  });
76
80
  return { feature: result.feature };
77
81
  } catch (error: unknown) {
@@ -0,0 +1,28 @@
1
+ 'use server';
2
+
3
+ import { getSettings } from '@shepai/core/infrastructure/services/settings.service';
4
+
5
+ export interface WorkflowDefaults {
6
+ approvalGates: {
7
+ allowPrd: boolean;
8
+ allowPlan: boolean;
9
+ allowMerge: boolean;
10
+ };
11
+ push: boolean;
12
+ openPr: boolean;
13
+ }
14
+
15
+ export async function getWorkflowDefaults(): Promise<WorkflowDefaults> {
16
+ const settings = getSettings();
17
+ const { workflow } = settings;
18
+
19
+ return {
20
+ approvalGates: {
21
+ allowPrd: workflow.approvalGateDefaults.allowPrd,
22
+ allowPlan: workflow.approvalGateDefaults.allowPlan,
23
+ allowMerge: workflow.approvalGateDefaults.allowMerge,
24
+ },
25
+ push: workflow.approvalGateDefaults.pushOnImplementationComplete,
26
+ openPr: workflow.openPrOnImplementationComplete,
27
+ };
28
+ }
@@ -3,6 +3,7 @@ import type { Meta, StoryObj } from '@storybook/react';
3
3
  import { within, userEvent, fn } from '@storybook/test';
4
4
  import { FeatureCreateDrawer } from './feature-create-drawer';
5
5
  import type { FeatureCreatePayload } from './feature-create-drawer';
6
+ import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
6
7
  import { Button } from '@/components/ui/button';
7
8
 
8
9
  /* ---------------------------------------------------------------------------
@@ -81,7 +82,13 @@ const logClose = fn().mockName('onClose');
81
82
  * ------------------------------------------------------------------------- */
82
83
 
83
84
  /** Starts closed — click button to open. Actions are logged. */
84
- function CreateDrawerTrigger({ label = 'Open Create Feature' }: { label?: string }) {
85
+ function CreateDrawerTrigger({
86
+ label = 'Open Create Feature',
87
+ workflowDefaults,
88
+ }: {
89
+ label?: string;
90
+ workflowDefaults?: WorkflowDefaults;
91
+ }) {
85
92
  const [open, setOpen] = useState(false);
86
93
 
87
94
  return (
@@ -100,6 +107,7 @@ function CreateDrawerTrigger({ label = 'Open Create Feature' }: { label?: string
100
107
  setOpen(false);
101
108
  }}
102
109
  repositoryPath="/Users/dev/my-repo"
110
+ workflowDefaults={workflowDefaults}
103
111
  />
104
112
  </div>
105
113
  );
@@ -222,6 +230,71 @@ export const MergeOnly: Story = {
222
230
  },
223
231
  };
224
232
 
233
+ /* ---------------------------------------------------------------------------
234
+ * Git checkbox stories
235
+ * ------------------------------------------------------------------------- */
236
+
237
+ /**
238
+ * Push checkbox checked — the "Push" option is enabled so the branch will be
239
+ * pushed to remote after implementation. "Create PR" remains unchecked.
240
+ */
241
+ export const PushOnly: Story = {
242
+ render: () => <CreateDrawerTrigger label="Open (Push Only)" />,
243
+ play: async ({ canvasElement }) => {
244
+ const canvas = within(canvasElement);
245
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Push Only)' }));
246
+
247
+ const body = within(canvasElement.ownerDocument.body);
248
+ const pushCheckbox = await body.findByLabelText('Push');
249
+ await userEvent.click(pushCheckbox);
250
+ },
251
+ };
252
+
253
+ /**
254
+ * Create PR checked — checking "Create PR" auto-checks and disables "Push"
255
+ * because a PR cannot be created without pushing. Both checkboxes appear
256
+ * checked, but "Push" is non-interactive (disabled).
257
+ */
258
+ export const PrChecked: Story = {
259
+ render: () => <CreateDrawerTrigger label="Open (PR Checked)" />,
260
+ play: async ({ canvasElement }) => {
261
+ const canvas = within(canvasElement);
262
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (PR Checked)' }));
263
+
264
+ const body = within(canvasElement.ownerDocument.body);
265
+ const prCheckbox = await body.findByLabelText('Create PR');
266
+ await userEvent.click(prCheckbox);
267
+ },
268
+ };
269
+
270
+ /* ---------------------------------------------------------------------------
271
+ * Workflow defaults stories
272
+ * ------------------------------------------------------------------------- */
273
+
274
+ const SAMPLE_WORKFLOW_DEFAULTS: WorkflowDefaults = {
275
+ approvalGates: { allowPrd: true, allowPlan: true, allowMerge: false },
276
+ push: true,
277
+ openPr: true,
278
+ };
279
+
280
+ /**
281
+ * Drawer pre-populated from workflow settings — PRD and Plan approval gates
282
+ * are checked, Push and Create PR are enabled. These values come from
283
+ * `shep settings workflow` and are read at mount time via `getWorkflowDefaults()`.
284
+ */
285
+ export const WithWorkflowDefaults: Story = {
286
+ render: () => (
287
+ <CreateDrawerTrigger
288
+ label="Open (Workflow Defaults)"
289
+ workflowDefaults={SAMPLE_WORKFLOW_DEFAULTS}
290
+ />
291
+ ),
292
+ play: async ({ canvasElement }) => {
293
+ const canvas = within(canvasElement);
294
+ await userEvent.click(canvas.getByRole('button', { name: 'Open (Workflow Defaults)' }));
295
+ },
296
+ };
297
+
225
298
  /* ---------------------------------------------------------------------------
226
299
  * Interactive story — full paths shown in submitted data panel
227
300
  * ------------------------------------------------------------------------- */
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { useState, useCallback } from 'react';
3
+ import { useState, useCallback, useEffect } from 'react';
4
4
  import type { LucideIcon } from 'lucide-react';
5
5
  import {
6
6
  XIcon,
@@ -25,9 +25,11 @@ import { Input } from '@/components/ui/input';
25
25
  import { Textarea } from '@/components/ui/textarea';
26
26
  import { Label } from '@/components/ui/label';
27
27
  import { CheckboxGroup } from '@/components/ui/checkbox-group';
28
+ import { CheckboxGroupItem } from '@/components/ui/checkbox-group-item';
28
29
  import { Separator } from '@/components/ui/separator';
29
30
  import { Badge } from '@/components/ui/badge';
30
31
  import type { FileAttachment } from '@shepai/core/infrastructure/services/file-dialog.service';
32
+ import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
31
33
  import { pickFiles } from './pick-files';
32
34
 
33
35
  export type { FileAttachment } from '@shepai/core/infrastructure/services/file-dialog.service';
@@ -42,6 +44,8 @@ export interface FeatureCreatePayload {
42
44
  allowPlan: boolean;
43
45
  allowMerge: boolean;
44
46
  };
47
+ push: boolean;
48
+ openPr: boolean;
45
49
  }
46
50
 
47
51
  const AUTO_APPROVE_OPTIONS = [
@@ -62,6 +66,7 @@ export interface FeatureCreateDrawerProps {
62
66
  onSubmit: (data: FeatureCreatePayload) => void;
63
67
  repositoryPath: string;
64
68
  isSubmitting?: boolean;
69
+ workflowDefaults?: WorkflowDefaults;
65
70
  }
66
71
 
67
72
  export function FeatureCreateDrawer({
@@ -70,18 +75,36 @@ export function FeatureCreateDrawer({
70
75
  onSubmit,
71
76
  repositoryPath,
72
77
  isSubmitting = false,
78
+ workflowDefaults,
73
79
  }: FeatureCreateDrawerProps) {
80
+ const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;
81
+ const defaultPush = workflowDefaults?.push ?? false;
82
+ const defaultOpenPr = workflowDefaults?.openPr ?? false;
83
+
74
84
  const [name, setName] = useState('');
75
85
  const [description, setDescription] = useState('');
76
86
  const [attachments, setAttachments] = useState<FileAttachment[]>([]);
77
- const [approvalGates, setApprovalGates] = useState<Record<string, boolean>>({ ...EMPTY_GATES });
87
+ const [approvalGates, setApprovalGates] = useState<Record<string, boolean>>({ ...defaultGates });
88
+ const [push, setPush] = useState(defaultPush);
89
+ const [openPr, setOpenPr] = useState(defaultOpenPr);
90
+
91
+ // Sync state when workflowDefaults load asynchronously
92
+ useEffect(() => {
93
+ if (workflowDefaults) {
94
+ setApprovalGates({ ...workflowDefaults.approvalGates });
95
+ setPush(workflowDefaults.push);
96
+ setOpenPr(workflowDefaults.openPr);
97
+ }
98
+ }, [workflowDefaults]);
78
99
 
79
100
  const resetForm = useCallback(() => {
80
101
  setName('');
81
102
  setDescription('');
82
103
  setAttachments([]);
83
- setApprovalGates({ ...EMPTY_GATES });
84
- }, []);
104
+ setApprovalGates({ ...defaultGates });
105
+ setPush(defaultPush);
106
+ setOpenPr(defaultOpenPr);
107
+ }, [defaultGates, defaultPush, defaultOpenPr]);
85
108
 
86
109
  const handleOpenChange = useCallback(
87
110
  (nextOpen: boolean) => {
@@ -108,9 +131,11 @@ export function FeatureCreateDrawer({
108
131
  allowPlan: approvalGates.allowPlan ?? false,
109
132
  allowMerge: approvalGates.allowMerge ?? false,
110
133
  },
134
+ push: push || openPr,
135
+ openPr,
111
136
  });
112
137
  },
113
- [name, description, attachments, approvalGates, repositoryPath, onSubmit]
138
+ [name, description, attachments, approvalGates, repositoryPath, onSubmit, push, openPr]
114
139
  );
115
140
 
116
141
  const handleAddFiles = useCallback(async () => {
@@ -211,6 +236,31 @@ export function FeatureCreateDrawer({
211
236
  />
212
237
  </div>
213
238
 
239
+ {/* Git options */}
240
+ <div className="flex flex-col gap-1.5">
241
+ <Label className="text-muted-foreground text-xs font-semibold tracking-wider">
242
+ GIT
243
+ </Label>
244
+ <div className="flex flex-col gap-2">
245
+ <CheckboxGroupItem
246
+ id="push"
247
+ label="Push"
248
+ description="Push branch to remote after implementation."
249
+ checked={push || openPr}
250
+ onCheckedChange={setPush}
251
+ disabled={openPr || isSubmitting}
252
+ />
253
+ <CheckboxGroupItem
254
+ id="open-pr"
255
+ label="Create PR"
256
+ description="Open a pull request after pushing."
257
+ checked={openPr}
258
+ onCheckedChange={setOpenPr}
259
+ disabled={isSubmitting}
260
+ />
261
+ </div>
262
+ </div>
263
+
214
264
  {/* Attachments */}
215
265
  <div className="flex flex-col gap-2">
216
266
  <div className="flex items-center justify-between">
@@ -6,6 +6,8 @@ import { toast } from 'sonner';
6
6
  import { approveFeature } from '@/app/actions/approve-feature';
7
7
  import { getFeatureArtifact } from '@/app/actions/get-feature-artifact';
8
8
  import { getResearchArtifact } from '@/app/actions/get-research-artifact';
9
+ import { getWorkflowDefaults } from '@/app/actions/get-workflow-defaults';
10
+ import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
9
11
  import type { TechDecisionsReviewData } from '@/components/common/tech-decisions-review';
10
12
  import { FeaturesCanvas } from '@/components/features/features-canvas';
11
13
  import type { CanvasNodeType } from '@/components/features/features-canvas';
@@ -44,6 +46,16 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
44
46
  closeCreateDrawer,
45
47
  } = useControlCenterState(initialNodes, initialEdges);
46
48
 
49
+ // Workflow defaults for the create-feature drawer
50
+ const [workflowDefaults, setWorkflowDefaults] = useState<WorkflowDefaults | undefined>();
51
+ useEffect(() => {
52
+ getWorkflowDefaults()
53
+ .then(setWorkflowDefaults)
54
+ .catch(() => {
55
+ // Settings unavailable — drawer falls back to all-false defaults
56
+ });
57
+ }, []);
58
+
47
59
  // PRD questionnaire drawer state
48
60
  const [prdSelections, setPrdSelections] = useState<Record<string, string>>({});
49
61
  const [isPrdProcessing, setIsPrdProcessing] = useState(false);
@@ -204,6 +216,7 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
204
216
  onClose={closeCreateDrawer}
205
217
  onSubmit={handleCreateFeatureSubmit}
206
218
  repositoryPath={pendingRepositoryPath}
219
+ workflowDefaults={workflowDefaults}
207
220
  />
208
221
  </>
209
222
  );
@@ -274,6 +287,7 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
274
287
  onClose={closeCreateDrawer}
275
288
  onSubmit={handleCreateFeatureSubmit}
276
289
  repositoryPath={pendingRepositoryPath}
290
+ workflowDefaults={workflowDefaults}
277
291
  />
278
292
  </>
279
293
  );